小程序登录
小程序可以通过微信官方提供的登录能力方便地获取微信提供的用户身份标 识,快速建立小程序内的用户体系。如图所示,小程序通过 wx.login()获取 code, 然后通过 wx.request()发送 code 至开发者服务器,开发者服务器将登录凭证 appid、 appsecret 与 code 用于校验微信接口,微信接口服务向开发者服务器返回用户唯一 标识 OpenID 和 会话密钥 session_key。开发者服务器实现自定义登录状态与 openid 与 session_key 关联,并向小程序返回自定义状态。
小程序将自定义登录状态 存入 storage,并用于后续 wx.request 发起业务请求。 对于某个微信小程序,每个用户访问该小程序都有产生一个唯一的 openid,这 个 openid 为用户访问该小程序的标识符,即每个用户的 openid 都是不一样的。
因此,可以把 openid 作为用户唯一标识符(类似身份证号),并存于数据库中用以后续操作。
开发者服务器与微信接口服务之间的交互是由后台实现的,主要以小程序前端与开发者服务器之间的交互为主
wx.login( )
调用 wx.login( )接口获取登录凭证(code),通过凭证进而换取用户登录态信息,
其中 wx.login( )接口的属性如表所示。
由于 app.js 会先于其他页面执行,所以比较适合处理一些注册函数,因此将 wx.login( )方法写在 app.js 文件中。
wx.request( )主要用于发送 https 网络请求,其属性详见表
这里以小程序登录中,小程序向开发者服务器发送 wx.request 请求为例,调用微信官方的 wx.login()接口会返回一串 jscode,服务器使用 jscode、appid、appsecret 三个参数向微信请求得到 openid,这一步后台已经封装完成,并提供一个开放接口:
https://zjgsujiaoxue.applinzi.com/index.php/Api/Weixin/code_to_openidv2
具体代码如下:
// 登录
wx.login({
success: res => {
// 发送 res.code 到后台换取 openId, sessionKey, unionId
wx.request({
url:
'https://zjgsujiaoxue.applinzi.com/index.php/Api/Weixin/code_to_openidv2',
data: {
'code': res.code,
'from': ''
},
success: function (res) {
console.log(res.data)
//将 SESSIONID 保存到本地 storage
wx.setStorageSync('jiaoxue_OPENID', res.data.openid)
},
fail: function (res) {
console.log('res' + res)
}
})
}
})
上述代码中,通过 wx.login()方法,成功返回 res,其中 res.code 为微信官方返 回 code,通过 wx.request 请求,请求参数为 code 与 appid,向请求成功时,后台会返回一个数组,数组中包含的值是有后台代码决定的,其中就包含了 openid,这里可以使用 console.log(res.data)来看一下返回的数组中所包含的值,