概述
在业务需求中,集成 PayPal 以实现循环扣款功能是一个常见需求。然而,相关的开发教程并不容易找到。本文将详细介绍如何通过 PayPal 的 API 实现这一功能,帮助你快速上手。
PayPal 的支付接口
PayPal 提供了多套支付接口:
- Braintree:支持 Express Checkout,提供信用卡、客户信息等管理功能。
- REST API:主流接口方式,支持 OAuth 2.0 认证。
- NVP/SOAP API:旧接口,不推荐使用。
Braintree 接口
Braintree 是 PayPal 收购的一家公司,除了支持 PayPal 支付外,还提供升级计划、信用卡、客户信息等全套管理功能。由于其在国内不支持,因此不推荐使用。
REST API
REST API 是 PayPal 主流的接口方式,支持 OAuth 2.0 认证和 RESTful 风格的 API 调用。
旧接口
除非 REST API 无法满足需求,否则不推荐使用旧接口。
REST API 介绍
PayPal 的官方 API 参考文档详细介绍了其 API 和使用方式。为了快速完成业务需求,建议直接安装官方提供的 PayPal-PHP-SDK,并通过其 Wiki 作为起点。
在开始之前,请确保你已准备好以下内容:
- Sandbox 账号
- Client ID
- Client Secret
- Webhook API(必须为 HTTPS 开头且为 443 端口)
- Return URL
接口分类
- Payments:一次性支付接口,不支持循环扣款。
- Payouts:未使用,忽略。
- Authorization and Capture:通过 PayPal 账号登录网站并获取相关信息。
- Sale:与商城有关,未使用,忽略。
- Order:与商城有关,未使用,忽略。
- Billing Plan & Agreements:实现循环扣款必须使用的功能。
- Vault:存储信用卡信息。
- Payment Experience:未使用,忽略。
- Notifications:处理 Webhook 信息,重要但非本文关注内容。
- Invoice:票据处理。
- Identity:认证处理,实现 OAuth 2.0 登录。
实现循环扣款的步骤
1. 创建升级计划并激活
升级计划对应 Plan
类,创建后需将状态修改为 ACTIVE
才能正常使用。Plan
包含 PaymentDefinition
和 MerchantPreferences
两个对象,均不能为空。
2. 创建订阅并跳转到 PayPal 网站等待用户同意
创建 Agreement
时,需注意 setSetupFee
方法设置的是首次扣款费用,而 Agreement
的循环扣款方法设置的是第 2 次开始的费用。
3. 用户同意后执行订阅
用户同意后,需执行 Agreement
的 execute
方法才算完成订阅。完成后,扣款可能会有几分钟的延迟。
4. 获取扣款账单
订阅后,可能不会立刻产生交易记录。如果为空,则过几分钟再次尝试。
注意事项
- 国内连接慢:在国内使用 Sandbox 测试时,连接速度较慢,需考虑用户关闭页面的情况。
- 实现 Webhook:用户取消订阅时,网站应能收到通知。
- 订阅生效时间:订阅一旦产生,除非主动取消,否则将一直生效。
- 原子操作:在用户切换升级计划时,应取消前一个计划并完成新计划的签约,此过程应为原子操作并放入队列中执行。