springboot中怎么获取用户openid
创始人
2024-12-22 19:01:50
0次

openid可以标识一个用户,session_key会变,所以来获取一下openid。

openid不能在微信小程序中直接获取,需要后台发送请求到微信的接口,然后微信返回一个json格式的字符串到后台,后台处理之后,再返回到微信小程序。

发布的小程序需要https的域名,而测试的时候可以使用http。

小程序在app.js中,修改login()中的内容:

// 登录  wx.login({   success: res => {    // 发送 res.code 到后台换取 openId, sessionKey, unionId    if (res.code) {     wx.request({      url: 'http://localhost:84/user/login',      method: 'POST',      data: {       code: res.code      },      header: {       'content-type': 'application/x-www-form-urlencoded'      },      success(res) {       console.log("openid:"+res.data.openid);       if (res.data.openid != "" || res.data.openid!=null){        // 登录成功        wx.setStorageSync("openid", res.data.openid);//将用户id保存到缓存中        wx.setStorageSync("session_key", res.data.session_key);//将session_key保存到缓存中       }else{        // 登录失败        // TODO 跳转到错误页面,要求用户重试        return false;       }      }     })    } else {     console.log('获取用户登录态失败!' + res.errMsg)    }   }  })

这里请求的http://localhost:84/user/login

后台的处理类:

package com.ft.feathertrade.handler;import com.fasterxml.jackson.databind.ObjectMapper;import com.ft.feathertrade.entity.OpenIdJson;import com.ft.feathertrade.utils.HttpUtil;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;import java.io.IOException;@RestControllerpublic class LoginHandler {  private String appID = "";  private String appSecret = "";  @PostMapping("/user/login")  public String userLogin(@RequestParam("code") String code) throws IOException {    String result = "";    try{//请求微信服务器,用code换取openid。HttpUtil是工具类,后面会给出实现,Configure类是小程序配置信息,后面会给出代码      result = HttpUtil.doGet(          "https://api.weixin.qq.com/sns/jscode2session?appid="              + this.appID + "&secret="              + this.appSecret + "&js_code="              + code              + "&grant_type=authorization_code", null);    }    catch (Exception e) {      e.printStackTrace();    }    ObjectMapper mapper = new ObjectMapper();    OpenIdJson openIdJson = mapper.readValue(result,OpenIdJson.class);    System.out.println(result.toString());    System.out.println(openIdJson.getOpenid());    return result;  }}

HttpUtil工具类:

package com.ft.feathertrade.utils;import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLEncoder;import java.util.HashMap;import java.util.Map.Entry;import java.util.Set;import org.apache.commons.httpclient.HttpStatus;//此类需要添加maven依赖或jar包/** 将此依赖添加到pom.xml中 commons-httpclient commons-httpclient 3.1 **/public class HttpUtil {  public static String doGet(String urlPath, HashMap params)      throws Exception {    StringBuilder sb = new StringBuilder(urlPath);    if (params != null && !params.isEmpty()) { // 说明有参数      sb.append("?");      Set> set = params.entrySet();      for (Entry entry : set) { // 遍历map里面的参数        String key = entry.getKey();        String value = "";        if (null != entry.getValue()) {          value = entry.getValue().toString();          // 转码          value = URLEncoder.encode(value, "UTF-8");        }        sb.append(key).append("=").append(value).append("&");      }      sb.deleteCharAt(sb.length() - 1); // 删除最后一个&    }    // System.out.println(sb.toString());    URL url = new URL(sb.toString());    HttpURLConnection conn = (HttpURLConnection) url.openConnection();    conn.setConnectTimeout(5000); // 5s超时    conn.setRequestMethod("GET");    if (conn.getResponseCode() == HttpStatus.SC_OK) {// HttpStatus.SC_OK ==      // 200      BufferedReader reader = new BufferedReader(new InputStreamReader(          conn.getInputStream()));      StringBuilder sbs = new StringBuilder();      String line;      while ((line = reader.readLine()) != null) {        sbs.append(line);      }      return sbs.toString();    }    return null;  }}

OpenIdJson的实体类:

package com.ft.feathertrade.entity;public class OpenIdJson {  private String openid;  private String session_key;  public String getOpenid() {    return openid;  }  public void setOpenid(String openid) {    this.openid = openid;  }  public String getSession_key() {    return session_key;  }  public void setSession_key(String session_key) {    this.session_key = session_key;  }}

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...