微信小程序在哪里授权(进行微信小程序授权方法)

基础术语:

2. openId:用户唯一标识,同一用户在不同的应用中不一致

3. session_key:对用户数据进行加密签名的密钥

5. unionId:用户在开放平台的唯一标识符,同一用户在同一账号下的所有应用中一致

微信小程序在哪里授权(进行微信小程序授权方法)

得到验证结果,成功后能得到一个session_key和openid

生成一个自定义的key, 将session_key和openid跟自定义的key关联起来

每次请求都带上key, 后端根据key获取openid识别当前用户身份

对,你没有看错,就是这么的简单!这里我只分析后台代码(java)。

通过前台传过来的code,我们怎么知道,这个code是否有效?

这个是WechatUtil代码:

这个是HttpClientutil代码:

public class HttpClientUtil { public static String doGet(String url, Map<String, String> param) { // 创建Httpclient对象 CloseableHttpClient httpclient = HttpClients.createDefault(); String resultString = “”; CloseableHttpResponse response = null; try { // 创建uri URIBuilder builder = new URIBuilder(url); if (param != null) { for (String key : param.keySet()) { builder.addParameter(key, param.get(key)); } } URI uri = builder.build(); // 创建http GET请求 HttpGet httpGet = new HttpGet(uri); // 执行请求 response = httpclient.execute(httpGet); // 判断返回状态是否为200 if (response.getStatusLine().getStatusCode() == 200) { resultString = EntityUtils.toString(response.getEntity(), “UTF-8”); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (response != null) { response.close(); } httpclient.close(); } catch (IOException e) { e.printStackTrace(); } } return resultString; } public static String doGet(String url) { return doGet(url, null); } public static String doPost(String url, Map<String, String> param) { // 创建Httpclient对象 CloseableHttpClient httpClient = HttpClients.createDefault(); CloseableHttpResponse response = null; String resultString = “”; try { // 创建Http Post请求 HttpPost httpPost = new HttpPost(url); // 创建参数列表 if (param != null) { List<NameValuePair> paramList = new ArrayList<>(); for (String key : param.keySet()) { paramList.add(new BasicNameValuePair(key, param.get(key))); } // 模拟表单 UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList); httpPost.setEntity(entity); } // 执行http请求 response = httpClient.execute(httpPost); resultString = EntityUtils.toString(response.getEntity(), “utf-8”); } catch (Exception e) { e.printStackTrace(); } finally { try { if (ObjectUtil.isNotNull(response)){ response.close(); } } catch (IOException e) { e.printStackTrace(); } } return resultString; } public static String doPost(String url) { return doPost(url, null); } public static String doPostJson(String url, String json) { // 创建Httpclient对象 CloseableHttpClient httpClient = HttpClients.createDefault(); CloseableHttpResponse response = null; String resultString = “”; try { // 创建Http Post请求 HttpPost httpPost = new HttpPost(url); // 创建请求内容 StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON); httpPost.setEntity(entity); // 执行http请求 response = httpClient.execute(httpPost); resultString = EntityUtils.toString(response.getEntity(), “utf-8”); } catch (Exception e) { e.printStackTrace(); } finally { try { response.close(); } catch (IOException e) { e.printStackTrace(); } } return resultString; }}

注意:

临时登录凭证 code 只能使用一次

拿到openid之后,就可以处理我们的业务逻辑了,我推荐2种方式来做关联:

第一种:随机生成key, 关联openid,存入redis中,当请求带入key,直接从redis中获取openid得到当前用户信息,这个其实也就是我们自己去维护了会话信息

发表评论

登录后才能评论