Описание интеграции 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), бесполезно и не становится менее бесполезным, задавая дважды.