Paypal reste en "Paiement en cours de vérification"

18 posts in this topic

Posted · Report post

Bonjour,

sur un Peel Premium 7.2, je ne parviens pas à obtenir des changements de statut sur les paiements Paypal.

Avec une adresse configurée pour l'ipn (côté paypal), ça ne fonctionne pas, et sans adresse non plus.

Avez-vous une piste pour résoudre ce problème ?

Share this post


: post
Share on other sites

Posted · Report post

Bonjour VincentD, et bienvenue !

Le lien vers le fichier ipn.php est renseigné par le code, il n'est pas nécessaire de le préciser dans l'administration de votre compte paypal. En revanche vous devez vérifier que l'option de mise à jour des statuts de paiements est bien active.
Vous pouvez vérifier si le fichier est bien appelé lors d'un paiement en plaçant par exemple un envoi d'email au début du fichier ipn.php vers votre adresse email. Cet email peut contenir des informations technique, comme les valeurs transmises par le serveur Paypal. Par exemple :
mail('votre@email.fr','IPN Paypal', print_r($_POST, true));

Share this post


: post
Share on other sites

Posted · Report post

En revanche vous devez vérifier que l'option de mise à jour des statuts de paiements est bien active.

 Sur Paypal, j'ai le choix entre ipn activés avec une URL, ou ipn désactivés si je ne spécifie pas d'URL.

Y'a-t-il un paramètre à modifier côté peel ?

Je mets en place un traceur pour vérifier si le code est appelé ou non.

Share this post


: post
Share on other sites

Posted · Report post

Bonjour,

J'ai bien reçu un email m'avertissant que le fichier ipn.php a été appelé, avec le contenu de la requête, tout a l'air ok.

Pourtant, la commande correspondante reste en "Paiement en cours de vérification".

Que fait-on maintenant ?

 

Share this post


: post
Share on other sites

Posted · Report post

Bonjour,

Il n'y a pas de paramètre coté PEEL pour activer la mise à jour automatique du statut de commande avec Paypal. Pouvez-vous fournir le contenu de l'email reçu ?

Share this post


: post
Share on other sites

Posted · Report post

J'ai remplacé les infos identifiantes par des XXXXX pour le forum, mais elles sont bien là.

Sujet : INFOS - commande XXXXXX

Contenu : Les informations techniques sont : 

Array
(
[mc_gross] => xx.xx
[protection_eligibility] => Eligible
[address_status] => unconfirmed
[payer_id] => XXXXXXXXXX 
[tax] => 0.00
[address_street] => XXXXXXXXXXXXXXXXXXXXXXXX
[payment_date] => 01:13:55 Sep 07, 2015 PDT
[payment_status] => Completed
[charset] => windows-1252
[address_zip] => xxxx
[first_name] => xxxxxxx
[mc_fee] => x.xx
[address_country_code] => FR
[address_name] => XXXX XXXXXX
[notify_version] => 3.8
[custom] => 
[payer_status] => verified
[business] => xxxxx@xxxxx.xxx
[address_country] => France
[address_city] => XXXXXXXX
[quantity] => 1
[verify_sign] => XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
[payer_email] => xxxxx@xxxxx.xxx
[txn_id] => XXXXXXXXXXXXX
[payment_type] => instant
[last_name] => XXXXXXXX
[address_state] => 
[receiver_email] => xxxxx@xxxxx.xxx
[payment_fee] => 
[receiver_id] => XXXXXXXXXXXX
[txn_type] => web_accept
[item_name] => XXXXXXX Commande XXXXX
[mc_currency] => EUR
[item_number] => XXXXX
[residence_country] => CH
[handling_amount] => 0.00
[transaction_subject] => 
[payment_gross] => 
[shipping] => 0.00
[ipn_track_id] => xxxxxxxxxx
)

Share this post


: post
Share on other sites

Posted · Report post

Rebonjour,

Bon, je commence à voir le problème.

Dans create_new_site.sql :

INSERT INTO `peel_statut_paiement` (`position`, `technical_code`, `site_id`) VALUES
(0, "discussed", "[SITE_ID]"),
(1, "pending", "[SITE_ID]"),
(2, "being_checked", "[SITE_ID]"),
(3, "completed", "[SITE_ID]"),
(6, "cancelled", "[SITE_ID]"),
(9, "refunded", "[SITE_ID]");

 

Au lieu de créer la table avec les "id" correspondants aux statuts, ce sont les "position" qui sont mentionnées. Donc la table a id = 4 pour "completed", par exemple.

Or, dans ipn.php :

if ($payment_status == "Completed") {
                        $peel_status = 3;

Le statut en dur est 3 pour "Completed", mais la table peel_statut_paiement a été créée avec l'id 4 pour "completed"...

Je ne comprenais pas pourquoi les statuts de paiement sont corrects pour la CB, et pas pour paypal, donc j'ai poursuivi en regardant la fonction update_order_payment_status dans /lib/fonctions/order.php, et je vois qu'il y a un chemin quand on passe un booléen ($status_or_is_payment_validated === true, pour les paiements CB par exemple), et un autre quand on passe une valeur ( elseif(is_numeric($status_or_is_payment_validated) comme le fait ipn.php).

À partir de là, ça se complique un peu, je ne vois pas comment en passant un 3 comme $peel_status on peut espérer obtenir au final un 4 (qui est le bon id pour avoir une commande en "completed"). Peut-être du côté de $payment_status_by_legacy_id_compatibility_array...

Voilà, j'en suis là, merci de votre aide.

 

Share this post


: post
Share on other sites

Posted · Report post

Bonjour,

Les informations sont corrects, il faut approfondir la recherche de deux manière différentes :
- Avez-vous acccès aux logs d'erreur? Si oui pouvez vous vérifier les logs correspondant aux heures d'appels du fichier ipn ?
- Pouvez-vous placer un email d'alert dans le fichier ipn, à la ligne 94 :
} else {
    send_email($GLOBALS['support'], 'Alerte : Erreur sur peel_status. Commande ' . intval($_POST['item_number']) . '', 'La mise à jour de la commande a échoué.');
}

le bloc de code sera donc  :
                if (!empty($peel_status)) {
                    update_order_payment_status($item_number, $peel_status, true, null, null, false, 'paypal');
                    unset($peel_status);
                } else {
                    send_email($GLOBALS['support'], 'Alerte : Erreur sur peel_status. Commande ' . intval($_POST['item_number']) . '', 'La mise à jour de la commande a échouée.');
                }
Cela permettra de savoir si la variable qui contient le code technique du statut de paiement est correctement rempli.

Share this post


: post
Share on other sites

Posted · Report post

Est-ce que nos réponses se sont croisées ?

Share this post


: post
Share on other sites

Posted · Report post

Bonjour,

Effectivement nos réponses se sont croisées :)
Suite à votre message, dans le fichier ipn.php vous pouvez remplacer les ids de statuts de paiement par leur code technique :
0 => "discussed", 1 => "pending", 2 => "being_checked", 3 => "completed", 6 => "cancelled", 9 => "refunded"

La fonction update_order_payment_status qui met à jour les statuts de paiements pour une commande accepte ces valeurs en paramètre, et pourra mettre à jour correctement les commandes passées via paypal.

Share this post


: post
Share on other sites

Posted · Report post

Bonjour,

J'ai modifié le fichier ipn.php, en mettant les bons id pour chaque $peel_status.

Je trouve ça un peu limite de devoir faire ces modifications, disons "étonnant" que ces statuts de paiement soient incorrects dans le fichier que j'ai reçu dans mon peel premium.

Est-ce que c'est normal, ou est-ce un bug qui va être corrigé dans une mise à jour ? J'ai du mal à croire que je sois le seul à être confronté à ce problème.

Share this post


: post
Share on other sites

Posted · Report post

Bonjour,

Ce problème sera effectivement corrigé dans la futur version de PEEL qui sort prochainement. Les codes techniques des statuts de paiement seront utilisés à la place des ids. Cette erreur ne nous avait pas encore été remontée par nos utilisateurs

Share this post


: post
Share on other sites

Posted · Report post

Bonjour,

OK merci pour votre aide en tout cas. On peut passer le post en résolu ?

Rien à voir : au fil de ce thread je n'ai reçu aucune notification ou email, alors que je "suis" le fil de discussion et que "M'avertir lorsqu'une réponse est postée" présente une jolie checkmark sur fond vert.

Share this post


: post
Share on other sites

Posted · Report post

Bonsoir

J ai une boutique en 7.104 sur la quelle je mets en service le module paypal

J'ai suivi ce post

A chaque fois que je fais une commande payée elle passe à l'état "En attente de paiement"

j'ai donc mis des traces dans le code

if (strcmp(trim(strip_tags($res)), "VERIFIED") == 0) {
					send_email('monmail@monsite.fr', 'paiement status'.$payment_status );
					if ($payment_status == "Completed") {
						$peel_status = 'completed';
						email_commande($item_number);
						send_email('monmail@monsite.fr', 'IPN Ligne 77 statut completed '  );
					} elseif ($payment_status == "Pending") {
						$peel_status ='being_checked';
						send_email('monmail@monsite.fr', 'IPN Ligne 80 statut pening '  );
					} elseif ($payment_status == "Failed") {
						$peel_status = 'cancelled';
						send_email('monmail@monsite.fr', 'IPN Ligne 83 statut failed '  );
					} elseif ($payment_status == "Denied") {
						$peel_status = 'cancelled';
						send_email('monmail@monsite.fr', 'IPN Ligne 86 dennied '  );
					} elseif ($payment_status == "Refunded") {
						$peel_status = 'refunded';
						send_email('monmail@monsite.fr', 'IPN Ligne 89 statut refunded '  );
					} else {
						send_email($support, 'Problème d\'échange de données Paypal IPN - commande ' . $r['id'], 'Un paiement a été passé "en cours de vérification" dans votre boutique car Paypal n\'a pas confirmé ou infirmé le paiement.' . "\n\n" . ' Réponse par Paypal : ' . $res . "\n\n" . 'Les informations techniques sont : ' . "\n\npayment_status : " . $payment_status . "\n\n" . print_r($_REQUEST, true));
					}

Je reçois un mail ligne 80 c est a dire  being_checked. le statut de la commande est à 1

Voici ce que j'i dans la table paiement status

Contenu de la table peel_statut_paiement
0    0    En cours de discussion    Being discussed
1    1    En attente de paiement    Payment pending
2    2    Paiement en cours de vérification    Payment being checked
3    3    Réglé    Completed
6    6    Annulé    Cancelled
9    9    Remboursé    Refunded

 

Que puis-je faire

 

merci de votre aide

 

Share this post


: post
Share on other sites

Posted · Report post

Bonjour,

Sur la version 7.1.4, il faut utiliser les ids des statuts de paiement. L'utilisation de code technique being_checked, completed, etc... est apparue sur la version 7.2. Donc dans votre fichier ipn, il faut remplacer les codes techniques par les bons ids.

Par ailleurs dans votre test le statut de paiement de paypal est "Pending", donc le paiement n'a pas été directement validé par paypal.

Share this post


: post
Share on other sites

Posted (edited) · Report post

Bonjour et merci

 

Ok pour les statuts

J ai utilisé la sandbox le paiement a été validé

je vais donc remettre le ode source à l origine et refaire des tests

../..

j ai remis les codes

J ai refait les tests avec la SandBox, paiement accepté, mail reçu sur le compte paypal sandbox et pourtant paiement toujours en attente

je passe par la ligne de order.php

elseif ($payment_status == "Pending") {
						$peel_status =2;

Pouvez-vous me dire a quel moment est reçu le code validation paypal (je n'arrive pas bien à le retrouver dans les sources) que je puisse tracer

A l'avance Merci

Merci

 

Edited by yvesIma

Share this post


: post
Share on other sites

Posted · Report post

Bonjour,

pour voir toutes les informations envoyées par Paypal, vous pouvez vous envoyer un email qui contient les valeurs de POST au début du fichier :

mail('votre@email.fr','IPN Paypal', print_r($_POST, true));
Le statut de paiement de la commande est contenu dans l'index ['payment_status']. La valeur pour cet index doit être 'Completed' lorsque le paiement est validé par Paypal

Share this post


: post
Share on other sites

Posted · Report post

Bonjour

Merci pour ces infos

 

Share this post


: post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now

Twitter Advisto ecommerce

Facebook PEEL Shopping