uni-app写公众号授权
- 第一步:用户同意授权,获取code
- 第二步:通过code换取网页授权access_token
- 第三步:刷新access_token(如果需要)
- 第四步:拉取用户信息(需scope为 snsapi_userinfo)
实现方式也是两种:
1.静默授权登录
授权登录以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面)特点:用户无感知;
2.非静默授权登录
非静默授权以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。
(区别:除了scope不一样,以及调用微信接口不一样,功能上,静默授权不需要用户确认,只需要用户访问某个网页,属于嵌套在普通网页里的授权形式,但是只能获取到用户的唯一标示openid和union id,无法拿到用户的微信头像、微信名称等个人信息,对于用户的简单认证还是很有用的。)
代码如下:
const base_url = '前端域名'
const wx_url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' + appid + '&redirect_uri=' + base_url +
'&response_type=code&scope=snsapi_base&state=123#wechat_redirect'
onLoad(){
const code = this.getUrlParam('code')
this.postCode(code)
},
methods:{
//解析url参数
getUrlParam(name) {
let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
let r = window.location.search.substr(1).match(reg);
if (r != null) {
return unescape(r[2]);
}
return null;
},
// 发送code 获取信息
postCode(code) {
uni.request({
url: '接口地址',
data: { //参数
code: code,
},
header: {
'Content-Type': 'application/x-www-form-urlencoded',
},
method: 'POST', //请求方式 或GET
success: res => {
}
});
},
}