eBay Marketplace账户删除endpoint验证失败,接口问题排查求助
问题排查点
- 返回值二次序列化问题
你当前用ActionResult<string>作为返回类型,手动序列化JSON后直接返回字符串,ASP.NET Core会自动对返回的字符串做二次JSON序列化,最终返回的响应会带有多余的转义符,eBay无法解析到正确的challengeResponse值。 - 响应头不符合要求
直接返回字符串时框架默认返回text/plain类型的响应头,eBay要求端点必须返回application/json类型的响应。 - 配置值匹配校验问题
- 检查配置里的
eBayNotificationEndPoint是否和eBay开发者后台填写的端点地址完全一致,包括协议头(http/https)、大小写、末尾是否有斜杠,任意字符不匹配都会导致哈希计算错误 - 检查
eBayVerificationToken是否和后台填写的验证令牌完全一致,排除前后空格、拼写错误
- 异常无日志无法定位
当前catch分支直接返回空字符串,若出现配置读取失败、入参为空等异常时,你无法感知到具体错误,建议添加日志输出排查。
修正后代码
// 直接返回ActionResult,避免二次序列化,自动设置正确的Content-Type public ActionResult ChallengeResponse([FromQuery] string challenge_code) { try { // 入参判空,避免无效请求 if(string.IsNullOrEmpty(challenge_code)) return BadRequest(); string verificationToken = _configuration["eBayVerificationToken"]; string endpoint = _configuration["eBayNotificationEndPoint"]; // 校验配置值非空,避免空值参与哈希计算 if(string.IsNullOrEmpty(verificationToken) || string.IsNullOrEmpty(endpoint)) { // 此处可添加错误日志,排查配置读取问题 return StatusCode(500); } IncrementalHash sha256 = IncrementalHash.CreateHash(HashAlgorithmName.SHA256); sha256.AppendData(Encoding.UTF8.GetBytes(challenge_code)); sha256.AppendData(Encoding.UTF8.GetBytes(verificationToken)); sha256.AppendData(Encoding.UTF8.GetBytes(endpoint)); byte[] bytes = sha256.GetHashAndReset(); string challengeResponse = BitConverter.ToString(bytes).Replace("-", string.Empty).ToLower(); // 直接返回匿名对象,由框架序列化JSON,避免手动拼接转义错误 return Json(new { challengeResponse = challengeResponse }); } catch (Exception ex) { // 此处添加异常日志输出,排查具体错误 return StatusCode(500); } }
内容的提问来源于stack exchange,提问作者Sharad
相关产品推荐
相关产品推荐

