# WeCard 码组件

# 简介

用于在app或者h5上集成 wecard 码相关的能力,包括包括但不限于展示二维码、签约等。

# 申请方式

发送申请到 seasonyuan@tencent.com进行申请(邮件同时也抄送至lydiaxyang@tencent.com , lindayyang@tencent.com , ronniewan@tencent.com),申请时需要注明申请内容、应用 APPKEY、应用名称、及应用使用场景。

# 如何使用

# 获取用户有效凭证 (user_token)

# 请求方法

POST(application/json)

# 请求地址

https://open.wecard.qq.com/cgi-bin/e-code/get-user-token

# 请求参数

{
  "access_token": "ACCESS_TOKEN",
  "card_number": "REAL4411902"
}

# 响应说明

{
  "code": 0,
  "message": "OK",
  "token": "USER_TOKEN",
}

# 获取在线电子码

获取用户的电子码字符串。 需要将获取到的字符串绘制为二维码使用。 电子码有效期不短于 2 分钟, 建议每分钟更新一次。

# 请求方法

POST(application/json)

# 请求地址

https://open.wecard.qq.com/cgi-bin/e-code/refresh-code?token="user_token"

# 请求参数

{
  "token": "user_token"
}

# 响应说明

{
  "code": 0,
  "message": "OK",
  "code_str": "http://wx.url.cn/v002...."
}

# 错误码

名称 说明
20001 token 过期, 请获取新的用户有效凭证
20002 token 错误,请获取新的用户有效凭证
11101 用户已冻结
11102 用户在支付黑名单中
11103 用户身份已失效

# 获取签约状态

# 请求方法

POST(application/json)

# 请求地址

https://open.wecard.qq.com/cgi-bin/e-code/entrust-status

# 请求参数

{
  "token": "ACCESS_TOKEN",
}

# 响应说明

{
  "code": 0,
  "message": "OK",
  "status": 1
}

# 返回说明

字段 说明
status 签约状态 0: 未签约 1: 已签约

# 跳转至微信小程序签约

参考 微信开放平台 h5/app拉起小程序功能 文档, 实现 APP 跳转至小程序的签约页面,进行签约 流程。

跳转路径 (path) pages/sign_package/pages/openSign/openSign 跳转 appId 为 当前主体的小程序

# 请求参数

请求参数以 query 形式拼接在 path 参数后面。 例如 pages/sign_package/pages/openSign/openSign?token=xxx&displayName=xx用户

# 获取欠费状态

# 请求方法

POST(application/json)

# 请求地址

https://open.wecard.qq.com/cgi-bin/e-code/debt-status

# 请求参数

{
  "token": "ACCESS_TOKEN"
}

# 响应说明

{
  "code": 0,
  "message": "OK",
  "debt_status": 1
}

# 返回说明

字段 说明
debt_status 欠费状态 0: 未欠费 1: 已欠费

# 获取离线码

获取用户的离线电子码字符串,缓存到本地,在无网络环境下使用。 离线码有效期为 3 天(72 小时)。

# 请求方法

POST(application/json)

# 请求地址

https://open.wecard.qq.com/cgi-bin/e-code/offline-code?token="user_token"

# 请求参数

{
  "token": "ACCESS_TOKEN",
}

# 响应说明

{
  "code":0,
  "msg":"OK",
  "code_str_arr":[
    {
      "content":"http://wx.url.cn/v002....",
      "timestamp":1675157869000
    }, {
      "content":"http://wx.url.cn/v002....",
      "timestamp":1675157869000
    }
  ]
}

# 返回说明

字段 说明
code_str_arr 电子码字符串数组
content 电子码字符串
timestamp 电子码创建时间(毫秒时间戳)

# 错误码

名称 说明
20001 token 过期, 请获取新的用户有效凭证
20002 token 错误,请获取新的用户有效凭证
11101 用户已冻结
11102 用户在支付黑名单中
11103 用户身份已失效

离线码展示逻辑

  1. 拉取离线码 首先调用本接口拉取离线码,将 code_str_arr 数组持久化缓存到本地。
  2. 验证离线码 在用户无网络时,从缓存中取出离线码使用。使用之前需要校验码是否过期。 过滤掉 当前时间戳 - timestamp > 1000 * 3600 * 70 的离线码,剩下的为可用离线码,取出一个进行展示。 如果过滤后没有可用离线码,则显示网络错误。
  3. 展示离线码 在展示之前,需要将展示时间(当前时间戳)拼接到码字符串中。 假设当前时间为:2023-01-01 12:00:00 , 对应的秒级时间戳为: 1672545600 假设码字符串为:
http://wx.url.cn/v003.1010343033.jLGSQWX5QQOibcM_YJB9Ej8b8R4lipE8yuAwKV4A3X-
8Zx57gCl2obucs5TdYdy37HUStIkdL1IkxZ2NdVfr_YYOKL-cb16Nz7E3isirW4KbcbREvcEQ9kD1fFEwdrf-
nuBAq5ACbHY8BT8HrFahpVdNPyaLzWYNkqRzmBQUhWo

将当前时间戳 1672545600 转换为 36 进制字符串: rnsgg0 把码字符串用 . 分割得到:

http://wx
url
cn/v003
1010343033
jLGSQWX5QQOibcM_YJB9Ej8b8R4lipE8yuAwKV4A3X-
8Zx57gCl2obucs5TdYdy37HUStIkdL1IkxZ2NdVfr_YYOKL-cb16Nz7E3isirW4KbcbREvcEQ9kD1fFEwdrf-
nuBAq5ACbHY8BT8HrFahpVdNPyaLzWYNkqRzmBQUhWo

将 36 进制字符串拼接到最后一个元素的前面:

http://wx
url
cn/v003
1010343033
rnsgg0
jLGSQWX5QQOibcM_YJB9Ej8b8R4lipE8yuAwKV4A3X-
8Zx57gCl2obucs5TdYdy37HUStIkdL1IkxZ2NdVfr_YYOKL-cb16Nz7E3isirW4KbcbREvcEQ9kD1fFEwdrf-
nuBAq5ACbHY8BT8HrFahpVdNPyaLzWYNkqRzmBQUhWo

然后再用 . 拼接起来得到最终的码字符串:

http://wx.url.cn/v003.1010343033.rnsgg0.jLGSQWX5QQOibcM_YJB9Ej8b8R4lipE8yuAwKV4A3X-
8Zx57gCl2obucs5TdYdy37HUStIkdL1IkxZ2NdVfr_YYOKL-cb16Nz7E3isirW4KbcbREvcEQ9kD1fFEwdrf-
nuBAq5ACbHY8BT8HrFahpVdNPyaLzWYNkqRzmBQUhWo

机具解码时,会校验展示时间和码生成时间。展示时间有效期 10 分钟, 生成时间有效期 3 天。