PayPal 是全球广泛使用的在线支付平台,其自动订阅功能为企业和开发者提供了灵活且强大的支付管理工具。本文将详细介绍如何使用 PayPal 实现自动订阅功能,并解析开发中的关键步骤和注意事项。
自动订阅的实现步骤
PayPal 官方提供了自动续费的实现流程,分为以下五个步骤:
- 创建并激活订阅计划
订阅计划是自动订阅的基础,开发者需要提前创建并激活相关计划。 - 用户创建订阅并跳转至 PayPal
用户创建订阅后,将跳转至 PayPal 网站等待用户同意。 - 用户同意后返回并执行订阅
用户同意后,系统将跳转回网站并执行订阅。 - 获取用户账单信息
包括每次扣款结果的通知接收或主动查询支付结果。 - 处理用户取消订阅等通知
开发者需要处理用户取消订阅等操作的通知。
使用 PayPal SDK 进行开发
在开发过程中,可以使用 PayPal 提供的 SDK 来简化流程。以下是 PHP 开发环境的示例:
php
composer require paypal/rest-api-sdk-php
官方提供了完整的 Samples 供开发者参考。此外,通过 PayPal Sandbox 可以方便地进行调试。
创建并激活订阅计划
在创建订阅计划时,需要注意以下几点:
- 订阅计划等同于产品:需要为不同价格的商品创建不同的计划,但可以在创建协议时为不同用户进行调整。
- 试用期支付设置:创建
TRIAL
类型支付时,必须同时存在REGULAR
支付。试用期支付的逻辑需要开发者自行实现。 - 协议生效时间:协议生效时间必须设置为当前时间 24 小时之后,因此首次扣款无法立即执行。可以通过
MerchantPreferences
的setSetupFee
设置首次扣款费用。 - SDK 报错处理:PayPal SDK 可能会报错
"NotifyUrl" value is NULL
,这是 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
中设置webhook
通知。每次扣款成功时,PayPal 会发送PAYMENT.SALE.COMPLETED
事件通知,开发者可通过billing_agreement_id
字段匹配付款协议。 - 交易查询:每次
AgreementDetail
都会返回下次收款时间next
参数。超过该时间后,可通过Agreement::searchTransactions
方法查询该协议的所有交易。由于扣款时间可能延迟,建议多次重试。
通过以上步骤和技巧,开发者可以高效地利用 PayPal 实现自动订阅功能,为用户提供便捷的支付体验。