使用 PayPal 实现自动订阅功能

PayPal 是全球广泛使用的在线支付平台,其自动订阅功能为企业和开发者提供了灵活且强大的支付管理工具。本文将详细介绍如何使用 PayPal 实现自动订阅功能,并解析开发中的关键步骤和注意事项。

自动订阅的实现步骤

PayPal 官方提供了自动续费的实现流程,分为以下五个步骤:

  1. 创建并激活订阅计划
    订阅计划是自动订阅的基础,开发者需要提前创建并激活相关计划。
  2. 用户创建订阅并跳转至 PayPal
    用户创建订阅后,将跳转至 PayPal 网站等待用户同意。
  3. 用户同意后返回并执行订阅
    用户同意后,系统将跳转回网站并执行订阅。
  4. 获取用户账单信息
    包括每次扣款结果的通知接收或主动查询支付结果。
  5. 处理用户取消订阅等通知
    开发者需要处理用户取消订阅等操作的通知。

使用 PayPal SDK 进行开发

在开发过程中,可以使用 PayPal 提供的 SDK 来简化流程。以下是 PHP 开发环境的示例:

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

官方提供了完整的 Samples 供开发者参考。此外,通过 PayPal Sandbox 可以方便地进行调试。

创建并激活订阅计划

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

  • 订阅计划等同于产品:需要为不同价格的商品创建不同的计划,但可以在创建协议时为不同用户进行调整。
  • 试用期支付设置:创建 TRIAL 类型支付时,必须同时存在 REGULAR 支付。试用期支付的逻辑需要开发者自行实现。
  • 协议生效时间:协议生效时间必须设置为当前时间 24 小时之后,因此首次扣款无法立即执行。可以通过 MerchantPreferencessetSetupFee 设置首次扣款费用。
  • 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 实现自动订阅功能,为用户提供便捷的支付体验。

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

热门推荐