获取部门列表失败: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设置请看下面图
你在企业微信开发过程中还碰到了什么坑?欢迎在留言中补充交流,谢谢。