- <?php
- define ( "TOKEN", "weixin" );
- $wechatObj = new wechatCallbackapiTest ();
- if (isset ( $_GET ['echostr'] )) {
- $wechatObj->valid ();
- } else {
- $wechatObj->responseMsg ();
- }
- class wechatCallbackapiTest {
- // 验证Token
- public function valid() {
- $echoStr = $_GET ["echostr"];
- if ($this->checkSignature ()) {
- echo $echoStr;
- exit ();
- }
- }
- // 验证签名
- private function checkSignature() {
- $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;
- }
- return false;
- }
- /* 回应 */
- public function responseMsg() {
- $postStr = $GLOBALS ["HTTP_RAW_POST_DATA"];
- if (! empty ( $postStr )) {
- $postObj = simplexml_load_string ( $postStr, 'SimpleXMLElement', LIBXML_NOCDATA );
- $RX_TYPE = trim ( $postObj->MsgType );
- switch ($RX_TYPE) {
- //接收关注/取消关注、扫描带参数二维码【未关注时,进行关注后、用户已关注】、上报地理位置、自定义菜单【点击菜单拉取消息、点击菜单跳转链接】
- case "event" :
- $result = $this->receiveEvent ( $postObj );
- break;
- //接收普通的文字、图片、媒体消息
- case "text" :
- $result = $this->receiveText ( $postObj );
- break;
- }
- echo $result;
- } else {
- echo "";
- exit ();
- }
- }
- // 处理接收到用户发送的消息
- private function receiveEvent($object) {
- $content = "";
- switch ($object->Event) {
- //关注
- case "subscribe" :
- $content = "感谢您的关注,本账号目前还\\n在测试阶段,给您带来的不便请谅解!";
- break;
- //取消关注
- case 'unsubscribe':
- $content = "欢迎您再次关注我们“女人要懂得爱自己”!";
- break;
- }
- if (is_array ( $content )) {
- $result = $this->transmitNews ( $object, $content );
- } else {
- $result = $this->transmitText ( $object, $content );
- }
- return $result;
- }
- /* 处理接收到的文本 */
- private function receiveText($object) {
- $keyword = trim ( $object->Content );
- if (strstr ( $keyword, "四六级" ) || strstr ( $keyword, "英语" )) {
- $content = array ();
- $content [] = array (
- "Title" => "2014年6月全国大学英语四六级考试成绩查询",
- "Description" => "",
- "PicUrl" => "http://img003.21cnimg.com/photos/album/20141104/m600/B2579ABF2B905FA793C6756A59044992.jpeg",
- "Url" => "http://apix.sinaapp.com/cet/index.php?openid=" . $object->FromUserName
- );
- $content [] = array (
- "Title" => "刘强东带奶茶妹妹看牙 两人旁若无人地忘情缠绵(图)",
- "Description" => "",
- "PicUrl" => "",
- "Url" => "http://news.21cn.com/social/shixiang/a/2014/1105/11/28502924.shtml"
- );
- } else {
- $content = date ( "Y-m-d H:i:s", time () ) . "\\n目前正在测试阶段";
- }
- if (is_array ( $content )) {
- $result = $this->transmitNews ( $object, $content );
- } else {
- $result = $this->transmitText ( $object, $content );
- }
- return $result;
- }
- /* 输出文章 */
- private function transmitText($object, $content) {
- $textTpl = "<xml>
- <ToUserName><![CDATA[%s]]></ToUserName>
- <FromUserName><![CDATA[%s]]></FromUserName>
- <CreateTime>%s</CreateTime>
- <MsgType><![CDATA[text]]></MsgType>
- <Content><![CDATA[%s]]></Content>
- </xml>";
- $result = sprintf ( $textTpl, $object->FromUserName, $object->ToUserName, time (), $content );
- return $result;
- }
- /* 输出图文 */
- private function transmitNews($object, $arr_item) {
- if (! is_array ( $arr_item ))
- return;
- $itemTpl = "
- <item>
- <Title><![CDATA[%s]]></Title>
- <Description><![CDATA[%s]]></Description>
- <PicUrl><![CDATA[%s]]></PicUrl>
- <Url><![CDATA[%s]]></Url>
- </item>
- ";
- $item_str = "";
- foreach ( $arr_item as $item )
- $item_str .= sprintf ( $itemTpl, $item ['Title'], $item ['Description'], $item ['PicUrl'], $item ['Url'] );
- $newsTpl = "<xml>
- <ToUserName><![CDATA[%s]]></ToUserName>
- <FromUserName><![CDATA[%s]]></FromUserName>
- <CreateTime>%s</CreateTime>
- <MsgType><![CDATA[news]]></MsgType>
- <Content><![CDATA[]]></Content>
- <ArticleCount>%s</ArticleCount>
- <Articles>
- $item_str
- </Articles>
- </xml>";
- $result = sprintf ( $newsTpl, $object->FromUserName, $object->ToUserName, time (), count ( $arr_item ) );
- return $result;
- }
- }
- ?>
- //该片段来自于http://www.codesnippet.cn/detail/0611201410909.html
来源: http://www.codesnippet.cn/detail/0611201410909.html