精华内容
下载资源
问答
  • 主要介绍了微信公众号token验证失败解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 微信公众号token验证+自动回复经纬度PHP代码,用于学习微信公众号的开发
  • 下面小编就为大家带来一篇Thinkphp5 微信公众号token验证不成功的原因及解决方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 微信公众号token验证

    2021-03-04 10:04:20
    tp5进行微信公众号token验证微信公众号token验证 微信公众号token验证 想到后面会用到,在这里做一个笔记。 //验证微信tonken $sign = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET[...

    tp5进行微信公众号token验证

    微信公众号token验证

    想到后面会用到,在这里做一个笔记。

    //验证微信tonken
             $sign = $_GET["signature"];
             $timestamp = $_GET["timestamp"];
             $nonce = $_GET["nonce"];
             $token = '你的token ';
    
             $tmpArr = array($token, $timestamp, $nonce);
    
             sort($tmpArr, SORT_STRING);
             $tmpStr = implode($tmpArr );
             $signature = sha1( $tmpStr );
    
             // 如果生成的签名和微信传过来的签名相同,
             // 就把微信传过来的echostr参数传给微信服务器, 标明认证通过
    
             if( $signature == $sign ){
               echo $_GET['echostr'];
             }else{
               return false;
             }
    
    展开全文
  • java实现微信公众号token验证

    千次阅读 2019-06-13 17:45:10
    微信公众号token验证 查看了一些微信公众号平台的开发文档,得知签名验证需要以下参数 签名验证规则是: 1.开发者服务端获取得到signature、timestamp、nonce、echostr参数。 2.然后将token、timestamp、nonce三个...

    微信公众号token验证

    查看了一些微信公众号平台的开发文档,得知签名验证需要以下参数
    在这里插入图片描述
    签名验证规则是:
    1.开发者服务端获取得到signature、timestamp、nonce、echostr参数。
    2.然后将token、timestamp、nonce三个参数进行字典序排序 。token字段是服务端填写的,需同公众平台填写的token保持一致。
    3.将token、timestamp、nonce这三个参数拼接成一个字符串并按照sha1的算法进行加密,得到一个加密字符串。
    4.并将该字符串与获得的signature参数进行比较,如若相同,将echostr参数内容原样返回,代表接入生效,否则失败。

    开发步骤

    进入微信公众平台,填写接口配置信息

    填写请求路径:
    http://shoupolan.free.idcfengye.com/weixin/wx/
    token:
    youjp
    在这里插入图片描述
    域名映射可查看上一篇博客:
    Ngork实现内网穿透:
    https://blog.csdn.net/qq_36654629/article/details/91864899

    新建一个weixin项目,添加依赖

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.jp</groupId>
      <artifactId>weixin_day1</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      
       <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.9.RELEASE</version>
        </parent>
     
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                  <groupId>junit</groupId>
                  <artifactId>junit</artifactId>
                  <version>3.8.1</version>
                  <scope>test</scope>
            </dependency>
        </dependencies>
     
        <properties>
            <java.version>1.8</java.version>
        </properties>
     
    </project>
    

    yml配置

    server:
       port:   8080
       context-path:  /weixin
             
          
    spring:
       application:
          name:   weixin   
    

    签名校检工具类

    package com.weixin.util;
    
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    
    /**
     * 签名认证工具类
     * @ClassName:  WeixinCheckoutUtil   
     * @Description:TODO
     * @author: jp
     * @date:   2019年6月13日 下午4:56:12   
     *     
     * @Copyright: 2019 www.tydic.com Inc. All rights reserved. 
     *
     */
    public class WeixinCheckoutUtil {
    
    	   // 与接口配置信息中的Token要一致
        private static String token = "youjp";
     
        /**
         * 验证签名
         * 
         * @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);
            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;
        }
        public static void sort(String a[]) {
            for (int i = 0; i < a.length - 1; i++) {
                for (int j = i + 1; j < a.length; j++) {
                    if (a[j].compareTo(a[i]) < 0) {
                        String temp = a[i];
                        a[i] = a[j];
                        a[j] = temp;
                    }
                }
            }
        }
    
    }
    
    

    服务控制器

    package com.weixin.controller;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.weixin.util.WeixinCheckoutUtil;
    
    /**
     * 微信token获取
     * @ClassName:  TestController   
     * @Description:TODO
     * @author: jp
     * @date:   2019年6月13日 下午4:01:32   
     *     
     * @Copyright: 2019 www.tydic.com Inc. All rights reserved. 
     *
     */
    
    @RestController
    public class WeixinCheckController {
    	
    	/**
    	 * 微信公众号签名认证接口
    	 * @Title: test   
    	 * @Description: TODO
    	 * @param: @param signature
    	 * @param: @param timestamp
    	 * @param: @param nonce
    	 * @param: @param echostr
    	 * @param: @return      
    	 * @return: String      
    	 * @throws	
    	 */
    	@RequestMapping("/wx")
    	public String test(String signature,String timestamp,String nonce,String echostr) {
    	
            // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败
    		 if (signature != null && WeixinCheckoutUtil.checkSignature(signature, timestamp, nonce)) {
               return echostr;
             }
    
    		return null;
    	}
    
    }
    
    

    启动类

    package com.weixin;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class WeixinApplication_APP {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    
    	SpringApplication.run(WeixinApplication_APP.class, args);
    	}
    
    }
    
    

    启动服务,并记得打开Ngork客户端将域名映射开启。我的域名映射端口服务为8080,项目端口也是8080。
    在这里插入图片描述
    点击提交
    在这里插入图片描述

    配置成功如下:

    在这里插入图片描述

    有兴趣的老爷,可以关注我的公众号【一起收破烂】,回复【006】可获取2021最新java面试资料以及简历模型120套哦~
    在这里插入图片描述

    展开全文
  • Java写的微信公众号token验证+实现你问我答功能小项目
  • 测试微信公众号Token(令牌)jsp版,官网只有php,需要dom4j.jar支持
  • 文章目录[隐藏] 前言错误代码示例正确代码示例总结 前言 ...但是微信开发第一步就给我难住了,微信公众号Token 一直配置失败, 于是上网搜索了下,找到一段可用的代码,结果比对后发现:我的代码中变量的大小写...
    文章目录[隐藏]

    前言

    今天生病在家,由于我的微信公众号被投诉了,因此影视站接口被迫关闭,于是就想着给大家分享 APP,于是就用了下微信的自动回复,
    想着能否把这个自动回复对接到 MIPCMS 上,于是就开干。但是微信开发第一步就给我难住了,微信公众号Token 一直配置失败,
    于是上网搜索了下,找到一段可用的代码,结果比对后发现:我的代码中变量的大小写问题,在 echo 的时候找不到变量,因此报错
    

    错误代码示例

    <?php
    // 接收参数
    
    // 加密签名
    $signature = $_GET['signature'];
    
    // 时间戳
    $timestamp = $_GET['timestamp'];
    
    // 随机数
    $nonce = $_GET['nonce'];
    
    // 随机字符串
    $echostr = $_GET['echostr']; // 此处为小写,调用时是大写,主要原因在此。
    
    // TOKEN
    define('TOKEN', 'weixin');
    
    // 字典序排序
    $tempArr = array(TOKEN, $timestamp, $nonce);
    sort($tempArr, SORT_STRING);
    
    // 拼接字符串,sha1 加密
    $tempStr = join($tempArr);
    $tempStr = sha1($tempStr);
    
    if($tempStr == $signature) {
      echo $echoStr; // 此处 echo 大小写有误
    } else {
      echo 'error';
      exit;
    }
    

    正确代码示例

    <?php
    // 接收参数
    // TOKEN
    define('TOKEN', 'test123456');
    
    // 加密签名
    $signature = $_GET["signature"];
    
    // 时间戳
    $timestamp = $_GET['timestamp'];
    
    // 随机数
    $nonce = $_GET['nonce'];
    
    // 随机字符串
    $echoStr = $_GET['echostr'];
    
    // 字典序排序
    $tempArr = array(TOKEN, $timestamp, $nonce);
    sort($tempArr, SORT_STRING);
    
    // 拼接字符串,sha1 加密
    $tempStr = join($tempArr);
    $tempStr = sha1($tempStr);
    // $tmpStr = implode( $tempArr );
    // $tmpStr = sha1( $tmpStr );
    
    if($tempStr == $signature) {
      echo $echoStr;
    } else {
      echo 'error';
      exit;
    }
    

    总结

    开发需要仔细呀,因为一个变量名搞这么,时间白白浪费了。
    
    展开全文
  • 微信公众号token验证成功,但是自动回复没反应 / 该公众号服务故障 微信公众号token验证成功,但是自动回复没反应 / 该公众号服务故障 微信公众号token验证成功,但是自动回复没反应 / 该公众号服务故障 先上代码...

    微信公众号token验证成功,但是自动回复没反应 / 该公众号服务故障
    微信公众号token验证成功,但是自动回复没反应 / 该公众号服务故障
    微信公众号token验证成功,但是自动回复没反应 / 该公众号服务故障

    先上代码,输入?自动回复时间

    <?php
    header('Content-type:text');
    define("TOKEN", "weixin");
    $wechatObj = new wechatCallbackapiTest();
    if (isset($_GET['echostr'])) {
        $wechatObj->valid();
    }else{
        $wechatObj->responseMsg();
    }
    
    class wechatCallbackapiTest
    {
        public function valid()
        {
            $echoStr = $_GET["echostr"];
            if($this->checkSignature()){
                echo $echoStr;
                exit;
            }
        }
    
        private function checkSignature()
        {
            $signature = $_GET["signature"];
            $timestamp = $_GET["timestamp"];
            $nonce = $_GET["nonce"];
    
            $token = TOKEN;
            $tmpArr = array($token, $timestamp, $nonce);
            sort($tmpArr);
            $tmpStr = implode( $tmpArr );
            $tmpStr = sha1( $tmpStr );
    
            if( $tmpStr == $signature ){
                return true;
            }else{
                return false;
            }
        }
    
        public function responseMsg()
        {
            $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
    
            if (!empty($postStr)){
                $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($keyword == "?" || $keyword == "?")
                {
                    $msgType = "text";
                    $content = date("Y-m-d H:i:s",time());
                    $result = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $content);
                    echo $result;
                }
            }else{
                echo "";
                exit;
            }
        }
    }
    ?>
    原因: $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; 获取不到值,为空的
    • 1.用file_get_contents('php://input') 替换 $GLOBALS["HTTP_RAW_POST_DATA"];来获取数据测试,如果正常,说明确实是因为上面没获取到值导致的错误;如果还是获取不到,则可能是数据传输错误

    • 2.如果上面的file_get_contents('php://input') 能正常,查看php.ini配置文件并配置always_populate_raw_post_data = On 。 【注意】这个处理方式是在php版本较低的时候,php-ini中才有该配置,7以上的版本已经废除

    如果出现的是该公众号服务故障 , 可以用echo ""; 来调试,因为 echo ""; 服务器没东西返回没反应,而不是出现该公众号服务故障

    展开全文
  • 微信公众号 Token验证失效 问题

    千次阅读 2020-10-17 16:58:43
    最近在学习微信公众号的时候遇到了一个问题:Token验证失效 话不多说,看代码:handle.py import hashlib import web class Handle(object): def GET(self): try: data = web.input() if len(data) == 0: ...
  • 1:确保填写的URL可以成功访问 ... * @description 微信公众号服务器配置校验token * @author: liyinlong * @date 2019-05-09 9:38 * @return */ @ApiOperation("微信公众号服务器配置校验token") ...
  • 相信大家在做微信公众号开发的时候,都遇到过token配置失败的问题。那么我就帮助大家来解决这个问题。废话不说,直接上代码 if(strtolower($_SERVER['REQUEST_METHOD']) == 'get') { file_put_contents('weixin_...
  •  这几天准备弄一个微信公众号,在进行服务器配置的时候出现总是出现token验证失败的报错。 实际上,这个问题很好解决。既然微信平台没有给我们很明确的报错提示,那么我们就可以通过跟踪获取到的请求参数进行分析...
  • 因公司需要,开通了微信公众号。 在开发对接中摸索了2天,写下此记,备忘。 服务器地址(URL):https://www.findtechgroup.net/Handler1.ashx 因http80端口已被其他业务占用,只能用https(443) 协议,需路由映射...
  • // 获取微信公众号的Access Token $url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret; 请求公众号的token值访问接口传入appid(小程序...
  • 微信公众号token接口springboot

    千次阅读 2018-11-29 11:50:53
    需要微信公众号测试号、natapp(这个是可以让外网访问你本地的东西,免费的)、springboot. 首先是测试号要配置服务器信息: 在没配置好之前提交是失败的!!!为什么会失败,是因为提交相当于发起一次请求,你没...
  • thinkphp5微信公众号token认证;

    千次阅读 2018-04-18 15:45:20
    首先说明本人开发微信公众号是用的thinkphp5框架,如果不用框架可以说开发起来很麻烦,本人开始在Ubuntu环境下开发,后来遇到问题实在无法解决导致换到windows 开发环境下开发,免去了很多麻烦用的notepad++作为编辑...
  • 使用ngrok做微信公众号token验证

    千次阅读 2018-06-28 20:10:34
    公司要做微信开发,需要在本地配置开发环境,使用的是ngrok,以前用的花生壳...2. 配置微信公众号服务器(如下图,token随便写) 3.参照微信开发文档,进行验证   完整代码: &lt;?php /**  * wechat ...
  • ![图片说明]...申请公众号要填写网页的token值,这个token是什么意思,我怎么知道自己url的token值,是要自己通过程序获取吗?初次刚学,不是很懂,有明白的吗?
  • 我在阿里云租了一个云服务器,然后想把这个作为我的微信公众号的后台,启用微信公众号开发者需要正确的响应微信服务器的Token验证,为此把这个验证的Python代码贴出来,只要在服务器上运行这段代码,注意把Token的值...
  • 获取微信公众号Token

    2020-09-26 01:24:19
    define("TOKEN", "weixin"); $wechatObj = new WXApiVerify(); /*开始验证程序*/ $wechatObj->valid(); <?php /** * Class WXApiVerify */ class WXApiVerify { private function checkSignature() {...
  • 在设置微信后台的基本配置环节,我们需要定义令牌(Token)来和服务器进行验证,在验证过程中,我们要保持服务器中运行了带token的werobot程序。 最简单的程序如下(该程序的功能是在读者订阅的时候自动回复“欢迎...
  • 最近要启动微信项目,上个月就开始了解微信的开发,这个月要启动项目,配置微信公众号信息一直失败。为此,我甚至手工写了微信提交过来的记录,如: ×tamp=1510210523&nonce=2414550015&signature=30b9eeb6b...
  • 微信公众号Token验证 signature验证

    千次阅读 2019-05-22 10:02:55
    首先去公众号的后台配置 URL,然后在 代码 的页面验证Token 代码为 $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $echostr = $_GET["echostr"]; $token = ...
  • this.logger.info("\n接收到来自微信服务器的认证消息:[{}, {}, {}, {}]", signature, timestamp, nonce, echostr); if (StringUtils.isAnyBlank(signature, timestamp, nonce, echostr)) { throw new ...
  • 微信公众号验证token经常失败,是一件很让人抓狂的事。找了很久,终于找相关一个可用的相关代码,希望对你有用。
  • 微信公众号token验证失败解决方法——php

    万次阅读 热门讨论 2018-03-30 10:51:31
    后来看了下文档,如下要返回参数给微信,返回成功则成为开发者;所以我准备的一下代码respond.php:&lt;?php/** * wechat php test */ //define your tokendefine("TOKEN", "hwqhwq");$...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 29,765
精华内容 11,906
关键字:

微信公众号token