Java微信公众号开发之发送微信模板消息

微信发送模板消息接口文档地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433751277

温馨提示:请各位开发者使用微信模板消息功能前,仔细阅读上述发送模板消息接口文档 ,少走弯路;

一、微信公众号开发框架

     <!-- 微信框架 参考:https://github.com/Wechat-Group/weixin-java-tools -->
      <dependency>
         <groupId>com.github.binarywang</groupId>
         <artifactId>weixin-java-mp</artifactId>
         <version>3.0.0</version>
      </dependency>

二、发送模板消息效果

          

三、模板消息申请

 为了保证用户不受到骚扰,在开发者出现需要主动提醒、通知用户时,才允许开发者在公众平台网站中模板消息库中选择模板,选择后获得模板ID,再根据模板ID向用户主动推送提醒、通知消息。

 模板消息调用时主要需要模板ID和模板中各参数的赋值内容。请注意:
 1. 模板中参数内容必须以".DATA"结尾,否则视为保留字;
 2. 模板保留符号"{{ }}"

 1. 以下是我使用的模板消息

  1. {{first.DATA}}  
  2. 用户名:{{keyword1.DATA}}  
  3. 订单号:{{keyword2.DATA}}  
  4. 订单金额:{{keyword3.DATA}}  
  5. 商品信息:{{keyword4.DATA}}  
  6. {{remark.DATA}}  

  2.官方的demo

          {
           "touser":"OPENID",
           "template_id":"ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY",
           "url":"http://weixin.qq.com/download",  
           "miniprogram":{
             "appid":"xiaochengxuappid12345",
             "pagepath":"index?foo=bar"
           },          
           "data":{
                   "first": {
                       "value":"恭喜你支付成功!",
                       "color":"#173177"
                   },
                   "keynote1":{
                       "value":"曹",
                       "color":"#173177"
                   },
                   "keynote2": {
                       "value":"2019698571200",
                       "color":"#173177"
                   },
                   "keynote3": {
                       "value":"¥98.80",
                       "color":"#173177"
                   },
                   "keynote4":{
                       "value":"星冰乐(焦糖味) 家乐氏香甜玉米片*2 乐天七彩爱情糖*3",
                       "color":"#173177"
                   },
                   "remark":{
                       "value":"如有问题请致电xxx客服热线400-8070028或直接在微信留言,客服在线时间为工作日10:00-18:00,客服人员将第一时间为您服务。",
                       "color":"#173177"
                   }
           }
       }

四、通过Postman测试发送模板消息

 1. 登录微信公众平台,申请一个发送模板消息的模板

     

2. 通过微信公众平台接口调试工具获取AccessToken

3. Postman发送模板消息

上面需要填入的有openid、template_id

 {
           "touser":"oJIGa0Xlgv1nAtrWLWMlB75ekNDs",
           "template_id":"KIe4rXP3pRvX8BUnomZtCOFjZkSRzFdOzcJOob_9MR4",
           "url":"https://blog.csdn.net/thinkingcao",  
           "data":{
                   "first": {
                       "value":"矿泉水",
                       "color":"#173177"
                   },
                   "keyword1":{
                       "value":"11111111",
                       "color":"#173177"
                   },
                   "keyword2": {
                       "value":"123456789",
                       "color":"#173177"
                   },
                    "keyword3": {
                       "value":"39.8元",
                       "color":"#173177"
                   },
                   "keyword4": {
                       "value":"2014年9月22日",
                       "color":"#173177"
                   },
                   "remark":{
                       "value":"欢迎再次购买!",
                       "color":"#173177"
                   }
           }
       }

 通过Postman发送玩了之后就是步骤三中的效果图

五、发送模板消息工具类封装

  配置微信公众号参数:appid、appsecret、token、asekey、template_id(模板id)

  1.wx.properties

#=========微信公众号开发基本配置============
#微信公众号的appid
wx_appid=
#微信公众号的appsecret
wx_appsecret=
#微信公众号的token
wx_token=
#微信公众号的消息加解密密钥aeskey
wx_aeskey=
#微信模板消息template_id
wx_template_id=



  2.WeChatTemplateMsgUtils:

 这里将WeChatTemplateMsgUtils.java以注册为Spring容器,交给Spring容器管理,方便Controller、Service中注入使用

package com.thinkgem.jeesite.modules.wechat.commonUtil;

import com.thinkgem.jeesite.modules.wechat.inter.PushMessageService;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.exception.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.template.WxMpTemplate;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateIndustry;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.util.Arrays;
import java.util.List;

/**
 * <pre>
 * @Description: 微信模板消息推送实现
 * @Aouth: cao_wencao
 * @Date: 2019-01-24 14:07
 * </pre>
 */
@Slf4j
@Component
public class WeChatTemplateMsgUtils implements PushMessageService {
    @Autowired
    private WxMpService wxMpService;

    @Value("#{wxProperties.wx_template_id}")
    private String wx_template_id;

    //案例: 星巴克支付通知
    @Override
    public String manuscriptExamine(String openId) {
        //实例化模板对象
        WxMpTemplateMessage wxMpTemplateMessage = new WxMpTemplateMessage();
        //设置模板ID
        wxMpTemplateMessage.setTemplateId(wx_template_id);
        //设置发送给哪个用户
        wxMpTemplateMessage.setToUser(openId);
        //构建消息格式
        List<WxMpTemplateData> listData = Arrays.asList(
                new WxMpTemplateData("first", "恭喜你支付成功!", "#173177"),
                new WxMpTemplateData("keyword1", "曹.", "#173177"),
                new WxMpTemplateData("keyword2", "2019698571200", "#173177"),
                new WxMpTemplateData("keyword3", "¥98.80", "#173177"),
                new WxMpTemplateData("keyword4", "星冰乐(焦糖味) 家乐氏香甜玉米片*2 乐天七彩爱情糖*3", "#173177"),
                new WxMpTemplateData("remark", "如有疑问,请联系客服电话:021-54145323", "#173177")
        );
        //接收发送模板消息结果,就是msgid,if(msgid! = null)即成功
        String wxTemplateResult = null;
        //放进模板对象。准备发送
        wxMpTemplateMessage.setData(listData);
        try {
            //发送模板
            wxTemplateResult = wxMpService.getTemplateMsgService().sendTemplateMsg(wxMpTemplateMessage);
        } catch (WxErrorException e) {
            log.error("发送模板消息异常:{}", e.getMessage());
            e.printStackTrace();
        }
        return wxTemplateResult;
    }

    /**
     * <pre>
     * 设置所属行业
     * @auther: cao_wencao
     * @date: 2019/2/18 15:17
     * </pre>
     */
    public boolean setIndustry(WxMpTemplateIndustry wxMpIndustry) throws WxErrorException {
        Boolean flag = wxMpService.getTemplateMsgService().setIndustry(wxMpIndustry);
        return flag;
    }

    /**
     * <pre>
     * 获取设置的行业信息
     * @auther: cao_wencao
     * @date: 2019/2/18 15:21
     * </pre>
     */
    public WxMpTemplateIndustry getIndustry() throws WxErrorException {
        WxMpTemplateIndustry wxMpTemplateIndustry = wxMpService.getTemplateMsgService().getIndustry();
        return wxMpTemplateIndustry;
    }

    /**
     * <pre>
     * 发送模板消息
     * @auther: cao_wencao
     * @date: 2019/2/18 15:25
     * </pre>
     */
    public String sendTemplateMsg(WxMpTemplateMessage templateMessage) throws WxErrorException {
        String result = wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
        return result;
    }


    /**
     * <pre>
     * 获得模板ID
     * shortTemplateId: 模板库中模板的编号,有“TM**”和“OPENTMTM**”等形式
     * @auther: cao_wencao
     * @date: 2019/2/18 15:29
     * </pre>
     */
    public String addTemplate(String shortTemplateId) throws WxErrorException {
        String result = wxMpService.getTemplateMsgService().addTemplate(shortTemplateId);
        return result;
    }

    /**
     * <pre>
     * 获得模板列表
     * @auther: cao_wencao
     * @date: 2019/2/18 15:30
     * </pre>
     */
    List<WxMpTemplate> getAllPrivateTemplate() throws WxErrorException {
        List<WxMpTemplate> templateList = wxMpService.getTemplateMsgService().getAllPrivateTemplate();
        return templateList;
    }

    /**
     * <pre>
     * 删除模板
     * templateId: 公众帐号下模板消息ID
     * @auther: cao_wencao
     * @date: 2019/2/18 15:32
     * </pre>
     */
    boolean delPrivateTemplate(String templateId) throws WxErrorException {
        Boolean flag = wxMpService.getTemplateMsgService().delPrivateTemplate(templateId);
        return flag;
    }

}

六、如何使用模板消息工具类

 新建一个controller,在controller中注入WeChatTemplateMsgUtils即可

@Autowired

private WeChatTemplateMsgUtils weChatTemplateMsgUtils;

七、WxMpService注入为空问题 

首先,我在专栏首页里也说明过,本微信开发专栏是全部基于开源微信框架WxJava(原名:weixin-java-tools)来实现的一些功能,所以大家应该先去熟悉下WxJava如何使用以及其demo项目如何运行,在这篇文章推出后,发现很多评论说WxMpService注入为空,其实这是缺少配置文件的问题,demo里面就有,下面说下具体缺少项,以及针对SpringMVC项目和SpringBoot项目应该配置哪些东西;

1. SpringMVC项目

 如果是SpringMVC项目,WxMpService注入为空可能是缺少图中的配置文件,加入这两项配置即可,具体参考demo项目:https://github.com/binarywang/weixin-java-mp-demo-springmvc

2.SpringBoot项目

如果是SpringBoot项目,WxMpService注入为空可能是缺少图中的配置文件,加入这两项配置即可,具体参考demo项目:https://github.com/binarywang/weixin-java-mp-demo-springboot

 

上面就是针对针对SpringMVC架构和SpringBoot架构的项目,在使用微信模板消息时,注入WxMpService为空的各自问题及解决方案,在这里记录下,方便大家出现这种问题时看到就知道是什么原因,其实不是bug,自己多细心点就好了。

发布了329 篇原创文章 · 获赞 232 · 访问量 80万+

猜你喜欢

转载自blog.csdn.net/Thinkingcao/article/details/88868387