37 votes

Test de l'abonnement Paypal IPN

J'aimerais tester les IPNs des abonnements paypal, à la fois celles reçues lors de la création d'un abonnement, et celles envoyées plus tard avec le prochain paiement (par exemple mensuel si l'abonnement est de x $ par mois).

Cependant, je préférerais ne pas attendre un mois ou un jour pour recevoir la deuxième IPN. Existe-t-il un moyen d'envoyer une IPN plus rapidement, par exemple toutes les heures, en utilisant Paypal ou leur bac à sable ?

La documentation indique que vous ne pouvez spécifier que des années, des mois, des jours et des semaines comme période d'abonnement.

56voto

dondo Points 818

L'assistance aux développeurs et la documentation de PayPal lui font honte. Mais cette limitation particulière n'est pas aussi débilitante qu'il n'y paraît à première vue.

À titre d'essai, définissez votre paiement récurrent comme suit no ont un essai gratuit. Lorsque vous créez un nouvel abonnement, votre serveur reçoit deux messages IPN en succession rapide, l'un pour créer l'abonnement et l'autre pour appliquer un paiement. C'est à peu près tout ce dont vous avez besoin pour tester.

Si vous disposez d'un essai gratuit, vous recevrez pratiquement la même paire de messages, mais avec une période d'essai entre les deux :)

Le premier message ("créer un abonnement") ressemblera à ceci. Notez le 'txn_type' -- c'est l'information clé pour désambiguïser les deux messages :

{
  "txn_type"=>"subscr_signup",
  "subscr_id"=>"unique_id",
  "verify_sign"=>"random_gibberish",

  "item_number"=>"your_subscription_name"
  "subscr_date"=>"14:32:23 Feb 15, 2010 PST",
  "btn_id"=>"1111111",
  "item_name"=>"Your Subscription Description",
  "recurring"=>"1",
  "period1"=>"1 M",

  # This example is from a "free trial" IPN notification-- if you don't have a 
  # free trial defined, there will only be 'period1' fields, and they'll
  # have the data that appears here in the 'period3' fields.
  "amount1"=>"0.00",
  "mc_amount1"=>"0.00",
  "period3"=>"1 M",
  "amount3"=>"34.95",
  "mc_amount3"=>"34.95",
  "mc_currency"=>"USD",

  "payer_status"=>"verified",
  "payer_id"=>"payer_unique_id",
  "first_name"=>"Test",
  "last_name"=>"User",
  "payer_email"=>"test_xxxx@example.com",
  "residence_country"=>"US",

  "business"=>"seller_xxxxxxx@example.com",
  "receiver_email"=>"seller_xxxxxxx@example.com",

  "reattempt"=>"1",

  "charset"=>"windows-1252","notify_version"=>"2.9","test_ipn"=>"1",
}

Le second message est le plus intéressant dans ce cas. Il s'agit essentiellement du même message que vous recevrez plus tard lorsque le paiement récurrent sera appliqué. Il ressemble à peu près à ceci :

{
  "txn_type"=>"subscr_payment",
  "subscr_id"=>"unique_id",
  "verify_sign"=>"random_gibberish",

  "txn_id"=>"payment_unique_id",
  "payment_status"=>"Completed",
  "payment_date"=>"12:45:33 Feb 16, 2010 PST",

  "item_number"=>"your_subscription_name"
  "subscr_date"=>"14:32:23 Feb 15, 2010 PST",
  "custom"=>"data-you-sent-in-a-custom-field",

  "id"=>"1",
  "payment_gross"=>"34.95",
  "mc_currency"=>"USD",
  "payment_type"=>"instant",
  "payment_fee"=>"1.31",
  "payer_status"=>"verified",
  "mc_fee"=>"1.31",
  "mc_gross"=>"34.95",
  "btn_id"=>"1111111",

  "payer_id"=>"payer_unique_id",
  "first_name"=>"Test",
  "last_name"=>"User",
  "payer_email"=>"test_xxxx@example.com",
  "residence_country"=>"US",

  "receiver_id"=>"your_merchant_id",
  "business"=>"seller_xxxxxxx@example.com",
  "receiver_email"=>"seller_xxxxxxx@example.com",

  "protection_eligibility"=>"Ineligible",
  "transaction_subject"=>"",
  "charset"=>"windows-1252","notify_version"=>"2.9","test_ipn"=>"1",
}

Vous pouvez donc effectuer la quasi-totalité de vos tests sans attendre un seul jour. Lorsque vous penserez avoir trouvé la solution, vous recevrez le lendemain de nombreux messages IPN d'abonnement.

En outre, aquí est un lien vers la documentation de PayPal.

8voto

Neil T Points 540

Il est possible de renvoyer des IPN de test, de sorte que vous ne devriez avoir à "acheter" qu'un seul abonnement pour les tests. Une fois que vous avez acheté un abonnement, voici ce qu'il faut faire :

  1. Connectez-vous à votre bac à sable PayPal vendeur compte.
  2. Sélectionnez "Profil" => "Mes préférences de vente".
  3. Sélectionnez "Préférences de notification de paiement instantané" dans la troisième colonne.
  4. Confirmez que l'IPN est activé et que l'URL est correcte.
  5. Cliquez sur le lien vers la page Historique de l'IPN page.
  6. Faites défiler vers le bas, cochez une ou plusieurs IPN et cliquez sur "Renvoyer".

Après confirmation, le(s) IPN(s) sélectionné(s) sera(ont) renvoyé(s) à l'URL que vous avez spécifiée. Vous pouvez répéter l'opération un nombre illimité de fois avec le(s) même(s) IPN(s).

L'excellente réponse de @dondo couvre le reste.

7voto

Remus Rusanu Points 159382

Auparavant, la période spécifiée en jours était traitée par le serveur de test comme des minutes, de sorte que vous étiez appelé toutes les 3 minutes lorsque vous spécifiiez "d3". Je pense qu'ils ont supprimé cette fonction et je n'ai pas connaissance d'une fonction de remplacement pour tester les abonnements.

6voto

Rich Points 171

Je voulais juste donner un coup de chapeau à Neil car c'est exactement ce que je cherchais et je n'ai pas assez de réputation pour répondre ou donner un upvote.

Croyez-le ou non, paypal ne facilite toujours pas les tests d'abonnement avec les fichiers ipn :/

Donc, juste parce que je ne l'ai pas vu ici et que le PO avait l'air de penser qu'il ne devait s'attendre qu'à deux réponses possibles de la part du pape

si quelqu'un d'autre a des problèmes, voici d'autres txn_type qui ont touché mon ipn lors de mes tests :

//when paypal subscription profile is created for the subscriber
subscr_signup 

//payment made for a given billing cycle
subscr_payment 

//when subscription fails
subscr_failed 

//user cancels subscription - not
subscr_cancel 

//end of term - paypal is "done" with that subscriber 
subscr_eot 

//why I was looking for this thread to begin with lol
recurring_payment_suspended_due_to_max_failed_payment

ce dernier a frappé mon ipn ce matin contre chacun de mes abonnés de test. lorsque j'ai cherché ce que cela signifiait, j'ai trouvé que les éléments suivants étaient également possibles :

recurring_payment_profile_created

recurring_payment_profile_cancel

recurring_payment_profile_modify

recurring_payment

recurring_payment_skipped

recurring_payment_failed

Je ne sais pas ce que j'ai fait pour obtenir cela parce que les abonnements et les paiements récurrents sont techniquement différents aux yeux de PayPal (les abonnements peuvent éventuellement ne jamais se terminer mais les paiements récurrents ont un plafond sur le total des paiements que quelqu'un peut faire pour un "abonnement") mais leur documentation n'est pas toujours très claire non plus, donc je ne sais pas. Je suis toujours en train de travailler sur ce point car il s'agissait d'un bouton d'abonnement généré par un compte marchand en bac à sable, mais peu importe.

Joyeux maux de tête :)

UPDATE : Je viens de trouver la solution à mon problème - alors pour qu'on ait l'impression que je sais ce que je fais, je vais expliquer...

Je pense que l'environnement d'abonnement de Paypal est en train de mourir lentement. J'ai remarqué l'autre jour que lorsque je me baladais dans sandbox.paypal.com, j'obtenais souvent le message "Fatal Failure". L'actualisation de la page semble corriger ce problème la plupart du temps, bien que parfois je doive actualiser plusieurs fois pour que l'écran réapparaisse.

Je reçois la même réponse de la part de l'IPN, ce qui explique pourquoi tous les abonnements que j'avais ont été suspendus aujourd'hui. Je n'ai pas eu le temps d'en parler, mais j'ai pu renvoyer la réponse IPN et je l'ai capturée dans un fichier texte (lol) et ensuite j'ai frappé le fichier IPN en lisant la réponse et en la renvoyant à paypal (c'est vraiment plus compliqué que ça, je fais juste croire que c'est facile).

En tout cas, en rafraîchissant la page, je peux initier la poignée de main paypal plus ou moins à la demande et quand je le fais, c'est 50/50 - parfois j'obtiens VERIFIED, et parfois j'obtiens Fatal Failure - tout comme quand j'essaie de faire quoi que ce soit dans leur site sandbox (Fatal Failure).

Voici un exemple d'une partie de la réponse que j'ai reçue de leur part et qui n'a pas abouti... J'obtiens un 200, donc je pense que le fait d'atteindre leur serveur n'est pas le problème de connectivité, mais je commence à voir un modèle avec "Fatal Failure" ici et cela indique que c'est plus leur côté que le mien.

HTTP/1.1 200 OK 
Date: Tue, 29 Sep 2015 02:41:00 GMT 
Server: Apache 

Fatal Failure

0voto

Sebas Points 10416

Vous pouvez également créer manuellement des IPN à partir de leur bac à sable :

https://developer.paypal.com/cgi-bin/devscr?cmd=_ipn-link-session

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X