本文将详细解析 PayPal 的 Checkout 收银台支付 和 Subscription 订阅支付 的全过程,帮助开发者快速实现支付功能。
一. 生命周期解析
1. Checkout 收银台支付
Checkout 收银台支付的流程与支付宝的收银台类似,具体步骤如下:
流程详解:
1. 本地应用组装参数并请求 Checkout 接口,接口同步返回一个支付 URL。
2. 本地应用重定向至该 URL,用户登录 PayPal 账户并确认支付,支付成功后跳转至本地应用指定地址。
3. 本地应用请求 PayPal 执行付款接口发起扣款。
4. PayPal 发送异步通知至本地应用,本地应用对数据包进行验签。
5. 验签成功后,执行支付完成后的业务逻辑(如修改订单状态、增加销量、发送邮件等)。
2. Subscription 订阅支付
Subscription 订阅支付的流程如下:
流程详解:
1. 创建一个订阅计划。
2. 激活该计划。
3. 使用已激活的计划创建订阅申请。
4. 本地应用跳转至订阅申请链接,获取用户授权并完成首期付款,支付成功后携带 token 跳转至本地应用指定地址。
5. 回跳后请求执行订阅。
6. 收到订阅授权异步回调结果和支付结果的异步回调,验证支付异步回调成功后,执行支付完成后的业务逻辑。
二. 具体实现
1. Checkout 收银台支付
安装扩展
使用 Composer 安装 PayPal 官方 SDK:
bash
$ composer require paypal/rest-api-sdk-php:*
创建 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’, ”),
],
];
创建 PayPal 服务类
创建 app/Services/PayPalService.php
文件,编写 Checkout 支付逻辑:
php
<?php
namespace App\Services;
use PayPal\Api\Payment;
use PayPal\Api\Payer;
use PayPal\Api\Transaction;
use PayPal\Api\RedirectUrls;
class PayPalService {
// 省略部分代码
}
注册 PayPal 服务类
在 app/Providers/AppServiceProvider.php
中注册 PayPal 服务:
php
<?php
namespace App\Providers;
use App\Services\PayPalService;
class AppServiceProvider extends ServiceProvider {
public function register() {
// 注册 PayPalService
$this->app->singleton(‘paypal’, function () {
$config = app()->environment() !== ‘production’ ? config(‘paypal.sandbox’) : config(‘paypal.live’);
return new PayPalService($config);
});
}
}
创建控制器
创建 PaymentController
控制器,处理 Checkout 支付请求:
php
<?php
namespace App\Http\Controllers;
use App\Models\Order;
class PaymentController extends Controller {
public function payByPayPalCheckout(Order $order) {
// 省略部分代码
}
}
设置 PayPal WebHook
登录 PayPal 开发者中心,配置 WebHook 事件,确保回调地址支持 HTTPS。
2. Subscription 订阅支付
创建并激活订阅计划
在 PayPalService
中编写创建订阅计划的方法:
php
public function createPlan(Order $order) {
// 省略部分代码
}
创建订阅申请
在 PayPalService
中编写创建订阅申请的方法:
php
public function createAgreement(Plan $plan, Order $order) {
// 省略部分代码
}
执行订阅
在 PayPalService
中编写执行订阅的方法:
php
public function executeAgreement($token) {
// 省略部分代码
}
控制器调用
创建 SubscriptionsController
控制器,处理订阅支付请求:
php
<?php
namespace App\Http\Controllers;
use App\Models\Order;
class SubscriptionsController extends Controller {
public function createPlan(Order $order) {
// 省略部分代码
}
}
异步回调
在 SubscriptionsController
中处理订阅支付的异步回调:
php
public function payPalNotify(Request $request) {
// 省略部分代码
}
三. 测试与部署
测试 Checkout 支付
在沙箱环境中创建测试账号,模拟支付流程,确保支付和异步回调功能正常。
测试 Subscription 订阅支付
同样在沙箱环境中测试订阅计划的创建、授权和支付流程,确保订阅功能正常运行。
四. 总结
通过本文的详细讲解,开发者可以快速实现 PayPal 的 Checkout 收银台支付 和 Subscription 订阅支付 功能。无论是单次支付还是订阅支付,PayPal 都提供了完善的 API 和 SDK,帮助开发者轻松集成。
关键词: PayPal 支付、Checkout 收银台、Subscription 订阅、支付流程、异步回调、WebHook、SDK 集成