Размещение cURL в Zapier Webhook

Я пытаюсь выполнить POST с помощью cURL на веб-перехватчик Zapier.

Zapier настроен так, что если бы я набрал их URL так - https://zapier.com/hooks/catch/n/[email protected]&guid=foobar

Он получит сообщение, но когда я попытаюсь сделать то же самое с cURL, он не получит его.

Вот мой код для публикации с помощью cURL ->

<?php
    // Initialize curl
    $curl = curl_init();

    // Configure curl options
    $opts = array(
        CURLOPT_URL             => 'https://zapier.com/hooks/catch/n/abcd',
        CURLOPT_RETURNTRANSFER  => true,
        CURLOPT_CUSTOMREQUEST   => 'POST',
        CURLOPT_POST            => 1,
        CURLOPT_POSTFIELDS      => 'guid='+ $_POST["guid"] + '&video_title=' + $_POST["video_title"] + '&email=' + $_POST["email"], 
    );

    // Set curl options
    curl_setopt_array($curl, $opts);

    // Get the results
    $result = curl_exec($curl);

    // Close resource
    curl_close($curl);

    echo $result;
?>

Когда я запускаю это, он показывает успех, но Zapier его не получает.

В документации Zapier кто-то привел пример с правильным сообщением cURL, например ->

curl -v -H "Accept: application/json" \
        -H "Content-type: application/json" \
        -X POST \
        -d '{"first_name":"Bryan","last_name":"Helmig","age":27}' \
        https://zapier.com/hooks/catch/n/Lx2RH/

Я предполагаю, что мне что-то не хватает в файле PHP, помощь очень признательна!


person Stepan Parunashvili    schedule 28.08.2013    source источник


Ответы (3)


Вам нужно json закодировать данные, которые вы отправляете, и также установить тип содержимого:

Изменять:

$opts = array(
    CURLOPT_URL             => 'https://zapier.com/hooks/catch/n/abcd',
    CURLOPT_RETURNTRANSFER  => true,
    CURLOPT_CUSTOMREQUEST   => 'POST',
    CURLOPT_POST            => 1,
    CURLOPT_POSTFIELDS      => 'guid='+ $_POST["guid"] + '&video_title=' + $_POST["video_title"] + '&email=' + $_POST["email"], 
);

to:

$data = array('guid' => $_POST["guid"], 'video_title' => $_POST["video_title"], 'email' => $_POST["email"]);
$jsonEncodedData = json_encode($data);
$opts = array(
    CURLOPT_URL             => 'https://zapier.com/hooks/catch/n/abcd',
    CURLOPT_RETURNTRANSFER  => true,
    CURLOPT_CUSTOMREQUEST   => 'POST',
    CURLOPT_POST            => 1,
    CURLOPT_POSTFIELDS      => $jsonEncodedData,
    CURLOPT_HTTPHEADER  => array('Content-Type: application/json','Content-Length: ' . strlen($jsonEncodedData))                                                                       
);

Это должно сработать.

person Kenny    schedule 28.08.2013
comment
Это все еще актуальный ответ сегодня? Я тоже сталкиваюсь с этой проблемой. - person StephenB; 11.01.2019

Вы не отправляете POSTFIELDS правильно, вам нужно использовать ., а не +, а также вы должны кодировать строку URL ...

$opts = array(
    CURLOPT_URL             => 'https://zapier.com/hooks/catch/n/abcd',
    CURLOPT_HEADER          => false,
    CURLOPT_RETURNTRANSFER  => true,
    CURLOPT_POST            => true,
    CURLOPT_POSTFIELDS      => http_build_query(array('guid' => $_POST['guid'], 'video_title' => $_POST['video_title'], 'email' => $_POST['email']))
);
person fire    schedule 28.08.2013

Вы не получаете его в Zapier, потому что вы не установили структуру «Дочерний ключ». Взгляните на то, что вам нужно сделать, на изображении ниже.

Имейте в виду, что в моем случае я хотел поймать 'company_name'. Вам придется заменить его своим параметром. Вы также можете определить дополнительные параметры или даже полностью изменить структуру «Дочернего ключа».

введите описание изображения здесь

person TheoPlatica    schedule 30.10.2019