8791 sujets

Développement web côté serveur, CMS

Bonjour,


J'ai besoin de l'aide des "paypalistes"
Pouvez-vous m'aider ?

Dans ma page ipn "boutique41.php",
je souhaite mettre ma bdd "shop_commande" à jour (date de paiement et moyen de paiement).

Et c'est là que cela coince.
On dirait même que ma page "boutique41.php" (ma page IPN) ne veut pas s'exécuter !
Savez-vous pourquoi ?

J'ai pourtant une confirmation de paiement accepté,
de par la sandbox de paypal !

Pour m'assurer du passage dans "boutique41.php",
j'ai même mis en tout début :
echo "STOP";
exit;
Rien n'y fait, le paiement est accepté !!!

Simple paypal, qu'ils disaient !!!
C'est loin d'être une bataille de romains !!!

En début de page "boutique40.php", mes datas sont bien enregistrées, il me semble,
avec les bonnes infos.
	$custom="";
	$custom.="verrou=".$_SESSION['panier']['verrou'];
	$custom.="&promo=".$_SESSION['panier']['promo'];
	$custom.="&idClient=".$_SESSION['panier']['idClient'];
	$custom.="&refcommande=".$refcommande;
	$custom.="&cumulHTVA=".$_SESSION['panier']['cumulHTVA'];
	$custom.="&cumulTVAC=".$_SESSION['panier']['cumulTVAC'];
	$custom.="&totarticle=".$totarticle;

Et dans cette même page "boutique40.php", j'ai aussi ce bout de code dans le form :
<input type="hidden" name="cmd" value="_xclick"/>
<input type="hidden" name="business" value="seller_1343650986_biz@skynet.be"/>
<input type="hidden" name="item_name" value="Commande <?php echo $refcommande.' du '.$dateCommande; ?>"/>
<input type="hidden" name="item_number" value="<?php echo $refcommande; ?>"/>
<input type="hidden" name="amount" value="<?php echo number_format($cumulTVAC,2,'.',''); ?>"/>
<input type="hidden" name="currency_code" value="EUR"/>
<input type="hidden" name="no_note" value="1"/>
<input type="hidden" name="no_shipping" value="0"/>
<input type="hidden" name="bn" value="Créaprint_boutique_WPS_BE">
<input type="hidden" name="lc" value="FR"/>
<input type="hidden" name="notify_url" value="http://www.cx.be/boutique41.php" />
<input type="hidden" name="return" value="http://www.cx.be/boutique50.php" />
<input type="hidden" name="cancel_return" value="http://www.cx.be/boutique51.php" />
<input type="hidden" name="custom" value="<?php echo $custom; ?>" />



Voici toute ma page "boutique41.php" :
<?php
	session_start();
	$dd = date("Ymd");
	$datum0 = date("YmdHis");

	//permet de traiter le retour ipn de paypal
	$email_account = "seller_1343650986_biz@skynet.be";
	$req = 'cmd=_notify-validate';

	require_once("php/fonctions-panier.inc.php");
	require_once("php/connexionMysql.inc.php");

	foreach ($_POST as $key => $value) {
		$value = urlencode(stripslashes($value));
		$req .= "&$key=$value";
	}
	
	$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.sandbox.paypal.com', 443, $errno, $errstr, 30);
 
	$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'];
//	$moyen = $_POST['creditcardtype'];
	parse_str($_POST['custom'],$custom);
	
	$idClient=$custom['idClient'];
	$refcommande=$custom['refcommande'];
	$totarticle=$custom['totarticle'];
	$verrou=$custom['verrou'];
	$promo=$custom['promo'];
	$cumulHTVA=$custom['cumulHTVA'];
	$cumulTVAC=$custom['cumulTVAC'];

	if (!$fp) {

	} else {
		fputs ($fp, $header . $req);
		while (!feof($fp)) {
			$res = fgets ($fp, 1024);
			if (strcmp ($res, "VERIFIED") == 0) {
				// vérifier que payment_status a la valeur Completed
				if ($payment_status == "Completed") {
					if ($email_account == $receiver_email) {
						// vérifier un max d'informations
						file_put_contents('log', print_r($_POST,true));
						$pieces=0;
						$data=serialize($_POST);
						$query = mysql_query("SELECT * FROM shop_commande_ligne ".
							"WHERE idclient='".$idClient."' ");
						while ($back = mysql_fetch_assoc($query)) {
							$pieces+=$back['quantite'];
						}
						$reqCompte="SELECT * FROM shop_client03 ".
							"WHERE parent='".$idclient."' ";
						$resCompte=mysql_query($reqCompte);
						$record=mysql_fetch_array($resCompte);
						$tvaoui=1;
						if ($record) {
							$tvaoui=trim($record['tvaoui']);
						}
						if ($tvaoui==0) {
							$cumulTVAC=$cumulHTVA;
						}
						if ($cumulTVAC == $payment_amount AND $totarticle == $pieces AND $payment_currency == 'EUR') {
							// $data n'est actuellement pas sauvegardé, il faudra vérifier par l'interface utilisateur de paypal
							$requeteNEW="UPDATE shop_commande SET ".
								"payemontant01='".$payment_amount."', ".
								"payedate01='".$datum0."', ".
								"payepar01='PAY', ".
								"facturedate01='' ".
								"WHERE idclient='".$idClient."' AND refcommande='".$refcommande."' ";
							mysql_query($requeteNEW);
							file_put_contents('log','Le paiement a bien été confirmé');
						} else {
							file_put_contents('log','Le paiement ne correspond pas au panier commandé');
						}
					}
				} else {
					// Statut de paiement: Echec
				}
				exit();
			} else if (strcmp ($res, "INVALID") == 0) {
				// Transaction invalide
			}
		}
		fclose ($fp);
	}

	supprimePanier();
	creationPanier();
	$_SESSION['panier']['verrou']=$verrou;
	$_SESSION['panier']['promo']=$promo;
	$_SESSION['panier']['idClient']=$idClient;
	$_SESSION['panier']['cumulHTVA']=$cumulHTVA;
	$_SESSION['panier']['cumulTVAC']=$cumulTVAC;
	$query = mysql_query("SELECT id FROM shop_commande_ligne ".
		"WHERE idclient='".$idClient."' ");
	while ($back = mysql_fetch_assoc($query)) {
		$_SESSION['panier']['idProduit'][]=$back['idarticle'];
		$_SESSION['panier']['qteProduit'][]=$back['quantite'];
		$_SESSION['panier']['pvuProduit'][]=$back['pu_net_ht'];
	}
?>

Modifié par jytest (17 Oct 2012 - 09:00)
Je n'arrête plus de googler !

Une des raisons serait une erreur de code dans l'IPN
Ou de variable propre à Paypal...

Je viens de trouver une erreur,
que je corrige à l'instant dans le code ci-dessus.
Par contre, les variables paypal me semblent toutes valides !

<input type="hidden" name="item_name" value="Commande <?php echo $refcommande.' du '.$dateCommande; ?>"/>


Mais, hélàs, bien sûr, cela ne fonctionne toujours pas !

A l'aide !!!
Modifié par jytest (01 Aug 2012 - 10:31)

<input type="hidden" name="amount" value="<?php echo number_format($cumulTVAC,2,'.',''); ?>"/>


ça sent le sapin ça...
C'est-à-dire ???
Qu'est-ce qui n'est pas bon la-dedans ? stp !
Mettre au format suivant : sans séparateur de millier et avec 1 point décimal...

Néanmoins, comme cela me saôule,
je viens même de corriger avec ceci :
<input type="hidden" name="amount" value="<?php echo round($cumulTVAC,2); ?>"/>

Rien n'y fait !
Cela ne fonctionne pas !

A l'aide !!!
Je déprime !
Modifié par jytest (02 Aug 2012 - 21:12)
Non, non, rien a voir avec ton problème, mais si tu passe le montant de ta commande via un input hidden c'est une grosse faille de sécurité...
Ben, je suis d'accord avec toi, mais ce que paypal veut !
Dieu le peut !

Dieu Paypal est capricieux !
amount est une variable paypal...
par contre, on peut aussi passer le montant par la variable custom...
Et le test d'égalité devient alors gage de sécurité...

Tu n'as pas une idée pour mon souci de script IPN qui ne fonctionne pas ?

Aidez-moi svp