XMLHttpRequest发送POST请求传参失败 Stripe接口提示缺少amount参数
故障原因
两个核心问题导致参数无法被识别:
- Stripe 官方API默认不接收
application/json格式的请求体,仅支持application/x-www-form-urlencoded格式传参,你设置JSON类型的Content-Type后,服务端不会解析传入的JSON内容,自然读不到任何参数。 - 你手写的JSON字符串本身存在语法错误:字符串值使用单引号、对象末尾多了冗余逗号,即便接口支持JSON格式也会解析失败。
- 高危风险提示:绝对不要在前端代码中存放sk开头的Stripe密钥,前端代码可被任意用户查看,密钥泄露后他人可恶意操作你的Stripe账户造成资金损失。前端场景要么使用pk开头的公钥配合Stripe官方前端SDK,要么把请求逻辑放到自有后端服务中做中转。
修正后代码
let xhr = new XMLHttpRequest(); xhr.open("POST", "https://api.stripe.com/v1/payment_intents"); xhr.setRequestHeader("Accept", "application/json"); // 替换为Stripe要求的form编码请求头 xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xhr.setRequestHeader('Authorization', 'Bearer sk_test_keygoeshere'); xhr.onload = () => console.log(xhr.responseText); // 按x-www-form-urlencoded规范拼接参数,数组类型参数需要加[]后缀 let params = new URLSearchParams(); params.append('amount', 1000); params.append('currency', 'usd'); params.append('payment_method_types[]', 'card'); xhr.send(params);
上述代码仅演示参数格式的正确写法,生产环境禁止前端直接携带sk密钥调用Stripe接口。
内容的提问来源于stack exchange,提问作者bernardo
相关产品推荐
相关产品推荐

