解决方案 »

  1.   


    <?php
    /**
      * wechat php test
      */class MpapiAction extends Action{
    private $id;

    public function getId(){
    return $id = $_REQUEST['appid'];
    }
    public function index(){
    Log::write('eval是否开启:'.function_exists('eval'));
    Log::write("remote_addr:".$_SERVER['REMOTE_ADDR'].(strpos($_SERVER['REMOTE_ADDR'], "101.226"))?" from weixin":"unknow ip");
    Log::write("query_string:".$_SERVER['QUERY_STRING']);
    header("Content-type:text/html;charset=utf-8");
    $str = md5($_REQUEST['appid']."weike86.com");
    define("TOKEN", $str);
    Log::write('TOKEN::'.$str);
    $this->valid();
    $wechat = new WechatAction();
    $wechat->responseMsg($_REQUEST['appid']);
    }

    public function valid(){
            $echoStr = $_GET["echostr"];
            //valid signature , option
            if($this->checkSignature()){
             Log::write('$echoStr'.$echoStr);
             Log::write('HTTP_RAW_POST_DATA:'.$GLOBALS["HTTP_RAW_POST_DATA"]);
             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;
    }
    }

    }?>
      

  2.   

    那天弄出来了,忘记给出答案了。就是有BOM阻止了页面的正常响应,网上有php的类,还有清除bom工具