本帖最后由 phoben 于 2021-11-27 09:18 编辑
需求场景:
这几天客户提出了一个需求,就是能否从活字格系统中,很方便的直接跳转到企业微信的某个群的聊天窗口。
因为之前做了一个业务逻辑,就是为每个“工作任务”自动生成一个项目微信群,而且自动把任务相关的用户拉进群,简单说就是系统会自动创建微信群,方便成员沟通项目。
但是时间长了以后,每个人都有上百个微信群,通过群名称(项目编号作为群名)很难直观的找到想要进入的群。
这时候就有了这个需求,直接从活字格的项目列表中,直接能进群,毕竟项目列表显示的信息更直观。
下面是项目列表的截图:
下面就开始实现思路:
首先,我开始查找官方文档,是否有相关API可以调用。发现如下两个API,貌似是可以:
上面的API确实可以打开企业微信群,但是详细一看,发现官方说明中有一段话
这个API只支持客户群,而我们创建的是内部群,所以这个AIP不合适。
有小伙伴想到,为什么我们不创建客户群? 同样因为微信限制,企业微信是不允许在服务端直接创建客户群的。
所以我们接着往下找,发现另一个API:
API的第一句说明,就直接告诉我可以打开内部群,所以我们开始研究如何调用的问题。
通过短暂的研究,发现这个API只需要传入一个chatId,也就是群ID,和一个消息对象就可以;
而这里我们不需要发消息,只需要打开窗口,让用户自己发消息就行,所以只需要传chatId。
那就简单了,直接JS调这个接口,传入chatId不就行了?
- wx.invoke("openExistedChatWithMsg", {
- chatId: 群ID,
- },function(res){
- if (res.err_msg == "openExistedChatWithMsg:ok")
- {
- }
- }
- );
复制代码
然后并没有这么简单,企业微信在使用前端JS接口功能时,需要注入agentConfig或者config权限,也叫“鉴权”;鉴权的过程比较繁琐,但是一旦实现了前端接口的鉴权,意味着我们可以任意使用企业微信所有前端API,那也是很爽的事情;
所以就想办法开始动手鉴权:
鉴权的过程中需要获取jsapi_ticket 和加密,有兴趣的朋友可以看官方文档
https://work.weixin.qq.com/api/doc/90000/90136/90506#%E7%AD%BE%E5%90%8D%E7%AE%97%E6%B3%95
这时候我利用服务端命令,做了一个可以生成供agentConfig使用的对象。
这个服务端命令返回的是一个json对象,其中JSON是手动拼的,这里再次号召一下官方大大,赶紧出JSON的操作插件。。。
接着前端页面可以直接调用这个服务端命令,得到一个JSON对象
我们将这个JSON对象存到一个叫"jsonstr"的单元格中
下面就是开始注入权限了,执行JS命令如下:
下面代码的意思,就是说将"jsonstr"单元格的内容拿到,并转为JSON,然后放进一个configAll的大对象中,这个对象的格式是按照官方标准写的。
- var config = JSON.parse(Forguncy.Page.getCell("jsonstr").getValue())
- var configAll = {
- ...config,
- success: function (res) {
- Forguncy.Page.getCell("jsApiTrue").setValue(1)
- },
- fail: function (res) {
- Forguncy.Page.getCell("jsonstr").setValue(res.toString())
- Forguncy.Page.getCell("jsApiTrue").setValue(0)
- if (res.errMsg.indexOf('function not exist') > -1) {
- alert('版本过低请升级')
- } else {
- alert(res.errMsg)
- }
- }
- }
- try {
- wx.agentConfig(configAll);
- } catch (error) {
- Forguncy.Page.getCell("jsApiTrue").setValue(0)
- }
复制代码
使用 wx.agentConfig() 来注入JS权限,这注入环节就完成了。
上面部分就完成了鉴权和注入,我们接下来就要具体实现点击按钮,直接跳转微信群功能。
回到之前找到的API
我们只需要把 chatId 放进去,然后调用就可以
这里我用了一个按钮,如果点击这个按钮,就取到当前任务的项目群ID,然后执行API。
测试效果:
好了,实现了这个以后,移动端同样复用过去即可。
总结一下这里的几个技术关键点:
- 创建群的时候,要保存chatId;
- 鉴权需要想办法生成一个JSON格式的配置对象;
- 页面调用的时候,传入chatId,即可;
欢迎大家留言交流,或者加微信交流
|