收藏
回答

微信测试号接口配置信息,微信没有请求我的服务器地址,用浏览器却可以,域名有备案,请问是什么原因啊?

我是个小白,最近申请了个测试号,想学一下微信开发,在配置接口配置信息的时候遇到点问题,一直都无法通过,下面是我的代码

/**
 * 配置微信服务器
 */
public function setServiceUrl(){

    $echoStr = $_GET['echostr'];
    $params = input('get.');//获取所有的参数
    //创建redis实例
    $redis_config = config('redis');
    $redis_config['select'] = 1;//这里选择1库
    $redis_config['expire'] = 3600*24;//这里设置过期时间为1天
    $redis = new Redis($redis_config);
    $redis->set('set_service_url', json_encode($params), 24*3600);
    if($this->checkSignature()){
        header('content-type:text/plain;charset=utf-8');
        ob_clean();
        echo (integer)$echoStr;
        exit;
    }
}

/**
 * 检查签名
 */
private function checkSignature()
{
    $signature = $_GET["signature"];
    $timestamp = $_GET["timestamp"];
    $nonce = $_GET["nonce"];

    $token = $this->config['token'];
    $tmpArr = array($token, $timestamp, $nonce);
    sort($tmpArr, SORT_STRING);
    $tmpStr = implode( $tmpArr );
    $tmpStr = sha1( $tmpStr );

    if( $tmpStr == $signature ){
        return true;
    }else{
        return false;
    }
}

在输出echostr之前,我记录了一次请求,发现用浏览器直接访问链接时,redis里面有记录,下面是截图(参数都是我模拟加的)

但是我在微信测试号管理里点击保存时,直接给我提示配置失败,且reids里面没有被更新

于是换个思路,用postman再试试看

郁闷了,连postman也没有响应,然后在网上查了半天,说关闭postman中的ssl证书验证就行,于是,病急乱投医,试试再说!

这下貌似有返回值了,看来微信这边也是同样的,应该是ssl证书的问题咯?

但是问题也来了,为啥浏览器访问的时候,一点问题都没有,而微信验证和使用接口工具的时候就有证书问题呢?我的域名在是正常备案过的,且ssl证书也没有过期。

还是不死心,再去服务器查了nginx的日志

可以看到,貌似请求都301了,这就有点涉及到我的知识盲区了,为啥浏览器就不301呐?

微信号:gh_ec145ad5c7d1

appid:wx1d488630d6ee3b15

求解答,不胜感激,好人一生平安


最后一次编辑于  2022-06-01
回答关注问题邀请回答
收藏

1 个回答

  • Leo
    Leo
    2022-06-06

    兜兜转转好几天,中间遇到端午节回老家呆了几天没有深究这个问题,今天上班了,抽空又在网上找了下解决方案,这里不得不吐槽下往上那些复制党,基本都是转载的,真心想问一下这些人,你们自己都试过么?就堂而皇之的转载了,你们转载的内容,狗屁不是,没一个能解决问题的!无奈之下,自己只有从头查起!由于上周是关闭了ssl证书验证就可以了,围绕这个点,我去查了下我网站配置的ssl证书的状态,不查不知道,居然还真的有问题,上图!

    这是查询链接https://www.myssl.cn/tools/check-server-cert.html

    好吧,既然知道缺少中间证书了,那就处理这个问题

    继续研究怎么配置中间证书~~

    我的域名证书是在百度云申请的,下载下来是这三个文件

    解释一下,第一个是服务器证书文件,第二个是私钥,第三个是ca证书(其实内容就是中间证书)

    ok,再来看nginx上怎么把这个中间证书用上

    这里需要把服务器证书文件+中间证书文件+根证书文件用回车拼接起来形成一个新的.crt文件就好了

    根证书文件是不是没有听过?我也没有,但是有生成的地方!,附链接https://www.myssl.cn/tools/downloadchain.html

    把服务器证书文件的内容全选复制到上面这个框框里,然后下一步

    ok,现在要的东西都有了

    直接sublime新建文件

    依次把服务器证书的内容粘贴进去,然后回车换行,再把中间证书的内容复制粘贴进去,然后继续回车换行,最后把根证书文件内容复制进去,这里千万别搞多余的符号哦,只回车就行了,然后保存文件到新的.crt文件中,我这里就叫perfectmeal.mylifestyle.top_final.crt了,把这个文件上传的nginx目录下的cert里面

    下一步,去nginx.conf里面,把ssl_certificate的配置目录指向perfectmeal.mylifestyle.top_final.crt

    保存退出

    :wq

    重启nginx

    service nginx restart

    再去检查一次ssl证书

    现在就正常了,再去postman里面开起证书验证请求一次

    看来没问题,那就去微信配置url和token

    完美!


    2022-06-06
    有用 2
    回复
登录 后发表内容