1 <meta http-equiv="Content-Type" content="text/html; charset=utf8" />
2 <?php
3 header("Content-Type:text/html;charset=UTF-8");
4 date_default_timezone_set("PRC");
5 /**
6 * 最开始用的是微信提供的demo老是不成功,用了这个网上下载的才成功
7 */
8
9 //define your token
10 define("TOKEN", "djjc");
11 $wechatObj = new wechatCallbackapiTest();
12 //微信接入操作,成功接入了直接注释了就行了
13 $wechatObj->responseMsg();
14 //$wechatObj->valid();
15
16 class wechatCallbackapiTest
17 {
18 /*public function valid()
19 {
20 $echoStr = $_GET["echostr"];
21
22 //valid signature , option
23 if($this->checkSignature()){
24 echo $echoStr;
25 exit;
26 }
27 }*/
28
29 public function responseMsg()
30 {
31 //get post data, May be due to the different environments
32 $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
33
34 //extract post data
35 if (!empty($postStr)){
36
37 $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
38 $RX_TYPE = trim($postObj->MsgType);
39
40 switch($RX_TYPE)
41 {
42 case "text":
43 $resultStr = $this->handleText($postObj);
44 break;
45 case "event":
46 $resultStr = $this->handleEvent($postObj);
47 break;
48 default:
49 $resultStr = "Unknow msg type: ".$RX_TYPE;
50 break;
51 }
52 echo $resultStr;
53 }else {
54 echo "";
55 exit;
56 }
57 }
58 //测试文字回复
59 public function handleText($postObj)
60 {
61 $fromUsername = $postObj->FromUserName;
62 $toUsername = $postObj->ToUserName;
63 $keyword = trim($postObj->Content);
64 $time = time();
65 $textTpl = "<xml>
66 <ToUserName><![CDATA[%s]]></ToUserName>
67 <FromUserName><![CDATA[%s]]></FromUserName>
68 <CreateTime>%s</CreateTime>
69 <MsgType><![CDATA[%s]]></MsgType>
70 <Content><![CDATA[%s]]></Content>
71 <FuncFlag>0</FuncFlag>
72 </xml>";
73 if(!empty( $keyword ))
74 {
75 $msgType = "text";
76 switch($keyword){
77 case "你好":
78 $contentStr = "你好!";
79 break;
80 case "你叫什么名字":
81 $contentStr = "我是顶尖机器人";
82 break;
//判断是否为天气
83 case $keywords+"天气";
84 $str = mb_substr($keyword,-2,2,"UTF-8");
85 $str_key = mb_substr($keyword,0,-2,"UTF-8");
86 if($str=="天气"){
87 $data = $this->weather($str_key)->showapi_res_body;
88 $data1='[今天白天]'.$data->f1->day_weather."
";
89 $data2='[今天夜间]'.$data->f1->night_weather."
";
90 $data3='[明天白天]'.$data->f2->day_weather."
";
91 $data4='[明天夜间]'.$data->f2->night_weather."
";
92 $contentStr = $data1.$data2.$data3.$data4;
93 }
94 break;
95 default:
96 $contentStr = "听不懂您在讲什么";
97 break;
98 }
99 $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
100 echo $resultStr;
101 }else{
102 echo "Input something...";
103 }
104 }
105
106 public function handleEvent($object)
107 {
108 $contentStr = "";
109 switch ($object->Event)
110 {
111 case "subscribe":
112 $contentStr = "感谢您关注顶尖教程网,在这里您将得到海量免费学习资源!";
113 break;
114 default :
115 $contentStr = "Unknow Event: ".$object->Event;
116 break;
117 }
118 $resultStr = $this->responseText($object, $contentStr);
119 return $resultStr;
120 }
121
122 public function responseText($object, $content)
123 {
124 $textTpl = "<xml>
125 <ToUserName><![CDATA[%s]]></ToUserName>
126 <FromUserName><![CDATA[%s]]></FromUserName>
127 <CreateTime>%s</CreateTime>
128 <MsgType><![CDATA[text]]></MsgType>
129 <Content><![CDATA[%s]]></Content>
130 <FuncFlag>0</FuncFlag>
131 </xml>";
132 $resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content, $flag);
133 return $resultStr;
134 }
135
136 private function checkSignature()
137 {
138 $signature = $_GET["signature"];
139 $timestamp = $_GET["timestamp"];
140 $nonce = $_GET["nonce"];
141
142 $token = TOKEN;
143 $tmpArr = array($token, $timestamp, $nonce);
144 sort($tmpArr);
145 $tmpStr = implode( $tmpArr );
146 $tmpStr = sha1( $tmpStr );
147
148 if( $tmpStr == $signature ){
149 return true;
150 }else{
151 return false;
152 }
153 }
154 //天气预报 此处汉字需要处理,想了很多办法才没乱码
155 private function weather($k){
156 $n=urlencode($k);
157 $showapi_appid = '7440'; //去相关网站申请就行
158 $showapi_sign = '1900d19e5af4470ca611c7e26fd145ea';
159 $showapi_timestamp = date('YmdHis');
160 $areaid='0';
161 $paramArr = '0';
162 $needHourData='0';
163 $url = iconv('gbk','utf-8','http://route.showapi.com/9-2?'.'area='.$n.'&areaid=&needHourData=0&needIndex=0&needMoreDay=0&showapi_appid='.$showapi_appid.'&showapi_timestamp='.$showapi_timestamp.'&showapi_sign='.$showapi_sign);
164 $result = file_get_contents($url);
165 $result = json_decode($result);
166 return $result;
167 }
168
169 }
170
171 ?>