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

Stripe API负载格式问题:数组与嵌套字典提交疑惑

为什么直接调用Stripe API时用JSON数组/嵌套字典会报错,改用key[]/key[subkey]格式却正常?

核心原因:请求编码格式与Stripe的解析逻辑不匹配

你遇到的问题本质是请求的编码格式和Stripe API对数组/嵌套数据的解析要求不兼容:

  1. Stripe API的传统解析规则
    Stripe早期API设计基于application/x-www-form-urlencoded(表单编码)规范,对于数组和嵌套数据,它只识别这种格式:

    • 数组:用key[]作为字段名,传递对应的值(单元素数组就是payment_method_types[]=card,多元素则是payment_method_types[]=card&payment_method_types[]=ideal)
    • 嵌套字典:用parent[child]的层级键名(比如card[number]=4242424242424242对应嵌套结构{"card": {"number": "4242424242424242"}})
  2. 你出错的场景分析
    当你发送payment_method_types: ["card"]这种JSON格式的数组时,大概率是以下两种情况导致报错:

    • 你把JSON格式的payload用表单编码发送(比如用Python的urllib.parse.urlencode处理包含数组的字典),这时候数组会被转成字符串["card"],Stripe无法识别这个字符串为合法数组,返回「Invalid array」
    • 即使你用application/json的Content-Type发送,部分Stripe端点(尤其是老版本或特定支付相关接口)仍不支持JSON格式的数组,只接受表单编码的key[]格式
  3. 为什么payment_method_types[]格式能正常工作
    当你改用"payment_method_types[]": "card"这种键名时,不管是表单编码还是JSON编码,Stripe的解析逻辑都能识别这是一个数组元素,自动将其组装成数组["card"];嵌套结构同理,card[number]会被解析成嵌套字典。

实用建议

如果想继续不用官方库调用:

  • 若用表单编码发送请求:用Python的requests库的data参数传递字典,数组要拆成多个key[]条目,比如data={"payment_method_types[]": "card", "amount": 1000}
  • 若想用JSON格式发送:确认目标API端点支持JSON(Stripe大部分新端点支持),且正确设置Content-Type: application/json,直接传递标准JSON数组/嵌套字典即可(如果还是报错,说明该端点只支持表单编码,得换回key[]格式)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 16:57:56