废话不多说,让我们从请求的生命周期入手,逐步实现整个支付过程。
Checkout 流程类似于国内支付宝的收银台支付,包括以下步骤:
流程详解
本地应用组装好参数,并向 PayPal 的 Checkout 接口发送请求,接口同步返回一个支付 URL。
用户被重定向至该 URL,登录 PayPal 账户并确认支付,支付后用户被跳转回事先设置的本地应用地址。
本地应用向 PayPal 请求执行付款接口,发起扣款。
PayPal 向本地应用发送异步通知,本地接收到数据包后进行验签操作。
验签成功后,完成支付后的相关业务逻辑(如修改订单状态、更新销量、发送邮件等)。
在拥有计划管理的基础上,Subscription 模式适用于周期性收费,如流媒体订阅等服务。
流程详解
创建一个订阅计划。
激活该计划。
使用已激活的计划创建一个订阅申请。
用户跳转到订阅申请页面进行授权并完成首次付款,随后携带 token 被跳转回设置的本地地址。
本地应用请求执行订阅操作。
PayPal 发送异步通知,验证后执行支付完成的相关业务。
接下来,我们将结合 PayPal 官方提供的 SDK 和示例代码,逐步完成 Payment Checkout 和 Subscription 功能。
安装扩展
bash
$ composer require paypal/rest-api-sdk-php:*
创建配置文件
bash
$ touch 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', ''),
],
'live' => [
'client_id' => env('PAYPAL_CLIENT_ID', ''),
'secret' => env('PAYPAL_SECRET', ''),
'notify_web_hook_id' => env('PAYPAL_NOTIFY_WEB_HOOK_ID', ''),
],
];
以下列出 Checkout 的具体实现步骤。所有业务逻辑均遵照 Laravel 的最佳实践。
创建 PayPal 服务类
bash
$ mkdir -p app/Services && touch app/Services/PayPalService.php
该服务类应负责 PayPal 付款相关的功能逻辑。包括但不限于支付链接生成、异步回调处理等。
注册服务到容器中
在 app/Providers/AppServiceProvider.php 中注册服务:
php
$this->app->singleton('paypal', function () {
$env = app()->environment() !== 'production' ? 'sandbox' : 'live';
$config = config("paypal.$env");
return new PayPalService($config);
});
支付控制器及路由
为方便页面调用,创建一个用于支付逻辑的控制器,并实现以下几个方法:
payByPayPalCheckout:生成并返回支付链接。
payPalReturn:处理支付后的同步跳转回调。
payPalNotify:用于异步通知的验签及后续逻辑处理。
设定路由如下:
php
Route::get('payment/{order}/paypal', 'PaymentController@payByPayPalCheckout')->name('payment.paypal_checkout');
Route::get('payment/paypal/return', 'PaymentController@payPalReturn')->name('payment.paypal.return');
Route::post('payment/paypal/notify', 'PaymentController@payPalNotify')->name('payment.paypal.notify');
与 Checkout 不同的是,Subscription 涉及计划的创建和激活。以下列出流程核心代码片段。
创建计划并激活
在 PayPal 服务类中增加如下方法:
php
public function createPlan(Order $order) {
// 创建并激活订阅计划的逻辑
}
创建订阅申请
通过 createAgreement 方法生成用户授权所需的链接。
执行订阅
当用户完成授权后,跳转回本地应用。通过 executeAgreement 方法完成订阅。
监听异步回调
监听 PAYMENT.SALE.COMPLETED 事件并处理订阅后续逻辑:
php
public function payPalNotify(Request $request) {
// 获取回调信息并完成支付后的业务逻辑
}
Checkout 支付流程测试
生成订单后访问对应链接,用户可登录 PayPal 完成支付。
验证同步跳转逻辑及异步通知的处理。
Subscription 测试流程
测试计划的创建与激活。
模拟订阅支付及回调处理。
您是否经常需要使用国际支付?野卡 可以帮助您轻松解决支付障碍,让您快速完成对接海外订阅服务的流程!
本文详细讲述了如何基于 PayPal SDK 实现 Checkout 和 Subscription 支付流程。如果您遇到任何问题,可以参考官方文档或本文提供的示例代码。