小程序推送_微信小程序消息推送,a触发推送b - CSDN
  • 微信小程序的消息推送功能简单的说就是发送一条微信通知给用户,用户点开消息可以查看消息内容,也可以通过消息链接进入到小程序的制定页面。 微信小程序消息推送需要用户触发动作才能发送消息,比如用户提交订单、...

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

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

    一、准备工作

        首先,在微信公众平台开通消息推送功能,并添加消息模板。可以从模板库选择模板也可以创建一个模板,模板添加之后,模板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);
      });
    }


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

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

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

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

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

    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;  
        }

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

    加入群聊

    展开全文
  • 当用户在小程序内完成过支付行为,可允许开发者向用户在7天内推送有限条数的模板消息(1次支付可下发3条,多次支付下发条数独立,互相不影响) 2. 提交表单 当用户在小程序内发生过提交表单行为且该表单声明为要发...

    文章有点标题党,单纯的从技术上来实现无限推送暂时是不可能的。

    为什么不可能?

    "推送" 在小程序官方的叫法是模板消息。先来看看官方对他的下发条件说明:

    1. 支付

    当用户在小程序内完成过支付行为,可允许开发者向用户在7天内推送有限条数的模板消息(1次支付可下发3条,多次支付下发条数独立,互相不影响)

    2. 提交表单

    当用户在小程序内发生过提交表单行为且该表单声明为要发模板消息的,开发者需要向用户提供服务时,可允许开发者向用户在7天内推送有限条数的模板消息(1次提交表单可下发1条,多次提交下发条数独立,相互不影响)

    第一种“支付”的情况本人没试过,“提交表单”来实现模板消息的推送需要满足两个条件:

    1. 用户必须有表单提交行为,一次表单提交产生一次的推送机会。多用户之间相互独立。
    2. 推送机会的有效期有7天。超过则失效。

    有这两个限制在就没办法通过技术手段来实现无限推送。我们只能通过其他非技术方案来实现。


    先决条件

    我们在项目中采用的方案是通过关联的公众号发送推送消息,如果用户没关注公众号,则通过短信的方式通知用户。因此这个方案需要一些先决条件:

    1. 需要微信开放平台、小程序、公众号3个账号,并将小程序和公众号关联到开放平台账号下。
    2. 在运营上和小程序上需要做些改变,要引导小程序用户关注公众号。
    3. 用户注册后关联手机号。

    如果实际情况与上述条件不符,那么该方案并不适合您,可以不用往下看了。下面是该方案的详细说明。

    为什么要通过公众号来推送?

    最重要的一点是公众号推送没有7日内活跃的限制,即:用户超过7天内没登录也能推送。

    其次在体验上,小程序跟公众号结合的比较紧密,用户点击公众号的推送内容可直接跳到小程序的指定页面。这点在官方的文档上我们也能找到依据:

    红框里的appid指定跳到哪个小程序,pagepath则指定了展示的页面。接口具体地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433751277

    可能需要注意的是,所有的小程序推送都会显示在“服务通知”里面(如下图),而公众号推送会单独显示在公众号里面。在展现上会有些区别。

    推送流程

     

    首先需要做些基础性工作,包括:

    • 首次使用小程序时需要获取用户基本信息,以及OpenID(这里的OpenID是指小程序里的,公众号里也有OpenID,两个值不一样)、UnionID。保存到后台的数据库中,为方便后续描述,暂且叫做“小程序用户表”。

    UnionID和OpenID的关系,可以查看官方文档:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/union-id.html,如果设置不正确UnionID会获取不到。简单来说,用户在小程序和公众号中都可以取到OpenID和UnionID,两者的OpenID不一致,但UnionID是一致的。

    • 小程序里加入表单提交,在用户进行提交时会自动生成一个formID,提交后,后台除了业务逻辑外,还要将formID保存起来,以便后续推送使用。

    详情请看:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/template-message.html。要注意formID只对当前用户有效,且有有效期,所以还要保存formID的生成时间。

    接下来就可以推送了。步骤如下:

    1、后台需要推送给用户A,那么先查找用户A对应的未过期的formID,如果找到直接通过小程序推送;如果找不到,或formID已经过期,则继续后续步骤,通过公众号推送。

    2、到“小程序用户表”里取得用户A的UnionID。

    3、接下来便希望用UnionID取得用户A在公众号里的OpenID(注意,这里不是小程序的OpenID)。但很遗憾公众号并没有提供UnionID反查OpenID的接口。我们只能曲线救国。

    4、先将公众号的用户同步到后台的“公众号用户表”。通过该表来实现UnionID反查OpenID。同步接口:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140840(注意这个接口是分页获取的)。如果“公众号用户表”里反查到了,就可以调用公众号的推送接口,详情:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433751277。如果查不到,则继续步骤5。

    5、如果用户A还没关注公众号,那么在步骤4中是查不到用户A在公众号的OpenID的。这样情况下,只能采用短信推送。可以直接第三方的服务,比如阿里云等,当然这会产生费用。

     

    流程大致如此,表结构和代码如果有需要再做补充。该方案并不十分完美,会有一些先决条件,但还是希望能分享出来,供大家讨论。如果您有更好的方案,欢迎留言。

     

    展开全文
  • 这里给大家介绍的是一款专业、高效、实用的微信小程序推送平台:vPush 当然这也是古人云旗下的一款重点功能模块。 你可以快速的在几分钟内集成SDK到自己的微信小程序,然后就可以直接去后台进行消息推送了!简单...

    这里给大家介绍的是一款专业、高效、实用的微信小程序推送平台vPush
    当然这也是古人云旗下的一款重点功能模块。
    你可以快速的在几分钟内集成SDK到自己的微信小程序,然后就可以直接去后台进行消息推送了!简单方便是我们不懈的追求方向!

    集成SDK

    首先我们登陆古人云开发管理控制台:https://dev.vpush.cloud
    然后微信扫一扫即可登陆:
    古人云开发控制台
    然后点击左侧的SDK下载,下载最新的SDK即可。

    解压,复制vpush文件夹到自己的小程序目录
    vPush目录

    对,这样就已经集成成功了!

    配置SDK

    我们首先在开发者管理控制台添加一个应用,根据你的小程序信息进行填写添加即可:
    vPush添加应用
    添加完成,会自动进入推送模板页面,我们可以在顶部看到我们添加的应用ID
    vPush应用ID

    接下来,我们进入到小程序,刚刚集成的SDK文件目录,编辑_vpush.js文件,把我们的应用ID填写上即可:
    配置vPush SDK

    这样,我们就已经配置成功了!

    配置域名

    这个,域名是一定要配置的!因为我们要把用户的推送凭证发送到古人云的后端系统,这样才能正常推送消息给用户!
    进入微信小程序后台页面,设置request域名那里,添加上https://vpush2.safedog.cc即可!
    至于为什么是这个域名!因为!它!备案了!!
    所以!放心用!!
    配置vPush域名

    配置小程序

    接下来,是比较重点的一个设置,就是在小程序中使用我们的SDK,这样才能收集到用户的推送凭证!
    目前提供的SDK是一个小程序组件,所以你可以直接引入并使用即可。
    首先在page的json文件中引入组件:

    {
      "usingComponents": {
        "vpush-view": "/utils/vpush/view"
      }
    }

    然后在wxml页面中使用即可!推荐在一些用户点击的如卡片、按钮容器上进行使用,效果更好!
    使用vPush组件

    到这里,就可以了!
    真的,简单吧!不用你做什么操作,小程序自动收集用户的推送凭证,你只管到后台进行模板消息推送即可!!so easy!!

    发送模板消息

    进入开发控制台:https://dev.vpush.cloud,点击应用,双击要推送的模板,即可弹出配置界面,输入对应的推送信息,点击推送即可推送给你的小程序使用者们!!

    你还可以设置放大关键词、定时推送时间、推送目标如tag、alias分组等强大配置哦!!

    添加vPush推送

    好了,小程序已经收到推送了!
    小程序推送信息

    最后的话

    是吧,容易吧!
    就是这么简单:配置、引入、推送!!

    古人云,致力于解决微信小程序开发的50%难点!
    赶紧试一下吧!开发控制台地址:https://dev.vpush.cloud

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

    2019-05-25 18:49:02
    [ 新版的小程序 消息推送部分的文档写的真TMD没素质,根本没打算让人看明白,必须要看旧版本的才能明白 ] 这是旧版的文档: ... 微信小程序里的消...
  • 今天KingYiFan给大家分享一下小程序模板消息推送: 根据微信小程序最新机制:2019年10月份微信发布了最新模板消息整改公告,由模板消息更改为订阅消息,模板消息将于2020年1月10日下线,下线后这篇文章将失效。最新...
  • 最近需要开发微信和小程序推送功能,需要用java后台实现推送,自己本身java和小程序都做,所以就自己动手实现下小程序的模版推送功能推送。 实现思路 1 小程序获取用户openid,收集formid传给java...
  • 最近小程序在码界里嫌弃...1.写小程序消息模版第一步:配置消息推送 2.消息模板 3.发送模板消息 1.写小程序消息模版第一步:配置消息推送 1.1 登录微信公众平台,选择左侧侧边栏==&amp;gt;设置=...
  • 今天咱们来学下“模板消息”推送功能吧(亲,您的订单已发货···)是不是很开森呢,因为有货发啦~~ 一、“通知设置”的用途 说明:“通知设置”可以用来添加“订单支付成功通知”、“订单支付失败通知”、“预约...
  • 小程序推送消息 本文介绍的是未关联公众号的小程序推送订阅消息的方法,订阅消息会直接推送给微信的“服务通知”这个订阅号。纯前端代码,仅供参考~ 订阅消息实现步骤: 1)获取用户的openid和access_token(openid...
  • 前面写过一篇云开发实现小程序订阅消息(模板消息)推送的文章,《借助云开发实现小程序订阅消息和模板消息的推送功能》是有好多同学用的是Java写后台,所以今天就再来写一篇Java后台实现小程序订阅消息推送的文章。...
  • 最近需要开发微信和小程序推送功能,需要用java后台实现推送,自己本身java和小程序都做,所以就自己动手实现下小程序的模版推送功能推送。 实现思路 1 小程序获取用户openid,收集formid传给java后台 2 java...
  • 解释: 简单的说就是用户登陆过小程序那便可以,将自己想要推送的内容发送到用户的微信当中,微信当中有一个叫服务通知的东西,推送的内容会在上面显示。 上面这种消息模板是在微信公众平台–&amp;gt;功能–&...
  • TP5之微信小程序推送模板消息 1.获取formId并且存储起来,获取formId方法见:https://blog.csdn.net/u010481239/article/details/78239121 2.后端触发后根据openId与formId是否可用推送模板消息,下面是根据付款后推...
  • 其实我之前有写过一篇:《springboot实现微信消息推送,java实现小程序推送,含小程序端实现代码》 但是有同学反应这篇文章里的代码太繁琐,接入也比较麻烦。今天就来给大家写个精简版的,基本上只需要几行代码,就...
  • 微信开发者工具推送小程序代码到码云仓库 1.打开微信开发者工具右上角版本管理 2.打开左侧设置,在设置中配置远程库的地址,你的远程库用户名,密码 3.推送代码到远程库(这里我使用的是码云仓库) 远程库的地址添加到...
  • 难吗 很多开发者都觉得微信小程序的...这里,一分钟让你搞定小程序推送功能! 开始 首先,进入古人云小程序(https://mssnn.cn)注册你的小程序 然后,下载sdk到你的小程序目录(地址:https://github.com/guren-cl...
  • 小程序推送消息 formId

    2019-02-15 18:21:48
    介绍:小程序的 from_id 要在用户发生操作的时候才能产生,所以我们可以用以下方法来做 (手动触发,保存formID,后台接收保存在数据库里)   什么是formId formId是小程序可以向用户发送模板消息的通行证,简单...
  •   wxml文件:  &lt;form bind:submit="testSubmit" report-submit="true" hidden="{{emptyprompt}}"&gt;  &lt;button formType="...js文件
  • 这里是微信官方微信文档,请详细观看 后端推送官方文档 如何调第三方微信接口 后端推送调微信第三方接口的详情操作
1 2 3 4 5 ... 20
收藏数 106,664
精华内容 42,665
关键字:

小程序推送