在跨境电商和在线服务领域,PayPal 支付是许多企业首选的支付方式之一。本文将详细解析 PayPal 的两种主要支付方式:Checkout 收银台支付和 Subscription 订阅计划,帮助开发者更好地理解和实现这两种支付方式。
Checkout 收银台支付是 PayPal 提供的一种一次性支付方式,流程如下:
发起支付请求:本地应用组装参数并请求 Checkout 接口,同步返回一个支付 URL。
用户支付:本地应用重定向至该 URL,用户登录 PayPal 账户并确认支付,支付成功后跳转至本地应用预设的地址。
执行付款:本地应用请求 PayPal 执行付款接口发起扣款。
异步通知:PayPal 发送异步通知至本地应用,本地应用收到数据包后进行验签。
支付完成:验签成功后,执行支付完成后的业务逻辑,如修改订单状态、增加销量、发送邮件等。
Subscription 订阅支付适用于周期性扣费的场景,流程如下:
创建计划:通过 API 创建一个订阅计划。
激活计划:激活该计划,使其可用于订阅。
创建订阅申请:使用已激活的计划创建订阅申请。
用户授权:本地应用跳转至订阅申请链接,用户授权并完成第一期付款,支付成功后携带 token 跳转至本地应用预设的地址。
执行订阅:回跳后请求执行订阅。
异步回调:收到订阅授权和支付结果的异步回调,验证成功则执行支付完成后的业务逻辑。
安装 PayPal SDK
bash
$ composer require paypal/rest-api-sdk-php
创建 PayPal 配置文件
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 服务类
php
namespace App\Services;
use PayPal\Api\Amount;
use PayPal\Api\Payer;
use PayPal\Api\Payment;
use PayPal\Rest\ApiContext;
class PayPalService
{
// 代码省略...
}
注册 PayPal 服务类
php
$this->app->singleton('paypal', function () {
$config = app()->environment() !== 'production' ? 'sandbox' : 'live';
return new PayPalService($config);
});
创建控制器
php
namespace App\Http\Controllers;
use App\Models\Order;
class PaymentController extends Controller
{
public function payByPayPalCheckout(Order $order)
{
// 代码省略...
}
}
异步回调处理
php
public function payPalNotify(Request $request)
{
// 代码省略...
}
创建计划并激活
php
public function createPlan(Order $order)
{
// 代码省略...
}
创建订阅申请
php
public function createAgreement(Plan $param, Order $order)
{
// 代码省略...
}
执行订阅
php
public function executeAgreement($token)
{
// 代码省略...
}
控制器调用
php
namespace App\Http\Controllers;
use App\Models\Order;
class SubscriptionsController extends Controller
{
public function createPlan(Order $order)
{
// 代码省略...
}
}
异步回调处理
php
public function payPalNotify(Request $request)
{
// 代码省略...
}
通过本文的详细解析,相信您已经对 PayPal 的 Checkout 收银台支付和 Subscription 订阅支付有了更深入的理解。无论是单次支付还是周期性订阅,PayPal 都提供了完善的 API 和工具,帮助开发者轻松集成支付功能。
👉 WildCard 野卡 | 一分钟注册,轻松订阅海外线上服务