微信开发者测试账号url_微信公众号绑定微信开发者账号 - CSDN
  • 微信公众平台测试号的url和token原理

    千次阅读 2017-03-28 12:01:22
    1.在微信开发平台测试号后台填写的url和token 2.点击保存的时候微信服务器会自动发一个get请求到我们写的url上面! 我们要根据我们写的token做 签名验证 3.如果签名验证成功的话!把微信发给我们的随机字符串再...

    1.在微信开发平台测试号后台填写的url和token


    2.点击保存的时候微信服务器会自动发一个get请求到我们写的url上面!
    我们要根据我们写的token做 签名验证


    3.如果签名验证成功的话!把微信发给我们的随机字符串再返回给微信服务器。
    这样就对我们微信公众平台测试好的服务器进行了验证。成为了开发者。

    展开全文
  • 由于微信只能绑定域名,不能使用ip地址,但是在公司中域名直接解析到线上服务器,但是线上服务器该域名下已经有服务在运行,所以不能使用线上服务器直接进行开发测试,也不能把已有的服务号打开开发者模式,...

    最近在搞微信的开发者模式,对于第一次接触这东西的人来说还真是没有头绪,因为需要跟微信进行交互,难免会碰到一些问题,不像我们在本机开发那样,很快就能把逻辑代码写完。今天主要是让测试耽误了时间,由于微信只能绑定域名,不能使用ip地址,但是在公司中域名直接解析到线上服务器,但是线上服务器该域名下已经有服务在运行,所以不能使用线上服务器直接进行开发测试,也不能把已有的服务号打开开发者模式,因为打开开发者模式之后好多已有的自动回复就不能使用了,总之遇到了各种问题,记录下开发过程。


    申请测试账号

    进入申请地址:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

    点击登录按钮,会弹出一个二维码,使用手机微信扫描即可

    登录成功之后会出现下面的界面


    appID和appsecret在调用微信接口的时候会用到,这里是微信自动给我们生成好的,直接使用就可以。

    URL:是我们自己服务器的URL,用户微信推送用户消息和事件用的。这里只能配置域名,不能使用IP。这个URL是用来接收微信的token认证和消息事件用的,我们自己的服务器要能对这个url的请求进行处理并相应,所以要求该域名必须是外网可以访问的,否则在点“提交”按钮的时候会报token异常。

    Token:是验证签名用的,此处填写的要与代码中的Token保持一致否则验证不过。

    URL和Token都填好之后点击提交按钮,若验证通过,会返回配置成功,否则返回配置失败。

    配置失败的原因可能有几个:

    1、URL地址不能访问

    2、Token填写错误

    注意:在点击提交按钮之前一定要先把服务端的代码写好,否则会返回配置失败,具体实现代码在后面演示。

    到此为止,我们的接口配置信息就算完成了。

    扫描测试号二维码就可以来测试我们的功能了


    Token认证

    我配置的URL是,http://www.xxx.com/XX/wxProcess/service,所以微信会把所有的请求都发到我的/service路径上,包括Token认证和事件处理,我使用两个方法来处理的,但是请求类型不同,Token认证是用的GET请求,事件处理使用的是POST请求。演示代码如下:

    /**
         * 打开开发者模式签名认证
         * @param signature
         * @param timestamp
         * @param nonce
         * @param echostr
         * @return
         */
        @ResponseBody
        @RequestMapping(value = "/service", method = RequestMethod.GET)
        public Object defaultView(String signature, String timestamp, String nonce, String echostr) {
            if (echostr == null || echostr.isEmpty()) {
                return nonce;
            }
            if (SignUtil.checkSignature(signature, timestamp, nonce)) {
                return echostr;
            }
            return nonce;
        }
    
        /**
         * 事件处理
         * @param signature
         * @param timestamp
         * @param nonce
         * @param message
         * @return
         */
        @ResponseBody
        @RequestMapping(value = "/service", method = RequestMethod.POST, consumes = "text/xml", produces = "text/xml;charset=UTF-8")
        public String defaultViewHandler(String signature, String timestamp, String nonce, @RequestBody String message) {
            String result = "";
            if (SignUtil.checkSignature(signature, timestamp, nonce)) {
                result = coreService.processRequest(message);
            }
            return result;
        }

    做签名认证的时候会调用我的defaultView方法,其他的事件都走defaultViewHandler方法。

    coreService.processRequest(): 是对所有的请求事件进行处理

    CoreService.java主要代码实现如下:

    @Override
        public String processRequest(String msg) {
            String respMessage = null;
            try {
                // 默认返回的文本消息内容
                String respContent = "";
    
                // xml请求解析
                Map<String, String> requestMap = MessageUtil.parseXml(msg);
    
                // 发送方帐号(open_id)
                String fromUserName = requestMap.get("FromUserName");
                // 公众帐号
                String toUserName = requestMap.get("ToUserName");
                // 消息类型
                String msgType = requestMap.get("MsgType");
                String eventType = requestMap.get("Event");
    
                // 存在事件类型且类型有效 或者 消息类型可以处理,才需要进行身份处理,防止没有意义的事件引起发送大量绑定消息
                if ((!StringUtils.isEmpty(eventType) && !eventArrays.contains(eventType)) || !msgArrays.contains(msgType)) {
                    return "";
                }
    
                respMessage = handleWxMessage(requestMap);
            } catch (Exception e) {
                LOGGER.error("error", e);
                e.printStackTrace();
            }
            return respMessage;
        }
    
        @Override
        public String handleWxMessage(Map<String, String> requestMap) {
            // 发送方帐号(open_id)
            String fromUserName = requestMap.get("FromUserName");
            // 公众帐号
            String toUserName = requestMap.get("ToUserName");
            // 消息类型
            String msgType = requestMap.get("MsgType");
            // 回复文本消息
            String respContent = "";
            BaseMessage textMessage = new TextMessage();
            textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);
            switch (msgType) {
                case MessageUtil.REQ_MESSAGE_TYPE_TEXT:
                    // 文本类型消息,暂时设置成用户发什么就回复什么
                    String content = requestMap.get("Content");
                    respContent = "";
                    break;
                case MessageUtil.REQ_MESSAGE_TYPE_VOICE:
                    // 使用语音识别功能需要开启微信公众号相关权限
                    // 语音识别结果
                    String recognizeText = requestMap.get("Recognition");
                    respContent = "";
                    break;
                case MessageUtil.REQ_MESSAGE_TYPE_EVENT:
                    // 事件类型
                    String eventType = requestMap.get("Event");
                    // 事件KEY值,qrscene_为前缀,后面为二维码的参数值
                    String eventKey = requestMap.get("EventKey");
                    // 自定义事件
                    switch (eventType) {
                        // 用户未关注时,进行关注后的事件推送
                        case MessageUtil.EVENT_TYPE_SUBSCRIBE:
                            if (isUserBuyLastActivity(fromUserName)) {
                                textMessage = getAddClassTextMessage(fromUserName);
                            } else {
                                textMessage = getDefaultTextMessage(fromUserName);
                            }
                            Integer eventKeyValue = 1;// 带参数的情景值
                            if (!StringUtils.isEmpty(eventKey) && eventKey.contains("qrscene_")) {
                                eventKey = eventKey.replace("qrscene_", "");
                                // 渠道ID
                                eventKeyValue = Integer.parseInt(eventKey);
                            }
                            subscribeAction(fromUserName, eventKeyValue);
                            break;
                        // 取消关注
                        case MessageUtil.EVENT_TYPE_UNSUBSCRIBE:
                            unSubscribeAction(fromUserName);
                            break;
                        // 用户已关注时的事件推送
                        case MessageUtil.EVENT_TYPE_SCAN:
                            textMessage = getDefaultTextMessage(fromUserName);
                            break;
                        default:
                            respContent = "";
                            break;
                    }
                    break;
                default:
                    respContent = "";
                    break;
            }
    
            if (textMessage instanceof TextMessage) {
                // 文本内容为空且是文本消息返回空字符串,防止微信发送异常消息
                String content = ((TextMessage) textMessage).getContent();
                if (StringUtils.isEmpty(respContent) && StringUtils.isEmpty(content)) {
                    return "";
                }
                if (org.apache.commons.lang.StringUtils.isBlank(content)) {
                    ((TextMessage) textMessage).setContent(respContent);
                }
            }
            textMessage.setToUserName(fromUserName);
            textMessage.setFromUserName(toUserName);
            textMessage.setCreateTime(new Date().getTime());
            String xmlString = MessageUtil.messageToXml(textMessage);
            return xmlString;
        }

    上面只是展示了部分核心代码,具体代码可以去我的GitHub下载,地址:https://github.com/liuyanmin/wxDemo

    下面是微信开发相关的链接:

    申请个人测试账号:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

    微信被动回复消息开发文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140543

    微信错误码文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140543


    展开全文
  • 微信测试号的URL和Token原理

    千次阅读 2015-11-01 14:59:42
    在我们提交URL和Token信息后,微信服务器将发送GET请求到填写的URL上,GET请求携带四个参数: Signature(微信加密签名)、timestamp(时间戳)、nonce(随机数)、echostr(随机字符串)。 Signature 结合了开发者...

    在我们提交URL和Token信息后,微信服务器将发送GET请求到填写的URL上,GET请求携带四个参数: Signature(微信加密签名)、timestamp(时间戳)、nonce(随机数)、echostr(随机字符串)。

    Signature 结合了开发者填写的Token参数和请求中的timestamp参数、nonce参数。

    $_GET是php的全局数组变量,存储了GET请求携带的变量名称和值,通过该变量我们就能获取微信服务器中携带的上述四个参数的值了。


        /**
         * 验证URL来源是否正确
         * @return boolean
         */
        private function checkSignature()
        {   
          //获取参数值
            $signature = $_GET['signature'];
            $timestamp = $_GET['timestamp'];
            $nonce = $_GET['nonce'];
    
            $params = array($this->_token, $timestamp, $nonce);    //按照字典顺序排序将三个参数排序
            sort($params);
            
            $sig = sha1(implode($params));            //将数组拼接成字符串在shal加密
                              
            return $sig == $signature;               //判断获取的签名是否和本地计算的相同
        }
    
        /**
         *检查签名     
         *如果正确,将微信服务器中的echostr字段原样返回
         */
         private function sourceCheck()
        {
            if ($this->checkSignature()) {
                $echostr = $_GET['echostr'];
                echo $echostr;
            }else{
                throw new Exception('Wrong Signature');
            }    
            exit(0);
        }
    }

    展开全文
  • 微信开发——测试账号的配置

    万次阅读 2017-03-31 16:22:20
    进入公众平台测试账号开发者工具页面中下面有张图片,介绍配置: 下面来看看Token验证。注意:本次微信开发专题,全部使用spring boot进行开发。 CODE:servletimport java.io.IOException; import java.io....

    配置位置
    进入公众号:https://mp.weixin.qq.com
    进入开发者工具:公众号页面左下角
    进入公众平台测试账号:开发者工具页面中

    下面有张图片,介绍配置:
    这里写图片描述

    下面来看看Token验证。注意:本次微信开发专栏,全部使用spring boot进行开发。
    CODE:servlet

    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.shw.vote.web.service.AuthService;
    
    public class ServerPortal extends HttpServlet {
        private static final long serialVersionUID = 1L;
        //我们的Token
        private static final String token = "tokensh";
    
        /**
         * @see HttpServlet#HttpServlet()
         */
        public ServerPortal() {
            super();
        }
    
        /**
         * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
         */
        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");
            System.out.println("signature:" + signature);
            System.out.println("timestamp:" + timestamp);
            System.out.println("nonce:" + nonce);
            System.out.println("echostr:" + echostr);
            PrintWriter pw = response.getWriter();
            pw.append(echostr);
            pw.flush();
        }
    
        /**
         * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    
    }

    spring boot需要注入servlet:

    @Bean  
    public ServletRegistrationBean testServletRegistration() {  
        ServletRegistrationBean registration = new ServletRegistrationBean(new ServerPortal());  
        //我们的URL
        registration.addUrlMappings("/portal");  
        return registration;  
    }

    上面我们设定Token为tokensh:
    private static final String token = “tokensh”;

    由于Token验证接口URL必须是域名,我这边使用了ngrok来处理域名的问题:
    参考http://www.qydev.com/
    注意,Token验证的地址一定要用80端口。
    假设我们的域名为https://sunhush.tunnel.qydev.com
    URL处我们填:https://sunhush.tunnel.qydev.com/portal

    Token , URL都设定了,提交,提示提交成功,则配置完毕。

    参考资料:http://www.cnblogs.com/janken/p/5593737.html

    展开全文
  • 步骤1:查看微信公众号开发者文档 (http://mp.weixin.qq.com/wiki/8/f9a0b8382e0b77d87b3bcc1ce6fbc104.html)我的理解如下:当开发者测试号中配置点击提交后。微信服务器会发送一条GET请求到你所填写的服务器的...
  • 微信接口测试帐号申请

    万次阅读 2018-03-08 14:28:16
    接口测试帐号申请 1.测试号申请地址:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login,申请页面如下图: 2.点击登录按钮出现如下二维码界面,使用手机微信进行扫描登录。 3.扫描后手机微信...
  • 微信开发者账号验证

    2016-12-07 17:23:43
    微信公众号平台开发者文档 https://mp.weixin.qq.com/wiki/home/index.html(在这里可以进行微信测试号的申请) 申请时需要有一个自己的域名,如果没有的话就可以用微信ngrok, 下载地址 http://ngrok.2bdata.com/...
  • 假设我用vue开发了一个web应用,需要在手机微信里访问并调试, 可以按照本文介绍的步骤,使用微信开发者工具来调试. 假设我的web应用的访问入口是如下公众号菜单的"预约"按钮: 那么为了能够在微信开发者工具里调试,...
  • 使用微信开发者工具, 选择微信网页授权, 微信团队为广大的开发者提供了一个测试账号。该帐号无需公众账号,快速申请接口测试,直接体验和测试公众平台所有高级接口。这么好用的功能,只需要要你有一个手机,手机上...
  • 2、打开微信开发者工具客户端 --- 版本管理 --- 初始化Git仓库 -- 默认初始化就可以 3、点击 --- 设置 -- 网络和认证 -- 填入码云的账号和密码 4、点击 --- 设置 -- 远程 -- 添加 5、点击...
  • 微信公众号内嵌H5,配置测试账号获取code登录微信公众平台配置测试账号微信开发者工具中,获取code 登录微信公众平台 找到开发者工具 点击公众平台测试账号 配置测试账号 填写信息 注意点: URL 对应的...
  • 微信开发者工具  做微信公众号的过程中,自然避免不了登录账号然后进行调试,但是在chrome上我们没有办法登录,这是一个令人头疼的问题,比如这个公众号网页,只会提示出错,因为开发者限制了公众号网页的登录...
  • 记录一下微信公众号开发的时候的一些过程。。。 首先注册一个微信公众测试账号,虽然个人注册的订阅号也有此功能,但是却没有用户管理功能,所以这里就先拿测试账号开发微信公众号。...微信开发者文档
  • 作为一个用c#开发微信公众号的初学者,在测试接口配置界面就被难住了,总是配置失败。我用的ngrok部署的,在ngrok.exe中能看到微信中的url是访问ok的,但配置仍失败。根据张思凯《微信公众平台开发与案例分析》中...
  • 微信测试官方网址:http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login 进入网址后,会分配一个appID和appsecret账号: 需要一个外网映射工具,可在此链接中下载https://natapp.cn/login。 然后将...
  • 微信公众号之开发者工具

    万次阅读 2020-04-06 16:49:32
    一、前言 这次的项目主要是关于微信...在开发过程中会设计到微信接口的调测,这里使用的微信公众号中提供的开发者工具中的在线接口调测和公众平台测试账号。注:微信支付功能不能使用公众平台测试账号测试,必须部署...
  • 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...
  • 这里写自定义目录标题微信公众号微信公众号测试账号申请测试账号配置微信公众号测试账号接口配置信息JS接口安全域名,模板消息接口网页授权获取用户基本信息微信小程序微信刷脸支付 微信公众号 微信公众号测试账号 在...
  • PHP微信开发是指将微信与线上服务器建立链接,服务器与用户会通过微信联系起来,用户发送给微信的信息会通过微信发送到服务器上,服务器接收到信息并处理之后再通过微信返回给用户。 用户→微信→服务器→微信→...
  • 关注微信公众号获取tokenUrl的地址为 https://api.weixin.qq.com/cgi-bin/token 关注微信公众号获取ticket的地址为 https://api.weixin.qq.com/cgi-bin/ticket/getticket 不能获取手机号 方法太麻烦 /-+/-+/-+/-+/-+...
1 2 3 4 5 ... 20
收藏数 8,697
精华内容 3,478
关键字:

微信开发者测试账号url