java后端集成微信扫码登录

本代码从项目复制出来的,未验证,请自行验证吧

工具类

复制代码
package com.jeeplus.modules.utils;

import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.*;
import org.springframework.web.client.RestTemplate;

@Slf4j
public class WXLoginUtil {
    private static final String APPID = "xxxxxxxxxxxx";
    private static final String APPSECRET = "xxxxxxxxxxxxxxxxxxxx";

    /**
     * @Title: getAccessToken
     * @Description: 获取接口调用凭证
     * @param: @return
     * @return: String
     */
    public static JSONObject getAccessToken(String code) {
        RestTemplate restTemplate = new RestTemplate();
        String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="
                + APPID + "&secret=" + APPSECRET + "&code=" + code + "&grant_type=authorization_code";

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
        HttpEntity<String> entity = new HttpEntity<String>(headers);
        ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.GET, entity, String.class);
        String body = responseEntity.getBody();
        // 返回结果转换为json对象
        JSONObject jObject = JSONObject.parseObject(body);
        return jObject;
    }

    public static JSONObject getUserInfo(String accessToken, String openid) {
        RestTemplate restTemplate = new RestTemplate();
        String url = "https://api.weixin.qq.com/sns/userinfo?access_token=" + accessToken + "&openid=" + openid + "&lang=zh_CN";

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
        HttpEntity<String> entity = new HttpEntity<String>(headers);
        String body = restTemplate.exchange(url, HttpMethod.GET, entity, String.class).getBody();
        // 返回结果转换为json对象
        JSONObject jObject = JSONObject.parseObject(body);
        System.out.println("jObject----------------"+jObject);


        return jObject;
    }
}
复制代码

调用的时候案例

复制代码
@RequestMapping("weixinLogin")
    public AjaxJson wxLogin(String accessToken, String openid) {
        AjaxJson json = new AjaxJson();
        // if (StringUtils.isBlank(accessToken)) return AjaxJson.error("accessToken不能为空");
        if (StringUtils.isBlank(openid)) return AjaxJson.error("openid不能为空");
        JSONObject userInfo = WXLoginUtil.getUserInfo(accessToken, openid);
        String unionid = userInfo.getString("unionid");
        System.out.println("unionid------------------------" + unionid);
        Member member = memberService.findOpenid(unionid);
        if (member == null) {
            json.setMsg("请绑定手机号");
            json.setCode(101);
            json.setSuccess(true);
            json.put("unionid", unionid);
            return json;
        }
        if (StringUtils.isNotBlank(member.getCompanyId())) {
            int sum = certificateService.findenterpriseId(member.getCompanyId()).size();
            member.setContents(sum);
        } else {
            member.setContents(0);
        }
        String token = JWTUtils.createAccessToken(member.getId(), member.getPhone(), member.getId());
        return AjaxJson.success("登录成功").put("token", token).put("user", member);
    }
复制代码

 

posted @   知行IT讲堂  阅读(665)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示