Browse Source

微信机器人发送消息

tall3
zy_Java 4 years ago
parent
commit
c2970b2318
  1. 336
      signin/src/main/java/com/ccsens/signin/util/WxTemplateUtil.java
  2. 64
      util/src/main/java/com/ccsens/util/HttpsUtil.java
  3. 20
      wechatutil/src/main/java/com/ccsens/wechatutil/api/DebugController.java
  4. 5
      wechatutil/src/main/java/com/ccsens/wechatutil/api/WxController.java
  5. 6
      wechatutil/src/main/java/com/ccsens/wechatutil/bean/dto/WechatCode.java
  6. 46
      wechatutil/src/main/java/com/ccsens/wechatutil/bean/dto/WxMessageDto.java
  7. 70
      wechatutil/src/main/java/com/ccsens/wechatutil/bean/dto/WxTemplateMessage.java
  8. 4
      wechatutil/src/main/java/com/ccsens/wechatutil/service/IWxMessageService.java
  9. 3
      wechatutil/src/main/java/com/ccsens/wechatutil/service/IWxService.java
  10. 92
      wechatutil/src/main/java/com/ccsens/wechatutil/service/WxMessageService.java
  11. 22
      wechatutil/src/main/java/com/ccsens/wechatutil/service/WxService.java
  12. 4
      wechatutil/src/main/resources/application-dev.yml

336
signin/src/main/java/com/ccsens/signin/util/WxTemplateUtil.java

@ -1,168 +1,168 @@
package com.ccsens.signin.util; //package com.ccsens.signin.util;
//
import cn.hutool.core.date.DateUtil; //import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil; //import cn.hutool.core.util.StrUtil;
import com.ccsens.util.WechatUtil; //import com.ccsens.util.WechatUtil;
import com.ccsens.util.wx.WxGzhUtil; //import com.ccsens.util.wx.WxGzhUtil;
import com.ccsens.util.wx.WxTemplateMessage; //import com.ccsens.util.wx.WxTemplateMessage;
//
//
/** ///**
* @description: 微信模板 // * @description: 微信模板
* @author: whj // * @author: whj
* @time: 2020/6/9 11:07 // * @time: 2020/6/9 11:07
*/ // */
public class WxTemplateUtil { //public class WxTemplateUtil {
//
/** // /**
* 设置小程序跳转 // * 设置小程序跳转
* @param projectId // * @param projectId
* @return // * @return
*/ // */
private static WxTemplateMessage getWxTemplateMessage(Long projectId) { // private static WxTemplateMessage getWxTemplateMessage(Long projectId) {
String url = String.format(WechatUtil.PROJECT_URL, projectId); // String url = String.format(WechatUtil.PROJECT_URL, projectId);
WxTemplateMessage.MiniProgram miniProgram = new WxTemplateMessage.MiniProgram(WechatUtil.appid,url); // WxTemplateMessage.MiniProgram miniProgram = new WxTemplateMessage.MiniProgram(WechatUtil.appid,url);
//
WxTemplateMessage message = new WxTemplateMessage(); // WxTemplateMessage message = new WxTemplateMessage();
message.setMiniprogram(miniProgram); // message.setMiniprogram(miniProgram);
return message; // return message;
} // }
//
/** // /**
* 完成任务提醒(备注是在切面处统一加的) // * 完成任务提醒(备注是在切面处统一加的)
* @param projectId // * @param projectId
* @param userName // * @param userName
* @param operation // * @param operation
* @param taskName // * @param taskName
* @return // * @return
*/ // */
public static WxTemplateMessage getFinishTask(Long projectId, String userName, String operation, String taskName){ // public static WxTemplateMessage getFinishTask(Long projectId, String userName, String operation, String taskName){
//
WxTemplateMessage message = getWxTemplateMessage(projectId); // WxTemplateMessage message = getWxTemplateMessage(projectId);
message.setTemplate_id(WxGzhUtil.Template.TASK_FINISH.templateId); // message.setTemplate_id(WxGzhUtil.Template.TASK_FINISH.templateId);
WxTemplateMessage.TemplateData data = new WxTemplateMessage.TemplateData(); // WxTemplateMessage.TemplateData data = new WxTemplateMessage.TemplateData();
data.setFirst(new WxTemplateMessage.TemplateSettings(userName + operation + taskName)); // data.setFirst(new WxTemplateMessage.TemplateSettings(userName + operation + taskName));
data.setKeyword1(new WxTemplateMessage.TemplateSettings(taskName)); // data.setKeyword1(new WxTemplateMessage.TemplateSettings(taskName));
data.setKeyword2(new WxTemplateMessage.TemplateSettings(DateUtil.now())); // data.setKeyword2(new WxTemplateMessage.TemplateSettings(DateUtil.now()));
message.setData(data); // message.setData(data);
return message; // return message;
} // }
//
//
/** // /**
* 添加任务(备注是在切面处统一加的) // * 添加任务(备注是在切面处统一加的)
* @param projectId // * @param projectId
* @param userName // * @param userName
* @param taskName // * @param taskName
* @return // * @return
*/ // */
public static WxTemplateMessage getAddTask(Long projectId, String userName, String taskName) { // public static WxTemplateMessage getAddTask(Long projectId, String userName, String taskName) {
WxTemplateMessage message = getWxTemplateMessage(projectId); // WxTemplateMessage message = getWxTemplateMessage(projectId);
message.setTemplate_id(WxGzhUtil.Template.TASK_ADD.templateId); // message.setTemplate_id(WxGzhUtil.Template.TASK_ADD.templateId);
WxTemplateMessage.TemplateData data = new WxTemplateMessage.TemplateData(); // WxTemplateMessage.TemplateData data = new WxTemplateMessage.TemplateData();
data.setFirst(new WxTemplateMessage.TemplateSettings(StrUtil.format("{}添加了{}任务", userName, taskName))); // data.setFirst(new WxTemplateMessage.TemplateSettings(StrUtil.format("{}添加了{}任务", userName, taskName)));
data.setKeyword1(new WxTemplateMessage.TemplateSettings(taskName)); // data.setKeyword1(new WxTemplateMessage.TemplateSettings(taskName));
data.setKeyword2(new WxTemplateMessage.TemplateSettings(DateUtil.now())); // data.setKeyword2(new WxTemplateMessage.TemplateSettings(DateUtil.now()));
message.setData(data); // message.setData(data);
return message; // return message;
} // }
//
/** // /**
* 删除任务 // * 删除任务
* @param projectId // * @param projectId
* @param userName // * @param userName
* @param taskName // * @param taskName
* @return // * @return
*/ // */
public static WxTemplateMessage getDeleteTask(Long projectId, String userName, String taskName) { // public static WxTemplateMessage getDeleteTask(Long projectId, String userName, String taskName) {
WxTemplateMessage message = getWxTemplateMessage(projectId); // WxTemplateMessage message = getWxTemplateMessage(projectId);
message.setTemplate_id(WxGzhUtil.Template.TASK_DELETE.templateId); // message.setTemplate_id(WxGzhUtil.Template.TASK_DELETE.templateId);
WxTemplateMessage.TemplateData data = new WxTemplateMessage.TemplateData(); // WxTemplateMessage.TemplateData data = new WxTemplateMessage.TemplateData();
data.setFirst(new WxTemplateMessage.TemplateSettings(StrUtil.format("{}删除了{}任务", userName, taskName))); // data.setFirst(new WxTemplateMessage.TemplateSettings(StrUtil.format("{}删除了{}任务", userName, taskName)));
data.setKeyword1(new WxTemplateMessage.TemplateSettings(taskName)); // data.setKeyword1(new WxTemplateMessage.TemplateSettings(taskName));
data.setKeyword2(new WxTemplateMessage.TemplateSettings(DateUtil.now())); // data.setKeyword2(new WxTemplateMessage.TemplateSettings(DateUtil.now()));
data.setKeyword3(new WxTemplateMessage.TemplateSettings("")); // data.setKeyword3(new WxTemplateMessage.TemplateSettings(""));
message.setData(data); // message.setData(data);
return message; // return message;
} // }
//
/** // /**
* 修改任务 // * 修改任务
* @param projectId // * @param projectId
* @param userName // * @param userName
* @param taskName // * @param taskName
* @return // * @return
*/ // */
public static WxTemplateMessage getChangeTask(Long projectId, String userName, String taskName) { // public static WxTemplateMessage getChangeTask(Long projectId, String userName, String taskName) {
WxTemplateMessage message = getAddTask(projectId, userName, taskName); // WxTemplateMessage message = getAddTask(projectId, userName, taskName);
message.getData().setFirst(new WxTemplateMessage.TemplateSettings(StrUtil.format("{}修改了{}任务", userName, taskName))); // message.getData().setFirst(new WxTemplateMessage.TemplateSettings(StrUtil.format("{}修改了{}任务", userName, taskName)));
return message; // return message;
} // }
//
/** // /**
* 上传交付物 // * 上传交付物
* @param projectId // * @param projectId
* @param userName // * @param userName
* @param deliverName // * @param deliverName
* @return // * @return
*/ // */
public static WxTemplateMessage getAddDeliver(Long projectId, String userName, String deliverName) { // public static WxTemplateMessage getAddDeliver(Long projectId, String userName, String deliverName) {
WxTemplateMessage message = getWxTemplateMessage(projectId); // WxTemplateMessage message = getWxTemplateMessage(projectId);
message.setTemplate_id(WxGzhUtil.Template.TASK_PROGRESS.templateId); // message.setTemplate_id(WxGzhUtil.Template.TASK_PROGRESS.templateId);
WxTemplateMessage.TemplateData data = new WxTemplateMessage.TemplateData(); // WxTemplateMessage.TemplateData data = new WxTemplateMessage.TemplateData();
data.setFirst(new WxTemplateMessage.TemplateSettings("")); // data.setFirst(new WxTemplateMessage.TemplateSettings(""));
data.setKeyword1(new WxTemplateMessage.TemplateSettings(userName + "上传了" + deliverName)); // data.setKeyword1(new WxTemplateMessage.TemplateSettings(userName + "上传了" + deliverName));
data.setKeyword2(new WxTemplateMessage.TemplateSettings("上传交付物")); // data.setKeyword2(new WxTemplateMessage.TemplateSettings("上传交付物"));
message.setData(data); // message.setData(data);
return message; // return message;
} // }
//
/** // /**
* 删除交付物 // * 删除交付物
* @param projectId // * @param projectId
* @param userName // * @param userName
* @param deliverName // * @param deliverName
* @return // * @return
*/ // */
public static WxTemplateMessage getDeleteDeliver(Long projectId, String userName, String deliverName) { // public static WxTemplateMessage getDeleteDeliver(Long projectId, String userName, String deliverName) {
WxTemplateMessage message = getAddDeliver(projectId, userName, deliverName); // WxTemplateMessage message = getAddDeliver(projectId, userName, deliverName);
WxTemplateMessage.TemplateData data = message.getData(); // WxTemplateMessage.TemplateData data = message.getData();
data.setKeyword1(new WxTemplateMessage.TemplateSettings(userName + "删除了" + deliverName)); // data.setKeyword1(new WxTemplateMessage.TemplateSettings(userName + "删除了" + deliverName));
data.setKeyword2(new WxTemplateMessage.TemplateSettings("删除交付物")); // data.setKeyword2(new WxTemplateMessage.TemplateSettings("删除交付物"));
message.setData(data); // message.setData(data);
return message; // return message;
} // }
//
/** // /**
* 检查交付物 // * 检查交付物
* @param projectId // * @param projectId
* @param userName // * @param userName
* @param deliverName // * @param deliverName
* @return // * @return
*/ // */
public static WxTemplateMessage getCheckDeliver(Long projectId, String userName, String deliverName) { // public static WxTemplateMessage getCheckDeliver(Long projectId, String userName, String deliverName) {
WxTemplateMessage message = getAddDeliver(projectId, userName, deliverName); // WxTemplateMessage message = getAddDeliver(projectId, userName, deliverName);
WxTemplateMessage.TemplateData data = message.getData(); // WxTemplateMessage.TemplateData data = message.getData();
data.setKeyword1(new WxTemplateMessage.TemplateSettings(userName + "检查了" + deliverName)); // data.setKeyword1(new WxTemplateMessage.TemplateSettings(userName + "检查了" + deliverName));
data.setKeyword2(new WxTemplateMessage.TemplateSettings("检查交付物")); // data.setKeyword2(new WxTemplateMessage.TemplateSettings("检查交付物"));
message.setData(data); // message.setData(data);
return message; // return message;
} // }
//
/** // /**
* 发表评论 // * 发表评论
* @param projectId // * @param projectId
* @param userName // * @param userName
* @return // * @return
*/ // */
public static WxTemplateMessage getAddComment(Long projectId, String userName) { // public static WxTemplateMessage getAddComment(Long projectId, String userName) {
WxTemplateMessage message = getWxTemplateMessage(projectId); // WxTemplateMessage message = getWxTemplateMessage(projectId);
message.setTemplate_id(WxGzhUtil.Template.TASK_PROGRESS.templateId); // message.setTemplate_id(WxGzhUtil.Template.TASK_PROGRESS.templateId);
WxTemplateMessage.TemplateData data = new WxTemplateMessage.TemplateData(); // WxTemplateMessage.TemplateData data = new WxTemplateMessage.TemplateData();
data.setFirst(new WxTemplateMessage.TemplateSettings(userName + "进行了点评")); // data.setFirst(new WxTemplateMessage.TemplateSettings(userName + "进行了点评"));
data.setKeyword1(new WxTemplateMessage.TemplateSettings(userName)); // data.setKeyword1(new WxTemplateMessage.TemplateSettings(userName));
data.setKeyword2(new WxTemplateMessage.TemplateSettings(DateUtil.now())); // data.setKeyword2(new WxTemplateMessage.TemplateSettings(DateUtil.now()));
message.setData(data); // message.setData(data);
return message; // return message;
} // }
} //}

64
util/src/main/java/com/ccsens/util/HttpsUtil.java

@ -20,6 +20,8 @@ import java.net.URLConnection;
import java.security.KeyStore; import java.security.KeyStore;
import java.security.cert.CertificateException; import java.security.cert.CertificateException;
import java.security.cert.X509Certificate; import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.List;
/** /**
* 类名: MyX509TrustManager </br> * 类名: MyX509TrustManager </br>
@ -100,6 +102,68 @@ public class HttpsUtil {
return buffer == null ? null : buffer.toString(); return buffer == null ? null : buffer.toString();
} }
/**
* 发送https请求
*
* @param requestUrl 请求地址
* @param requestMethod 请求方式GETPOST
* @param postStr 提交的数据
* @return String(Json)
*/
public static byte[] httpsRequestByte(String requestUrl, String requestMethod, String postStr) throws Exception {
// 创建SSLContext对象,并使用我们指定的信任管理器初始化
TrustManager[] tm = {new MyX509TrustManager()};
SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
sslContext.init(null, tm, new java.security.SecureRandom());
// 从上述SSLContext对象中得到SSLSocketFactory对象
SSLSocketFactory ssf = sslContext.getSocketFactory();
URL url = new URL(requestUrl);
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setSSLSocketFactory(ssf);
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
// 设置请求方式(GET/POST)
conn.setRequestMethod(requestMethod);
// 当outputStr不为null时向输出流写数据
if (null != postStr) {
OutputStream outputStream = conn.getOutputStream();
// 注意编码格式
outputStream.write(postStr.getBytes("UTF-8"));
outputStream.close();
}
// 从输入流读取返回内容
InputStream inputStream = conn.getInputStream();
// InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
// BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
int length = 1024;
List<byte[]> buffer = new ArrayList<>();
byte[] temp = new byte[length];
int i = 0;
while ((length = inputStream.read(temp)) > 0) {
i += length;
byte[] temp2 = new byte[length];
System.arraycopy(temp,0,temp2,0,length);
buffer.add(temp2);
}
// 释放资源
inputStream.close();
conn.disconnect();
byte[] t = new byte[i];
int j = 0;
for (byte[] b : buffer){
System.arraycopy(b,0,t,j,b.length);
j += b.length;
}
return t;
}
/** /**
* 发送https请求 * 发送https请求
* *

20
wechatutil/src/main/java/com/ccsens/wechatutil/api/DebugController.java

@ -1,6 +1,10 @@
package com.ccsens.wechatutil.api; package com.ccsens.wechatutil.api;
import cn.hutool.core.date.DateUtil;
import com.ccsens.util.JsonResponse; import com.ccsens.util.JsonResponse;
import com.ccsens.util.PropUtil;
import com.ccsens.util.WebConstant;
import com.ccsens.util.wx.WxXcxUtil;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
@ -27,4 +31,20 @@ public class DebugController {
return JsonResponse.newInstance().ok("测试"); return JsonResponse.newInstance().ok("测试");
} }
@ApiOperation(value = "/测试",notes = "")
@ApiImplicitParams({
})
@RequestMapping(value="code",method = RequestMethod.GET,produces = {"application/json;charset=UTF-8"})
public JsonResponse debugWxCode(HttpServletRequest request) throws Exception {
//生成二维码
String fileName = "/gameQrCode/" + DateUtil.today() + "/" + System.currentTimeMillis() + ".png";
String path = WebConstant.UPLOAD_PATH_BASE + fileName;
WxXcxUtil.getWxCode(WebConstant.QRCODE_GAME, "id=1&type=SQ", null, path, "SQ");
// WxXcxUtil.getWxCodeC(WebConstant.QRCODE_GAME+"?id=" + gameRecord.getId() + "&type=" + gameType.getCode(), path, gameType.getCode());
// gameRecord.setQrCodeUrl(PropUtil.qrCode + fileName);
log.info("调用微信生成二维码");
return JsonResponse.newInstance().ok("测试");
}
} }

5
wechatutil/src/main/java/com/ccsens/wechatutil/api/WxController.java

@ -4,7 +4,7 @@ import com.ccsens.util.JsonResponse;
import com.ccsens.wechatutil.service.IWxService; import com.ccsens.wechatutil.service.IWxService;
import com.ccsens.wechatutil.bean.po.MiniProgramUser; import com.ccsens.wechatutil.bean.po.MiniProgramUser;
import com.ccsens.wechatutil.bean.po.WxOauth2UserInfo; import com.ccsens.wechatutil.bean.po.WxOauth2UserInfo;
import com.ccsens.wechatutil.bean.vo.WechatCode; import com.ccsens.wechatutil.bean.dto.WechatCode;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiParam;
@ -53,6 +53,9 @@ public class WxController {
@ApiOperation(value = "生成小程序码-方案B", notes = "公众号/网页二维码") @ApiOperation(value = "生成小程序码-方案B", notes = "公众号/网页二维码")
@RequestMapping(value = "/getWxCodeB", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) @RequestMapping(value = "/getWxCodeB", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse getWxCodeB(@ApiParam @Validated WechatCode.WechatCodeB wechatCodeB,String path) throws Exception{ public JsonResponse getWxCodeB(@ApiParam @Validated WechatCode.WechatCodeB wechatCodeB,String path) throws Exception{
wechatCodeB = new WechatCode.WechatCodeB();
wechatCodeB.setScene("id=1&type=SQ");
wechatCodeB.setPage("pages/index/index");
miniProgramService.getWxCodeB(wechatCodeB,path); miniProgramService.getWxCodeB(wechatCodeB,path);
return JsonResponse.newInstance().ok(); return JsonResponse.newInstance().ok();
} }

6
wechatutil/src/main/java/com/ccsens/wechatutil/bean/vo/WechatCode.java → wechatutil/src/main/java/com/ccsens/wechatutil/bean/dto/WechatCode.java

@ -1,4 +1,4 @@
package com.ccsens.wechatutil.bean.vo; package com.ccsens.wechatutil.bean.dto;
import lombok.Data; import lombok.Data;
@ -10,6 +10,7 @@ public class WechatCode {
/** /**
* 获取小程序码--方案A * 获取小程序码--方案A
*/ */
@Data
public static class WechatCodeA{ public static class WechatCodeA{
// 扫码进入的小程序页面路径,最大长度 128 字节,不能为空; // 扫码进入的小程序页面路径,最大长度 128 字节,不能为空;
public String path; public String path;
@ -26,6 +27,7 @@ public class WechatCode {
/** /**
* 获取小程序码--方案B * 获取小程序码--方案B
*/ */
@Data
public static class WechatCodeB{ public static class WechatCodeB{
//参数 --最大32个可见字符 //参数 --最大32个可见字符
public String scene; public String scene;
@ -44,6 +46,7 @@ public class WechatCode {
/** /**
* rgb颜色 * rgb颜色
*/ */
@Data
public static class LineColor{ public static class LineColor{
public String r; public String r;
public String g; public String g;
@ -53,6 +56,7 @@ public class WechatCode {
/** /**
* 获取小程序码--方案C * 获取小程序码--方案C
*/ */
@Data
public static class WechatCodeC{ public static class WechatCodeC{
// 扫码进入的小程序页面路径,最大长度 128 字节,不能为空; // 扫码进入的小程序页面路径,最大长度 128 字节,不能为空;
public String path; public String path;

46
wechatutil/src/main/java/com/ccsens/wechatutil/bean/dto/WxMessageDto.java

@ -0,0 +1,46 @@
package com.ccsens.wechatutil.bean.dto;
import lombok.Data;
import java.util.List;
/**
* @author
*/
@Data
public class WxMessageDto {
/**
* 微信机器人发送消息
*/
@Data
public static class RobotMessage{
//机器人地址
public String webHook;
//消息的内容
public String content;
//消息格式
public String msgType;
//通过id@群内人员
public List<String> mentionedList;
//通过手机号@群内人员
public List<String> mentionedMobileList;
}
@Data
public static class WxRobotVo{
private String msgtype;
private WxRobotText text;
private WxRobotMarkdown markdown;
}
@Data
public static class WxRobotText{
private String content;
private List<String> mentioned_list;
private List<String> mentioned_mobile_list;
}
@Data
public static class WxRobotMarkdown{
private String content;
}
}

70
wechatutil/src/main/java/com/ccsens/wechatutil/bean/dto/WxTemplateMessage.java

@ -0,0 +1,70 @@
package com.ccsens.wechatutil.bean.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotNull;
/**
* @description:
* @author: whj
* @time: 2020/6/9 9:59
*/
@ApiModel("微信模板消息")
@Data
public class WxTemplateMessage {
@NotNull
@ApiModelProperty("接收者openid")
private String touser;
@NotNull
@ApiModelProperty("模板ID")
private String template_id;
@ApiModelProperty("模板跳转链接(海外帐号没有跳转能力)")
private String url;
@ApiModelProperty("小程序")
private MiniProgram miniprogram;
@ApiModelProperty("模板数据")
private TemplateData data ;
@ApiModel("跳转小程序")
@Data
public static class MiniProgram{
@ApiModelProperty("所需跳转到的小程序appid(该小程序appid必须与发模板消息的公众号是绑定关联关系,暂不支持小游戏)")
private String appid;
@ApiModelProperty("所需跳转到小程序的具体页面路径,支持带参数,(示例index?foo=bar),要求该小程序已发布,暂不支持小游戏")
private String pagepath;
public MiniProgram(String appid, String pagepath) {
this.appid = appid;
this.pagepath = pagepath;
}
}
@Data
@ApiModel("模板数据")
public static class TemplateData{
private TemplateSettings first;
private TemplateSettings keyword1;
private TemplateSettings keyword2;
private TemplateSettings keyword3;
private TemplateSettings remark;
}
@Getter @Setter
@ApiModel("模板参数配置")
public static class TemplateSettings {
@ApiModelProperty("模板值")
private String value;
@ApiModelProperty("模板内容字体颜色,不填默认为黑色")
private String color;
public TemplateSettings(){}
public TemplateSettings(String value) {
this.value = value;
}
}
}

4
wechatutil/src/main/java/com/ccsens/wechatutil/service/IWxMessageService.java

@ -0,0 +1,4 @@
package com.ccsens.wechatutil.service;
public interface IWxMessageService {
}

3
wechatutil/src/main/java/com/ccsens/wechatutil/service/IWxService.java

@ -2,8 +2,7 @@ package com.ccsens.wechatutil.service;
import com.ccsens.wechatutil.bean.po.MiniProgramUser; import com.ccsens.wechatutil.bean.po.MiniProgramUser;
import com.ccsens.wechatutil.bean.po.WxOauth2UserInfo; import com.ccsens.wechatutil.bean.po.WxOauth2UserInfo;
import com.ccsens.wechatutil.bean.vo.WechatCode; import com.ccsens.wechatutil.bean.dto.WechatCode;
import com.fasterxml.jackson.core.JsonProcessingException;
/** /**
* @author * @author

92
wechatutil/src/main/java/com/ccsens/wechatutil/service/WxMessageService.java

@ -0,0 +1,92 @@
package com.ccsens.wechatutil.service;
import cn.hutool.core.collection.CollectionUtil;
import com.ccsens.util.JacksonUtil;
import com.ccsens.wechatutil.bean.dto.WxMessageDto;
import lombok.extern.slf4j.Slf4j;
import org.json.JSONObject;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.io.*;
import java.net.URL;
import java.net.URLConnection;
@Slf4j
@Service
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public class WxMessageService implements IWxMessageService {
/**
* 微信机器人
* @param robotMessage 机器人消息
* @throws Exception 异常
*/
public void sendRobotInfo(WxMessageDto.RobotMessage robotMessage)throws Exception {
WxMessageDto.WxRobotVo wxRobotVo = new WxMessageDto.WxRobotVo();
wxRobotVo.setMsgtype(robotMessage.getMsgType());
if("text".equalsIgnoreCase(robotMessage.getMsgType())){
WxMessageDto.WxRobotText wxRobotText = new WxMessageDto.WxRobotText();
wxRobotText.setContent(robotMessage.getContent());
if(CollectionUtil.isNotEmpty(robotMessage.getMentionedList())){
wxRobotText.setMentioned_list(robotMessage.getMentionedList());
}
if(CollectionUtil.isNotEmpty(robotMessage.getMentionedMobileList())){
wxRobotText.setMentioned_mobile_list(robotMessage.getMentionedMobileList());
}
wxRobotVo.setText(wxRobotText);
}else if("markdown".equalsIgnoreCase(robotMessage.getMsgType())){
WxMessageDto.WxRobotMarkdown wxRobotMarkdown = new WxMessageDto.WxRobotMarkdown();
wxRobotMarkdown.setContent(robotMessage.getContent());
wxRobotVo.setMarkdown(wxRobotMarkdown);
}
String body = JacksonUtil.beanToJson(wxRobotVo);
log.info(body);
sendPost(robotMessage.getWebHook(),body);
}
public static void sendPost(String url, String param){
PrintWriter out = null;
BufferedReader in = null;
JSONObject jsonObject = null;
String result = "";
try {
URL realUrl = new URL(url);
// 打开和URL之间的连接
URLConnection conn = realUrl.openConnection();
// 发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);
// 获取URLConnection对象对应的输出流(设置请求编码为UTF-8)
out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(), "UTF-8"));
// 发送请求参数
out.print(param);
// flush输出流的缓冲
out.flush();
// 获取请求返回数据(设置返回数据编码为UTF-8)
in = new BufferedReader(
new InputStreamReader(conn.getInputStream(), "UTF-8"));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (out != null) {
out.close();
}
if (in != null) {
in.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}

22
wechatutil/src/main/java/com/ccsens/wechatutil/service/WxService.java

@ -5,18 +5,13 @@ import cn.hutool.http.HttpRequest;
import com.ccsens.util.*; import com.ccsens.util.*;
import com.ccsens.util.bean.wx.po.WxAccessToken; import com.ccsens.util.bean.wx.po.WxAccessToken;
import com.ccsens.util.exception.BaseException; import com.ccsens.util.exception.BaseException;
import com.ccsens.util.exception.BusinessException;
import com.ccsens.util.exception.WxException;
import com.ccsens.util.wx.WxGzhUtil;
import com.ccsens.util.wx.WxXcxUtil;
import com.ccsens.wechatutil.bean.po.WxBaseEntity; import com.ccsens.wechatutil.bean.po.WxBaseEntity;
import com.ccsens.wechatutil.util.WxCodeError; import com.ccsens.wechatutil.util.WxCodeError;
import com.ccsens.wechatutil.util.WxConstant; import com.ccsens.wechatutil.util.WxConstant;
import com.ccsens.wechatutil.bean.po.MiniProgramUser; import com.ccsens.wechatutil.bean.po.MiniProgramUser;
import com.ccsens.wechatutil.bean.po.WxOauth2AccessToken; import com.ccsens.wechatutil.bean.po.WxOauth2AccessToken;
import com.ccsens.wechatutil.bean.po.WxOauth2UserInfo; import com.ccsens.wechatutil.bean.po.WxOauth2UserInfo;
import com.ccsens.wechatutil.bean.vo.WechatCode; import com.ccsens.wechatutil.bean.dto.WechatCode;
import com.fasterxml.jackson.core.JsonProcessingException;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -24,12 +19,7 @@ import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import java.io.*; import java.io.*;
import java.net.URL;
/** /**
* @author * @author
@ -205,13 +195,15 @@ public class WxService implements IWxService {
* @throws Exception 异常 * @throws Exception 异常
*/ */
public void httpWxCode(String path, String url, String postStr) throws Exception { public void httpWxCode(String path, String url, String postStr) throws Exception {
// HttpsUtil.httpsRequest(url, "POST", postStr,path);
WxBaseEntity wxBaseEntity; WxBaseEntity wxBaseEntity;
String response = HttpsUtil.httpsRequest(url, "POST", postStr); byte[] response = HttpsUtil.httpsRequestByte(url, "POST", postStr);
if(StrUtil.isEmpty(response)){
if(response.length == 0){
throw new BaseException(WxCodeError.WX_HTTP_ERROR); throw new BaseException(WxCodeError.WX_HTTP_ERROR);
} }
try { try {
if (null == (wxBaseEntity = JacksonUtil.jsonToBean(response, WxBaseEntity.class))) { if (null == (wxBaseEntity = JacksonUtil.jsonToBean(new String(response), WxBaseEntity.class))) {
throw new BaseException(WxCodeError.WX_HTTP_ERROR); throw new BaseException(WxCodeError.WX_HTTP_ERROR);
} }
if (null != wxBaseEntity.getErrcode()) { if (null != wxBaseEntity.getErrcode()) {
@ -223,7 +215,7 @@ public class WxService implements IWxService {
if (!file.getParentFile().exists()) { if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs(); file.getParentFile().mkdirs();
} }
InputStream inputStream = new ByteArrayInputStream(response.getBytes()); InputStream inputStream = new ByteArrayInputStream(response);
BufferedInputStream bis = new BufferedInputStream(inputStream); BufferedInputStream bis = new BufferedInputStream(inputStream);
OutputStream os = new FileOutputStream(file); OutputStream os = new FileOutputStream(file);
int len; int len;

4
wechatutil/src/main/resources/application-dev.yml

@ -60,8 +60,8 @@ file:
queryPowerAddress: /power/query queryPowerAddress: /power/query
mini: mini:
appId: wx356e01c7eb01d55d appId: wx55fa235267ca11e6
secret: 353033db85d4b5a35f05d1c0176a0cc6 secret: d75a5a7538ff9c72f781738850817081
h5: h5:
appId: 1 appId: 1
secret: 1 secret: 1
Loading…
Cancel
Save