您如何知道用户是否已支付订阅费用

How do you know if a user has paid for a subscription

我正在查看此 tutorial 以创建我自己的贝宝订阅网关,我以前从未对 API 感到如此困惑和迷茫。

因此,当我们创建计划时,我们会设置商家偏好,特别是 return URL

$merchantPreferences->setReturnUrl("mysite.com/subscription?success=true")

然后在教程结束时,当用户为服务付费后,它会将用户重定向到 mysite.com/subscription?success=true

然后是获取最重要的东西的代码,来自 return URL $token = $_GET['token']; 的令牌允许我们使用 $agreement->execute($token, $apiContext); 获取协议 ID。我的问题是,用户支付订阅费用然后关闭他们的标签并且没有被重定向的可能性很大。那时,我的系统还没有识别他们的付款并在我这边激活他们的订阅,即使他们已经支付了他们的订阅费用。

我是不是错了,误解了 Paypal 中发生的事情 API 还是 Paypal 系统有缺陷?

该教程使用了已弃用的 SDK,该 SDK 仅适用于以前版本的 PayPal 订阅。不要按照那个教程里的任何东西,那是不好的。


对于 PayPal Subscriptions 的当前版本,那里描述的按钮将在客户端激活订阅。

您可以改为设置按钮,并在获得批准后立即使用 REST API 调用 。从服务器激活为您提供可靠的服务器端通知,表明订阅已启动。这些调用没有 SDK,您必须先获取 API 访问令牌并通过 HTTPS 自行执行调用。

但是,要收到订阅的实际 付款 通知(通常在第二天开始并重复其周期),您需要事件的 webhook 侦听器PAYMENT.SALE.COMPLETED。没有支持 webhooks 的 SDK,因此您必须设置自己的侦听代码,并对自己收到的 webhooks 消息执行任何所需的验证(可以通过检查签名或 API 回调到 PayPal 来完成验证)

如果您需要在订阅开始时(而不是第二天)收到付款,请在常规计费周期开始前配置 setup_fee 和一个周期试用期。