用工关系

一、功能简介

用工关系功能,支持与微信小程序有用工关系的用户能与对应的微信小程序进行绑定。绑定后

  1. 微信小程序可以向已绑定的用户推送用工关系消息通知
  2. 绑定用户将能在微信「微信小程序助手」中接收用工关系消息通知

通过这个功能,确保微信小程序在用工场景下的关键业务信息高效触达。 image.png

二、功能详情

支持基础库版本:3.10.0以上
支持微信版本:8.0.62以上

1、开通功能

  • 此功能只支持非个人主体下的物流服务/医疗服务/政务民生/金融业/教育服务/交通服务/房地产服务/生活服务/IT科技/餐饮服务/旅游服务/商家自营/商业服务类目下的微信小程序

  • 这些类目下的,可登录微信公众平台,符合类目要求即可在侧边栏找到「用工关系」,点击开通,填写申请内容后,等待审核(审核时长平均<24h)。

2、新增用工消息模版

在微信公众平台开通了用工关系功能后,可以新增所需要的用工消息模版,模版审核通过后即可使用。 image.png

3、用工关系管理接口

  • 绑定用工关系接口:wx.bindEmployeeRelation
    开发者可以通过接口,给与微信小程序有用工关系的用户调用订阅弹窗,允许后的用户,可以在「微信小程序助手」插件中收到绑定系统消息。

  • 解绑接口:UnbindUserB2CAuthInfo
    开发者可以通过接口,直接解绑已与微信小程序有用工关系的用户,用户可以在「微信小程序助手」插件中收到解绑的系统消息。

  • 检查关系接口:wx.checkEmployeeRelation
    开发者可以通过接口,检查微信小程序用工关系功能和用户之间的绑定关系

4、用工消息订阅

拉起用工消息订阅有两个时机

  1. 在用户确认绑定用工关系后,可直接让用户订阅消息,详细可见技术文档wx. bindEmployeeRelation。
  2. 已绑定用工关系后,可调用接口让用户订阅消息,详细可见技术文档wx.requestSubscribeEmployeeMessage。

5、发送用工消息

在用户已绑定用工关系,且订阅了对应用工消息的前提下,开发者可以通过SendEmployeeRelationMsg 向用户发送用工消息。用户将在「微信小程序助手」中接收到对应的消息。

三、注意事项

务必确保正确使用该功能

  • 此功能仅支持微信小程序在用工场景下的消息传递诉求,若在开发者其他场景滥用,则功能会被回收。
  • 绑定关系弹窗和订阅消息弹窗都为强监控行为场景,请提前告知用工关系的用户,确保绑定弹窗的通过率。请勿给无用工关系的用户滥发消息,滥发会回收该功能。

微信小程序聊天工具模式开发指南Beta

一、功能介绍

聊天工具模式是为了帮助微信小程序更好与微信聊天结合而推出的模式,可用于实现群问卷、群拼单、群任务等功能。其与微信小程序普通模式相比开放更多与聊天紧密结合的能力:

  1. 聊天成员相关能力:开发者可调用聊天成员选择器并获取成员相关id,通过开放数据域渲染聊天成员的头像昵称
  2. 发送内容到聊天能力:开发者可发送文本、提醒、图片、表情、视频等内容类型到聊天中
  3. 动态消息能力:微信小程序卡片上的辅标题可以动态更新,在用户完成或参与了活动后下发系统消息

同时,聊天工具模式需要使用独立分包基于skyline开发,该分包也可被普通模式打开。开发者可通过「微信小程序示例-接口Tab-聊天工具」入口体验平台推出的Demo:

二、开发指南

从基础库 3.7.8 开始支持

支持平台:Android:微信8.0.56及以上版本iOS:微信8.0.56及以上版本

1. 聊天工具分包配置

开发者需要在微信小程序全局配置 (app.json)中声明 subPackageschatTools

  1. subPackages 为分包的基本配置,属性说明可参考分包结构配置
  2. chatTools 为聊天工具配置,类型为 Object[] ,字段包括:
属性 类型 必填 说明
root string 分包根目录
entryPagePath string 聊天工具启动路径
desc string 聊天工具描述
scopes string[] 分包中会使用的scope权限

注意事项

  1. desc字段请按照自己的功能设计填写,不得包含虚假或营销信息;scopes 字段请如实填写;否则将影响微信小程序审核的结果
  2. 开发者需保证分包的首页路径进入后可以使用聊天工具的完整功能,否则将影响微信小程序审核的结果
  3. 每个微信小程序目前仅支持配置一个聊天工具,后续可能放开
  4. 聊天工具的分包体积需不超过 500KB
  5. 聊天工具分包页需使用 skyline 渲染,若开发者未配置,微信会在预览或上传代码包时提示出错

配置示例:

{
  "subPackages": [
    {
      "root": "packageA",
      "name": "alias",
      "pages": ["pages/cat"],
      "independent": true,
      "entry": "index.js",
      "componentFramework": "glass-easel",
      "renderer": "skyline",
    },
  ],
  "chatTools": [{
    "root": "packageA",
    "entryPagePath": "x",
    "desc": "功能描述",
    "scopes": ["scope.userLocation"]
  }],
  "rendererOptions": {
    "skyline": {
      "disableABTest": true,
      "defaultDisplayBlock": true,
      "defaultContentBox": true,
      "tagNameStyleIsolation": "legacy",
      "sdkVersionBegin": "3.7.0",
      "sdkVersionEnd": "15.255.255"
    }
  }
}

2. 聊天工具模式的进入与退出

2.1 进入聊天模式

聊天工具模式在进入时需要绑定一个微信单聊或群聊的聊天室,目前有三种进入方式:

  1. 当微信小程序处于普通模式时,开发者调用 wx.openChatTool 但不传入聊天室id,微信会拉起聊天列表让用户选择,用户选择后绑定聊天室进入聊天工具模式
  2. 当微信小程序处于普通模式时,开发者调用 wx.openChatTool 并在接口中传入聊天室id(群聊为opengid,单聊为open_single_roomid),会直接绑定该聊天室进入
  3. 用户在聊天工具模式里发送各种类型内容到绑定的聊天后,当用户从同一个聊天的这些内容入口再次回到微信小程序中,会使用聊天工具模式打开,此时绑定的聊天不变

2.2 退出聊天模式

聊天工具目前有三种退出方式:

  1. 在聊天工具中回到非聊天工具分包页面中(包括用户自己触发返回、开发者调用 wx.navigateBackwx.switchTab ),会触发退出聊天工具模式
  2. 微信小程序 reLaunch 到普通页面(包括用户点击其他非聊天工具模式入口、开发者调用 wx.reLaunch 等),会触发退出聊天工具模式

注意:在聊天工具分包页,无法通过 wx.navigateTo 或者 wx.redirectTo 跳转到非聊天工具分包页。如需跳转,先通过 wx.navigateBack 退出当前聊天工具分包,再使用路由接口进行跳转。

2.3 聊天工具模式的判定

开发者可通过 wx.getApiCategory 中的 apiCategory字段是否为 chatTool,判断当前是否处于聊天工具模式。

3. 聊天成员相关能力

3.1 获取相关id接口

聊天工具模式下有以下3种id信息:

  1. opengid:微信群的唯一标识id
  2. open_single_roomid:单聊的唯一标识id
  3. group_openid:微信用户在此聊天室下的唯一标识,同一个用户在不同的聊天室下id不同

相关接口如下:

  1. wx.getGroupEnterInfo:进入聊天工具模式前,获取群聊id信息
  2. wx.getChatToolInfo:进入聊天工具模式后,获取群聊id信息

这两个接口的区别在于,在聊天工具分包页,推荐用 wx.getChatToolInfo 获取绑定群相关信息即可。在进入聊天工具分包页之前,例如从群聊会话卡片打开微信小程序,此时希望复用卡片所在的群聊,可通过 wx.getGroupEnterInfo 获取卡片所在群的 opengid, 并在 wx.openChatTool 时传入,此时可不唤起群选择列表,直接进入。

3.2 选择聊天成员接口

开发者可调用wx.selectGroupMembers让用户选择聊天室的成员,并返回选择成员的group_openid。需要注意的是,若当前聊天室为单聊,则直接返回对方用户的group_openid,不再拉起选择器。

3.3 渲染聊天成员的头像昵称

开发者可通过 open-data-listopen-data-item 渲染聊天成员的头像昵称

4. 发送到聊天能力

可将微信小程序卡片、提醒消息、文本、图片、表情、文件发送到聊天中,相关接口如下:

  1. wx.shareAppMessageToGroup:将微信小程序卡片发送到绑定的聊天室
  2. wx.notifyGroupMembers:提醒用户完成任务,发送的内容将由微信拼接为:@的成员列表+“请完成:”或“请参与:”+打开微信小程序的文字链,如「@alex @cindy 请完成:团建报名统计」
  3. form bind:submitToGroup="onSubmitToGroup"button form-type="submitToGroup":将输入框内的文本内容发送到绑定的聊天室
  4. wx.shareImageToGroup:将图片发送到绑定的聊天室
  5. wx.shareEmojiToGroup:将表情发送到绑定的聊天室
  6. wx.shareVideoToGroup:将视频发送到绑定的聊天室
  7. wx.shareFileToGroup:将文件发送到绑定的聊天室

5. 动态消息能力

从聊天模式中发送的微信小程序卡片,可以获得动态消息能力,该能力的用户表现包括:

  1. 微信小程序卡片上的辅标题可以动态更新
  2. 可以在聊天中下发系统消息,内容为:成员A+“完成了”或“参与了”+成员B+“发布的”+打开微信小程序的文字链,如「alex 完成了 cindy 发布的 团建报名统计」

该功能的开发步骤包括:

5.1 创建activity_id

服务端通过创建activity_id接口创建activity_id

5.2 声明分享卡片为动态消息

前端通过 wx.updateShareMenu 声明要分享的卡片为动态消息,请求参数如下:

注意事项:

  1. useForChatTooltrue 时,chooseTypeparticipant 才会生效
  2. chooseType = 1,表示按指定的 participant 当作参与者
  3. chooseType = 2,表示群内所有成员均为参与者(包括后加入群)

代码示例:

wx.updateShareMenu({
        withShareTicket: true,
        isUpdatableMessage: true,
        activityId: 'xxx',
        useForChatTool: true,
        chooseType: 1,
        participant: that.data.members,
        templateInfo: {
          templateId:    '4A68CBB88A92B0A9311848DBA1E94A199B166463'
        },
)

模版区别(target_state与participator_state含义见步骤3):

templateId 4A68CBB88A92B0A9311848DBA1E94A199B166463 2A84254B945674A2F88CE4970782C402795EB607
动态消息发布者在微信小程序卡片中看到的辅标题 target_state=1或2:X人已完成;target_state=3:已结束 target_state=1或2:X人已参与;target_state=3:已结束
参与者在微信小程序卡片中看到的辅标题 participator_state=0时:target_state=1:未完成,target_state=2:即将截止,target_state=3:已结束;participator_state=1时:target_state=1或2:已完成,target_state=3:已结束。 participator_state=0时:target_state=1:未参与,target_state=2:即将截止,target_state=3:已结束;participator_state=1时:target_state=1或2:已参与,target_state=3:已结束。
非参与者在微信小程序卡片中看到的辅标题 target_state=1或2:你无需完成;target_state=3:已结束 target_state=1或2:你无需参与;target_state=3:已结束
参与者变为完成态下发的系统消息文案 aaa 已完成 bbb 发布的 XXX aaa 已参与 bbb 发布的 XXX

5.3 更新活动状态或用户完成情况

服务端通过 setChatToolMsg 接口更新活动状态或用户完成情况。

也可通过云开发调用,接口名 chattoolmsg.send

调用示例:

//变更单个成员状态
{
    "activity_id": "xxx",
    "target_state":1,
    "version_type": 0,
    "participator_info_list": [
        {
            "group_openid": "aaa",
            "state": 1
        },
        {
            "group_openid": "bbb",
            "state": 1

        }
    ]
}
//变更动态消息状态
{
    "activity_id": "xxx",
    "target_state":3,
    "version_type": 0,
}

6. 聊天工具模式内禁用的能力

以下能力暂不支持聊天工具模式下使用,请开发者做好适配。

  1. 聊天工具模式禁用普通转发能力,请使用上文「发送到聊天能力开放」中的接口实现:button open-type=share 和 微信小程序右上角「…-发送给朋友」
  2. 聊天工具模式希望服务尽可能闭环在微信小程序中,外跳类接口暂不支持使用:
    • navigateToMiniProgram;
    • openEmbeddedMiniProgram;
    • openOfficialAccountArticle;
    • openChannelsUserProfile;
    • openChannelsLive;
    • openChannelsEvent;
    • openChannelsActivity。
  3. 聊天工具模式暂不支持广告:adad-custom

微信小程序聊天工具开放模式开发指南

一、功能介绍

聊天工具模式是为了帮助微信小程序更好与微信聊天结合而推出的模式,可用于实现群问卷、群拼单、群接龙等功能。其与微信小程序普通模式区别在于:

1.  开放更多与聊天紧密结合的能力:

能力 说明 图示
聊天成员相关能力 开发者可调用聊天成员选择器并获取成员相关id,通过open-data渲染聊天成员的头像昵称
发送内容到聊天能力 开发者可发送文本、提醒、图片、表情、视频等内容类型到聊天中
动态消息能力 微信小程序卡片上的辅标题可以动态更新,在用户完成/参与了活动后下发系统消息

支持有「交易保障」标识的微信小程序,或「社交」、「金融-证券/期货」、「金融-公募基金」、「金融-银行」类目的微信小程序申请相关接口权限。开发者需要登录微信小程序管理后台 ,在「管理-开发管理-其他接口-聊天工具」中申请获得接口权限,审核通过后可使用。

二、开发指南

从基础库 3.12.0 版本开始支持

支持平台:iOS 8.0.65 及以上版本;Android 8.0.65 及以上版本

1. 进入聊天工具模式

开发者调用 wx. enterChatToolMode 后,可选择在 chatToolRooms 传入 opengid 以进入聊天模式,并获得聊天成员相关接口的调用权限;如果未传入 opengid,则将拉起群聊选择器;

开发者可通过 wx.isChatTool 判断当前是否处于聊天工具模式;

聊天工具模式下应使用 group_openid 作为用户唯一标识。

1.1 wx.getGroupEnterInfo

功能描述:进入聊天工具模式前,获取群聊 id 信息

入参:

属性 类型 说明
allowSingleChat boolean 为 true 时才会返回单聊下的 open_single_roomid
needGroupOpenID boolean 为 true 时才会返回 group_openid

返回参数(数据加密返回,解密请参考:https://developers.weixin.qq.com/miniprogram/dev/api/open-api/group/wx.getGroupEnterInfo.html):

属性 类型 说明
opengid string 群聊唯一标识,绑定的聊天室为群聊时返回
open_single_roomid string 单聊唯一标识,绑定的聊天室为单聊时返回
group_openid string 当前微信用户在此聊天室下的唯一标识,同一个用户在不同的聊天室下id不同
chat_type number 微信聊天类型,1:微信联系人单聊;2:企业微信联系人单聊;3:普通微信群聊;4:企业微信互通群聊

1.2 wx.getChatToolInfo

功能描述:进入聊天工具模式后,获取群聊 id 信息

返回参数(数据加密返回,解密请参考:https://developers.weixin.qq.com/miniprogram/dev/api/open-api/group/wx.getGroupEnterInfo.html):

属性 类型 说明
opengid string 群聊唯一标识,绑定的聊天室为群聊时返回
open_single_roomid string 单聊唯一标识,绑定的聊天室为单聊时返回
group_openid string 当前微信用户在此聊天室下的唯一标识,同一个用户在不同的聊天室下id不同
chat_type number 微信聊天类型,1:微信联系人单聊;2:企业微信联系人单聊;3:普通微信群聊;4:企业微信互通群聊

1.3 wx.selectGroupMembers

功能描述:选择聊天室的成员,并返回选择成员的 group-openid。若当前为群聊,则会拉起成员选择器;若当前为单聊,则直接返回对方用户的 group-openid

请求参数:

属性 类型 必填 说明
maxSelectCount number 最多可选人数

返回参数:

属性 类型 说明
members string[] 所选用户在此聊天室下的唯一标识,同一个用户在不同的聊天室下 id 不同

1.4 <open-data-list> <open-data-item>

功能描述:用于渲染聊天成员的头像昵称

属性:

<open-data-list>

属性 类型 必填 说明
type string 渲染类型,固定为groupMembers
members string[] 需要展示的用户此聊天室下的唯一标识列表

<open-data-item>

属性 类型 必填 说明
type string 开放数据类型,userNickName:用户昵称;userAvatarUrl:用户头像

代码示例:

<open-data-list type="groupMembers" members="[groupOpenID1, groupOpenID2]">
  <view class="userinfo" slot:index>
    <open-data-item class="avatar " type="userAvatar" index="{{index}}" />     <open-data-item class="" type="userNickName" index="{{index}}" />
  </view>
</open-data-list>

2. 发送到聊天能力

可支持微信小程序卡片、提醒消息、文本、图片、表情、文件的发送,如果选择了多个群聊,单次仅支持将内容发送到特定的单个群聊中。

2.1 wx.shareAppMessageToGroup

功能描述:将微信小程序卡片发送到绑定的聊天室

请求参数:

属性 类型 必填 说明 默认值
title string 微信小程序卡片标题
opengid string 通过 wx.selectGroups 选择聊天后,opengid 为必填;通过wx.selectGroupMembers 选择单个聊天后,opengid 无需填写
path string 转发路径 聊天工具的 entryPagePath
imageUrl string 自定义图片路径,可以是本地文件路径、代码包文件路径或者网络图片路径。支持 PNG 及 JPG。显示图片长宽比是 5:4 使用默认截图

返回参数:

属性 类型 说明
errMsg string 错误信息

2.2 wx.notifyGroupMembers

功能描述:提醒用户完成任务,发送的内容将由微信拼接为:@的成员列表+“请完成:”/”请参与:”+打开微信小程序的文字链,如「@alex @cindy 请完成:团建报名统计」

请求参数:

属性 类型 必填 说明 默认值
title string 文字链标题
opengid string 通过 wx.selectGroups 选择聊天后,opengid 为必填;通过wx.selectGroupMembers 选择单个聊天后,opengid 无需填写
members string[] 需要提醒的用户 group-openid 列表
entrancePath string 文字链跳转路径
type string 展示的动词:participate:“请参与”;complete:“请完成”

返回参数:

属性 类型 说明
errMsg string 错误信息

2.3 form 组件

<form bind:submitToGroup="onSubmitToGroup"> <button form-type="submitToGroup">

功能描述:将输入框内的文本内容发送到绑定的聊天室,可携带返回聊天工具模式的微信小程序的小尾巴

属性:

<form>

属性 类型 必填 说明
bind:submitToGroup string 用户触发发送文本到聊天后会触发的事件

<button>

属性 类型 必填 说明 默认值
form-type string 需填入 submitToGroup,表示将文本发送到聊天
opengid string 通过 wx.selectGroups 选择聊天后,opengid 为必填;通过wx.selectGroupMembers 选择单个聊天后,opengid 无需填写
need-show-entrance boolean 是否在文本消息下展示进入微信小程序的小尾巴 true
entrance-path string 小尾巴跳转路径 聊天工具的 entryPagePath

2.4 wx.shareImageToGroup

功能描述:将图片发送到绑定的聊天室,可携带返回聊天工具模式的微信小程序的小尾巴

请求参数:

属性 类型 必填 说明 默认值
imagePath string 图片路径,可以是本地文件路径或临时路径
opengid string 通过 wx.selectGroups 选择聊天后,opengid 为必填;通过wx.selectGroupMembers 选择单个聊天后,opengid 无需填写
needShowEntrance string 是否在图片消息下展示进入微信小程序的小尾巴 true
entrancePath string 小尾巴跳转路径 聊天工具的 entryPagePath

返回参数:

属性 类型 说明
errMsg string 错误信息

2.5 wx.shareEmojiToGroup

功能描述:将表情发送到绑定的聊天室,可携带返回聊天工具模式的微信小程序的小尾巴

请求参数:

属性 类型 必填 说明 默认值
imagePath string 表情路径,可以是本地文件路径或临时路径
opengid string 通过 wx.selectGroups 选择聊天后,opengid 为必填;通过wx.selectGroupMembers 选择单个聊天后,opengid 无需填写
needShowEntrance string 是否在表情消息下展示进入微信小程序的小尾巴 true
entrancePath string 小尾巴跳转路径 聊天工具的 entryPagePath

返回参数:

属性 类型 说明
errMsg string 错误信息

2.6 wx.shareVideoToGroup

功能描述:将视频发送到绑定的聊天室,可携带返回聊天工具模式的微信小程序的小尾巴

请求参数:

属性 类型 必填 说明 默认值
videoPath string 视频路径,可以是本地文件路径或临时路径
opengid string 通过 wx.selectGroups 选择聊天后,opengid 为必填;通过 wx.selectGroupMembers 选择单个聊天后,opengid 无需填写
thumbPath string 缩略图路径,若留空则使用视频首帧
needShowEntrance string 是否在视频消息下展示进入微信小程序的小尾巴 true
entrancePath string 小尾巴跳转路径 聊天工具的 entryPagePath

返回参数:

属性 类型 说明
errMsg string 错误信息

2.7 wx.shareFileToGroup

功能描述:将文件发送到绑定的聊天室,可携带返回聊天工具模式的微信小程序的小尾巴

请求参数:

属性 类型 必填 说明 默认值
filePath string 文件路径,可以是本地文件路径或临时路径
opengid string 通过 wx.selectGroups 选择聊天后,opengid为必填;通过 wx.selectGroupMembers 选择单个聊天后,opengid 无需填写
needShowEntrance string 是否在文件消息下展示进入微信小程序的小尾巴 true
entrancePath string 小尾巴跳转路径 聊天工具的 entryPagePath

返回参数:

属性 类型 说明
errMsg string 错误信息

3. 动态消息能力

从聊天模式中发送的微信小程序卡片,可以获得动态消息能力,该能力的用户表现包括:

1.  微信小程序卡片上的辅标题可以动态更新

2.  可以在聊天中下发系统消息,内容为:成员A+“完成了”/“参与了”+成员B+“发布的”+打开微信小程序的文字链,如「alex 完成了 cindy 发布的 团建报名统计」

该功能的开发步骤包括:

1.  服务端通过创建activity_id接口创建 activity_id

2.  前端通过 wx.updateShareMenu 声明要分享的卡片为动态消息,请求参数如下:

属性 类型 必填 说明
withShareTicket boolean 是否使用带 shareTicket 的转发,固定为 true
isUpdatableMessage boolean 是否是动态消息,固定为 true
activityId string 动态消息的 activityId,通过步骤1中的接口获取
useForChatTool boolean 聊天工具模式特殊动态消息
chooseType number 指定成员的方式
participant string[] 需参与用户此聊天室下的唯一标识列表
templateInfo Object 动态消息的模板信息,固定为 {templateId: '4A68CBB88A92B0A9311848DBA1E94A199B166463'}{templateId: '2A84254B945674A2F88CE4970782C402795EB607'}

useForChatTool 为 true 时,chooseType 和 participant 才会生效

chooseType = 1,表示按指定的 participant 当作参与者

chooseType = 2,表示群内所有成员均为参与者(包括后加入群)

代码示例:

wx.updateShareMenu({
  withShareTicket: true,
  isUpdatableMessage: true,
  activityId: 'xxx',
  useForChatTool: true,
  chooseType: 1,
  participant: that.data.members,
  templateInfo: {
    templateId:  '4A68CBB88A92B0A9311848DBA1E94A199B166463'
  }
})

模版区别(target_state 与 participator_state 含义见步骤3):

templateId 4A68CBB88A92B0A9311848DBA1E94A199B166463 2A84254B945674A2F88CE4970782C402795EB607
动态消息发布者在微信小程序卡片中看到的辅标题 target_state=1或2:X人已完成

target_state=3:已结束
target_state=1或2:X人已参与

target_state=3:已结束
参与者在微信小程序卡片中看到的辅标题 participator_state=0时:

● target_state=1:未完成

● target_state=2:即将截止

● target_state=3:已结束

participator_state=1时:

● target_state=1或2:已完成

● target_state=3:已结束
participator_state=0时:

● target_state=1:未参与

● target_state=2:即将截止

● target_state=3:已结束

participator_state=1时:

● target_state=1或2:已参与

● target_state=3:已结束
非参与者在微信小程序卡片中看到的辅标题 target_state=1或2:你无需完成

target_state=3:已结束
target_state=1或2:你无需参与

target_state=3:已结束
参与者变为完成态下发的系统消息文案 aaa 已完成 bbb 发布的 XXX aaa 已参与 bbb 发布的 XXX

1.  服务端通过 setChatToolMsg 接口更新活动状态或用户完成情况,调用方式:

POST https://api.weixin.qq.com/cgi-bin/message/wxopen/chattoolmsg/send?access_token=ACCESS_TOKEN

也可通过云开发调用,接口名 chattoolmsg.send

请求参数:

属性 类型 必填 说明
access_token string 接口调用凭证
activity_id string 动态消息的 activityId,通过步骤1中的接口获取
target_state number 活动状态,初始值为1(表示开始收集态),此处可设置为2(即将截止态)、3(已结束态)
participator_info_list array 更新后的聊天室成员状态,当target_state=1时必填,target_state=2或3时无需填写
version_type number 系统消息文字链打开的微信小程序版本,0 正式版,1 开发版,2 体验版

participator_info_list参数如下:

属性 类型 必填 说明
group_openid string 聊天室成员在此聊天室下的唯一标识
state number 用户对卡片事件的完成状态。所有参与者的初始值为0(未完成态),此处仅支持设置为1,表示完成态。

调用示例:

//变更单个成员状态
{
  "activity_id": "xxx",
  "target_state":1,
  "version_type": 0,
  "participator_info_list": [
    {
      "group_openid": "aaa",
      "state": 1
    },
    {
      "group_openid": "bbb",
      "state": 1 
    }
  ]
}

//变更动态消息状态
{
  "activity_id": "xxx",
  "target_state":3,
  "version_type": 0,
}

4. 聊天工具模式内禁用的能力

以下能力暂不支持聊天工具模式下使用,请开发者做好适配

能力项 禁用说明
<button open-type=share> 聊天工具模式禁用普通转发能力,请使用上文「发送到聊天能力开放」中的接口实现
微信小程序右上角「…-发送给朋友」
navigateToMiniProgram 聊天工具模式希望服务尽可能闭环在微信小程序中,外跳类接口暂不支持使用
openEmbeddedMiniProgram
openOfficialAccountArticle
openChannelsUserProfile
openChannelsLive
openChannelsEvent
openChannelsActivity
ad 聊天工具模式暂不支持广告
ad-custom

聊天素材支持微信小程序打开

从基础库 2.14.3 开始支持

支持平台:iOS、Android

客户端版本:通过 webview 打开微信小程序需要升级到微信 7.0.22 及以上版本,通过文件和视频打开微信小程序需要升级到微信 8.0.0 及以上版本,通过图片打开微信小程序需要升级到微信 8.0.1 及以上版本

支持类型:仅微信小程序,小游戏暂不支持

功能介绍

在微信聊天中打开素材时,增加了使用微信小程序打开的入口。用户可以通过微信小程序处理聊天中的文件、图片、视频和 webview(包括公众号文章)。例如,用微信小程序将文件存储到网盘、给图片加滤镜、进行视频剪辑,或者将 webview/公众号文章保存到笔记等。目前,只有不带二维码的图片支持直接通过微信小程序打开。

当用户在微信聊天中打开素材时,如果微信小程序配置了支持打开该类型的素材并通过审核,并且用户曾经使用过该微信小程序,那么在打开该类型素材时,就会出现使用微信小程序打开的入口。

在 PC 端基础库大于 3.7.6 的环境下,用户可以通过拖入文件的方式来触发微信小程序打开。当拖入符合规则的文件后,框架侧将会重新启动(reLaunch)微信小程序。如果拖入不符合规则的文件,框架侧会提示用户该文件不支持。

使用说明

开发者需要在微信小程序的全局配置(app.json)中声明支持打开的文件类型,并且对一种文件类型只能声明一种处理方式。

{
    "supportedMaterials": [
        {
            "materialType": "text/html",
            "name": "用${nickname}打开",
            "desc": "描述",
            "path": "pages/index/"
        },
        {
            "materialType": "video/*",
            "name": "用${nickname}播放",
            "desc": "描述",
            "path": "pages/index/"
        },
        {
            "materialType": "video/mp4",
            "name": "用${nickname}播放",
            "desc": "描述",
            "path": "pages/index/"
        }
    ]
}
属性 类型 必填 描述
materialType String 支持文件类型的MimeType,音频和视频支持二级配置的通配模式,例如:video/*。如果通配模式配置和精确类型配置同时存在,则优先使用精确类型的配置(例如,video/*video/mp4同时存在时,会优先使用video/mp4的配置)。
name String 开发者配置的标题,在素材页面会展示该标题。配置中必须包含${nickname},代码包编译后会自动替换为微信小程序名称,如果声明了简称则会优先使用简称。除去${nickname},其余字数不得超过6个。
desc String 用途描述,会在推荐列表中展示该描述,限定字数不超过22个。
path String 在该场景下打开微信小程序时跳转的页面

最新客户端版本支持的MimeType类型:

MimeType 文件后缀 说明
video/* 视频类文件
audio/* 音频类文件
image/* 图片类文件
text/html webview(包括公众号文章)
text/plain .txt
application/* 通用文件配置
application/pdf .pdf
application/msword .doc
application/vnd.openxmlformats-officedocument.wordprocessingml.document .docx
application/vnd.ms-word.document.macroEnabled.12 .docm
application/vnd.ms-excel .xls
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet .xlsx
application/vnd.ms-excel.sheet.macroEnabled.12 .xlsm
application/vnd.ms-powerpoint .ppt
application/vnd.openxmlformats-officedocument.presentationml.presentation .pptx
application/zip .zip
application/vnd.rar .rar
application/x-7z-compressed .7z
application/x-photoshop .psd
application/acad .dwg
application/x-cdr .cdr
application/dxf .dxf
application/step .stp
application/rtf .rtf
application/postscript .ai

微信小程序启动参数

微信小程序的启动参数中,场景值为1173。在该场景下,启动参数和 query 同一级有一个数组forwardMaterials,代表转发的文件信息。数组中的每一个对象包含属性{type, name, path, size},分别代表文件类型、文件名、文件路径或 URL、文件大小。

发布

微信小程序提审时,会审核声明的supportedMaterials是否合规。微信小程序发布上线后,相应文件类型的打开入口才会出现微信小程序。

如果微信小程序实现的功能价值较低,将不会通过审核,包括但不限于以下情况:

  1. 打开微信小程序后的功能与对应的素材没有任何关系:只是通过这个入口打开了微信小程序,而没有对素材做任何处理。
  2. 打开微信小程序后处理素材的方式过于简单:比如只是播放视频或只是查看.docx文件等,这些通过微信聊天就能实现的简单功能。

请开发者结合自身微信小程序的功能与用户需求进行适配。

调试

体验版

体验版微信小程序支持单独配置supportedMaterials,与正式版的微信小程序配置相互独立。上述相应的入口微信小程序列表也会单独展示体验版微信小程序。

开发者工具

开发者可以在自定义编译模式下,通过场景值1173来调试该功能。

收藏

微信小程序菜单增加了收藏功能,你可以把某个页面收藏到收藏夹里。打开微信小程序右上角的胶囊按钮,点击收藏按钮后,会触发 Page.onAddToFavorites 事件。

微信小程序私密消息

功能介绍

微信小程序私密消息功能是这样一种能力:当分享者分享微信小程序卡片给其他用户或者微信群后,其他用户点击此微信小程序卡片时,开发者可以鉴别出点击卡片的用户是否被分享者分享过微信小程序卡片。

使用说明

1. 分享

创建业务活动后、分享微信小程序消息前,需要通过后台接口 createActivityId 创建activityId,建立一个activityId与一个业务活动id唯一关联。

然后通过 wx.updateShareMenu 接口声明本次分享的消息为私密消息,私密消息具有不可二次转发性。

声明完成后,可以通过右上角菜单、分享按钮组件、wx.shareAppMessage(仅小游戏)分享私密消息给个人、群聊。

场景一: 个人分享给个人

A –> B

场景二: 个人分享给群

A –> [B, C, D, E]

示例代码

wx.updateShareMenu({
  withShareTicket: true,
  isPrivateMessage: true,
  activityId: 'xxx',
})

2. 验证

从群聊、单聊消息卡片进入微信小程序时,通过 wx.authPrivateMessage 接口可以验证当前用户是否是私密消息的接收者,即验证这条消息是否是A直接转发给B或者A转发给B所在的群

该接口使用前,需要通过 wx.login() 接口登录微信小程序。

接口参数

参数 类型 说明
shareTicket string shareTicket

success回调

参数 类型 说明
valid Boolean 验证是否通过
iv String 加密算法的初始向量,详细见加密数据解密算法
encryptedData String 经过加密的activityId,解密后可得到原始的activityId。若解密后得到的activityId可以与开发者后台的活动id对应上则验证通过,否则表明valid字段不可靠(被篡改) 详细见加密数据解密算法

注意事项

  • 若返回的valid字段为false,表示此次验证不通过。
  • 若返回的valid字段为true,表示验证通过。但是为了安全起见,预防valid字段被篡改的可能,可以把encryptedDataiv传到开发者后台去解密。若解密后得到的activityId就是当前活动所对应的activityId 则验证通过,否则表示验证不通过。
  • 当私密消息分享给群时,是按鉴别时刻用户是否在群里作为判断。
  • activityId创建后7天内分享有效,120天内验证有效。

示例代码

wx.authPrivateMessage({
  shareTicket: 'xxxxxx',
  success(res) {
    console.log('authPrivateMessage success', res)
    // res
    // {
    //   errMsg: 'authPrivateMessage:ok'
    //   valid: true
    //   iv: 'xxxx',
    //   encryptedData: 'xxxxxx'
    // }
  },
  fail(res) {
    console.log('authPrivateMessage fail', res)
  }
})

动态消息

从基础库 2.4.0 开始,支持转发动态消息。动态消息对比普通消息,有以下特点:

  1. 消息发出去之后,开发者可以通过后台接口修改部分消息内容。
  2. 消息有对应的提醒按钮,用户点击提醒按钮可以订阅提醒,开发者可以通过后台修改消息状态并推送一次提醒消息给订阅了提醒的用户

消息属性

动态消息有状态、文字内容、文字颜色、系统消息提醒。

模板

动态消息目前有两个模板,应用于组队场景,分别以‘开始时’和‘到齐时’为状态变更和提醒节点。

变更和提醒节点 模板ID
开始时 21B034D08C5615B9889CE362BB957B1EE69A584B
到齐时 666F374D69D16C932E45D7E7D9F10CEF6177F5F5

状态

每个模板有三个状态,分别有其对应的文字内容和颜色。其中状态 0 可以转移到状态 0 和 1 和 2,状态 1 可以转移到状态 2,状态 2 不可以转移。

‘开始时’

状态 文字内容 颜色 允许转移的状态
0 “成员正在加入,当前 {member_count}/{room_limit} 人” #10AEFF 0, 1, 2
1 “已开始” #07C160 2
2 “已结束” #CCCCCC

‘成员到齐时’

状态 文字内容 颜色 允许转移的状态
0 “成员正在加入,当前 {member_count}/{room_limit} 人” #10AEFF 0, 1, 2
1 “已到齐” #07C160 2
2 “已结束” #CCCCCC

保持状态 0 无数据传入或状态 1 24h后自动进入状态 2。

状态参数

每个状态转移的时候可以携带参数,具体参数说明如下。

参数 类型 说明
member_count string 状态 0 时有效,文字内容模板中 member_count 的值
room_limit string 状态 0 时有效,文字内容模板中 room_limit 的值
path string 状态 1 时有效,点击「进入」启动微信小程序时使用的路径。对于小游戏,没有页面的概念,可以用于传递查询字符串(query),如 "?foo=bar"
version_type string 状态 1 时有效,点击「进入」启动微信小程序时使用的版本。有效参数值为:develop(开发版),trial(体验版),release(正式版)

系统消息

用户点击含动态消息的卡片退出微信小程序后会下发系统消息,状态转移的时候会变更系统消息内容或下发新的系统消息,具体的消息内容如下。

模板 内容
开始时 1.开始时,请提醒我 2.开始时,将收到提醒 3.已开始,进入“微信小程序”
到齐时 1.成员到齐时,请提醒我 2.成员到齐时,将收到提醒 3.成员已到齐,进入“微信小程序

使用方法

一、创建 activity_id

每条动态消息可以理解为一个活动,活动发起前需要通过 createActivityId 接口创建 activity_id。后续转发动态消息以及更新动态消息都需要传入这个 activity_id

二、在转发之前声明消息类型为动态消息

通过调用 wx.updateShareMenu 接口,传入 isUpdatableMessage: true,以及 templateInfoactivityId 参数。其中 activityId 从步骤一中获得。

wx.updateShareMenu({
  withShareTicket: true,
  isUpdatableMessage: true,
  activityId: '', // 活动 ID
  templateInfo: {
    parameterList: [{
      name: 'member_count',
      value: '1'
    }, {
      name: 'room_limit',
      value: '3'
    }]
    templateId: '21B034D08C5615B9889CE362BB957B1EE69A584B'
  }
})

三、修改动态消息内容

动态消息发出去之后,可以通过 setUpdatableMsg 修改消息内容。

低版本兼容

对于不支持动态消息的客户端版本,收到动态消息后会展示成普通消息

转发

获取更多转发信息

通常开发者希望转发出去的微信小程序被二次打开的时候能够获取到一些信息,例如群的标识。现在通过调用 wx.showShareMenu 并且设置 withShareTickettrue ,当用户将微信小程序转发到任一群聊之后,此转发卡片在群聊中被其他用户打开时,可以在 App.onLaunch 或 App.onShow 获取到一个 shareTicket。通过调用 wx.getShareInfo 接口传入此 shareTicket 可以获取到转发信息。

页面内发起转发

基础库 1.2.0 开始支持,低版本需做兼容处理。

通过给 button 组件设置属性 open-type="share",可以在用户点击按钮后触发 Page.onShareAppMessage 事件,相关组件:button。

使用指引

转发按钮,旨在帮助用户更流畅地与好友分享内容和服务。转发,应是用户自发的行为,且在需要时触手可及。开发者在使用时若遵从以下指引,会得到更佳的用户体验。

  1. 含义清晰:明确、一目了然的图形按钮,将为用户减少理解的时间。在我们的资源下载中心,你可以找到这样的按钮素材并直接使用。或者你可以根据自己业务的设计风格,灵活设计含义清晰的按钮的样式。当然,你也可以直接使用带文案的按钮,“转发给好友”,它也足够明确。
  2. 方便点击:按钮点击热区不宜过小,亦不宜过大。同时,转发按钮与其他按钮一样,热区也不宜过密,以免用户误操作。
  3. 按需出现:并非所有页面都适合放置转发按钮,涉及用户隐私的非公开内容,或可能打断用户完成当前操作体验的场景,该功能并不推荐使用。同时,由于转发过程中,我们将截取用户屏幕图像作为配图,因此,需要注意帮助用户屏蔽个人信息。
  4. 尊重意愿:理所当然,并非所有的用户,都喜欢与朋友分享你的微信小程序。因此,它不应该成为一个诱导或强制行为,如转发后才能解锁某项功能等。请注意,这类做法不仅不被推荐,还可能违反我们的《运营规范》,我们强烈建议你在使用前阅读这部分内容。

以上,我们陈列了最重要的几点,如果你有时间,可以完整浏览《设计指南》,相信会有更多的收获。

注意事项

  1. 不自定义转发图片的情况下,默认会取当前页面,从顶部开始,高度为 80% 屏幕宽度的图像作为转发图片。
  2. 转发的调试支持请查看 普通转发的调试支持 和 带 shareTicket 的转发
  3. 转发非私密消息时,只有转发到群聊中打开才可以获取到 shareTicket 返回值,单聊没有 shareTicket。转发私密消息时,群聊和单聊都可获取到 shareTicket。私密消息详见 私密消息使用指南
  4. shareTicket 仅在当前微信小程序生命周期内有效
  5. 由于策略变动,微信小程序群相关能力进行调整,开发者可先使用 wx.getShareInfo 接口中的群 ID 进行功能开发。
  6. 微信7.0.12开始,支持群主转发微信小程序时同时把消息设为该群的群待办消息,群待办消息会以气泡形式出现在聊天窗口底部。默认每次转发一个群待办消息,都会生成一个待办消息气泡。通过 wx.updateShareMenu 接口修改toDoActivityId属性可以把多个待办消息聚合为同一个,即转发相同toDoActivityId的群待办消息,只会出现一个待办消息气泡。toDoActivityId需要在转发前通过 updatableMessage.createActivityId 接口创建。

分享到朋友圈

从基础库 2.11.3 开始支持

支持平台:AndroidiOS:微信8.0.24及以上版本

可以将微信小程序页面分享到朋友圈。这适合内容型的页面分享,不适合有太多交互的页面分享。

设置分享状态

微信小程序页面默认不能分享到朋友圈,开发者需要主动设置“分享到朋友圈”。要让页面允许分享到朋友圈,需要满足两个条件:

  1. 首先,页面需要设置允许“发送给朋友”。具体可以参考 Page.onShareAppMessage 接口文档
  2. 满足条件 1 后,页面需要设置允许“分享到朋友圈”,同时可以自定义标题、分享图片等。具体可以参考 Page.onShareTimeline 接口文档

满足上面两个条件的页面,就可以被分享到朋友圈了。

单页模式

用户在朋友圈打开分享的微信小程序页面时,并不会真正打开微信小程序,而是进入一个“微信小程序单页模式”的页面。“单页模式”有以下特点:

  1. 在“单页模式”下,页面顶部固定有一个导航栏,标题显示为当前页面 JSON 配置的标题。底部固定有一个操作栏,点击操作栏的“前往微信小程序”可以打开微信小程序的当前页面。顶部导航栏和底部操作栏都不支持自定义样式。
  2. “单页模式”默认运行的是微信小程序页面内容,但由于页面固定有顶部导航栏和底部操作栏,很可能会影响微信小程序页面的布局。因此,请开发者特别注意适配“单页模式”的页面交互,以实现流畅完整的交互体验。
  3. 在“单页模式”下,一些组件或接口会有一定限制,详情见下文单页模式下的限制章节

avatar

页面适配

可以通过判断场景值等于 1154 的方法来进行页面适配。另外,在单页模式下,可以设置顶部导航栏与页面的相交状态,具体参考 navigationBarFit 配置。

还需要注意的是,在单页模式下,wx.getSystemInfo 接口返回的 safeArea 是整个屏幕空间。

单页模式下的限制

微信小程序“单页模式”适用于纯内容展示场景,能实现的交互和接口能力有限,因此存在以下限制:

  1. 页面没有登录态,与登录相关的接口,如 wx.login 都不可用;云开发资源需要开启未登录访问才能在单页模式下使用,详见未登录模式
  2. 不允许跳转到其他页面,包括任何跳转微信小程序页面、跳转其他微信小程序、跳转微信原生页面
  3. 不允许横屏使用
  4. 如果页面包含 tabBar,tabBar 不会渲染,包括自定义 tabBar
  5. 本地存储与微信小程序普通模式不共用

对于一些会产生交互的组件或接口,在点击后调用时,会弹出 toast 提示“请前往微信小程序使用完整服务”。为了获得良好的用户体验,请注意适配单页模式的接口能力,不要大量使用被禁用的接口或组件。

禁用能力列表:

分类 功能点
组件 button open-type 、 camera 、 editor 、 form 、 functional-page-navigator 、 live-pusher 、 navigator 、 navigation-bar 、 official-account 、 open-data 、 web-view
路由 wx.redirectTo 、 wx.reLaunch 、 wx.navigateTo 、 wx.switchTab 、 wx.navigateBack
界面 导航栏 、 Tab Bar
网络 mDNS 、 UDP 通信
数据缓存 周期性更新
媒体 VoIP 、 wx.chooseMedia 、 wx.chooseImage 、 wx.saveImageToPhotosAlbum 、 wx.chooseVideo 、 wx.saveVideoToPhotosAlbum 、 wx.getVideoInfo 、 wx.compressVideo
位置 wx.openLocation 、 wx.chooseLocation 、 wx.startLocationUpdateBackground 、 wx.startLocationUpdate
转发 wx.getShareInfo 、 wx.showShareMenu 、 wx.hideShareMenu 、 wx.updateShareMenu
文件 wx.openDocument
开放接口 登录 、 微信小程序跳转 、 用户信息 、 支付 、 授权 、 设置 、 收货地址 、 卡券 、 发票 、 生物认证 、 微信运动 、 微信红包
设备 蓝牙 、 iBeacon 、 Wi-Fi 、 NFC 、 联系人 、 剪贴板 、 电话 、 扫码
广告 ad 、 wx.createRewardedVideoAd 、 wx.createInterstitialAd

运营须知

分享朋友圈功能是为了满足纯内容场景的分享需求,如果滥用于营销、诱导等行为,将会被打击。

  1. 微信小程序提供的服务中,不得存在滥用分享的违规行为。例如强制用户分享的行为;分享后立即获得利益的诱导行为;以及通过明示或暗示的样式来达到诱导分享目的的行为等。详见《微信小程序平台运营规范》
  2. 在“单页模式”下,不得诱导或强制用户点击“打开微信小程序”,应该在“单页模式”中尽可能呈现完整的内容

注意事项

  1. 在低版本微信客户端打开时,会进入一个升级提示页面
  2. 不支持在微信小程序页面内直接发起分享
  3. 自定义分享内容时不支持自定义页面路径
  4. 存在 web-view 组件的页面不支持发起分享
  5. 支持打开开发版、体验版,没有权限的人员进入时页面会提示无权限

账户卡片

一、功能介绍

为了方便用户查看、操作自己在微信小程序中的资金类账户,一键触达微信小程序,微信在「发现-微信小程序」入口新增「我的账户」板块。

具体功能示意图如下:

二、功能介绍

支持微信版本:8.0.41 for Android 及以上;8.0.46 for ios及以上

支持基础库版本:3.1.1 及以上

1. 开通功能

开发者首先需要明确自己的服务业态,当前账户卡片支持的业态包括:

卡片id 卡片名称 类目要求 使用场景 展示字段
5001 基金账户 金融业-公募基金、私募基金 向用户展示资产、收益情况等信息 总资产、昨日收益
5002 电信账户 IT科技-基础电信运营商、电信业务代理商 向用户展示话费余额、剩余流量等信息 话费余额、流量余额
5003 信用卡账户 金融业-银行、信用卡 向用户账单、可用额度、还款日等信息 账单剩余应还、可用额度、还款日
5004 贷款账户 金融业-银行、消费金融、非金融机构自营小额贷款、贷款信息服务 向用户展示本期账单、总计应还,还款日等信息 本期应还、总计应还、还款日
5005 个人养老金卡片账户 金融业-银行、金融业-信用卡 向用户展示养老金资产、收益情况等信息 总资产、昨日收益
5006 保险卡片 金融业-保险、第三方互联网保险 向用户展示已购买保险名称、保险状态、有限期 保险名、是否生效、保险日期
5007 证券卡片 金融业-证券/期货、证券/期货投资资讯、股票信息平台、股票信息服务平台(港股/美股) 向用户展示已购买总资产、今日盈亏、证券名称 总资产、今日盈亏

登录微信公众平台 ,符合类目要求即可在开发管理-其他接口找到「发现页账户卡片」,点击开通,即可开通该功能开发权限

2. 在代码包中创建卡片分包

账户卡片为微信小程序代码包中的独立组件分包。为保证 UI 统一,微信侧会提供不同类型的账户卡片模板,页面样式( WXML 与 WXSS )是由微信提供的固定的代码,JS 逻辑由开发者控制,包括数据请求、渲染、缓存等。

开发者需使用微信开发者工具开发版 Nightly Build 1.06.2309062及以上版本进行创建。具体步骤如下:

2.1 创建分包目录 accountCardPackage

  1. 在 app.json 中开启微信小程序「按需注入」特性(lazyCodeLoading)、声明一个独立分包 accountCardPackage 并进行配置:
{
  // app.json
  // ...
  "lazyCodeLoading": "requiredComponents",
  "subpackages": [
    {
      "root": "accountCardPackage",
      "pages": [],
      "independent": true
    }
  ],
  "accountCardPackage": {
    "root": "accountCardPackage",
    "cardList": []
  }
}

  1. 在accountCardPackage 分包目录中右键,点击新建卡片,输入组件名后创建(图为示例,所有类型卡片都从该入口新建)
  1. 完成以上步骤后,可在 accountCardPackage 目录下看到创建好的卡片,同时 app.json 中也会出现相关配置

注意事项:

  1. 一个微信小程序若符合对应卡片类目要求,可以接入多个不同类型的卡片,但是同一类型的卡片只能接入一个。
  2. 卡片分包的目录结构取决于卡片被添加时的 app.json 的配置,卡片一旦被普通用户添加过,就不能再改动其目录结构,否则已添加过的用户就无法正常使用卡片。
  3. 卡片是运行在一个独立的环境中,卡片之间相互隔离。用户提供的卡片组件在渲染时,其 wxmlwxssjson 会被替换成固定模板,只有开发者的 js 代码会被注入执行。

2.2 实现卡片JS逻辑

创建卡片分包后,开发者可在js文件中实现卡片组件逻辑,包括获取登录态、请求数据、加解密数据等。一个卡片组件逻辑示例如下:

// 以 5001 为例
Component({
  data: {
    totalAmount: 0,
    yesterdayEarnings: 0,
  },
  lifetimes: {
    attached() {
      // 更新卡片数据
      this.setData({
        totalAmount: 6000000,
        yesterdayEarnings: 10000,
      })
      // 数据已准备完毕,通知嵌入卡片方
      this.updateStatus('loaded')
    },
  },
})

具体实现步骤如下:

  1. 设置卡片展示的变量信息。由于WXML文件不支持开发者自定义,因此每种卡片支持显示的字段由平台定义,开发者实现获取与加密逻辑后通过 setData 变更变量信息。不同卡片类型支持的变量信息通过可参考下表:
卡片id 卡片名称 字段 描述 是否可隐藏
5001 基金账户 totalAmount 总资产,单位为分
yesterdayEarnings 昨日收益,单位为分
5002 电信账户 telephoneBalance 话费余额,单位为分
residualData 剩余流量,单位为 MB
5003 信用卡账户 remainingRepayment 本期账单剩余应还款金额,单位为分
availableCreditLimit 信用卡可用额度,单位为分
dueDateMonth 还款日期中的月
dueDateDay 还款日期中的日
cardNumber 卡片尾号,仅展示后四位,默认不显示
pendingRepayCardCnt (多卡情况)共有多少张卡,默认不展示
allCardsEnterPath (多卡情况)若调用了“pendingRepayCardCnt”,则需设置多卡显示区域设置对应的跳转路径
5004 贷款账户 currentRepayment 本期账单剩余应还款金额,单位为分
totalDebt 贷款总计应还金额,单位为分
dueDateMonth 还款日期中的月
dueDateDay 还款日期中的日
cardNumber 卡片尾号,仅展示后四位,默认不显示
loanAccountCardCnt (多卡情况)共x个贷款账户代还,默认不展示
allCardsEnterPath (多卡情况)若调用了“loanAccountCardCnt”,则需设置多卡显示区域设置对应的跳转路径,必填
5005 个人养老金账户 totalAmount 总资产,单位为分
yesterdayEarnings 昨日收益,单位为分
cardNumber 卡片尾号,仅展示后四位,默认不显示
pensionAccountCnt (多卡情况)共x个养老金账户,默认不展示
allCardsEnterPath (多卡情况)若调用了“pensionAccountCnt”,则需设置多卡显示区域设置对应的跳转路径,必填
5006 保险账户 insurance_name 保险名称
insurance_status 分为三种状态:1 未生效 2 生效中 3 已过期
start_date 时间戳,保险开始日期
end_date 时间戳,保险结束日期
cardNumber 卡片尾号,仅展示后四位,默认不显示
insuranceAccountCnt (多卡情况)共x个保险,默认不展示
allCardsEnterPath (多卡情况)若调用了“insuranceAccountCnt”,则需设置多卡显示区域设置对应的跳转路径,必填
5007 证券账户 totalAmount 总资产,单位为分
todayEarnings 今日盈亏,单位为分
securitiesName 证券名称,默认不显示
securitiesCnt (多证券情况)全部x个证券账户,默认不展示
allSecuritiesEnterPath (多卡情况)若调用了“securitiesCnt”,则需设置多卡显示区域设置对应的跳转路径
  1. 更新卡片状态。为了满足不同情况下的展示需求,卡片本身是有状态的,开发者可以根据需要,通过组件的 updateStatus 接口来更新状态。目前支持的状态和变更状态的方法如下:
// 目前支持四种状态:loading、loaded、nologin,默认为 loading 态
this.updateStatus('loading') // 数据准备中,卡片会显示 loading 动画
this.updateStatus('loaded') // 数据准备完毕,卡片会正常显示
this.updateStatus('nologin') // 需要用户进入微信小程序登录,卡片会展示引导文案
this.updateStatus('error') //卡片状态异常,需要用户进入微信小程序检查卡片状态,卡片会展示引导文案
  1. 更新卡片点击跳转路径。卡片被点击时,默认是跳转到微信小程序首页,如果需要跳转到其他路径,可以通过组件的 updateEnterPath 接口来调整点击跳转路径:
this.updateEnterPath('pages/other/index')
  1. 隐藏/显示部分字段。由于业务原因,部分字段无法展示,开发者可以隐藏或显示该字段,具体方法为:
this.showField('cardNumber')
this.hideField('remainingRepayment')

其中,需要注意的是,像5003/5004卡片有可隐藏日期的能力,需要隐藏整个日期字段

this.hideField('dueDate')
  1. 开发业务逻辑。目前在卡片组件内仅支持以下 wx 接口,开发者可以通过以下接口实现业务逻辑:
  • wx.login
  • wx.checkSession
  • wx.getStorage
  • wx.setStorage
  • wx.batchGetStorage
  • wx.batchSetStorage
  • wx.getStorageInfo
  • wx.removeStorage
  • wx.clearStorage
  • wx.request
  • wx.getUserCryptoManager (基础库 3.3.3 版本开始支持)
  • wx.cloud.init (基础库 3.3.3 版本开始支持)
  • wx.cloud.callFunction (基础库 3.3.3 版本开始支持))

注意事项:

  1. wx 接口调用上下文与卡片所属微信小程序一致,也就是说,在卡片中调用 wx 接口和在微信小程序中调用效果是一样的
  2. 卡片通过 wx.setStorage 或 wx.batchSetStorage 写入的数据,不建议微信小程序侧直接依赖,因为微信小程序侧存在一层读缓存,可能读取不到最新写入的数据

3. 调试逻辑

  1. 开发过程中,开发者可以进入「账户详情页」,长按导航栏中的“账户”二字,打开调试面板:
  1. 只有体验版卡片支持输出内容到调试面板,如果列表中没有体验版卡片,调试面板就无法打开。开发者可以调用卡片组件的 debugLog 接口输出内容到调试面板中:
// 输出内容到调试面板上
// 目前只支持 String、Number、Boolean 等基本类型,Object 等类型则需要开发者自行进行序列化处理
if (this.debugLog) this.debugLog('str1', 'str2', 123, false, ...)
  1. 支持云函数,基础库版本需要3.3.3以上:示例
Component({
  data: {
    totalAmount: 0,
    yesterdayEarnings: 0,
  },

  lifetimes: {
    created() {
      if (wx.cloud) {
        wx.cloud.init({
          env: 'xxxx', // 换成真实的云环境
          traceUser: true,
        })
      }
    },

    attached() {
      this.setData({
        totalAmount: 6000000,
        yesterdayEarnings: 10000,
      })
      this.updateStatus('loaded')

      if (wx.cloud) {
        // promise 形式
        wx.cloud.callFunction({
          name: 'xxx', // 换成真实的云函数
          data: {},
        }).then(res => {
          console.log('[Cloud Function Call Success] Result:', res)
        }).catch(err => {
          console.log('[Cloud Function Call Failure] Error Message:', err)
        })

        // callback 形式
        wx.cloud.callFunction({
          name: 'xxx', // 换成真实的云函数
          data: {},
          success: res => {
            console.log('[Cloud Function Call Success] Result:', res)
          },
          fail: err => {
            console.log('[Cloud Function Call Failure] Error Message:', err)
          },
        })
      }
    },
  },
})

注意事项:

  1. 卡片组件内支持组件基础生命周期(如 created、attached 等)和页面生命周期 show 和 hide,但不支持像 selectorQuery 这样的接口,所以开发者的代码逻辑中只需要关心数据即可。
  2. 卡片组件内不支持使用 setTimeout、setInterval 等定时器。
  3. 在卡片隐藏阶段不允许调用 wx 接口。

4. 向用户添加卡片

  1. 卡片准备完成后,需要通过 addAccountCard 接口让用户主动触发添加卡片:
wx.addAccountCard({
  type: 5001, // 卡片类型
  success(res) {
    console.log(res)
  },
})

以下情况会导致用户添加失败:

  • 用户已经添加过该微信小程序同一类型的卡片
  • 用户添加过,但后续从「发现-微信小程序」中删除了卡片
  • 用户添加过,但后续从「微信小程序右上角“…”-设置」中关闭了展示开关
  • 用户当前微信版本不支持此功能(需为8.0.41 for Android 及以上或8.0.46 for iOS及以上)

1.开发者可以提前通过 checkAccountCardAddState 检测卡片是否可添加、是否已添加:

wx.checkAccountCardAddState({
  type: 5001, // 卡片类型
  success(res) {
    // res.couldAdd - 当前是否可以调用接口添加
    // res.hasAdded - 当前是否已添加对应卡片组件
    console.log(res)
  },
})

返回的结果对应的情况:

状态描述 couldAdd hasAdded
正常添加,并且开启 true true
正常添加,手动在设置里关闭了卡片/在发现页账户里删除了卡片 false false
正常添加,又完全删除了微信小程序(在最近使用删除) true false
未添加过,且符合类目要求,已经开通权限的微信小程序 true false

注意事项:

  1. wx.addAccountCard 必须在触发点击行为后才可以调用。
  2. wx.addAccountCard 当前仅支持在体验版或正式版微信小程序中调用。
  3. 不支持重复添加同一张卡片。如果当前用户已经添加了卡片,必须先删除微信小程序后才可以触发添加。
  4. 目前 wx.addAccountCard 仅支持在体验版或正式版调用。如果在体验版调用,那么发现页就会拉取体验版的卡片组件分包进行展示,如果此时要重新添加正式版卡片,需要先删除体验版微信小程序,反之同理。

5. 用户取消卡片展示

用户有2个方式取消展示:

  • 在微信小程序的设置中关闭对应卡片的开关
  • 在「发现-微信小程序」中的账户卡片中长按可展示「删除卡片」入口,用户点击后可删除卡片的展示

注意事项:

  • 若用户直接从「最近使用」中删除微信小程序,则会同步完全删除账户卡片。若想重新展示账户卡片,用户需要重新添加。