微信小程序+Springboot实现订阅消息推送 (demo)

1. 开通订阅消息

2. 选用模板

  订阅消息 - 公共模板库 - 选用

3. 选择关键词 

勾选关键词 - 最多勾选5个 - 显示例子

 

4. 我的模板

 

5. 订阅号开发者-文档: 发送订阅消息 | 微信开放文档

6. 依赖
<dependency>
	<groupId>com.alibaba.fastjson2</groupId>
	<artifactId>fastjson2</artifactId>
	<version>2.0.32</version>
</dependency>
<dependency>
	<groupId>cn.hutool</groupId>
	<artifactId>hutool-all</artifactId>
	<version>5.3.3</version>
</dependency>

7. MessageVo
import lombok.Data;
import java.util.Map;


/**
 * 封装请求参数
 */
@Data
public class MessageVo {

    // 接收者(用户)的 openid
    private String touser;
    // 订阅消息模板id
    private String template_id;
    // 默认跳到小程序首页
    private String page = "pages/index/index";
    // 推送文字
    private Map<String, TemplateData> data;
    // developer为开发版;trial为体验版;formal为正式版;默认为正式版
    private String miniprogram_state;
    // zh_CN(简体中文)
    private String lang;
}

8. TemplateData
import lombok.Data;


/**
 * 封装订阅消息内容
 */
@Data
public class TemplateData {

    private String value;

    public TemplateData(String value){
        this.value = value;
    }
}

9. SendMessage
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import java.util.HashMap;
import java.util.Map;

@Slf4j
@Service
public class SendMessage {

    /**
     * 发送订阅消息
     * @return
     */
    public String send(){


        RestTemplate restTemplate = new RestTemplate();

        // url + access_token(接口调用凭证)
        String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + "access_token";

        // 拼接推送的模板
        MessageVo vo = new MessageVo();
        // 要发送给哪个用户 (动态传进来)
        vo.setTouser("用户openid");
        vo.setTemplate_id("模板id");
        // 必填(否)
        vo.setPage("pages/index/index");
        // developer为开发版;trial为体验版;formal为正式版;默认为正式版
        vo.setMiniprogram_state("developer");
        // 语言类型
        vo.setLang("zh_CN");


        Map<String, TemplateData> map = new HashMap<>(5);

        /**封装模板消息内容, 必须和你申请的小程序模板格式一模一样, 并一一对应*/
        // 商品名称
        map.put("thing1",new TemplateData("商品名称"));
        // 支付时间
        map.put("time2",new TemplateData("支付时间"));
        // 支付金额
        map.put("amount3",new TemplateData("支付金额"));
        // 订单号
        map.put("character_string4",new TemplateData("订单号"));
        // 支付方式
        map.put("thing5",new TemplateData("支付方式"));
        vo.setData(map);


        ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, vo, String.class);
        String bodyAsString = responseEntity.getBody();

        JSONObject json = JSON.parseObject(bodyAsString);
        String errcode = json.getString("errcode");
        String errmsg = json.getString("errmsg");
        if (("ok").equals(errmsg)) {
            log.info("发送订阅消息成功: {}", bodyAsString);
        } else {
            log.info("发送订阅消息失败: {}", bodyAsString);
        }
        return bodyAsString;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

yixian123.com

谢谢打赏,祝老板心想事成

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

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

打赏作者

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

抵扣说明:

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

余额充值