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

如何将Stripe一次性支付脚本改为支持自定义价格的订阅模式?

改造为Stripe订阅模式的PHP脚本实现

一、核心代码改造

将mode改为subscription,并给每个订阅商品的price_data添加recurring配置指定计费周期。注意:订阅模式下的Checkout Session优先处理订阅类商品,一次性费用(如小费)需通过特定方式附加,不能直接沿用一次性支付的配置逻辑。

改造后的完整代码:

$stripe = new \Stripe\StripeClient(STRIPE_SECRET_KEY);

$lineItems = [
    [
        'price_data' => [
            'currency' => 'usd',
            'product_data' => [
                'name' => 'ice',
            ],
            'unit_amount' => 9.99 * 100,    // 转换为分
            'tax_behavior' => 'exclusive',
            // 订阅核心配置:指定计费周期
            'recurring' => [
                'interval' => 'month', // 可选值:day, week, month, year
                'interval_count' => 1, // 每N个周期计费一次,此处为每月1次
            ]
        ],
        'quantity' => 1
    ],
    [
        'price_data' => [
            'currency' => 'usd',
            'product_data' => [
                'name' => 'ice2',
            ],
            'unit_amount' => 11.99 * 100,   // 转换为分
            'tax_behavior' => 'exclusive',
            'recurring' => [
                'interval' => 'month',
                'interval_count' => 1,
            ]
        ],
        'quantity' => 2
    ],
    // 若需添加一次性小费,可改用以下两种方式之一
    // 方式1:通过订阅的一次性设置费实现
    // 'subscription_data' => ['setup_fee' => 500] // 需在checkout session配置中添加
    // 方式2:添加一次性附加项(需Stripe API版本支持)
    // [
    //     'price_data' => [
    //         'currency' => 'usd',
    //         'product_data' => ['name' => 'Tip (one-time)'],
    //         'unit_amount' => 5 * 100,
    //     ],
    //     'quantity' => 1,
    //     'price_type' => 'one_time'
    // ]
];

// 创建订阅模式的Checkout Session
$checkoutSession = $stripe->checkout->sessions->create([
    'line_items' => $lineItems,
    'mode' => 'subscription', // 切换为订阅模式
    'success_url' => 'https://hey.com/paypal/checkout-success.php?provider_session_id={CHECKOUT_SESSION_ID}',
    'cancel_url' => 'https://hey.com/paypal/cart.php?provider_session_id={CHECKOUT_SESSION_ID}',
    // 可选:配置一次性设置费(对应上面的小费需求)
    // 'subscription_data' => [
    //     'setup_fee' => 500, // 一次性收取5美元(单位为分)
    //     'metadata' => ['tip' => '5.00'] // 记录小费信息到订阅元数据
    // ]
]);

// 将session ID存入数据库,后续用于查询订阅状态
// $checkoutSession->id;

// 跳转至Stripe订阅支付页面
header('Content-Type: application/json');
header("HTTP/1.1 303 See Other");
header("Location: " . $checkoutSession->url);
exit;

二、订阅项配置关键说明

  • 必须添加recurring参数:订阅模式下,每个订阅商品的price_data必须包含recurring字段,明确计费规则:
    • interval:计费间隔,可选day/week/month/year
    • interval_count:间隔数量,比如interval: 'month' + interval_count: 3表示每3个月计费一次
  • 一次性费用处理:若需在订阅流程中加入一次性收费(如小费),优先使用subscription_data.setup_fee配置,或添加price_type: 'one_time'的line item(需确保API版本支持)

三、自定义价格&编辑订阅价格实现

1. 用户自定义订阅价格

直接通过动态设置price_data.unit_amount实现——根据用户输入的价格(如每月15美元),转换为分后赋值给unit_amount即可。

如果需要统一管理商品,可提前在Stripe后台创建Product,或动态创建:

// 动态创建Product(后续可复用该ID)
$product = $stripe->products->create([
    'name' => 'Custom Monthly Subscription',
    'description' => 'User-defined recurring plan',
]);

// 在price_data中使用该Product ID替代动态生成name
'product_data' => [
    'id' => $product->id,
],

2. 编辑已存在的订阅价格

方式一:API修改

从数据库中取出用户的订阅ID(可从Checkout Session的subscription字段获取),调用API更新价格:

// $subscriptionId为目标订阅ID,$subscriptionItemId为订阅内的具体项ID(从订阅的items列表获取)
$stripe->subscriptions->update(
    $subscriptionId,
    [
        'items' => [
            [
                'id' => $subscriptionItemId,
                'price_data' => [
                    'currency' => 'usd',
                    'product' => $productId, // 对应商品ID
                    'unit_amount' => 19.99 * 100, // 新的自定义价格(分)
                    'recurring' => [
                        'interval' => 'month',
                    ]
                ]
            ]
        ],
        'proration_behavior' => 'create_prorations', // 可选:是否生成 prorated 账单
    ]
);

方式二:Stripe后台修改

  • 登录Stripe后台,进入「订阅」页面找到目标订阅
  • 点击「编辑订阅」,修改对应订阅项的价格(可选择已有价格或创建新的自定义价格)
  • 保存后,新价格会在下一个计费周期生效(如需立即生效,可在编辑时调整生效时间)

注意事项

  • 动态生成的价格会保存在Stripe后台「产品」→「价格」列表中,可统一管理
  • 修改订阅价格时,需注意货币精度和Stripe的金额限制
  • 若用户当前周期已付费,默认新价格在下一周期生效,可通过proration_behavior参数配置立即生效并生成 prorated 账单

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 09:37:53