ghy-all/ghy-common/src/main/java/com/ghy/common/utils/WechatMsgUtils.java

147 lines
5.1 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.ghy.common.utils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.ghy.common.config.WxConfig;
import com.ghy.common.enums.WxMsgEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
/**
* @Author 但星霖
* @Date 2023-09-23 103541
* 说明:微信消息工具类
*/
@Slf4j
@Component
public class WechatMsgUtils {
@Autowired
private static WxConfig wxConfig;
static final String appid = "wx404f2439a8c24e15";
static final String appsecret = "49ade04a817067fe2d65ab2f17afce75";
/**
* 获取token
* token有效期暂定
* 方便后面存储为redis数据使用。
*/
public static String getToken() {
// 接口地址拼接参数
String getTokenApi = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + appsecret;
String tokenJsonStr = doGetPost(getTokenApi, "GET", null);
JSONObject tokenJson = JSONObject.parseObject(tokenJsonStr);
log.info("获取到的token返回json内容: {} ", tokenJson);
String token = tokenJson.get("access_token").toString();
log.info("获取到用户token:{}", token);
return token;
}
private void setConfig(String token){
}
/**
* 推送消息
*
* @param dataMap 消息内容
* @param mesType 消息类型-- 后面补充为枚举数据
* @param userOpenId 用户openId
* @param token 鉴权token信息
*/
public static void sendWeChatMsg(String token, String userOpenId, WxMsgEnum mesType, Map<String, Object> dataMap) {
// 接口地址
String sendMsgApi = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + token;
//整体参数map
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("touser", userOpenId);
paramMap.put("page", "index");
paramMap.put("template_id", mesType.getTempCode());
paramMap.put("url","");
Map<String, Object> miniprogram=new HashMap<>();
miniprogram.put("appid","");
miniprogram.put("pagepath","");
paramMap.put("miniprogram",miniprogram);
JSONObject jsonObject = new JSONObject();
for (Map.Entry<String, Object> objectEntry : dataMap.entrySet()) {
JSONObject model = new JSONObject();
model.put("value", objectEntry.getValue());
jsonObject.put(objectEntry.getKey(), model);
}
paramMap.put("data", jsonObject);
String reposont = doGetPost(sendMsgApi, "POST", paramMap);
log.info("reposont:{}", reposont);
log.info("用户:{}消息:{}推送返回谁:{}", userOpenId, paramMap.toString(),reposont);
}
/**
* 调用接口 post
*
* @param apiPath
*/
public static String doGetPost(String apiPath, String type, Map<String, Object> paramMap) {
OutputStreamWriter out = null;
InputStream is = null;
String result = null;
try {
// 创建连接
URL url = new URL(apiPath);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setUseCaches(false);
connection.setInstanceFollowRedirects(true);
// 设置请求方式
connection.setRequestMethod(type);
// 设置接收数据的格式
connection.setRequestProperty("Accept", "application/json");
// 设置发送数据的格式
connection.setRequestProperty("Content-Type", "application/json");
connection.connect();
if (type.equals("POST")) {
// utf-8编码
out = new OutputStreamWriter(connection.getOutputStream(), "UTF-8");
out.append(JSON.toJSONString(paramMap));
out.flush();
out.close();
}
// 读取响应
is = connection.getInputStream();
// 获取长度
int length = (int) connection.getContentLength();
if (length != -1) {
byte[] data = new byte[length];
byte[] temp = new byte[512];
int readLen = 0;
int destPos = 0;
while ((readLen = is.read(temp)) > 0) {
System.arraycopy(temp, 0, data, destPos, readLen);
destPos += readLen;
}
// utf-8编码
result = new String(data, "UTF-8");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return result;
}
}