微信小程序实现订阅消息推送的实现步骤

这篇具有很好参考价值的文章主要介绍了微信小程序实现订阅消息推送的实现步骤。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、准备工作

  准备小程序账号、开发环境,我小程序是基于uniapp开发,后台代码基于SpringBoot开发。同时先阅读官方文档,了解小程序订阅消息和后端如何发送订阅消息等相关知识,官方文档地址如下:

  1. 《小程序订阅消息》
  2. 《发送订阅消息》

2、实现步骤

2.1、启用并配置消息推送

   登录微信小程序后台,在开发->开发管理->开发设置,下拉到消息推送面板,填写自己的服务器推送地址。 Token(令牌)和EncodingAESKey(消息加密密钥)随意,设置后最好不要再改变也不要泄露,后台接口校验需要使用。
微信小程序订阅消息,笔记,微信小程序,订阅消息

2.2、搭建推送接口服务

   在上述的配置中,需要用到相关服务接口,该服务接口需要两个同名的接口,一个支持Get ,另外一个支Post,其中Get方法主要实现权限归属认证,只调用一次;而Post方法, 当用户在微信小程序中主动订阅一次性消息时,腾讯服务器将请求Post的接口,发送用户的相关行为事件结果到开发者服务器,只有用户订阅的用户才允许进行消息推送,其实这里接收的不只是消息订阅事件,各类的交互事件都在这里进行接收的。下面代码,只是简单实现了解析,没有具体实现相关逻辑。

@RequestMapping(value = "get")
    @ResponseBody
    public String get(HttpServletRequest request,String signature, String timestamp, String nonce, String echostr) {
        if(request.getMethod().equalsIgnoreCase("get")){//用来校验,一般会验证前端配置的token等,这里简化了代码。
            return echostr;
        }else if(request.getMethod().equalsIgnoreCase("POST")){//接收用户的相关行为事件结果
            try {
                BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream()));
                StringBuilder requestContent = new StringBuilder();
                String line;
                while ((line = reader.readLine()) != null) {
                    requestContent.append(line);
                }
                reader.close();
                //接收:{"ToUserName":"gh_ea84a199bf81","FromUserName":"oG0NJ5Oi_3Dd1HlZJ14xfnA0sJ6s","CreateTime":1686131943,"MsgType":"event","Event":"subscribe_msg_popup_event","List":{"PopupScene":"0","SubscribeStatusString":"accept","TemplateId":"4ondVRxk4L20ihrJ3iI15BDK72XatGPxE0MeCVwHasQ"}}
                logger.info("接收:" + requestContent.toString());
                return "";
            } catch (IOException e) {
                // 处理异常情况
                e.printStackTrace();
                logger.error("异常:" + e.getMessage());
                return e.toString();
            }
        }else{
            logger.info("不是get 或 post方法");
            return null;
        }
    }
2.3、消息模板申请

  在微信公众平台选择公共模板或者申请符合自己需求的模板(需要符合规则)。这里我们选择了一个公共的模板,申请通过后,我们就可以获取到消息模板ID和详细内容等信息。

1、对于个人开发者的微信小程序账号,是无法直接添加订阅消息模板的。订阅消息模板的功能只对企业主体的微信公众号和小程序开放。
2、个人开发者账号只能使用已经存在的订阅消息模板进行订阅消息推送,无法自定义和添加新的模板。

微信小程序订阅消息,笔记,微信小程序,订阅消息
微信小程序订阅消息,笔记,微信小程序,订阅消息

2.4、用户授权

  在小程序中获取用户订阅消息的授权:在小程序中,你需要调用wx.requestSubscribeMessage接口获取用户的订阅消息授权。用户同意授权后,你可以得到用户的订阅消息订阅状态。

//uniapp封装了wx.requestSubscribeMessage接口
uni.requestSubscribeMessage({
 tmplIds: ['4ondVRxk4L20ihrJ3iI15BDK72XatGPxE0MeCVwHasQ'],
  success (res) {
	  console.log(res);
  }
})

该方法的详细用法,请参考 《wx.requestSubscribeMessage(Object object)用法》官方文档。

  点击调用了上述方法的按钮,就会弹出如下页面,选择允许后,就可以接收后端推送的通知消息了。

微信小程序订阅消息,笔记,微信小程序,订阅消息

2.5、消息推送实现

  在实际应用中,我们应该维护一张需要推送消息的微信用户数据表,包括该用户是否已订阅,微信用户的openid等信息,这里暂时演示,省略了该信息,直接固定硬编码了模板ID、消息内容、微信用户openId等信息。

/**
 * 订阅消息推送方法
 */
public class WeChatSubscribeMessageSender {
    private static final String API_URL = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send";
    public static void sendSubscribeMessage(String accessToken, String openid, String templateId, String page, String data) {
        try {
            String url = API_URL + "?access_token=" + accessToken;

            URL apiUrl = new URL(url);
            HttpURLConnection connection = (HttpURLConnection) apiUrl.openConnection();
            connection.setRequestMethod("POST");
            connection.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
            connection.setDoOutput(true);

            // 构建请求体
            String body = buildRequestBody(openid, templateId, page, data);
            byte[] requestBodyBytes = body.getBytes(StandardCharsets.UTF_8);

            // 发送请求
            connection.getOutputStream().write(requestBodyBytes);

            // 读取响应
            int responseCode = connection.getResponseCode();
            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            StringBuilder response = new StringBuilder();
            String line;
            while ((line = reader.readLine()) != null) {
                response.append(line);
            }
            reader.close();

            if (responseCode == HttpURLConnection.HTTP_OK) {
                // 请求成功处理逻辑
                System.out.println("发送订阅消息成功");
                System.out.println(response.toString());
            } else {
                // 请求失败处理逻辑
                System.out.println("发送订阅消息失败");
                System.out.println("响应码:" + responseCode);
                System.out.println(response.toString());
            }

            connection.disconnect();
        } catch (IOException e) {
            // 异常处理逻辑
            e.printStackTrace();
        }
    }

    private static String buildRequestBody(String openid, String templateId, String page, String data) {
        // 构建请求体的JSON字符串
        return String.format(
                "{\"touser\":\"%s\",\"template_id\":\"%s\",\"page\":\"%s\",\"data\":%s}",
                openid, templateId, page, data);
    }
}
//推送消息的时候需要accessToken,这里是获取token的方法,在实际环境中,一般是定时刷新,两个小时内有效,获取accesstoken时需要appid和secret信息,一般是后台参数或常量进行配置。
 //获取accessToken的请求接口
private final static String GetAccessToken = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={appid}&secret={secret}";

public String refreshAccessToken(String appid, String secret){
        if(StringUtils.isEmpty(appid) || StringUtils.isEmpty(secret)){
            logger.error("刷新微信AccessToken时,缺少appid或secret参数!");
            throw new WxBzException(SysErrorCode.SYS_ERROR_700000,"刷新微信AccessToken时,缺少appid或secret参数!");
        }
        Map<String, Object> param = new HashMap<>();
        param.put("appid",appid);
        param.put("secret",secret);
        ResponseEntity<JSONObject> resp = restTemplate.getForEntity(GetAccessToken, JSONObject.class,param);
        JSONObject jsonObj = resp.getBody();
        String accessToken = null;
        if(jsonObj != null){
            accessToken = jsonObj.getString("access_token");
        }
        return accessToken;
    }
//消息推送的模拟方法
@Controller
@RequestMapping(value = "/api/wx/xcx")
public class WxApi {

    Logger logger = LoggerFactory.getLogger(WxApi.class);

    @Autowired
    private WxCommonService wxCommonService;

    @RequestMapping(value = "sendMsg")
    @ResponseBody
    public String sendMsg(HttpServletRequest request){
        //String token = request.getParameter("token");
        //请求 微信接口 获取 accessToken
        String accessToken = wxCommonService.refreshAccessToken(WxConstants.WX_XCX_APPID,WxConstants.WX_XCX_SECRET);
        String openid = "接收消息的微信用户的openId";
        String templateId = "微信订阅消息模板";
        String page = "点击消息的跳转路径";
        // 构建订阅消息内容的JSON对象
        // 构建订阅消息内容的JSON对象
        JSONObject messageData = new JSONObject();
        messageData.put("thing1", createDataItem("提醒内容", "您有新的提醒"));
        messageData.put("thing2", createDataItem("作业名称", "Java作业"));
        messageData.put("time3", createDataItem("截至日期", "2023-06-30"));
        messageData.put("thing4", createDataItem("发布人员", "张三"));
        // 将订阅消息内容转换为JSON字符串
        String jsonData = messageData.toJSONString();
        WeChatSubscribeMessageSender.sendSubscribeMessage(accessToken,openid,templateId,page,jsonData);
        return null;
    }
    private static Map<String, Object> createDataItem(String name, String value) {
        Map<String, Object> item = new HashMap<>();
        item.put("value", value);
        return item;
    }
}
2.6、测试模拟消息

  完成上述工作后,启动服务,先通过微信小程序进行消息订阅,
然后调用模拟消息推送的方法http://localhost:8080/api/wx/xcx/sendMsg,这个时候微信服务中就会收到消息,如下图所示;
微信小程序订阅消息,笔记,微信小程序,订阅消息文章来源地址https://www.toymoban.com/news/detail-552596.html

到了这里,关于微信小程序实现订阅消息推送的实现步骤的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序云开发定时推送订阅消息

    (1)点击订阅消息 (2)点击公共模板库,然后找到想要选用的模板,点击选用。 (3)在我的模板里面,复制模板id。 如果找不到想要用的模板,可以在公共模板的最后一页,点击下图中圈出来的,去申请自己想要的模板。 (1)云函数部分的代码 config.json 云函数配置文件

    2024年02月09日
    浏览(47)
  • 微信小程序订阅消息推送(附带后台java代码)

    官方文档: 小程序前端:点击进入 小程序服务端:点击进入 一,代码实现(后端) ①定义实体类 ②定义HttpUtil类(Get请求) ③验证token过期时间 ④小程序发送消息 AuthUtil工具类

    2024年02月14日
    浏览(45)
  • 如何为微信小程序添加订阅消息和推送通知功能

    为微信小程序添加订阅消息和推送通知功能是非常有用的,它可以让用户在重要的事件发生时及时地收到通知。在本文中,我们将详细介绍如何为微信小程序添加这两种功能。 一、订阅消息 订阅消息是一种新的消息类型,用户可以选择是否订阅它们。订阅消息一般用于向用

    2024年02月04日
    浏览(74)
  • 微信小程序的订阅消息是一个允许开发者向用户发送重要通知的功能。这里为您展示如何实现小程序订阅消息的基本步骤和代码示例

    步骤 1: 获取模板 ID 首先,您需要登录微信公众平台,进入「小程序管理」后台,找到“设置” “开发设置” “订阅消息”,然后选择并配置所需的模板,记录模板 ID。 步骤 2: 小程序前端请求订阅 在小程序的某个页面或组件中,当用户执行某个操作(例如点击按钮)时,可

    2024年02月04日
    浏览(94)
  • uni-app中实现微信小程序/公众号订阅消息推送功能

    👨🏻‍💻 热爱摄影的程序员 👨🏻‍🎨 喜欢编码的设计师 🧕🏻 擅长设计的剪辑师 🧑🏻‍🏫 一位高冷无情的编码爱好者 大家好,我是全栈 IT 工程师摘星人 欢迎分享 / 收藏 / 赞 / 在看! 开发业务时时常遇到需要向用户发送一些通知,如欠费通知、会员到期通知等等。

    2024年02月02日
    浏览(136)
  • java实现微信小程序订阅和推送订阅信息

    1、进入微信公众平台,扫码登录 2、获取appid和secret 3、配置模板 在对应yml中配置 前端调用弹出是否订阅时调用后台服务 1、controller 2、后端接参AddSinosoftWxSubscribeParam 3、service 一般时通过时间或者调度进行调用服务,以下只进行服务实现展示 1、在domain层写send方法 1、首先小

    2024年02月13日
    浏览(51)
  • 微信小程序实现订阅消息功能

             * 源码已经上传到资源处,需要的话点击跳转下载 |  源码下载         小程序中的订阅内容在日常中大家都会使用到,一般在支付的时候,会收到支持成功的消息,里面有一些基础信息花费多少以及是使用在什么地方,订阅消息是小程序向用户发送消息的方式

    2024年02月08日
    浏览(58)
  • Java开发微信小程序订阅消息推送

    使用到开源工具WxJava 这里环境使用到springboot 框架,废话不多说直接上干货。 pom.xml引用 application配置 templateId具体申请在微信公众平台 具体如下   wx配置代码编写 模板代码编写 这里注意模板对应的字段 具体代码  然后和前端一配合就完事了,非常简单

    2024年02月16日
    浏览(52)
  • 使用Java实现微信小程序订阅消息

    首先到微信小程序的官网,选择合适自己的订阅消息模板。 寻找到适合自己的模板之后,记住模板ID,点开详情,记住每个字段id 微信小程序订阅消息官网文档介绍地址:小程序订阅消息 | 微信开放文档 (qq.com) 微信小程序订阅消息接口:发送订阅消息 | 微信开放文档 (qq.com

    2024年02月03日
    浏览(48)
  • SpringBoot实现微信订阅消息推送

    最近公司业务需求,需要实现微信小程序订阅消息推送;因为之前也没接触过,所以也花费了一些时间才完成,所以 在这里我会详细叙述每个步骤,尽量把我所踩的坑体现出来; 其实我做完总结了一下主要就是以下几个步骤,如果不出意外按照下面的步骤就可以实现小程序

    2024年02月04日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包