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

本文将详细解析 PayPal 的 Checkout 收银台支付Subscription 订阅支付 的全过程,帮助开发者快速实现支付功能。


一. 生命周期解析

1. Checkout 收银台支付

Checkout 收银台支付的流程与支付宝的收银台类似,具体步骤如下:

PayPal Checkout 收银台流程

流程详解:
1. 本地应用组装参数并请求 Checkout 接口,接口同步返回一个支付 URL。
2. 本地应用重定向至该 URL,用户登录 PayPal 账户并确认支付,支付成功后跳转至本地应用指定地址。
3. 本地应用请求 PayPal 执行付款接口发起扣款。
4. PayPal 发送异步通知至本地应用,本地应用对数据包进行验签。
5. 验签成功后,执行支付完成后的业务逻辑(如修改订单状态、增加销量、发送邮件等)。

2. Subscription 订阅支付

Subscription 订阅支付的流程如下:

PayPal 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 集成

上一篇 3天前
下一篇 3天前

热门推荐