我看log能看到是能看到已经进行到最后一步了。
但是微信端始终没办法拿回我的xml,很奇怪,我在微信后台的运维中心发现了这个。
从微信日志可以看到,微信没有从我服务器拿走最后的xml。
我的所有代码是这样的:
<?php
namespace app\index\controller;
// header("Content-type:text/xml");
// header('Content-type: text/html; charset=utf-8');
use think\Controller;
use think\Request;
use think\Log;
// header("Content-type: text/html; charset=utf-8");
define("TOKEN","testtoken");//定义识别码 需要跟微信公众平台上保持一致
class Wxtoken extends Controller{
public function index(){
// db('user') -> where('us_id','1') -> setField('us_ip','123');die;
//
if (isset($_GET['echostr'])) { //验证微信
$this->valid();
}else{ //回复消息
$this->responseMsg();
}
// $this->responseMsg();
}
//微信验证
public function valid(){
// dump($_GET);die;
$echoStr = $_GET["echostr"];
if($this->checkSignature()){
echo $echoStr;
exit;
}
}
//检查微信签名
private function checkSignature(){
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
// db('user') -> where('us_id','1') -> setField('us_ip','123');die;
// db('user') -> where('us_id','1') -> setField('us_ip',$RX_TYPE);
//接收微信消息
public function responseMsg(){
// db('user') -> where('us_id','1') -> setField('us_ip',time());
$poststr = file_get_contents('php://input');
log::write("微信传递的数据".$poststr);
// log::write();
//如果推送消息 或者推送事件存在,进行处理
if(!empty($poststr)){
libxml_disable_entity_loader(true);
$postObj = simplexml_load_string($poststr, 'SimpleXMLElement', LIBXML_NOCDATA);
$msgType = $postObj->MsgType;
//判断事件类型,进行对应事件类型处理
switch ($msgType) {
//当回复公众号时
case 'text':
$resultStr = $this->handleText($postObj);
break;
case 'image':
$resultStr = $this->handleImage($postObj);
break;
case 'voice':
$resultStr = $this->handleVoice($postObj);
break;
case 'video':
$resultStr = $this->handleVideo($postObj);
break;
case 'shortvideo':
$resultStr = $this->handleShortVideo($postObj);
break;
case 'location':
$resultStr = $this->handleLocation($postObj);
break;
case 'link':
$resultStr = $this->handleLink($postObj);
break;
case 'event':
$resultStr = $this->handleEvent($postObj);
break;
default:
$resultStr = "Unknow msg type: ".$msgType;
break;
}
return $resultStr;
}
}
//
//回复消息
public function handleText($postObj){
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$keyword = trim($postObj->Content);
$time = time();
$textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
if(!empty( $keyword ))
{
$msgType = "text";
$contentStr = "Welcome to wechat world!";
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
log::write("传回微信的数据".$resultStr);
echo '12';
echo $resultStr;
// return $resultStr;
// exit;
}else{
echo "Input something...";
}
}
}
不太清楚是哪里出了差错,我看了很多PHP和TP5的文档,都是最后直接echo即可,但是微信不肯拿回我的消息,我是哪里没设置好嘛?token的验证是通过的