Я новичок в Gravity Forms и создании API с использованием PHP. Мне нужно создать скрипт, который всякий раз, когда Gravity Form завершается, API отправляет это как данные JSON на URL-адрес POST. Мне дали имя и значение ключа безопасности, как мне это сделать с помощью PHP? Нужен ли мне JQuery и / или AJAX?
Обновлено:
Это то, что у меня есть до сих пор, но я понятия не имею, на правильном ли я пути: (я пропустил некоторые поля с «X» из-за очевидных потенциальных соображений безопасности)
<?php
function calculate_signature( $string, $private_key ) {
$hash = hash_hmac( 'sha1', $string, $private_key, true );
$sig = rawurlencode( base64_encode( $hash ) );
return $sig;
}
//set API keys
$api_key = 'XXXXXXX';
$private_key = 'XXXXXXXXXX';
//set route
$route = '/XXXXXXX.php';
//creating request URL
$expires = strtotime( '+60 mins' );
$string_to_sign = sprintf( '%s:%s:%s:%s', $api_key, 'POST', $route, $expires );
$sig = calculate_signature( $string_to_sign, $private_key );
$url = 'XXXXXXX.com' . $route . '?api_key=' . $api_key . '&signature=' . $sig . '&expires=' . $expires;
// $form = array(
// array(
// 'title' => 'API Generated Form',
// 'description' => 'This is the description for the form generated by the API',
// 'labelPlacement' => 'top_label',
// 'button' => array(
// 'type' => 'text'
// ),
// 'confirmations' => array(
// array(
// 'id' => 0,
// 'name' => 'Default Confirmation',
// 'type' => 'message',
// 'message' => 'Thanks for contacting us! We will get in touch with you shortly.',
// 'isDefault' => true,
// ),
// ),
// 'fields' => array(
// array(
// 'id' => '1',
// 'label' => 'My Text',
// 'type' => 'text'
// )
// ),
// ),
// );
$form = array(
'age' => NULL
);
//json encode array
$form_json = json_encode( $form );
//retrieve data
$response = wp_remote_request( $url, array( 'method' => 'POST', 'body' => $form_json ) );
if ( wp_remote_retrieve_response_code( $response ) != 200 || ( empty( wp_remote_retrieve_body( $response ) ) ) ){
//http request failed
die( 'There was an error attempting to access the API.' );
}
//result is in the response "body" and is json encoded.
$body = json_decode( wp_remote_retrieve_body( $response ), true );
if ( $body['status'] > 202 ){
$error = $body['response'];
//form insert failed, get error information
$error_code = $error['code'];
$error_message = $error['message'];
$error_data = isset( $error['data'] ) ? $error['data'] : '';
$status = "Code: {$error_code}. Message: {$error_message}. Data: {$error_data}.";
die( "Could not post forms. {$status}" );
}
$form_id = $body['response'][0];
echo 'The following form id was created: ' . $form_id . '</br>';
?>
Да, я действительно спрашиваю, как сделать HTTP-запрос с помощью PHP, потому что я почти не имею представления о том, что делаю. Я уже проверил документацию, поэтому я прошу людей помочь мне разобраться.
И что вам велели делать документы? Мы не знаем, как вы должны предоставить эти учетные данные. Это не одно и то же для всех API в мире. Если вы сообщите нам, как должен выглядеть HTTP-запрос, мы сможем рассказать вам, как написать код для генерации запроса в правильном формате.






"JQuery и / или AJAX?" это браузерные технологии, не связанные напрямую с PHP. Вы действительно спрашиваете, как сделать HTTP-запрос с помощью PHP? В таком случае попробуйте
cURL- php.net/manual/en/book.curl.php. Я предполагаю, что, судя по виду, функция wp_remote_request также выполняет HTTP-запросы. Так что вы можете придерживаться этого. Что касается того, «на правильном ли вы пути» ... что же происходит с вашим кодом, когда вы его запускаете? Кем бы они ни были, они должны были сказать вам, как они ожидают получить этот электронный ключ - например, в заголовке или теле запроса в JSON или другом формате. Проверьте документы.