From 5b5ccad15ffe3c3ecae4a551d9e22957fbb68676 Mon Sep 17 00:00:00 2001 From: gxwebsoft Date: Fri, 10 Nov 2023 00:48:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=91=E9=80=81=E5=85=AC=E4=BC=97=E5=8F=B7?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E6=B6=88=E6=81=AF=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/WxOfficialController.java | 37 ++++++++++++-- .../common/system/entity/TemplateMessage.java | 49 +++++++++++++++++++ .../system/entity/TemplateMessageDTO.java | 35 +++++++++++++ 3 files changed, 116 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/gxwebsoft/common/system/entity/TemplateMessage.java create mode 100644 src/main/java/com/gxwebsoft/common/system/entity/TemplateMessageDTO.java diff --git a/src/main/java/com/gxwebsoft/common/system/controller/WxOfficialController.java b/src/main/java/com/gxwebsoft/common/system/controller/WxOfficialController.java index c7d4b1b..7904fca 100644 --- a/src/main/java/com/gxwebsoft/common/system/controller/WxOfficialController.java +++ b/src/main/java/com/gxwebsoft/common/system/controller/WxOfficialController.java @@ -14,10 +14,7 @@ import com.gxwebsoft.common.core.utils.CommonUtil; import com.gxwebsoft.common.core.utils.RedisUtil; import com.gxwebsoft.common.core.web.ApiResult; import com.gxwebsoft.common.core.web.BaseController; -import com.gxwebsoft.common.system.entity.Role; -import com.gxwebsoft.common.system.entity.User; -import com.gxwebsoft.common.system.entity.UserOauth; -import com.gxwebsoft.common.system.entity.UserRole; +import com.gxwebsoft.common.system.entity.*; import com.gxwebsoft.common.system.param.RoleParam; import com.gxwebsoft.common.system.param.UserParam; import com.gxwebsoft.common.system.service.RoleService; @@ -113,6 +110,7 @@ public class WxOfficialController extends BaseController { final String unionid = jsonObject.getString("unionid"); final String subscribe = jsonObject.getString("subscribe"); System.out.println("unionid = " + unionid); + sendTemplateMessage(openId); // 关注操作 if (subscribe != null &&subscribe.equals("1")) { final int count = userOauthService.count(new LambdaQueryWrapper().eq(UserOauth::getOauthType, MP_OFFICIAL).eq(UserOauth::getUnionid, unionid).eq(UserOauth::getTenantId,tenantId)); @@ -169,10 +167,39 @@ public class WxOfficialController extends BaseController { System.out.println("关注微信公众号 = " + save); } } + } return null; } + private void sendTemplateMessage(String openId){ + String url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + getAccessToken(); + TemplateMessage templateMessage = new TemplateMessage(); + templateMessage.setToUser(openId); + templateMessage.setTemplateId("DSGpuDx1i7AWyRXejalnkq5AeslKnkm6T9omu6NPoLM"); // dVSbX2NRzAG7IuN4kkCQhgV-LjzxvApN3PgrGlon9JU + + /* + 您好,您已成功消费。 + + 商品名:微信影城影票 + 消费时间:2013年8月20日 20:38 + 备注:您可以回复文字或语音对该商品及商家进行评价哦~ + {{productType.DATA}}:{{name.DATA}} 消费时间:{{time.DATA}} {{remark.DATA}} + */ + HashMap data = new HashMap<>(); + data.put("thing33",new TemplateMessageDTO("您的新的工单需要处理")); + data.put("phrase5",new TemplateMessageDTO("网站故障")); + data.put("time40",new TemplateMessageDTO("2023-11-11")); + System.out.println("data = " + data); + // 链式构建请求 + String result = HttpRequest.post(url) + .body(JSONObject.toJSONString(data))//表单内容 + .timeout(20000)//超时,毫秒 + .execute().body(); + System.out.println("result = " + result); + System.out.println("getAccessToken() = " + getAccessToken()); + } + @ApiOperation("send发送订阅通知") @PostMapping("/send") public ApiResult send(UserParam param) { @@ -256,6 +283,6 @@ public class WxOfficialController extends BaseController { public ApiResult count(){ final int count = userOauthService.count(new LambdaQueryWrapper().eq(UserOauth::getOauthType, MP_OFFICIAL).eq(UserOauth::getUnionid, "o0FaIuKa2UsVp6FCbvmZlrcaBRCM")); System.out.println("count = " + count); - return success(count); + return success(getAccessToken()); } } diff --git a/src/main/java/com/gxwebsoft/common/system/entity/TemplateMessage.java b/src/main/java/com/gxwebsoft/common/system/entity/TemplateMessage.java new file mode 100644 index 0000000..8360621 --- /dev/null +++ b/src/main/java/com/gxwebsoft/common/system/entity/TemplateMessage.java @@ -0,0 +1,49 @@ +package com.gxwebsoft.common.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * 微信公众号模板消息对象 + * + * @author WebSoft + * @since 2018-12-24 16:10:54 + */ +@Data +@ApiModel(description = "微信公众号模板消息对象") +public class TemplateMessage implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("接收者openid") + @TableField(exist = false) + private String toUser; + + @ApiModelProperty("模板ID") + @TableField(exist = false) + private String templateId; + + @ApiModelProperty("模板跳转链接(海外账号没有跳转能力)") + @TableField(exist = false) + private String url; + + @ApiModelProperty("跳小程序所需数据,不需跳小程序可不用传该数据") + @TableField(exist = false) + private String miniProgram; + + @ApiModelProperty("所需跳转到的小程序appid(该小程序appid必须与发模板消息的公众号是绑定关联关系,暂不支持小游戏)") + @TableField(exist = false) + private String appid; + + @ApiModelProperty("所需跳转到小程序的具体页面路径,支持带参数,(示例index?foo=bar),要求该小程序已发布,暂不支持小游戏") + @TableField(exist = false) + private String pagePath; + + @ApiModelProperty("模板数据") + @TableField(exist = false) + private Object data; + +} diff --git a/src/main/java/com/gxwebsoft/common/system/entity/TemplateMessageDTO.java b/src/main/java/com/gxwebsoft/common/system/entity/TemplateMessageDTO.java new file mode 100644 index 0000000..3ab5d1d --- /dev/null +++ b/src/main/java/com/gxwebsoft/common/system/entity/TemplateMessageDTO.java @@ -0,0 +1,35 @@ +package com.gxwebsoft.common.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * 微信公众号模板消息对象 + * + * @author WebSoft + * @since 2018-12-24 16:10:54 + */ +@Data +@ApiModel(description = "模板消息内容") +public class TemplateMessageDTO implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("消息实参") + @TableField(exist = false) + private String value; + + @ApiModelProperty("消息颜色") + private String color; + + public TemplateMessageDTO(String value) { + this.value = value; + } + public TemplateMessageDTO(String value, String color) { + this.value = value; + this.color = color; + } +}