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

发布于 8 年前作者 kongchao10252 次浏览最后编辑 8 年前来自 ask

如下图:

appID为wxaa0fd8e7b03bd9ec

最近操作时间为20191221 2123

请帮忙解决下,谢谢!

3 回复
leimao
leimao1 楼6 年前

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

juantao
juantao2 楼6 年前

米法(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,在验证服务器的时候,没有打印日志

:(

taoli
taoli3 楼6 年前

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