
1.小程序=>wx.login()获取code
wx.login({success (res) {if (res.code) {//发起网络请求wx.request({url: 'https://example.com/onLogin',data: {code: res.code}})} else {console.log('登录失败!' + res.errMsg)}}})
2.gin服务器后端
GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
func WxLogin(c *gin.Context) {
code := c.Param("code")
rs, err := utils.New(url+code, "POST").Request()
if err != nil {
log.Fatal(err)
}
log.Println("----->>>查找用户表-用户数据")
user := db.First(&user, "openId = ?", rs.openId)
if user != nil {
log.Println("----->>>返回前端-openId+用户信息(昵称,头像,手机号码)")
// 设置cookie,保存登陆状态
c.SetCookie("gin_cookie", "test", 3600, "/", "localhost", false, true)
}
log.Println("----->>>返回前端-只有openId")
}
返回值是
| openid 用户唯一标识 |
|---|
| session_key 会话密钥 |
|---|
3.小程序获取到上一步结果
wx.request({
url: 'https://example.com/onLogin',
data: {
code: res.code
},
success: function (res) {
// 如果没有手机号,则跳转到登录页面,注册用户
if (res.mobile) {
wx.navigator({
url: '/pages/login/index'
})
}
}
})
4.小程序登录页面

用户主动点击按钮(微信一键登录)

