对接快递100

场景

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

使用zion外接api的功能对接快递100查询物流信息

1.首先找客户要快递100相关授权信息。

2.查看快递100的api说明文档:https://api.kuaidi100.com/document/5f0ffb5ebc8da837cbd8aefc

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

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

加密的js代码,入参是com(快递公司编码) ,num(单号),phone(手机号),出参是sign(加密后的签名),param(请求体里param的参数)

3.先在外接API上测通api并保存配置。输入这是没有body的

查询里的参数:

headers里的参数:

4.在页面上使用时就先执行加密的自定义行为(可以放在获取远程数据成功时),执行成功后把出参sign和param赋值给页面数据sign和param

5.用列表展示api里的物流信息

2.利用hiflow对接快递100物流api(其实这种方法比较麻烦且现在参数不支持数组类型,无法配置)

1.首先找客户要快递100相关授权信息。

2.进入腾讯hiflow官网 https://hiflow.tencent.com/,没注册的先注册,他们现在是免费使用的。点击创建新的流程。

步骤1选择内置工具里的webhook

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

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

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

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

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

请求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;
})();
Copyright © FunctorZ 2024 all right reserved修订时间: 2024-10-12 10:57:53

results matching ""

    No results matching ""