2017-02-10 1 views
0

J'essaie de créer un rapport de comptabilité personnalisé en utilisant l'API NVP PayPal qui obtiendra toutes les transactions pour une plage de dates spécifique.PayPal NVP API - TransactionSearch Erreur 10001 demande de traitement Timeout

Mon code:

$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>"; 
} 

Voici ce qui est imprimé:

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 

Toute aide à ce problème serait grandement appréciée!

Répondre

0

Vous utilisez une demande de publication et n'avez pas publié de données.

Je ne sais pas ce que PayPal veut voir mais je suppose que ce n'est pas ce que vous envoyez.

Quelques choses à essayer:

Si vous devez passer l'UTILISATEUR, PWD et SIGNATURE dans l'en-tête de demande le faire comme ceci:

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

curl_setopt($ch, CURLOPT_HTTPHEADER, $request); 

Si les paramètres de NVP $ ont besoin être données post, essayez ceci:

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

La NVP $ peut être passé comme une chaîne de requête dans les données de poste aussi.

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

La différence est le type de contenu.

La première méthode:

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

La deuxième méthode:

Content-Type: multipart/form-data 

Pour aider dans le dépannage, il serait bon de voir à la fois la demande et en-tête de réponse.

Utilisez ces options pour obtenir les en-têtes:

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

La demande en-tête sera dans le 'curl_getinfo()'

curl_setopt($ch, CURLOPT_HEADER, true); 


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

qui précède donne beaucoup d'autres détails de la demande. Si vous voulez voir l'en-tête:

$request = curl_getinfo($ch, CURLINFO_HEADER_OUT); 

Pour obtenir l'en-tête de réponse:

$result = curl_exec($ch); 

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

Merci pour la @Misunderstood de réponse complète! Le problème était que je ne transmettais aucune donnée de poste. J'ai ajouté l'USR, PWD, et SIG dans la chaîne de poste, et tout a commencé à fonctionner. – LukeSkywalker