收藏
回答

微信公众号,服务器配置,token一直验证失败,怎么帮?

如下图:


appID为wxaa0fd8e7b03bd9ec

最近操作时间为20191221 2123

请帮忙解决下,谢谢!

回答关注问题邀请回答
收藏

4 个回答

  • 嘿
    2020-04-01

    https://blog.csdn.net/qq_40985294/article/details/105257416

    2020-04-01
    有用
    回复
  • 李🐶嗨
    李🐶嗨
    2019-12-26

    米法(BINNIE SMILE) 谢谢,代码如下:


    控制器代码:

    import { Controller, Get, Header, Query } from '@nestjs/common';
    import { WechatService } from './wechat.service';
    
    
    @Controller('wechat')
    export classWechatController{
      constructorprivate readonly wechatService: WechatService) {}
    
      @Get()
      @Header('Access-Control-Allow-Origin', '*')
      @Header('Access-Control-Allow-Headers', 'X-Requested-With')
      @Header('Access-Control-Allow-Methods', 'PUT,POST,GET,DELETE,OPTIONS')
      @Header('X-Powered-By', '3.2.1')
      @Header('Content-Type', 'text/plain;charset=utf-8')
      public async receiveMsgFromWechat(
        @Query() query,
      ) {
        const result = this.wechatService.verify(
          query.signature,
          query.timestamp,
          query.nonce,
          query.echostr,
        );
        // console.log(`query is ${JSON.stringify(query)}`);
        let res;
        if (result['isPass']) {
          // res = {
          //   status: 200,
          //   body: result['data'],
          // };
          return result['data'];
        } else {
          res = {
            status: '403',
            msg: result['message'],
          };
          console.log('res类型是', typeof res);
          return res;
        }
      }
    }
    


    服务:

    import { Injectable } from'@nestjs/common';
    import * as crypto from'crypto';
    
    
    @Injectable()
    exportclass WechatService {
      // 验证
      public verify = signature, timestamp, nonce, echostr) => {
        // 约定token
        const config = {
          wechat: {
            appID: '',
            appsecret: '',
            token: '',
          },
        };
    
    
        // 生成密钥
        const token = config.wechat.token;
        const str = [token, timestamp, nonce].sort().join();
        const sha1Code = crypto.createHash('sha1');
        const sha = sha1Code.update(str, 'utf8').digest('hex');
    
        let result = {};
    
        console.log('检查signature和sha', signature, sha);
        if (sha === signature) {
          // 成功
          result['isPass'] = true;
          result['data'] = echostr;
        } else {
          // 失败
          result['isPass'] = false;
          result['message'] = '验证失败!重新再试';
        }
        return result;
      };
    }
    


    进程管理使用pm2,在验证服务器的时候,没有打印日志


    :(

    2019-12-26
    有用
    回复
  • 疯狂的小辣椒
    疯狂的小辣椒
    2019-12-23

    你好,提供下appid,URL已经操作时间

    2019-12-23
    有用
    回复 5
  • 格
    2019-12-22

    我也是遇到了这个原因 签名通过了也返回了相应的echostr 都没用

    2019-12-22
    有用
    回复
登录 后发表内容
问题标签