我是个小白,最近申请了个测试号,想学一下微信开发,在配置接口配置信息的时候遇到点问题,一直都无法通过,下面是我的代码
/**
* 配置微信服务器
*/
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
求解答,不胜感激,好人一生平安
兜兜转转好几天,中间遇到端午节回老家呆了几天没有深究这个问题,今天上班了,抽空又在网上找了下解决方案,这里不得不吐槽下往上那些复制党,基本都是转载的,真心想问一下这些人,你们自己都试过么?就堂而皇之的转载了,你们转载的内容,狗屁不是,没一个能解决问题的!无奈之下,自己只有从头查起!由于上周是关闭了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
完美!