在本篇文章中,我们将详细探讨PayPal的两种支付方式:Checkout收银台支付和Subscription订阅支付的完整实现流程,并分享代码实现的具体步骤。通过这些流程,你将能够理解如何在自己的项目中集成PayPal支付。
在开始之前,我们将从请求生命周期的角度,逐步讲解每个环节的实现过程。
一、支付生命周期解析
1. Checkout - 收银台支付流程
以下是PayPal Checkout支付流程的简要拆解(类似支付宝的收银台):
流程解析:
- 本地应用组装好参数并请求Checkout接口,接口同步返回支付URL;
- 本地应用重定向至该URL,用户登录PayPal账户并确认支付;
- 用户支付后,PayPal跳转至本地应用的设置地址;
- 本地应用请求PayPal执行付款接口进行扣款;
- PayPal发送异步通知至本地应用,验签成功后,完成支付后的相关业务(修改订单状态、增加销量、发送邮件等)。
2. Subscription - 订阅支付流程
订阅支付的流程如下:
流程解析:
- 创建订阅计划;
- 激活订阅计划;
- 使用已激活的计划创建订阅申请;
- 用户完成授权并支付后,跳转至本地应用;
- 本地应用根据返回的token完成订阅请求;
- 接收订阅授权的异步回调,验证成功后进行支付后的处理。
二、实现过程
理解了流程后,接下来我们将进入实际的编码部分。
1. 安装PayPal SDK
首先,我们需要在项目中安装PayPal官方SDK:
bash
$ composer require paypal/rest-api-sdk-php:* # 安装最新版本
2. 配置PayPal环境
在项目中创建PayPal配置文件:
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', ''),
'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', ''),
],
];
3. 创建PayPal服务类
创建一个PayPal服务类来处理支付逻辑:
bash
$ mkdir -p app/Services && touch app/Services/PayPalService.php
编写PayPalService
类,处理收银台支付(Checkout)等操作。
4. 创建控制器
使用Artisan命令创建控制器来处理支付逻辑:
bash
$ php artisan make:controller PaymentsController
然后在控制器中实现Checkout支付方法和回跳处理方法。
php
public function payByPayPalCheckout(Order $order)
{
$approvalUrl = app('paypal')->checkout($order);
if (!$approvalUrl) {
return json_encode(['code' => 500, 'msg' => 'Interval Error.', 'url' => '']);
}
return json_encode(['code' => 201, 'msg' => 'success.', 'url' => $approvalUrl]);
}
5. 配置PayPal Webhook
在PayPal开发者中心,配置WebHook事件,确保将回调URL正确设置为https://yoursite.com/payment/paypal/notify
。
markdown
👉 野卡 | 一分钟注册,轻松订阅海外线上服务
6. 订阅计划创建与执行
在创建订阅时,首先需要创建并激活订阅计划,然后生成订阅申请链接,用户授权后进行回调和支付验证。
7. 测试和验证
创建相应的路由和测试支付流程:
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');
总结
本文详细介绍了如何在Laravel项目中实现PayPal的Checkout收银台支付和Subscription订阅支付,并提供了完整的代码实现。通过这些步骤,你可以轻松集成PayPal支付,并处理支付成功后的业务逻辑。
如果你对集成PayPal支付有更多问题,欢迎留言讨论!