微信接入第三方服务器php版源码及一些关键函数

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;
		}
	}
}

?>

猜你喜欢

转载自blog.csdn.net/taotaobaobei/article/details/81322593