2Checkout API与2pay.js集成报错:无效EesToken或货币不支持
排查2Checkout API与2pay.js集成的EesToken问题
核心问题分析
你遇到的矛盾错误(加引号token无效、不加引号货币错误)本质是请求格式不匹配+环境/参数一致性问题,以下是分步排查和解决方法:
1. 确认环境一致性
2pay.js的沙箱/生产环境生成的token无法跨环境使用:
- 沙箱环境:2pay.js加载地址是
https://sandbox.2checkout.com/static/checkout/javascript/direct.min.js,对应API接口是https://api-sandbox.2checkout.com/rest/6.0/orders/ - 生产环境:2pay.js加载地址是
https://www.2checkout.com/static/checkout/javascript/direct.min.js,对应API接口是https://api.2checkout.com/rest/6.0/orders/
如果生成token的环境和调用API的环境不一致,哪怕格式正确也会返回INVALID_EES_TOKEN。
2. 严格按照JSON格式提交请求
/rest/6.0/orders/接口要求POST JSON格式的请求体,必须满足两个条件:
- 请求头设置
Content-Type: application/json - 所有字符串类型参数(包括EesToken)必须加双引号
错误示例(无引号导致类型解析错误):
{ "paymentMethod": { "type": "CARD", "token": 8150cbb0-3253-4f4d-9add-22c60674550c // 错误:token是字符串,必须加引号 } }
正确示例:
{ "currency": "EUR", "items": [ { "name": "Sample Product", "quantity": 1, "price": 29.99 } ], "paymentMethod": { "type": "CARD", "token": "8150cbb0-3253-4f4d-9add-22c60674550c" // 正确:字符串加引号 } }
如果请求头没设置Content-Type: application/json,服务器会把JSON请求体当成普通表单解析,此时带引号的token会被识别为包含引号的无效字符串,直接返回INVALID_EES_TOKEN。
3. 校验订单参数与token生成参数的一致性
2pay.js生成token时,会关联当前的货币、商户配置等信息,订单请求必须和这些信息匹配:
- 确保生成token时指定的货币和订单请求的
currency一致(比如都是EUR) - 检查商户后台是否允许当前卡类型使用EUR货币:登录2Checkout后台,进入Payment Methods,确认对应卡种(Visa/Mastercard等)的EUR币种已开启
4. 排查token生成逻辑
检查2pay.js的初始化和token生成代码是否正确,示例如下:
// 初始化2pay.js(沙箱环境) var twocheckout = new Twocheckout({ sellerId: "你的沙箱商户ID", sandbox: true }); // 生成token的正确逻辑 twocheckout.createToken({ cardNumber: "4111111111111111", cardExpMonth: "12", cardExpYear: "2026", cardCvv: "123", currency: "EUR" // 必须和订单请求的currency一致 }, function(error, data) { if (error) { console.log(error); } else { var eesToken = data.token; // 拿到的token直接用于API请求即可 } });
总结
先核对环境是否匹配,再确保请求头和JSON格式正确,最后校验token生成与订单参数的一致性,按这个顺序排查基本能解决问题。
内容的提问来源于stack exchange,提问作者mrakodol
相关产品推荐
相关产品推荐

