微信小程序(三)发消息

一、引言

        作者开发《目的地到了》的时候需要给用户发消息,一开始用了消息模板,后面上真机才发现微信把这个给取消掉了。后面通知用户都是通过订阅消息

二、前端

        调用wx的api,要把模板id传进去,如果用户没有点击过同意会弹出弹窗提示用户,正常如果不是选择一直同意就只能发一次。

wx.requestSubscribeMessage({
            tmplIds: ['**'],
            success(res) {
            }
        })

三、后端

1、pom

        首先要引入微信小程序的包,基于weixin-java-miniapp调用微信的api

<dependency>
            <groupId>com.github.binarywang</groupId>
            <artifactId>weixin-java-miniapp</artifactId>
            <version>4.1.0</version>
        </dependency>

2、配置

        要在微信小程序申请模板,然后配置模板编号

# 微信模版通知配置
    # 微信模版用于通知客户或者运营者,注意配置格式;template-name,template-templateId 请参考 NotifyType 枚举值
notify:
    wx:
      enable: true
      template:
        - name: **
          templateId: **

3、订阅消息通知类

public class WxMessageSender {
    @Autowired
    private WxMaService wxMaService;

    /**
     * 发送微信消息(模板消息),不带跳转
     *
     * @param touser    用户 OpenID
     * @param templatId 模板消息ID
     * @param parms     详细内容
     */
    public void sendWechatMsg(String touser, String templatId, String[] parms) {
        sendMsg(touser, templatId, parms, "", "", "");
    }

    /**
     * 发送微信消息(模板消息),带跳转
     *
     * @param touser    用户 OpenID
     * @param templatId 模板消息ID
     * @param parms     详细内容
     * @param page      跳转页面
     */
    public void sendWechatMsg(String touser, String templatId, String[] parms, String page) {
        sendMsg(touser, templatId, parms, page, "", "");
    }

    private void sendMsg(String touser, String templatId, String[] parms, String page, String color,
                         String emphasisKeyword) {

        WxMaSubscribeMessage msg = new WxMaSubscribeMessage();
        // 要推送的用户openid
        msg.setToUser(touser);
        msg.setTemplateId(templatId);
        msg.setPage(page);
        msg.setData(createMsgData(parms));


        try {
            wxMaService.getMsgService().sendSubscribeMsg(msg);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private List<WxMaSubscribeMessage.MsgData> createMsgData(String[] parms) {
        List<WxMaSubscribeMessage.MsgData> dataList = new ArrayList<>();
        WxMaSubscribeMessage.MsgData data1 = new WxMaSubscribeMessage.MsgData();
        data1.setName("thing3");
        data1.setValue(parms[0]);
        dataList.add(data1);

        WxMaSubscribeMessage.MsgData data2 = new WxMaSubscribeMessage.MsgData();
        data2.setName("thing4");
        data2.setValue(parms[1]);
        dataList.add(data2);

        return dataList;
    }
}

4、通知处理类

public class NotifyService {

	private WxMessageSender wxMessageSender;
	private List<Map<String, String>> wxTemplate = new ArrayList<>();

	public boolean isWxEnable() {
		return wxMessageSender != null;
	}


	/**
	 * 微信模版消息通知,不跳转
	 * <p>
	 * 该方法会尝试从数据库获取缓存的FormId去发送消息
	 *
	 * @param touser
	 *            接收者openId
	 * @param notifyType
	 *            通知类别,通过该枚举值在配置文件中获取相应的模版ID
	 * @param params
	 *            通知模版内容里的参数,类似"您的验证码为{1}"中{1}的值
	 */
	@Async
	public void notifyWxTemplate(String touser, NotifyType notifyType, String[] params) {
		if (wxMessageSender == null)
			return;

		String templateId = getTemplateId(notifyType, wxTemplate);
		wxMessageSender.sendWechatMsg(touser, templateId, params);
	}


	private String getTemplateId(NotifyType notifyType, List<Map<String, String>> values) {
		for (Map<String, String> item : values) {
			String notifyTypeStr = notifyType.getType();

			if (item.get("name").equals(notifyTypeStr))
				return item.get("templateId");
		}
		return null;
	}

	public void setWxMessageSender(WxMessageSender wxMessageSender) {
		this.wxMessageSender = wxMessageSender;
	}

	public void setWxTemplate(List<Map<String, String>> wxTemplate) {
		this.wxTemplate = wxTemplate;
	}

}

四、模板申请

        要到小程序的订阅消息申请模板

a7ca716bc6b84e538a9921fe3d8c7525.png

        基本都是一次性消息,长期消息有特殊的要求,审核很难过得去        

c470dc5872e14935b489bc895a96260c.png

         点击选用然后选择要使用的关键词,发消息的时候填充这些关键词

9edfb06d29c44af194aec096bf075fdb.png

五、效果 

21251eb5a6f544278427baeacd3501cc.png

六、总结 

        微信小程序都是微信的规则,社区能看到模板消息被下掉换成订阅消息的时候,大家都是一片骂声,但是还得咬牙切换。

        只能说规则日新月异,持续研究吧。有兴趣的同学可以关注微信公众号:胖当当技术,跟作者交流分享。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖当当技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值