2017-02-10 6 views
0

Я пытаюсь создать собственный отчет о бухгалтерском учете с использованием API-интерфейса PayPal NVP, который получит все транзакции для определенного диапазона дат.PayPal NVP API - TransactionSearch Ошибка 10001 Запрос обработки тайм-аута

Мой код:

$headers   = array(
    'USER'    => $production_user, 
    'PWD'    => $production_pass, 
    'SIGNATURE'   => $production_sig 
); 

$nvp    = array(
    'METHOD'   => 'TransactionSearch', 
    'TRANSACTIONCLASS' => 'RECEIVED', 
    'STARTDATE'   => '2016-12-01T00:00:00Z', 
    'ENDDATE'   => '2016-12-31T00:00:00Z' 
); 

$request_url  = "https://api-3t.paypal.com/nvp?".http_build_query($nvp); 

$curl = curl_init($request_url); 
curl_setopt($curl, CURLOPT_FAILONERROR, true); 
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); 
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($curl, CURLOPT_HEADER, $headers); 
curl_setopt($curl, CURLOPT_POST, 1); 
$result = curl_exec($curl); 

$result = explode("&", $result); 

foreach($result as $f=>$v){ 
    $t = explode("=", $v); 
    echo $t[0]." => ".urldecode($t[1]); 
    echo "<br>"; 
} 

Вот что распечатана:

HTTP/1.1 200 OK Date: Fri, 10 Feb 2017 19:51:20 GMT Server: Apache X-PAYPAL-OPERATION-NAME: X-PAYPAL-API-RC: 10001 Connection: close Cache-Control: max-age => 0, no-cache, no-store, must-revalidate Pragma: no-cache HTTP_X_PP_AZ_LOCATOR: slcb.slc Paypal-Debug-Id: 484a759b46e4a Set-Cookie: X-PP-SILOVER 

CORRELATIONID => some_random_characters 
ACK => Failure 
L_ERRORCODE0 => 10001 
L_SHORTMESSAGE0 => Internal Error 
L_LONGMESSAGE0 => Timeout processing request 

Любая помощь с этой проблемой было бы весьма признателен!

ответ

0

Вы используете почтовый запрос и не публикуете данные.

Я не знаю, что PayPal хочет увидеть, но я предполагаю, что это не то, что вы отправляете.

Некоторые вещи, чтобы попробовать:

Если вам нужно передать пользователю, PWD и расписывается в заголовке запроса сделать это следующим образом:

$request = array(); 
$request[] = "USER: $production_user"; 
$request[] = "PWD: $production_pass"; 
$request[] = "SIGNATURE: $production_sig"; 

curl_setopt($ch, CURLOPT_HTTPHEADER, $request); 

Если параметры $ NVP нужно чтобы после данных, попробуйте следующее:

curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $nvp); 

в $ НВП может быть передан в виде строки запроса в почтовых данных также.

$query = http_build_query($nvp); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $query); 

Разница заключается в содержании.

Первый метод:

Content-Type: application/x-www-form-urlencoded 

Второй метод:

Content-Type: multipart/form-data 

Чтобы помочь в беде стрелять было бы хорошо, чтобы увидеть как запрос и заголовок ответа.

Используйте эти параметры, чтобы получить заголовки:

curl_setopt($ch, CURLOPT_VERBOSE, true); 
curl_setopt($ch, CURLINFO_HEADER_OUT, true); 

заголовке запроса будет в «curl_getinfo()»

curl_setopt($ch, CURLOPT_HEADER, true); 


$result = curl_exec($ch); 
$info = curl_getinfo($ch); 
var_export($info); 

выше дает много других деталей запроса. Если вы хотите видеть только заголовок:

$request = curl_getinfo($ch, CURLINFO_HEADER_OUT); 

Чтобы получить заголовок ответа:

$result = curl_exec($ch); 

$skip = intval(curl_getinfo($ch, CURLINFO_HEADER_SIZE)); 
$response = substr($result ,0,$skip); 
$result = substr($result ,$skip); 
+0

Спасибо за обстоятельный ответ @Misunderstood! Проблема заключалась в том, что я не передавал никаких почтовых данных. Я добавил USR, PWD и SIG обратно в строку сообщения, и все приступило к работе. – LukeSkywalker