2010-05-16 15 views
0

Je suis un débutant relatif PHP mettant en œuvre un auditeur IPN PayPal et tout semble fonctionner correctement, sauf que je ne sais pas vraiment comment vérifier un code de réponse.PHP: Comment vérifier le code de réponse?

J'ai essayé quelque chose de moche avec cURL mais ça ne marche pas du tout (je ne comprends pas cURL).

J'ai essayé ce morceau de code que je saisis de quelque part sur le net:

$fp = fsockopen('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30); 
$response_headers = get_headers($fp); 
$response_code = (int)substr($response_headers[0], 9, 3); 

... mais il ne fonctionne pas (retourne $ RESPONSE_CODE = 0).

Donc maintenant, je débogage mon code IPN sans vérifier une réponse 200.

Quelqu'un peut-il plus expérimenté me conseiller sur ce qui est la bonne façon/simple à vérifier?

Merci

+0

Il est impossible de répondre sans savoir ce que fait votre fonction get_headers(). – ThiefMaster

+0

Ce n'est pas le mien :) http://php.net/manual/fr/function.get-headers.php – Tom

+0

Si vous utilisez fsockopen, vous devez gérer vous-même la totalité de la requête http, Votre code ci-dessus ouvre juste un socket, pas http là .. ainsi, l'appel à get_headers n'a aucun sens du tout. Regardez l'exemple # 1 dans la documentation de fsockopen. Où êtes-vous coincé avec cURL? – zedoo

Répondre

2

de get_headers de Il (de $ url), non get_headers (fp de $). À moins que je ne le lisais totalement faux (et il y a un autre mode que je n'ai jamais vu), vous devez lui transmettre l'URL que vous lisez, pas une poignée de socket. En fait, il fait apparemment son propre GET, donc ce serait inutile pour votre tâche actuelle.

fsockopen (...) est une fonction de niveau inférieur (TCP/IP). Il renvoie un handle de socket, pas un handle CURL. C'est pourquoi vous ne pouvez pas utiliser curl_getinfo (...) dessus. Vous voulez quelque chose comme ça ...

$fp = curl_init('https://www.sandbox.paypal.com/cgi-bin/webscr'); 
curl_setopt($fp, CURLOPT_POST, true); 
curl_setopt($fp, CURLOPT_POSTFIELDS, $_POST); 
curl_setopt($fp, CURLOPT_RETURNTRANSFER, true); 

$response = curl_exec($fp); 

$response_code = curl_getinfo($fp, CURLINFO_HTTP_CODE); 

sauf que je me souvienne, vous avez besoin d'ajouter « cmd = _notify-validate » aux champs de poste.

N'utilisez pas fsockopen (...). Oui, je sais, c'est ce que fait l'exemple de code Paypal. Mais il est destiné à fonctionner partout, et ne peut pas compter sur l'installation de CURL. Vous pouvez, alors utilisez-le.

+0

Merci, c'est vraiment utile. – Tom

+0

Testé & fonctionne: $ _POST doit être remplacé par $ req (à partir du code PayPal prêt afin qu'il contienne tous les paramètres nécessaires), + curl_close ($ fp); à la fin. – Tom