注意:如果你有多个微信公众号一起开发,一定要先绑定微信开放平台,很重要,后期unionid是你管理多个微信公众号的唯一ID.
前面我们讲了,微信怎么配置安全域名与token的验证,今天我们就来看看微信公众号的授权认证。
2024年09月22日
注意:如果你有多个微信公众号一起开发,一定要先绑定微信开放平台,很重要,后期unionid是你管理多个微信公众号的唯一ID.
前面我们讲了,微信怎么配置安全域名与token的验证,今天我们就来看看微信公众号的授权认证。
我们用nodejs开发,框架用thinkjs,
第一步,我们先写用户授权的链接接口:
async getOauthUrlAction() {
let redirect_uri = this.post('redirect_uri'); // 获取授权的url
if (!redirect_uri) {
return this.fail('url错误');
}
let redirect_uri2 = encodeURIComponent(redirect_uri); // 注意:url链接进行处理
const appid = 'wxac3dd7ea8754354d';
const originUrl = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' + appid +
'&redirect_uri=' + redirect_uri2 +
'&response_type=code&scope=snsapi_userinfo&state=true#wechat_redirect';
return this.success(originUrl);
}
前端调用接口,获取code,发送给后端node
第二步,我们再通过code获取授权,用户信息的接口
async loginByWeixinAction() {
const code = this.post("code") //
let _this = this;
let reqUrl = 'https://api.weixin.qq.com/sns/oauth2/access_token?';
// 通过code换取网页授权access_token
const options = {
method:'post',
url:reqUrl,
qs:{
appid:"wxac3dd7ea8754354d",
secret:"1c93d24a060e08c4b31d0bededa281ea",
code: code,
grant_type: 'authorization_code'
},
json:true
};
let sessionData = await rp(options);
if (!sessionData.openid) {
return this.fail('登录失败');
}
const access_token = sessionData.access_token;
const openid = sessionData.openid;
const refresh_token = sessionData.refresh_token;
// 拉取用户信息
const options2 = {
method: 'GET',
url: 'https://api.weixin.qq.com/sns/userinfo',
qs: {
access_token: access_token,
openid: openid,
lang: 'zh_CN'
}
};
let userInfo = await rp(options2);
userInfo = JSON.parse(userInfo);
return this.success(userInfo);
}
微信授权,获取用户信息完成