获取部门列表失败:access_token missing, hint: [1663333048347283783863127], from ip: 43.231.178.62, more info at https://open.work.weixin.qq.com/devtool/query?e=41001

引子

我们公司内部用企业微信沟通,最近有个需求,一个应用在企业微信PC版打开时,要自动跳转到PC的默认浏览器。在开发过程中,我经历了几个坑,在这里记录一下,希望对你有所帮助。

查了下文档,企业微信支持打开系统默认浏览器,需要调用openDefaultBrowser方法:

但是为了调用openDefaultBrowser方法之前,必须先注入配置信息,否则将无法调用。

JS-SDK配置信息使用说明(https://developer.work.weixin.qq.com/document/path/90514)。

坑一

我在网上找了下,有的说是要通过agentConfig注入应用的权限,我用agentConfig试了下没有成功(有可能是我的原因,agentConfig也许也可以),我碰到了第一坑。

要调用openDefaultBrowser方法,其实用config接口注入权限验证配置就行了,不需要用agentConfig。

写代码

看了下,代码写的不错,我大部分代码就直接拷贝自这篇文章,由于我这个项目用的是jsp,前端页面有点不一样,后端代码差不多。

前端页面

由于调用wx.config接口需要appId、timestamp、nonceStr、signature这些参数,而这些参数的值必须和后台生成签名时的值一样,所以这些参数必须从后台获取。

这里调用的接口是“/wechat/getWeiXinPermissionsValidationConfig”,这个是自定义的接口,也就是我们要接下来写的后端代码。

后端代码

首先是跳转到上面前端页面的代码。

下面是获取JS-SDK使用权限签名,具体步骤参考:JS-SDK使用权限签名算法(https://developer.work.weixin.qq.com/document/path/90506)。

签名生成规则如下:参与签名的参数有四个: noncestr(随机字符串), jsapi_ticket(如何获取参考“获取企业jsapi_ticket”以及“获取应用的jsapi_ticket接口”), timestamp(时间戳), url(当前网页的URL, 不包含#及其后面部分)

简单地说,我们需要一个加密的签名,生成这个签名又需要 jsapi_ticket,所以生成签名之前要先获取 jsapi_ticket。

Ticket 类:

调用post、get方法的工具类:

前端页面调用的Controller方法,返回前端需要的参数:

ApiResult类:

企业微信设置

代码写好了之后,我们需要配置企业微信,在应用管理里新增一个应用,在应用主页中把**/wechat/openDefaultBrowser的调跳转路径填进去,打开这个应用之后就会跳到我们的前端页面。

坑二 网页授权及JS-SDK

我碰到的第二个坑就是没有设置可信域名,导致报错。

在设置可信域名弹出框中,需要把两个空都填上。

刚开始我正愁要把这个txt文件放置项目的哪个位置,才能直接访问呢?

我放了好几个地方都不行,后来在网上搜了下,原来这个txt文件里面就是一个字符串,我们只要把这个字符串的内容返回就行了,可以直接在Controller写个方法直接返回txt文件里的字符串就行了。

填好域名之后,显示已验证就成功了。

坑三 配置企业可信IP

发布了代码之后测试,结果一直返回错误:

原来是ip地址不允许访问,需要在企业可信IP中把服务器的ip地址填上:

在这里插入图片描述

最后

最后,终于能够实现调整到默认浏览器啦!

“https://open.weixin.qq.com/connect/oauth2/authorize?appid=****&redirect_uri=http%3A%2F%2Fabc.com%3A6868%2Fwechat%2Fpc&response_type=code&scope=snsapi_userinfo&agentid=&state=STATE#wechat_redirect”

如果不用自动登录,直接打开一般的链接就行了。

找不到IP设置请看下面图

魔盒教程:同步通讯录问题,避坑指南,欢迎补充……插图

你在企业微信开发过程中还碰到了什么坑?欢迎在留言中补充交流,谢谢。

发表回复

后才能评论