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两种。也就是我们上面演示的两种方法。