接入验证提示“配置失败”,有返回echostr
如题,我的使用用例为:
$weObj = new Wechat($options);
$ret = $weObj->valid();//明文或兼容模式可以在接口验证通过后注释此句,但加密模式一定不能注释,否则会验证失败
if (!$ret) {
server_logger("验证失败!");
var_dump($ret);
exit;
}
我在valid函数中die($echostr)时加了日志, 如下:
public function valid($return=false)
{
$encryptStr="";
if ($_SERVER['REQUEST_METHOD'] == "POST") {
$postStr = file_get_contents("php://input");
$array = (array)simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$this->encrypt_type = isset($_GET["encrypt_type"]) ? $_GET["encrypt_type"]: '';
if ($this->encrypt_type == 'aes') { //aes加密
$this->log($postStr);
$encryptStr = $array['Encrypt'];
$pc = new Prpcrypt($this->encodingAesKey);
$array = $pc->decrypt($encryptStr,$this->appid);
if (!isset($array[0]) || ($array[0] != 0)) {
if (!$return) {
die('decrypt error!');
} else {
return false;
}
}
$this->postxml = $array[1];
if (!$this->appid)
$this->appid = $array[2];//为了没有appid的订阅号。
} else {
$this->postxml = $postStr;
}
} elseif (isset($_GET["echostr"])) {
$echoStr = $_GET["echostr"];
if ($return) {
if ($this->checkSignature())
{
return $echoStr;
}
else
{
$this->log("valid return false");
return false;
}
} else {
if ($this->checkSignature())
{
$this->log("die with echoStr : " . $echoStr);
die($echoStr);
}
else
die('no access');
}
}
if (!$this->checkSignature($encryptStr)) {
if ($return)
return false;
else
die('no access');
}
return true;
}
当我在微信中接入该服务器时,有日志显示: 101.226.62.16 [17/Apr/2015:12:12:01 +0800] SAE_DEBUG: die with echoStr : 7181269883986168093 in index.php on line 9 yq48
但是微信那面依然给我提示 “配置失败”。求解这是什么情况
$options 是否正确配置了?
直接使用DEMO试试?
你直接访问sae上的页面地址,然后右键查看源代码,看看是否除了“no access”外还有其他内容。sae的可能会在你页面的返回结果另外增加内容,就会导致返回的信息不合规范,导致失败
我看了下,我的sae没有认证,在返回echostr的时候有返回另外的 “未认证的sae balabala”。等我的sae认证之后我再试试。 但是很奇怪,我用sae之前有接入成功过,这是为什么。
之前用SAE也试过代码出错但是接入成功。可能是微信方面的偶然性问题?
已经确定了,就是SAE有返回额外的东西的原因。如下:

我申请了实名认证之后,就能成功接入了。