PayPal支付:Checkout收银台与Subscription订阅计划全程指南

本文将详细解析PayPal Checkout收银台支付和Subscription订阅支付的完整流程,并通过代码示例帮助你快速实现。

一、支付流程解析

1. Checkout收银台支付

流程拆解如下:

Checkout流程图

流程详解:

  1. 发起支付请求:本地应用组装参数并请求Checkout接口,接口同步返回一个支付URL。
  2. 用户支付:本地应用重定向至支付URL,用户登录PayPal账户并确认支付,支付成功后跳转至本地应用地址。
  3. 执行扣款:本地应用请求PayPal执行付款接口发起扣款。
  4. 异步通知:PayPal发送异步通知至本地应用,本地应用验签数据包。
  5. 支付完成处理:验签成功后,执行订单状态更新、销量增加、发送邮件等业务。

2. Subscription订阅支付

流程拆解如下:

Subscription流程图

流程详解:

  1. 创建计划:创建一个订阅计划。
  2. 激活计划:激活该计划。
  3. 创建订阅申请:使用已激活的计划创建订阅申请。
  4. 用户授权并支付:本地应用跳转至订阅申请链接,用户授权并完成第一期付款,支付后携带token跳转至本地应用地址。
  5. 执行订阅:回跳后请求执行订阅。
  6. 异步回调处理:收到订阅授权和支付结果的异步回调,验证成功后执行业务处理。

二、具体实现

1. Checkout收银台支付

安装PayPal SDK

bash
$ composer require paypal/rest-api-sdk-php:*

创建配置文件

php
$ 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’, ”),
],
];

创建PayPal服务类

bash
$ mkdir -p app/Services && touch app/Services/PayPalService.php

服务类代码示例:

php
<?php

namespace App\Services;

use PayPal\Rest\ApiContext;
use PayPal\Auth\OAuthTokenCredential;
use PayPal\Api\Payment;
use PayPal\Api\PaymentExecution;

class PayPalService
{
protected $config;
protected $apiContext;

public function __construct($config)
{
    $this->config = $config;
    $this->apiContext = new ApiContext(
        new OAuthTokenCredential(
            $this->config['client_id'],
            $this->config['secret']
        )
    );
}

public function checkout(Order $order)
{
    // 创建支付请求
}

public function executePayment($paymentId)
{
    // 执行付款
}

}

创建控制器

bash
$ php artisan make:controller PaymentsController

控制器代码示例:

php
<?php

namespace App\Http\Controllers;

use App\Models\Order;

class PaymentController extends Controller
{
public function payByPayPalCheckout(Order $order)
{
// 处理支付请求
}
}

设置PayPal WebHook

PayPal开发者中心配置WebHook事件,确保回调地址为https://yoursite.com/payment/paypal/notify,并勾选Payments payment createdPayment sale completed事件。

👉 WildCard | 一分钟注册,轻松订阅海外线上服务

2. Subscription订阅支付

创建计划并激活

php
public function createPlan(Order $order)
{
// 创建并激活订阅计划
}

创建订阅申请

php
public function createAgreement(Plan $param, Order $order)
{
// 创建订阅申请
}

执行订阅

php
public function executeAgreement($token)
{
// 执行订阅
}

控制器调用

bash
$ php artisan make:controller SubscriptionsController

控制器代码示例:

php
<?php

namespace App\Http\Controllers;

use App\Models\Order;

class SubscriptionsController extends Controller
{
public function createPlan(Order $order)
{
// 处理订阅计划创建
}
}

设置PayPal WebHook

在开发者中心配置WebHook事件,勾选Payment sale completed事件。


至此,PayPal Checkout收银台支付和Subscription订阅支付的完整流程已经完成。通过本文的详细解析和代码示例,你应该能够顺利实现PayPal支付功能。

👉 WildCard | 一分钟注册,轻松订阅海外线上服务

上一篇 2025年2月1日
下一篇 2025年2月2日

相关推荐