我们知道微信小程序对于微信登录的设计其实是给到了一个微信login的功能接口,其中响应成功会返回一个临时凭证码(时间大概是5分钟)code,这个临时的凭证码是从https://api.weixin.qq.com/sns/jscode2session获取openId的必带参数。下图示微信登录过程的时序图:
这里我们只介绍到第三方服务器得到openId与session_key之前的处理,至于后面的做登录态校验的业务和大家自己的需求有关,一般情况下自己测试着玩,不需要加上图片上说的加密算法进行登录态的小程序缓存存储。
1、获取code,直接在小程序某一个按钮触发事件添加JS函数,函数内部加上类似代码:
wx.login(){
success(res){
wx.request(){
url: ‘第三方服务器的url(本地跑后端项目的话就是本地ip与端口)’
......省略header与method
data:{
code: res.data.code
}
......省略登录获取响应的判断方法
}
}
}
2、wx.request()请求已经发出,第三方服务器进行响应,处理逻辑:
requestUtils.getWeChatOPenId(appinfo.getAppId(), appinfo.getAppSecrtet(), code);
直接将需要的参数获取给到处理方法,方法返回的是openId的值。
我们来看这个处理的方法:文章来源:https://www.toymoban.com/news/detail-496569.html
/**
* 请求工具类封装请求方法
*/
@Component
public class RequestUtils {
/**
* 获取微信小程序openid
*
* @param AppId 小程序Id
* @param AppSecret 小程序密钥
* @param code 小程序wx.login接口返回的临时的临时状态码
* @return openid
*/
public String getWeChatOPenId(String AppId, String AppSecret, String code) {
try {
/*1.拼接微信登录获取openId所需要访问的URL*/
StringBuilder URL = new StringBuilder(WeChatConfig.loginUrl).append("?appId=").append(AppId).
append("&secret=").append(AppSecret).append("&js_code=").append(code).
append("&grant_type=authorization_code");
/*2.创建http连接的客户端对象*/
BasicHttpClientConnectionManager connectionManager;
connectionManager = new BasicHttpClientConnectionManager(
RegistryBuilder.<ConnectionSocketFactory>create().
register("http", PlainConnectionSocketFactory.getSocketFactory())
.register("https", SSLConnectionSocketFactory.getSocketFactory())
.build(), null, null, null
);
CloseableHttpClient httpClient = HttpClientBuilder.create().
setConnectionManager(connectionManager)
.build();
HttpGet httpGet = new HttpGet(URL.toString());
/*3.执行访问一次请求获取响应体内容*/
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity entity = httpResponse.getEntity();
String s = EntityUtils.toString(entity, "UTF-8");
JSONObject jsonObject = new JSONObject(s);
/*4.从响应体中拿到openId并返回*/
return jsonObject.get("openid").toString();
} catch (Exception e) {
System.out.println("---------小程序获取微信登录openId异常--------");
e.printStackTrace();
}
/*出现异常即返回null*/
return null;
}
}
其中的四步处理法,但是这样做出来的微信登录处理逻辑,我觉得耗时上是一个问题。目前还没有很好的优化方案。文章来源地址https://www.toymoban.com/news/detail-496569.html
到了这里,关于关于小程序微信登录后端设计的一点分享的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!