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

使用cURL集成Stripe API时遭遇amount参数无效整数错误

Stripe Payment Intents创建时amount参数无效整数错误排查方案

核心问题分析

错误parameter_invalid_integer指向amount参数,即便本地var_dump显示为int(5000),仍说明实际发送到Stripe的amount不符合要求——大概率是数据编码、传输格式或参数上下文的问题。


1. 检查请求的编码与Content-Type匹配

  • 如果用表单编码(application/x-www-form-urlencoded):
    确保amount在拼接表单数据时是纯数字字符串,无任何额外字符(比如空格、引号)。例如:
    $data = [
        'amount' => 5000,
        'currency' => 'usd',
        // 其他参数
    ];
    // 正确拼接表单数据,避免自动类型转换异常
    $postFields = http_build_query($data);
    
  • 如果用JSON编码(application/json):
    必须保证amount在JSON中是整数类型,而非字符串。PHP的json_encode默认会把整数转成字符串(如果包含在关联数组中),需添加JSON_NUMERIC_CHECK参数强制数字类型:
    $jsonData = json_encode($data, JSON_NUMERIC_CHECK);
    

2. 确认Stripe参数规则

  • amount必须是对应货币的最小单位整数(比如美元是分,5000对应50美元),不能包含小数或非数字字符。
  • currency必须是Stripe支持的三位字母代码(如usd、eur),大小写不敏感,但需确保拼写正确。

3. 排查实际发送的请求内容

通过cURL日志查看真实发送的数据,确认amount的实际格式:

$ch = curl_init('https://api.stripe.com/v1/payment_intents');
// 基础配置(密钥、请求方法等)
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: Bearer YOUR_SECRET_KEY']);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);

// 开启 verbose 日志
curl_setopt($ch, CURLOPT_VERBOSE, true);
$verboseLog = fopen('php://temp', 'w+');
curl_setopt($ch, CURLOPT_STDERR, $verboseLog);

$response = curl_exec($ch);

// 读取日志
rewind($verboseLog);
$logContent = stream_get_contents($verboseLog);
var_dump($logContent);

重点查看发送的amount值是否为纯数字,有无被意外转成带引号的字符串或混入其他字符。

4. Postman测试的同步排查

  • 在Postman的Raw JSON请求体中,确保amount是整数(无引号):
    {
        "amount": 5000,
        "currency": "usd"
    }
    
  • 检查请求头的Content-Type是否为application/json,如果用表单模式,确保amount字段的输入类型是数字而非文本。

5. 简化请求排除干扰

暂时移除所有非必要参数,只保留amount和currency发送请求。如果请求成功,再逐个添加其他参数,定位是否有其他参数格式错误导致的连锁报错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 18:33:26