2010-08-24 6 views
1

Mon gestionnaire et paypal m'avaient communiqué il y a quelques jours alors quelque chose s'est produit qui a fait que ce dernier a cessé d'envoyer IPN. J'ai essayé de simuler l'envoi IPN via mon propre script sans la fonction de retour en arrière pour la validation en utilisant cURL. Mon gestionnaire fonctionne parfaitement. Je place aussi une simple ligne de code (déjà testée via cURL) avant les lignes qui sont postées sur paypal pour que je puisse vérifier la réponse de paypal. Cette ligne de code enregistre simplement l'IPN dans la base de données. Il n'a pas enregistré non plus. Cela devrait-il être juste? Parce que paypal envoie IPN deux fois. Je me suis assuré que IPN est activé dans mon compte marchand et le lien pointe vers mon gestionnaire. Maintenant, je commence à soupçonner que paypal ne m'envoie rien. Voici mon gestionnaire:Comment se fait-il que sandbox paypal ne m'envoie pas IPN?

<?php 

require_once 'classes/Mysql.php'; 
require_once 'classes/Email.php'; 

$mysql = new Mysql(); 
$myemail = new Email(); 

// read the post from PayPal system and add 'cmd' 
$req = 'cmd=_notify-validate'; 

foreach ($_POST as $key => $value) { 
$value = urlencode(stripslashes($value)); 
$req .= "&$key=$value"; 
} 

// assign posted variables to local variables 
$item_name = $_POST['item_name']; 
$payment_status = $_POST['txn_type']; 
$payment_amount = $_POST['mc_amount3']; 
$payment_currency = $_POST['mc_currency']; 
$subscr_id = $_POST['subscr_id']; 
$receiver_email = urldecode($_POST['receiver_email']); 
$payer_email = $_POST['payer_email']; 
$subscr_type = $_POST['option_selection1']; 
$username = $_POST['custom']; 

//Save a copy of $req to the database. If paypal sends IPN, this should at least grab the first one before validation. 
$memberID = $mysql->get_member_id($username); 
$mysql->test_message($req.$payment_amount.$payment_currency, $memberID, $username, $payment_amount, $payment_currency); 

// post back to PayPal system to validate 
$header .= "POST /cgi-bin/webscr HTTP/1.0\r\n"; 
$header .= "Content-Type: application/x-www-form-urlencoded\r\n"; 
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n"; 
$fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30); 

if (!$fp) { 
// HTTP ERROR 
} else { 
fputs ($fp, $header . $req); 
while (!feof($fp)) { 
$res = fgets ($fp, 1024); 
if (strcmp ($res, "VERIFIED") == 0) { 

//This if block does the payment processing. If I place this before the validation/post back occurs, it doesn't work either. But it works when testing using my cURL script--- before the validation. 
if($memberID) 
{ 
    if($payment_status=='subscr_signup' && $payment_currency=='USD' && !$mysql->check_if_transactionID_exists($subscr_id)) 
    { 
     $mysql->activate_subscription($memberID, $subscr_id, $subscr_type, $payment_amount); 
    } 

} 

} 
else if (strcmp ($res, "INVALID") == 0) { 
// log for manual investigation 
} 
} 
fclose ($fp); 
} 

J'ai entendu tant d'histoires paypal est tellement frustrant de mettre. Se pourrait-il que paypal ne soit pas envoyer IPN ou il y a quelque chose de mal avec mon gestionnaire?

Répondre

0

J'ai couru dans un Issue-- similaire si vous videz le var $res de la ligne $res = fgets ($fp, 1024); vous verrez HTTP/1.1 200 OK, pas le VERIFIED/INVALID que vous recherchez. Essayez cette option pour plus d'informations: Paypal IPN returning HTTP/1.1 200 OK