PayPal支付:Checkout收银台与Subscription订阅计划全过程解析

在本篇文章中,我们将详细探讨PayPal的两种支付方式:Checkout收银台支付和Subscription订阅支付的完整实现流程,并分享代码实现的具体步骤。通过这些流程,你将能够理解如何在自己的项目中集成PayPal支付。

在开始之前,我们将从请求生命周期的角度,逐步讲解每个环节的实现过程。

一、支付生命周期解析

1. Checkout - 收银台支付流程

以下是PayPal Checkout支付流程的简要拆解(类似支付宝的收银台):

PayPal支付流程

流程解析:

  1. 本地应用组装好参数并请求Checkout接口,接口同步返回支付URL;
  2. 本地应用重定向至该URL,用户登录PayPal账户并确认支付;
  3. 用户支付后,PayPal跳转至本地应用的设置地址;
  4. 本地应用请求PayPal执行付款接口进行扣款;
  5. PayPal发送异步通知至本地应用,验签成功后,完成支付后的相关业务(修改订单状态、增加销量、发送邮件等)。

2. Subscription - 订阅支付流程

订阅支付的流程如下:

PayPal订阅流程

流程解析:

  1. 创建订阅计划;
  2. 激活订阅计划;
  3. 使用已激活的计划创建订阅申请;
  4. 用户完成授权并支付后,跳转至本地应用;
  5. 本地应用根据返回的token完成订阅请求;
  6. 接收订阅授权的异步回调,验证成功后进行支付后的处理。

二、实现过程

理解了流程后,接下来我们将进入实际的编码部分。

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支付有更多问题,欢迎留言讨论!

(0)
上一篇 1天前
下一篇 1天前

相关推荐