2010-12-03 25 views
12

Sur cette page: https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_api_ECRecurringPaymentsComment annuler un abonnement PayPal via leur API?

il dit qu'il est possible d'annuler un abonnement PayPal en utilisant leur API. Connaissant le SubscriptionId quelqu'un peut-il me donner un exemple de code comment faire cela?

Merci beaucoup.

+0

Avez-vous déjà reçu une réponse autre que "* Echec *"/"* L'identifiant du profil n'est pas valide *"? Pour autant que j'ai découvert, vous ne pouvez pas annuler un abonnement créé "normalement" (sans * CreateRecurringPaymentsProfile *) de cette façon. Mettre l'identifiant d'abonnement là-bas ne fait pas l'affaire (pour moi). – nssmart

+2

"Un abonnement est créé via le bouton" S'abonner "de la page" Paiements sur site marchand "Avant 2009, l'identifiant du profil d'abonnement commençait par S-XXXXXXXX, vous ne pouvez pas gérer ces abonnements via les appels API. avec I-XXXXXX Vous pouvez annuler ces abonnements via l'appel de l'API ManageRecurringPaymentsProfileStatus. " Avait le même problème et il suffit de le lire par Robert et cela fonctionne, vous pouvez annuler l'abonnement de site Web standard en utilisant API. –

+0

Maintenant, c'est 2012 et tous mes abonnements jusqu'à aujourd'hui commencent par S- et je ne suis pas en mesure d'utiliser la méthode d'annulation. Peut-être que quelqu'un a trouvé une solution? – Tomas

Répondre

15

Avez-vous réussi à trouver une solution facile? Je cherche cela aussi. Merci!

Mise à jour: Après la recherche, le "ManageRecurringPaymentsProfileStatus" est très facile à utiliser via une simple demande POST. Assurez-vous que votre nom d'utilisateur, votre mot de passe ou votre signature ne sont pas visibles (en d'autres termes, faites cela sur votre serveur et PAS sur votre client via les posts javascript ou html). Ci-dessous un exemple de travail simple en Python.

Cela fonctionne et je l'utilise maintenant tous les jours.

import urllib 
from google.appengine.api import urlfetch 

form_fields = { 
     "METHOD": "ManageRecurringPaymentsProfileStatus", 
     "PROFILEID": "xxx", # put your subscription ID here 
     "ACTION": "cancel", 
     "USER": "xxx", # Get USER, PWD, and SIGNATURE from your Paypal's account preferences 
     "PWD": "xxx", 
     "SIGNATURE": "xxx", 
     "VERSION": "54.0" 
} 

api_url = 'https://api-3t.sandbox.paypal.com/nvp' # remove the sandbox part for production 

form_data = urllib.urlencode(form_fields) 

result = urlfetch.fetch(url=api_url, 
        payload=form_data, 
        method=urlfetch.POST, 
        headers={'Content-Type': 'application/x-www-form-urlencoded'}) 

La réponse est une chaîne qui ressemble à ceci:

TIMESTAMP = 2011% 2D01% 2d28T14% 3a47% 3a45Z & CorrelationId = 148ebe1d25566 & ACK = échec & VERSION = 54% 2E0 & BUILD = 1704252 & & L_ERRORCODE0 = 11552 L_SHORTMESSAGE0 = Invalid% 20profile% 20ID & L_LONGMESSAGE0 = Le% 20profile% 20ID% 20is% 20invalid & L_SEVERITYCODE0 = erreur

Le champ 'ACK' indique 'Failure' ou 'Success'.

En réponse aux commentaires ci-dessous, notez qu'il ne me permet d'annuler les abonnements qui ont été créés par un lien créé dynamiquement tels que:

<a href="https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_xclick-subscriptions&business=llcpro_1295263400_biz%40jeregle.com&item_name=Abonnement%20mensuel&a3=41.86&t3=M&p3=1&src=1&sra=1&currency_code=EUR&no_note=1&no_shipping=1&lc=FR&custom=xxxxx&notify_url=https%3A%2F%2Fyournotifyurl.com%2Fipn&charset=utf-8&country=FR&a1=0&t1=D&p1=31" target="_blank">Subscribe</a>

Notez que je ne pas utiliser le drapeau ' modifier 'du tout.

+0

Je ne l'ai pas fait. Je le fais toujours manuellement. Heureusement, cela n'arrive pas très souvent. – Anthony

+0

Bonjour Anthony. J'ai trouvé la solution, voir ma mise à jour ci-dessus. J'espère que cela vous sera utile. À votre santé. –

+1

Merci Louis. Je vais essayer, mais pouvez-vous confirmer que cela fonctionne pour l'abonnement créé manuellement? Voir la réponse de Vitaly ci-dessous. – Anthony