Intereting Posts
Как я могу использовать PHP в качестве исходного для ионной структуры? PHP в HTML-странице, Super Quick Advice Ошибка: Неизвестный столбец '' в 'списке полей' Ошибка MySQL foreach многомерный массив css динамическая ширина дочерних элементов в родительском контейнере Как можно сфокусировать finfo :: buffer PHP? Генерация ссылок Pagination PHP PHP Yii: подключение к базе данных во время выполнения Возможно ли определить цвет – это светлый или темный цвет? Использование PHP DOM для создания XML-файлов из данных MySQL PHP Pthreads последняя версия 3.1.6 (64 бит), не устанавливаемая на Apache SQLSTATE : Нарушение ограничения целостности: 1452 Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполняется Ошибка проверки парсера XML. Почему мое время () отключено на один час в php? Пользовательское мобильное меню в Drupal 7 не может получить доступ к дочерним ссылкам

Обратный вызов из API не происходит после публикации параметров URL-адреса API со стороны сервера

Описание интеграции API
API нуждается в форме для публикации в URL-адресе API с некоторыми полями ввода и токеном клиента. API обрабатывает, а затем отправляет ответ на файл callback.php на моем сервере. Я могу получить доступ к опубликованным vals, используя $ _POST в этом файле. Это все о существующем методе, и он отлично работает.

требование
Чтобы скрыть значение токена клиента от видимости с клиентской стороны. Поэтому я начал с отправки запроса на отправку серверной стороны.

проблема
Я попробовал много вариантов, но обратного вызова не происходит –

1) Метод CURL

$ch = curl_init(API_URL); $encoded = ''; $_postArray['customer_token'] = API_CUSTOMER_TOKEN; foreach($_postArray as $name => $value) { $encoded .= urlencode($name).'='.urlencode($value).'&'; } // chop off last ampersand $encoded = substr($encoded, 0, strlen($encoded)-1); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $encoded); $resp = curl_exec($ch); curl_close($ch); echo $resp; 

$ resp curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 1, если строка curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); удаляется, но обратного вызова не происходит. Я устанавливаю переменную сеанса в сценарии обратного вызова для проверки. Нужно ли, чтобы API был синхронным, чтобы использовать метод curl, так что curl_exec возвращает ответ?

2) без CURL, как указано в параметрах отправки URL-адреса, используя метод POST без использования формы

Но обратного вызова не происходит.

Я также пробовал использовать следующий код, но выглядит так: моя ссылка не установлена ​​должным образом, потому что HttpRequest () не определен.

 $req = new HttpRequest($apiUrl, HttpRequest::METH_POST); $req->addQueryData($params); try { $r->send(); if ($r->getResponseCode() == 200) { echo "success"; // success! } else { echo "failure"; // got to the API, the API returned perhaps a RESTful response code like 404 } } catch (HttpException $ex) { // couldn't get to the API (probably) } 

Пожалуйста, помогите мне! Мне просто нужно просто отправить запрос на отправку на сервер и получить ответ в файле обратного вызова.

Попробуйте отладить ваш запрос с помощью функции curl_get_info ():

 $header = curl_getinfo($ch); print_r($header); 

Ваш запрос может быть в порядке, но это мой результат в ошибке 404.

EDIT : если вы хотите выполнить почтовый запрос, добавьте это в свой код:

 curl_setopt($ch, CURLOPT_POST, true); 

EDIT : Что-то еще я упомянул в вашем коде: вы использовали «1» в «CURLOPT_RETURNTRANSFER», но должны быть «true»:

 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

По крайней мере, так я обычно это делаю, и вы никогда не знаете, будет ли функция понимать «1» как «истина»;

EDIT : Настоящая проблема: я скопировал ваш источник и использовал его на одной из моих страниц, получив эту ошибку:

 Warning: urlencode() expects parameter 1 to be string, array given in C:\xampp\htdocs\phptests\test.php on line 8 

Ошибка в этой строке:

 foreach($_postArray as $name => $value) 

$ _postArray – это массив с одним значением, содержащим другие значения, и вам нужен либо другой foreach, либо просто используйте это:

 foreach($_postArray['customer_token'] as $name => $value) 

Как обсуждалось в предыдущем вопросе , обратный вызов – это совершенно отдельная вещь из вашего запроса. Обратный вызов также не будет иметь ваши переменные сеанса, поскольку удаленный API действует как клиент для сценария обратного вызова и имеет свой собственный сеанс .

Здесь вы должны показать некоторую документацию по API. Возможно, мы недопонимаем друг друга, но, насколько я вижу, то, что вы пытаетесь сделать (получить значение обратного вызова в исходном запросе CURL), бесполезно и не становится менее бесполезным, задавая дважды.