调用eBay订单取消API遇215120签名验证失败问题求助
解决eBay Add Dispute API签名验证失败(errorId:215120)的排查方案
以下是针对该错误的具体排查方向,按优先级排序:
核对核心签名参数的准确性
- 确认
client_id、private_key与当前使用的环境(沙箱/生产)完全匹配,沙箱密钥不能用于生产环境,反之亦然。 - 检查
request_target:必须严格对应Add Dispute API的请求路径(如post /post-order/v2/dispute),注意HTTP方法小写、路径的版本号和拼写,不能多/少任何字符。 timestamp必须是当前UTC时间的秒级Unix时间戳,误差不能超过5分钟——本地时间偏移会直接导致签名过期。nonce必须是每次请求生成的随机唯一字符串,绝对不能重复使用同一值。
- 确认
检查HTTP请求头的格式与完整性
Authorization头的格式必须严格遵循规范:
注意字段顺序、引号的使用,以及Signature keyId="YOUR_CLIENT_ID",algorithm="rsa-sha256",signature="BASE64_ENCODED_SIGNATURE",headers="request-target host date x-ebay-signature-nonce",nonce="YOUR_NONCE",timestamp="YOUR_TIMESTAMP"headers中声明的所有字段必须在请求头中存在。- 必须包含
Host头,值对应环境域名:沙箱用api.sandbox.ebay.com,生产用api.ebay.com。 Date头必须是RFC 1123格式的UTC时间(如Wed, 21 Oct 2015 07:28:00 GMT),且与签名时的timestamp时间对应。
排查Java代码实现的细节坑
- 私钥加载:从PEM文件读取时,务必去掉首尾的
-----BEGIN PRIVATE KEY-----和-----END PRIVATE KEY-----,并将剩余内容拼接成一行(不能保留换行符)。 - 待签字符串(Signature Base String)拼接:必须严格按顺序拼接,每行末尾保留换行符,最后一行也不能省略:
request-target: post /post-order/v2/dispute host: api.sandbox.ebay.com date: Wed, 21 Oct 2015 07:28:00 GMT x-ebay-signature-nonce: abc123xyz - 签名算法必须使用
SHA256withRSA,eBay不支持其他RSA变种算法。 - 签名结果需做标准Base64编码,不要使用URL安全的Base64编码。
- 私钥加载:从PEM文件读取时,务必去掉首尾的
Add Dispute API的特殊验证点
- 确认HTTP请求方法为
POST,签名的request_target必须对应post /post-order/v2/dispute。 - 检查官方文档:Add Dispute是否要求对请求体(body)进行哈希并加入签名。如果是,需在待签字符串中添加
digest: SHA-256={BASE64_ENCODED_BODY_HASH},同时在Authorization的headers字段中加入digest。
- 确认HTTP请求方法为
对比签名基础字符串与官方示例
将你生成的签名基础字符串和官方提供的示例逐字符对比,包括换行、空格、大小写——哪怕一个字符的差异都会导致验证失败。
内容的提问来源于stack exchange,提问作者Vicky Thakor
相关产品推荐
相关产品推荐

