Обратного вызова из API не происходит после публикации параметров в URL API со стороны сервера - PullRequest
0 голосов
/ 31 августа 2010

Описание интеграции API
Для API требуется форма для размещения на URL API с некоторыми полями ввода и токеном клиента. API обрабатывает и затем публикует ответ на файл callback.php на моем сервере. Я могу получить доступ к опубликованным значениям, используя $ _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 повторяет 1, если строка curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); удалена, но обратный вызов не происходит. Я устанавливаю переменную сеанса в сценарии обратного вызова для проверки. Требуется ли синхронность API для использования метода curl, чтобы curl_exec возвращал ответ?

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

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

Я тоже пытался использовать следующий код, но похоже, что мой pecl не установлен должным образом, потому что 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)
}

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

Ответы [ 2 ]

0 голосов
/ 31 августа 2010

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

.

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

0 голосов
/ 31 августа 2010

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

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

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

РЕДАКТИРОВАТЬ : Если вы хотите выполнить запрос по почте, добавьте его в свой код:

curl_setopt($ch, CURLOPT_POST, true);

РЕДАКТИРОВАТЬ : Что-то еще, что я упомянул в вашем коде: вы использовали «1» на'CURLOPT_RETURNTRANSFER', но должно быть 'true':

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

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

РЕДАКТИРОВАТЬ : Реальная проблема: я скопировал ваш источник и использовал его на одной из своих страниц, получая эту ошибку:

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) 
...