使用cfhttp调用Stripe API向Payment_Method传id参数报错问题
报错原因
Stripe 各对象创建接口的参数支持规则不统一,并非所有对象都允许创建时手动传入id字段。
- 创建Customer的
POST /v1/customers接口原生支持自定义ID入参,因此传id表单字段可以正常生效。 - 创建PaymentMethod的
POST /v1/payment_methods接口不接收id入参,PaymentMethod的ID由Stripe服务端创建成功后自动生成,强行将id作为FormField传递就会触发parameter_unknown - id报错。 - 将
id放到Header里传递不报错,是因为Stripe会直接忽略所有不识别的自定义Header,根本不会解析处理这个参数,自然也无法成功传值。
解决方法
- 不要在创建PaymentMethod的请求中传递
id参数,先正常发起创建请求,拿到Stripe返回的自动生成的pm_开头的正式PaymentMethod ID即可。 - 如果需要关联自有业务系统的自定义ID,在PaymentMethod创建成功后,调用对应PaymentMethod的更新接口,将自定义业务ID存入
metadata自定义字段即可,参考代码:
<cfhttp method="POST" url="https://api.stripe.com/v1/payment_methods/替换为Stripe返回的pm_开头ID"> <cfhttpparam type="header" name="Authorization" value="Bearer sk_test_....."> <cfhttpparam type="FormField" name="metadata[biz_pm_id]" value="你自定义的pm_123"> </cfhttp>
- 如果需求不是新建PaymentMethod,而是操作已存在的指定ID的PaymentMethod,不要走创建接口:将目标PaymentMethod的ID直接拼在请求URL路径中,查询用GET方法、更新操作用POST方法传递对应字段即可,不要把ID放在表单参数里传递。
- 补充说明:目前Stripe仅开放Customer、Product、Price、Plan、Coupon这几类对象的创建接口自定义ID权限,PaymentIntent、Charge、PaymentMethod等交易链路相关对象均不支持创建时手动指定ID。
内容的提问来源于stack exchange,提问作者Gnosis
相关产品推荐
相关产品推荐

