Stripe API负载格式问题:数组与嵌套字典提交疑惑
为什么直接调用Stripe API时用JSON数组/嵌套字典会报错,改用
key[]/key[subkey]格式却正常? 核心原因:请求编码格式与Stripe的解析逻辑不匹配
你遇到的问题本质是请求的编码格式和Stripe API对数组/嵌套数据的解析要求不兼容:
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"}})
- 数组:用
你出错的场景分析
当你发送payment_method_types: ["card"]这种JSON格式的数组时,大概率是以下两种情况导致报错:- 你把JSON格式的payload用表单编码发送(比如用Python的
urllib.parse.urlencode处理包含数组的字典),这时候数组会被转成字符串["card"],Stripe无法识别这个字符串为合法数组,返回「Invalid array」 - 即使你用
application/json的Content-Type发送,部分Stripe端点(尤其是老版本或特定支付相关接口)仍不支持JSON格式的数组,只接受表单编码的key[]格式
- 你把JSON格式的payload用表单编码发送(比如用Python的
为什么
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
相关产品推荐
相关产品推荐

