第三方 app 登录微信

1.控制层

@RepeatSubmit
@GetMapping("/wxLogin")
@ApiOperation("微信登录")
public R wxLogin(String code) {
    Map result = WeiXinUtil.getAccessToken(code,wechatConfig.getAppid(),wechatConfig.getSecret());
    String accessToken = result.get("access_token").toString();
    String openid = result.get("openid").toString();
    Map userInfo = WeiXinUtil.getUserInfo(accessToken, openid);
    
    //业务处理

    return R.ok();
}

2.工具类

package com.dcqq.common.utils;

import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson2.JSONObject;
 
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Map;
 
/**
 * 微信登录工具类
 *
 * @author 
 * @date 2023/11/1 15:28
 */
public class WeiXinUtil {
    private static final String getAccessTokenUrl = "https://api.weixin.qq.com/sns/oauth2/access_token";
    private static final String refreshTokenUrl = "https://api.weixin.qq.com/sns/oauth2/refresh_token";
    private static final String getUserInfo = "https://api.weixin.qq.com/sns/userinfo";

 
    /**
     * 获取微信AccessToken
     * @param code 用户code
     * @return
     */
    public static Map<?, ?> getAccessToken(String code,String appid,String secret) {
        StringBuffer url = new StringBuffer();
        url.append(getAccessTokenUrl)
                .append("?appid=")
                .append(appid)
                .append("&secret=")
                .append(secret)
                .append("&code=")
                .append(code)
                .append("&grant_type=authorization_code");
        String rs = HttpUtil.get(url.toString());
        Map map = JSONObject.parseObject(rs, Map.class);
        if (null == map.get("errcode")) {
            return map;
        } else {
            throw new RuntimeException("获取access_token出错");
        }
    }
 
    /**
     * 刷新AccessToken
     * @param refreshToken
     * @return
     */
    public static Map refreshToken(String refreshToken,String appid) {
        StringBuffer url = new StringBuffer();
        url.append(refreshTokenUrl)
                .append("?appid=")
                .append(appid)
                .append("&grant_type=refresh_token&refresh_token=")
                .append(refreshToken);
        String rs = HttpUtil.get(url.toString());
        Map map = JSONObject.parseObject(rs, Map.class);
        if (null == map.get("errcode")) {
            return map;
        } else {
            throw new RuntimeException("刷新access_token出错");
        }
    }
 
    /**
     * 获取用户信息
     * @param accessToken
     * @param openid
     * @return
     */
    public static Map getUserInfo(String accessToken, String openid) {
        StringBuffer url = new StringBuffer();
        url.append(getUserInfo)
                .append("?access_token=")
                .append(accessToken)
                .append("&openid=")
                .append(openid)
                .append("&lang=zh_CN");
        String rs = HttpUtil.get(url.toString());
        Map map = JSONObject.parseObject(rs, Map.class);
        return map;
    }
}

3.引入http请求maven

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.27</version>
</dependency>

4.官方测试

https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index

相关推荐

  1. app 登录

    2024-04-24 13:28:02       43 阅读
  2. 登录以及小程序一键登录的实现方案

    2024-04-24 13:28:02       27 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-24 13:28:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-24 13:28:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-24 13:28:02       82 阅读
  4. Python语言-面向对象

    2024-04-24 13:28:02       91 阅读

热门阅读

  1. 第12天 static final

    2024-04-24 13:28:02       36 阅读
  2. vue3 -- 基于maptalks和threejs实现3D地图板块效果

    2024-04-24 13:28:02       29 阅读
  3. HTML 基础知识及面试题

    2024-04-24 13:28:02       38 阅读
  4. (一)Mysql创建一个博客相关的数据库

    2024-04-24 13:28:02       32 阅读
  5. springboot项目打war包,并且部署外部tomcat中

    2024-04-24 13:28:02       40 阅读
  6. 【Redis】Spring Boot应用中的Redis分布式锁示例

    2024-04-24 13:28:02       35 阅读
  7. windows、Mac如何安装vue开发环境?

    2024-04-24 13:28:02       37 阅读