PayPal 提供了便捷的自动订阅功能,帮助企业简化支付流程。本文将详细介绍如何通过 PayPal SDK 实现自动订阅功能,包括创建订阅计划、处理支付结果和管理订阅等关键步骤。
实现自动订阅的五步流程
以下是 PayPal 官方推荐的自动续费流程,结合实际开发需求,还需处理支付结果和订阅管理:
- 创建并激活订阅计划:首先需要创建一个订阅计划,并确保其处于激活状态;
- 用户创建订阅:用户在网站上创建订阅后,会跳转到 PayPal 网站等待用户同意;
- 用户同意订阅:用户同意订阅后,将跳转回您的网站,完成订阅流程;
- 获取用户账单信息:接收每次扣款结果通知,或主动查询支付结果;
- 处理取消订阅通知:当用户取消订阅时,及时处理相关通知。
使用 PayPal SDK 进行开发
在开发过程中,可以使用 PayPal 提供的 PHP SDK 来实现自动订阅功能:
php
composer require paypal/rest-api-sdk-php
官方提供了完整的 示例代码,方便开发者参考。同时,通过 PayPal Sandbox 可以进行便捷的调试。
创建并激活订阅计划
在创建订阅计划时,需注意以下几点:
- 订阅计划等同于产品:每个商品或服务需要创建不同的订阅计划,但可以在创建协议时根据用户需求进行调整;
- 试用期支付规则:若需要设置试用期支付 (
TRIAL
),必须同时存在常规支付 (REGULAR
)。试用期是否为新用户的判断需通过业务代码实现; - 协议生效时间:用户订阅协议的生效时间必须在当前时间 24 小时以后,因此首次扣款最早也只能在 24 小时后进行。若业务需要立即扣款,可以使用
MerchantPreferences
中的setSetupFee
设置首次费用; - Bug 修复:PayPal SDK 可能会报错
"NotifyUrl" value is NULL
,这是服务端问题,官方尚未修复,可通过 GitHub Issue 查看解决方案。
创建订阅
用户可以为同一个订阅计划创建多个订阅协议。创建协议后,用户将被跳转到 PayPal 网站等待同意:
- 协议开始时间:协议的开始时间 (
start_date
) 最早为当前时间 24 小时后,因此该时间实际上是第二次扣款时间。若按月扣款,需将start_date
设置为一个月后,并通过setSetupFee
设置首次扣款费用; - 获取协议 ID:创建订阅后,协议 ID (
Agreement.id
) 尚未生成,需从跳转链接中提取token
以匹配用户同意后的协议信息。
php
$link = $agreement->getApprovalLink();
parse_str(parse_url($link, PHP_URL_QUERY), $params);
$token = $params[‘token’];
- 多次订阅:用户可以对同一订阅计划进行多次订阅,因此需要在新协议执行时手动取消之前的协议;
- 扣款延迟:实际扣款时间会有延迟,通常比
AgreementDetail.next
显示的时间晚几个小时。为确保连续性,建议设置提前一天扣款。
订阅管理
通过 PayPal 的 Webhooks 功能,可以更方便地管理订阅:
- 设置 Webhook 通知:在
My Apps -> REST API apps -> WEBHOOKS
中设置webhook
通知。每次成功扣款后,PayPal 都会发送PAYMENT.SALE.COMPLETED
事件通知,其中包含billing_agreement_id
字段,可用于匹配订阅协议; - 查询交易记录:每次
AgreementDetail
都会返回下次收款时间 (next
)。超过该时间后,可通过Agreement::searchTransactions
方法查询该协议的所有交易记录。由于实际扣款时间通常会有延迟,建议多次重试。
通过以上步骤,您可以快速实现 PayPal 自动订阅功能,提升用户体验和管理效率。