几个在调用API时常见问题的解决方案
抛砖引玉,大家也可以说说自己在开发中累积的解决常见问题的方案。谢谢!
场景一:在售商品库存更新
使用的API:
taobao.items.get
taobao.items.search
taobao.items.onsale.get
taobao.items.inventory.get
业务逻辑细节:
出现isv.invalid-parameter:gain-number-too-large(搜索商品超过10万条)报错,会造成一些流量浪费掉
解决方案:
业务方面:由于淘宝为了避免翻页超过10万条对服务器压力过大,在搜索商品超过10万条以后就无法在淘宝页面显示。
程序方面:程序前端使用page_no*page_size>=100000的判断,在客户端校验,避免这些错误操作造成调用量浪费
场景二:添加优惠策略
使用的API:
taobao.marketing.promotion.add
业务逻辑细节:
在调用Promotion.Add添加优惠策略的时候,注意要防止对同一商品对同一标签的人群,设置多个优惠策略。(isv.promotion-repeat)
解决方案:
商家可能会使用多个工具设置优惠策略,可能会出现不同应用设置了重复策略的情况,不要进行重试,要提醒用户删除上个优惠策略。
场景三:橱窗推荐类工具
使用的API:
taobao.item.recommend.add
业务逻辑细节:
出现isv.item-recommend-service-error:ERROR_MORE_THAN_ALLOWED_RECOMMEND_NUM 橱窗已满的错误
解决方案:
在橱窗上增加一个商品,采用的逻辑应该是:调用taobao.shop.remainshowcase.get 获得橱窗数量,再去add。
比如:调用get得到返回值6,说明有6个空的橱窗,然后调用6次add,向空的橱窗中添加推荐商品。
在遇到用户使用多款应用导致,橱窗在非正常情况下变满,应提示卖家,橱窗已满,不应该反复重试。不推荐,先去add,返回错误后停止的调用逻辑。
场景四:自动发货(修改订单状态)类工具
使用的API:
taobao.logistics.offline.send
业务逻辑细节1:
调用时40NULL缺少参数的错误
解决方案:
tid,out_id,company_code均为必选参数,需要传入。当物流公司是非官方合作公司时,company_code填写“其他”
业务逻辑细节2:
B98错误发货类型不正确。将货到付款,在线物流等订单,使用了线下物流发货
解决方案:
通过trade.fullinfo.get接口获取到订单的发货类型,做判断后,调用发货接口
场景五:订单查询
使用的API:
taobao.trade.fullinfo.get
业务逻辑细节1:
出现isv.trade-not-exist订单不存在错误,原因一般是查询了3个月前的订单
解决方案:
每天对数据库进行更新,剔除掉时间超过3个月的订单。或者在调用接口前对订单modified进行校验,剔除过期的并加上标签,以后不对这些订单进行查询。
业务逻辑细节2:
isv.invalid-permission错误,使用了错误的卖家Id去查询订单,一般出现在支持多店管理的进销存应用中,从服务器中获取订单没有区分不同的淘宝店铺,在
做下一步详细信息查询时,会出现权限错误。
解决方案:
从服务器获取不同店铺的订单时,要做好标签,区分不同店铺。在做后续操作时,按店铺分开处理。
场景六:批量评价
使用的API:
taobao.traderate.list.add
业务逻辑细节:
出现isv.rate-service-error:-1020错误,超过15天的订单已评价或已过评价有效期。没有对订单的评价时间做一个15天限制
解决方案:
加一个15天的有效期限制,也就是只对交易成功之后15天以内未评价的订单进行评价
场景七:订单增量查询
使用的API:
taobao.trades.sold.increment.get
业务逻辑细节:
出现订单查询不到,漏单的问题
解决方案:
注意点1:使用该接口查询时,要根据modified字段来查询,例如一笔订单85433811901845 <end_time>2011-07-20 10:00:27</end_time>
<modified>2011-07-20 10:17:30</modified><pay_time>2011-07-18 10:46:17</pay_time> 那么查询时查询区间要包含modified:2011-07-20 10:17:30,
即可以设置start_modified 2011-07-20 10:15:00 end_modified: 2011-07-20 10:45:00。2:只能查询时间跨度为一天的增量交易记录:
start_modified:2011-7-1 16:00:00 end_modified: 2011-7-2 15:59:59(注意不能写成16:00:00)。
场景八:手机充值类业务
使用的API:
taobao.trades.sold.increment.get
taobao.logistics.offline.send
业务逻辑细节:
出现isv.logistics-offline-service-error:B04错误,订单状态不对,多数为订单重复发货。为了保证不漏单,get的订单获取区间可能有所重复。
当send接口出现一些延时时,重复区间的订单可能获取重复再次发货,导致重复。
解决方案:
调用get接口时,做一个延时,保证订单已经完全send后,再调用taobao.trades.sold.increment.get接口。
场景九:图书发货
使用的API:
taobao.products.search
taobao.item.get
taobao.item.add
taobao.item.delete
业务逻辑细节:
在添加或修改图书时会出现isv.item-add-service-error:CATEGORY_LIMIT_SPU_BOOK_NORMAL\isv.item-delete-service-error\isv.item-is-delete:
invalid-numIid-or-iid错误,主要原因是添加或是修改的图书ISBN号没有经过审核,在淘宝产品库中不存在。
解决方案:
在添加或是修改图书类商品时,首先要调用taobao.products.search接口查询,图书是否在产品库中。在调用products.search接口时:输入的q字
段参数为“ISBN号” 例如:"9787121105777"。status字段输入参数分为两类:1、普通卖家输入字段为"3" ;2、商城卖家输入字段为"0,3"。
有话要说