微信开发者模式 获取推送消息_微信 则微信会将带场景值扫描事件推送给开发者 - CSDN
  • 微信公众号的管理有开发模式和编辑模式两种,两者是互斥的。 腾讯是这么讲的: 编辑模式:编辑模式指所有的公众号运营者都可以通过简单的编辑,设置“按关键字回复”等功能。您可以设定常用的文字/语言/图片/...

    微信公众号

    1

    想自己开一个公众号,先学习一下用 Java 进行微信公众号的开发。

    微信公众号的管理有开发模式和编辑模式两种,两者是互斥的。

    腾讯是这么讲的:

    编辑模式:编辑模式指所有的公众号运营者都可以通过简单的编辑,设置“按关键字回复”等功能。您可以设定常用的文字/语言/图片/录音作为回复消息,并制定自动回复的规则。当订阅用户的行为符合自动回复规则的时候,就会收到自动回复的消息。

    开发模式:开发模式是为开发者提供与用户进行消息交互的能力。对于成功接入消息接口的公众账号,当用户发消息给公众号,微信公众平台服务器会使用http请求对接入的网址进行消息推送,第三方服务器可通过响应包回复特定结构,从而达到回复消息的目的。

    所以接下来要讲的是如果使用微信的开发模式。

    2 准备工作

    微信的开发模式如果要调用他的接口需要微信认证300元。微信有公共平台测试号:

    开发 — 开发者工具 — 公众号平台测试账号

    地址映射工具

    微信的 URL 要求必须是: http:// 80端口,且必须是能够在公网访问的,本地的不行。所以这里用到一个映射工具叫做 ngrok 。下载之后使用,cmd

    ngrok http 8080

    这里写图片描述

    3 开发者模式接入

    准备完毕开始开发,包结构如下:

    包结构

    开发者模式接入

    通过 servlet 的 GET 请求进行校验

    校验参数

    微信需要对以上四个参数进行校验,将 timestamp,nonce,token 三者排序拼接成字符串,再进行 Sha1 加密之后,如果和 signature 相同则表示校验通过:

    public static boolean checkSignature(String signature,String timestamp,String nonce){
            //排序
            String[] arr = new String[]{token,timestamp,nonce};
            Arrays.sort(arr);
    
            //生成字符串
            StringBuffer content = new StringBuffer();
            for(int i = 0; i < arr.length; i++){
                content.append(arr[i]);
            }
    
            //sha1 加密 java实现消息摘要加密
            String temp = getSha1(content.toString());
    
            //和微信传递过来的参数进行校验
            return temp.equals(signature);
        }

    sha1加密

    public static String getSha1(String str) {
            if (str == null || str.length() == 0) {
                return null;
            }
            char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
                    'a', 'b', 'c', 'd', 'e', 'f' };
    
            try {
                MessageDigest mdTemp = MessageDigest.getInstance("SHA1");
                mdTemp.update(str.getBytes("UTF-8"));
    
                byte[] md = mdTemp.digest();
                int j = md.length;
                char buf[] = new char[j * 2];
                int k = 0;
                for (int i = 0; i < j; i++) {
                    byte byte0 = md[i];
                    buf[k++] = hexDigits[byte0 >>> 4 & 0xf];
                    buf[k++] = hexDigits[byte0 & 0xf];
                }
                return new String(buf);
            } catch (Exception e) {
                return null;
            }
        }

    进行校验的servlet

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //验证消息的确来自微信服务器 校验四个参数
            String signature = request.getParameter("signature"); //微信加密签名
            String timestamp = request.getParameter("timestamp"); //时间戳
            String nonce = request.getParameter("nonce"); //随机数
            String echostr = request.getParameter("echostr"); //随机字符串
    
            PrintWriter out = response.getWriter();
            if(CheckUtil.checkSignature(signature, timestamp, nonce)){
                out.print(echostr);
            }
        }

    配置web.xml

    <servlet>
        <servlet-name>weixinServlet</servlet-name>
        <servlet-class>com.shuiyujie.servlet.WeiXinServlet</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>weixinServlet</servlet-name>
        <url-pattern>/wx.do</url-pattern>
      </servlet-mapping>

    访问效果

    访问是500,说明已经通了。接下来用 ngrok 映射工具生成映射地址,到公网上去访问看看行不行,这个在前面讲过不做演示。

    在访问成功之后,对微信中的服务器配置进行填写提交。

    配置成功

    可以提交并且启用开发模式了,启用了开发模式则编辑模式下的配置全部失效。

    4 消息的接收与响应

    图片来自与网络
    图片来自于网络

    数据交互的过程如上图所示,通过 Post 请求进行。根据请求类型的不同,微信规定了不同的参数,并且通过 XML 的格式进行传递。通过查看开发文档,我们就可以了解所需要的参数。又由于是通过 XML 的格式传递的,为了便于后台程序的解析,所以将 XML 装换成集合类型。

    4.1 文本消息的 PO 类

    参数列表

    通过微信文档可以知道,文本消息传递的参数列表如上图所示,所以要新建一个 Po 类。

    public class TextMessage {
            private String ToUserName;
            private String FromUserName;
            private long CreateTime;
            private String MsgType;
            private String Content;
            private String MsgId;

    添加 get, set方法

    4.2 XML 和集合互相转换的工具类

    XML 转集合

    public static Map<String,String> xmlToMap(HttpServletRequest request) throws IOException, DocumentException{
    
            Map<String,String> map = new HashMap<String,String>();
            SAXReader reader = new SAXReader();
    
            InputStream ins = request.getInputStream();
            Document doc = reader.read(ins);
    
            //获取根节点
            Element root = doc.getRootElement();
    
            List<Element> list = root.elements();
    
            for(Element e : list){
                map.put(e.getName(), e.getText());
            }
            ins.close();
    
            return map;
        }

    文本信息转 XML

    public static String textMessageToXml(TextMessage textMessage){
            XStream xstream = new XStream();
            xstream.alias("xml", textMessage.getClass());
            return xstream.toXML(textMessage);
        }

    servlet doPost 接收响应

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setCharacterEncoding("UTF-8");
            response.setCharacterEncoding("UTF-8");
            PrintWriter out = response.getWriter();
            try {
                Map<String,String> map = MessageUtil.xmlToMap(request);
                String fromUserName = map.get("FromUserName");
                String toUserName = map.get("ToUserName");
                String msgType = map.get("MsgType");
                String content = map.get("Content");
    
                String message = null;
                if("text".equals(msgType)){
                    TextMessage text = new TextMessage();
                    text.setFromUserName(toUserName); //原来的信息发送者,将变成信息接受者
                    text.setToUserName(fromUserName); //原理的接受者,变成发送者
                    text.setMsgType("text"); //表示消息的类型是text类型
                    text.setCreateTime(new Date().getTime());
                    text.setContent("您发送的信息是:" + content);
                    message = MessageUtil.textMessageToXml(text); //装换成 xml 格式发送给微信解析
    
                    System.out.println(message);
                }
                out.print(message);
            } catch (DocumentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
        }

    接下来需要启动 tomcat 运行程序。

    效果图

    这样消息回复的效果已经完成了,最后来让他能够接收更多类型的消息。比如常见的一些:关注后的消息回复,取消关注之后的消息回复,还有关键字的消息回复

    5 更多接收消息

    由于会接收多种消息类型,修改 MessageUtil 消息工具类,为了方便把常用的消息类型都定义成常量,并且将需要回复的消息,例如关注之后回复的消息,关键词回复的消息都定义好

    定义常量

    public class MessageUtil {  
    
        public static final String MESSAGE_TEXT = "text";
        public static final String MESSAGE_NEWS = "news";
        public static final String MESSAGE_IMAGE = "image";
        public static final String MESSAGE_VOICE = "voice";
        public static final String MESSAGE_MUSIC = "music";
        public static final String MESSAGE_VIDEO = "video";
        public static final String MESSAGE_LINK = "link";
        public static final String MESSAGE_LOCATION = "location";
        public static final String MESSAGE_EVNET = "event";
        public static final String MESSAGE_SUBSCRIBE = "subscribe";
        public static final String MESSAGE_UNSUBSCRIBE = "unsubscribe";
        public static final String MESSAGE_CLICK = "CLICK";
        public static final String MESSAGE_VIEW = "VIEW";
        public static final String MESSAGE_SCANCODE= "scancode_push";
    /**
         * 拼接文本消息
         * @param toUserName
         * @param fromUserName
         * @param content
         * @return
         */
        public static String initText(String toUserName,String fromUserName,String content){
            TextMessage text = new TextMessage();
            text.setFromUserName(toUserName);
            text.setToUserName(fromUserName);
            text.setMsgType(MessageUtil.MESSAGE_TEXT);
            text.setCreateTime(new Date().getTime());
            text.setContent(content);
            return textMessageToXml(text);
        }
    
        /**
         * 关注回复
         * @return
         */
        public static String menuText(){
            StringBuffer sb = new StringBuffer();
            sb.append("欢迎关注公众号弄浪的鱼:\n\n");
            sb.append("1 回复关键字1\n");
            sb.append("2 回复关键字2\n");
            sb.append("3 回复关键字3\n\n");
            sb.append("本公众号还在开发中,没啥能看的,别玩坏了哈~~");
            return sb.toString();
        }

    servlet对接收到的消息进行判断并作出响应

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            response.setCharacterEncoding("UTF-8");
            response.setCharacterEncoding("UTF-8");
            PrintWriter out = response.getWriter();
            try {
                Map<String, String> map = MessageUtil.xmlToMap(request);
                String fromUserName = map.get("FromUserName");
                String toUserName = map.get("ToUserName");
                String msgType = map.get("MsgType");
                String content = map.get("Content");
    
                String message = null;
    
                if (MessageUtil.MESSAGE_TEXT.equals(msgType)) {
                    if ("1".equals(content)) {
                        message = MessageUtil.initText(toUserName, fromUserName, MessageUtil.firstMenu());
                    } else if ("2".equals(content)) {
                        message = MessageUtil.initText(toUserName, fromUserName, MessageUtil.secondMenu());
                    } else if ("3".equals(content)) {
                        message = MessageUtil.initText(toUserName, fromUserName, MessageUtil.threeMenu());
                    } else if ("?".equals(content) || "?".equals(content)) {
                        message = MessageUtil.menuText();
                    }
                } else if (MessageUtil.MESSAGE_EVNET.equals(msgType)) {// 事件推送
                    String eventType = map.get("Event"); // 事件分成多种,分别判断处理
                    if (MessageUtil.MESSAGE_SUBSCRIBE.equals(eventType)) { // 这里先写一个关注之后的事件
                        message = MessageUtil.initText(toUserName, fromUserName, MessageUtil.menuText());
                    }
                }
    
                System.out.println(message);
    
                out.print(message);
            } catch (DocumentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
        }

    成功

    以上,关注回复和关键词回复成功。

    最后再把微信程序部署到服务器上就可以正常访问了,下一篇就总结怎么部署到阿里云。

    展开全文
  • 2.打开微信开发者工具的版本管理 3.打开左侧栏的“设置”,选择“远程” 4.选择“网络和认证”,选择“使用用户名和密码” 5.选择“抓取”,会得到远程的各分支 fetch和git的区别 : 获取最新版本 有两种 拉取 ...
    1.复制coding上项目的地址

    在这里插入图片描述

    2.打开微信开发者工具的版本管理

    在这里插入图片描述

    3.打开左侧栏的“设置”,选择“远程”

    在这里插入图片描述

    4.选择“网络和认证”,选择“使用用户名和密码”

    在这里插入图片描述

    5.选择“抓取”,会得到远程的各分支

    在这里插入图片描述
    fetch和git的区别 :

    • 获取最新版本 有两种 拉取 和 获取 pull 和 fetch
    • git pull 从远程拉取最新版本 到本地 自动合并 merge git pull origin master
    • git fetch 从远程获取最新版本 到本地 不会自动合并 merge git fetch origin master git log -p master …/origin/master git merge orgin/master
    • 实际使用中 使用git fetch 更安全 在merge之前可以看清楚 更新情况 再决定是否合并
      转载自《git 拉取和获取 pull 和 fetch 区别》.
    6.推送到远程的分支

    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 等着把代码从微信开发者工具导进去就好了 2、开发者工具初始化本地仓库 打开微信开发者工具想要共同开发的那个项目,点击版本管理,点击弹出的框中的确定,就可以初始化完毕了。 3、连接gitee仓库和微信开发者工具 ...

    原来这个东西还有这么多没搞清楚的地方,太难了

    以下内容分为空的gitee仓库,将微信开发这工具导入gitee和从gitee上扒下代码导入到空的本地项目中。


    1、创建gitee仓库

    直接在gitee上创建一个新的仓库就好了,新建,就一个空的。等着把代码从微信开发者工具导进去就好了

    2、开发者工具初始化本地仓库

    打开微信开发者工具想要共同开发的那个项目,点击版本管理,点击弹出的框中的确定,就可以初始化完毕了。

    3、连接gitee仓库和微信开发者工具

    点击微信开发这工具中的版本管理——>设置——>远程——>添加。 然后在弹出的框中填入gitee仓库的名称和网址就好了。

    因为要对这个仓库进行操作,所以你得验证你的操作权限吧,这个时候就找到设置——>网路和认证——>认证方式——>使用用户名和密码。然后填出你的gitee注册邮箱和密码,即可获得你在gitee上拥有的对改仓库的权限。

    获取权限
    如果你是改仓库的创建者,那么你就拥有这个仓库的拥有者的权限,可以邀请队友进入仓库进行开发;如果你要加入别人的仓库,就点击拥有者的分享的链接就可以获得相应的权限。

    4、上传和导入的操作

    1、将本地文件的修改上传到gitee仓库中。
    本地文件的修改情况会先在”工作区“中展现,需要将工作区中的变更提交到本地的git仓库上。
    在这里插入图片描述
    在这里插入图片描述

    2、将本地仓库的修改推送到gitee仓库中,找到推送按钮,选择要推送的本地分支和要推送到的远程仓库分支,点击确定即可完成推送:
    在这里插入图片描述
    3、导入gitee仓库代码。

    先直接从gitee中克隆一份仓库中的完整的代码,然后将这份代码导入到新建的空白项目中。就可以完成整体项目的导入。若以后仓库中有代码发生更改,则使用左上角的“抓取”按钮,获得gitee上的最新修改。接下来:
    1、点击“远程”里面的“master,将HEAD重置到最新的记录中,这时候工作区就会有最相信的修改信息
    2、填写标题,将工作区中的修改提交到本地的仓库中。
    在这里插入图片描述
    3、在这边可以看到细节修改,接下来右键点击修改的文件,选择:
    在这里插入图片描述
    然后在本地的文件中就会添加出来仓库中最新的修改。

    展开全文
  • 微信小程序 消息推送功能实现详解

    万次阅读 热门讨论 2019-10-15 10:26:18
    在小程序开发中,如果想实现:用户发给小程序的消息以及开发者需要的事件推送,在小程序项目中,我们想要实现这样一个功能, 比如我们小程序中的客服功能,我不想要使用小程序后台的在线客服功能,但我又想实现客服...

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

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

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

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

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

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

    加入群聊

    展开全文
  • 微信开发者模式实现图文消息发送

    千次阅读 2018-09-27 09:34:18
    公众号类型 测试号 测试号现在仅支持使用预览接口,并不能实现群发。 ...id=mp1481187827_i0l21截图】 ...前端是自己根据图文消息(Article)的格式设计的,Article的内容如下: 【图片来源:官方文...
  • 微信开发者工具集成git,实现多人协调开发,下面就拿GitHub举例,一一说明。 一、在GitHub创建远程仓库。这里忽略,网上很多。 二、在微信开发者工具中配置Git,并实现文件上传。 1.点击开发者工具右上角的...
  • 微信开发者模式向用户推送消息,改的建立一个专门的后台让维护人员操作呢
  • 在磁盘中新建一个空的文件夹,并在文件夹中由于项目的地址不方便公开可在群里获取进入这个空文件夹里右键 git bash git bash here以后就用这一句 之后这个空文件里面就会出现一个和这个克隆项目同名的文件 git ...
  • 微信开发者工具-码云项目的导入

    千次阅读 2020-05-05 10:53:21
    title: 微信开发者工具–码云项目的导入 date: 2020-05-04 21:37:11 tags: 小程序 第一步: -打开开发者工具,新建项目,填写项目名称,例:demo -选择一个空目录存放此项目 -填写小程序的AppID(在微信公众平台...
  • 企业公众服务号微信红包编程是否要进入开发者模式,如果消息推送 给了别的服务器 开发模式关闭怎么办?
  • 微信开发之接收事件推送

    千次阅读 2016-10-05 21:09:26
    ​在微信用户和公众号产生交互的过程中,用户的某些操作会使得微信服务器通过事件推送的形式通知到开发者开发者中心处设置的服务器地址,从而开发者可以获取到该信息。其中,某些事件推送在发生后,是允许开发者...
  • 内容: 微信服务器向公众号推送消息或事件后,得到的回应不合法 次数: 5分钟 33次 错误样例: [OpenID=ocKxit_eN1kHNvjFeR3svjaL23mU][Stamp=1489985160][3rdUrl=http://sjjxgl.top/springmvc_mybatis/wx/index.do]...
  • 接收服务器推送普通消息 接收普通消息 当普通微信用户向公众账号发...服务器介入获取微信推送消息代码: /** * 此方法用于微信回复消息 * @param request * @return */ @PostMapping("getToken") @ResponseB...
  • https://www.jianshu.com/p/07fa92910b75
  • 微信公众号开发消息推送以及图文推送

    万次阅读 热门讨论 2018-10-30 17:11:44
    今天给大家分享的关注公众号自动推送图文消息,以及做一个超牛逼的机器人。 先看看效果。 发错图了。。。这是我昨天开发的一款机器人chu了会骂人啥都不会了。 我今天将它词库进行了更新和升级,接入了...
  • 2、打开微信开发者工具客户端 --- 版本管理 --- 初始化Git仓库 -- 默认初始化就可以 3、点击 --- 设置 -- 网络和认证 -- 填入码云的账号和密码 4、点击 --- 设置 -- 远程 -- 添加 5、点击抓取 6、...
  • 问题原因:微信开发者工具使用的appid是个人微信号,而不是公众号的appid 问题解决: 1、登录公从号界面:https://mp.weixin.qq.com/ 2、进入小程序开发管理,左边任务栏找到设置按钮 3、复制要上传代码的公众号...
  • 一个微信公众号,参考:微信公众号申请及介绍 内网穿透工具,参考:使用natapp开启内网穿透之旅 数据交互 编辑模式和开发模式的关系: 编辑模式和开发模式是互斥的关系,也就是说,当我们使用开发模式时,编辑模式...
  • 一年一度的微信小程序开发大赛即将拉开帷幕,在使用微信开发者工具进行多人开发时,代码管理就成了比较棘手的问题。好在,微信开发者工具中集成了Git工具,只需链接到远程仓库,即可轻松协作。 #使用方法 ##安装Git ...
  • 1.下面是点击微信开发者工具后的界面 2.首先,先来了解本地分支。 带有HEAD标签在后面的master存储我的代码的现有版本,或者这里称之为标准版本。开始进入版本管理工具时会有个提示上传代码的按钮,点击后最开始...
1 2 3 4 5 ... 20
收藏数 18,408
精华内容 7,363
关键字:

微信开发者模式 获取推送消息