微信小程序之登录
在使用微信提供的相关功能之前小程序需要进行登录操作,通过登录操作可以换取openId和session_key。其中openId是微信官方为每个使用者提供的唯一标识符,session_key被使用于加密相关操作。
微信小程序针对登录过程给出了比较完善的说明,如下图:
如图所示,微信小程序的登录首先客户端调用wx.login()方法获取到登录凭证code。然后再通过code获取用户openId和sessin_key信息。
首先我们需要获取登录凭证:
wx.login({
success: res => {
// 获取到用户的 code 之后:res.code
console.log("用户的code:" + res.code);
// 可以传给后台,再经过解析获取用户的 openid
// 或者可以直接使用微信的提供的接口直接获取 openid ,方法如下:
wx.request({
url: //你的服务器
success: res => {
//登录成功的业务操作
}
});
}
});
在登陆成功后,小程序客户端向服务器发送code,用于换取登录详细信息。用户服务器需要向微信指定段端口发送获取请求。该过程如下:
//构建请求参数
Map<String, String> map = new HashMap<String, String>();
map.put("appid", appid);//微信小程序appid
map.put("secret", secret);//用户设置的密钥
map.put("js_code", js_code); //获取订单code
map.put("grant_type", "authorization_code");//固定格式
//以上参数构建成功后需要向“api.weixin.qq.com/sns/jscode2session”发送get请求
String url = "api.weixin.qq.com/sns/jscode2session";
String result = restMock.sendGet(url, map);//使用RestTemplate发送get请求并获取到返回结果
/*
* 该get请求将返回给用户json格式的三个参数:
* openId:用户唯一标识符
* session_key:会话密钥
* unionid:未知
*
* 处理请求结果的过程如下:
* 如果openId字符串非空,则证明登录成功,可以返回登录成功给客户端,以便微信小程序进行后续操作。
*/
JSONObject jsonObject = JSONObject.parseObject(result);
String openid = jsonObject.getString("openid");
String session_key = jsonObject.getString("session_key");
截至到目前位置登录操作就完成了。总结一下微信小程序的登录过程。具体分析如下:
- 调用wx.login()方法,如果该方法成功了则将code发送给用户服务器
- 将code,appId,sercet,grant_type,四个参数以get请求的方式发送给“api.weixin.qq.com/sns/jscode2session”。值得注意的是该过程是以get请求进行的,因此以上四个参数实际上是被拼接到了url里面发送的。注意参数大小写。
- 获取get请求的返回结果,该结果是已json形式返回的,因此可以使用fastjson库来处理,返回的参数有三种,其中openid 和session_key需要着重关心。注意大小写!
总体来说微信小程序的登录过程并不复杂,但是需格外注意的是参数上的大小写问题。