import wd from '../../../webui/lib/wd.js'

const app = getApp()

unionId1: '', //从wx.getUserInfo获取

unionId2: '', //从code2session获取

}

//<button open-type="getUserInfo" bindgetuserinfo="onGetUserInfo">获取unionId</button>

//点击opentype为getUserInfo的按钮时

,onGetUserInfo (e) {

var that = this

console.log('按钮的属性:');

console.log(e.detail.userInfo)

//1、登录

wx.login({

success: function (res) {

wxcode2session(res)

}

})

//2、获取session

var wxcode2session=function(res){

var data = {

action: 'wxcode2session',

code: res.code

}

wd.wd.mina.request(data).then(res=>{

console.log('wxcode2session return:');

console.log(res.data); //这里面

/*{

openid: "oXB7d4omfhcqH4A0YWsmMd4CBxe0",

session_key: "zPLZSql5kcoF72VkOvBwIw==",

unionid: "oEbPtwzaqqx9W36Ib4Um-lN6n6R8"

}*/

if( res.data.unionid != undefined ){

that.setData({

unionId2: res.data.unionid

})

}

var session_key = res.data.session_key

getInfo(session_key)

})

}

//3、获取信息

var getInfo = function(session_key){

wx.getUserInfo({

lang: 'zh_CN',

success: function (res) {

console.log('wx.getUserInfo return:');

console.log(res);

var iv = res.iv

var encryptedData = res.encryptedData

if (iv != undefined && encryptedData != undefined) {

res['session_key'] = session_key

decrypt(res)

}

}

})

}

//4、解密数据

var decrypt = function(res){

var data = {

action: 'wxDecryptData',

encryptedData: res.encryptedData,

iv: res.iv,

sessionKey: res.session_key,

}

console.log('wxDecryptData send:');

console.log(data);

wd.wd.mina.request(data).then(res=>{

var ret = res.data;

console.log('wxDecryptData return:');

console.log(ret);

if( ret.status == 0 ){

if( ret.data.unionId != undefined ){

that.setData({

unionId1: ret.data.unionId

})

}

}else{

}

})

}//eof-decrypt

}

})

官方说有六种方法可以获取unionId:

绑定了开发者帐号的小程序,可以通过以下途径获取 UnionID。

1、调用接口 wx.getUserInfo,从解密数据中获取 UnionID。注意本接口需要用户授权,请开发者妥善处理用户拒绝授权后的情况。

2、如果开发者帐号下存在同主体的公众号,并且该用户已经关注了该公众号。开发者可以直接通过 wx.login + code2Session 获取到该用户 UnionID,无须用户再次授权。

3、如果开发者帐号下存在同主体的公众号或移动应用,并且该用户已经授权登录过该公众号或移动应用。开发者也可以直接通过 wx.login + code2Session 获取到该用户 UnionID ,无须用户再次授权。

4、用户在小程序(暂不支持小游戏)中支付完成后,开发者可以直接通过getPaidUnionId接口获取该用户的 UnionID,无需用户授权。注意:本接口仅在用户支付完成后的5分钟内有效,请开发者妥善处理。

5、小程序端调用云函数时,如果开发者帐号下存在同主体的公众号,并且该用户已经关注了该公众号,可在云函数中通过 cloud.getWXContext 获取 UnionID。

6、小程序端调用云函数时,如果开发者帐号下存在同主体的公众号或移动应用,并且该用户已经授权登录过该公众号或移动应用,也可在云函数中通过 cloud.getWXContext 获取 UnionID。

第3项是涉及到移动应用,第4项是小程序支付,第5、6项是云开发。所以小程序里面常规的开发就是第1、2两种。也就是我们上面演示的两种方法。

03-14 09:09