From 72ec4bac1e080a7c6d2969ccd4a24bb0bc776c68 Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期三, 15 一月 2025 15:56:14 +0800
Subject: [PATCH] 修改
---
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/weChat/WeChatUtil.java | 246 +++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 246 insertions(+), 0 deletions(-)
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/weChat/WeChatUtil.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/weChat/WeChatUtil.java
new file mode 100644
index 0000000..caa7cce
--- /dev/null
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/weChat/WeChatUtil.java
@@ -0,0 +1,246 @@
+package com.ruoyi.account.util.weChat;
+
+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.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.ruoyi.common.redis.service.RedisService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.codec.binary.Base64;
+import org.apache.http.HttpHeaders;
+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 = JSON.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 = JSON.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 = JSON.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 = JSON.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(JSON.toJSONString(param));
+ HttpResponse execute = post.execute();
+ byte[] bytes = execute.bodyBytes();
+ String body1 = execute.body();
+ System.err.println(body1);
+ System.err.println(Base64.encodeBase64String(bytes));
+ 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();
+ }
+}
--
Gitblit v1.7.1