基本和微信小程序操作类似,先让小程序授权,授权成功获取code,然后通过code调用后台接口,去获取用户信息,即可得到openID。
首先调用小程序授权:login方法,拿到code,不同小程序的授权方式不同,可以用uniapp判断语法做相应操作
// #ifdef MP-WEIXIN
uni.login({
provider: 'weixin',
success: (loginRes)=>{
if (loginRes.code) {
this._getWxOpenId(loginRes.code, callback);
}
}
});
// #endif
// #ifdef MP-ALIPAY
// 系统建议使用支付宝原生写法
my.getAuthCode({
scopes: 'auth_base',
success: (authData) => {
let code=authData.authCode;
this._getAliOpenId(code, callback);
}
});
// #endif
然后调用后台接口,传入code和需要的值,去获取用户信息,这里微信和支付宝写了两个方法,主要是参数的接口地址不同,就分开处理了。
// 微信授权获取openId
_getWxOpenId(code, callback) {
let url = `后台接口地址`;
this.$request({
url: url,
data: {
code: code,
userType: getApp().globalData.appType,
appId: getApp().globalData.wxMyAppId
},
success: (data) => {
console.log('通过code授权', data)
if (data && data.obj) {
let userInfo = data.obj;
getApp().globalData.userInfo = userInfo;
this._saveCache(userInfo);
} else {
uni.showToast({
title: data.message || '获取openId失败',
icon: 'none'
})
}
callback && callback();
},
fail: (err) => {
callback && callback();
uni.showToast({
title: '网络开小差了,获取openId失败',
icon: 'none'
})
}
})
}