1 <?php
2 /**
3 * wechat php test
4 */
5
6 //define your token
7 define("TOKEN", "weixin");
8 $wechatObj = new wechatCallbackapiTest();
9 //验证服务器和公众平台是否连接成功
10 //在服务器和公众平台验证成功之后,把$wechatObj->valid()注释掉
11 // $wechatObj->valid();
12 echo $wechatObj->responseMsg();
13
14 class wechatCallbackapiTest
15 {
16 public function valid()
17 {
18 $echoStr = $_GET["echostr"];
19
20 //valid signature , option
21 if($this->checkSignature()){
22 echo $echoStr;
23 exit;
24 }
25 }
26 //输出公众平台返回给用户的信息
27 public function responseMsg()
28 {
29 //get post data, May be due to the different environments
30 //相当于$_POST
31 $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
32
33 //extract post data
34 if (!empty($postStr)){
35 /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,
36 the best way is to check the validity of xml by yourself */
37 //只解析XML数据的主体部分,防止xxe攻击
38 libxml_disable_entity_loader(true);
39 //解析XML数据
40 $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
41 //获取手机用户的OPenID
42 $fromUsername = $postObj->FromUserName;
43 //开发者微信号
44 $toUsername = $postObj->ToUserName;
45 //发送文本信息的关键字
46 $keyword = trim($postObj->Content);
47 //发送消息的类型
48 $type = $postObj->MsgType;
49
50 $time = time();
51 //发送文本信息的字符串模板
52 $textTpl = "<xml>
53 <ToUserName><![CDATA[%s]]></ToUserName>
54 <FromUserName><![CDATA[%s]]></FromUserName>
55 <CreateTime>%s</CreateTime>
56 <MsgType><![CDATA[%s]]></MsgType>
57 <Content><![CDATA[%s]]></Content>
58 <FuncFlag>0</FuncFlag>
59 </xml>";
60 //音乐消息的模板
61 $musicTpl = "<xml>
62 <ToUserName><![CDATA[%s]]></ToUserName>
63 <FromUserName><![CDATA[%s]]></FromUserName>
64 <CreateTime>%s</CreateTime>
65 <MsgType><![CDATA[%s]]></MsgType>
66 <Music>
67 <Title><![CDATA[%s]]></Title>
68 <Description><![CDATA[%s]]></Description>
69 <MusicUrl><![CDATA[%s]]></MusicUrl>
70 <HQMusicUrl><![CDATA[%s]]></HQMusicUrl>
71
72 </Music>
73 </xml>";
74 //发送图文消息
75 $newsTpl="<xml>
76 <ToUserName><![CDATA[%s]]></ToUserName>
77 <FromUserName><![CDATA[%s]]></FromUserName>
78 <CreateTime>%s</CreateTime>
79 <MsgType><![CDATA[%s]]></MsgType>
80 <ArticleCount>%s</ArticleCount>
81 <Articles>
82 %s
83 </Articles>
84 </xml> ";
85 if($type == 'text'){
86 if(!empty( $keyword ))
87 {
88 // if($keyword == '音乐'){
89 // $msgType = "music";
90 // $title = "See You Again";
91 // $description='速度与激情7 原声大碟';
92 // $music_url='http://www.yyzljg.com/wechat/music.mp3';
93 // $high_url='http://www.yyzljg.com/wechat/music.mp3';
94 // //格式化字符串
95 // $resultStr = sprintf($musicTpl, $fromUsername, $toUsername, $time, $msgType,$title,$description,$music_url,$high_url);
96 // echo $resultStr;
97 // }
98 if($keyword=='音乐'){
99 $msgType='music';
100 $title='冰雪奇缘主题曲';
101 $description='原声大碟';
102 $music_url='http://www.yyzljg.com/wechat/music.mp3';
103 $high_url='http://www.yyzljg.com/wechat/music.mp3';
104 //格式化字符串
105 $resultStr = sprintf($musicTpl, $fromUsername, $toUsername, $time, $msgType,$title,$description,$music_url,$high_url);
106 echo $resultStr;
107 }
108 if($keyword == '单图文'){
109 $msgType='news';
110 $counts=1;
111 $contentStr="<item>
112 <Title><![CDATA[大家一起学习微信开发]]></Title>
113 <Description><![CDATA[愿每天的你都是开心的!]]></Description>
114 <PicUrl><![CDATA[http://ibeliveone.applinzi.com/1.jpg]]></PicUrl>
115 <Url><![CDATA[http://ibeliveone.applinzi.com/1.jpg]]></Url>
116 </item>";
117
118 //格式化字符串
119 $resultStr = sprintf($newsTpl, $fromUsername, $toUsername, $time, $msgType,$counts,$contentStr);
120 echo $resultStr;
121 }
122 if($keyword == '多图文'){
123 $msgType='news';
124 $counts=4;
125 $contentStr='';
126 for($i=1;$i<=4;$i++){
127 $contentStr.="<item>
128 <Title><![CDATA[大家一起学习微信开发]]></Title>
129 <Description><![CDATA[愿每天的你都是开心的!]]></Description>
130 <PicUrl><![CDATA[http://ibeliveone.applinzi.com/{$i}.jpg]]></PicUrl>
131 <Url><![CDATA[http://ibeliveone.applinzi.com/{$i}.jpg]]></Url>
132 </item>";
133 }
134 //格式化字符串
135 $resultStr = sprintf($newsTpl, $fromUsername, $toUsername, $time, $msgType,$counts,$contentStr);
136 echo $resultStr;
137 }
138
139 //定义发送消息的类型
140 $msgType = "text";
141 //公众平台发送给用户的信息
142 $contentStr = "欢迎关注我的微信公众平台!";
143 //格式化字符串
144 $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
145 echo $resultStr;die;
146
147
148 }else{
149 echo "Input something...";
150 }
151 }elseif($type == 'image'){
152 //定义发送消息的类型
153 $msgType = "text";
154 //公众平台发送给用户的信息
155 $contentStr = "客官,您发送的美女好漂亮啊!";
156 //格式化字符串
157 $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
158 echo $resultStr;
159 die;
160 }elseif($type == 'voice'){
161 //定义发送消息的类型
162 $msgType = "text";
163 //公众平台发送给用户的信息
164 $contentStr = "客官,您的声音好动听啊!";
165 //格式化字符串
166 $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
167 echo $resultStr;
168 die;
169 }elseif($type == 'video'){
170 //定义发送消息的类型
171 $msgType = "text";
172 //公众平台发送给用户的信息
173 $contentStr = "客官,您分享的片片不是高清滴呦!";
174 //格式化字符串
175 $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
176 echo $resultStr;
177 die;
178 }else{
179 //定义发送消息的类型
180 $msgType = "text";
181 //公众平台发送给用户的信息
182 $contentStr = "客官,我书读的少,不知道你想要什么服务,回复关键字有惊喜:'音乐','单图文','多图文'";
183 //格式化字符串
184 $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
185 echo $resultStr;
186 die;
187 }
188
189
190 }else {
191 echo "客官,我书读的少,不知道你想要什么服务,回复关键字有惊喜:'音乐','单图文','多图文'";
192 exit;
193 }
194 }
195
196 private function checkSignature()
197 {
198 // you must define TOKEN by yourself
199 if (!defined("TOKEN")) {
200 throw new Exception('TOKEN is not defined!');
201 }
202
203 $signature = $_GET["signature"];
204 $timestamp = $_GET["timestamp"];
205 $nonce = $_GET["nonce"];
206
207 $token = TOKEN;
208 $tmpArr = array($token, $timestamp, $nonce);
209 // use SORT_STRING rule
210 sort($tmpArr, SORT_STRING);
211 $tmpStr = implode( $tmpArr );
212 $tmpStr = sha1( $tmpStr );
213
214 if( $tmpStr == $signature ){
215 return true;
216 }else{
217 return false;
218 }
219 }
220 }
221
222 ?>