实现PayPal自动订阅功能的完整指南
February 12th, 2025

PayPal的自动续费功能为开发者和用户提供了便捷的支付体验。本文将详细讲解如何通过PayPal SDK实现自动订阅功能,并分享一些实际开发中的注意事项和技巧。

自动续费的核心步骤

实现PayPal自动订阅功能主要分为以下五个步骤:

  1. 创建并激活订阅计划:在开始之前,需要预先创建订阅计划并激活。

  2. 用户创建订阅:用户选择订阅计划后,跳转到PayPal网站等待用户同意。

  3. 用户同意后执行订阅:用户同意订阅后,返回网站并完成订阅操作。

  4. 获取用户账单信息:包括接收每次扣款结果的通知或主动查询支付结果。

  5. 处理用户取消订阅等通知:应对用户取消订阅或其他相关操作。

使用PayPal SDK

首先,安装PayPal PHP SDK:

bash composer require paypal/rest-api-sdk-php

官方提供了完整的示例代码,方便开发者在实际项目中参考。此外,可以通过PayPal沙盒环境进行调试和测试。

👉 野卡 | 一分钟注册,轻松订阅海外线上服务

创建订阅计划并激活

在创建订阅计划时,需要注意以下几点:

  • 订阅计划的定义:每个产品需要为不同价格创建不同的订阅计划,但可以在创建协议时针对不同用户进行调整。

  • 试用期支付设置:在设置TRIAL类型支付时,必须同时存在REGULAR类型的支付。TRIAL不会自动判断是否为新用户,因此新用户的首次优惠需要通过业务代码实现。

  • 协议生效时间:用户订阅协议的最早生效时间为当前时间24小时后,因此循环扣款的设置无法立即生效。如果需要立即进行首次扣款,可以通过设置MerchantPreferencessetSetupFee来实现。

  • PayPal SDK 报错处理:如果遇到"NotifyUrl" value is NULL错误,可以参考官方GitHub上的解决方案。

创建订阅

在创建订阅时,需要注意以下几点:

  • 用户可创建多个订阅协议:同一用户可以针对同一订阅计划创建多个协议。创建后,用户会被跳转到PayPal网站等待同意。

  • 协议生效时间设置:由于start_date最早为当前时间24小时后,该值实际上是设置第二次扣款时间。如果是按月付款,建议将start_date设置为一个月后,并通过setSetupFee设置首次扣款费用。

  • 提取token信息:在创建订阅后,尚未生成Agreement.id,需要从跳转链接中提取token以匹配用户同意后的协议信息。

php $link = $agreement->getApprovalLink(); parse_str(parse_url($link, PHP_URL_QUERY), $params); $token = $params['token'];

  • 取消旧协议:同一用户可以多次订阅同一计划,因此在创建新协议时,可能需要手动取消用户的旧协议。

  • 扣款时间延迟:实际扣款时间通常比AgreementDetail.next显示的时间晚几个小时,建议设置提前一天扣款以确保连续性。

管理订阅

PayPal提供了webhook通知功能,可以在My Apps -> REST API apps -> WEBHOOKS中进行设置。每次循环扣款成功后,PayPal会发送PAYMENT.SALE.COMPLETED事件通知,通过billing_agreement_id字段匹配已创建的订阅。

此外,可以通过Agreement::searchTransactions方法查询协议的所有交易记录。需要注意的是,PayPal的实际扣款时间通常会有延迟,因此可能需要多次重试。

通过以上步骤,您可以高效地实现PayPal自动订阅功能,并为用户提供更流畅的支付体验。

Subscribe to xiaojin
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.
More from xiaojin

Skeleton

Skeleton

Skeleton