# 扫一扫查快递
微信物流服务「扫一扫查快递」功能开放快递公司接入,用户在微信内用“扫一扫”扫快递运单条码、用“搜一搜”、“指尖搜索”搜索运单号等场景,可以实时查询/分享/收藏该物流轨迹、联系快递公司客服、微信支付该运单的费用以及跳转到该快递公司小程序等功能。
# “扫一扫查快递” 功能页面
# 接入流程
# 1.邮件申请
发送申请邮件至wxwuliu@tencent.com
【邮件标题】 快递公司名称 - 扫一扫快递接入申请
【邮件内容】 计划实现的功能、运力小程序的appid(小程序需要完成微信认证)、运力的正式服务器地址(微信侧请求该地址获取轨迹、运力的测试服务器地址(用于接入测试)、运力的运单正则表达式(后续如果有更新,需要发邮件通知微信侧)、运力名称、运力客服电话、运力跳转小程序appid和path、自定义cell跳转
【邮件附件】《营业执照》、《快递业务经营许可证》扫描件
我们会在收到邮件后的1个工作日内进行反馈。
# 2.协议签署
符合接入要求的快递公司,会收到邮件回复,包含接入指引和《合作协议》。
# 3.开发调试
- 提供白名单测试运单码
- 提供运单判断规则,以正则表达式形式(用于判断数据拉取)
- 按照本接口文档设计和开发,其中部分信息需要由微信协助配置
- 以邮件和微信群形式沟通
# 4.审核发布
接口开发完成,微信侧确认,通过性能和安全审核后发布,发布后的页面所有用户可以扫码查看。
# 接入前准备
# 1.快递信息查询接口
用以微信前端通过JsonP 方式获取运单的信息
# 2.落地页Cell信息
快递公司需要提供一组 Cell 的信息,每个 Cell 包括:
- “Key”:Cell 的标识码,快递公司自定义, 不超过 20 字符
- “Name”:Cell 展示的名称,如“支付运单”
- “Link”:Cell 点击外跳的 url 地址
# 接口开发文档
# 1.查询快递信息的接口
- 接口说明 :微信使用 JsonP 的方式到快递公司拉取快递运单信息 。
- 请求url示例: 假定快递公司配置的回调URL是 A,则请求URL 格式如下: A?orderid==xxx&openid=xxx&signature=xxx×tamp=xxx&nonce=xxx&callback=xxx 通过http Get访问url
请求参数说明
参数 | 说明 |
---|---|
orderid | 运单号 |
openid | 当访问者openid,可唯一标识用户 |
signature | 微信加密签名,签名算法为sha1(token、timestamp、nonce三个参数字符串升序排序后拼接的字符串),输出的签名结果为小写16进制串,长度40,token来自快递方提交的公众号所配置的token,timestamp及nonce来自链接参数 |
timestamp | 时间戳 |
nonce | 随机数 |
callback | WxOrderCb |
company_id | 快递公司编码,快递鸟使用 |
返回参数说明
WxOrderCb(OrderInfo的json数据)
OrderInfo说明
参数 | 说明 |
---|---|
err_code | 0表示成功,否则返回相关错误码 |
err_msg | ok表示成功,否则返回相关错误信息 |
traces | 物流轨迹详情列表,数组,下面具体解释包含字段 |
cells | Cell列表,数组,下面有具体解释包含字段 |
estimated_delivery_time | 预计送达时间,格式:yyyy-mm-dd, 当订单状态为非已签收时返回 |
order_status | 订单状态,定义见OrderStatus |
traces数组内每个元素字段说明
参数 | 说明 |
---|---|
accept_time | 物流轨迹产生时间,格式:yyy-mm-dd hh:mm:ss |
accept_address | 物流轨迹状态和描述,格式:X \n Y (X状态,Y描述) 例如:运输中 \n 快件已从杭州枢纽中心发出,正在发往深圳转运场。 |
remark | 物流轨迹产生地点 |
cells数组内每个元素字段说明
参数 | 说明 |
---|---|
key | Cell的标识码,快递公司提前配置,不超过20个字符 |
value | Cell右侧的引导语,不超过10个字符 |
status | url参数,快递公司自定义,用于点击Cell时拼接在Url后外跳 |
OrderStatus定义
值 | 说明 |
---|---|
0 | 待揽件 |
1 | 已揽件 |
2 | 运输中 |
3 | 派送中 |
4 | 已签收 |
5 | 签收异常 |
6 | 代签收 |
OrderInfo示例
{
"err_code":0,
"err_msg":"ok",
"traces":[
{
"accept_time":"2014-12-08 22:55:49",
"accept_address":"虎门中转部",
"remark": "派件中"
},
...
],
"cells": [
{
"key": "wxpay",
"value": "已支付",
"status": "pages/index/index",
},
...
],
"estimated_delivery_time": "2019-09-30",
"order_status": 3
}
签名示例
token=1a2b3c456,timestamp=123456,nonce=13578
value按字典序升序排列后为123456,13578,1a2b3c456
签名为sha1(123456135781a2b3c456)=5eff852d33f84c33ef1c3a792d3ffb941d6b0261
最终完整的返回数据为
WxOrderCb({"order_status":2,"cells":[{"value":"寄快递","key":"order"}],"err_msg":"ok","estimated_delivery_time":"2020-07-08","traces":[{"accept_address":"【河北永清县】(0316-6840631) 的 操作一组(15731691877) 已揽收","remark":"河北永清县","accept_time":"2020-07-04 20:47:03"},{"accept_address":"快件离开 【河北永清县】 已发往 【贵阳】","remark":"河北永清县","accept_time":"2020-07-04 21:44:38"},{"accept_address":"快件已经到达 【华北操作部】","remark":"华北操作部","accept_time":"2020-07-05 01:33:05"},{"accept_address":"快件离开 【华北操作部】 已发往 【贵阳】","remark":"华北操作部","accept_time":"2020-07-05 18:15:24"},{"accept_address":"快件已经到达 【贵阳】","remark":"贵阳","accept_time":"2020-07-07 05:55:46"},{"accept_address":"快件离开 【贵阳】 已发往 【遵义】","remark":"贵阳","accept_time":"2020-07-07 07:28:23"},{"accept_address":"快件已经到达 【遵义】","remark":"遵义","accept_time":"2020-07-07 13:42:07"},{"accept_address":"快件离开 【遵义】 已发往 【遵义桂花社区】","remark":"遵义","accept_time":"2020-07-07 13:44:42"}],"err_code":0})
扫码示例图
# 2.自定义cell跳转
扫一扫落地页提供了cell位可供实现运力的支付相关功能需要提供跳转的小程序appid与跳转path以及cell位的代号key 运力方在查询快递信息接口返回需要显示的cell位(通过代号key),微信将需要展示的cell位链接拼上额外参数后给到前端,用户点击后跳转到该链接。 具体的额外参数定义如下:
参数 | 说明 |
---|---|
orderid | 运单号 |
openid | 当访问者openid,可唯一标识用户 |
signature | 微信加密签名,签名算法为sha1(token+timestamp+nonce),输出的签名结果为小写16进制串,长度40,token来自快递方提交的公众号所配置的token,timestamp及nonce来自链接参数 |
timestamp | 时间戳 |
nonce | 随机数 |
如cell配置了一个支付快递的链接pages/test/pay 用户点击时访问的链接为 pages/test/pay?timestamp=1592811835&nonce=1756708668&signature=05d22a5ef341200dec391208bc7bb6bf8e30780d&orderid=6000069559003&openid=omJOjjvB9iYTYiEKp7GFfweffQPmdU
自定义cell示例图