Pipedrive API PUT和POST请求过滤器端点不起作用

时间:2017-04-19 10:38:25

标签: php api curl pipedrive-api

我试图在特定日期范围内从Pipedrive API中提取优惠。我通过使用我想要的日期范围编辑(或创建/删除)过滤器来完成此操作,然后在后续请求中传入该过滤器以提取所有交易。

"交易"端点工作完美。我的问题是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);

这是&#34;条件&#34;的描述。 &#34;创建过滤器的参数&#34;端点:

&#34;过滤条件作为JSON对象。它需要一个最小结构如下:

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

将CONDITION_OBJECTS替换为以下结构的JSON对象:

{"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 '%$'".

要更好地了解过滤器的工作原理,请尝试直接从Pipedrive应用程序创建它们。&#34;

POST端点&#34;条件&#34;参数是一样的。同样,当我将这个大JSON对象粘贴到API文档测试中时,两个端点都可以完美地工作 - 但不是在我自己的代码中。任何帮助将不胜感激。

编辑:这是我从cURL获得的&#34;创建过滤器&#34;端点:

{#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包装器,并得到了相同的结果。

2 个答案:

答案 0 :(得分:3)

Pipedrive工程师在这里。这是我测试的一个例子..

WFM <- tibble(Date = rep("04/12/2017", 3), Vol = c(NA, 23, 40), Open = c(33.9, NA, 32))

请注意

  1. 整个json是原始发布的
  2. 我添加了Content-Type标题
  3. 我添加了visible_to param
  4. 过滤API非常复杂,我们正致力于改进文档。希望这有帮助

答案 1 :(得分:0)

要提取交易,您应该使用GET方法。 POST用于添加交易。

CURLPOST更改为GET方法,它应该有效。