调用Coinbase Commerce接口创建charge的POST请求报错如何解决?
问题排查与修复方案
核心错误原因
你的请求体多了一层query嵌套,Coinbase Commerce的创建Charge接口要求所有参数直接放在请求体根层级,你当前的JSON.stringify({ query })生成的结构是{"query": {"name": "...", ...}},不符合接口要求,这是最主要的报错原因。
通用排查步骤
- 先完善错误处理逻辑,输出完整的接口返回的错误信息,错误信息会明确告知是字段缺失、格式错误还是权限问题,大幅提高排查效率
- 校验请求体结构:所有Charge配置参数直接放在请求体根节点,不要额外嵌套外层对象
- 校验API密钥有效性:确认你使用的是Coinbase Commerce后台生成的专属API密钥,不要和Coinbase普通交易接口的密钥混淆
- 校验字段格式:
local_price.amount需为字符串格式的数值,货币代码需符合ISO 4217标准,你当前的字段值都是合规的
修复后完整代码
const chargeParams = { name: 'The Sovereign Individual', description: 'Mastering the Transition to the Information Age', local_price: { amount: '100.00', currency: 'USD', }, pricing_type: 'fixed_price', metadata: { customer_id: 'id_1005', customer_name: 'Satoshi Nakamoto', }, redirect_url: 'https://charge/completed/page', cancel_url: 'https://charge/canceled/page', }; const opts = { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-CC-Api-Key': '6225fe4d-f9a8-498f-8085-11dea4212316', 'X-CC-Version': '2018-03-22', }, // 直接序列化参数对象,不要外层嵌套 body: JSON.stringify(chargeParams), }; // 增加错误处理逻辑方便排查 fetch('https://api.commerce.coinbase.com/charges', opts) .then(res => { if (!res.ok) { // 打印错误响应内容 return res.json().then(err => { throw err; }); } return res.json(); }) .then(data => console.log('创建成功', data)) .catch(err => console.error('请求错误', err));
内容的提问来源于stack exchange,提问作者titan
相关产品推荐
相关产品推荐

