luodangjia
2024-11-28 06f455915bb9d11caa8829942f9007809ee9ae3d
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/weChat/WeChatUtil.java
@@ -1,203 +1,200 @@
//package com.ruoyi.account.util.weChat;
//
//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 lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.stereotype.Component;
//import java.util.HashMap;
//import java.util.Map;
//
///**
// * 微信工具类
// */
//@Slf4j
//@Component
//public class WeChatUtil {
//
//    @Value("${wx.appletsAppid}")
//    private String wxAppletsAppid;
//
//    @Value("${wx.appletsAppSecret}")
//    private String wxAppletsAppSecret;
//
//    @Value("{wx.officialAccountAppSecret}")
//    private String officialAccountAppSecret;
//
package com.ruoyi.account.util.weChat;
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 lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
/**
 * 微信工具类
 */
@Slf4j
@Component
public class WeChatUtil {
    @Value("${wx.appletsAppid}")
    private String wxAppletsAppid;
    @Value("${wx.appletsAppSecret}")
    private String wxAppletsAppSecret;
//    @Value("${wx.appid}")
//    private String webAppId;
//
    private String webAppId;
//    @Value("${wx.appSecret}")
//    private String webAppSecret;
//
//
    private String webAppSecret;
    /**
     * 小程序使用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;
    }
    /**
     * 获取微信小程序token
     * @return
     */
    public String getWxAppletsAccessToken() throws Exception{
        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;
    }
//    /**
//     * 小程序使用jscode获取openid
//     * @param jscode
//     * @return
//     * 获取小程序二维码
//     * @param page      跳转页 例如 pages/index/index
//     * @param scene     参数 a=1&b=2
//     */
//    public Map<String, Object> code2Session(String jscode) throws Exception{
//        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;
//    public InputStream getwxacodeunlimit(String page, String scene){
//        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);
//            HttpHeaders httpHeaders = new HttpHeaders();
//            MediaType type=MediaType.parseMediaType("application/json;charset=UTF-8");
//            httpHeaders.setContentType(type);
//            HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(param, httpHeaders);
//            ResponseEntity<String> exchange = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class, new Object[0]);
//            String body1 = exchange.getBody();
////            System.err.println(body1);
//            ResponseEntity<byte[]> entity  = restTemplate.exchange(url, HttpMethod.POST, requestEntity, byte[].class, new Object[0]);
//            byte[] body = entity.getBody();
////            System.err.println(Base64.encodeBase64String(body));
//            return new ByteArrayInputStream(body);
//        }catch (Exception e){
//            e.printStackTrace();
//        }
//        return null;
//    }
//
//
//    /**
//     * 获取微信小程序token
//     * @return
//     */
//    public String getWxAppletsAccessToken() throws Exception{
//        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){
////        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);
////            HttpHeaders httpHeaders = new HttpHeaders();
////            MediaType type=MediaType.parseMediaType("application/json;charset=UTF-8");
////            httpHeaders.setContentType(type);
////            HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(param, httpHeaders);
////            ResponseEntity<String> exchange = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class, new Object[0]);
////            String body1 = exchange.getBody();
//////            System.err.println(body1);
////            ResponseEntity<byte[]> entity  = restTemplate.exchange(url, HttpMethod.POST, requestEntity, byte[].class, new Object[0]);
////            byte[] body = entity.getBody();
//////            System.err.println(Base64.encodeBase64String(body));
////            return new ByteArrayInputStream(body);
////        }catch (Exception e){
////            e.printStackTrace();
////        }
////        return null;
////    }
//}
}