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

Stripe Checkout集成问题:line_item仅接受整数如何传入可变支付金额

PHP集成Stripe Checkout可变金额传入解决方案

核心规则说明

Stripe Checkout的line_items.unit_amount参数要求传入正整数,对应支付货币的最小单位(例如人民币对应分、美元对应美分,实际支付金额为 unit_amount / 100 对应货币面值)

实现步骤

  • 前端参数传递
    前端自定义金额输入框新增基础校验:限制输入为正数,最多保留2位小数,发起创建支付会话请求时,将用户输入的金额以custom_amount(可自定义字段名)参数通过POST请求传递到后端
  • 后端金额处理
    接收前端传递的金额参数后,先转换为符合Stripe要求的整数格式,同时做合法性校验,避免精度异常或非法值:
    // 接收前端传参,空值默认设为0
    $inputAmount = $_POST['custom_amount'] ?? 0;
    // 转换为对应货币最小单位的整数,避免浮点精度问题用round处理
    $unitAmount = (int)round((float)$inputAmount * 100);
    // 合法性校验,可根据业务调整最低支付金额
    if ($unitAmount < 1) {
        throw new Exception("支付金额不能低于最小限额");
    }
    
  • 替换固定金额参数
    构造Stripe Checkout Session时,将原来固定的unit_amount值2000替换为上述处理后的$unitAmount变量即可,示例代码:
    $stripe = new \Stripe\StripeClient('你的Stripe API密钥');
    $checkout_session = $stripe->checkout->sessions->create([
      'payment_method_types' => ['card'],
      'line_items' => [[
        'price_data' => [
          'currency' => 'cny', // 替换为实际使用的货币编码
          'product_data' => [
            'name' => '自定义支付商品',
          ],
          'unit_amount' => $unitAmount, // 替换原有固定值
        ],
        'quantity' => 1,
      ]],
      'mode' => 'payment',
      'success_url' => '支付成功跳转地址',
      'cancel_url' => '支付取消跳转地址',
    ]);
    

常见失效原因排查

  • 直接将前端传递的浮点型金额赋值给unit_amount,未转换为整数格式导致请求被Stripe拦截
  • 前后端参数名不一致,导致后端接收的金额为空,赋值未生效
  • 未做金额校验,传递了负数、0或者超过Stripe支付限额的数值,触发Stripe接口报错

内容的提问来源于stack exchange,提问作者MMunir. Asif

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:39:03