J'ai utilisé l'API de paiement express pour convertir les comptes des utilisateurs de mon site en comptes premium après avoir payé. Le seul problème avec cela est qu'il ne renvoie pas l'utilisateur sur le site tant qu'il n'a pas cliqué sur le bouton pour revenir, et il met à jour son autorisation lorsque cela se produit. Environ 40% des utilisateurs ne semblent pas le faire .... afin que leurs comptes ne soient jamais crédités après le paiement.
Bien que Paypal effectue un post-back instantané après le paiement réussi, je n’ai jamais été en mesure de le mettre à jour immédiatement, car je ne pouvais pas le faire renvoyer une sorte d’information permettant d’identifier l’utilisateur qui vient de payer. . Je ne pouvais le faire que lorsque vous êtes renvoyé sur le site, qui envoie l'ID de transaction, que j'ai enregistré avec un post-retour. Il le recherche et accorde l'autorisation s'il a été trouvé dans la base de données.
Existe-t-il un moyen de soumettre une sorte de variable à Paypal, qui sera ensuite renvoyée à moi? Quelque chose comme & user_id = 123, ce qui rendrait très pratique la mise à jour de la permission de l'utilisateur.
Oui, si vous envoyez item_number
, la notification IPN inclura cette information lors de la publication. J'enregistre un identifiant unique dans la base de données lorsque l'utilisateur commence le processus de paiement et l'inclue lors de son envoi à Paypal. Lorsque l'IPN entre en jeu, cet identifiant unique correspond à l'enregistrement de la base de données, me donnant toutes les informations dont j'ai besoin.
Edit Re votre commentaire:
Je suppose qu'il existe un exemple de code quelque part sur le site lié ci-dessus, mais dans mon cas, j'utilise un formulaire que je POST à https://www.Paypal.com/cgi-bin/ webscr . Ce formulaire contient divers champs cachés documentés dans les informations IPN (cmd
pour la commande à exécuter, business
pour spécifier votre ID entreprise, item_name
pour une description agréable dans l'interface utilisateur Paypal, item_number
pour le numéro d'article mentionné ci-dessus, etc., etc. .) Lorsque IPN publie de nouveau sur votre adresse IPN, il contient divers champs (tels que payment_status
- genre d’important!! Et mdash et le item_number
que vous avez introduit lors de la publication).
La variable cachée Iten_number
ne fonctionne pas dans mon application. Mais j’ai trouvé que custom
champ caché fonctionne bien. Ajoutez simplement ce champ au formulaire, généré par Paypal: <input type="hidden" name="custom" value="YOUR VALUE FROM DB"/>
. Ensuite, vous pouvez lire cette valeur pour identifier, par exemple, le produit acheté. (Code Java): String custom = request.getParameter("custom");
Juste pour ajouter à cette vieille question ...
Certains paramètres d’option sont couramment utilisés pour l’envoi de données personnalisées via Paypal.
Ces balises d'option sont on0, on1 ou on2 pour les noms de champs personnalisés et os0, os1 et os2 pour le champ personnalisé valeurs.
Je voudrais envoyer on0 avec une valeur de "UserID" et os0 l'ID actuel.
Ces valeurs seront représentées dans l'IPN comme suit:
os0 est représenté par option_selection1
os1 est représenté par option_selection2
os2 est représenté par option_selection3
on0 est représenté par nom_option1
on1 est représenté par nom_option2
on2 est représenté par nom_option3
Selon Variables HTML pour Paypal Payments Standard vous pouvez envoyer toutes les variables "Pass-through":
item_number Variable directe permettant de suivre le produit ou le service acheté ou la contribution faite. La valeur que vous spécifiez est transmise de retour à la fin du paiement. Cette variable est requise si vous veulent que Paypal surveille l’inventaire ou les profits et pertes de l’article le bouton vend.
custom Variable directe pour vos propres besoins de suivi, ce que les acheteurs ne voient pas. Par défaut - Aucune variable ne vous est renvoyée.
et
facture Variable de transmission que vous pouvez utiliser pour identifier le numéro de votre facture pour cet achat. Par défaut - Aucune variable n'est renvoyée à vous.
Toutes ces variables d'intercommunication sont renvoyées par l'IPN dans les informations de réponse au paiement.
Il vous suffit de restituer votre template HTML côté serveur et d'écrire les champs dans le code HTML comme
<input type="hidden" name="item_number" value="{{ productID }}">
<input type="hidden" name="invoice_id" value="{{ invoiceID }}">
<input type="hidden" name="custom" value="{{ jsonInfo }}">
Techniquement, le champ "personnalisé" peut être une chaîne encodée JSON si vous souhaitez gérer plus de données, comme
myItemObject = {
"customerEmail" : "[email protected]
"customerID: "AAFF324"
}
jsonInfo = json.dumps( myItemObject )
return render_template(tmpl_name, jsonInfo=jsonInfo, productID=productID, invoiceID=invoiceID)
Je reçois enfin cette réponse, je veux partager avec vous tous regardez:
sur votre formulaire HTML, mettez ce code (c'est un sandbox Paypal):
form action="https://www.sandbox.Paypal.com/cgi-bin/webscr?custom=YOUR_VAR" method="post"
Sur votre PHP après la redirection Paypal vers le succès de votre page: utilisez la variable cm
GET:
$example = $_GET["cm"];
J'espère cette URL résout votre problème. Comme cela a résolu le mien aussi. Ajoutez une variable personnalisée à votre formulaire, puis récupérez-la sur votre page de paiement réussi. Exemple: <input type='hidden' name='custom' value='<?php echo $email; ?>'/>
puis récupérez-le en tant que:
$_POST['custom']
<input type="hidden" name="on0" value="Ajay Gadhavana">
<input type="hidden" name="on1" value="my_phone_number">
<input type="hidden" name="on2" value="my_third_extra_field">
La réponse de Paypal serait
[option_name1] => Ajay Gadhavana
[option_name1] => my_phone_number
[option_name1] => my_third_extra_field