好的开始是从吃早饭开始的

快递100推送物流追踪信息的探索
发表于2018-11-23 22:37:27 | 分类:技术 | 阅读:55

最近在搞商城网站,为了让用户在产生订单之后,能够随时查看商品的物流信息,使用了快递100的API来追踪物流,记录其中一些问题。


1、快递100实时接口


a)根据技术文档注册申请key添加物流公司编码和单号即可获得最新的物流信息


2、快递100订阅接口


a)订阅成功,管理后台的订单信息没有实时更新,状态会显示未开始。


b)回调url的返回数据不能直接通过访问url查看。


c)回调url内最好不输出其它内容,会导致推送失败,信息一直推送某个物流信息节点。


一开始以为订阅成功后,物流轨迹一有变化就会进行推送,但是实际上快递100订阅接口会隔段时间(4个小时左右)去跟踪,检测到轨迹有变化会再间隔一段时间才进行推送。


因为希望实现的是物流轨迹一变更就能及时推送信息给用户,好让用户知道商品现在在哪里,何时能到达。因为这种间隔时间的偏差,会导致推送的最新物流信息,和实际上的所在物流信息不一致,这会让用户体验很差。


所以快递100的订阅功能在我看来似乎有点鸡肋。


最终的解决方法:


1、在订单表中增加一个字段保存最新的物流信息点【数据1】,即我们要推送给用户的信息提示,例如:该快件已到达XX城市。


2、写一个程序文件,通过筛选得到正在发货中的订单,利用快递100实时接口获得每个订单的最新的物流信息点【数据2】,与【数据1】进行比较,两种情况:


a)【数据1】为空,【数据2】不为空,即商品第一次发货的情况。即可发送【数据2】最新的物流信息给用户,并将【数据2】存入订单表的物流信息点字段,方便下次的比较。


b)【数据1】不为空,【数据2】不为空,再比较两个数据是否相同,不相同同上发送并保存【数据2】,相同即物流轨迹没有变化,无需推送信息。


3、(windows、PHP示例)创建一个test.bat文件,用记事本形式打开,添加一下内容:


   E:\php\php.exe -q E:\web\test.php


即使用php.exe去执行2中的程序文件test.php。


4、设置定时任务运行test.bat,每隔30分钟(大概是最短的请求间隔时间),尽可能短时间去更新订单的最新物流信息,达到“实时”推送物流信息的效果。(对服务器可能是个考验)。


为什么设置30分钟因为同个单号短时间的大量请求,就会被判定为恶意刷单行为,直接被封禁,会暂时停止该单号的请求,导致物流信息更新的停止;这种情况同样会发生在用户在自己的订单界面上,恶意刷新订单物流信息,所以用户查看的物流信息也应该是从缓存数据中读取的,而不是通过一次实时物流信息接口的查询。)


PS:任务无法运行,因为计算机中丢失fbclient.dll,注释掉php.ini中的php_interbase.dll。其它找不到的模块也都注释掉,不然php.exe无法运行。


再PS:一个订单的实时接口查询因为有不同的接口去分流,可能会导致同一个时间点上有两种不同描述但意思是一个理的物流信息,例如(某某公司已收入和快件已到达某某公司),整体轨迹还是一样,所以判断物流是否实际更新,还要去除掉同个时间点上的某条相近的物流信息。


打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
点击此处,取消分享

上一篇:《海贼王第0话 强者世界前传》

下一篇:没有了

*以下内容皆为必填项目

0条评论

暂无评论
TOP