文章从 PayPal 支付的生命周期出发,详细解析了 Checkout 收银台和 Subscription 订阅计划的完整流程,并提供了具体的代码实现,帮助你快速上手 PayPal 支付对接。
1. PayPal 支付的生命周期
1.1 Checkout 收银台支付
Checkout 收银台支付的流程与支付宝的收银台类似,以下是详细步骤:
- 组装参数并请求 Checkout 接口:本地应用组装好参数后请求 Checkout 接口,接口同步返回一个支付 URL。
- 重定向至支付 URL:本地应用重定向至该 URL,用户登录 PayPal 账户并确认支付,支付成功后跳转至本地应用设置的回调地址。
- 发起扣款:本地应用请求 PayPal 执行付款接口发起扣款。
- 接收异步通知:PayPal 发送异步通知至本地应用,本地应用拿到数据包后进行验签操作。
- 处理支付结果:验签成功后,执行支付完成后的业务逻辑,如修改订单状态、增加销量、发送邮件等。
1.2 Subscription 订阅支付
Subscription 订阅支付的流程相对复杂,以下是详细步骤:
- 创建计划:首先创建一个订阅计划。
- 激活计划:激活该订阅计划。
- 创建订阅申请:使用已激活的计划创建订阅申请。
- 用户授权与支付:本地应用跳转至订阅申请链接,获取用户授权并完成第一期付款,支付成功后携带 token 跳转至本地应用设置的回调地址。
- 执行订阅:回调后请求执行订阅。
- 处理订阅结果:收到订阅授权和支付结果的异步回调,验证成功后执行支付完成后的业务逻辑。
2. 具体实现
2.1 Checkout 支付实现
2.1.1 安装 PayPal SDK
在项目中安装 PayPal 的 PHP SDK:
bash
$ composer require paypal/rest-api-sdk-php:*
2.1.2 创建 PayPal 配置文件
创建 PayPal 配置文件 config/paypal.php
,配置内容如下:
php
<?php
return [
‘sandbox’ => [
‘client_id’ => env(‘PAYPAL_SANDBOX_CLIENT_ID’, ”),
‘secret’ => env(‘PAYPAL_SANDBOX_SECRET’, ”),
‘notify_web_hook_id’ => env(‘PAYPAL_SANDBOX_NOTIFY_WEB_HOOK_ID’, ”),
‘checkout_notify_web_hook_id’ => env(‘PAYPAL_SANDBOX_CHECKOUT_NOTIFY_WEB_HOOK_ID’, ”),
‘subscription_notify_web_hook_id’ => env(‘PAYPAL_SANDBOX_SUBSCRIPTION_NOTIFY_WEB_HOOK_ID’, ”),
],
'live' => [
'client_id' => env('PAYPAL_CLIENT_ID', ''),
'secret' => env('PAYPAL_SECRET', ''),
'notify_web_hook_id' => env('PAYPAL_NOTIFY_WEB_HOOK_ID', ''),
'checkout_notify_web_hook_id' => env('PAYPAL_CHECKOUT_NOTIFY_WEB_HOOK_ID', ''),
'subscription_notify_web_hook_id' => env('PAYPAL_SUBSCRIPTION_NOTIFY_WEB_HOOK_ID', ''),
],
];
2.1.3 创建 PayPal 服务类
创建 PayPal 服务类 app/Services/PayPalService.php
,编写 Checkout 支付的相关方法。
2.1.4 注册 PayPal 服务类
在 app/Providers/AppServiceProvider.php
中注册 PayPal 服务类。
2.1.5 创建控制器
创建一个支付控制器 PaymentsController
,处理 Checkout 支付逻辑。
2.1.6 设置异步回调
在 PayPal 开发者中心配置 Webhook 事件,并设置异步回调地址。
2.2 Subscription 订阅支付实现
2.2.1 创建计划并激活
使用 PayPal SDK 创建订阅计划并激活。
2.2.2 创建订阅申请
创建订阅申请,并获取用户授权。
2.2.3 执行订阅
在回调中执行订阅,并处理订阅结果。
2.2.4 处理异步回调
在 PayPal 开发者中心配置 Webhook 事件,并处理订阅的异步回调。
3. 结语
通过本文,你已经了解了 PayPal Checkout 收银台和 Subscription 订阅计划的完整对接流程,并掌握了具体的代码实现。希望本文能帮助你顺利完成 PayPal 支付的对接。