目录
企业微信从3.1.8版本开始,支持将网页或小程序转发时设置为私密消息。当企业成员将网页或小程序分享给其他成员或群聊后,其他成员打开网页或小程序时,开发者可判断当前用户是否为消息的直接接收人。同时,私密消息具有不可二次转发性,即在3.1.8及以后的版本,私密消息没有转发入口。企业微信的私密消息与微信小程序私密消息类似,不过有几个差异点:
在用户分享网页或小程序前,先调用setShareAttr,将本页面的转发声明为shareticket消息。声明之后,该页面被转发之后都有shareticket属性,转发途径包括:右上角菜单、调用shareAppMessage接口、聊天附件栏页面的底部“发送”按钮、聊天附件栏或聊天工具栏调用sendChatMessage接口等。
场景一: 个人分享给个人
A --> B
场景二: 个人分享给群
A --> [B, C, D, E]
注意:分享之后,被移出群的成员将不再有该shareticket消息的访问权限,而后来进群的成员则自动拥有了访问权限。
带有shareticket的消息卡片,用户打开网页或小程序,开发者调用getContext时,可以得到shareticket。再根据shareticket调用getShareInfo,如果当前用户是消息的直接接收者,则企业微信会返回加密的encryptedData,如果不是直接接收者,则接口会返回错误。
调用setShareAttr时,可以传一个state参数,该参数值由开发者自由指定。shareticket消息分享之后,当接收者打开消息的H5页面或小程序时,开发者调用getShareInfo,企业微信会将state值加密返回,开发者可在后台解密并加以校验。
用户进入网页时,网页通过oauth2可获得用户的userid(第三方应用可获得open_userid)。调用getShareInfo时,企业微信会将当前用户的userid或open_userid通过curReceiver加密在encryptedData里返回。
为了避免encryptedData被重放攻击,我们建议开发者检查curReceiver与oauth2获得的userid(或open_userid)是否一致。
在企业微信的旧版本里,shareticket消息是可以长按转发到其他会话里的,所以开发者一定要通过getShareInfo的返回值来检查当前用户是否消息的直接接收者。
企业微信的shareticket属性不支持同步到微信,当shareticket消息分享到包含微信用户的会话中,用户在微信打开时是没法获取到shareticket的。