基于微信生态的产品,微信登陆、模版消息、微信支付、微信分享已经成为标准配置,可以依赖微信强大的用户基础和庞大的社交网络来实现业务目标。
使用微信登录就是为了获取openid和用户的基本信息如昵称、头像、性别、所在城市这些内容。如果为了保持多个产品线的用户统一的话,还需要unionid这个大神器,前提是把APP、小程序、公众号、网站这些内容绑定到微信开放平台,访问 open.weixin.qq.com。否则是获取不到unionid。
获取openid有两种方式
方式一
1、调用wx.login(),获取code
wx.login({
success: function (res) {
console.log(res.code)
}
})
2、调用wx.request() 根据code、appid、secret这三个参数获取openid,建议appid、secret在后台设置,不要网络上传输,通过wx.request()只要把code传后台即可
方式二 1、调用wx.getUserInfo() 获取encryptedData(加密数据),iv(加密算法的初始向量)
wx.getUserInfo({
withCredentials:true,
success:function(res){
var userInfo = res.userInfo
var nickName = userInfo.nickName
var avatarUrl = userInfo.avatarUrl
var gender = userInfo.gender
var province = userInfo.province
var city = userInfo.city
var country = userInfo.country
var iv = userInfo.iv
var encryptedData = userInfo.encryptedData
}
})
2、把返回的数据iv、encryptedData进行解密获取openid,这种方式在能获取openid的同时,也能获取到unionid,获取到的数据如下所示
{
"openId": "OPENID",
"nickName": "NICKNAME",
"gender": "GENDER",
"city": "CITY",
"province": "PROVINCE",
"country": "COUNTRY",
"avatarUrl": "AVATARURL",
"unionId": "UNIONID",
"watermark": {
"appid": "APPID",
"timestamp": "TIMESTAMP"
}
}
微信官方提供了AES解密的demo有PHP、C++、Node、Python,有一期会专门讲,悟空来全栈营小程序组提供了一个JAVA版本,在获取微信转发群ID的时候也要用到。
注:wx.getUserInfo()默认是获取不到iv和encryptedData的,需要请求的参数中设置withCredentials为true