微信模板消息

本文详细介绍了微信模板消息的开发流程,包括如何获取模板消息ID、调用接口发送消息及代码实现,为开发者提供了一个清晰的指引。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

近期项目用到了微信的模板消息,今天想写一个demo总结下微信模板消息开发的流程和相关注意事项

一,相关配置和申请流程

1.获得微信模板消息ID

通过微信公众平台的开发文档阅读可知,申请微信模板消息ID比较方便的方式还是直接
手动配置获取模板消息ID

主要步骤:

  • 选取模板
  • 编辑模板
  • 添加模板
  • 复制id

在这里插入图片描述

2.调用接口完成模板消息发送

请求地址:

POST https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=ACCESS_TOKEN

请求参数:

在这里插入图片描述

返回参数:

在这里插入图片描述

errcode合法值:

在这里插入图片描述

请求参数示例:

{
  "touser": "OPENID",
  "template_id": "TEMPLATE_ID",
  "page": "index",
  "form_id": "FORMID",
  "data": {
      "keyword1": {
          "value": "339208499"
      },
      "keyword2": {
          "value": "2015年01月05日 12:30"
      },
      "keyword3": {
          "value": "腾讯微信总部"
      } ,
      "keyword4": {
          "value": "广州市海珠区新港中路397号"
      }
  },
  "emphasis_keyword": "keyword1.DATA"
}

注意:

  • data即模板消息内容实体,注意申请模板消息时keyword对应的选项

3.代码实现

封装消息实体

根据上边的请求示例来编写消息实体

消息抽象

@Data
@NoArgsConstructor
@AllArgsConstructor
public class BaseMessage {

    /**
     * accessToken: 接口调用凭证
     * openId:接受者 openId
     * templateId: 模板消息id
     * page: 要跳转的页面
     * formId: submit提交的formId
     * data: 模板内容
     */
//请求示例:-----------------------------------------------
//    {
//        "touser": "OPENID",
//            "template_id": "TEMPLATE_ID",
//            "page": "index",
//            "form_id": "FORMID",
//            "data": {
//        "keyword1": {
//            "value": "339208499"
//        },
//        "keyword2": {
//            "value": "2015年01月05日 12:30"
//        },
//        "keyword3": {
//            "value": "腾讯微信总部"
//        } ,
//        "keyword4": {
//            "value": "广州市海珠区新港中路397号"
//        }
//    },
//        "emphasis_keyword": "keyword1.DATA"
//    }
//---------------------------------------------------------

    @JSONField(name = "touser")
    private String openId;

    @JSONField(name = "template_id")
    private String template_id;

    @JSONField(name = "page")
    private String page;

    @JSONField(name = "form_id")
    private String form_id;

    private BaseContent data;

    @JSONField(name = "emphasis_keyword")
    private String emphasis_keyword;
}

消息内容实体就是

public class BaseContent {
}

根据要发送的具体消息继承该类,自定义编写

eg:

public class TestMessage extends BaseContent {

    /**
     * TestMessage:
     *
     * <li>主要用来封装消息实体</li>
     * <li>相当于请求参数中的data</li>
     */

    @JSONField(name = "keyword1")
    private Keyword tips;

    @JSONField(name = "keyword2")
    private Keyword pointInfo;

    @JSONField(name = "keyword3")
    private Keyword name;

    @JSONField(name = "keyword4")
    private Keyword phone;
}

根据示例中还封装了keyword

@Slf4j
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Keyword {

    private String value;
}

利用枚举存放刚刚获取到的消息id

public enum TemplateIdEnum {

    /**
     * TemplateIdEnum
     * <li>存放模板消息ID</li>
     */

    TEXTMSG_ID("");

    private String TEMPLATE_ID;

    TemplateIdEnum(String TEMPLATE_ID){
        this.TEMPLATE_ID = TEMPLATE_ID;
    }

    public static String getTemplateId(TemplateIdEnum type){
        return type.TEMPLATE_ID;
    }

}

请求接口


/**
 * @Description:    微信模板消息工具类
 * @Author:         Kevin
 * @CreateDate:     2019/7/8 0:52
 * @UpdateUser:     Kevin
 * @UpdateDate:     2019/7/8 0:52
 * @UpdateRemark:   修改内容
 * @Version: 1.0
 */
@Component
@Slf4j
public class WxMessageUtils {

    public void sendTemplateMessage(BaseMessage baseMessage){
        //封装参数
        Map<String,String> params = new HashMap<>();
        params.put("access_token",WxAccountServiceImpl.getAccessToken());
        JSONObject jsonObject = JSONObject.parseObject(params.toString());
        //请求模板消息接口
        String resultJson = HttpClientUtils.doPostJson(WxConfig.TEMPLATEMESSAGE_URL,jsonObject.toJSONString());
        log.info("----------->"+resultJson);
        //判断是否请求成功
        checkSuccess(JSONObject.parseObject(resultJson),
                "Wechat return error:" + resultJson);

    }

    /**
     * 检查请求是否成功
     * @param bodyJSON
     * @param message
     */
    private static void checkSuccess(JSONObject bodyJSON, String message) {
        if (!isSuccess(bodyJSON)) {
            log.warn(message);
            throw new MessageException(bodyJSON.get("errmsg").toString());
        }
    }

    /**
     * 检查请求接口是否成功
     * @param bodyJSON
     * @return
     */
    private static boolean isSuccess(JSONObject bodyJSON) {
        if (bodyJSON.containsKey("errcode") && bodyJSON.containsKey("errmsg")) {
            if ((int) bodyJSON.get("errcode") != 0 && "ok".equals(bodyJSON.get("errmsg"))) {
                return false;
            }
        }
        return true;
    }
}

具体项目地址:

github

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值