CFML调用Stripe API时传递address等嵌套子参数报错求助
错误原因
Stripe 官方的 form-encoded 格式接口不支持将序列化后的 JSON 字符串作为嵌套对象参数传入。你把地址对象序列化成JSON后整体赋值给address字段,接口无法解析该值为合法的地址对象,因此返回Invalid object报错。
Stripe 传递嵌套参数的标准规则是使用方括号层级语法拼接参数名,无需提前做JSON序列化。
正确传参方式
将嵌套对象的每个子属性拆分为独立的表单字段,参数名按照外层字段名[子属性名]的格式编写即可,对应ColdFusion代码如下:
<cfhttp method="POST" url="https://api.stripe.com/v1/customers"> <cfhttpparam type="header" name="Authorization" value="Bearer sk_test_......................."> <cfhttpparam type="FormField" name="id" value="cust_14"> <cfhttpparam type="FormField" name="name" value=#Customer_Name_1#> <!--- 地址嵌套参数按方括号语法拆分传递,不需要序列化JSON ---> <cfhttpparam type="FormField" name="address[city]" value=#Town_1#> <cfhttpparam type="FormField" name="address[line1]" value=#Street_1#> <cfhttpparam type="FormField" name="address[line2]" value=#Street_2#> <!--- 其余地址字段(邮编、省份、国家码等)按相同格式追加即可 <cfhttpparam type="FormField" name="address[postal_code]" value=#PostCode_1#> <cfhttpparam type="FormField" name="address[state]" value=#Province_1#> <cfhttpparam type="FormField" name="address[country]" value="CN"> ---> </cfhttp>
补充说明
所有Stripe的嵌套类型参数都遵循该传参规则,例如自定义元数据metadata字段,传递自定义键值对时参数名写为metadata[你的自定义键]即可,无需做JSON序列化处理。
内容的提问来源于stack exchange,提问作者Gnosis
相关产品推荐
相关产品推荐

