企业微信JS-SDK是企业微信面向网页开发者提供的基于企业微信内的网页开发工具包。
通过js-sdk可以在企业微信内实现众多功能,如调出通讯录、调出摄像头、隐藏部分按钮等。
使用js-sdk分为三步:
1.开发页面引入JS文件
html页面加入
<script src="//res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
注意:企业微信之前为微信企业号,微信企业号同样有js-sdk工具包,但版本不同,混用可能会出现问题。
2.通过config接口注入权限验证配置
wx.config({
beta: true,// 必须这么写,否则wx.invoke调用形式的jsapi会有问题
debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: '', // 必填,企业微信的corpID
timestamp: , // 必填,生成签名的时间戳
nonceStr: '', // 必填,生成签名的随机串
signature: '',// 必填,签名,见附录1
jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});
这边beta、debug都有注释,按需填写。appid我前一篇文章有写在哪边获取,不知道可以去看下。timestamp和nonceStr都是用来生成signature签名的,因此要和后台生成签名的参数一致。signature为验证签名,获取方法附录1有写,具体为:
第一步获取jsapi-ticket
请求方式:GET(HTTPS)
请求URL:https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=ACCESS_TOKEN
方式和获取access-token一致
返回结果格式为
{
"errcode":0,
"errmsg":"ok",
"ticket":"bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA",
"expires_in":7200
}
提取出ticket即可,注意此接口有频率限制,超过会被封一段时间,因此做好本地缓存
第二步签名算法
将jsapi-ticket、noncestr、timestamp、url根据算法得出签名
此处url为当前页面的url不清楚可以在页面通过
alert(location.href.split('#')[0]);
打印出来对照一下
签名java代码
public static String getsig(String noncestr,String jsapi_ticket,String timestamp,String url){
String[] paramArr = new String[] { "jsapi_ticket=" + jsapi_ticket,
"timestamp=" + timestamp, "noncestr=" + noncestr, "url=" + url };
Arrays.sort(paramArr);
// 将排序后的结果拼接成一个字符串
String content = paramArr[0].concat("&"+paramArr[1]).concat("&"+paramArr[2])
.concat("&"+paramArr[3]);
String gensignature = null;
try {
MessageDigest md = MessageDigest.getInstance("SHA-1");
// 对拼接后的字符串进行 sha1 加密
byte[] digest = md.digest(content.toString().getBytes());
gensignature = byteToStr(digest);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
// 将 sha1 加密后的字符串与 signature 进行对比
if (gensignature != null) {
return gensignature;// 返回signature
} else {
return "false";
}
}
/**
* 将字节数组转换为十六进制字符串
*
* @param byteArray
* @return
*/
private static String byteToStr(byte[] byteArray) {
String strDigest = "";
for (int i = 0; i < byteArray.length; i++) {
strDigest += byteToHexStr(byteArray[i]);
}
return strDigest;
}
/**
* 将字节转换为十六进制字符串
*
* @param mByte
* @return
*/
private static String byteToHexStr(byte mByte) {
char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A',
'B', 'C', 'D', 'E', 'F' };
char[] tempArr = new char[2];
tempArr[0] = Digit[(mByte >>> 4) & 0X0F];
tempArr[1] = Digit[mByte & 0X0F];
String s = new String(tempArr);
return s;
}
成功返回signature
jsapilist为需要调用的api接口列表,格式为
['hideAllNonBaseMenuItem','chooseImage','previewImage','uploadImage','selectEnterpriseContact','openEnterpriseChat']
验证成功后,如果开启了调试模式,页面会打印
{"errMsg":"config:ok"}
后面可以开始调用其他接口
更多腾讯接口开发可以关注本人微信公众号查看