2017-02-09 2 views
2

Quel est le flux de travail recommandé pour stocker mon ID client lors de l'achat d'un abonnement à un service?Informations sur le client lors de l'utilisation de PayPal IPN

Voilà ma façon de penser:

  1. utilisateur décide d'acheter
  2. utilisateur crée compte ou journaux (si non connecté)
  3. Les variables de session sont établies
  4. Do transaction Paypal
  5. Obtenir des informations IPN et ajouter la variable de session appropriée à la base de données

Je n'avais jamais traité de paiements auparavant et je voulais juste m'assurer que je faisais les choses correctement. Les nombreux tutoriels que j'ai pu trouver ne traitent pas spécifiquement de cette question. Je vais valider que mon utilisateur est autorisé à utiliser l'outil en fonction des informations de paiement. J'utilise PHP et la transaction paypal fonctionne déjà.

Il semble que le payeur ne soit pas vraiment un moyen très fiable de faire cela car il peut changer. Donc, je cherche vraiment un moyen de lier les résultats de cette transaction à un client existant dans ma base de données, dont la session serait active au moment de l'achat. Un problème avec cela est que je devrais le traiter dans la réponse IPN au lieu de la réponse SUCCESS parce qu'un utilisateur peut fermer le navigateur après paiement. Pensées?

+0

Je suis intéressé à connaître cette réponse aussi. Comme notes de bas de page, avez-vous implémenté le portail reg d'utilisateur et paypal, ou avez-vous utilisé des paquets existants? –

+0

Ma mise en œuvre dérive de cette approche [ici] (http://www.codexworld.com/paypal-standard-payment-gateway-integration-php/) –

+0

Vous devez stocker l'ID de l'utilisateur dans la variable ['custom'] (https://developer.paypal.com/docs/classic/paypal-payments-standard/integration-guide/Appx_websitestandard_htmlvariables/) afin que votre gestionnaire IPN ait accès à l'identifiant. – Mikey

Répondre

0

J'ai trouvé une solution acceptable (assez simple, en fait) et je l'affiche ici car je ne pouvais pas le trouver partout. La façon de faire est d'ajouter un champ caché à votre formulaire qui prend l'identifiant de l'utilisateur de votre utilisateur connecté.

<input type="hidden" name="custom" value="<?php echo $your_userid; ?>"> //set somewhere else in the code 

Puis, sur votre url IPN, cette valeur de champ de formulaire va être disponible de nouveau à vous via POST:

$userid_to_log = $_POST['custom']; 

Ajouter une nouvelle colonne à vos paiements table nommée userid (par exemple) Enfin, inclure ce champ dans votre instruction d'insertion:

$db->query("INSERT INTO payments(item_number,txn_id,payment_gross,currency_code,payment_status, userid) VALUES('".$item_number."','".$txn_id."','".$payment_gross."','".$currency_code."','".$payment_status."','".$userid_to_log."')"); 

Avec cette solution, vous devez activer IPN sur, mais à mon avis, il est plus sûr que de compter sur l'option qui SUCCES b Asically obtient toutes les variables via GET à la place.