IPN n'exécute pas le script SQL

Feldunost
Contributeur
Contributeur

Hello,


J'ai fait des recherches sur le fonctionnement de l'IPN, et je suis parvenu à le faire fonctionner de manière fluide avec Paygol, donc je suis passé à Paypal qui s'avère être un véritable casse tête !

Je dispose d'un bouton de paiement qui a plusieurs options de paiement, (selon le montant que la personne souhaite payer) jusqu'ici pas de problème.

Le compte est dans une sandbox de Paypal, j'ai un compte acheteur et vendeur.


=> bouton du vendeur avec le custom ?:

 
<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="hosted_button_id" value="**********">
<input type="hidden" name="custom" value="Test">
<table>
<tr><td><input type="hidden" name="on0" value="Prix">Prix</td></tr><tr><td><select name="os0">
	<option value="Option 1">Option 15,00 EUR</option>
	<option value="Option 2">Option 210,00 EUR</option>
	<option value="Option 3">Option 320,00 EUR</option>
</select> </td></tr>
</table>
<input type="hidden" name="currency_code" value="EUR">
<input type="image" src="https://www.sandbox.paypal.com/fr_FR/FR/i/btn/btn_buynowCC_LG.gif" border="0" name="submit" alt="PayPal - la solution de paiement en ligne la plus simple et la plus sécurisée !">
<img alt="" border="0" src="https://www.sandbox.paypal.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
</form>





=> code IPN simplifié pour les tests avec prise en charge Custom:

<?php
// read the post from PayPal system and add 'cmd'
$req = 'cmd=' . urlencode('_notify-validate');
 
foreach ($_POST as $key => $value) {
	$value = urlencode(stripslashes($value));
	$req .= "&$key=$value";
}
 
 
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://www.sandbox.paypal.com/cgi-bin/webscr');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Host: <a href="http://www.paypal.com&#39;));" target="_blank">www.paypal.com'));</a>
$res = curl_exec($ch);
curl_close($ch);
 
 
// assign posted variables to local variables
$item_name = $_POST['item_name'];
$item_number = $_POST['item_number'];
$payment_status = $_POST['payment_status'];
$payment_amount = $_POST['mc_gross'];
$payment_currency = $_POST['mc_currency'];
$txn_id = $_POST['txn_id'];
$receiver_email = $_POST['receiver_email'];
$payer_email = $_POST['payer_email'];
$custom = $_GET['custom'];
 
 
if (strcmp ($res, "VERIFIED") == 0) {
	// check the payment_status is Completed
	// check that txn_id has not been previously processed
	// check that receiver_email is your Primary PayPal email
	// check that payment_amount/payment_currency are correct
	// process payment
 
 
mysql_connect("localhost","******","*******");
 
mysql_select_db(smforum);
 
mysql_query("UPDATE smf_members SET money = money + 250 WHERE member_name = '".$custom."'");
 
mysql_close();
 
 
}
else if (strcmp ($res, "INVALID") == 0) {
	// log for manual investigation
 
 
}
?>




J'effectue donc le script de test via la sandbox (test du IPN avec la valeur du custom correctement attribuée) le script détecte que le IPN est bon, mais dans la database, il n'y a pas l'ajout +250 à la valeur initiale sur l'utilisateur Test.


Je me demande donc si cela ne serait pas dû au fait que ce soit une sandbox et que cela désactive tout ?

Mais en lisant bien le code, j'ai l'impression que c'était censé fonctionner de la même manière qu'un code sous paypal ... et que le Custom + la requete sql devait être prise en compte ...



Des idées ?

Merci.





EDIT:

Je viens de lire tout le topic ici: https://www.paypal-community.com/t5/...de/td-p/374492

Et je crois comprendre que lors de l'appel à curl avec ssl, nécessite donc OpenSSL d'installé sur mon Nginx ?

Même si j'en doute vu que le script IPN est considéré comme valide par le script de test, mais qu'il n'exécute pas la commande lorsque j'envoie un ordre IPN en tant que VERIFIED.

 

Serait-ce dû à ceci:

$req = 'cmd=' . urlencode('_notify-validate');

Login to Me Too
1 RÉPONSE 1

Feldunost
Contributeur
Contributeur

Bonjour,

 

Problème réglé, juste un souci avec la variable custom qui doit être en POST et non pas GET.

 

Merci.

Login to Me Too

Haven't Found your Answer?

It happens. Hit the "Login to Ask the community" button to create a question for the PayPal community.