【订阅消息】微信小程序发送服务通知

2 篇文章 0 订阅
2 篇文章 0 订阅

前言

    由于上次的公众号测试消息推送次数太多被官方认为是推销或者是广告之类的,被微信官方给禁了,然后偶然在一次吃饭的时候扫码点餐下单之后有个弹窗勾选订单完成通知,勾选之后就餐之后就会发送一个服务通知告诉您的订单已完成,其实基于这种消息提醒也是现在最常见的消息提醒方式之一。

一、什么是消息推送

小程序订阅消息
功能介绍

消息能力是小程序能力中的重要组成,我们为开发者提供了订阅消息能力,以便实现服务的闭环和更优的体验

  • 订阅消息推送位置: 服务通知
  • 订阅消息下发条件: 用户自主订阅
  • 订阅消息卡片跳转能力: 点击查看详情可跳转至该小程序的页面

二、整体展示

  订阅 和 推送

 

 

三、实现步骤

3.1 小程序开通订阅消息申请模板消息

 四、后台代码实现

4.1获取权限AccessToken:

/**
 * @author rwy
 * @Title:
 * @Package
 * @Description:
 * @date 2023-07-21 9:30
 */
public class WeChatUtil {
    //appId和secret 在小程序开发管理页面

    //微信小程序appId
    @Value("${wx.xcx.appId")
    private String appId;

    //微信小程序secret
    @Value("${wx.xcx.appSecret")
    private String appSecret;

    /**
     * 请求微信接口服务,获取小程序全局唯一后台接口调用凭据(access_token)
     * @param appid
     * @param secretKey
     * @return
     */
    public static JSONObject  getAccessToken(String appid, String secretKey) {
        String result = null;
        try {
            String baseUrl = "https://api.weixin.qq.com/cgi-bin/token";
            HashMap<String, Object> requestParam = new HashMap<>();
            // 小程序 appId
            requestParam.put("grant_type", "client_credential");
            // 小程序唯一凭证id appid:(换成自己的)
            requestParam.put("appid", appid);
            // 小程序 appSecret(小程序的唯一凭证密钥,换成自己的)
            requestParam.put("secret", secretKey);
            // 发送GET请求读取调用微信接口获取openid用户唯一标识
            result = HttpUtil.get(baseUrl, requestParam);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return JSONUtil.parseObj(result);
    }
}

4.2请求发送使用hutool中的HttpUtil,引入的依赖如下:

   <dependency>
       <groupId>cn.hutool</groupId>
       <artifactId>hutool-all</artifactId>
       <version>5.2.4</version>
   </dependency>

4.3发送消息具体逻辑:

@PostMapping("/program")
    public Result<?> program(){
        log.info("发微信小程序消息模板");

        // 接口调用凭证:accessToken
        String accessToken = weChatUtil.getAccessToken();
        System.out.println(accessToken);
        String weChatUrl = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+accessToken;

        // 构建请求参数
        Map<String, Object> params = new HashMap<>();
        // 用户openId
        params.put("touser","og2qF64Sx8ZoEuxWKsxxxxxxxxxx");
        // 模板Id
        params.put("template_id","hXCYU9OvCxYcJpc3iVzwtORGaxxxxxxxxxxxx");
        // 点击消息跳转地址
        params.put("page","/pagesC?sceneId=1");
        // 跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版
        params.put("miniprogram_state","trial");
        // 进入小程序查看”的语言类型,支持zh_CN(简体中文)、en_US(英文)、zh_HK(繁体中文)、zh_TW(繁体中文),默认为zh_CN
        params.put("lang","zh_CN");

        // 封装参数
        Map<String, Object> data = new HashMap<>();
        Map<String, Object> thing3 = new HashMap<>();
        thing3.put("value","xxxx");
        data.put("thing3",thing3);

        Map<String, Object> time4 = new HashMap<>();
        time4.put("value", "12:00");
        data.put("time4", time4);

        Map<String, Object> thing5 = new HashMap<>();
        thing5.put("value", "已生成");
        data.put("thing5", thing5);

        params.put("data",data);

        // 执行请求
        String jsonSting= HttpUtil.post(weChatUrl, new JSONObject(params).toString());
        System.out.println(jsonSting);

        return Result.OK(jsonSting);
    }

请求与返回示例:

// 请求示例
{
  "touser": "xxxxxxx",
  "template_id": "TEMPxxxxLATExxx_ID",
  "page": "index",
  "miniprogram_state":"developer",
  "lang":"zh_CN",
  "data": {
      "thing3": {
          "value": "sdads"
      },
      "time4": {
          "value": "12:00"
      },
      "thing5": {
          "value": "xxxx"
      }
      
  }
}


// 返回参数
{
    "errcode":0,
    "errmsg":"ok"
}

发送订阅消息 | 微信开放文档

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值