• uniapp开发微信、支付宝小程序订阅消息


    微信小程序订阅消息

    一、小程序订阅模板准备

    使用微信小程序账号登录微信公众平台,找到如下页面,点击选用,选择自己需要的合适的模板。
    
    • 1

    微信发送订阅消息接口文档在这里插入图片描述

    1.1、获取模板id及模板字段名称

    在这里插入图片描述
    注意点:
    消息字段的类型是有校验的,充电度数是number类型,则传入的string中不能使用0.00度。则会报错。

    二、Java服务端代码

    2.1、编写消息模板配置文件

    用于保存消息的id和pages
    
    • 1
    package com.nis.charge.config.wechat;
    
    
    import lombok.Getter;
    
    /**
     * 

    微信订阅消息模板

    * * @author lwj */
    @Getter public enum WechatMsgTempConfig { /** * 开始充电 */ START_CHARGE("76-w0HT6wfZVP0F8DtVNuGyOWWMALAmQHPgBBgcQUgY", "/pages/mine/charge-record/charge-record"), ; /** * 缓存键 */ private String tempId; /** * 订阅消息跳转的url */ private String page; WechatMsgTempConfig(String tempId, String page) { this.tempId = tempId; this.page = page; } }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    2.2、编写订阅消息请求对象

    package com.nis.charge.domain.dto.subscribeMsg.model.wechat;
    
    import lombok.Builder;
    import lombok.Data;
    
    /**
     * 

    微信小程序订阅消息请求参数

    * * @author lwj */
    @Data @Builder public class WechatMiniMsgParams { /** * 接口调用凭证 */ private String access_token; /** * 模板id */ private String template_id; /** * 点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转 */ private String page; /** * 接收者(用户)的 openid */ private String touser; /** * 模板内容,格式形如 { "key1": { "value": any }, "key2": { "value": any } }的object */ private Object data; /** * 跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版 */ private String miniprogram_state; /** * 进入小程序查看”的语言类型,支持zh_CN(简体中文)、en_US(英文)、zh_HK(繁体中文)、zh_TW(繁体中文),默认为zh_CN */ private String lang; }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    2.3、编写充电开始订阅消息模板对象

    2.2.1、DataEntry
    package com.nis.charge.domain.dto.subscribeMsg.model;
    
    import lombok.AllArgsConstructor;
    import lombok.Builder;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    import java.io.Serializable;
    
    /**
     * @Author 朱潘栋
     * @Data 15:28 2021/8/20
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    public class DataEntry implements Serializable {
    
        private static final long serialVersionUID = 7946471752462379765L;
        private String value;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    2.2.2、ChargeStartModel
    package com.nis.charge.domain.dto.subscribeMsg.model.wechat;
    
    import com.fasterxml.jackson.annotation.JsonInclude;
    import com.nis.charge.domain.dto.subscribeMsg.model.DataEntry;
    import lombok.AllArgsConstructor;
    import lombok.Builder;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    /**
     * 

    充电开始微信订阅消息模板

    * 订单编号{{character_string11.DATA}} * 开始时间{{time2.DATA}} * 充电站名称{{thing5.DATA}} * 充电桩编码{{character_string6.DATA}} * 充电插座{{thing7.DATA}} * * @author lwj */
    @Data @Builder @NoArgsConstructor @AllArgsConstructor @JsonInclude(JsonInclude.Include.NON_EMPTY) public class ChargeStartModel { /** * 订单编号 */ private DataEntry character_string11; /** * 开始时间 */ private DataEntry time2; /** * 充电站名称 */ private DataEntry thing5; /** * 充电桩编码 */ private DataEntry character_string6; /** * 充电插座 */ private DataEntry thing7; }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50

    2.4、编写发送接口

       /**
         * 发送充电开始订阅消息
         *
         * @return
         */
        @Override
        public boolean sendChargeStartMsg(String openId, String orderId, String createTime, String placeName, String equipCode, String portName) {
            boolean sendSuccess = false;
    
            String accessToken = iWechatService.getAccessToken();
            ChargeStartModel startCharge = ChargeStartModel.builder().character_string11(DataEntry.builder().value(orderId).build())
                    .time2(DataEntry.builder().value(createTime).build())
                    .thing5(DataEntry.builder().value(placeName).build())
                    .character_string6(DataEntry.builder().value(equipCode).build())
                    .thing7(DataEntry.builder().value(portName).build()).build();
            WechatMiniMsgParams wechatMiniMsgParams = WechatMiniMsgParams.builder()
                    .touser(openId).template_id(WechatMsgTempConfig.START_CHARGE.getTempId()).page(WechatMsgTempConfig.START_CHARGE.getPage())
                    .data(startCharge).build();
            JSONObject jsonResult = restTemplate.postForObject(WechatConstant.SEND_SUBSCRIBE_URL + "?access_token=" + accessToken, wechatMiniMsgParams, JSONObject.class);
            log.info("充电开始推送消息返回参数:{}", JSON.toJSONString(jsonResult));
            Integer errorCode = jsonResult.getInteger("errcode");
            String errorMessage = jsonResult.getString("errmsg");
            if (errorCode == 0) {
                sendSuccess = true;
                log.info("充电开始推送消息发送成功");
            } else {
                log.info("充电开始推送消息发送失败,errcode:{},errorMessage:{}", errorCode, errorMessage);
            }
            return sendSuccess;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    三、uniapp代码

    uni.requestSubscribeMessage({
    	tmplIds: ['76-w0HT6wfZVP0F8DtVNuGyOWWMALAmQHPgBBgcQUgY'],
    	complete(res) {
    		//	调用支付接口
    		_this.wechatPay(chargeData)
    	}
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    四、测试

    在这里插入图片描述

  • 相关阅读:
    卷积层的输出
    到了30岁,我才有了深刻的感悟:千万不要一辈子靠技术生存
    K8S中的某个容器突然出现内存和CPU占用过高的情况解决办法
    在Qt creator中使用多光标
    带UI的Qt自定义标题栏
    学习笔记二十四:K8S四层代理Service
    vue中app.use()做了什么
    TCP 拥塞控制
    HTML按钮通过JS实现选中和取消
    如何使用选择工具
  • 原文地址:https://blog.csdn.net/weixin_38657051/article/details/126599033