1.用户同意授权,获取code
在确保微信公众账号拥有授权作用域(scope参数)的权限的前提下(服务号获得高级接口后,默认拥有scope参数中的snsapi_base和snsapi_userinfo),引导关注者打开如下页面:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
redirect_uri:授权后重定向的回调链接地址, 请使用 urlEncode 对链接进行处理且需要网页授权
code会在回调链接地址中拼接
例:https://hz.cnformulator.com/gzh/index.html?code=061vYnTj1WUCcp0CczUj1s8iTj1vYnTq&state=STATE
2.获取code之后,将code传给后台
function getRequest() {
var url = location.search; //获取url中"?"符后的字串
var theRequest = new Object();
if (url.indexOf("?") != -1) {
var str = url.substr(1);
strs = str.split("&");
for(var i = 0; i < strs.length; i ++) {
theRequest[strs[i].split("=")[0]]=unescape(strs[i].split("=")[1]);
}
}
return theRequest;
}
let code = getRequest().code;
let url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=appid&secret=secret&code='+code+'&grant_type=authorization_code'
var oAjax = null;
//这里进行HTTP请求
try {
oAjax = new XMLHttpRequest();
} catch (e) {
oAjax = new ActiveXObject("Microsoft.XMLHTTP");
};
//post方式请求,最后一个参数是是否异步请求
oAjax.open('post', 'https://hz.cnformulator.com/api', true);
//post相比get方式提交多了个这个
oAjax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
//post发送数据和请求
oAjax.send(`app=app&class=calss&sign=sign&code=${code}`);
oAjax.onreadystatechange = function () {
//当状态为4的时候,执行以下操作
if (oAjax.readyState == 4 && oAjax.status == 200) {
alert("授权成功")
setTimeout('WeixinJSBridge.call("closeWindow")', 1500);
};
};
这里在将code传给后台1500毫秒后关闭微信内置浏览器