微信开发者验证token_微信 开发者模式 token验证 - CSDN
  • 微信开发者文档真的有点丈二和尚摸不着头脑,有点让人迷糊。 做微信公众号开发,先注册微信公众号,最好有一个服务器和一个备过案的域名,不然很多jsapi接口无法调试。 一般情况下,个人注册订阅号,企业注册...

    1、开启公众号开发者模式

    1.1 申请公众号

    微信的开发者文档真的有点丈二和尚摸不着头脑,有点让人迷糊。

    做微信公众号开发,先注册微信公众号,最好有一个服务器和一个备过案的域名,不然很多jsapi接口无法调试。

    一般情况下,个人注册订阅号,企业注册企业号。

    申请公众号

    2.2 开发者配置

    公众平台官网登录之后,找到“基本配置”菜单栏

    开发者配置

    这里的服务器配置,是微信发请求到你所填写的服务器地址去验证你是这个公众号的开发者的。

    url填写:http://外网IP。外网IP。嗯嗯http的端口号固定使用80,不可填写其他。

    Token:自主设置,这个token与公众平台wiki中常提的access_token不是一回事。这个token只用于验证开发者服务器。
    服务器配置

    消息加解密密钥随机生成即可

    消息加密模式,开发环境选择明文即可

    如果服务器端没有,提交肯定提示失败,或者出现错误。

    我是自己有个域名,然后用Nodejs + Express写了一个接口:

    api/auth.js

    // 第一步认证为开发者
    const crypto = require('crypto');
    const config = require('../config');
    
    
    // 微信认证开发者  微信服务器发送请求到你的服务器,做校验,参数都是微信传过来的。
    module.exports = auth = (req, res) => {
    
      //1.获取微信服务器Get请求的参数 signature、timestamp、nonce、echostr
      var signature = req.query.signature,//微信加密签名
        timestamp = req.query.timestamp,//时间戳
        nonce = req.query.nonce,//随机数
        echostr = req.query.echostr;//随机字符串
    
      //2.将token、timestamp、nonce三个参数进行字典序排序
      // 这里的 config.token 就是上面你自定义的 Token (如:beip***6666)
      var array = [config.token, timestamp, nonce];
      array.sort();
    
      //3.将三个参数字符串拼接成一个字符串进行sha1加密
      var tempStr = array.join('');
      const hashCode = crypto.createHash('sha1'); //创建加密类型 
      var resultCode = hashCode.update(tempStr, 'utf8').digest('hex'); //对传入的字符串进行加密
    
      //4.开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
      if (resultCode === signature) {
        res.send(echostr);
      } else {
        res.send('mismatch');
      }
    };
    

    这块的逻辑流程图如下:

    使用Express搭建你的restfull api服务

    app.js

    const express = require('express');
    const api = require('./api');
    const path = require('path');
    const app = express();
    const port = 3000;
    
    // 这里就是你的认证路由
    app.get('/', (req, res) => {
      api.auth(req, res);
    });
    
    // listen
    app.listen(port, () => {
      console.log(`Server started on localhost:%d`, port);
    });
    

    一般你要把你的Node项目升级到你的服务器;

    其实就是当做服务器和你的电脑一样就行了,一样要先装一个nodejs(如果不会,可以参考之前的教程,Node项目线上部署), 然后一样启动就行了,比如:

    node app.js
    

    这样就启动你项目,http://你的外网ip:3000;

    不过微信规定端口必须是80,如果上一步你的port 可以设置80最好,如果不可以的,只能考虑用 Nginx 走下反向代理。

    假设以上问题都解决了。

    访问 http://你的外网ip,如果浏览器打印了mismatch,说明这个路由走通了

    这时候你再回到服务器设置这里,点击按钮,就会提示成功。

    那么恭喜你,开始了万里长征的第一步。

    2、AccessToken

    切记,这是继续开发下去的一个重要步骤,缺少这个访问令牌,一切都将不能进行。

    access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。

    公众平台的API调用所需的access_token的使用及生成方式说明:

    1、建议公众号开发者使用中控服务器统一获取和刷新access_token,其他业务逻辑服务器所使用的access_token均来自于该中控服务器,不应该各自去刷新,否则容易造成冲突,导致access_token覆盖而影响业务;

    2、目前access_token的有效期通过返回的expire_in来传达,目前是7200秒之内的值。中控服务器需要根据这个有效时间提前去刷新新access_token。在刷新过程中,中控服务器可对外继续输出的老access_token,此时公众平台后台会保证在5分钟内,新老access_token都可用,这保证了第三方业务的平滑过渡

    3、access_token的有效时间可能会在未来有调整,所以中控服务器不仅需要内部定时主动刷新,还需要提供被动刷新access_token的接口,这样便于业务服务器在API调用获知access_token已超时的情况下,可以触发access_token的刷新流程。

    公众号和小程序均可以使用AppIDAppSecret调用本接口来获取access_tokenAppIDAppSecret可在“微信公众平台-开发-基本配置”页中获得(需要已经成为开发者,且帐号没有异常状态)。**调用接口时,请登录“微信公众平台-开发-基本配置”提前将服务器IP地址添加到IP白名单中,点击查看设置方法,否则将无法调用成功。**小程序无需配置IP白名单。

    接口调用请求说明

    https请求方式: GET
    https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
    

    参数说明

    参数 是否必须 说明
    grant_type 获取access_token填写client_credential
    appid 第三方用户唯一凭证
    secret 第三方用户唯一凭证密钥,即appsecret

    返回说明

    正常情况下,微信会返回下述JSON数据包给公众号:

    {"access_token":"ACCESS_TOKEN","expires_in":7200}
    

    参数说明

    参数 说明
    access_token 获取到的凭证
    expires_in 凭证有效时间,单位:秒

    错误时微信会返回错误码等信息,JSON数据包示例如下(该示例为AppID无效错误):

    {"errcode":40013,"errmsg":"invalid appid"}
    

    返回码说明

    返回码 说明
    -1 系统繁忙,此时请开发者稍候再试
    0 请求成功
    40001 AppSecret错误或者AppSecret不属于这个公众号,请开发者确认AppSecret的正确性
    40002 请确保grant_type字段值为client_credential
    40164 调用接口的IP地址不在白名单中,请在接口IP白名单中进行设置。(小程序及小游戏调用不要求IP地址在白名单内。)

    可以在线调试:

    access_token是很多微信接口的必传参数,所以这一步很重要。

    3、JS接口安全域名

    这个设置很重要,微信只允许在JS接口安全域名下调试所有开发的JS接口

    如果是正式公众号的开发,这个域名只能是备案过的域名;

    如果是测试公众号,这里就随意,可以是本地server;

    这里需要注意的是,填写格式,如wx.qq.com

    展开全文
  • 微信公众号开启开发者模式,遇到个奇怪的问题,token一直提示验证失败,我仔细看了一下代码,没问题。上传了别人的demo在服务器上测试,也没问题,唯独自己的代码 token一直提示验证失败,最后终于找到了害人不浅的...

    微信公众号开启开发者模式,遇到个奇怪的问题,token一直提示验证失败,我仔细看了一下代码,没问题。上传了别人的demo在服务器上测试,也没问题,唯独自己的代码 token一直提示验证失败,最后终于找到了害人不浅的BOM头,因为BOM头会连同$echostr一起打印出来,所以微信那边就会老是提示token验证失败

    解决办法 1.:清除文件BOM头;
    解决办法 2.:在输出$echostr之前添加header(‘content-type:text’);

    下面是BOM头介绍的飞机票:

    展开全文
  • PHP版接入微信开发者模式,进行Token验证 一、登录微信公众号的后台,鼠标滚动到最下方,然后点击开发->基本配置,然后点击绿色的启用按钮,内容不着急填写 二、下载微信公众平台提供的PHP版本介入实例...

    PHP版接入微信开发者模式,进行Token验证


    一、登录微信公众号的后台,鼠标滚动到最下方,然后点击开发->基本配置,然后点击绿色的启用按钮,内容不着急填写

    在这里插入图片描述


    二、下载微信公众平台提供的PHP版本介入实例文件:

    这是微信公众平台提供的下载链接,请点击
    懒得下载的人可以将下面的代码拷贝下来,放入PHP文件里,命名为configToken.php

    <?php
    /**
      * wechat php test
      */
    
    //define your token
    define("TOKEN", "weixin");//此处的TOKEN就是接下来需要填在微信的配置里面的token,需要保持严格一致
    $wechatObj = new wechatCallbackapiTest();
    $wechatObj->valid();
    
    class wechatCallbackapiTest
    {
    	public function valid()
        {
            $echoStr = $_GET["echostr"];
            
            //valid signature , option
            if($this->checkSignature()){
            	echo $echoStr;
            	exit;
            }
        }
    
        public function responseMsg()
        {
    		//get post data, May be due to the different environments
    		$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
    
          	//extract post data
    		if (!empty($postStr)){
                    /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,
                       the best way is to check the validity of xml by yourself */
                    libxml_disable_entity_loader(true);
                  	$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
                    $fromUsername = $postObj->FromUserName;
                    $toUsername = $postObj->ToUserName;
                    $keyword = trim($postObj->Content);
                    $time = time();
                    $textTpl = "<xml>
    							<ToUserName><![CDATA[%s]]></ToUserName>
    							<FromUserName><![CDATA[%s]]></FromUserName>
    							<CreateTime>%s</CreateTime>
    							<MsgType><![CDATA[%s]]></MsgType>
    							<Content><![CDATA[%s]]></Content>
    							<FuncFlag>0</FuncFlag>
    							</xml>";             
    				if(!empty( $keyword ))
                    {
                  		$msgType = "text";
                    	$contentStr = "Welcome to wechat world!";
                    	$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                    	echo $resultStr;
                    }else{
                    	echo "Input something...";
                    }
    
            }else {
            	echo "";
            	exit;
            }
        }
    		
    	private function checkSignature()
    	{
            // you must define TOKEN by yourself
            if (!defined("TOKEN")) {
                throw new Exception('TOKEN is not defined!');
            }
            
            $signature = $_GET["signature"];
            $timestamp = $_GET["timestamp"];
            $nonce = $_GET["nonce"];
            		
    		$token = TOKEN;
    		$tmpArr = array($token, $timestamp, $nonce);
            // use SORT_STRING rule
    		sort($tmpArr, SORT_STRING);
    		$tmpStr = implode( $tmpArr );
    		$tmpStr = sha1( $tmpStr );
    		
    		if( $tmpStr == $signature ){
    			return true;
    		}else{
    			return false;
    		}
    	}
    }
    
    ?>
    

    三、建一个PHP项目,我起的名称叫做WeiXinWeb,将刚才下载的wx_sample文件解压缩,然后重命名为configToken.php(就是我上面的代码)放到项目的根目录中(我的项目中还有其他几个文件都是从git上克隆下来的,你们的项目中没有也没关系,只需要有configToken.php就行了)

    在这里插入图片描述


    四、将这个项目放到公网能访问的服务器上,开发人员都懂该怎么操作吧,没有服务器的可以自己去各个云购买去,此处默认你有公网服务器


    五、回到第一步微信公众平台的开发者的配置下面,点击“修改配置”, 将服务器地址写上你的configToken.php能被访问到的路径,我中间的马赛克是我的服务器域名,你们修改成自己的即可。此处的token就是刚才填在configToken的TOKEN,需要保持严格一致

    在这里插入图片描述

    到此就大功告成了,分分钟就解决问题,庆祝一下~

    展开全文
  • 微信公众号开发者模式验证token验证失败 在开通公众号开发者模式时,里面有服务器配置这块 服务器地址(URL): 令牌(Token): 1.服务器地址要填写你自己买的服务器地址,同时要部署一个http服务,可以接收get...

    微信公众号开发者模式验证token验证失败

    在开通公众号开发者模式时,里面有服务器配置这块

    服务器地址(URL): 
    令牌(Token):
    

    1.服务器地址要填写你自己买的服务器地址,同时要部署一个http服务,可以接收get请求
    例如: http://23.53.98.111/wx
    2.token:要填写一个唯一的,尽量不要太容易重复的字符串

    3.然后提交验证的时候,微信会发送一个请求

    http://23.53.98.111/wx?signature=87d4d9b87eb55656addb9bcef21f08cee74a8a1b&echostr=1402462939287388156&timestamp=1523594456&nonce=3428894034

    4.收到请求后自己做一些验证。然后如果验证通过,就将请求中的echostr参数的值返回
    返回的时候http Header里面的content-type字段要传text

    服务器端可以参考项目
    https://github.com/leesocrates/nettyserver
    拉取wx这个分支的代码
    使用maven命令打包,打包命令:mvn package
    生成可运行jar包: wxServer-1.0.0.jar
    运行jar包: java -jar wxServer-1.0.0.jar

    展开全文
  • 引子微信公众号开启开发者模式时,需要配置“服务器配置”,但在配置这个东西时有很多坑需要注意。网上解决的问题这里就不再赘述,下面说的是我碰到的问题,同时也叙述了“TOKEN验证失败”的根源问题。背景 之前,我...
  • 原因是:利用springboot进行操作,Controller上的注解应该是@RestController,让其返回一个字符串,结果自己写成了@Controller,使用浏览器进行测试的时候发现返回404,才找到了这个错误。 其实在指定的方法上加上@...
  • 1.1 没有严格按照微信官方的要求进行token验证。 解决方案建议:详细多阅读几次官方文档,并达到理解的程度。这里我将文档中的重点位置摘录,以提醒注意: 验证消息的确来自微信服务器 开发者提交信息(如何配置不再...
  • 微信开发者账号验证

    2016-12-07 17:23:43
    微信公众号平台开发者文档 https://mp.weixin.qq.com/wiki/home/index.html(在这里可以进行微信测试号的申请) 申请时需要有一个自己的域名,如果没有的话就可以用微信ngrok, 下载地址 http://ngrok.2bdata.com/...
  • 有时候我们发现所有的配置都设置好了,网上也查了不少的资料,还是不行 ...把您开发者设置的URL页面,用NotPad++打开,转为UTF-8无BOM编码格式。 前面的乱码应该是在文件有BOM的原因。 2. 注...
  • 今天在写微信公众号的时候,发现微信公众号初始接入总是提示token验证失败,于是定位了一下,首先对比一下程序中的token微信公众平台的token是否一致,发现没有问题,完全一致;然后进行了debug,发现校验也是通过...
  • 抓包获得信息[图片说明](https://img-ask.csdn.net/upload/201604/04/1459763144_283154.png) 求解答
  • 资源中心包 ...amp;t=resource/res_list&amp;verify=1&amp;id=open1419319164&amp;token=&amp;lang=zh_CN   微信开发者工具下载地址 https://developers.weixi...
  • 关于微信授权开发 微信公众号开发,在对接微信功能接口时,需要一些注意事项 明确要对接的功能接口 微信接口权限列表说明: https://mp.weixin.qq.com/advanced/advanced?action=table&token=1888019159&...
  • 微信公众号验证Token

    2019-11-28 10:14:51
    1.服务器地址URL这是要配置你的域名加你验证Token的接口路径,记住,是完整路径!。如果是通过了穿透,那么就是127.0.0.1/端口/Controller路径/方法路径! 2.令牌Token问题,在微信公众号基本配置里面可以随意填写,...
  • 微信官方文档是python2.7 # -*- coding: utf-8 -*- # filename: handle.py import hashlib import web class Handle(object): def GET(self): try: data = web.input() if len(data) == 0: return "hello, ...
  • 微信公众平台服务器配置时,需要引入token,但是提交的时候总是提示token验证失败,是因为微信后台并未检测到你代码中有验证token的代码,那么应该按照官方文档对token进行验证,验证后再将结果返回微信公众平台即可...
  • 一、关于微信公众号接入网址 这是从开发者文档上面弄下来的,下图就是接入的地方,在开发者中心-服务器的配置,看一下微信开发者文档是怎么说的 URL:就是你的服务器的URL(要能响应TOKEN验证,还要能在外网访问到...
  • 这个token只用于验证开发者服务器。 根据官方开发文档,服务器需要接收参数并进行验证验证通过后再返回其中一个参数 接收,并验证类 @Controller @RequestMapping({ &quot;weixin/callback&quot; }...
  • 微信token验证

    2018-10-22 12:12:51
    对于刚使刚进行微信开发来说...此篇主要讲的是微信token验证。 在微信申请完后,在主页面-&gt;基本配置-&gt;服务器配置中会有服务器地址,令牌与消息加密秘钥。服务器地址就是你项目所在服务器的ip,加上...
  • 我需要通过公众号的access_token和openid去获取用户信息,由于微信限制请求tokentoken我是缓存起来定时再去请求的,然后在缓存时间内请求,微信返回{"errcode":40001,"errmsg":"invalid credential, access_token ...
1 2 3 4 5 ... 20
收藏数 7,301
精华内容 2,920
关键字:

微信开发者验证token