有些小程序可以直接使用而无需登录,例如,古诗、美图欣赏、美文等,这些微信小程序往往没有登录要求,只需要打开使用就可以了。但是,很多的小程序则往往需要登录,例如,在微信小程序里面您要发表评论、您要购买产品、您要与其它朋友交互等都需要在微信小程序里面进行注册登录,我们知道在微信公众号里面有一套这样的处理机制,在小程序里面使用的是api接口机制来处理用户登录,通过api接口来获取登录信息,当然,用户在小程序里面登录,其实是比较复杂的,但是,我们不用担心这些因为腾讯已经帮我们把那些复杂的处理过程都封装成一个一个的接口api了,小程序的开发者只需要调用这些api就可以了。
在做微信公众号开发时,有时候要把用户上传的信息保存到数据库表里面,或是统计粉丝信息时,需要知道用户的openid(openid就像我们的身份证一样,是我们身份的唯一标识,同样登录公众号的粉丝也是通过这个openid来区别粉丝的)等信息,要获取openid就要使用在腾讯注册好的公众号里面的appid、secret来获取access_token ,通过access_token 来获取用户的openid。
同样的道理在微信小程序里面要想获取登录用户的唯一标识openid,不是直接就能获取到的,而是通过wx.login接口获取 登录凭证 code,然后,通过这个code来获取openid、会话密钥信息。有了opendi和会话密钥后,也就有了区别登录小程序的用户的能力,开发者可以根据业务需要对这些用户进行“处理”以满足自己业务需要。
概括:通过wx.login获取登录凭证code,然后,换取用户登录状态信息,即获取唯一标识openid和本次登录的会话密钥(session_key)。用户数据的加解密通讯需要依赖会话密钥完成。
wx.login(OBJECT)
当接用接口wx.login成功后,就会调用一个回调函数“success”,success回调函数返回一个对象res(假设名叫res),这个对象如下所示:
Object{code:"the code" errMsg:"login:ok"} |
所以,如果使用登录接口wx.login登录成功后,就会返回上面这个对象,我们可以在这个回调用函数里面使用res.code 来获取登录用户的登录凭证code值,有了code就可以将 code 换成 openid 和 session_key了。
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
success | Function | 否 | 接口调用成功的回调函数 |
fail | Function | 否 | 接口调用失败的回调函数 |
complete | Function | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) |
success返回参数说明:
参数名 | 类型 | 说明 |
---|---|---|
errMsg | String | 调用结果 |
code | String | 用户允许登录后,回调内容会带上 code(有效期五分钟),开发者需要将 code 发送到开发者服务器后台,使用code 换取 session_key api,将 code 换成 openid 和 session_key |
换取openid 和 session_key
如何换取openid和session_key呢?上面已经讲过使用code换取,如果研究过微信开发的话,就会明白换取在微信公众号里面换取粉丝的openid需要使用appid 和secret来获取access_token,然后,通过access_token 获取用户openid等信息。
在微信小程序里面其实跟在微信公众号里面类似,上面虽然多次讲用code换取oepnid和密钥,但是,光一个code还不行,还需要您注册的小程序的appid、小程序的 app secret等来获取。
具体换取openid和密钥方法:
使用腾讯提供的接口地址:
https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code |
参数含义如下表所示:
参数 | 必填 | 说明 |
---|---|---|
appid | 是 | 小程序唯一标识 |
secret | 是 | 小程序的 app secret |
js_code | 是 | 登录时获取的 code |
grant_type | 是 | 填写为 authorization_code |
相应获取代码如下所示:
//app.js App({ onLaunch: function() { wx.login({ success: function(res) { if (res.code) { //发起网络请求 wx.request({ url: \'https://api.weixin.qq.com/sns/jscode2session\', data: { js_code: res.code, appid:APPID, secret:SECRET, grant_type:authorization_code } }) } else { console.log(\'获取用户登录态失败!\' + res.errMsg) } } }); } })
返回参数:
参数 | 说明 |
---|---|
openid | 用户唯一标识 |
session_key | 会话密钥 |
从上面的代码可以知道,获取微信小程序的openid是通过腾讯提供的接口地址,然后,通过wx.request接口来获取openid和密钥的。
返回说明:
//正常返回的JSON数据包
{
"openid": "OPENID",
"session_key": "SESSIONKEY"
}
//错误时返回JSON数据包(示例为Code无效)
{
"errcode": 40029,
"errmsg": "invalid code"
}
请发表评论