注意:以下文档只适用于TOP接口,请谨慎使用!

文档中心 > 全渠道

奇门异常排查手册

更新时间:2018/11/05 访问次数:77096

 

该文档已过时,请参考最新文档//open.taobao.com/doc.htm?docId=104247&docType=1

一、报错如何排查?

    奇门接口报错无外乎奇门平台的报错和对方接口的校验报错,针对不同的报错找对应的人。奇门平台的报错信息请参看本页中的错误码及解决方案。

    1. 如果<response>报错信息中code=TOP15或者code=TOP60,则该报错是奇门平台给出的报错信息,根据报错message信息在本页下面的表格中查找对应的解决方案。奇门上线以来,所有ISV反馈的奇门平台报错信息,在这里都能找到答案。(注:如果是奇门的报错,message信息一定是英文的)

    2. 如果<response>报错信息中code是其他的信息,则该条报错信息一定是对方的报错,请联系对方协助排查原因。

二、关于日志查询

    奇门已经开放了ISV查询日志工具,可以查询正式(线上)环境和测试环境的日志,请登录”奇门中心-奇门日志查询“ 页面进行查

四、常见错误及解决方案

1.奇门仓储业务接口报错

CODE=TOP15/TOP60 MESSAGE

解决方案

Signature is invalid, customerId is *****, fromAppkey is *****, original signature is *****;

签名问题的排查思路:
1.TOP60的报错,且报错code和message和左侧信息一致,那么是奇门校验不通过,其他的code为联调对方返回的报错,联系对方解决。
2.如果使用的是SDK方式,请先检查secret和appkey是否是对应,日常环境用沙箱appkey和sandbox开头的secret,线上环境用正式appkey和正式secret。
3.如果不用SDK,直接调用API的方式,很容易出现签名的错误,可能存在的原因如下:
  1)确保参数已经排序,要求是url里面有的参数都必须参与签名(sign除外)。
  2)拼接body,不需要对body做任何处理。
  3)前后拼接secret,注意secret一定要和appkey对应,日常环境用沙箱appkey,线上环境用正式appkey。
  4)时间戳的问题,使用最原始的时间戳进行签名,也就是encode之前的。
  5)确保参与签名的时间戳和发给奇门的http请求中URL里的时间戳是同一个。
  6)完成以上步骤后,计算签名,可以找个在线md5计算的网址计算一下,对比一下你的签名和网上的签名,确保签名是32位的。
  7)如果和网上签名一致,但是发到奇门还是报错,有以下几种可能:
    a)奇门没有收到body数据,要求是body使用http post payload发送,而且要注意不能是表单提交,http header里面的Content-Type=application/x-www-form-urlencoded默认是form表单提交,改成Content-Type=application/xml; charset=utf-8,而奇门是从post流里面读数据。
     b)奇门收到的body有中文乱码。
    c)secret使用错误,奇门会根据appkey去获取对应的secret,所以ISV在签名的时候务必使用正确的secret。
  8)ITC提供了签名工具,可以用工具再试一下。
  9)验证签名的时候,不要替换url里面的appkey,收到的url里面的appkey是什么就用什么,不要改动url和body,否则会签名失败。
  10)把计算md5之前拼接好的字符串打出来,和url、body做一下对比,看看参数是不是一致的。
  11)接收报文的时候建议用字节来读,不要按行读,不然会导致验证签名失败。
综上,强烈建议使用SDK规避该问题。

 

Failed to get seller information

1.请求URL中customerId参数没传
2.customerId拼写错误(例如customerid)
3.请求URL中包含换行符等非法字符,将customerId截断了

error=[QIMEN-ERROR] 获取不到卖家[tuserid=null, customerId=260898, app_key=null]的授权关系

qimen inernal error | isp.route-error | 路由服务信息异常

授权关系错误,要么是参数用错,要么是奇门没有配置:
1.检查app_key和customerId是否配对。
2.app_key没传,拼写错误(如:appkey),值为空(如:app_key=&customerId=c1234567890)。
3.检查接入奇门的环境(日常:http://qimenapi.tbsandbox.com/router/qimen/service,线上:http://qimen.api.taobao.com/router/qimen/service)
4.确定参数配置的是否正确,在控制台里的奇门中心,查看线上或者测试环境的配置。

Cannot get destination appkey, unresolvable url

1.请求URL中method没传
2.method拼写错误,注意大小写(比如methed)
3.method参数值错误(拼写错误,有空格,或者是没有加上taobao.qimen.等)

No App(appsecret) found for appkey
Get appsecret by appkey failed

1.app_key为空
2.无效的Appkey,或者检查一下请求奇门的地址,可能是连错了环境(测试、正式)

Only MD5 is supported in current

sign_method为空或者不是md5

Standard request parse error

请求body出错,可能的原因如下:
1.XML开始节点与结束节点不匹配,例如<remark>商品数量应该小于100个</Remark>,或者没有结束节点
2.XML节点中包含空格,例如< remark>商品数量应该小于100个</remark>;或者<remark>商品数量应该小于100个</ remark>;或者<remark>商品数量应该小于100个< /remark>
3.XML节点的值包含“<”字符,例如<remark>商品数量应该<100个</remark>,解决方 法:<remark><![CDATA[商品数量应该<100个]]> </remark>
4.XML节点与标准请求中节点名不匹配,例如<remark>商品数量应该小于100个</remark1>
5.XML节点缺失,例如标准请求<items><item></item></items>,开发人员写成了<item></item>
6.XML节点重复,如<remark></remark><remark></remark>,错误信息为remark[2]
7.请求body体为空,错误信息为input contained no data、null
8.接口与报文不匹配,如:商品同步的接口却用了发货单创建接口的报文
9.检查url中的版本号v,现在是2.0(测试挡板会校验版本号)
10.XML中包含除< > & &qout; '之外的&other;特殊字符串,这些都不符合xml规范。
11.节点位置错误,比如在entryOrder节点下的,放到了request下面。

XML格式排查工具:http://tool.oschina.net/codeformat/xml/

Remote service error | isp.http-connection-refuse
Remote service error | isp.http-read-timeout
Remote service error | isp.http-connection-timeout
Remote service error | isp.http-closed

该类问题,直接联系对方技术人员,产生原因可能是:
1.连接拒绝:对方系统挂了或者负载过高
2.读取超时:一般出现在入库单和出库单接口,单量较大的时候ISV未能在8秒内返回响应,建议开发分批入库出库接口,减少单次请求的数据量。同时建议ISV在日常联调的时候测试系统能承受的不超时的最大单量。
3.连接超时:对方网络问题(防火墙)、负载过高、网络拥塞
4.连接关闭:对方系统收到请求后没有回应

Connection Failed

遇到这种情况首先检查一下公司网络是否可以访问奇门沙箱环境,将沙箱地址http://qimenapi.tbsandbox.com/router/qimen/service贴到浏览器,如果没有收到奇门返回的信息,需要重新设置一下网络环境。

qimen inernal error | qimen.request-convert-error |
qimen inernal error | qimen.response-convert-error |

1.奇门转发的url中不包含http或https,导致奇门无法获得端口号,检查授权关系中的url是否正确。
2.奇门正在部署,无法访问,一般出现在日常环境,概率较小。

qimen inernal error | qimen.request-convert-error | Standard request parse error: : only whitespace content allowed before start tag and not t

1.检查是否body传的不是XML格式,或者不是标准的xml格式;

can not get log info successfully

奇门日志落库出现了问题

 <message>?????????????????????!</message>

1.去日志工具查看对方返回的就是?????,还是接收方自己解析的时候出现了?????,谁的问题找谁解决。

2.处理的方法建议:new String(response.getBytes("ISO-8859-1"), "UTF-8");

Qimen service error | other-mistake

如果收到这个请求,说明对方的响应不符合白皮书标准,奇门现在要求请求和响应都严格按照白皮书的标准,否则会被拦截!

<response>        <flag>failure</flag>        <code>404</code>
<message>未能识别的请求方法</message></response>

挡板自测时遇到的问题,把v改成2.0

<response><flag>failure</flag><code>TOP15</code><message>Remote service error | isp.io-failure</message></response>

 通常是对方服务的异常,首先确认对方服务器是否正常

<response>
<flag>failure</flag>
<code>15</code>
<message>Remote service error</message>
<sub_code>isp.http-service-unavailable</sub_code>
<sub_message>http响应内容解析异常(return content parse error)</sub_message>
<request_id>eibzmmb0wu5o</request_id>
</response>

请求的格式非JSON/XML格式,一般是服务报错造成,比如404,503报错等

<response/>

返回内容只有一个Response却没有内容节点,需要检查返回的内容格式是否和API定义格式一致

后端http服务不可用

请检查提示的字段是否类型一致或者有包含特殊字符等

isp.fill-qimen-topRequest-error

请检查API名是否合法,API名必须是完整的,比如taobao.qimen.transferorder.query不能缩写成.transferorder.query

 

五、FAQ:

1.自测和联调要用沙箱的appkey,那么什么是沙箱appkey,以及沙箱的secret怎么获取?
A:登陆开放平台open.taobao.com,进入控制台,找到对接奇门使用的应用,应用设置里有沙箱环境的参数。一般情况,沙箱appkey是正式appkey前面加10,沙箱secret是sandbox开头的。

 

2.自测时候挡板的appkey和secret是多少?
A:在挡板自测的时候,appkey=自己应用的appkey时,请从问题1中获取secret;如果需要模拟挡板向自己的应用发起调用,那么APPKEY使用挡板的APPKEY(testerp_appkey)时,secret用:sandboxe014f2b9a8031cdf928955f2f。

3.挡板自测的时候获取的报文是乱码怎么办?
A:这里提供一个Java版的解决办法:new String(response.getBytes("ISO-8859-1"), "UTF-8");

4.ERP-WMS的奇门接口中会遇到orderCode和orderId两个字段,有什么区别?
A:orderCode是ERP定义的订单号,而很多仓库也会对单号进行定义,那么就放在orderId中,这两个字段指同一个单号。后续ERP查询/修 改单号信息的时候,如果WMS定义了orderId,那么查询/修改的时候也要把orderId字段带上(所以该字段属性为条件必填);同 理,itemCode和itemId也是一样的。

5.签名时注意timestamp字段的处理。
A:timestamp字段做签名的时候,要用encode之前的,验证签名的时候,要用decode之后的。也就是,计算签名的时候都使用 timestamp的原始数据。如:签名的时候用encode之前的timestamp2015-08-19 12:04:24,传URL的时候要encode,用stamptime2015-04-26%2000:00:07,校验签名的时候还是用 timestamp2015-08-19

12:04:24。如果使用SDK,则不存在这个问题。

6.关于订单被重复处理的问题。
A:有一种场景会存在订单被重复处理的风险,请服务商注意:ERP发送一个发货单创建申请,WMS接收到请求,但响应的时间超过了奇门的最大超时时间,假设8s,即WMS在8s内没有给出响应,那么奇门会返回ERP系统time-out的错误,ERP认为该订单没有发送成功,一定会重新发,而实际上WMS已经在系统中成功处理了该订单。那么第二次ERP重发的时候,WMS正确的做法是判断该订单号是否发已处理,如果已处理则返回成功即可,而不要返回类似“该订单已存在/已处理”等类似的报错,因为返回报错响应,ERP依然认为该订单没有发送成功,会陷入死循环。其他接口也有类似问题,请注意!

7.请求url中的v如何定义版本号?
A:奇门仅支持大版本号,即v=1.0或者v=2.0,但是不支持小版本号,如2.1,2.2。v=1.0是早期对接奇门时候的版本,现在都是2.0,服务商可以都使用v=2.0。

8.百川应用是否可以对接奇门接口?
A:暂时还不能,会报:No App(appsecret) found for appkey。

FAQ

关于此文档暂时还没有FAQ
返回
顶部