如何在 PayPal 上实现自动订阅功能

PayPal 提供了便捷的自动订阅功能,帮助企业简化支付流程。本文将详细介绍如何通过 PayPal SDK 实现自动订阅功能,包括创建订阅计划、处理支付结果和管理订阅等关键步骤。

实现自动订阅的五步流程

以下是 PayPal 官方推荐的自动续费流程,结合实际开发需求,还需处理支付结果和订阅管理:

  1. 创建并激活订阅计划:首先需要创建一个订阅计划,并确保其处于激活状态;
  2. 用户创建订阅:用户在网站上创建订阅后,会跳转到 PayPal 网站等待用户同意;
  3. 用户同意订阅:用户同意订阅后,将跳转回您的网站,完成订阅流程;
  4. 获取用户账单信息:接收每次扣款结果通知,或主动查询支付结果;
  5. 处理取消订阅通知:当用户取消订阅时,及时处理相关通知。

使用 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 自动订阅功能,提升用户体验和管理效率。

上一篇 2025年7月29日
下一篇 2025年7月29日

相关推荐