我今天同一位网友,解决”你的服务器没有正确响应Token验证,请阅读消息接口使用指南”的问题。经过我的调试,我用肉眼观看,那是相当的正确,可就是不成功。无奈啊,我就试着打印接口。如果你也这个问题。你可以试着用下面的程序。

1
2
3
4
5
6
7
8
<?php
$url = "http://yourname/?imidoks&signature=12db30c88b933a71aa8f313f0c4df752948a4df1&echostr=5973827613480405785&timestamp=1391151897&nonce=1390890130";
$res = file_get_contents($url);//有错的
var_dump($res);
$url = "http://midoks.cachecha.com/?midoks&signature=12db30c88b933a71aa8f313f0c4df752948a4df1&echostr=5973827613480405785&timestamp=1391151897&nonce=1390890130";
$res = file_get_contents($url);//正确的
var_dump($res);
?>

你会发现打印的结果不一样(应该是一样的),错误的比正确的多3个字符。我就不知道为什么多了这3个字符,到底哪里来的?搜了一下百度,我才如梦初醒。这个网友里面的文件包含额BOM文件,然后用下面的程序(网上找的),除去他文件中的BOM:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?php
set_time_limit(0);
//把该文件放到WEB根目录下,运行一次可以清除当前目录及所有子目录中所有文件的BOM Header。
//经测试,安全。
if (isset($_GET['dir'])){ //设置文件目录
    $basedir=$_GET['dir'];
}else{
    $basedir = '.';
}
$auto = 1;
checkdir($basedir);
function checkdir($basedir){
    if ($dh = opendir($basedir)) {
        while (($file = readdir($dh)) !== false) {
            if ($file != '.' && $file != '..'){
                if (!is_dir($basedir."/".$file)) {
                    echo "filename: $basedir/$file ".checkBOM("$basedir/$file")." <br>";
                }else{
                    $dirname = $basedir."/".$file;
                    checkdir($dirname);
                }
            }
        }
    closedir($dh);
    }
}
 
function checkBOM ($filename) {
    global $auto;
    $contents = file_get_contents($filename);
    $charset[1] = substr($contents, 0, 1);
    $charset[2] = substr($contents, 1, 1);
    $charset[3] = substr($contents, 2, 1);
    if (ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191) {
        if ($auto == 1) {
            $rest = substr($contents, 3);
            rewrite ($filename, $rest);
            return ("<font color=red>BOM found, automatically removed.</font>");
        } else {
            return ("<font color=red>BOM found.</font>");
        }
    }else return ("BOM Not Found.");
}
 
function rewrite ($filename, $data) {
    $filenum = fopen($filename, "w");
    flock($filenum, LOCK_EX);
    fwrite($filenum, $data);
    fclose($filenum);
}
?>

然后我,同为微信公众平台,提交地址。就成功了。


  • PS:我一般不会遇到上面的问题,我用编辑器,已经帮我除去BOM了,但是不少网友,并没有编程经验,可直接使用上面程序,在你的根目录运行,就能解决问题了。
  • 感谢这位网友愿意让我用他的服务器测试代码,并帮助更多的人使用WP微信机器人更顺利。