基于微信生态的产品,微信登陆、模版消息、微信支付、微信分享已经成为标准配置,可以依赖微信强大的用户基础和庞大的社交网络来实现业务目标。
使用微信登录就是为了获取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
|