123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301 |
- <?php
- /*
- 方倍工作室 http://www.cnblogs.com/txw1958/
- CopyRight 2014 All Rights Reserved
- */
- //echo "success";
- define("TOKEN", "eqcxcx");
- define("AppID", "wxd6972323f37bfdf0");//Appsecret
- define("Appsecret", "e7c30a645edec78aa64d30a92024237b");
- define("EncodingAESKey", "53o42sbbzslie4tjbll3ta5zlwe11rrk53o42sbbzsl");
- require_once('php/wxBizMsgCrypt.php');
- $wechatObj = new wechatCallbackapiTest();
- if (!isset($_GET['echostr'])) {
- $wechatObj->responseMsg();
- }else{
- $wechatObj->valid();
- }
- class wechatCallbackapiTest
- {
- //验证签名
- public function valid()
- {
- $echoStr = $_GET["echostr"];
- $signature = $_GET["signature"];
- $timestamp = $_GET["timestamp"];
- $nonce = $_GET["nonce"];
- $tmpArr = array(TOKEN, $timestamp, $nonce);
- sort($tmpArr);
- $tmpStr = implode($tmpArr);
- $tmpStr = sha1($tmpStr);
- if($tmpStr == $signature){
- // echo $echoStr;
- exit;
- }
- }
- //响应消息
- public function responseMsg()
- {
- $timestamp = $_GET['timestamp'];
- $nonce = $_GET["nonce"];
- $msg_signature = $_GET['msg_signature'];
- $encrypt_type = (isset($_GET['encrypt_type']) && ($_GET['encrypt_type'] == 'aes')) ? "aes" : "raw";
-
- $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
- if (!empty($postStr)){
- //解密
- if ($encrypt_type == 'aes'){
- $pc = new WXBizMsgCrypt(TOKEN, EncodingAESKey, AppID);
- $this->logger(" D \r\n".$postStr);
- $decryptMsg = ""; //解密后的明文
- $errCode = $pc->DecryptMsg($msg_signature, $timestamp, $nonce, $postStr, $decryptMsg);
- $postStr = $decryptMsg;
- }
- $this->logger(" R \r\n".$postStr);
- $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
- $RX_TYPE = trim($postObj->MsgType);
- $ComponentVerifyTicket = trim($postObj->ComponentVerifyTicket);
- $this->logger(" T: \r\n".$ComponentVerifyTicket);
- if($ComponentVerifyTicket<>''){//保存即可.
-
- $res=file_put_contents("json/VerifyTicket.json", $ComponentVerifyTicket);
- if (ob_get_level() == 0) ob_start();
- ob_implicit_flush(true);
- ob_clean();
- header("Content-type: text/plain");
- #log_msg(headers_list());
- echo("success");
- ob_flush();
- flush();
- ob_end_flush();
- die();
- exit();
- $data_string='{
- "component_appid":"'.AppID.'" ,
- "component_appsecret": "'.Appsecret.'",
- "component_verify_ticket": "'.$ComponentVerifyTicket.'"
- }';
- // $bbb = http_post_data("https://api.weixin.qq.com/cgi-bin/component/api_component_token", $data_string);
- $this->logger(" B \r\n".$bbb);
-
- // exit;
- //echo "sucsess";
- }
- //消息类型分离
- switch ($RX_TYPE)
- {
- case "event":
- $result = $this->receiveEvent($postObj);
- break;
- case "text":
- $result = $this->receiveText($postObj);
- break;
- }
- $this->logger(" Re: \r\n".$RX_TYPE.$result);
- //加密
- if ($encrypt_type == 'aes'){
- $encryptMsg = ''; //加密后的密文
- $errCode = $pc->encryptMsg($result, $timeStamp, $nonce, $encryptMsg);
- $result = $encryptMsg;
- $this->logger(" E \r\n".$result);
- }
- echo $result;
- }else {
- echo "";
- exit;
- }
- }
- //接收事件消息
- private function receiveEvent($object)
- {
- $content = "";
- switch ($object->Event)
- {
- case "subscribe":
- $content = "欢迎关注方倍工作室 ";
- break;
- }
- $result = $this->transmitText($object, $content);
- return $result;
- }
- //接收文本消息
- private function receiveText($object)
- {
- $keyword = trim($object->Content);
- if (strstr($keyword, "文本")){
- $content = "这是个文本消息";
- }else if (strstr($keyword, "单图文")){
- $content = array();
- $content[] = array("Title"=>"单图文标题", "Description"=>"单图文内容", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958");
- }else if (strstr($keyword, "图文") || strstr($keyword, "多图文")){
- $content = array();
- $content[] = array("Title"=>"多图文1标题", "Description"=>"", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958");
- $content[] = array("Title"=>"多图文2标题", "Description"=>"", "PicUrl"=>"http://d.hiphotos.bdimg.com/wisegame/pic/item/f3529822720e0cf3ac9f1ada0846f21fbe09aaa3.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958");
- $content[] = array("Title"=>"多图文3标题", "Description"=>"", "PicUrl"=>"http://g.hiphotos.bdimg.com/wisegame/pic/item/18cb0a46f21fbe090d338acc6a600c338644adfd.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958");
- }else if (strstr($keyword, "音乐")){
- $content = array();
- $content = array("Title"=>"最炫民族风", "Description"=>"歌手:凤凰传奇", "MusicUrl"=>"http://121.199.4.61/music/zxmzf.mp3", "HQMusicUrl"=>"http://121.199.4.61/music/zxmzf.mp3");
- }else{
- $content = date("Y-m-d H:i:s",time())."\n".$object->FromUserName."\n技术支持 方倍工作室";
- }
- if(is_array($content)){
- if (isset($content[0])){
- $result = $this->transmitNews($object, $content);
- }else if (isset($content['MusicUrl'])){
- $result = $this->transmitMusic($object, $content);
- }
- }else{
- $result = $this->transmitText($object, $content);
- }
- return $result;
- }
- //回复文本消息
- private function transmitText($object, $content)
- {
- $xmlTpl = "<xml>
- <ToUserName><![CDATA[%s]]></ToUserName>
- <FromUserName><![CDATA[%s]]></FromUserName>
- <CreateTime>%s</CreateTime>
- <MsgType><![CDATA[text]]></MsgType>
- <Content><![CDATA[%s]]></Content>
- </xml>";
- $result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time(), $content);
- return $result;
- }
- //回复图文消息
- private function transmitNews($object, $newsArray)
- {
- if(!is_array($newsArray)){
- return;
- }
- $itemTpl = " <item>
- <Title><![CDATA[%s]]></Title>
- <Description><![CDATA[%s]]></Description>
- <PicUrl><![CDATA[%s]]></PicUrl>
- <Url><![CDATA[%s]]></Url>
- </item>
- ";
- $item_str = "";
- foreach ($newsArray as $item){
- $item_str .= sprintf($itemTpl, $item['Title'], $item['Description'], $item['PicUrl'], $item['Url']);
- }
- $xmlTpl = "<xml>
- <ToUserName><![CDATA[%s]]></ToUserName>
- <FromUserName><![CDATA[%s]]></FromUserName>
- <CreateTime>%s</CreateTime>
- <MsgType><![CDATA[news]]></MsgType>
- <ArticleCount>%s</ArticleCount>
- <Articles>
- $item_str </Articles>
- </xml>";
- $result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time(), count($newsArray));
- return $result;
- }
- //回复音乐消息
- private function transmitMusic($object, $musicArray)
- {
- $itemTpl = "<Music>
- <Title><![CDATA[%s]]></Title>
- <Description><![CDATA[%s]]></Description>
- <MusicUrl><![CDATA[%s]]></MusicUrl>
- <HQMusicUrl><![CDATA[%s]]></HQMusicUrl>
- </Music>";
- $item_str = sprintf($itemTpl, $musicArray['Title'], $musicArray['Description'], $musicArray['MusicUrl'], $musicArray['HQMusicUrl']);
- $xmlTpl = "<xml>
- <ToUserName><![CDATA[%s]]></ToUserName>
- <FromUserName><![CDATA[%s]]></FromUserName>
- <CreateTime>%s</CreateTime>
- <MsgType><![CDATA[music]]></MsgType>
- $item_str
- </xml>";
- $result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time());
- return $result;
- }
- //日志记录
- public function logger($log_content)
- {
- if(isset($_SERVER['HTTP_APPNAME'])){ //SAE
- sae_set_display_errors(false);
- sae_debug($log_content);
- sae_set_display_errors(true);
- }else if($_SERVER['REMOTE_ADDR'] != "127.0.0.1"){ //LOCAL
- $max_size = 500000;
- $log_filename = "log_wx.xml";
- if(file_exists($log_filename) and (abs(filesize($log_filename)) > $max_size)){unlink($log_filename);}
- file_put_contents($log_filename, date('Y-m-d H:i:s').$log_content."\r\n", FILE_APPEND);
- }
- }
- public function getToken($appid,$appsecret,$jsonid){
-
- $file = file_get_contents("json/{$jsonid}_token.json",true);
- $result = json_decode($file,true);
- if (time() > $result['expires']){
- $data = array();
- $data['access_token'] = getNewToken($appid,$appsecret);
- $data['expires']=time()+7200;
- $jsonStr = json_encode($data);
- $fp = fopen("json/{$jsonid}_token.json", "w");
- fwrite($fp, $jsonStr);
- fclose($fp);
- return $data['access_token'];
- }else{
- return $result['access_token'];
- }
- }
- public function getNewToken($appid,$appsecret){
- $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$appsecret}";
- $access_token_Arr = https_request($url);
- return $access_token_Arr['access_token'];
- }
- public function https_request ($url){
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
- $out = curl_exec($ch);
- curl_close($ch);
- return json_decode($out,true);
- }
- public function http_post_data($url, $data_string) {
-
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_POST, 1);
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
- curl_setopt($ch, CURLOPT_HTTPHEADER, array(
- 'Content-Type: application/json; charset=utf-8',
- 'Content-Length: ' . strlen($data_string))
- );
- ob_start();
- curl_exec($ch);
- $return_content = ob_get_contents();
- //echo $return_content."<br>";
- ob_end_clean();
-
- $return_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
- // return array($return_code, $return_content);
- return $return_content;
- }
-
- }
- ?>
|