CopyRight 2014 All Rights Reserved*/
define("TOKEN", "weixin");$wechatObj = newwechatCallbackapiTest();if (!isset($_GET['echostr'])) {$wechatObj->responseMsg();
}else{$wechatObj->valid();
}classwechatCallbackapiTest
{//验证消息
public functionvalid()
{$echoStr = $_GET["echostr"];if($this->checkSignature()){echo $echoStr;exit;
}
}//检查签名
private functioncheckSignature()
{$signature = $_GET["signature"];$timestamp = $_GET["timestamp"];$nonce = $_GET["nonce"];$token =TOKEN;$tmpArr = array($token, $timestamp, $nonce);sort($tmpArr,SORT_STRING);$tmpStr = implode($tmpArr);$tmpStr = sha1($tmpStr);if($tmpStr == $signature){return true;
}else{return false;
}
}//响应消息
public functionresponseMsg()
{$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];if (!empty($postStr)){$this->logger("R ".$postStr);$postObj = simplexml_load_string($postStr, 'SimpleXMLElement',LIBXML_NOCDATA);$RX_TYPE = trim($postObj->MsgType);switch ($RX_TYPE)
{case "event":
$result = $this->receiveEvent($postObj);break;case "text":
$result = $this->receiveText($postObj);break;
}$this->logger("T ".$result);echo $result;
}else{echo "";exit;
}
}//接收事件消息
private function receiveEvent($object)
{switch ($object->Event)
{case "subscribe":
$content[] = array("Title" =>"欢迎关注方倍工作室", "Description" =>"使用方法:\n1.发送快递单号,例如6367532560,可查询快递详情", "PicUrl" =>"http://www.3856.cc/weixin/weixin/logo.jpg", "Url" =>"");break;default:
$content = "receive a new event: ".$object->Event;break;
}if(is_array($content)){if (isset($content[0])){$result = $this->transmitNews($object, $content);
}else if (isset($content['MusicUrl'])){$result = $this->transmitMusic($object, $content);
}
}else{$result = $this->transmitText($object, $content);
}return $result;
}//接收文本消息
private function receiveText($object)
{$keyword = trim($object->Content);if($keyword == "时间" || $keyword == "测试"){$content = date("Y-m-d H:i:s",time());$result = $this->transmitText($object, $content);
}//触发多客服模式
else if (strstr($keyword, "您好") || strstr($keyword, "你好") || strstr($keyword, "在吗") || strstr($keyword, "有人吗")){$result = $this->transmitService($object);return $result;
}return $result;
}private function transmitText($object, $content)
{$textTpl = "
%s
";$result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content);return $result;
}private function transmitNews($object, $newsArray)
{if(!is_array($newsArray)){return;
}$itemTpl = "
";$item_str = "";foreach ($newsArray as $item){$item_str .= sprintf($itemTpl, $item['Title'], $item['Description'], $item['PicUrl'], $item['Url']);
}$newsTpl = "
%s
%s
$item_str
";$result = sprintf($newsTpl, $object->FromUserName, $object->ToUserName, time(), count($newsArray));return $result;
}private function transmitMusic($object, $musicArray)
{$itemTpl = "
";$item_str = sprintf($itemTpl, $musicArray['Title'], $musicArray['Description'], $musicArray['MusicUrl'], $musicArray['HQMusicUrl']);$textTpl = "
%s
$item_str";$result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time());return $result;
}//回复多客服消息
private function transmitService($object)
{$xmlTpl = "
%s
";$result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time());return $result;
}private function logger($log_content)
{if(isset($_SERVER['HTTP_APPNAME'])){ //SAE
sae_set_display_errors(false);
sae_debug($log_content);
sae_set_display_errors(true);
}else if($_SERVER['REMOTE_ADDR'] != "127.0.0.1"){ //LOCAL
$max_size = 10000;$log_filename = "log.xml";if(file_exists($log_filename) and (abs(filesize($log_filename)) > $max_size)){unlink($log_filename);}file_put_contents($log_filename, date('H:i:s')." ".$log_content."\r\n",FILE_APPEND);
}
}
}?>