2017-04-19 9 views
0

特定の期間のPipedrive APIから取引を引き出そうとしています。私は、私が望む日付範囲のAPIを介してフィルタを編集(または作成/削除)してから、すべての取引を引き出すためにそのフィルタを渡します。Pipedrive API PUTおよびPOSTリクエストのフィルタエンドポイントが機能しない

"deals"エンドポイントは完全に機能します。私の問題は、APIが "フィルタ"エンドポイントのために渡している "条件"パラメータが気に入らないように見えることです。しかし、私がcURL(自分のコードで)またはPostmanを使用している場合に限ります。 APIドキュメントの "フィルタの編集"または "フィルタの作成"エンドポイントのいずれかをテストすると、JSONオブジェクトを自分のコードから "条件"パラメータにコピーして貼り付けるときに、ただし、cURLまたはPostmanを使用すると、PUTエンドポイントは編集していないフィルタを編集せずに返し、POSTエンドポイントは空の条件で新しいフィルタを作成します。

ここで私はPOSTエンドポイント用に使用しているPHPのコードです:

$data = [ 
    'name' => 'Custom date range', 
    'type' => 'deals', 
    'conditions' => '{ 
     "glue": "and", 
     "conditions": [ 
      { 
       "glue": "and", 
       "conditions": [ 
        { 
        "object": "deal", 
        "field_id": "12449", 
        "operator": "=", 
        "value": "won", 
        "extra_value": "null" 
        }, 
        { 
         "object": "deal", 
        "field_id": "12455", 
        "operator": ">=", 
        "value": "2017-03-01", 
        "extra_value": "null" 
        }, 
        { 
         "object": "deal", 
        "field_id": "12455", 
        "operator": "<=", 
        "value": "2017-03-10", 
        "extra_value": "null" 
        } 
       ] 
      }, 
      { 
       "glue": "or", 
       "conditions": [] 
      } 
     ] 
    }' 
]; 

$ch = curl_init("https://api.pipedrive.com/v1/filters?api_token=$apiKey"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Accept: application/json;")); 
curl_setopt($ch, CURLOPT_POSTFIELDS,http_build_query($data)); 
$response = curl_exec($ch); 

そして、これは、「フィルタを作成」エンドポイントの「条件」パラメータの説明です:

「フィルタ条件。これは、最小の構造を必要とするJSONオブジェクトとして次のように

{"glue":"and","conditions":[{"glue":"and","conditions": [CONDITION_OBJECTS]},{"glue":"or","conditions":[CONDITION_OBJECTS]}]} 

は、以下の構造のJSONオブジェクトとCONDITION_OBJECTSを交換:

{"object":"","field_id":"", "operator":"","value":"", "extra_value":""} or leave the array empty. 

オブジェクトタイプによっては、別のAPIエンドポイントを使用してfield_idを取得する必要があります。

"person", "deal", "organization", "product", "activity" 

、あなたが持っているフィールドの種類に応じて、事業者のこれらのタイプを使用することができます:

"IS NOT NULL", "IS NULL", "<=", ">=", "<", ">", "!=", "=", "LIKE '%$%'", "NOT LIKE '%$%'", "LIKE '$%'", "NOT LIKE '$%'", "LIKE '%$'", "NOT LIKE '%$'". 

方法の理解を得るために、あなたが選ぶことができるオブジェクトの5種類があります。フィルタワークはPipedriveアプリケーションから直接作成してみてください」

POSTエンドポイントの「条件」パラメータは同じです。また、大きなJSONオブジェクトをAPIドキュメントテストに貼り付けると、両方のエンドポイントが完全に機能します。私のコードで。どんな助けもappre ciated。

編集:これは私が「フィルタを作成」のエンドポイントのためのcURLから得る応答である:

{#233 ▼ 
    +"id": 60 
    +"name": "Custom date range" 
    +"active_flag": true 
    +"type": "deals" 
    +"temporary_flag": null 
    +"user_id": 504569 
    +"add_time": "2017-04-19 11:18:10" 
    +"update_time": "2017-04-19 11:18:10" 
    +"visible_to": "7" 
    +"custom_view_id": null 
    +"conditions": {#219 ▼ 
     +"glue": "and" 
     +"conditions": array:2 [▼ 
      0 => {#230 ▼ 
       +"glue": "and" 
       +"conditions": [] 
      } 
      1 => {#223 ▼ 
       +"glue": "or" 
       +"conditions": [] 
      } 
     ] 
    } 
} 

エラーなし、しかし、あなたが見ることができるように、条件が空です。また、Pipedrive API用に作成されたPHPラッパーを試したところ、同じ結果が得られました。

+0

Curlがスローするエラーを表示します。 http://stackoverflow.com/questions/3987006/how-to-catch-curl-errors-in-php – Samir

+0

@Samirは私が得ている回答でOPを編集しました。エラーはスローされません。 –

答えて

1

パイプエンジニアのエンジニアはこちらです。ここに私がテストした例があります..

<?php 
$data = ' 
{ 
    "name":"Custom filter less than 1000", 
    "type":"deals", 
    "visible_to":1, 
    "conditions":{ 
     "glue": "and", 
     "conditions":[ 
      { 
       "glue": "and", 
       "conditions": [ 
         { 
          "object": "deal", 
          "field_id": "12452", 
          "operator": "<", 
          "value": 1000, 
          "extra_value": null 
         } 
        ] 
       }, 
      { 
       "glue": "or", 
       "conditions": [] 
      } 
     ] 
    } 
} 
'; 

$ch = curl_init("https://api.pipedrive.com/v1/filters?api_token=xxx"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json;', 'Content-Type: application/json')); 
curl_setopt($ch, CURLOPT_POST,   1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
$response = curl_exec($ch); 

echo $response; 

お知らせ

  1. 全体JSONは、生の投稿であることを
  2. 私は

フィルタリングAPIは、我々は非常に複雑で、visible_toのPARAMを追加

  • Content-Typeヘッダを追加しました
  • ドキュメンテーションの改善に取り組んでいます。これが役立つことを願っています

  • +0

    これは完全に機能しました。速やかなご返信ありがとうございます! –

    0

    取引を引き上げるには、GETメソッドを使用する必要があります。 POSTは取引を追加するために使用されます。

    CURLPOSTからGETに変更するとうまくいくはずです。

    +0

    私はこの呼び出しで取引を引き出すつもりはありません。私は2つの呼び出しを行います:1つはカスタム日付範囲のフィルターを作成/編集し、もう1つはそのフィルターを使用して取引を取得します。 2回目のコール(取引の取得)は完全に機能します。しかし、最初のもの(フィルタの作成/編集)は私のためには機能しません。 –

    関連する問題