From 5d7b65670282a4fad015e37d567cfa171b162052 Mon Sep 17 00:00:00 2001 From: huliguo <2023611923@qq.com> Date: 星期二, 20 五月 2025 12:25:19 +0800 Subject: [PATCH] 基础代码 --- pt-errand/src/main/java/com/ruoyi/errand/utils/WeChatUtil.java | 244 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 244 insertions(+), 0 deletions(-) diff --git a/pt-errand/src/main/java/com/ruoyi/errand/utils/WeChatUtil.java b/pt-errand/src/main/java/com/ruoyi/errand/utils/WeChatUtil.java new file mode 100644 index 0000000..8cf2513 --- /dev/null +++ b/pt-errand/src/main/java/com/ruoyi/errand/utils/WeChatUtil.java @@ -0,0 +1,244 @@ +package com.ruoyi.errand.utils; + +import cn.hutool.core.io.FileUtil; +import cn.hutool.http.Header; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import cn.hutool.http.HttpUtil; + + +import com.alibaba.fastjson2.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.codec.binary.Base64; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.InputStream; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +/** + * 微信工具类 + */ +@Slf4j +@Component +public class WeChatUtil { + + @Value("${wx.appletsAppid}") + private String wxAppletsAppid; + + @Value("${wx.appletsAppSecret}") + private String wxAppletsAppSecret; + +// @Value("${wx.appid}") + private String webAppId; + +// @Value("${wx.appSecret}") + private String webAppSecret; + + @Resource + private RedisService redisService; + + + + + /** + * 小程序使用jscode获取openid + * @param jscode + * @return + */ + public Map<String, Object> code2Session(String jscode) { + String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + wxAppletsAppid + "&secret=" + wxAppletsAppSecret + + "&js_code=" + jscode + "&grant_type=authorization_code"; + HttpRequest get = HttpUtil.createGet(url); + HttpResponse response = get.execute(); + int status = response.getStatus(); + if(200 != status){ + throw new RuntimeException(response.body()); + } + JSONObject jsonObject = JSONObject.parseObject(response.body()); + int errcode = jsonObject.getIntValue("errcode"); + Map<String, Object> map = new HashMap<>(); + map.put("errcode", errcode); + if(errcode == 0){//成功 + map.put("openid", jsonObject.getString("openid")); + map.put("sessionKey", jsonObject.getString("session_key")); + map.put("unionid", jsonObject.getString("unionid")); + return map; + } + if(errcode == -1){//系统繁忙,此时请开发者稍候再试 + map.put("msg", jsonObject.getString("errmsg")); + return map; + } + if(errcode == 40029){//code 无效 + map.put("msg", jsonObject.getString("errmsg")); + return map; + } + if(errcode == 45011){//频率限制,每个用户每分钟100次 + map.put("msg", jsonObject.getString("errmsg")); + return map; + } + return null; + } + + + public String getWxAppletsAccessToken(){ + Object wxAppletsAccessToken = redisService.getCacheObject("wxAppletsAccessToken"); + if(null != wxAppletsAccessToken){ + return wxAppletsAccessToken.toString(); + } + String appletsAccessToken = getAppletsAccessToken(); + redisService.setCacheObject("wxAppletsAccessToken", appletsAccessToken, 7200L, TimeUnit.SECONDS); + return appletsAccessToken; + } + + + /** + * 获取微信小程序token + * @return + */ + public String getAppletsAccessToken() { + String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + wxAppletsAppid + "&secret=" + wxAppletsAppSecret; + HttpRequest get = HttpUtil.createGet(url); + HttpResponse response = get.execute(); + if(response.getStatus() != 200){ + return ""; + } + JSONObject jsonObject = JSONObject.parseObject(response.body()); + return jsonObject.getString("access_token"); + } + + + /** + * 网站应用登录 + * @param code + * @return + */ + public Map<String, String> webAccessToken(String code) throws Exception{ + String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + webAppId + "&secret=" + webAppSecret + "&code=" + code + "&grant_type=authorization_code"; + HttpRequest get = HttpUtil.createGet(url); + HttpResponse response = get.execute(); + if(response.getStatus() != 200){ + return null; + } + JSONObject jsonObject = JSONObject.parseObject(response.body()); + int errcode = jsonObject.getIntValue("errcode"); + Map<String, String> map = new HashMap<>(); + if(errcode == 0){//成功 + map.put("access_token", jsonObject.getString("access_token")); + map.put("openid", jsonObject.getString("openid")); + map.put("refresh_token", jsonObject.getString("refresh_token")); + map.put("unionid", jsonObject.getString("unionid")); + return map; + } + if(errcode == -1){//系统繁忙,此时请开发者稍候再试 + map.put("msg", jsonObject.getString("errmsg")); + return map; + } + if(errcode == 40029){//code 无效 + map.put("msg", jsonObject.getString("errmsg")); + return map; + } + if(errcode == 45011){//频率限制,每个用户每分钟100次 + map.put("msg", jsonObject.getString("errmsg")); + return map; + } + return map; + } + + + /** + * 获取微信个人信息 + * @param access_token + * @param openid + * @return + */ + public Map<String, Object> getUserInfo(String access_token, String openid) throws Exception{ + String url = "https://api.weixin.qq.com/sns/userinfo?access_token=" + access_token + "&openid=" + openid; + HttpRequest get = HttpUtil.createGet(url); + HttpResponse response = get.execute(); + if(response.getStatus() != 200){ + return null; + } + JSONObject jsonObject = JSONObject.parseObject(response.body()); + int errcode = jsonObject.getIntValue("errcode"); + Map<String, Object> map = new HashMap<>(); + if(errcode == 0){//成功 + map.put("nickname", jsonObject.getString("nickname")); + map.put("openid", jsonObject.getString("openid")); + map.put("sex", jsonObject.getString("sex")); + map.put("headimgurl", jsonObject.getString("headimgurl")); + return map; + } + if(errcode == -1){//系统繁忙,此时请开发者稍候再试 + map.put("msg", jsonObject.getString("errmsg")); + return map; + } + if(errcode == 40029){//code 无效 + map.put("msg", jsonObject.getString("errmsg")); + return map; + } + if(errcode == 45011){//频率限制,每个用户每分钟100次 + map.put("msg", jsonObject.getString("errmsg")); + return map; + } + return map; + } + + + + + /** + * 获取小程序二维码 + * @param page 跳转页 例如 pages/index/index + * @param scene 参数 a=1&b=2 + */ +/* public InputStream getwxacodeunlimit(String page, String scene, EnvVersion env_version){ + try { + String token = getWxAppletsAccessToken(); + if(StringUtils.isEmpty(token)){ + System.err.println("获取接口调用凭证失败"); + } + String url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + token; + Map<String, Object> param = new HashMap<>(); + param.put("scene", scene); + param.put("page", page); + param.put("env_version", env_version.getVersion()); + + HttpRequest post = HttpUtil.createPost(url); + post.header(Header.CONTENT_TYPE, "application/json;charset=UTF-8"); + post.body(JSONObject.toJSONString(param)); + HttpResponse execute = post.execute(); + byte[] bytes = execute.bodyBytes(); + String body1 = execute.body(); + return new ByteArrayInputStream(bytes); + }catch (Exception e){ + e.printStackTrace(); + } + return null; + } + */ + + /** + * 获取微信小程序二维码 + * @param page + * @param scene + * @param filePath + * @return + */ + /* public String getwxacodeunlimit(String page, String scene, EnvVersion env_version, String filePath){ + InputStream getwxacodeunlimit = getwxacodeunlimit(page, scene, env_version); +// File file = FileUtil.writeFromStream(getwxacodeunlimit, new File(filePath)); +// return file.getPath(); + return ObsUploadUtil.obsUpload("png", getwxacodeunlimit); + }*/ +} -- Gitblit v1.7.1