可信域名配置(企业微信提示使用可信域名操作方法)

企业自建应用踩坑指南

下面,讲下我开发时候一些心得和流程,保你万无一失。

搭建自建应用

应用管理 -> 应用 -> 自建 -> 创建应用

可信域名配置(企业微信提示使用可信域名操作方法)

构建自建应用网页授权

官方文档:https://work.weixin.qq.com/api/doc/90000/90135/91020

设置可信域名

注意:

可信域名配置的是前端页面的域名,不是后端请求的域名

如果非80端口,必须可信域名配置必须包含端口号

配置域名与访问域名完全一致,与协议头/链接路径无关

参考官网实例

假定重定向访问的链接是:http://mail.qq.com:8080/cgi-bin/helloworld:

配置域名是否正确原因mail.qq.com:8080??配置域名与访问域名完全一致email.qq.com??配置域名必须与访问域名完全一致support.mail.qq.com??配置域名必须与访问域名完全一致*.qq.com??不支持泛域名设置mail.qq.com??配置域名必须与访问域名完全一致,包括端口号

假定配置的可信域名是 mail.qq.com:

访问链接是否正确原因https://mail.qq.com/cgi-bin/helloworld??配置域名与访问域名完全一致http://mail.qq.com/cgi-bin/redirect??配置域名与访问域名完全一致,与协议头/链接路径无关https://exmail.qq.com/cgi-bin/helloworld??配置域名必须与访问域名完全一致配置首页链接

构造应用首页链接

应用链接固定格式如下,具体链接参数说明见官方文档
https://work.weixin.qq.com/api/doc/90000/90135/91022

https://open.weixin.qq.com/connect/oauth2/authorize?appid=CORPID&redirecturi=REDIRECTURI&responsetype=code&scope=snsapibase&state=STATE#wechat_redirect

我们需要配置两个参数,其他参数默认

appid,就是企业ID

redirect_uri 实际的首页链接

如何测试构造的链接

浏览器端访问

在链接输入框中输入测试连接,提示未绑定企业号开发者

如何绑定企业号开发者

配置完整之后就可以正常访问链接进行测试了

获取用户信息

这步操作基本是后台封装接口直接调用,可以仔细阅读参考文档,这里不多说都有想起返回结果

根据code获取成员信息:https://work.weixin.qq.com/api/doc/90000/90135/91023

根据userid读取成员:https://work.weixin.qq.com/api/doc/90000/90135/90196

到这步基本没啥遇到什么深坑,正常处理!!

JS-SDK 实践

以聊天栏增加功能为例说明JS-SDK的使用,使用JS-SDK获取外部联系人

设置聊天栏功能

位置一:

位置二:

JS-SDK权限验证

步骤一: 引入js-sdk相关js

<script src=”//res.wx.qq.com/open/js/jweixin-1.2.0.js “></script>

步骤二: 通过wx.config注入权限验证配置(第一次握手config注入的是企业的身份与权限)

wx.config({

beta: true,// 必须这么写,否则wx.invoke调用形式的jsapi会有问题

debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。

timestamp: , // 必填,生成签名的时间戳

nonceStr: ”, // 必填,生成签名的随机串

signature: ”,// 必填,签名,见 附录-JS-SDK使用权限签名算法

jsApiList: [] // 必填,需要使用的JS接口列表,凡是要调用的接口都需要传进来

});

这里需要注意点

timestamp,nonceStr,signature签名生成一般让后端是返回给前端

调用后端请求,生成timestamp,nonceStr,signature如下

// 这里是一个后端请求,只需要注意参数就可以

await this.props.getWxconfig({

appSecret: “-“,

appid: ‘-‘,

locationUrl: url

})

参数说明

appSecret:外部联系人secret

locationUrl:授权访问的页面URL

外部联系人secret如何查看

步骤三: 通过wx.ready接口处理成功验证(第二次握手判断当前版本是否支持指定 JS 接口,支持批量判断)

步骤四: 通过agentConfig注入应用权限(第三次握手gentConfig注入的是应用的身份与权限)

wx.ready(function() {

// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,

// 所以如果需要在页面加载时就调用相关接口,

// 则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。

wx.checkJsApi({

jsApiList: [‘agentConfig’, ‘getCurExternalContact’], // 需要检测的JS接口列表,所有JS接口列表见附录2,

success: (res) => {

// 以键值对的形式返回,可用的api值true,不可用为false

// 如:{“checkResult”:{“chooseImage”:true},”errMsg”:”checkJsApi:ok”}

wx.agentConfig({

timestamp: wxConfig.agent_timestamp,

nonceStr: wxConfig.agent_nonceStr,

signature: wxConfig.agent_signature,

jsApiList: [‘getCurExternalContact’], //必填

success: (res) => {

// 回调

wx.invoke(‘getCurExternalContact’, {

}, function(res){

if(res.err_msg == “getCurExternalContact:ok”){

userId = res.userId ; //返回当前外部联系人userId

}else {

//错误处理

}

});

},

fail: (res) => {

if (res.errMsg.indexOf(‘function not exist’) > -1) {

alert(‘版本过低请升级’)

}

},

complete: (res) => {}

})

}

})

});

调用agentConfig的注意事项

agentConfig与config的签名算法完全一样,但是jsapi_ticket的获取方法不一样(后端注意)

调用wx.agentConfig之前,必须确保先成功调用wx.config

当前页面url中的域名必须是在该应用中设置的可信域名。

agentConfig的接口列表有getCurExternalContact

==小编友情提醒==:

开发时候我们肯定会有多套应用环境的部署(测试,生产),所以我们需要在企业后台进行多个应用的创建,然后一些可变动的参数尽量动态获取
例如,执行agentConfig(AgentId这个是根据应用走的参数),到此我们要进行前面的步骤完成一个应用,这里隐藏了一个不为认知的坑,就是多个环境调试时候,会一直遇到getCurExternalContact:fail_nopermission,那么问题来了,步骤都对了,agenConfig也是ok,就是获取外部联系人方法 不可用,这里就去找到客户联系配置外部联系人关联的应用,如图

到这里就就可以进行正常的多套环境应用调试。

常见问题总结

invalid signature

这个问题基本要通过https://work.weixin.qq.com/api/jsapisign,签名工具是排查看下后台返回的和工具生成的是否一样,前后端配合下

fail_nopermission

这个坑了我很久,从文档看就是 config 没执行, JSAPI没有传入config的jsApiList参数中,。

no permission

wx.agentConfig 没有调用成功,一般是签名错误,它和config 签名是不一样的,如问题1 invalid signature

wx.xxx is not a function

说明你页面引入的那个js 不对全局在检查下。

发表评论

登录后才能评论