一、基础概念
- openid:如果一个用户关注了不同的微信应用(公众号,小程序),那么就对应不同的openID
- 如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),可通过 UnionID 来区分用户的唯一性,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。
二、具体登入逻辑
小程序登入逻辑时序图地址:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html
时序图:
简化图:
- 小程序发送发起wx.login 获得code,再发起wx.request 给后端服务器传递参数code。
- 后端服务器发起请求 {url},传递code,appid,appsecret,返回json格式的session_key,openid.
一些说明:
- url:https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
- 后端请求具体文档 https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html
- 小程序端发起的请求必须是 https协议,并且打开443端口,必须域名服务器备案。
三、具体逻辑代码
小程序端:
wx.login({
success(res) {
if (res.code) {
//发起网络请求
wx.request({
url: '{具体后端接口}',
data: {
code: res.code
},
header:{
'Content-Type':'application/json'
},
success:function(res){
// var res = JSON.parse(res.data)
that.globalData.openid = res.openid
console.log(res.data)
}
})
} else {
console.log('登录失败!' + res.errMsg)
}
}
})
后端:
@web.route("/api/v1/wxlogin")
def loginwx():
code = request.args.get('code')
url = "https://api.weixin.qq.com/sns/jscode2session?appid={}&secret={}&js_code={}&grant_type=authorization_code".format(
'参数一','参数二',code
)
result = HTTP.get(url)
return ({'openid':result['openid']})