Skip to Content
最佳实践对接快递100

对接快递100

场景说明

根据单号、快递公司编码、手机号,快速查到订单快递状态。

使用 Zion 外接 API 对接快递100查询物流信息

第一步:获取客户快递100相关授权信息

快递100授权信息界面

第二步:查看快递100的API说明文档

快递100API文档界面

可知其请求类型为post,Content-Type为application/x-www-form-urlencoded。 关键难点是请求参数sign需要经过MD5加密。

新建个行为流名字叫tosign:入参是com(快递公司编码)、num(单号)、phone(手机号),出参是sign(加密后的签名)、param(请求体里的param参数),类型均为文本类型。

加密的js代码,入参是com、num、phone,出参是sign(加密后的签名)、param(请求体里的参数)。

第三步:外接API上测通api并保存配置

输入这是没有body:

API测试无body界面

查询里的参数:

API查询参数界面

headers里的参数:

API请求头配置界面

第四步:在页面上使用时先执行加密的自定义行为

可以放在获取远程数据成功时

执行成功后把出参sign和param赋值给页面数据sign和param

第五步:用列表展示api里的物流信息

物流信息列表展示界面

利用hiflow对接快递100物流api

其实这种方法比较麻烦且现在参数不支持数组类型,无法配置

第一步:首先找客户要快递100相关授权信息

快递100授权信息界面

第二步:进入腾讯hiflow官网

没注册的先注册,他们现在是免费使用的。

点击创建新的流程

创建新流程界面

选择内置工具里的webhook

选择Webhook工具

向webhook地址里发送一条测试数据,这个时候请求体body可以按自己需求写。 我这里order_id是订单表id,com是快递公司编码,num是快递单号,单号加编码就可以查出物流相关信息。

发送测试数据界面

点击测试并预览可以得到样本数据,说明第一个webhook测试通了

测试并预览结果界面

流程的第二个步骤在全部里搜索快递100应用,选择查询快递实时进度

选择快递实时进度应用

快递公司选择自定义-步骤1里的com字段,快递单号填步骤1里的num字段,电话号码不用填,点击测试并预览,接收到物流信息成功后,再点击保存。

配置快递实时进度参数界面

第三步:配置webhook

选择内置工具里的http,请求类型选post,请求地址是zion里的回调地址,没有加的可以先在zion里建一个回调地址,header里填Content-Type对应application/json。

配置HTTP请求界面

请求body是对应zion里回调地址需要的参数。这里用到了步骤2里的参数。

配置请求体参数界面

当然zion的回调地址需要绑定一个行为流,这个行为流的目的是接收步骤2里的返回的物流信息,并写入到zion的数据库中。

绑定行为流界面

行为流里的的代码如下:

(() => { const body = context.getArg("fz_callback_body"); console.log('请求体:',JSON.stringify(body)); const orderId = body.order_id; const time = body.time.substring(1, body.time.length - 1).split(","); const node = body.node.substring(1, body.node.length - 1).split(","); const deliveryInfoArr = []; for (let i = time.length - 1; i >= 0; i--) { const deliveryInfo = { logistics_time: new Date(time[i]).getTime(), logistics_node: node[i], order_order: orderId, }; deliveryInfoArr.push(deliveryInfo); } if (!deliveryInfoArr.length) { return; } const gql = `mutation insertLogisticsRecords($logisticsObjects: [logistics_record_insert_input!]!) { response: insert_logistics_record( objects: $logisticsObjects on_conflict: {constraint: unique_by_order_id_and_time, update_columns: []} ) { affected_rows } }`; const insertLogisticsRecordsResult = context.runGql( "insertLogisticsRecords", gql, { logisticsObjects: deliveryInfoArr }, { role: "admin" } ).response; })();
Last updated on