1、申请模板消息(公众号》广告与服务》模板消息)

2、获取模板id后代码
微信官方接口https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN
2.1、发送消息模板
public class TemplateUtil {
public static final String RELACE_STR="#";
//微信官方接口
public static final String GZH_TEMPLATE_URL = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN";
@Autowired
SysWeixinTemplateMapper sysWeixinTemplateMapper;
@Autowired
WechatUtil wechatUtil;
public void sendWxMessage(Map dataJson,String cate,String storeId,String opendId) {
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>发送模板消息开始storeId:"+storeId+"cate"+cate+">>>>>>>>>>>>>>>>>>>>");
//获取数据库中的模板
QueryWrapper<SysWeixinTemplate> bSysWeixinTemplateQueryWrapper=new QueryWrapper<>();
bSysWeixinTemplateQueryWrapper.lambda().eq(SysWeixinTemplate::getCate,cate)
.eq(SysWeixinTemplate::getStoreId,storeId);
List<SysWeixinTemplate> bSysWeixinTemplates=sysWeixinTemplateMapper.selectList(bSysWeixinTemplateQueryWrapper);
if(bSysWeixinTemplates==null || bSysWeixinTemplates.size()!=1){
System.out.println("=============================未配置模板或者模板存在多条==================================");
throw new IllegalArgumentException("未配置模板或者模板存在多条");
}
SysWeixinTemplate template=bSysWeixinTemplates.get(0);
//上面代码为从数据库中获取模板消息的id以及所需数据,可不看
//发送模板消息需要 openid( 微信公众号的openId(一定是微信公众号的openID,不是小程序的),模板消息的模板id以及内容(看图1)
//以下为组装发送模板消息的相关数据
JSONObject paramsMap = new JSONObject();
paramsMap.put("touser", opendId);
paramsMap.put("template_id", template.getTemplateId());
String data=template.getContent();
//此处是利用正则将内容中的变量替换成相关数据,例如内容为{"character_string6":{"value":"#complaintId#"},"thing3":{"value":"#staffInfo#"}},可跳过
Pattern pattern = Pattern.compile("#(.*?)#");
Matcher matcher = pattern.matcher(data);
while (matcher.find()) {
String temp=matcher.group(1);
data= data.replace("#"+temp+"#",dataJson.get(temp)+"");
}
//注意各项参数的格式,公众平台有给出,请遵守否则可能会失败
paramsMap.put("data", JSONObject.parseObject(data));
//获取accessToken ,代码下面有
String accessToken = wechatUtil.getAccessToken(storeId);
if (StringUtils.isBlank(accessToken)) {
throw new IllegalArgumentException("accessToken获取为空");
}
String message;
//替换完整路径并发送请求
message = HttpUtil.post(GZH_TEMPLATE_URL.replace("ACCESS_TOKEN", accessToken), paramsMap.toString());
log.info("微信模板消息>>" + message);
log.info("微信模板内容>>" + paramsMap);
JSONObject jsonObject= JSONObject.parseObject(message);
if(!"0".equals(jsonObject.getString("errcode"))
|| !"ok".equals(jsonObject.getString("errmsg"))){
throw new IllegalArgumentException(message);
}
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>发送模板消息结束>>>>>>>>>>>>>>>>>>>>");
}
}
2.2、工具类
获取ACCESS_TOKEN的方法,WechatUtil
package com.shengchi.community.admin.modules.fee.pay.util;
import cn.hutool.core.map.MapUtil;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONObject;
import com.shengchi.community.admin.common.redis.CacheService;
import com.shengchi.community.admin.modules.fee.constant.PayFeeConctant;
import com.shengchi.community.admin.modules.fee.pay.form.BSysWeixinConfig;
import com.shengchi.community.admin.modules.system.mapper.SysWeixinConfigMapper;
import com.shengchi.community.admin.modules.system.model.SysWeixinConfig;
import com.shengchi.community.admin.modules.system.service.SysWeixinConfigService;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Map;
import java.util.concurrent.TimeUnit;
@Component
@Slf4j
public class WechatUtil {
private static final String ACCESS_TOKEN_KEY = "access_token";
public static final String ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=SECRET";
public String getAccessToken(String storeId) {
String key = ACCESS_TOKEN_KEY + storeId;
JSONObject jsonObject = com.shengchi.community.admin.modules.fee.pay.util.HttpUtil.doGet(
ACCESS_TOKEN_URL
.replace("APPID", APPID) //微信公众号appid
.replace("SECRET", SECRET)); //微信公众号SECRET
log.info("jsonObject>>" + jsonObject);
access_token = jsonObject.getString("access_token");
log.info("access_token>>" + access_token);
return access_token;
}
}
4090

被折叠的 条评论
为什么被折叠?



