微信公众号发送消息模板

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;
    }
}
### 微信公众号自定义消息模板创建与使用 #### 准备工作 为了能够顺利创建并使用微信公众号的自定义消息模板,需先确认已拥有开发者权限或具备一定开发能力。对于不具备编程背景的操作者来说,也可以通过可视化工具完成大部分配置。 #### 获取基础模板ID 进入微信公众平台后台,在左侧导航栏找到【功能】-> 【订阅号助手/服务号设置】-> 【消息管理】下的【模板消息】选项卡。在此处可以申请行业模板,从中选取适合业务场景的基础模板,并获取其对应的Template_ID[^2]。 #### 定制个性化内容 基于所获得的基础模板ID,可进一步定制化编辑具体发送给用户的文案部分。注意每项字段均需按照规定格式填写完整,尤其是当涉及到变量替换时(如${first}、${keyword1}等),这些占位符将在实际推送前由真实数据替代。 ```json { "touser": "OPENID", "template_id": "TEMPLATE_ID", "url": "http://weixin.qq.com/download", "topcolor": "#FF0000", "data": { "first": { "value":"您好,您有一条新的订单通知。", "color":"#173177" }, "orderMoneySum":{ "value":"99元", "color":"#173177" } } } ``` 此JSON结构体展示了向特定用户(OpenID)发送带有超链接的消息实例,其中`template_id`即为之前提到的基础模板ID;而`data`对象内部则包含了所有待填充的具体信息片段及其样式属性。 #### 提交审核与发布 完成上述步骤之后,记得点击页面底部的“提交”按钮保存更改。值得注意的是,只有经过官方审核通过后的模板才能正式投入使用并向粉丝群体广播出去。整个过程可能需要几个工作日的时间等待反馈结果。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值