微信订阅消息体Java实现

作者: 小孩孜 | 来源:发表于2020-04-12 13:19 被阅读0次

话不多说,直接上代码:

SubscribeMsgData.java订阅消息体对象,字符串长度超长可自动截取

package xin.xihc.rebate.bean;

import lombok.AllArgsConstructor;
import lombok.Data;

import java.util.LinkedHashMap;
import java.util.Map;

/**
 * 订阅消息对象
 *
 * @author Leo.Xi
 * @date 2019/10/25
 * @since 1.0
 **/
public class SubscribeMsgData {

    /** 顺序值 */
    private int index = 1;

    /** 数据data */
    private LinkedHashMap<String, Keyword> data = new LinkedHashMap<>();

    public static SubscribeMsgData create() {
        return new SubscribeMsgData();
    }

    /**
     * thing.DATA   事物  20个以内字符 可汉字、数字、字母或符号组合
     *
     * @param thing
     * @author Leo.Xi
     * @date 2019/10/25
     * @since 0.0.1
     */
    public SubscribeMsgData thing(String thing) {
        if (thing.length() > 20) {
            thing = thing.substring(0, 20);
        }
        data.put("thing" + index, new Keyword(thing));
        ++index;
        return this;
    }

    /**
     * number.DATA  数字  32位以内数字 只能数字,可带小数
     *
     * @param number
     * @author Leo.Xi
     * @date 2019/10/25
     * @since 0.0.1
     */
    public SubscribeMsgData number(String number) {
        if (number.length() > 32) {
            number = number.substring(0, 32);
        }
        data.put("number" + index, new Keyword(number));
        ++index;
        return this;
    }

    /**
     * letter.DATA  字母  32位以内字母 只能字母
     *
     * @param letter
     * @author Leo.Xi
     * @date 2019/10/25
     * @since 0.0.1
     */
    public SubscribeMsgData letter(String letter) {
        if (letter.length() > 32) {
            letter = letter.substring(0, 32);
        }
        data.put("letter" + index, new Keyword(letter));
        ++index;
        return this;
    }

    /**
     * date.DATA    日期  年月日格式(支持+24小时制时间)   例如:2019年10月1日,或:2019年10月1日 15:01
     *
     * @param date
     * @author Leo.Xi
     * @date 2019/10/25
     * @since 0.0.1
     */
    public SubscribeMsgData date(String date) {
        data.put("date" + index, new Keyword(date));
        ++index;
        return this;
    }

    /**
     * amount.DATA  金额  1个币种符号+10位以内纯数字,可带小数,结尾可带“元”    可带小数
     *
     * @param amount
     * @author Leo.Xi
     * @date 2019/10/25
     * @since 0.0.1
     */
    public SubscribeMsgData amount(String amount) {
        data.put("amount" + index, new Keyword(amount));
        ++index;
        return this;
    }

    /**
     * phrase.DATA  汉字  5个以内汉字  5个以内纯汉字,例如:配送中
     *
     * @param phrase
     * @author Leo.Xi
     * @date 2019/10/25
     * @since 0.0.1
     */
    public SubscribeMsgData phrase(String phrase) {
        if (phrase.length() > 5) {
            phrase = phrase.substring(0, 5);
        }
        data.put("phrase" + index, new Keyword(phrase));
        ++index;
        return this;
    }

    public Map<String, Keyword> data() {
        return this.data;
    }


    @Data
    @AllArgsConstructor
    public static class Keyword {
        private String value;
    }

}

调用的代码:

// 计算到账时间
String paymentTime = DateUtil.getDateTimeFromNow(
                        configBean.getSystemConfig().getDelaySettlementDays() * 24 * 60 * 60, "yyyy.MM.dd");
// 订阅消息
SubscribeMsgData subscribeMsgData = SubscribeMsgData.create().thing(flow.getType()
                                                                    .equals(CapitalOperateType.REBATE) ? "返利" : "分红")
                                                                    .date(DateUtil.formatDateTime(new Date(),
                                                                            "yyyy年MM月dd日 HH:mm"))
                                                                    .amount(flow.getRealAmount() + "元")
                                                                    .thing("预计" + paymentTime + "到账,可提现");
wxTemplateMsg.sendSubscribeMsg(flow.getUserId(), subscribeMsgData, WxTemplateMsg.MsgType.SETTLEMENT);
    /**
     * 发送订阅消息
     *
     * @param userId 用户ID
     * @param data   发送模板内容
     * @param type   消息类型
     * @return
     * @author Leo.Xi
     * @date 2019/8/18
     * @since 0.0.1
     */
    public void sendSubscribeMsg(String userId, SubscribeMsgData data, MsgType type) {
        try {
            String openId = wxUserInfoDao.getOpenId(userId);
            HashMap<String, Object> params = new HashMap<>(4);
            params.put("touser", openId);
            Template template = TEMPLATES_SUBSCRIBE.get(type);
            params.put("template_id", template.getId());
            params.put("page", template.getPage());
            params.put("data", data.data());
            String post = RestClientUtils.post(String.format(URL_POST_SUBSCRIBE_MSG, ACCESS_TOKEN), JsonUtil
                    .toNoNullJsonStr(params, false), String.class);
            log.info("发送订阅消息结果:" + post);
        } catch (Throwable e) {
            // ignore
        }
    }

结算消息通知

订单确认收货后的结算通知

相关文章

  • 微信订阅消息体Java实现

    话不多说,直接上代码: SubscribeMsgData.java订阅消息体对象,字符串长度超长可自动截取 调用的...

  • 微信小程序订阅消息开发之云开发(二)

    这一篇主要写怎么推送订阅消息给用户,上一篇写了怎么实现订阅消息,没看的可以先看下~微信小程序订阅消息开发之云开发(...

  • 对接微信和支付宝退款api

    1、微信退款 参考:(41条消息) weixin-java-pay实现公众号微信支付与退款_earthhour的博...

  • 微信小程序的订阅消息

    介绍 微信小程序的订阅消息,是指开发者可以发送消息到用户的微信服务通知中。订阅消息分为 一次性订阅消息 和 长期订...

  • 订阅消息

    微信小程序下架了模板消息功能,取而代之的是订阅消息功能。这个订阅消息目前又分为「一次性订阅」和「永久订阅」。项目里...

  • 微信小程序-订阅消息服务通知

    微信小程序目前支持一次性订阅模板消息,也就是首先在微信客户端用户允许订阅消息后,服务端可以按照指定模板推送消息给微...

  • 微信订阅号可以开通微信支付吗?

    微信订阅号可以开通微信支付功能吗?最近微信出台了一条令人振奋的消息部分微信订阅号也能开通微信支付功能了,微信支付不...

  • 微信小程序:订阅消息

    1. 什么是小程序订阅消息 用户在小程序页面点击按钮,确认订阅消息,小程序可以按照消息模板格式在后续的任意时间发送...

  • 微信消息模版推送测试步骤

    微信消息模版接入指南 微信的消息模版推送的前提 必须是服务号,订阅号肯定不行(如果你的是订阅号,可以一键升级到服务...

  • 订阅号改版,确定不卸载其它新闻资讯类 App? @发现

    为提升阅读效率,我们对订阅号消息列表改版,用户可直接浏览订阅号消息。 首先,我不得不说一下来自微信官方的 微信公众...

网友评论

    本文标题:微信订阅消息体Java实现

    本文链接:https://www.haomeiwen.com/subject/hfmvmhtx.html