小程序消息推送_微信小程序消息推送,a触发推送b - CSDN
  • 最近需要开发微信和小程序的推送功能,需要...2 java推送消息给指定小程序用户 老规矩,还是先看效果图 我的这个是跑腿抢单推送,当用户新下单时,会给跑腿员推送消息。 下面开始讲解实现步骤 ...

    本文是比较老得技术来实现,用最新技术实现小程序推送,请看
    5行java代码实现微信小程序模版消息推送 (含springboot后台和小程序源码)
    也可以看最新的视频讲解:https://edu.csdn.net/course/detail/23750

    最近需要开发微信和小程序的推送功能,需要用java后台实现推送,自己本身java和小程序都做,所以就自己动手实现下小程序的模版推送功能推送。

    实现思路

    • 1 小程序获取用户openid,收集formid传给java后台
    • 2 java推送消息给指定小程序用户

    老规矩,还是先看效果图

    在这里插入图片描述
    我的这个是跑腿抢单推送,当用户新下单时,会给跑腿员推送消息。

    下面开始讲解实现步骤

    一,微信小程序管理后台开通模版推送

    在这里插入图片描述
    这里的模版id很重要,接下来我们推送的都是这个模版。

    二,java后台实现推送所需字段

    • 1 看微信官方推送消息所需要的字段
      在这里插入图片描述
      在这里插入图片描述
    • 2 有了官方说明,我门接下来就去拿到官方所需要的这些字段,来组装请求数据就可以了。

    三,下面讲解实现步骤

    我的java后台是基于springboot开发的,如果你不了解spring boot,建议你先去了解下springboot再回来接着学习。
    还有RestTemplate是我们java后台做get和post请求必须的,我们和微信服务器交互就用的RestTemplate

    • 1 首先根据官方推送所需字段组装java-bean
      这里用到两个javabean
    /*
    * 小程序推送所需数据
    * qcl 微信:2501902696
    * */
    @Data
    public class WxMssVo {
        private String touser;//用户openid
        private String template_id;//模版id
        private String page = "index";//默认跳到小程序首页
        private String form_id;//收集到的用户formid
        private String emphasis_keyword = "keyword1.DATA";//放大那个推送字段
        private Map<String, TemplateData> data;//推送文字
    }
    
    /*
    * 设置推送的文字和颜色
    * qcl 微信:2501902696
    * */
    @Data
    public class TemplateData {
        //keyword1:订单类型,keyword2:下单金额,keyword3:配送地址,keyword4:取件地址,keyword5备注
        private String value;//,,依次排下去
    //    private String color;//字段颜色(微信官方已废弃,设置没有效果)
    }
    

    到这里请求推送的数据就组装好了,解下来我们去实现推送功能。
    奥不对,还有一个重要的字段需要获取到:access_token

    access_token的获取

    /*
        * 获取access_token
        * appid和appsecret到小程序后台获取,当然也可以让小程序开发人员给你传过来
        * */
        public String getAccess_token(String appid, String appsecret) {
            //获取access_token
            String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential" +
                    "&appid=" + appid + "&secret=" + appsecret;
            String json = restTemplate.getForObject(url, String.class);
            AccessToken accessToken = new Gson().fromJson(json, AccessToken.class);
            return accessToken.getAccess_token();
        }
    

    这次是真正的可以来请求微信服务器来实现消息推送了

    /*
        * 微信小程序推送单个用户
        * */
        public String pushOneUser(String openid, String formid) {
    
    
            //获取access_token
            String access_token = getAccess_token(ConstantUtils.SCHOOL_APPID, ConstantUtils.SCHOOL_APPSECRET);
            String url = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send" +
                    "?access_token=" + access_token;
    
            //拼接推送的模版
            WxMssVo wxMssVo = new WxMssVo();
            wxMssVo.setTouser(openid);//用户openid
            wxMssVo.setTemplate_id("LzeDP0G5PLgHoOjCMfhu44wfUluhW11Zeezu3r_dC24");//模版id
            wxMssVo.setForm_id(formid);//formid
    
    
            Map<String, TemplateData> m = new HashMap<>(5);
    
            //keyword1:订单类型,keyword2:下单金额,keyword3:配送地址,keyword4:取件地址,keyword5备注
            TemplateData keyword1 = new TemplateData();
            keyword1.setValue("新下单待抢单");
            m.put("keyword1", keyword1);
    
            TemplateData keyword2 = new TemplateData();
            keyword2.setValue("这里填下单金额的值");
            m.put("keyword2", keyword2);
            wxMssVo.setData(m);
    
            TemplateData keyword3 = new TemplateData();
            keyword3.setValue("这里填配送地址");
            m.put("keyword3", keyword3);
            wxMssVo.setData(m);
    
            TemplateData keyword4 = new TemplateData();
            keyword4.setValue("这里填取件地址");
            m.put("keyword4", keyword4);
            wxMssVo.setData(m);
    
            TemplateData keyword5 = new TemplateData();
            keyword5.setValue("这里填备注");
            m.put("keyword5", keyword5);
            wxMssVo.setData(m);
    
            ResponseEntity<String> responseEntity =
                    restTemplate.postForEntity(url, wxMssVo, String.class);
            log.error("小程序推送结果={}", responseEntity.getBody());
            return responseEntity.getBody();
        }
    

    openid可以让小程序开发人员给你传过来,也可以自己获取。
    formid需要小程序开发给你传过来,你也可以把formid存到数据库里,什么时候需要直接拿出来用就可以了。
    注意:formid必须和用户openid对应。

    下面贴出来完整代码

    package com.qcl.paotuischool.wechat;
    
    import com.google.gson.Gson;
    import com.qcl.userwechat.bean.AccessToken;
    import com.qcl.utils.ConstantUtils;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.http.ResponseEntity;
    import org.springframework.stereotype.Service;
    import org.springframework.web.client.RestTemplate;
    
    import java.util.HashMap;
    import java.util.Map;
    
    import lombok.extern.slf4j.Slf4j;
    
    /**
     * Created by qcl on 2018/9/11.
     * 微信小程序推送服务,
     * 包含获取access_token的服务
     */
    @Service
    @Slf4j
    public class WxPushServiceQcl {
        //用来请求微信的get和post
        @Autowired
        private RestTemplate restTemplate;
    
    
        /*
        * 微信小程序推送单个用户
        * */
        public String pushOneUser(String openid, String formid) {
    
    
            //获取access_token
            String access_token = getAccess_token(ConstantUtils.SCHOOL_APPID, ConstantUtils.SCHOOL_APPSECRET);
            String url = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send" +
                    "?access_token=" + access_token;
    
            //拼接推送的模版
            WxMssVo wxMssVo = new WxMssVo();
            wxMssVo.setTouser(openid);//用户openid
            wxMssVo.setTemplate_id("LzeDP0G5PLgHoOjCMfhu44wfUluhW11Zeezu3r_dC24");//模版id
            wxMssVo.setForm_id(formid);//formid
    
    
            Map<String, TemplateData> m = new HashMap<>(5);
    
            //keyword1:订单类型,keyword2:下单金额,keyword3:配送地址,keyword4:取件地址,keyword5备注
            TemplateData keyword1 = new TemplateData();
            keyword1.setValue("新下单待抢单");
            m.put("keyword1", keyword1);
    
            TemplateData keyword2 = new TemplateData();
            keyword2.setValue("这里填下单金额的值");
            m.put("keyword2", keyword2);
            wxMssVo.setData(m);
    
            TemplateData keyword3 = new TemplateData();
            keyword3.setValue("这里填配送地址");
            m.put("keyword3", keyword3);
            wxMssVo.setData(m);
    
            TemplateData keyword4 = new TemplateData();
            keyword4.setValue("这里填取件地址");
            m.put("keyword4", keyword4);
            wxMssVo.setData(m);
    
            TemplateData keyword5 = new TemplateData();
            keyword5.setValue("这里填备注");
            m.put("keyword5", keyword5);
            wxMssVo.setData(m);
    
            ResponseEntity<String> responseEntity =
                    restTemplate.postForEntity(url, wxMssVo, String.class);
            log.error("小程序推送结果={}", responseEntity.getBody());
            return responseEntity.getBody();
        }
    
        /*
        * 获取access_token
        * appid和appsecret到小程序后台获取,当然也可以让小程序开发人员给你传过来
        * */
        public String getAccess_token(String appid, String appsecret) {
            //获取access_token
            String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential" +
                    "&appid=" + appid + "&secret=" + appsecret;
            String json = restTemplate.getForObject(url, String.class);
            AccessToken accessToken = new Gson().fromJson(json, AccessToken.class);
            return accessToken.getAccess_token();
        }
    
    }
    

    在需要做推送的地方调用WxPushServiceQcl类中的pushOneUser方法,并传入openid, formid参数即可。
    在这里插入图片描述
    这是我推送成功后打印的log

    下面来讲小程序端开发需要做些什么

    可以看出,我们的formid有效期是7天,并且一个form_id只能使用一次,所以我们小程序端所需要做的就是尽可能的多拿些formid,然后传个后台,让后台存到数据库中,这样7天有效期内,想怎么用就怎么用了。

    在这里插入图片描述

    所以接下来要讲的就是小程序开发怎么尽可能多的拿到formid了。

    在这里插入图片描述
    看下官方提供的,只有在表单提交时把report-submit设为true时才能拿到formid,比如这样

     <form report-submit='true' >
       <button  form-type='submit'>获取formid</button>
      </form>
    

    所以我们就要在这里下功夫了,既然只能在form组件获取,我们能不能把我们小程序里用到最多的地方用form来伪装呢。
    在这里插入图片描述
    我的小程序是跑腿小程序,消息也主要推送给跑腿员的,而跑腿员点击最多的也就是这两个条目,所以我们就用from组件来伪装这两个条目,让用户在点击的同时就可以收集到用的formid。

     <view class='button_item'>
      <form class="form_item" bindsubmit='gorRunnerLobby' report-submit='true' data-type="1">
       <button class="button" form-type='submit'>
        <text>抢单大厅</text>
        <text class='runner_desc'>(兼职也可月入万元)</text>
       </button>
      </form>
      <view class='right_arrow' />
     </view>
    

    这样就可以在用户点击条目时,收集到用户formid了
    在这里插入图片描述
    由于上面的botton有默认样式,所以我们就通过修改css来去除botton默认样式。

    .button_item {
     width: 100%;
     display: flex;
     flex-direction: row;
     align-items: center;
     padding: 2px 20px;
     background: white;
     border-bottom: 1px solid gainsboro;
    }
    /* 主要通过这里去除botton默认样式 */
    .button {
     width: 100%;
     background: white;
     border: none;
     text-align: left;
     padding: 6px 0px;
     margin: 0px;
     line-height: 1.5;
    }
    
    /* 主要通过这里去除botton边框 */
    .button::after {
     border: none;
    }
    
    /* 用button伪装获取formid */
    
    .form_item {
     width: 100%;
    }
    

    到这里我们小程序端也圆满完成自己的任务了。

    补充知识点

    这样我们java后台和小程序开发就可以开开心心的完成微信小程序的消息推送功能了。

    如果有java或小程序相关的问题可以加我微信交流学习2501902696(备注小程序或java)

    视频讲解:https://edu.csdn.net/course/detail/23750

    展开全文
  • 小程序开发中,如果想实现:用户发给小程序消息以及开发者需要的事件推送,在小程序项目中,我们想要实现这样一个功能, 比如我们小程序中的客服功能,我不想要使用小程序后台的在线客服功能,但我又想实现客服...

    在小程序开发中,如果想实现:用户发给小程序的消息以及开发者需要的事件推送,在小程序项目中,我们想要实现这样一个功能,

    比如我们小程序中的客服功能,我不想要使用小程序后台的在线客服功能,但我又想实现客服功能,这个时候微信提供了消息推送功能,在小程序后台的设置,开发设置中,消息推送功能:

    点击开启消息推送功能,认证成功进入到消息推送配置界面:

    这里配置几个参数注意一下:

    URL(服务器地址):这里要填我们要认证token的接口地址,并且是在线上的接口,才能认证成功

    比如我的消息推送认证接口的地址是:http://xxxxxxx/xxxxxx/getProcessRequest.do,下面会编写这个接口认证的代码

    Token(令牌):这个是用户自己添加,不过在小程序后台添加的Token必须与认证接口中的是一致的,这个才能认证成功

     

    下面是Spring mvc 编写的接口代码:

    因为这个接口是GET认证,POST是发送信息所以才会这么编写:

    /**
         * GET:验证token
         * OST:发送数据
         * @param request 作用域
         * @param response 作用域
         * @return  String
         */
        @RequestMapping(value= {"/getProcessRequest"},method= {RequestMethod.GET, RequestMethod.POST})
        @ResponseBody
        public String getProcessRequest(HttpServletRequest request,HttpServletResponse response) {
            boolean isGet=request.getMethod().toLowerCase().equals("get");
            LOGGER.info(isGet+"---------------");
            System.out.println(isGet);
             System.out.println("方法是-------"+isGet);
             if(isGet){//首次验证token
                 // 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。  
                    String signature = request.getParameter("signature");  
                    // 时间戳  
                    String timestamp = request.getParameter("timestamp");  
                    // 随机数  
                    String nonce = request.getParameter("nonce");  
                    // 随机字符串  
                    String echostr = request.getParameter("echostr");  

                    PrintWriter out = null;  
                    try {  
                        out = response.getWriter();  
                        // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,否则接入失败  
                        if (DateUtil.checkSignature(signature, timestamp, nonce)) {  
                            System.out.println("成功");
                            out.print(echostr);
                            
                            out.flush();  //必须刷新
                        } 
                        System.out.println("失败");
                    } catch (IOException e) {  
                        e.printStackTrace();  
                    } finally {  
                        out.close();  
                        out = null; 
                        
                    }  
             }else{// 进入POST聊天处理  
                 System.out.println("进入了聊天界面");
                 LOGGER.info("进入了聊天界面");
                     // 接收消息并返回消息  
                     try {
                         System.out.println("进入这个方法中了:");
                         acceptMessage(request,response);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }  
                   
             }
            return null;

        }

     

    acceptMessage方法: 这个方法是认证成功后也就是POST方法操作能够接收到小程序发来的信息,也可以回信息:

    这里根据小程序信息的格式可以去看小程序API文档,文档地址:

    https://developers.weixin.qq.com/miniprogram/dev/api/custommsg/receive.html#%E6%96%87%E6%9C%AC%E6%B6%88%E6%81%AF

     

    acceptMessage:


        /**
         * 聊天处理方法 发送数据
         * @param request 作用域
         * @param response 作用域
         * @see  Exception
         */
        public void acceptMessage(HttpServletRequest request,HttpServletResponse response) throws Exception{
            
            BufferedReader streamReader = new BufferedReader( new InputStreamReader(request.getInputStream(), "UTF-8"));
            StringBuilder responseStrBuilder = new StringBuilder();
            String inputStr;
            while ((inputStr = streamReader.readLine()) != null)
                responseStrBuilder.append(inputStr);
            
            /*BufferedReader readers = new BufferedReader(new InputStreamReader(request.getInputStream()));*/
            JSONObject jsonObject = JSONObject.fromObject(responseStrBuilder.toString());
            String param= jsonObject.toString();
            System.out.println("转出来的数据:"+param);
            String attribute = jsonObject.get("FromUserName").toString();//发送的openid
    //        String ToUserName = jsonObject.get("ToUserName").toString();//小程序原始id
            String MsgType = jsonObject.get("MsgType").toString(); //用户发送客服信息的类型
            System.out.println("发送数据的类型:"+MsgType);
            System.out.println(MsgType);
            if(MsgType.equals("event")) {
                  Map<String,Object>  text = new HashMap<String, Object>();
                  Feedbacktxt feedbacktxt = new Feedbacktxt();
                  feedbacktxt.setTouser(attribute);
                  feedbacktxt.setMsgtype("text");
                  text.put("content", "你好,欢迎来到这里");
                  feedbacktxt.setText(text);
                  String token = feedbackService.access_token(); //这里是获取接口凭证的接口
                  String url="https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token="+token;
                  JSONObject jsonStrs = JSONObject.fromObject(feedbacktxt);
                  HttpUtils.httpPost(url, jsonStrs.toString());

    获取access_token,接口凭证的api接口文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183

     

    DateUtil.java:
     


        
          /** 
         * 验证签名 
         * @param signature  验证签名的数据
         * @param timestamp  参数
         * @param nonce  参数
         * @return  boolean
         */  
        public static boolean checkSignature(String signature, String timestamp, String nonce) {  
            
            //TOKEN
            //与token 比较
            String[] arr = new String[] { qurenneng1796789910, timestamp, nonce };  
     
            // 将token、timestamp、nonce三个参数进行字典排序  
            Arrays.sort(arr); 
            
            StringBuilder content = new StringBuilder();  
            
            for (int i = 0; i < arr.length; i++) {  
                content.append(arr[i]);  
            }
            
            MessageDigest md = null;  
            String tmpStr = null;  
      
            try {  
                md = MessageDigest.getInstance("SHA-1");  
                
                // 将三个参数字符串拼接成一个字符串进行sha1加密
                byte[] digest = md.digest(content.toString().getBytes());
                tmpStr = byteToStr(digest); 
            } catch (NoSuchAlgorithmException e) {  
                e.printStackTrace();  
            }  
     
            content = null;  
            // 将sha1加密后的字符串可与signature对比  
            return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;  
        }
        
        
        /** 
         * 将字节数组转换为十六进制字符串 
         *  
         * @param byteArray 
         * @return  String
         */  
        private static String byteToStr(byte[] byteArray) {  
            String strDigest = "";  
            for (int i = 0; i < byteArray.length; i++) {  
                strDigest += byteToHexStr(byteArray[i]);  
            }  
            return strDigest;  
        }  

        
        
        
        /** 
         * 将字节转换为十六进制字符串 
         *  
         * @param mByte 
         * @return  String
         */  
        private static String byteToHexStr(byte mByte) {  
            char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };  
            char[] tempArr = new char[2];  
            tempArr[0] = Digit[(mByte >>> 4) & 0X0F];  
            tempArr[1] = Digit[mByte & 0X0F];  
      
            String s = new String(tempArr);  
            return s;  
        }

    这样就可以实现动态的去发送客服信息,也可以去用代码去实现想要实现的功能,好了微信小程序接口认证就到这里了

    加入群聊

    展开全文
  • 小程序消息推送功能

    2019-05-25 18:49:02
    [ 新版的小程序 消息推送部分的文档写的真TMD没素质,根本没打算让人看明白,必须要看旧版本的才能明白 ] 这是旧版的文档: ... 微信小程序里的消...

    [ 新版的小程序 消息推送部分的文档写的真TMD没素质,根本没打算让人看明白,必须要看旧版本的才能明白 ]

     

    这是旧版的文档:

    https://developers.weixin.qq.com/miniprogram/dev/api/notice.html#%E6%A8%A1%E7%89%88%E6%B6%88%E6%81%AF%E7%AE%A1%E7%90%86

     

    微信小程序里的消息有多种: 

    客服消息、模板消息、统一消息 [文档里根本没打算讲解一下区别和使用场景...]

     

    客服消息场景,例: 
    A用户进入小程序,小程序内置客服入口,通过入口进入客服会话,
    A用户向客服发消息时,微信服务器会先将消息 POST 到开发者填写的 URL 上,如果希望将消息转发到网页版客服工具,则需要开发者在响应包中返回 MsgType 为 transfer_customer_service 的消息,
    微信服务器收到响应后会把当次发送的消息转发至客服系统。

     

    ------------


    模板消息和统一消息其实应用场景一样,只是统一消息为便于开发者对用户进行服务消息触达,
    简化小程序和公众号模板消息下发流程,小程序提供统一的服务消息下发接口。

    模板消息  https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/customer-message/customer-message.html

    统一消息  https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/uniform-message.html

    模板消息场景,

    例1

    A用户发贴,取得formid,有B用户回帖,根据formid和模板id通知A用户有新回复

    例2

    A用户下单,取得formid,支付成功,根据formid和模板id通知A用户支付成功

     

    ------------

     

     

    展开全文
  • 微信小程序的消息推送功能简单的说就是发送一条微信通知给用户,用户点开消息可以查看消息内容,也可以通过消息链接进入到小程序...下面就介绍一下如何推送消息。一、准备工作 首先,在微信公众平台开通消息有推送...

        微信小程序的消息推送简单的说就是发送一条微信通知给用户,用户点开消息可以查看消息内容,可以链接进入到小程序的指定页面。

        微信小程序消息推送需要用户触发动作才能发送消息,比如用户提交订单、支付成功。一次只能发一条,当然可以通过某种方法发送多条,小的就不在这里赘述了。下面就介绍一下如何推送消息。

    一、准备工作

        首先,在微信公众平台开通消息推送功能,并添加消息模板。可以从模板库选择模板也可以创建一个模板,模板添加之后,模板ID我们接下来要用的。

        发送模板消息需要用到accesstoken、formId和openID。accesstoken获取及更新可以看我的上一篇文章;formID就是消息模板ID,openID我们最好在获取用户信息或用户登录时储存到全局变量里。


    二、获取formID。

     在需要触发消息推送的页面添加提交表单的事件。目的是得到formID,formID是消息推送时必须的参数。

    <form name='pushMsgFm' report-submit='true' bindsubmit='getFormID'> 
      <button form-type="submit" class="zan-btn zan-btn--large zan-btn--danger payButton">立即支付</button>
    </form>  

    以上代码中“getFormID”是提交表单时触发的事件。

    getFormID: function (e) {
    this.setData({
    formId: e.detail.formId }) }

    以上方法是获取formId。

    三、配置消息模板参数,并传给后台。

    var config = require('../config.js')
    var app = getApp();
    function pushMsg(formID, access_token){
      var openId = app.globalData.userInfo.openId;
      var messageDemo = {
        touser: openId,//openId
        template_id: 'PjtLeqq-UeF49r5jr88s27HBzBDobijr6QfiwJwIkPg',//模板消息id,  
        page: 'pages/index/index',//点击详情时跳转的主页
        form_id: formID,//formID
        data: {//下面的keyword*是设置的模板消息的关键词变量  
    
          "keyword1": {
            "value": "keyword1",
            "color": "#4a4a4a"
          },
          "keyword2": {
            "value": "keyword2",
            "color": "#9b9b9b"
          },
          "keyword3": {
            "value": "keyword3",
            "color": "red"
          }
        },
        color: 'red',//颜色
        emphasis_keyword: 'keyword3.DATA'//需要着重显示的关键词
      }
      wx.request({
        url: config.service.sendMsgUrl,
        data: { value: messageDemo, access_token: access_token},
        method: 'POST',
        success: function (res) {
          console.log("push msg");
          console.log(res);
        },
        fail: function (err) { 
          console.log("push err")
          console.log(err);
        }
      });
    }
    module.exports = { pushMsg: pushMsg }
    四、推送消息。

      

    const request = require('../tools/ih_request');
    var conf = require('../config.js')
    module.exports = async (ctx, next) => {
      var body = ctx.request.body.value
    await request.postJson({
      url: 'https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=' + ctx.request.body.access_token,
      body: body,
      success: function (res) {
        ctx.body = {
          result: res
        }
        console.log('res=',res);
      },
      error: function (err) {
        ctx.body = {
          result: err
        }
        console.log(err);
      }
    });}

    ih_request.js

    const request = require('request');
    var ih_request = {};
    module.exports = ih_request;
    ih_request.postJson = async function (option) {
      var res = await request({
        url: option.url,
        method: 'post',
        headers: {
          'content-type': 'application/json'
        },
        body: JSON.stringify(option.body),
      }, function (err, res, body) {
        res ? option.success(body) : option.error(res.msg);
        console.log('MSGresult=', body);
      });
    }


    展开全文
  • 解决微信小程序消息推送配置Token校验失败问题  如果是Token校验失败问题,一种是URL地址访问不通,第二种是验证是返回给微信服务数据问题. 1.填写配置信息 URL(服务器地址):用url访问文件名地址 Token: 自己...
  • 小程序客服及消息推送开发(后台JAVA) 最近公司在做小程序,涉及到客服及消息推送,简单的记录下开发过程及心得 客服 小程序自带的有客服功能只需要开启就行了. 选择开启后即可使用. 消息推送 首先在开发 ...
  • 其实我之前有写过一篇:《springboot实现微信消息推送,java实现小程序推送,含小程序端实现代码》 但是有同学反应这篇文章里的代码太繁琐,接入也比较麻烦。今天就来给大家写个精简版的,基本上只需要几行代码,就...
  • 一.开发前准备 微信模板消息发送API (建议多看) ...1. ConfirmTemplate(推送接口) package com.zero.jimu.utils.pushMessage; import com.google.gson.Gson; import org.apache.ht...
  • 这几天想做微信小程序消息推送的功能,然后在网上找了好多教程,都没解决问题,官方文档写的教程由不够详细,所以走了好多弯路。 现在问题解决了,记录一下。 我在网上找的好多教程都不详细,虽然是贴代码出来了,...
  • 前面写过一篇云开发实现小程序订阅消息(模板消息推送的文章,《借助云开发实现小程序订阅消息和模板消息推送功能》是有好多同学用的是Java写后台,所以今天就再来写一篇Java后台实现小程序订阅消息推送的文章。...
  • 1、消息转发地址填写,需要注意的是token和encodingaeskey要和项目中配置一致2、URL要实现两个路由相同的方法但是一个需要时GET另一个是POST,如下 @ResponseBody @RequestMapping(method=RequestMethod.GET,...
  • 确实,完成一个小程序推送后端很简单,可能只需要几行代码! 但!小程序的access_token维持、上千万推送队列实现、推送数据结果统计等等的功能,可不是个人开发者短时间内能完成的! 我们更希望,开发者们能把重...
  • 接下来我们就来借助云开发,来快速实现小程序消息推送的功能。 一:获取模板 ID 这一步和我们之前的模板消息推送是一样的,也是先添加模板,然后拿到模板id 首先是开通订阅消息功能,很简单,如下图 由于长期性...
  • 不合法造成的原因:确认小程序Appid、secret、公众号Appid和OpenID是不是一套。 确认是一套无误后,确认在传OpenID参数时格式是不是正确,我是这样传值的: String params ="{“touser”:""+openid+&...
  • 上一节给大家将了借助云开发实现小程序支付功能,那么我们就要想了,能不能借助云开发实现小程序消息推送功能呢? 还别说,云开发还真能实现推送的功能。 一直关注我的同学肯定知道老师之前也写过借助java后台实现...
  • 微信小程序开发消息推送配置教程 微信小程序开发消息推送配置这一块网上都是PHP居多,由于用egg.js写了一套验证方法。 第一步:填写服务器配置 登录微信小程序官网后,在小程序官网的“设置-消息服务器”页面,管理...
  • 小程序自公开发布起就有消息推送功能,微信的克制同样体现在小程序上,避免打扰用户做了诸多限制,比如,需要用户主动发起聊天等。 微信小程序有个客服消息功能,添加客服之后,就可以通过「公众平台网页版客服工具...
  • 今天KingYiFan给大家分享一下小程序模板消息推送: 根据微信小程序最新机制:2019年10月份微信发布了最新模板消息整改公告,由模板消息更改为订阅消息,模板消息将于2020年1月10日下线,下线后这篇文章将失效。最新...
  • 最近需要开发微信和小程序的推送...2 java推送消息给指定小程序用户 老规矩,还是先看效果图 我的这个是跑腿抢单推送,当用户新下单时,会给跑腿员推送消息。 下面开始讲解实现步骤 一,微信小程序管理后台开通...
1 2 3 4 5 ... 20
收藏数 106,664
精华内容 42,665
关键字:

小程序消息推送