通过微信订阅消息功能给小程序给用户发送消息

问题:对于小程序用户报名活动后,我们要通过小程序来给用户发送活动结果。
方案:通过查阅资料(微信官方文档)调用微信小程序订阅消息相关接口。
接口地址
  • POST https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=ACCESS_TOKEN
请求参数
属性类型必填说明
access_tokenstring接口调用凭证
touserstring接收者(用户)的 openid
template_idstring所需下发的订阅模板
idpagestring点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。
dataObject模板内容,格式形如 { “key1”: { “value”: any }, “key2”: { “value”: any } }
miniprogram_statestring跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版
langstring进入小程序查看”的语言类型,支持zh_CN(简体中文)、en_US(英文)、zh_HK(繁体中文)、zh_TW(繁体中文),默认为zh_CN
简单代码实现
 /**
     * 发送订阅消息
     *
     * @param subscribeMsg
     * @param openid
     * @return
     */
    public static BaseResponse<String> sendSubscribeMsg(BaseSubscribeMsg subscribeMsg, String openid) {
        logger.info("发送订阅消息: openid: {}, subscribeMsg: {}", openid, subscribeMsg);

        String token = subscribeMsg.getToken();
        if (StrUtil.isBlank(openid)) {
            return BaseResponse.ok("不明确的接收人");
        }
        if (StrUtil.isBlank(token)) {
            return BaseResponse.ok("微信请求异常,请稍后重试");
        }

        String sendResult = null;
        try {
            HashMap<String, Object> requestParam = TaobaoRequest.requestFormParam();
            requestParam.put("touser", openid);
            requestParam.put("template_id", subscribeMsg.getTemplatId());
            requestParam.put("data", subscribeMsg.getData());
            String page = subscribeMsg.getPage();
            if (StrUtil.isNotBlank(page)) {
                requestParam.put("page", page);
            }
            sendResult = HttpUtil.post(BaseSubscribeMsg.REQUEST_URL+"?access_token="+token, JSONObject.fromObject(requestParam).toString());
            JSONObject sendResultJO = JSONObject.fromObject(sendResult);
            if (sendResultJO == null || !sendResultJO.has("errcode") || !"0".equals(sendResultJO.getString("errcode"))) {
                logger.warn("发送订阅消息失败" + sendResultJO.toString());
                return BaseResponse.bad(sendResultJO.toString());
            }
        } catch (Exception e) {
            logger.error("发送订阅消息异常: {}, {}", sendResult, e);
        }
        return BaseResponse.ok();
    }

请求示例:

{
 "touser":"o6f6R4hXIJ9nQvj9CIrSnm15idVg",
  "template_id": "fU_9Zjs1IaMvOJO2DQDCp04Nrxu2V94eavXDEv9KXWk",
  "page": "index",
  "miniprogram_state":"developer",
  "lang":"zh_CN",
  "data": {
      "thing1": {
          "value": "测试内容"
      },
      "date2": {
          "value": "2020年10月27日"
      }
  }
}
特别注意
  • 模板id通过后台管理平台获取的为准
  • 填写模板内容的时候,参数名及参数类型要对应上建的模板里的,如下图标识
    在这里插入图片描述

参数不对会报错:

{
 "errcode": 47003,
 "errmsg": "argument invalid! data.date2.value is emtpy rid: 5f97ef46-0f877411-447f13c1"
}

误以为错误为模板id出现问题,模板不起作用,实质是参数错了。

注意点:每个类型的数据长度是有限制的,参考官网,如果模板发送失败,请不要忽略了这个原因,具体限制如下图:
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值