You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PayPal Checkout SDK中启用订阅产品?代码无效果求助

PayPal Checkout SDK添加订阅功能无效果的解决方法

问题描述

尝试在PayPal结账流程中添加订阅功能,使用PayPal Checkout SDK开发,但PayPal端未显示任何与订阅相关的内容,当前实现代码如下:

$environment = new \PayPalCheckoutSdk\Core\SandboxEnvironment(PAYPAL_SANDBOX_CLIENT_ID, 
PAYPAL_SANDBOX_CLIENT_SECRET);
$client = new \PayPalCheckoutSdk\Core\PayPalHttpClient($environment);

$request = new \PayPalCheckoutSdk\Orders\OrdersCreateRequest();
$request->prefer('return=representation');

$subscription = ['plan_id' => '23423432',
'start_time' => '2023-09-01T00:00:00Z', 
'quantity' => 1];

$request->body = [
"intent" => "CAPTURE",
"purchase_units" => [[
    "reference_id" => $orderInfo['id'],
    "amount" => [
    "value" => $orderInfo['total'],
    "currency_code" => "AUD"
    ],
    'subscription' => $subscription,
]],
    "application_context" => [
        "cancel_url" => FRONTEND_APP_URL."order-status/?pstatus=payment-declined&source=paypal",
        "return_url" => FRONTEND_APP_URL."order-status/?pstatus=payment-processing&source=paypal"
    ] 
];

解决方法

1. 明确API使用边界

你当前使用的OrdersCreateRequest属于一次性付款的Orders API,该API不支持在订单参数中嵌套订阅配置。订阅功能需要使用PayPal专门的Subscriptions API实现,两者不能混合调用。

2. 改用Subscriptions API创建订阅

替换原有的订单创建逻辑,使用订阅专属的请求类实现:

$environment = new \PayPalCheckoutSdk\Core\SandboxEnvironment(PAYPAL_SANDBOX_CLIENT_ID, PAYPAL_SANDBOX_CLIENT_SECRET);
$client = new \PayPalCheckoutSdk\Core\PayPalHttpClient($environment);

// 使用订阅创建请求,而非订单请求
$request = new \PayPalCheckoutSdk\Subscriptions\SubscriptionsCreateRequest();
$request->prefer('return=representation');

$request->body = [
    "plan_id" => "23423432", // 必须是沙箱后台已创建的有效订阅计划ID
    "start_time" => "2023-09-01T00:00:00Z",
    "quantity" => "1",
    "application_context" => [
        "cancel_url" => FRONTEND_APP_URL."order-status/?pstatus=payment-declined&source=paypal",
        "return_url" => FRONTEND_APP_URL."order-status/?pstatus=payment-processing&source=paypal"
    ]
];

// 执行请求并处理响应
try {
    $response = $client->execute($request);
    // 提取订阅授权URL,引导用户跳转至PayPal完成订阅确认
    $approvalUrl = $response->result->links[0]->href;
    header("Location: $approvalUrl");
    exit;
} catch (\Exception $ex) {
    // 捕获并处理错误(如计划ID无效、权限不足等)
    echo $ex->getMessage();
}

3. 验证订阅计划有效性

  • 确保plan_id对应的是PayPal沙箱后台已创建的ACTIVE状态订阅计划,若计划未激活或不存在,订阅创建会失败,PayPal端也不会显示订阅内容。
  • 检查订阅计划的币种、周期等配置是否与代码中的参数匹配。

4. 前端流程调整

创建订阅成功后,需将用户重定向到响应返回的approval_url,用户在该页面即可看到完整的订阅信息(包括周期金额、续订规则等),完成授权后会跳转回你配置的return_url。

关键误区提示

  • 不要在Orders API的purchase_units中添加subscription参数,该参数不属于Orders API的规范,PayPal不会识别。
  • 订阅流程无需创建订单,直接通过Subscriptions API完成创建与授权即可。

内容的提问来源于stack exchange,提问作者Addy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 18:15:03