【WX小程序】通过wx.login和auth.code2Session完成登录的过程

发布于 2022-09-22  243 次阅读


使用的软件:

  • 微信开发者工具(前端)
  • Visual Studio(后端)

使用的编程语言:

  • WXML(前端)
  • WXSS(前端)
  • JS(前端)

示意图

图片来自微信开放文档


1.通过wx.login获取code

wx.login会生成一个code,通过想服务器发送code来获取到用户openid、session_key等信息,code会在每次请求时重新生成

wx.login({
  success (res) {
    if (res.code) {
      console.log(res.code)
    } else {
      console.log('失败!' + res.errMsg)
    }
  }
})

2.通过code换取openid

需要像服务器提供appid、secret、js_code(刚刚获取的code)以及grant_type(authorization_code)等信息

( ! )注意:该段request请求openid不能直接放在wx小程序中!需要先request服务端,回传code数据再由服务端发起获取openid的请求!

(官方说法:小程序的开发者密码(AppSecret)是一个非常重要的字段,使用该密码可以调用小程序的所有后台接口。请不要将该字段放置在微信小程序的前端代码中,因为微信手机客户端容易被反编译并轻松获得Appsecret,造成重大的安全威胁。开发者应将Appsecret保存到后台服务器中,通过服务器使用Appsecert获取Accesstoken。微信公众平台小程序后台的服务器地址设置也将禁止将“api.weixin.qq.com”域名的配置,所有对于“api.weixin.qq.com”域名下的接口请求请全部通过后台服务器发起,请勿直接通过小程序的前端代码发起。)

        wx.login({
            success (res) {
              if (res.code) {
                  console.log(res.code)
                  wx.request({
                    url: 'https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code',
                    method: "GET",
                    data: {
                        appid: "",
                        secret: "",
                        js_code: res.code,
                        grant_type: "authorization_code"
                    },
                    success (res){
                        console.log(res.data)
                    },
                    finally (err){
                        console.log(err.errMsg)
                    }
                  })
              } else {
                console.log('登录失败!' + res.errMsg)
              }
            }
          })