Создайте новую запись Gravity Forms с внешнего сайта, используя GF WebAPI

У меня есть 2 сайта.

  • Сита А работает на Wordpress и имеет Gravity Forms.
  • Сайт Б пытается использовать веб-API Gravity Forms, чтобы добавить запись в Gravity Forms в Сайт А

Независимо от того, что я пытаюсь сделать, лучший результат, который я могу получить, — это ответ «созданный ресурс» (201) с пустым объектом ответа. Независимо от успешного ответа запись не создается.

{"status":201,"response":[]}

Я могу успешно ПОЛУЧИТЬ данные, поэтому я не думаю, что это проблема аутентификации. В документации говорится, что ответ должен содержать «Локализованное сообщение с описанием результата: «Записи успешно созданы»».

Я пробовал указывать на /entries, а также на /forms/$form_id/entries.

Я установил подключаемый модуль Web API Client и успешно создал с ним запись. Я также изливал этот код тысячу раз. Этот плагин использует wp_remote_request опубликовать данные, которые я не могу использовать, потому что я не использую Wordpress.

Вот текущий код:

<?php
$api_key = '123';
$private_key = 'abc';
$method  = 'POST';
$endpoint = 'http://example.com/gravityformsapi/';
$route = 'entries';
//$route = 'forms/17/entries';
$expires = strtotime('+60 mins');
$string_to_sign = sprintf('%s:%s:%s:%s', $api_key, $method, $route, $expires);
$sig = calculate_signature($string_to_sign, $private_key);

$api_call = $endpoint.$route.'?api_key='.$api_key.'&signature='.$sig.'&expires='.$expires;

$data = array(
    "id" => "",
    "date_created" => "",
    "form_id" => "17",
    "1" => "[email protected]"
);

$ch = curl_init($api_call);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);

$result = curl_exec($ch);

print_r($result);

person gerbz    schedule 19.09.2014    source источник


Ответы (1)


Ваш код близок. Я использовал json_encode вместо http_build_query.

Возможно, вы захотите проверить свою таблицу лидов на наличие потерянных записей.

Вот некоторый код, который работает для меня:

<?php
$api_key = 'keyhere';
$private_key = 'privatekey';
$method  = 'POST';
$endpoint = 'https://www.site.com/gravityformsapi/';
//$route = 'entries';
$route = 'forms/1/entries';
$expires = strtotime('+60 mins');
$string_to_sign = sprintf('%s:%s:%s:%s', $api_key, $method, $route, $expires);
$sig = calculate_signature($string_to_sign, $private_key);

$api_call = $endpoint.$route.'?api_key='.$api_key.'&signature='.$sig.'&expires='.$expires;

//array of entries (each entry is an array with key=field id)
$entries = array(
    array("status"=>"active","1.3"=>"firstname","1.6"=>"lastname","2"=>"","3"=>"[email protected]","4"=>"testtest","5"=>"something else")
);

$ch = curl_init($api_call);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($entries));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);

$result = curl_exec($ch);

print_r($result);//201 status indicates it inserted the entry. Should return id of the entry.

function calculate_signature($string, $private_key) {
    $hash = hash_hmac("sha1", $string, $private_key, true);
    $sig = rawurlencode(base64_encode($hash));
    return $sig;
}
?>
person Brett    schedule 16.12.2014