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

如何通过PHP实现Stripe Connected关联订阅账号创建并解决脚本运行失败问题

问题定位步骤
  • 首先补充输出异常的完整错误详情:现有代码仅获取了异常的getMessage()返回值,可追加输出$e->getJsonBody()拿到Stripe返回的错误码、错误原因等完整信息,快速定位是参数错误、权限问题还是账号能力受限
  • 检查变量初始化状态:脚本中$email、$token、$planPrice、$currency、$planInterval、$STRIPE_API_KEY必须提前赋值,任意变量未定义都会直接导致脚本中断执行
  • 核对Stripe PHP SDK版本:你用到的Plan接口是旧版接口,若SDK版本高于v2020-08-27,官方已推荐用Price接口替代Plan,版本不兼容会导致创建套餐失败
  • 验证API密钥权限:你使用的密钥必须是平台主账号的完整权限密钥,不能是受限密钥,否则无法创建Custom类型关联账号、触发跨账号操作
现有代码已知问题
  • 语法错误:第一层创建关联账号的try块未补全catch逻辑和闭合大括号,脚本直接会报语法错误无法运行
  • 参数错误:创建订阅的items参数格式错误,缺少一层数组嵌套,Stripe接口会直接拒绝请求
  • 逻辑缺陷:Custom类型关联账号必须完成服务条款确认、身份验证、收款账户绑定才能发起交易,刚创建的空账号直接创建订阅会被接口拦截
  • 关联逻辑缺失:未添加平台分账参数的订阅不会和主账号产生关联,不会展示在主账号的关联交易列表中
修复后可运行代码
// 引入Stripe PHP库
require_once 'stripe-php/init.php';

// 提前初始化所有必填变量
$STRIPE_API_KEY = '替换为你的平台主账号API密钥';
$email = '用户邮箱';
$token = '前端生成的支付方式token';
$planName = '订阅套餐名称';
$planPrice = 9.9; // 单位为美元
$currency = 'usd';
$planInterval = 'month'; // 订阅周期支持day/week/month/year
$api_error = '';

// 设置全局API密钥
\Stripe\Stripe::setApiKey($STRIPE_API_KEY);

try {
    // 创建Custom类型关联账号
    $connectedAccount = \Stripe\Account::create([
        "email" => $email,
        "country"  => "US",
        "type"  => "custom",
        'capabilities' => [
            'card_payments' => ['requested' => true],
            'transfers' => ['requested' => true],
        ],
        // 提交服务条款接受记录,激活账号基础能力
        "tos_acceptance" => [
            "date" => time(),
            "ip" => $_SERVER['REMOTE_ADDR']
        ]
    ]);

    // 在关联账号下创建客户对象
    try {
        $customer = \Stripe\Customer::create([
            "email" => $email,
            "source"  => $token
        ], ["stripe_account" => $connectedAccount->id]);
    } catch(Exception $e) {
        $api_error = "创建客户失败: " . $e->getMessage();
        // 排查时可打开下方注释打印完整错误信息
        // var_dump($e->getJsonBody());
    }

    if(empty($api_error) && $customer){
        // 金额转换为美分单位
        $priceCents = round($planPrice*100);

        // 创建订阅套餐(新版SDK建议替换为Price接口创建)
        try {
            $plan = \Stripe\Plan::create([
                "product" => [
                    "name" => $planName
                ],
                "amount" => $priceCents,
                "currency" => $currency,
                "interval" => $planInterval,
                "interval_count" => 1
            ], ["stripe_account" => $connectedAccount->id]);
        } catch(Exception $e) {
            $api_error = "创建套餐失败: " . $e->getMessage();
        }

        if(empty($api_error) && $plan){
            // 创建关联订阅
            try {
                $subscription = \Stripe\Subscription::create([
                    "customer" => $customer->id,
                    // 修复items参数格式
                    "items" => [
                        ["plan" => $plan->id]
                    ],
                    // 添加平台分账比例,订阅会自动关联到主账号仪表盘
                    "application_fee_percent" => 10
                ], ["stripe_account" => $connectedAccount->id]);

                echo "关联订阅创建成功,订阅ID:" . $subscription->id;

            } catch(Exception $e) {
                $api_error = "创建订阅失败: " . $e->getMessage();
            }
        }
    }

    if (!empty($api_error)) {
        echo $api_error;
    }

// 补全关联账号创建的异常捕获逻辑
} catch (Exception $e) {
    echo "创建关联账号失败: " . $e->getMessage();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:54:01