微信小程序发送模板消息请求

微信小程序发送模板消息请求

最近公司接触到微信小程序的项目。自己也有幸参与其中,并且完成了发送模板消息的功能。所以自己总结一下,以便日后遇到类似情况可以少走一些弯路。也欢迎广大码农小伙伴一起交流一起进步。
俗话说磨刀不误砍柴工,特别是像这种使用微信接口的功能,必然要先了解其接口的主要作用。这是微信接口文档地址:https://mp.weixin.qq.com/debug/wxadoc/dev/api/notice.html#%E6%A8%A1%E7%89%88%E6%B6%88%E6%81%AF%E7%AE%A1%E7%90%86。通过这份文档,我们便可以知道我们需要的参数是什么。接下来就看进行实际的代码编写了。值得一提的是,在这些参数中,有一个data参数,是指模板的内容。这是一个变动的内容。即我们可以在这部分增加多个参数。为此我选择将这个data里面的参数重新做处理,并且用Map集合进行保存。所需要的类如下:
- 参数类(WXTemplate)
- data的类(WXTemplateData)
- 工具类(TemplateMsgUtil)(里面存放一些方法。比如获取请求微信接口需要的URL方法(getRequestUrl))即拼接好:https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=ACCESS_TOKEN。ACCESS_TOKEN是自己获取得到的。由于一些工具类公司前辈已经写好,在这里我只需要调用即可。道友们可以百度一下相关数据的获取。


WXTemplate.java
public class WXTemplate {

    private String toUser;// 接受者(用户)的openid
    private String templateId;// 所需下发的模板消息的id
    private String page;// 点击模板卡片后的跳转页面
    private String formId;// 表单提交场景下,为 submit 事件带上的 formId;支付场景下,为本次支付的prepay_id
    private Map<String, WXTemplateData> data; // 模板内容,不填则下发空模板
    private String emphasisKeyword;// 模板需要放大的关键词,不填则默认无放大

    public WXTemplate(String toUser, String templateId, String page, String formId, Map<String, WXTemplateData> data,
            String emphasisKeyword) {
        super();
        this.toUser = toUser;
        this.templateId = templateId;
        this.page = page;
        this.formId = formId;
        this.data = data;
        this.emphasisKeyword = emphasisKeyword;
    }

    public WXTemplate() {
        super();
    }

    public String getToUser() {
        return toUser;
    }

    public void setToUser(String toUser) {
        this.toUser = toUser;
    }

    public String getTemplateId() {
        return templateId;
    }

    public void setTemplateId(String templateId) {
        this.templateId = templateId;
    }

    public String getPage() {
        return page;
    }

    public void setPage(String page) {
        this.page = page;
    }

    public String getFormId() {
        return formId;
    }

    public void setFormId(String formId) {
        this.formId = formId;
    }

    public Map<String, WXTemplateData> getData() {
        return data;
    }

    public void setData(Map<String, WXTemplateData> data) {
        this.data = data;
    }

    public String getEmphasisKeyword() {
        return emphasisKeyword;
    }

    public void setEmphasisKeyword(String emphasisKeyword) {
        this.emphasisKeyword = emphasisKeyword;
    }

}
WXTemplateData.java
    public class WXTemplateData {

    private String value; // 小标题

    private String color; // 模板内容字体的颜色,不填默认黑色

    public WXTemplateData(String value, String color) {
        super();
        this.value = value;
        this.color = color;
    }

    public WXTemplateData() {
        super();
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }
}
TemplateMsgUtil.java
    // 获取requestUrl
    public String getRequestUrl() {
        // 获取accessToken
        String accessToken = accessTokenUtil.getAccessToken(appId, secret);
        // requestUrl
        String requestUrl = SEND_API + "?access_token=" + accessToken;
        return requestUrl;
    }

接下来就是发送模板消息的方法(sendTemplateMsg)。

public boolean sendTemplateMsg(String openId, String templateId, String page, String formId,
            Map<String, WXTemplateData> data, String emphasisKeyword) {

        boolean result = false;
        WXTemplate template = new WXTemplate();
        template.setToUser(openId);
        template.setTemplateId(templateId);
        template.setPage(page);
        template.setFormId(formId);
        template.setData(data);
        template.setEmphasisKeyword(emphasisKeyword);

        String jsonMsg = JSONObject.toJSON(template).toString();

        TemplateMsgUtil templateMsgUtil = new TemplateMsgUtil();

        // 获取请求的url
        String requestUrl = templateMsgUtil.getRequestUrl();
        // 发送模板消息
        HttpResponse resp = HttpUtil.post(requestUrl, jsonMsg);
        if (resp.statusCode() == HttpStatus.OK.value()) {
            @SuppressWarnings("unchecked")
            Map<String, String> itemMap = JSONObject.parseObject(resp.body(), Map.class);
            // 判断是否发送成功
            if (itemMap.get("errcode").equals("0")) {
                result = true;
            } else {
                logger.info("发送模板消息失败:" + itemMap.get("errcode"));
                System.out.println("发送模板消息失败:" + itemMap.get("errcode"));
            }
        }
        return result;
    }

过程有点简单,因为公司前辈写好了很多东西,我直接调用即可。不过道理都差不多。欢迎大家一起交流探讨。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值