微信开发者工具需要接后台吗_微信开发者工具切后台 - CSDN
  • 在进入微信开发前,首先我们要将我们的ip映射成url访问地址,这里我用的是natapp,感觉还是挺稳定的,只不过映射的地址搁一段时间会被替换掉natapp的下载地址https://natapp.cn/下来进入到微信的公众号平台里面去...

    在进入微信开发前,首先我们要将我们的ip映射成url访问地址,这里我用的是natapp,感觉还是挺稳定的,只不过映射的地址搁一段时间会被替换掉

    natapp的下载地址https://natapp.cn/

    接下来进入到微信的公众号平台里面去,如果还没申请的话可以进行申请,微信的公众号分为三种:订阅号,服务号,企业号,由于这里是屌丝的聚集地,所以只能用订阅号来玩一玩。

    公众号平台地址:
    https://mp.weixin.qq.com/cgi-bin/home
    接着我们点击开发-》基本配置-》服务器配置上点击启动,输入我们的后台网址,令牌,接着点击确定就可以了,如果提示错误,说明后台和微信平台没对接成功,需要检查一下传入的参数是否正确。如下是我的ip地址
    这里写图片描述

    记得启动的natapp服务,以下是我用springmvc搭建的服务器代码,如下:

    @Controller
    @RequestMapping("wechat")
    public class WeChatController {
    
        @RequestMapping(value = "/hello")
        public String index(){
            return "index";
        }
    
        @RequestMapping(value = "/detail")
        public String detail(){
            return "detailpage";
        }
    
    
        @RequestMapping(value = "/home",method= RequestMethod.GET)
        @ResponseBody
        public void valid(HttpServletRequest request, HttpServletResponse response) throws IOException {
            boolean isGet = request.getMethod().toLowerCase().equals("get");
            String code = request.getParameter("code");
            if (isGet) {
                // 微信加密签名
                String signature = request.getParameter("signature");
                // 时间戳
                String timestamp = request.getParameter("timestamp");
                // 随机数
                String nonce = request.getParameter("nonce");
                // 随机字符串
                String echostr = request.getParameter("echostr");
    
                PrintWriter out = response.getWriter();
                // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败
                if (SignUtil.checkSignature(signature, timestamp, nonce)) {
                    out.print(echostr);
                }
                out.close();
                out = null;
            }else{
                userpost(request,response);
            }
        }
    
        @RequestMapping(value = "/home",method= RequestMethod.POST)
        public void userpost(HttpServletRequest request, HttpServletResponse response) throws IOException   {
            request.setCharacterEncoding("UTF-8");
            PrintWriter out = response.getWriter();
            String str = null;
            String code = request.getParameter("code");
            try {
                Map<String, String> message = MessageUtil.xmlToMap(request);
                String fromUser = message.get("FromUserName");
                String toUser = message.get("ToUserName");
                String content = message.get("Content");
                String msgType = message.get("MsgType");
                String msgId = message.get("MsgId");
                Message ms = new Message();
                ms.setContent(content);
                ms.setFromUserName(toUser);
                ms.setToUserName(fromUser);
                ms.setMsgType(msgType);
                str = MessageUtil.textMessageToXml(ms).replace("\n","").replace(" ","");
                out.print(str);
                out.close();
                out = null;
            }catch (Exception e){
                e.printStackTrace();
            }
        }

    签名认证

    /** 
     * 请求校验工具类 
     *  
     * @author liufeng 
     * @date 2013-05-18 
     */  
    public class SignUtil {  
        // 与接口配置信息中的Token要一致  
        private static String token = "chenmianhai";
    
        /** 
         * 验证签名 
         *  
         * @param signature 
         * @param timestamp 
         * @param nonce 
         * @return 
         */  
        public static boolean checkSignature(String signature, String timestamp, String nonce) {  
            String[] arr = new String[] { token, 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 
         */  
        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 
         */  
        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;  
        }  
    }  

    pojo转换为xml

    /**
     * 基于JAXB的XML生成器: 用于pojo与xml文件的相互转换
     * @author wuwz
     * @ClassName XmlBuilder
     * @DateTime 2016年3月29日 上午10:50:17
     */
    public abstract class XmlBuilder {
    
        private final static Logger log= Logger.getLogger(XmlBuilder.class);
        /**
         * 将pojo转换为XML字符串
         * @param object
         * @return
         */
        public static String convertToXml(Object object) {
            Writer sw = new StringWriter();  
            try {  
                // 利用jdk中自带的转换类实现  
                JAXBContext context = JAXBContext.newInstance(object.getClass());
    
                Marshaller marshaller = context.createMarshaller();  
                // 格式化xml输出的格式  
                marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);  
                // 将对象转换成输出流形式的xml  
                marshaller.marshal(object, sw); 
                log.debug("XML字符串生成成功!");
            } catch (JAXBException e) {  
                e.printStackTrace();  
            } finally {
                if(sw != null) {
                    try {
                        sw.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return sw.toString().replace("standalone=\"yes\"", "");  
        }
    
        /**
         * 将pojo转换为XML文件
         * @param obj
         * @param savePath
         */
        public static File convertToXmlFile(Object obj,String savePath) {
            File file = null;
            String xmlStr = convertToXml(obj);
            if(xmlStr != null && !"".equals(xmlStr)) {
    
                file = new File(savePath);
                if(!file.exists() && file.isFile()) {
                    try {
                        file.createNewFile();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if(file.isDirectory()) {
                    System.out.println(MessageFormat.format("{0}不是有效的文件路径.", savePath));
                    return null;
                }
    
                Writer writer = null;
    
                try {
                    writer = new FileWriter(file);
                    writer.write(xmlStr);
                    writer.flush();
                    log.debug("XML文件生成成功!");
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    if(writer != null) {
                        try {
                            writer.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
    
            }
            return file;
        }
    
    
        /**
         * 将XML文件转换为指定类型的pojo
         * @param clazz
         * @param xmlPath
         * @return
         */
        public static Object xmlFileToObject(Class<?> clazz, String xmlPath) {
            Object xmlObject = null;
            Reader fr = null;
            try {
                JAXBContext context = JAXBContext.newInstance(clazz);
                Unmarshaller unmarshaller = context.createUnmarshaller();
                fr = new FileReader(xmlPath);
                xmlObject = unmarshaller.unmarshal(fr);
            } catch (JAXBException e) {
                e.printStackTrace();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } finally {
                if (null != fr) {
                    try {
                        fr.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return xmlObject;
        }
    
        /**
         * 将XML字符串转换为指定类型的pojo
         * 
         * @param clazz
         * @param xmlStr
         * @return
         */
        public static Object xmlStrToObject(Class<?> clazz, String xmlStr) {
            Object xmlObject = null;
            Reader reader = null;
            try {
                JAXBContext context = JAXBContext.newInstance(clazz);
                // 进行将Xml转成对象的核心接口
                Unmarshaller unmarshaller = context.createUnmarshaller();
                reader = new StringReader(xmlStr);
                xmlObject = unmarshaller.unmarshal(reader);
            } catch (JAXBException e) {
                e.printStackTrace();
            } finally {
                if (null != reader) {
                    try {
                        reader.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return xmlObject;
        }
    }

    以上的内容模拟的是消息接口的接收与回复,详情请查看微信的开发文档
    https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140453

    展开全文
  • 那么为了能够在微信开发者工具里调试,需要首先进入该公众号的后台,在web开发者工具里,将我本人的微信号添加进去: 点击"绑定开发者账号": 输入待绑定的微信账号: 点击绑定,该微信号会收到一条消息,询问是否绑定:.....

    假设我用vue开发了一个web应用,需要在手机微信里访问并调试, 可以按照本文介绍的步骤,使用微信开发者工具来调试.

    假设我的web应用的访问入口是如下公众号菜单的"预约"按钮:

    那么为了能够在微信开发者工具里调试,需要首先进入该公众号的后台,在web开发者工具里,将我本人的微信号添加进去:

    点击"绑定开发者账号":

    输入待绑定的微信账号:

    点击绑定,该微信号会收到一条消息,询问是否绑定:

    点击同意操作完成绑定.

    接下来,把要调试的web应用的url放到微信开发者工具地址栏里,回车之后,微信开发者工具就会弹出一个询问窗口,点击Allow之后,就可以在微信开发者工具提供的类似Chrome开发者工具调试器一样的界面里进行单步调试了.

    这个粘贴到地址栏的url很有讲究。

    https://open.weixin.qq.com/connect/oauth2/authorize?appid=yyyy&redirect_uri=https%3a%2f%2fwww.xxx.com%2fsmart&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect
    其中appid=后面的值,是从微信公众号控制台里拷贝出来的appid:

    redirect_uri, 即为我们开发的web应用,部署到服务器之后生成的url,需要经过url encode处理:https://www.xxx.com/smart

    这个url准备好之后,将其粘贴到微信开发者工具地址栏里,回车,即可看到一个对话窗口,要求获得我们公开信息的许可:

    点击Allow之后,就可以像使用Chrome开发者工具的调试器一样,在微信开发者工具里进行单步调试了:

    要获取更多Jerry的原创文章,请关注公众号"汪子熙":

    展开全文
  • 微信小程序中,如果前后端分离开发的话,是需要通过接口来进行交互的, 因此在联系不到后台的情况下,写前端的我们应当如何测试自己的页面呢?方法如下: 微信小程序前端与后台交互的时候使用的是request请求,...

    在微信小程序中,如果前后端分离开发的话,是需要通过接口来进行交互的,

    因此在联系不到后台的情况下,写前端的我们应当如何测试自己的页面呢?方法如下:

    微信小程序前端与后台交互的时候使用的是request请求,请求的地址必须是Http打头的,为了方便前台测试,我们可以自己先写一个我们需要的json文件,然后使用tomcat去访问。

    具体做法就是:

    1.在idea编辑器(其他可以做web的编辑器也可以)中新建一个web项目,

    2.将微信小程序的项目文件(假设叫weixin_test)拖进web目录下,

    3.配置并启动tomcat,

    4.将web项目web目录下的小程序文件(假设叫weixin_test)用微信开发者打开,

    5.正常使用request请求去访问我们写好的json文件即可。

    6.与此同时,我们使用微信开发者工具调代码的时候idea下的那个web项目也会同步更新(因为微信开发者工具打开的是web项目下的一个子文件),前提是tomcat是启动状态,这样就可以提高编码效率啦。

     

    原创文章,请勿转载!

    展开全文
  • 最近在做企业微信开发,碰到一个很蛋疼的问题,企业微信后台怎么设置,在微信开发者工具上始终提示“未绑定企业号开发者”,百度了一圈也没找到解决的答案,最后问企业微信客服才解决,在此再次感谢为我解答问题的小...

      最近在做企业微信开发,碰到一个很蛋疼的问题,企业微信后台怎么设置,在微信开发者工具上始终提示“未绑定企业号开发者”,百度了一圈也没找到解决的答案,最后问企业微信客服才解决,在此再次感谢为我解答问题的小姐姐(哥哥),耐心的为我一步步分析问题,经过一个小时的不懈努力,终于搞定。问题描述以及相关解决方案看图:  

      但是,按照客服说的三条我都做了,没问题啊,郁闷~~~~

      最后客服问我,"对方是否登录管理后台去勾选开发者工具呢", 于是,灵光一闪,对奥,难道是?赶快用另一个微信号登录一看,果然没有勾选,再然后,自己去实验吧。

     

    转载于:https://www.cnblogs.com/learnmo/p/9580318.html

    展开全文
  • 打开微信开发者工具 创建第一个小程序 步骤: 打开微信开发者工具 使用微信扫码登录 点击小程序-创建小程序 项目名 项目路径 appid 不使用云服务器 语言: javascript...
  • 上一篇文章中https://blog.csdn.net/u014650759/article/details/90701866,我们已经安装好了微信开发者工具,并导入了一个Demo项目,这篇文章,将就开发者工具进行简单的介绍,方便你开发实用编译器,更好的开发小...
  • 强调一下:微信开发者工具可以调试企业微信的自建应用,暂时还不支持调试第三方应用。调试第三方应用时同样也会提示未绑定企业号开发者。 下面将针对如何调试自建应用出现的企业号未绑定问题。 1、首先,将自己...
  • 解决微信开发者工具报错:当前开发者未绑定此AppID,请到小程序后台操作重试 首先小程序要绑定到一个服务号或者公众号,然后用该服务号或公众号登录微信公众平台,[在公众平台的 开发–基本配置可以查到开发者ID...
  • 1.说明:前端使用微信开发者工具后台用ideal,后台框架为springboot+mybatisplus 本文主要内容是实现从数据库查询数据库显示在页面上的整个流程 后台不会搭建的可以点击下面的链接看下另一篇博客: 链接 2.数据库表...
  • 微信团队发布了微信小程序开发者工具微信小程序开发文档和微信小程序设计指南,全新的开发者工具,集成了开发调试、代码编辑及程序发布等功能,帮助开发者简单和高效地开发微信小程序。启动工具时,开发者需要使用...
  • 1.微信开发者工具自行到网上下载即可 2.打开微信开发者工具,如图所示: 点击创建后,如下图所示:
  • 问题原因:微信开发者工具使用的appid是个人微信号,而不是公众号的appid 问题解决: 1、登录公从号界面:https://mp.weixin.qq.com/ 2、进入小程序开发管理,左边任务栏找到设置按钮 3、复制要上传代码的公众号...
  • 微信开发者工具跨域 在终端配置open -a /Applications/微信web开发者工具.app --args --disable-web-security --user-data-dir 谷歌配置跨域。open -a /Applications/Google\ Chrome.app --args --disable-web-...
  • 微信开发者工具(一) 一、微信开发者工具基本信息 1.1 微信开发者工具的下载 ​ 直接打开下面网址进行下载: ​ https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html 1.2 下载以后登录 1.3 ...
  • 呐,第一次接触微信的开发,搞vue也搞了好久,页面框架和后台框架和我一点关系都...下面是第一次为了用开发者工具测试需要配置的内容。首先,登录微信公众平台,看到自己的appID,appsecret,如下图:然后在下图中...
  • 今天在调试一个微信公众号的项目,用微信开发者工具做调试。有一个页面我一点击刷新,后台就会断点两次。有什么重定向的地方我不知道么?于是去掉微信浏览器的限制,直接将地址拷贝到chrome里面,不会重复请求。然后...
  • 1、点击微信开发者工具,击右键, 选择“属性”,打开面板之后,选择“快捷方式” => “目标” 2、在目标那一行的最后,输入“空格--...4、重启微信开发者工具即可 “空格--disable-web-security --u...
  • 相关文章微信小程序开发(二)开发之日历打卡小程序发现页微信小程序开发(三)入门之创建打卡活动前言一直不温不火的微信小程序2018年迎来了第二春,在我的记忆中随着跳一跳小游戏的出现,一时间数千万的微信小程序...
  • 本小节我们将介绍微信开发者工具如何使用 同学们可以通过两种方式进入官网,一是直接浏览器输入如下网址;二是通过百度搜索“微信公众平台” 每个小程序都拥有一个身份证号,成为AppID,同学们可以首先...
  • 一、前言 这次的项目主要是关于微信...在开发过程中会设计到微信接口的调测,这里使用的微信公众号中提供的开发者工具中的在线接口调测和公众平台测试账号。注:微信支付功能不能使用公众平台测试账号测试,必须部署...
1 2 3 4 5 ... 20
收藏数 18,803
精华内容 7,521
关键字:

微信开发者工具需要接后台吗