<!-- 旧版本方式 -->
<block v-if="canIUseProfile==false" >
<button v-if="isLogin === false" type="primary" open-type="getUserInfo" @getuserinfo="getUserInfo" withCredentials="true">获取授权并登录1</button> </block> <!-- 新版本方式 -->
<block v-else>
<button v-if="isLogin === false" type="primary" @tap="getUserInfo" >获取授权并登录2</button> </block> ------------------------------------------------------
data 里加一个canIUseProfile初始为false ------------------------------------------------------
onLoad 里加一段判断
if( wx.getUserProfile ){
console.log('--check getUserProfile--OK');
this.canIUseProfile = true;
}
------------------------------------------------------
methods 里新老都用同一个方法来处理:
getUserInfo : function(e){
//旧版本方式
if( this.canIUseProfile == false ){
//获取授权信息
if(e.detail.userInfo){
console.log('用户允许了授权')
console.log( e.detail.userInfo ); //1.拿到基本的微信信息!!
//继续过去的老方法代码,略……
}
//新版本方式
}else{
var that = this;
wx.getUserProfile({
desc : '用于完善用户资料',
lang : 'zh_CN',
success : function( res ){
console.log( 'wx.getUserProfile=>用户允许了授权' );
console.log( res.userInfo );
// console.log( res.rawData );
console.log( res.signature );
console.log( res.encryptedData );
console.log( res.iv );
// console.log( res.cloudID );
/* 以下是网友说的,我还没来得及测试:
按新方案的意思,encryptedData,iv,rawData,signature这几个属性用不上了。
小程序端wx.getUserProfile()获取到userInfo,wx.login()获取到code,
这两个传给后端,code通过code2session接口获取到unionid,openid,session_key等;
原有的拿session_key解密encryptedData的逻辑不需要了,毕竟encryptedData也只是比userInfo多了openid和unionid。
*/
}
fail : function( res ){
console.log('wx.getUserProfile=>用户拒绝了授权');
console.log( res );
},
});
}
}