四步获取微信登录所需的openid和session_key

介绍

注意事项:
  • 必须是GET请求
  • 微信发送的code码只能使用一次

1、获取code并向服务器发送请求

注:http://localhost:8080/portal/blog/app/login对应第4步的控制器

 wx.login({
    
    
      success (res) {
    
    
        console.log(res);
        if (res.code) {
    
    
          //发起网络请求
          wx.request({
    
    
            url: 'http://localhost:8080/portal/blog/app/login', //自己服务器的地址
            data: {
    
    
              code: res.code //向自己服务器传递的code参数
            },
            method:'POST', //记得是post请求
            success(res){
    
    
			console.log(res);
            }
          })
        } else {
    
    
          console.log('登录失败!' + res.errMsg)
        }
      }
    })

2、引入发送HTTP请求的maven依赖

 <dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.13</version>
</dependency>

 <!-- JSON工具类 -->
<dependency>
   <groupId>com.fasterxml.jackson.core</groupId>
   <artifactId>jackson-databind</artifactId>
</dependency>

3、封装HTTP请求工具类

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.util.HashMap;

/**
 * 微信登录,获取openid
 * @author XinLiu
 */
@Component
public class WxHttpClient {
    
    
    private final static String BASE_URL = "https://api.weixin.qq.com/sns/jscode2session";

    private final static String appid = "自己的appid ";
    private final static String secret = "自己的secret ";

    public static HashMap<String, String> get(String appid, String secret, String code) throws IOException {
    
    
        String url = BASE_URL +
                "?appid=" +
                appid +
                "&secret=" +
                secret +
                "&js_code=" +
                code +
                "&grant_type=authorization_code";
        HttpGet httpGet = new HttpGet(url);
        CloseableHttpClient client = HttpClients.createDefault();
        CloseableHttpResponse response = client.execute(httpGet);

        HttpEntity entity = response.getEntity();
        String s = EntityUtils.toString(entity);
        JSONObject object = JSON.parseObject(s);
        String session_key = (String) object.get("session_key");
        String openid = (String) object.get("openid");
        HashMap<String, String> res = new HashMap<>();
        res.put("openid", openid);
        res.put("session_key", session_key);
        return res;
    }

    public static HashMap<String, String> get(String code) throws IOException {
    
    
        return get(appid, secret, code);
    }
}

4、编写控制器

@PostMapping("login")
public AjaxResult login(@RequestBody HashMap<String, String> code) throws IOException {
    
    
       HashMap<String, String> map = WxHttpClient.get(code.get("code"));
       System.out.println(map);
	 return AjaxResult.success();
 }

打印结果格式如下:

{
    
    openid=odfCW5Kz3SfxpydxJH7dIHiCUwSo, session_key=FvEoC08amf16G0texJaBcA==}

可以通过get(key)的方式取到值,具体如下:

String openid = map.get("openid");
String session_key = map.get("session_key");

System.out.println("openid: "+openid);
System.out.println("session_key: "+session_key);

结果:

openid: odfCW5Kz3SfxpydxJH7dIHiCUwSo
session_key: 9reHgOu+urg1W1tWI32GVA==

猜你喜欢

转载自blog.csdn.net/qq_43073558/article/details/120787108