# 插件方式接入

# 插件要求

# 产品

  • 对插件业务的要求
  1. 【主流程】主业务流程需要保证通畅可用,且线上使用体验良好
  2. 【定位】在使用定位的适当时机请求用户定位,非强依赖定位的服务,不可强制索取用户定位。用户未授权定位时,推荐使用首页选择城市的默认POI作为默认位置,具体可结合实际业务进行调整。
  3. 【导流】整个插件内不可出现以banner、推文、引导关注/下载等任何形式的导流至非腾讯出行服务公众号的内容出现
  4. 【交叉内容】与腾讯出行服务出现的交叉服务/功能需屏蔽
  • 其他
  1. 接入方不可在未经允许的情况下,私自短信/电话等形式进行导流操作
  2. 接入方不可在未经允许的情况下,私自短信/电话等形式进行非服务相关的干预/打扰用户等行为

# 技术

  • 分包插件大小不宜超过 500k
  • 以首页半页卡方式接入的服务,首页部分大小不宜超过 100k
  • 插件支持 生产环境、测试环境 的切换;
  • 建议调试基础库基于 2.11.1 版本;

# 提供参数

参数名称 是否必须 说明 备注
appId 小程序 appId,用于订单同步时的 app_id 参数 如:wx65cc950f42e8fff1
debug 环境切换 0 生产环境 1 测试环境
openId 用户标识,用于订单同步时的 user_code 参数 如:ce7ac44cb24db1111c4c805e664ea906
encryptData 加密参数,需要 decodeURIComponent 如:PSYDQHwWw%2B0H2l%2FNFUoLNrAIF8%3D
encryptId 加密参数流水号 如:1611844898010850820
timestamp 时间戳(毫秒) 如:1596772108130
sign 签名 参见以下签名算法,32位小写 MD5 值
mobile 用户手机号 如:13800138000
carPlate 车牌 如:京A88888
carMode 腾讯车型id 如:64142
city 当前城市 (可提供城市中心坐标) 如:北京市,(或城市码,如:110100)
orderId 订单唯一标识,用于跳转订单详情页等 如:S618805163170115
[others] 其他约定的业务所需参数 ...
  • 签名算法: sign = MD5([参与签名的key + 参与签名的value] + timestamp + secret) secret 由出行或插件提供,区分测试环境和生产环境 假设定义 openId, mobile, carPlate, orderId 需要参与签名,代码示例如下
  const secret = '95t277x20952d1a6vi3sl67u138664';
  const appId = 'wx65cc950f42e8fff1';
  const openId = 'ce7ac44cb24db1111c4c805e664ea906'; // 参与签名
  const mobile = '13800138000';                      // 参与签名
  const carPlate = '京A88888';                       // 参与签名
  const timestamp = Date.now();                      // 如:1604650181834
  const debug = 1;
  const param = { appId, openId, mobile, carPlate, timestamp, debug };

  // 按顺序遍历参与签名的参数
  const authKeys = [];
  ['openId', 'mobile', 'carPlate', 'orderId'].forEach((k) => {
    if (typeof param[k] !== 'undefined') authKeys.push(`${k}${param[k]}`);
  });
  authKeys.push(timestamp, secret);
  param.sign = MD5(authKeys.join(''));
  // sign 值为:a7b2a948ddc4265ab9e7455ef93430d9

  const query = Object.keys(param).map(k => `${k}=${param[k]}`).join('&');
  wx.navigateTo({ url: `plugin://xx-plugin/index?${query}` });

# 调用时序

uml diagram

# 版本更新

  • 插件由版本升级时,按如下格式同步变更信息:
 [XXX 插件名称] [版本号]1.0.2
 A:新增 XXXXXX 功能
 F:修复 XXXXXX 的缺陷
 U:更新 优化 XXXXX 流程
 U:更新 优化 XXXXX 流程

# 注意事项

针对首页半页卡方式接入,有一些特殊的要求:

  • 首页半页卡可通过两种形式提供组件:插件中的组件标准 NPM 包构建的组件
  • 提供的半页卡组件包文件大小总和不宜超过100k
  • 组件中的 CSS 限定在特定的 class 内,禁止使用 page、view 等容易造成影响的全局设置;
  • 以 NPM 包方式提供的组件,组件内调用的接口域名限制为1个(需要绑定业务域名);
  • 以 NPM 包方式提供的组件,账号信息、跳转路径等参数通过组件属性进行传递;
  • 以插件方式提供的组件,页面跳转通过 TMSBridge 导出到插件(基础库 2.11.1以上 (opens new window)); 参见如下<能力扩展>:

# 能力扩展

tmsbridge