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

如何激活PayPal订阅API?订阅激活报错及账号信息获取问题

解决PayPal订阅激活API报错及accountNumber疑问

首先明确:你代码里的X-PAYPAL-SECURITY-CONTEXT请求头是多余的,这是PayPal内部调试用的专属头,公开调用API时完全不需要加,这就是你持续报错的核心原因。

关于accountNumber的疑问

商户和消费者的accountNumber是PayPal内部的账户标识,根本不会对外公开,也不需要开发者去获取——因为正常调用API根本用不上这个头,文档里的示例大概率是误放的调试代码,别照搬。

修正后的激活API调用代码

去掉多余的安全上下文头,保留必要的授权和内容类型头即可:

$clientId = env('PAYPAL_SANDBOX_CLIENT_ID');
$secretKey = env('PAYPAL_SANDBOX_CLIENT_SECRET');

$subscriptionId = 'I-TY9BCUDPAXKU';

$apiEndpoint = "https://api-m.sandbox.paypal.com/v1/billing/subscriptions/{$subscriptionId}/activate";

// Set up cURL options
$ch = curl_init();

// 生产环境建议保留SSL验证,不要关闭
// curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
// curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

curl_setopt($ch, CURLOPT_URL, $apiEndpoint);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
    'reason' => 'Reactivating the subscription',
]));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json',
    'Accept: application/json',
    'Authorization: Basic ' . base64_encode("$clientId:$secretKey"),
]);

$result = curl_exec($ch);

// 添加错误处理排查问题
if(curl_errno($ch)) {
    echo 'CURL Error: ' . curl_error($ch);
}
curl_close($ch);

// 打印结果便于调试
var_dump($result);

额外注意点

你的订阅状态是Pending_approval,说明买家还没完成订阅授权流程。此时直接调用激活API会失败,正确流程是:

  • 创建订阅后,接口会返回一个approval_url
  • 引导买家跳转至该URL,完成PayPal账户的订阅确认操作
  • 买家确认后,订阅状态会自动变为Active(或其他可操作状态),此时再根据需要调用激活接口(比如订阅暂停后重新激活)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 12:30:03