libxml_disable_entity_loader
(PHP 5> = 5.2.11,PHP 7)
libxml_disable_entity_loader - 禁用加载外部实体的功能
描述
bool libxml_disable_entity_loader ([ bool $disable=TRUE ])
禁用/启用加载外部实体的功能。
参数
disable
禁用(TRUE)或enable(FALSE)libxml扩展(例如 DOM,XMLWriter 和XMLReader)来加载外部实体。
返回值
返回先前的值。
simplexml_load_string
(PHP 5,PHP 7)
simplexml_load_string - 将XML字符串解释为对象
描述
SimpleXMLElement simplexml_load_string ( string $data [, string $class_name=“SimpleXMLElement” [, int $options= 0 [, string $ns=“” [, bool $is_prefix=FALSE ]]]])
获取格式良好的XML字符串并将其作为对象返回。
参数
data
格式良好的XML字符串
class_name
您可以使用此可选参数,以便 simplexml_load_string()将返回指定类的对象。该类应该扩展 SimpleXMLElement类。
options
从PHP 5.1.0和Libxml 2.6.0开始,您还可以使用该 options参数指定其他Libxml参数。
ns
命名空间前缀或URI。
is_prefix
TRUEif ns是前缀,FALSE如果是URI; 默认为FALSE。
返回值
返回类SimpleXMLElement的对象,其属性包含xml文档中保存的数据或失败。 FALSE
警告
此函数可能返回布尔值FALSE,但也可能返回一个计算结果为的非布尔值FALSE。有关更多信息,请阅读有关布尔值的部分。使用===运算符测试此函数的返回值。
错误/异常
E_WARNING为XML数据中发现的每个错误 生成错误消息。
<?php
/*
修改php.ini
always_populate_raw_post_data=-1
*/
define("TOKEN","weixin");
$wechatObj=new wechatCallbackapiTest();
$wechatObj->valid();
class wechatCallbackapiTest{
public function valid(){
$echoStr=$_GET["echostr"];
if($this->checkSignature()){
echo $echoStr;
exit;
}
}
public function responseMsg(){
$postStr=$GLOBAL['HTTP_RAW_POST_DATA'];
//$postStr=file_get_contents("php://input");
if(!empty($postStr)){
libxml_disable_entity_loader(true);
$postObj=simplexml_load_string($postStr,'SimpleXMLElement',LIBXML_NOCDATA);
$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>
<FuncFlag>0</FuncFlag>
</xml>
";
if(!empty($keyword)){
$msgType="text";
$contentStr="Welcome to wechat world !";
$resultStr=sprintf($textTpl,$fromUsername,$toUsername,$time,$msgType,$contentStr);
echo $resultStr;
}else{
echo "Input something ...";
}
}else{
echo "";
exit;
}
}
private function checkSignature(){
if(!define("TOKEN")){
throw new Exception('TOKEN is not defined');
}
$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;
}
}
}
?>