xu モデレーター、会ったことはありますか。テスト サーバーではコードは問題なく実行されますが、2008+php5.4+fastcgi の正式バージョンは少し奇妙です。
いいえコード、真実なし
コードなし、真実なし
<?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; } } } ?>
コードなし、真実なし
公式サーバーから返される値 (例外)
WeChat サーバーから返される値にテスト サーバーは正常に応答します (通常)
エラー行の近くにコードを投稿する必要があります。
その日はわかったのに、答えを忘れてしまいました。ページの正常な応答を妨げる BOM が存在します。インターネット上には PHP クラスがあり、BOM 削除ツールもあります
。