<?php
header('content-type:text/html;charset=utf-8');
define("TOKEN", "weixin"); //define your token
$wx = new wechatCallbackapiTest();
if($_GET['echostr']){
$wx->valid(); //如果發來了echostr則進行驗證
}else{
$wx->responseMsg(); //如果沒有echostr,則返回消息
}
class wechatCallbackapiTest{
//微信驗證
public function valid(){ //valid signature , option
$echoStr = $_GET["echostr"];
if($this->checkSignature()){ //調用驗證字段
echo $echoStr;
exit;
}
}
/*
返回消息數據
*/
public function responseMsg(){
$postStr = file_get_contents('php://input');//php7.0以上用這個接收參數、
//數據
// "<xml>
// <ToUserName><![CDATA[gh_bb86c5992fd8]]><\/ToUserName>\n
// <FromUserName><![CDATA[ojTmjwa0o63WAjWfbbkOUU-lr1IA]]><\/FromUserName>\n
// <CreateTime>1550115489<\/CreateTime>\n
// <MsgType><![CDATA[event]]><\/MsgType>\n
// <Event><![CDATA[subscribe]]><\/Event>\n
// <EventKey><![CDATA[]]><\/EventKey>\n
// <\/xml>"
//get post data, May be due to the different environments
// $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //接收微信發來的XML數據 版本php7.0以上這個函數已經作廢
file_put_contents('02.txt',json_encode($postStr));
//extract post data
if(!empty($postStr)){
//解析post來的XML爲一個對象$postObj
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$fromUsername = $postObj->FromUserName; //請求消息的用戶
$toUsername = $postObj->ToUserName; //"我"的公衆號id
$keyword = trim($postObj->Content); //消息內容
$time = time(); //時間戳
$msgtype = 'text'; //消息類型:文本
$textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
file_put_contents('01.txt',json_encode($postObj));
if(strtolower($postObj->MsgType == 'event' )){ //如果XML信息裏消息類型爲event
if($postObj->Event == 'subscribe'){ //如果是訂閱事件
// $contentStr = $fromUsername."歡迎訂閱misaka去年夏天32434!\n更多精彩內容:http://blog.csdn.net/misakaqunianxiatian";
// $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgtype, $contentStr);
// echo $resultStr;
$contentStrq = "歡迎訂閱:請點擊鏈接<a href='http://blog.csdn.net/misakaqunianxiatian'>wordwrap</a>";
$resultStrq = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgtype, $contentStrq);
echo $resultStrq;
exit();
}
}
switch (keyword) {
case '1':
$contentStr = '我是1號';
break;
case '2':
$contentStr = '我是2號';
break;
default:
$contentStr = '輸入數字試試';
break;
}
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgtype, $contentStr);
echo $resultStr;
file_put_contents('01.txt',json_encode($resultStr));
exit();
}else {
echo "";
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;
}
}
}