微信小程序消息订阅Java

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

前言

编写日期 : 2022-11-04

写这篇文章原因

公司给政府做一个订餐系统,需要在员工在小程序上发起订餐后经过部门领导和书记的审批后,再由食堂确认订餐结果。在订餐审批单在各个节点流转的过程中,需要给每一个节点的审批人发送微信订阅消息手机短信,通知订餐流程所在节点的人有新的订餐审批单需要审批,最终将订餐结果通过微信订阅消息手机短信反馈给订餐人员。手机短信那块后端很好整,没啥问题,但是这个微信小程序发送订阅消息这个没有整过,有点懵,但不慌。本来这个微信的消息订阅前端已经做好了,但是架构师说这块的逻辑后端做,所以我就来搞这个了。

官方文档说明

链接 :>>>微信小程序发送订阅消息官方文档 <<<

调用方式 HTTPS 调用
POST https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=ACCESS_TOKEN

请求参数

属性 类型 类型 说明
access_token String 需要用小程序的appid和密钥secret去调用 官方 接口获取
template_id String 所需下发的订阅模板id
page String 点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转
touser String 接收者(用户)的 openid,
data String 模板内容,格式形如 { “key1”: { “value”: any }, “key2”: { “value”: any } }的object
miniprogram_state String 跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版
lang String 进入小程序查看”的语言类型,支持zh_CN(简体中文)、en_US(英文)、zh_HK(繁体中文)、zh_TW(繁体中文),默认为zh_CN

申请的微信订阅消息模板

微信小程序消息订阅Java

访问接口传参示例

{
  "touser": "OPENID",
  "template_id": "TEMPLATE_ID",
  "page": "index",
  "miniprogram_state":"developer",
  "lang":"zh_CN",
  "data": {
      "thing1": {
          "value": "金先生"
      },
      "time2": {
          "value": "2020-05-01"
      },
      "phrase13": {
          "value": "成功"
      } ,
      "thing17": {
          "value": "xx地方"
      }
  }
}

代码

需要用到的当前小程序的参数

  • appid 小程序的appid
  • secret 小程序密钥
  • TempId 申请的订阅消息模板id

获取access_token


	@Value("${wx.xiaochengxu.appid}")
    private String appid;
    @Value("${wx.xiaochengxu.secret}")
    private String secret;

 /**
  *	@param appid secret
  */
  	@Override
	public String getAccessToken() {
	        HttpResponse response = HttpRequest.get("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + secret + "").execute();
	        JSONObject tokenJson = JSON.parseObject(response.body());
	        String accessToken =  tokenJson.get("access_token").toString();
	        return accessToken;
	    }

发送订阅消息

请求参数
public class SendMsgBody {

    /*接收者(用户)的 openid*/
    private String touser;

    /*所需下发的订阅模板id*/
    private String template_id;

    /*点击消息后跳转的页面*/
    private String page;

    /*跳转小程序类型:developer 为开发版;trial 为体验版;formal 为正式版;默认为正式版*/
    private String miniprogram_state="developer";

    /*进入小程序查看”的语言类型,支持zh_CN(简体中文)、en_US(英文)、zh_HK(繁体中文)、zh_TW(繁体中文),默认为zh_CN返回值*/
    private String lang="zh_CN";

    /*模板数据,这里定义为object是希望所有的模板都能使用这个消息配置*/
    private Object data;


    public String getTouser() {
        return touser;
    }
    public void setTouser(String touser) {
        this.touser = touser;
    }
	//template_id、page、data ==>getset
}
请求参数中的data
public class MsgSuccess {

    /*姓  名*/
    private Map<String, String> thing1;

    /*预约时间*/
    private Map<String, String> time2;

    /*预约状态*/
    private Map<String, String> phrase13;

    /*预约地点*/
    private Map<String, String> thing17;

    public Map<String, String> getThing1() {
        return thing1;
    }

    public Map<String, String> getTime2() {
        return time2;
    }

    public Map<String, String> getPhrase13() {
        return phrase13;
    }

    public Map<String, String> getThing17() {
        return thing17;
    }

    public void setThing1(String thing1) {
        this.thing1 = getFormat(thing1);
    }

    public void setTime2(String time2) {
        this.time2 = getFormat(time2);
    }

    public void setPhrase13(String phrase13) {
        this.phrase13 = getFormat(phrase13);
    }

    public void setThing17(String thing17) {
        this.thing17 = getFormat(thing17);
    }

    public HashMap<String, String> getFormat(String str) {
        return new HashMap<String, String>() {{
            put("value", str);
        }};
    }

    @Override
    public String toString() {
        return "DCSuccess{" +
                "thing1=" + thing1 +
                ", time2=" + time2 +
                ", phrase13=" + phrase13 +
                ", thing17=" + thing17 +
                '}';
    }
}
发送消息
	@Value("${wx.xiaochengxu.sendMsg.successTempId}")
    private String tempId;//模板id

	@Override
	public void wxSendMsgSuccess(String openId, Map<String, String> node) {
	        String accessToken = getAccessToken() ;
	
	        //先填充请求体中data的数据
	        MsgSuccess msgSuccess = new MsgSuccess ();
	        msgSuccess .setThing1(node.get("thing1"));
	        msgSuccess .setTime2(node.get("time2"));
	        msgSuccess .setPhrase13("成功");
	        msgSuccess .setThing17(node.get("thing17"));
	
			//请求参数数据填充
	        SendMsgBody sendMsgBody = new SendMsgBody();
	        sendMsgBody.setTouser(openId);
	        sendMsgBody.setTemplate_id(tempId);
	        sendMsgBody.setData(msgSuccess);
	
	        String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + accessToken;
	
	        //发送请求
	        MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
	        HttpHeaders headers = new HttpHeaders();
	        headers.setContentType(type);
	        HttpEntity<SendMsgBody> httpEntity = new HttpEntity<>(sendMsgBody, headers);
	        JSONObject jsonResult = restTemplate.postForObject(url, httpEntity, JSONObject.class);
	        JSONObject responseData = jsonResult ;
	
	        Integer errorCode = responseData.getInteger("errcode");
	        String errorMessage = responseData.getString("errmsg");
	        if (errorCode == 0) {
	            log.info("订餐通知消息发送成功");
	        } else {
	            log.info("订餐通知消息发送失败,errcode:{},errorMessage:{}", errorCode, errorMessage);
	        }
	    }
调用
    @GetMapping("wxSendSuccess")
    @ApiOperation(value = "微信小程序发送订阅消息通知")
    public boolean wxSendSuccess(){
        String openId = "oks*******************Gk";
        HashMap<String, String> map = new HashMap<>();
        map.put("thing1","***");
        map.put("time2","2022-11-03 12:13");
        map.put("thing17","405");
        return wxService.wxSendMsgSuccess(openId,map);
    }

结果

微信小程序消息订阅Java

总结

咱们这个消息的订阅前端授权一次后,咱们也就只能发送成功一次,在接收订阅消息的用户没有同意接收订阅信息的时候,我们调用接口给用户发送订阅消息基本都会被拒绝。请求结果如下:

errcode:43101,errorMessage:user refuse to accept the msg rid: 6363495-2267c4de-7aa0fab1

如果你的小程序没有进行政府 医疗等认证,那你就不能长期订阅,所以每一次订阅消息的发送都需要接收方的一次授权,并且接收放的授权次数是可以累加的,比如说这次订阅了你没发订阅消息,下次再继续订阅,你就可以连续发两条订阅成功。但是在特殊情况下小程序方也会清楚所有的授权次数。文章来源地址https://www.toymoban.com/news/detail-496169.html

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

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

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

相关文章

  • 微信小程序订阅消息

    subscribeMessage.send | 微信开放文档 由于业务需求 , 需要实现小程序订单状态发送给用户 , 于是微信小程序发送订阅消息就被找到了 这里前端是使用了uniapp , 具体实现方式不清楚,就不瞎bb了 后端这里就是上面的接口文档 , 总共需要是三个步骤 1. 获取小程序 appid 和 密钥 2. 订阅消

    2024年02月09日
    浏览(55)
  • 微信小程序--订阅消息

    关于小程序订阅消息之一次性订阅: 一次性订阅是指授权一次方可接收一次消息;这个最好的应用场景就是自己给自己发送消息,比如订单,当自己下单成功时,调用此接口,会在微信服务消息收到下单成功通知等具体详情。 如果是给别人发,一次性订阅就不适合,类似你

    2024年02月07日
    浏览(43)
  • uniapp 小程序订阅消息 一次订阅多个 wx.requestSubscribeMessage 微信小程序订阅消息

    如图所示,订阅消息 官方文档: 小程序订阅消息官方文档 1,消息类型 (1) 一次性订阅消息 用户自主订阅后,开发者可不限时间地下发一条对应的服务消息;每条消息可单独订阅或退订。 (2) 长期订阅消息 用户订阅一次后,开发者可长期下发多条消息。 目前长期性订阅消息

    2024年02月09日
    浏览(62)
  • 微信小程序 如何订阅消息?

    微信公众号分为两种类型:订阅号和服务号,它们在功能和使用方式上有一些区别。 1.订阅号(Subscription Account): 2.服务号(Service Account): 微信公众号的类型是在注册时选择的,一旦选择了订阅号或服务号,无法直接转换。如果您主要是提供资讯和更新性内容,订阅号可

    2024年02月06日
    浏览(60)
  • 微信小程序之订阅消息

    其实客户端的步骤很简单 这里放上文档地址 https://developers.weixin.qq.com/miniprogram/dev/api/open-api/subscribe-message/wx.requestSubscribeMessage.html 第一步 首先我们需要到微信公众平台的 订阅消息-公共消息模板处选择需要的模板添加到-我的模板。 通过wx.requestSubscribeMessage()方法调起小程序订

    2024年02月11日
    浏览(46)
  • 微信小程序——订阅通知消息

    1.在微信公众平台的订阅消息页面设置模板消息 2.后端发送订阅消息需要得到用户的唯一id 通过   wx.login() 获取微信的唯一配置 code (每一个微信号只有一个code) 通过接口把获取到的 code 发送给后端 获取openid   3.在登录页面点击登录按钮的时候让用户同意接收订阅消息 使用

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

    消息能力是小程序能力中的重要组成,我们为开发者提供了订阅消息能力,以便实现服务的闭环和更优的体验。 订阅消息推送位置:服务通知 订阅消息下发条件:用户自主订阅(用户订阅了才能接收推送的消息) 订阅消息卡片跳转能力:点击查看详情可跳转至该小程序的页

    2024年02月05日
    浏览(44)
  • 微信小程序:发送小程序订阅消息

    文档:小程序订阅消息(用户通过弹窗订阅)开发指南 在微信公众平台(https://mp.weixin.qq.com)手动配置获取模板 ID 2.1、获取消息下发权限 文档:一次性订阅消息、长期订阅消息 示例代码 这里需要注意一个坑,如果用户未授权,需要引导用户打开设置手动设置 2.2、获取登录凭

    2024年01月25日
    浏览(43)
  • 微信小程序-小程序订阅消息(四)

    小程序订阅消息 | 微信开放文档 消息能力是小程序能力中的重要组成,我们为开发者提供了订阅消息能力,以便实现服务的闭环和更优的体验。 订阅消息推送位置:服务通知 订阅消息下发条件:用户自主订阅 订阅消息卡片跳转能力:点击查看详情可跳转至该小程序的页面

    2024年02月11日
    浏览(45)
  • 微信小程序通知,微信小程序长期订阅消息添加硬件设备能力的设备订阅消息step-by-step

    本文目的,分享一个实际案例: 开发微信小程序的报警器的微信订阅消息, 设备报警后触发微信报警 前提: 有一个微信小程序并且微信认证过。 1: 添加设备申请权限 2:按照实际情况填写设备信息, 一般等两天到三天能审核过  3: 申请设备消息能力 , 这个一部不做的

    2024年04月16日
    浏览(53)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包