1.
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;
}
}
checkSignature方法是通过判断三个参数是否存在然后判断是否是腾讯服务器提交,这样做是为了保证自己所写的程序的安全,如果$tmpStr==$signature那就说明是腾讯提交的,保证了安全问题。
2.
echo $_GET["echostr"];
就算代码中只有这一行代码,也可以配置成功,是因为开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。
3.
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
file_put_contents('msg.txt', $postStr,FILE_APPEND);
if (!empty($postStr)){
$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>";
判断poststr是否为空若不为空则在生成的msg.txt文件中写入xml中的内容