精华内容
参与话题
问答
  • 微信模板消息推送   微信模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等。不支持广告等营销类消息以及其它所有可能对用户造成骚扰的消息...

    微信模板消息推送

     

    微信模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等。不支持广告等营销类消息以及其它所有可能对用户造成骚扰的消息。

     

    那么,如何通过模板消息接口发送模板消息。大概分为三个部分:

    1. 申请模板消息功能插件
    2. 构造模板消息体
    3. 发送模板消息

     

    一、申请添加模板消息功能插件

     

    模板消息只对认证的服务号开放。

    在微信公众平台的后台,依次进入“功能->添加功能插件->模板消息”,即可申请模板消息。

     

     点击申请


     

    申请时,需要选择公众账号服务所处的2个行业,每月可更改1次所选行业,并且账号仅可使用所属行业中相关的模板


    提交,等待申请通过后,可在模板库中看到模板消息列表


    进入想要使用的模板,点击添加



    添加后就存放到“我的模板”库中了


     
    查看模板的详情,可以看到模板的id及各项内容参数名



    不同的模板消息的内容结构不一样。这些ID及字段名将在程序中使用到。

    当然,如果在模板库中找不到自己所需模板,可在模板库列表页点击右边的“帮助我们完善模板库”,自定义模板。


     

    阅读《模板消息申请添加前必读指引》后,点确认,进入添加自定义模板页,每月只能自定义三个模板


    点击下一步等待审核,审核通过后就可以使用自定义的模板

     

    二、构造模板消息体

     

    以一个信用卡还款提醒的模板为例,它的内容如下:


    并根据微信模板消息接口,可知POST请求参数格式如下:


    按照上述内容及格式,构造模板消息体如下:

    def templateData()
    {
        def data = [:]
        data.put("first", [value: "尊敬的张三,您名下的:"])
        data.put("OPERATE", [value: "招商银行", color:"#173177"])
        data.put("AMT", [value: "1234", color:"#173177"])
        data.put("STATUS", [value: "13日", color:"#173177"])
        data.put("DATE", [value: "1234元", color:"#173177"])
        data.put("REMARK", [value: "备注:请及时还款,避免逾期"])
        
        def templateData = [:]
        templateData.put("touser", "ovBRNwCc6wigvmThgCEEOh7lRwMY")
        templateData.put("template_id", "hLIrwUMBOq0Er3AmhxUTCp_aOGk-uJnjVYgKSnRSSSg")
        templateData.put("url", "")
        templateData.put("data", data)
        return templateData
    }

    其中,touser 为要推送者的openid,template_id为所选消息模板的id

     

    三、发送模板消息

     

    模板消息是使用access_token作为授权来发送

     

    获取access_token值,请参照:http://hellolove.iteye.com/blog/2333874

     

    def sendMessage()
    {
        def accessToken = getAccessToken()
        def templateData = templateData()
        def params = JsonOutput.toJson(templateData)
    
        String requestUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN"
        requestUrl = requestUrl.replace("ACCESS_TOKEN", accessToken)
        URL url = new URL(requestUrl)
            
        HttpURLConnection connection = (HttpURLConnection) url.openConnection()
        connection.setDoOutput(true)
        connection.setRequestMethod("POST")
        connection.setRequestProperty("Content-Type", "application/json")
        connection.outputStream.withWriter { Writer writer -> writer.write params }
        
        if (connection.getResponseCode() == 200)
        {
            def result = connection.inputStream.withReader { Reader reader -> reader.text }
            return result
        }
        else
        {
            return 0
        }
    }

     

    调用发送方法,实现效果如下如示:



     

     

    参考文档:

    https://mp.weixin.qq.com/wiki/5/6dde9eaa909f83354e0094dc3ad99e05.html

    http://www.cnblogs.com/txw1958/p/wechat-template-message.html
     

     

    展开全文
  • 1. 修改微信菜单栏url连接和项目里对应 "{\"button\":" + "[" + "{\"name\":\"纳税服务\",&...

    1. 修改微信菜单栏url连接和项目里对应

    "{\"button\":"
    		 		+ "["
    		 		+ "{\"name\":\"纳税服务\","
    		 		+ "\"sub_button\":"
    		 		+ "["
    		 		+ "{\"type\":\"view\",\"name\":\"政策解读\",\"url\":\"http://www.chinatax.gov.cn/n810341/n810760/index.html\"},"
    		 		+ "{\"type\":\"view\",\"name\":\"最新法规\",\"url\":\"http://www.chinatax.gov.cn/n810341/n810755/index.html\"},"
    		 		+ "{\"type\":\"click\",\"name\":\"我要咨询\",\"key\":\"m_imgmsg\"},"
    		 		+ "{\"type\":\"view\",\"name\":\"微信公示\",\"url\":\"http://kbrhwf.natappfree.cc/YA2017_1/index.html\"},"
    		 		+ "{\"type\":\"view\",\"name\":\"微信取号\",\"url\":\"http://kbrhwf.natappfree.cc/项目名称/项目地址\"}"
    		 		+ "]"
    		 		+ "},"
    		 		+ "{\"name\":\"税务查询\","
    		 		+ "\"sub_button\":"
    		 		+ "["
    		 		+ "{\"type\":\"view\",\"name\":\"法规查询\",\"url\":\"http://hd.chinatax.gov.cn/guoshui/main.jsp\"},"
    		 		+ "{\"type\":\"view\",\"name\":\"发票查询\",\"url\":\"http://121.28.0.35:7008/fpxx/fpxxcx.jsp\"}"
    		 		+ "]"
    		 		+ "}"
    		 		+ "]"
    		 		+ "}";
    

    2. 获取用户的code,拿到code已经成功一半

    /**
    	 * 
    	 * @Title: IndexPage
    	 * @Description: TODO首页
    	 * @return: void
    	 */
    	@RequestMapping("/IndexPage")
    	// ---------------------设置
    	public String IndexPage() 
    	{
    		
    		System.out.println("欢迎来到ya2017_1================");
    		String uri = myHostName + "YA2017_1/robot/getAllOrganInfo.do";
    		
    		logger.info("IndexPage() ready to redirect:"+uri);
    		
    		return "redirect:https://open.weixin.qq.com/connect/oauth2/authorize?appid="
    				+ appid
    				+ "&redirect_uri="
    				+ uri
    				+ "&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect";
    	}
    

    3通过code获取Opendid

    @RequestMapping("/getAllOrganInfo.do")
    	public String getAllOrganInfo(String code, ModelMap map,HttpServletRequest request) 
    	{
    		String requestUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="
    				+ appid
    				+ "&secret="
    				+ appsecret
    				+ "&code="
    				+ code
    				+ "&grant_type=authorization_code";
    		String backString = WeixinHttpRequestUtil.httpRequest(requestUrl,"GET", null);
    		
    		WeChatUserInfo weChatUserInfo = JSON.parseObject(backString,WeChatUserInfo.class);
    		
    		String weChatId = weChatUserInfo.getOpenid();
    		HttpSession session = request.getSession();
    		session.setAttribute("openId", weChatId);
    		
    		//异常信息
    		map.addAttribute("errormsg", errormsg);
    		map.addAttribute("list", list);
    		return "/robot/AllOrgan";
    	}
    

    4.通过Openid然后向用户发送推送消息

    public String randomNumber(OrganInfo organInfo, ModelMap map,HttpServletRequest request, HttpServletResponse response) throws IOException 
    	{
    		String openId = null;
    		System.out.println("---------------------------------------------------------");
    //		logger.info("Enter getAllOrganService(),organInfo="+organInfo.toString());
    		
    		if (request.getSession().getAttribute("openId") != null) 
    		{
    			openId = (String) request.getSession().getAttribute("openId");
    			
    			// //
    			String ACCESS_TOKEN=GetToken.getAccessToken();//
    			String backStringTwo =null;
    			String messageContent="你好,你取到的随机号码是9527777,请凭随机码去大厅取号,可不用排队呦!";
    			if( ACCESS_TOKEN!=null){
    				 String data="{"
    					  		+ "\"touser\": \""+openId+"\","
    					  		+ " \"msgtype\": \"text\","
    					  		+ "  \"text\": {"
    					  		+ " \"content\": \""+ messageContent +"\""
    					  		+ "}"
    					  		+ "}";
    					String requestUrlTwo="https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token="+ACCESS_TOKEN;
    					System.out.println( requestUrlTwo);
    				
    					backStringTwo=WeixinHttpRequestUtil.httpRequest(requestUrlTwo,"POST",data);
    			}
    			 
    			System.out.println("backString-----"+backStringTwo);
    			
    			System.out.println("跳转到成功页面之前获取到的openid===="+openId);
    			logger.info("get openId(weixin userid)="+openId);
    		}
    		return "/robot/success";
    	}
    

    注意配置网页授权
    在这里插入图片描述

    展开全文
  • 接收服务器推送普通消息 接收普通消息 当普通微信用户向公众账号发...服务器介入获取微信推送消息代码: /** * 此方法用于微信回复消息 * @param request * @return */ @PostMapping("getToken") @ResponseB...

    接收服务器推送普通消息

    接收普通消息

    当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上。

    服务器介入获取微信推送消息代码:

        /**
         * 此方法用于微信回复消息
         * @param request
         * @return
         */
        @PostMapping("getToken")
        @ResponseBody
        public String getUserMessage(HttpServletRequest request){
            String responseString = "";
            try {
                //处理消息与事件推送
                Map<String, String> xmlData = RequestParamType.getXmlData(request.getInputStream());
                logger.info(xmlData.toString());//接受到的消息
                 responseString = RequestParamType.dealBean2Xml(xmlData);
                 logger.info("消息回复ing..." + responseString);
                 return responseString;
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }
    

    解析xml工具类

        /**
         * 解析xml 获取key-value
         * @param inputStream
         * @return
         */
        public static Map<String,String> getXmlData(InputStream inputStream){
            Map<String,String> map =  new HashMap<>();
            //截取xml
            SAXReader reader = new SAXReader();
            try {
                Document document = reader.read(inputStream);
                Element rootElement = document.getRootElement(); //获取根节点
                List<Element>  elements = rootElement.elements(); // h获取所有的节点
                for (Element e: elements) {
                    map.put(e.getName(),e.getStringValue());
                }
    
            } catch (DocumentException e) {
                e.printStackTrace();
            }
            return map;
        }
    

    处理xml消息

        /**
         * 处理文本消息
         */
        public static String dealBean2Xml(Map<String,String> xmlData ){
    
            //获取 消息类型
            String msgType = xmlData.get("MsgType");
            BaseMsg baseMsg = null;
            switch (msgType){
                //普通文本消息
                case "text":
                    baseMsg = dealText(xmlData);
                    break;
    
                //图片消息
                case "image":
                    break;
    
                //语音消息
                case "voice":
                    break;
    
                //视频消息
                case "video":
                    break;
    
                //小视频消息
                case "shortvideo":
                    break;
    
                //地理位置消息
                case "location":
                    break;
                //链接消息
    
                case "link":
                    break;
    
                case "event":
                    baseMsg = dealTicket(xmlData);
                    break;
    
                default:
                    break;
            }
            //把消息对象处理为xml数据包
            String xml = bean2Xml(baseMsg);
            if(xml!=null){
                return xml;
            }
            return null;
        }
    

    处理文本工具类

        /**
         * 处理文本消息
         * @param xmlData
         * @return TextMsg
         */
        private static BaseMsg dealText(Map<String, String> xmlData) {
            //获取请求聊天信息
            String content = xmlData.get("Content");
            //回复文本消息
            BaseMsg bm = new TextMsg(xmlData,"欢迎访问公众号哟!");
            return bm;
        }
    

    将对象转为xml

        /**
         *  javaBean 转xml
         * @param baseMsg
         * @return  xml
         */
        public static String bean2Xml(BaseMsg baseMsg){
    
            XStream xStream = new XStream();
            //若没有这句,xml中的根元素会是<包.类名>;或者说:注解根本就没生效,所以的元素名就是类的属性
            xStream.processAnnotations(BaseMsg.class);
            xStream.processAnnotations(ImageMsg.class);
            xStream.processAnnotations(LinkMsg.class);
            xStream.processAnnotations(LocationMsg.class);
            xStream.processAnnotations(SmalleVideoMsg.class);
            xStream.processAnnotations(TextMsg.class);
            xStream.processAnnotations(VideoMsg.class);
            xStream.processAnnotations(VoiceMsg.class);
            xStream.processAnnotations(ScanTicket.class);
            String xml = xStream.toXML(baseMsg);
            return xml;
        }
    

    消息对象实体

    消息实体基类

    /**
     *  base模板实体类
     */
    @XStreamAlias("xml") //设置根节点名
    public class BaseMsg {
    
        //置顶别名首字母大写
        @XStreamAlias("ToUserName")
        private String toUserName;//开发者微信号
        private String FromUserName;//发送方帐号(一个OpenID)
        private String CreateTime;//消息创建时间 (整型)
        private String MsgType;//MsgType 文本类型
    
    
        public String getToUserName() {
            return toUserName;
        }
    
        public void setToUserName(String toUserName) {
            toUserName = toUserName;
        }
    
        public String getFromUserName() {
            return FromUserName;
        }
    
        public void setFromUserName(String fromUserName) {
            FromUserName = fromUserName;
        }
    
        public String getCreateTime() {
            return CreateTime;
        }
    
        public void setCreateTime(String createTime) {
            CreateTime = createTime;
        }
    
        public String getMsgType() {
            return MsgType;
        }
    
        public void setMsgType(String msgType) {
            MsgType = msgType;
        }
    
        public BaseMsg(){}
        public BaseMsg(Map<String,String> map){
            this.CreateTime=System.currentTimeMillis()/1000+"";
            this.FromUserName=map.get("ToUserName");
            this.toUserName=map.get("FromUserName");
        }
    
    }
    

    消息文本模板实体类

    /**
     *  消息文本模板实体类
     */
    @XStreamAlias("xml")
    public class TextMsg extends BaseMsg {
    
    
        private String Content;//文本消息内容
    
        public String getContent() {
            return Content;
        }
    
        public void setContent(String content) {
            Content = content;
        }
    
    
    
        public TextMsg(Map<String,String> map, String Content){
            super(map);
            this.Content=Content;
            this.setMsgType("text");
        }
    
    }
    

    maven 依赖

            <!-- https://mvnrepository.com/artifact/dom4j/dom4j -->
            <dependency>
                <groupId>dom4j</groupId>
                <artifactId>dom4j</artifactId>
                <version>1.6.1</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/com.thoughtworks.xstream/xstream -->
            <dependency>
                <groupId>com.thoughtworks.xstream</groupId>
                <artifactId>xstream</artifactId>
                <version>1.4.11.1</version>
            </dependency>
    
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.53</version>
            </dependency>
    

    github代码地址

    展开全文
  • 微信开发】定制消息推送

    千次阅读 热门讨论 2017-07-29 17:37:45
    背景因为要实现向用户推送一些消息,但是每个用户收到的消息按需求又是不同的这里,比如在考试前向学生推送考试信息,那么每个用户收到信息的时间是不同的,收到的内容是不同的所以,消息需要定制发送在微信提供的...

    背景

    因为要实现向用户推送一些消息,但是每个用户收到的消息按需求又是不同的

    这里,比如在考试前向学生推送考试信息,那么每个用户收到信息的时间是不同的,收到的内容是不同的

    所以,消息需要定制发送

    在微信提供的接口中,我们设想了几种方案来实现,最终选择了按照openid列表群发接口来实现

    功能

    根据不同用户在不同的时间向用户发送定制的消息

    代码

    获取用户openid

    if (!IsPostBack && (Request.QueryString["echostr"]==null))
    {
        string appid = "YOUR APPID";
        string appsecret = "YOUR APPSECRET";
        string code = null;
    
        //调用10次微信服务,查询用户openid-暂时不用
        //for (int i = 0; i < 10; i++)
        //{
        code = Request.QueryString["code"];
        if (code == null)
        {
            Response.Redirect("https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appid + "&redirect_uri=http%3a%2f%2--你的域名--%2fET%2f&response_type=code&scope=snsapi_base&state=1#wechat_redirect");
        }
        else
        {
            string url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + appid + "&secret=" + appsecret + "&code=" + code + "&grant_type=authorization_code";
            string jsonReturn = "";
    
            HttpWebRequest httprequest = (HttpWebRequest)WebRequest.Create(url);
            httprequest.Method = "GET";
            HttpWebResponse response = (HttpWebResponse)httprequest.GetResponse();
            using (Stream steam = response.GetResponseStream())
            {
                StreamReader reader = new StreamReader(steam, Encoding.GetEncoding("gb2312"));
                jsonReturn = reader.ReadToEnd();
                steam.Close();
            }
    
            JObject jo = JObject.Parse(jsonReturn);
            OPENID = jo["openid"].ToString();
    
    
        }
    }

     

    获取access_token

    public static string getAccessToken()
    {
        string appid =  System.Configuration.ConfigurationManager.AppSettings["appid"];
        string appsecret =  System.Configuration.ConfigurationManager.AppSettings["appsecret"];
        string access_token = null;
    
        string url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + appsecret;
        string jsonReturn = "";
    
        HttpWebRequest httprequest = (HttpWebRequest)WebRequest.Create(url);
        httprequest.Method = "GET";
        HttpWebResponse response = (HttpWebResponse)httprequest.GetResponse();
        using (Stream steam = response.GetResponseStream())
        {
            StreamReader reader = new StreamReader(steam, Encoding.GetEncoding("gb2312"));
            jsonReturn = reader.ReadToEnd();
            steam.Close();
        }
    
        JObject jo = JObject.Parse(jsonReturn);
        access_token = jo["access_token"].ToString();
        return access_token;
    
    } 

     

    用post方式推送

    private static string Post(string url, byte[] bytesToPost)
    {
        if (String.IsNullOrEmpty(url))
            return "url参数为空值";
        if (bytesToPost == null)
            return "post数据为空值";
        string ResponseString = "";
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        System.Net.ServicePointManager.DefaultConnectionLimit = 50;
        request.KeepAlive = false;
        request.Method = "POST";
        request.ContentType = "text/xml";//提交xml   
        request.ContentLength = bytesToPost.Length;
        Stream writer = request.GetRequestStream();
        writer.Write(bytesToPost, 0, bytesToPost.Length);
        HttpWebResponse HttpWebRespon = (HttpWebResponse)request.GetResponse();
        StreamReader myStreamReader = new StreamReader(HttpWebRespon.GetResponseStream(), Encoding.UTF8);
        ResponseString = myStreamReader.ReadToEnd();
        myStreamReader.Close();
    
        writer.Flush();
        if (writer != null)
        {
            writer.Close();
        }
        if (request != null)
        {
            request.Abort();
        }
        return ResponseString;
    } 

     

    向openid发送定制消息

    string access_token = getAccessToken();
    string url = "https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token=" + access_token;
    
    string postText = "{\"touser\":[\"" + list[i].WeChatOpenId + "\",\"\"],\"msgtype\": \"text\",\"text\": { \"content\": \"【 考试提醒 】\\n\\n\\n" + list[i].StudentName + "同学,你好!\\n明天有考试,请做好准备\\n\\n考试科目:" + list[i].ExamName + "\\n考试日期:" + list[i].Date + "\\n考试时间:" + list[i].StartTime + " - " + list[i].EndTime + "\\n考试地点:" + list[i].ExamPlace + "-" + list[i].SeatNo + "号\\n\\n" + "请提前准备好文具和证件\\n详细情况可点击“查考场”进行查询\\n\\n" + "祝您考试顺利~~\\n\\n\\n" + "-------------------------------\\n" + "xx公司 · 技术支持\\n" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "\"}}";
    
    
    
    //因为汉字编码问题,出现40008错误,可采用以下方式对文本编码
    //string contentText = Encoding.UTF8.GetString(Encoding.UTF8.GetBytes("今天用微信和女神表白,什么排比、比喻各种修辞,可谓字字经典,句句动情,引经据典,声情并茂。最后,在我强烈的感情攻势下,女神终于回了一句:你谁啊?"));
    
    Encoding encoding = Encoding.GetEncoding("utf-8");
    byte[] bytesToPost = encoding.GetBytes(postText);
    string res = Post(url, bytesToPost);
    
    Console.WriteLine(res);

    流程说明

    1.首先需要获取用户openid,在用户访问页面的时候就可以获得,然后存到数据库中
    2.获取access_token,用post方式调用微信接口向用户发送消息

    注意:
    具体什么时间发送,发送什么什么内容,根据自己的业务逻辑来编写
    这里的定时发送采用的是Quartz框架,并把推送程序做成了一个服务

    小结

    在实现消息推送的过程中,遇到很多问题

    比如:如何获取openid,获取access_token,在哪里获取,如何和微信接口交互,如何实现定时发送,程序应该是一个BS、CS、控制台、还是服务

    在讨论和实践的过程中,每次叠加实现一个技术点,一步步实现了功能

    展开全文
  • java二次开发微信公众号接口,实现根据用户授权,获取用户code,再获取openid,然后推送模版消息
  • (1)流程不同:发送消息是第三方服务器主动通知微信服务器向用户消息。而被动回复消息是 用户发送消息之后,微信服务器将消息传递给 第三方服务器,第三方服务器接收到消息后,再对消息做出相应的回复消息。 (2...
  • 微信开发之接收事件推送

    千次阅读 2016-11-16 15:38:25
    其中,某些事件推送在发生后,是允许开发者回复用户的,某些则不允许,详细说明请见本页末尾的微信推送消息与事件说明。 在用户触发事件后,微信开发者页面发送一组xml数据 [html] view plain copy...
  • 该功能主要是用于利用微信公众号向微信用户推送与用户相关的信息,在开发此功能之前需要获取到微信公众号的access_token,以及微信公众号的模板id 为了保证用户不受到骚扰,在开发者出现需要主动提醒、通知用户时,...
  • (1)流程不同:发送消息是第三方服务器主动通知微信服务器向用户消息。而被动回复消息是 用户发送消息之后,微信服务器将消息传递给 第三方服务器,第三方服务器接收到消息后,再对消息做出相应的回复消息。 (2...
  • 第三篇 用小程序给用户推送服务消息 ...小程序消息推送机制有两种一种是统一模板消息推送一种是客服消息,本章主要介绍在Java端指定用户推送指定模板的消息。 模板推送又分为两种一种是用小...
  • 1.先wx(后称为第三方)拿:access_token -> 2.使用拿到的access_token 去获取 自己公众号中的已关注的每个用户的openId -> 3.依据openId 给每个用户发送模板信息。 具体细节可查看官方文档 import ...
  • 微信开发

    2019-09-11 07:36:43
    微信公众号发送客服消息提示errcode":45015,"errmsg":"response out of ...问题原因:由于长时间用户OpenId未和微信公众号做互动消息微信公众号会停止对用户进行消息推送。 解决办法:以用户的身份随机向微信公...
  • 开发背景         省钱,保活、高大上。...开通微信认证(300元/年);...申请微信开放平台;...用户下载app并使用微信登录,...当触发消息推送时(如设备报警),根据openid指定用户推送
  • 微信服务器向开发者的URL推送消息 ...我们需要关心的是下面要说的开发者如何向用户推送图片消息 被动回复用户图片消息(开发者向微信服务器推送消息) 推送的数据包结构如下 这里要注意的是:M...
  • 这里介绍接收消息和被动回复消息。...在微信用户和公众号产生交互的过程中,用户的某些操作会使得微信服务器通过事件推送的形式通知到开发者在开发者中心处设置的服务器地址,从而开发者可以获取到该信息
  • 当我们成为开发者之后,用户向公众账号发送消息或者用户的一些操作,微信服务器会推送XML数据包到开发者填写的URL上。这些数据主要分为两类: ①消息 用户在发送消息后,微信就会推送一个xml数据包给开发者,主要...
  • 这个意思也就是,我们作为微信商户,不能主动的给用户推送消息,如果这个功能完全开放,那么用户有可能会受到大量的垃圾信息,为了做一个很好的控制,微信那边给我们开放了一个模板消息,通过模板消息我们可以友好的...
  • 微信公众号开发之模板消息

    千次阅读 2019-04-26 15:04:59
    微信公众号开发之详细教程 ...什么是模板消息:模板消息仅用于公众号向用户发送重要的服务通知.在测试号中我们可以自定义模板消息,但是在公众号平台中,我们只能从模板库中查找我们所需要的的模板,可以自己...
  • .net微信公众号开发——消息与事件

    千次阅读 2018-01-30 14:43:35
     当普通微信用户向公众号发消息或者微信服务器公众号推送事件时,微信服务器将POST消息(事件)的XML数据包到开发者填写的公众号服务器URL上;公众号服务器然后对消息作出响应。 1.1 消息的流转过程  为了便于...
  • 注:部分内容摘抄自柳峰的微信公众平台开发的博客 1、接受普通消息 当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上。 (1)请求消息 ...各消息类型的推送X
  • 今天利用自己的一点休息时间来编写了一个利用java开发微信第三方平台,这次开发的目地是利用微信的模板消息无限的关注用户推送消息。经过反复的测试,无BUG出现。 开发语言:java,数据库:mysql 5.6  技术点...
  • 微信服务器开发者的URL推送消息 根据官方文档描述,当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上。 文本消息内容结构及说明 由于微信服务器推送过来的数据格式是XML...
  • Java微信公众平台开发消息管理

    千次阅读 2017-07-29 21:17:14
    一定要先看下官方文档微信消息管理分为接收普通消息、接收事件推送、发送消息(被动回复)、客服消息、群发消息、模板消息这几部分一、接收普通消息当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML...
  • 当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上。各消息类型的推送XML数据包结构如下。 目录 [隐藏] 1 文本消息 2 图片消息 3 语音消息 4 视频消息 5 ...
  • 大家如果想了解一下 模板消息 和 订阅消息他们直接的区别,可以看一下这篇文章 微信小程序可以向用户推送消息吗? 当然看不看都无所谓,因为模板消息已经彻底再见了。我们还是多关注关注我们的订阅消息吧。 好了,...
  • 微信开发(3)

    2018-01-04 20:21:00
    按照上一篇文章讲述的方式配置好我们服务器的URL,一旦普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上。 各消息类型的推送XML数据包结构见微信的官方文档...
  • 微信开发】基础知识

    热门讨论 2017-07-13 15:18:02
    2.当我们选择注册的时候,会有4个选择它们各自的侧重点是不同的,从开发角度,简单来说明一下(详细情况百度就好)订阅号的功能是向用户推送消息,每天可以群发1条消息 在进行认证之后可以自定

空空如也

1 2 3 4 5 6
收藏数 105
精华内容 42
关键字:

微信开发向用户推送消息