您如何通过他们的 api 取消 PayPal 订阅?

Posted

技术标签:

【中文标题】您如何通过他们的 api 取消 PayPal 订阅?【英文标题】:How do you cancel a PayPal subscription through their api? 【发布时间】:2011-05-19 21:56:01 【问题描述】:

在此页面上: https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_api_ECRecurringPayments

它说可以使用他们的 API 取消 PayPal 订阅。知道 SubscriptionId 的任何人都可以给我一些代码示例如何做到这一点?

非常感谢。

【问题讨论】:

您是否收到过除“Failure”/“Profile ID is invalid”以外的回复?据我发现,您不能以这种方式取消“正常”创建的订阅(没有 CreateRecurringPaymentsProfile)。将订阅 ID 放在那里并不能解决问题(对我而言)。 "订阅是通过网站支付标准的“订阅”按钮创建的。在 2009 年之前,订阅配置文件 ID 以 S-XXXXXXXX 开头。您无法通过任何 API 调用管理这些订阅。之后2009 年,订阅配置文件 ID 以 I-XXXXXX 开头。您可以通过 ManageRecurringPaymentsProfileStatus API 调用取消这些订阅。”遇到同样的问题,只需通过 ***.com/questions/9359442/…> 阅读即可,您可以使用 API 取消标准网站订阅。 现在是 2012 年,直到今天我的所有订阅都以 S- 开头,我无法使用取消方法。也许有人找到了解决方案? 【参考方案1】:

您是否设法找到了一个简单的解决方案?我也在找这个。谢谢!

更新:搜索后,“ManageRecurringPaymentsProfileStatus”非常好用,只需一个简单的 POST 请求即可。

确保您的用户、密码或签名不可见(换句话说,请在您的服务器上执行此操作,而不是通过 javascripthtml 帖子在您的客户端上执行此操作)。

下面是一个简单的 Python 工作示例。它有效,我现在每天都在使用它。

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')

响应是一个如下所示的字符串:

时间戳= 2011%2d01%2d28t14%3a47%3a45z&correlationId = 148ebe1d25566&ack =失败&version = 54%2e0&build = 1704252&l_errorcode0 = naminal%20profile%20id&l_longmessage0 =%20.valid%20id%20is%20.valid&l_severitycode0 = error

“ACK”字段表示“失败”或“成功”。

在回答下面的 cmets 时,请注意它确实使我能够取消通过动态创建的链接创建的订阅,例如:

<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>

请注意,我根本不使用“修改”标志。

【讨论】:

我没有。我还在手动做。谢天谢地,这种情况并不经常发生。 嗨,安东尼。找到了解决方案,请参阅上面我更新的帖子。希望它对你有用。干杯。 谢谢路易斯。我会试试看,但你能确认它适用于手动创建的订阅吗?请参阅下面 Vitaly 的回答。 是的,确实如此。我不知道您是如何创建订阅的,但我已经更新了上面的答案以展示我的做法。 当您想取消通过订阅按钮创建的订阅时,您将什么订阅 ID 放入请求中?我尝试使用通过 IPN 接收的“subscr_id”(ID 格式为 I-),但它始终无效。

以上是关于您如何通过他们的 api 取消 PayPal 订阅?的主要内容,如果未能解决你的问题,请参考以下文章

您可以通过 API 取消 PayPal 自动付款吗? (通过托管按钮创建的订阅)

如何从PayPal API获取“订阅已取消”的信息 - GetTransactionDetails

如何在 PayPal 订阅 API 中获取用户的订阅状态

在结算周期结束时取消 PayPal 订阅

通过 API 取消 PayPal 订单

如何检查 PayPal 订阅没有被取消?