当前位置: >首页>新闻列表>惠州网站建设谈谈微信开发的接口配置信息url老是验证失败
填写接口配置信息,此信息需要你有自己的服务器资源,填写的URL需要正确响应微信发送的Token验证,这句话,大概应该很熟悉。也应该是很无奈。
先看看配置时候的提示截图
看到这个截图的时候,第一时间肯定是点击到旁边哪个信息接口使用指南来看。但是下载完了之后,你看到他的里面的实例代码,又是一头雾水了。有时候很简单的东西,可以一两句话说清楚的,他飞的搞得那么多可能,然后让我们看不懂。关键是,他有些代码还是很早的,这里用php来说,现在我们流行的是php7.1或者更高的版本,但是他们里面的代码有些是用php5.4的。这样一来,本来看不懂的代码,又加上版本的错误,导致我们更加头晕了。我们先看看他们的代码结构。
按照经验来说,我们一般先看readme.txt,但是看了视乎没有什么用。
看下里面的内容。
大概的意思就是告诉你要看sample.php,,可笑的是,他这个压缩包里面不放这个文件,我们一时半会也不知道去哪里找这个文件。大概的意思就是告诉你里面封装了加密解密的方法,也就是到此为止了。然而,我们到这里并不知道,要怎么写这个带token的url地址。唯一的一个提示就是找sample.php,但这个不在压缩包中。我们也不知道去哪里找。只能去看demo.php,demo里面的代码,大概也就将一些参数写死了,然后就是显示加密解密的一些结果。
说了一大堆,就是不告诉你我们要怎么写这个url的信息。
后来,我们又回去看了他原来的哪里的代码。
https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html
下载里面的东西,没啥用。但是,这个check的代码还是有用的。
这个代码就是告诉你怎么验证这个接受的数据是不是微信那边发过来的。然后返回一个真假给你。到此为止,我们也就知道这些信息而已。
好了,到这里,我们就只能在微信官网上找到这么些资料。
这个时候,我们通过百度搜索,获得下面的代码。抱着试试的心态,搞了一个叫t.php的页面,然后加到我们的微信哪里去测试下。这个时候神奇的事情发生了。喵了个咪,居然成功了。
我们先看看我们成功的原始代码。
是不是很简单。没有那么复杂的代码,也没有那些所谓的加密解密流程。其实,这个东西对我们新手来说,要简单很多。这里,我们又重新写成了我们习惯的tp6格式来做。
然而,正以为我们要解决问题的时候,发现怎么样也无法将接口保存成功。后来又折腾了几天时间。才发现:喵了个咪,我把tp6的.env文件配置成true了。也就是说,这个文件 echo 出来的代码,不是原始的代码。而是tp6带的调试的内容。所以微信来访问的时候,发现结果不对,导致无法保存成功。
到这里,我们就发现了一个微信这个url配置的工作原理。
首先,我们给一个url地址,比如说http://www.tywl888.com/index.php/wxlogin(这个接口是假的,我们用来展示而已)。然后下面给一个token就相当于一个参数。提交到微信那边。
其次,微信那边,就会访问我们这个地址,让后把他的参数返回给我们。这个时候,我们没有办法用echo,dump这样的命令将数据显示出来。我们需要用file_put_contents这类的额代码,将微信返回来的结果保存到文件中。
这个时候,有人会问,我们怎么知道参数名。这个大家可以用Request::param()接受所有的参数,然后在排列成我们上面的格式,这个格式的作用是让我们看数据的时候,好看点而已。
第三,结合我们上面看到代码,我们需要将签名和我们接受到的数据重新签名进行比较,如果比较成功了。就将数据打印出来。这个打印出来的数据。微信会获得这个和他发送过来的数据进行对比,如果成功,就能保存成功了。
第四,上面说的参数就是Request::param("echostr/s");。经过第三的对比之后,我们就可以确定这数据是从微信那边传送过来的。
到这里,惠州网站建设提醒大家,代码写到这里,就基本可以保存成功了。但是,这里又有两个问题值得我们思考。
第一,如果我们不对比签名,直接echo Request::param("echostr/s");,可以保存url成功码?经过我们的测试,这样保存就是可以成功的。但是这里就没办法保证你这个接口以后接受到的参数是微信那边过来的。所以签名是必要的。
第二,怎么验证我们上面的理论是正确的呢?其实,我们用file_put_contents保存到的时候,就是已经验证了一部分内容。这里就不深入展开了。大家可以验证数据的来源url,数据内容。这个大家可以自己探讨下。
总结,原理说清楚之后,我们应该很快就能入门,或者说很快就可以写出这个url和token。但是为什么要给一个demo,里面给我写一大堆加密解密的东西。算是误导码?还是说demo是很早之前的东西,没考虑那么多?还是不想让我们入门呢?哎。就不能给一个直接可以用的demo码?惠州网站建设这里大家提供一个可以直接用的php代码,其他语言的,参考我们上面说的原理,一下子就懂了。
//验证是否来自于微信
function checkWeixin(){
//微信会发送4个参数到我们的服务器后台 签名 时间戳 随机字符串 随机数
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$echostr = $_GET["echostr"];
$token = "qilipingmgl";
// 1)将token、timestamp、nonce三个参数进行字典序排序
$tmpArr = array($nonce,$token,$timestamp);
sort($tmpArr,SORT_STRING);
// 2)将三个参数字符串拼接成一个字符串进行sha1加密
$str = implode($tmpArr);
$sign = sha1($str);
// 3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
file_put_contents("./tttt.txt",$str.PHP_EOL.PHP_EOL.PHP_EOL,FILE_APPEND);
if ($sign == $signature) {
echo $echostr;
}
}
checkWeixin();