小知识,大挑战!本文正在参与“程序员必备小知识”创作活动
授权
授权获取用户openid、session_key、unionid
1.调用微信接口 wx.login 获取登录凭证(code)
wx.login({
success (res) {
if (res.code) {
// 拿到code 请求 自定义 下文 2中 服务端(开发者服务器) 获取 openid、session_key、unionid
} else {
console.log('登录失败!' + res.errMsg)
}
}
})
2.服务端(开发者服务器)接收到 临时登录凭证 code 调用微信接口
服务端请求该地址获取 openid、session_key、unionid,返回给客户端
GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
3.获取用户 头像、昵称、国家、省份、性别等
需要用户主动触发,button open-type 的值设置为 getPhoneNumber
<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"></button>
...
getPhoneNumber(e){
这里拿到 encryptedData 和 iv 加上 上方获取openid时 拿到 sessionKey 传给 服务端(开发者服务器)进行解密获取 结果
}
后端解密
var WXBizDataCrypt = require('./WXBizDataCrypt')
var appId = '**************'
var sessionKey = '*****************'
var encryptedData =
'CiyLU1Aw2KjvrjMdj8YKliAjtP4gsMZM'+
...
...
'20f0a04COwfneQAGGwd5oa+T8yO5hzuy'+
'Db/XcxxmK01EpqOyuxINew=='
var iv = 'r7BXXKkLb8qrSNn05n0qiA=='
// sessionKey、encryptedData、iv 都是 接收 客户端的传值
var pc = new WXBizDataCrypt(appId, sessionKey)
var data = pc.decryptData(encryptedData , iv)
console.log('解密后data: ', data)
// 解密后的返给客户端的数据为
//
// data = {
// "nickName": "Band",
// "gender": 1,
// "language": "zh_CN",
// "city": "Guangzhou",
// "province": "Guangdong",
// "country": "CN",
// "avatarUrl": "http://wx.qlogo.cn/mmopen/vi_32/aSKcBBPpibyKNicHNTMM0qJVh8Kjgiak2AHWr8MHM4WgMEm7GFhsf8OYrySdbvAMvTsw3mo8ibKicsnfN5pRjl1p8HQ/0",
// "unionId": "**************",
// "watermark": {
// "timestamp": 1477314187,
// "appid": "****************"
// }
// }