使用Stripe API与cfhttp绑定PaymentMethod到Customer报错问题
报错原因
该报错是请求接口路径不符合Stripe API规范导致的。
Stripe将已存在的PaymentMethod绑定到客户的操作,要求调用专属的attach端点,你当前直接向/v1/payment_methods/{pm_id}路径发起POST请求并传入customer参数时,Stripe的路由逻辑会将该请求识别为PaymentMethod创建流程的异常操作,因此抛出「不能在创建PaymentMethod时绑定客户」的错误。
你传入不存在的PM ID时返回资源不存在的错误,是因为Stripe会优先校验路径中携带的资源ID有效性,校验不通过直接返回对应错误,不会进入后续的操作类型校验环节,因此该测试结果无法证明你调用的接口路径正确。
修复方法
按以下调整即可完成绑定:
- 修正请求URL,在原有PaymentMethod ID末尾追加
/attach路径段,修正后的接口地址格式为https://api.stripe.com/v1/payment_methods/pm_1LCuutGKxC2502V8WNrkE3Ja/attach - 原有Authorization请求头、customer表单参数及其他业务传参保持不变即可
- 额外校验项:你当前传入的客户ID为
cust_admin_1,不符合Stripe原生客户IDcus_开头的格式规则,如果不是自定义映射的ID,需要确认对应客户已在Stripe侧成功创建,否则修正路径后会抛出客户不存在的错误。
代码对比
原错误请求:
<cfhttp method="POST" url="https://api.stripe.com/v1/payment_methods/pm_1LCuutGKxC2502V8WNrkE3Ja" result="result"> <cfhttpparam type="header" name="Authorization" value="Bearer sk_test_51...."> <cfhttpparam type="FormField" name="customer" value="cust_admin_1"> ..... </cfhttp>
修正后请求:
<cfhttp method="POST" url="https://api.stripe.com/v1/payment_methods/pm_1LCuutGKxC2502V8WNrkE3Ja/attach" result="result"> <cfhttpparam type="header" name="Authorization" value="Bearer sk_test_51...."> <cfhttpparam type="FormField" name="customer" value="cust_admin_1"> ..... </cfhttp>
内容的提问来源于stack exchange,提问作者Gnosis
相关产品推荐
相关产品推荐

