define("TOKEN", "abcd");
$wechatObj = new wechatCallbackapiTest();
if(isset($_GET['echostr'])){
    $wechatObj->valid();
}class wechatCallbackapiTest
{
public function valid()
    {
        $echoStr = $_GET["echostr"];        //valid signature , option
        if($this->checkSignature()){
         echo $echoStr; //这是什么意思,为什么要打印
         exit;
        }
    }
private function checkSignature()
{
        // you must define TOKEN by yourself
        if (!defined("TOKEN")) {
            throw new Exception('TOKEN is not defined!');
        }
        
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];
        
$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
        // use SORT_STRING rule
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );

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

解决方案 »

  1.   

    checkSignature 检查签名
    确认传入的签名有效,然后返回有效的签名
    这是客户端做签名认证的需要,你应该去问客户端开发者为什么在对
      

  2.   

    看样子是个学习演示代码,并无实际作用,授权验证通过就打印$echoStr,失败就不打印
      

  3.   

    $wechatObj->valid();要改成
    $wechatObj->checkSignature();
    这个函数是测试用的,测试完就没用了,要改过来才能正常运行
      

  4.   

    echo $echoStr;
    就是要打印$echoStr 这个变量的值。[code=php]
     if($this->checkSignature()){
             echo $echoStr; //这是什么意思,为什么要打印
             exit;
            }
    [/code这句在程序中的意思是:如果检查签名成功,则显示$echoStr的值,用于检查。