花了一天写的微信公众平台自动回复,简单封装了一下。增加了记录了用户发送信息日志。错误日志
<?php /** * wechatCallbackapi * * @author 83 * @link http://madeby83.com * @since Version 1.0 * @filesource */ //define your token define("TOKEN", "weixin"); $wechatObj = new wechatCallbackapi(); if( empty($wechatObj->keyword) ) $wechatObj->responseMsg('请输入些什么'); //回复图文消息,必须是二维数组 $array = array( array("title"=>"testnews","des"=>"testdes","pic"=>"http://res.wx.qq.com/mpres/zh_cn/htmledition/images/logo1191e9.png","url"=>"http://mp.weixin.qq.com/cgi-bin/readtemplate?t=wxm-callbackapi-doc&lang=zh_cn"), array("title"=>"testnews","des"=>"testdes","pic"=>"http://res.wx.qq.com/mpres/zh_cn/htmledition/images/logo1191e9.png","url"=>"http://mp.weixin.qq.com/cgi-bin/readtemplate?t=wxm-callbackapi-doc&lang=zh_cn"), array("title"=>"testnews","des"=>"testdes","pic"=>"http://res.wx.qq.com/mpres/zh_cn/htmledition/images/logo1191e9.png","url"=>"http://mp.weixin.qq.com/cgi-bin/readtemplate?t=wxm-callbackapi-doc&lang=zh_cn"), array("title"=>"testnews","des"=>"testdes","pic"=>"http://res.wx.qq.com/mpres/zh_cn/htmledition/images/logo1191e9.png","url"=>"http://mp.weixin.qq.com/cgi-bin/readtemplate?t=wxm-callbackapi-doc&lang=zh_cn"), array("title"=>"testnews","des"=>"testdes","pic"=>"http://res.wx.qq.com/mpres/zh_cn/htmledition/images/logo1191e9.png","url"=>"http://mp.weixin.qq.com/cgi-bin/readtemplate?t=wxm-callbackapi-doc&lang=zh_cn"), ); $wechatObj->responseImgMsg($array); //回复文字信息 // $wechatObj->responseMsg("测试"); class wechatCallbackapi { var $postStr; var $postObj; var $fromUserName; var $toUsername; var $keyword; public function __construct() { //验证 if(!$this->checkSignature()) $this->_error('验证失败'); //get post data, May be due to the different environments $this->postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; if( empty($this->postStr) ) $this->_error('获取数据失败', true); $this->postObj = simplexml_load_string($this->postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $this->fromUsername = $this->postObj->FromUserName; $this->toUsername = $this->postObj->ToUserName; $this->keyword = trim($this->postObj->Content); $this->_log( $this->keyword ); } //官方给的 处女用 public function valid() { $echoStr = $_GET["echostr"]; //valid signature , option 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); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ){ return true; }else{ return false; } } public function responseMsg($msg, $flag = 0) { if( empty($msg) ) return; $textTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA]></MsgType> <Content><![CDATA[%s]]></Content> <FuncFlag>%d</FuncFlag> </xml>"; $time = time(); $resultStr = sprintf($textTpl, $this->fromUsername, $this->toUsername, $time, $msg, $flag); echo $resultStr; } //返回图文信息 public function responseImgMsg($array, $flag = 0) { if( !is_array($array) ) return; $time = time(); $textHaderTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[news]]></MsgType> <Content><![CDATA[]]></Content> <ArticleCount>%d</ArticleCount> <Articles>"; $textContentTpl = "<item> <Title><![CDATA[%s]]></Title> <Description><![CDATA[%s]]></Description> <PicUrl><![CDATA[%s]]></PicUrl> <Url><![CDATA[%s]]></Url> </item>"; $textFooterTpl = "</Articles> <FuncFlag>%d</FuncFlag> </xml>"; $resultHaderStr = sprintf($textHaderTpl, $this->fromUsername, $this->toUsername, $time, count($array)); foreach ($array as $key => $value) { $resultContentStr .= sprintf($textContentTpl, $value['title'], $value['des'], $value['pic'], $value['url']); } $resultFooterStr = sprintf($textFooterTpl, $flag); echo $resultStr = $resultHaderStr,$resultContentStr,$resultFooterStr; } private function _error($e_msg = 'error') { $date = date('Y-m-d H:i:s'); error_log("$date $e_msg\n", 3, 'e.txt'); exit; } private function _log($msg = '') { if(!$msg) return; $date = date('Y-m-d H:i:s'); error_log("$date $msg\n", 3, 'key.txt'); } } ?>