在微信小程序中获取微信群 ID
发布:2018-04-18 10:33浏览:
次来源:网络 作者:cola
来自公众号:知晓程序
根据官方文档,我们可以通过以下两个方式,读取到微信群 ID 的信息:
首先,我们来聊聊用户成功地将小程序页面分享到微信群的情况下,如何读取目标微信群的 ID。
此次接口更新,控制小程序页面右上角菜单中的「分享」按钮显示与消失,不再完全依赖页面逻辑文件中是否拥有 onShareAppMessage 函数。
现在有两个新的接口,可以决定小程序是否显示分享菜单:wx.showShareMenu(显示分享菜单)和 wx.hideShareMenu(隐藏分享菜单)。
在 wx.showShareMenu 接口中,设定 withShareTicket: true,即可在用户分享时,获取到shareTickets。
同时,在此次接口更新中,微信为小程序更新了 onShareAppMessage 接口。
原本这个接口的 return 只能接受 title、path 等控制分享卡片内容的参数。在此次更新后,return 可以在分享成功、失败、完成(成功和失败)下,执行特定的回调函数。
在回调函数中,我们可以插入参数,以便小程序将微信群信息传入。小程序在检测到用户分享动作之后,会将 shareTicket 带入到这个参数中,并执行相应回调函数。
接下来,是通过微信群进入小程序情景下的微信群 ID 获取。
用户进入小程序时,小程序可以在 app 对象中的 onLaunch 生命周期函数中,获取到进入小程序的渠道(情景值)。
当情景值为 1044,即通过带 shareTicket 的微信群分享卡片进入小程序,小程序就可以额外获取到 shareTicket。
有了 shareTicket,我们就可以通过调用 wx.getShareInfo 函数,获取到目标微信群(加密过后的)ID 了。
需要注意的是,如果当前用户未登录(从未调用 wx.login 或 session 过期),这些接口都会出现调用失败的情况。
另外,当分享失败或数据获取失败,这些函数只会调用 fail(失败)和 complete(完成)回调,而不会调用 success(成功)回调。
建议直接使用 complete 回调,并通过数据包中的错误码,判断接口是否成功调用,以免出现调用失败时小程序无相应反应的情况。
为了便于开发,微信很贴心地在开发者工具中加入了分享接口调试功能。下面,就来告诉你,调试分享接口的具体方法。
在目标页面中,点击右上角的「更多」按钮,再点击「转发」。这时候,页面会变成「发送给好友」,里面有开发者工具提供的 9 个模拟群,任君选择。
随意点击一个群,进行模拟分享动作,小程序就可以获取到模拟群的加密数据。
点击左侧「编译」按钮下方的「自定义编译」按钮,在「设置应用的进入场景」,选择「1044:微信群会话中的小程序消息卡片(带 shareTicket)」。
选择场景之后,对话框下方会多出「选择进入的群」。随便选择一个测试群,再点击确定,你就可以开始调试了。
如果你利用 wx.getShareInfo 接口,调试出的结果是这样,那么恭喜你,你的代码没毛病,可以直接进入下一个步骤——数据解码。
为了保证用户隐私安全,微信特意将微信群 ID 进行了非常复杂的加密。当加密数据直接发到服务器后,服务器还需要再进行一步解码,才能正常使用微信群信息。
如果你之前做过小程序中用户数据的解码,那么你可以将同样的代码套用到解码微信群数据上,因为二者的加密算法是一模一样的。
如果你没有做过类似的解码工作,也不用担心,微信提供了包括 PHP、Node.js 等环境下的解码 demo 代码。我们只需从小程序开发文档中下载 demo 代码,再将其引入,也能轻松进行解码。
我们以 Node.js 为例,演示如何使用官方的解码 Demo:
-
解压官方 Demo 代码包,在解压后的文件夹中找到 Node 这个文件夹。
-
通过终端(Terminal)进入这个文件夹,执行 npm init 命令,将它变为 Node.js 应用。
-
修改文件夹中的 demo.js,将示例代码替换成实际信息,包括小程序 App ID、登录用户的 Session Key、加密数据等等。
-
在终端中,执行 node demo.js 命令 。
比较有意思的是,在宣布这个消息当天进行调试,分享接口仍可以获取到微信群名称,但现在已无法正常获取。不知道是有意为之还是 bug 使然。
但是,微信群的唯一 ID(openGId)仍然可以正常获取。开发者依然可以通过这个 ID 识别不同的微信群,进而判断用户通过哪一个微信群进入小程序。
更多关于转发API的内容,请参考:
跳坑《二百一十一》转发API:onShareAppMessage使用
|
免责声明:本站所有文章和图片均来自用户分享和网络收集,文章和图片版权归原作者及原出处所有,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系网站客服处理。