From cf151ca68bf2ea61261891550e6a72418477578b Mon Sep 17 00:00:00 2001 From: xu xianhua Date: Wed, 2 Jan 2013 15:16:15 +0800 Subject: [PATCH] Weixin API SDK Weixin API SDK --- .gitattributes | 22 +++++++ .gitignore | 163 +++++++++++++++++++++++++++++++++++++++++++++++ demo.php | 54 ++++++++++++++++ sdk.jpg | Bin 0 -> 34976 bytes weixin.class.php | 118 ++++++++++++++++++++++++++++++++++ 5 files changed, 357 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 demo.php create mode 100644 sdk.jpg create mode 100644 weixin.class.php diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..412eeda --- /dev/null +++ b/.gitattributes @@ -0,0 +1,22 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# Custom for Visual Studio +*.cs diff=csharp +*.sln merge=union +*.csproj merge=union +*.vbproj merge=union +*.fsproj merge=union +*.dbproj merge=union + +# Standard to msysgit +*.doc diff=astextplain +*.DOC diff=astextplain +*.docx diff=astextplain +*.DOCX diff=astextplain +*.dot diff=astextplain +*.DOT diff=astextplain +*.pdf diff=astextplain +*.PDF diff=astextplain +*.rtf diff=astextplain +*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5ebd21a --- /dev/null +++ b/.gitignore @@ -0,0 +1,163 @@ +################# +## Eclipse +################# + +*.pydevproject +.project +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.classpath +.settings/ +.loadpath + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# CDT-specific +.cproject + +# PDT-specific +.buildpath + + +################# +## Visual Studio +################# + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.sln.docstates + +# Build results +[Dd]ebug/ +[Rr]elease/ +*_i.c +*_p.c +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.vspscc +.builds +*.dotCover + +## TODO: If you have NuGet Package Restore enabled, uncomment this +#packages/ + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf + +# Visual Studio profiler +*.psess +*.vsp + +# ReSharper is a .NET coding add-in +_ReSharper* + +# Installshield output folder +[Ee]xpress + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish + +# Others +[Bb]in +[Oo]bj +sql +TestResults +*.Cache +ClientBin +stylecop.* +~$* +*.dbmdl +Generated_Code #added for RIA/Silverlight projects + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML + + + +############ +## Windows +############ + +# Windows image file caches +Thumbs.db + +# Folder config file +Desktop.ini + + +############# +## Python +############# + +*.py[co] + +# Packages +*.egg +*.egg-info +dist +build +eggs +parts +bin +var +sdist +develop-eggs +.installed.cfg + +# Installer logs +pip-log.txt + +# Unit test / coverage reports +.coverage +.tox + +#Translations +*.mo + +#Mr Developer +.mr.developer.cfg + +# Mac crap +.DS_Store diff --git a/demo.php b/demo.php new file mode 100644 index 0000000..0fd54c4 --- /dev/null +++ b/demo.php @@ -0,0 +1,54 @@ +valid(); +$weixin->getMsg(); +$type = $weixin->msgtype; + +if ($type==='text') { //文本信息 + if ($weixin->msg['Content']=='Hello2BizUser') { + //关注成功后的信息 + $note = '你已经成功关注该公众账号'; + }else{ + $note = '你好,你发的信息是:'.$weixin->msg['Content']; + } + $reply = $weixin->makeText($note); +}elseif ($type==='location') { + $note = '您的位置在: '.$weixin->msg['Label'].'坐标是: X:'.$weixin->msg['Location_X'].' Y:'.$weixin->msg['Location_Y']; + $reply = $weixin->makeText($note); +}elseif ($type==='image') { + $news = array( + 'content' =>'这个是图文消息', + 'itemsCount' => 2 //内容条数最大10 + ); + $news['items'] = array( + array( + 'title' => '微信 公众平台消息接口 SDK', + 'description' => '微信 公众平台消息接口SDK 说明', + 'picurl' => 'http://www.xhxu.cn/weixin/sdk.jpg', //图片地址为接口域名下图片 + 'url' => 'http://www.xhxu.cn' + ), + array( + 'title' => '微信 公众平台消息接口 SDK', + 'description' => '微信 公众平台消息接口 SDK 说明2', + 'picurl' => 'http://www.xhxu.cn/weixin/sdk.jpg', + 'url' => 'http://www.xhxu.cn' + ) + ); + $reply = $weixin->makeNews($news); +} +//输出 +$weixin->reply($reply); diff --git a/sdk.jpg b/sdk.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bcae2b8c53e067ae9ea1c7e26286e04cb65cfbb4 GIT binary patch literal 34976 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 literal 0 HcmV?d00001 diff --git a/weixin.class.php b/weixin.class.php new file mode 100644 index 0000000..4760b1b --- /dev/null +++ b/weixin.class.php @@ -0,0 +1,118 @@ +token = $token; + $this->debug = $debug; + } + public function setFlag() + { + $this->flag = true; + } + public function getMsg() + { + $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; + if ($this->debug) { + file_put_contents('./log.txt', $postStr."\n",FILE_APPEND); + } + if (!empty($postStr)) { + $this->msg = (array)simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); + $this->msgtype = strtolower($this->msg['MsgType']); + } + } + public function makeText($text='') + { + $CreateTime = time(); + $FuncFlag = $this->flag ? 1 : 0; + $textTpl = " + msg['FromUserName']}]]> + msg['ToUserName']}]]> + {$CreateTime} + + + %s + "; + return sprintf($textTpl,$text,$FuncFlag); + } + public function makeNews($newsData=array()) + { + $CreateTime = time(); + $FuncFlag = $this->flag ? 1 : 0; + $newTplHeader = " + msg['FromUserName']}]]> + msg['ToUserName']}]]> + {$time} + + + %s"; + $newTplItem = " + <![CDATA[%s]]> + + + + "; + $newTplFoot = " + %s + "; + $Content = ''; + if (is_array($newsData['items'])) { + foreach ($newsData['items'] as $item) { + $Content .= sprintf($newTplItem,$item['title'],$item['description'],$item['picurl'],$item['url']); + } + } + $header = sprintf($newTplHeader,$newsData['content'],$newsData['itemsCount']); + $footer = sprintf($newTplFoot,$FuncFlag); + return $header . $Content . $footer; + } + public function reply($data) + { + if ($this->debug) { + file_put_contents('./reply.txt', $data."\n",FILE_APPEND); + } + echo $data; + } + public function valid() + { + if ($this->checkSignature()) { + if( $_SERVER['REQUEST_METHOD']=='GET' ) + { + echo $_GET['echostr']; + exit; + } + }else{ + file_put_contents('./log.txt', 'valid fild'."\n",FILE_APPEND); + exit; + } + } + private function checkSignature() + { + $signature = $_GET["signature"]; + $timestamp = $_GET["timestamp"]; + $nonce = $_GET["nonce"]; + + $tmpArr = array($this->token, $timestamp, $nonce); + sort($tmpArr); + $tmpStr = implode( $tmpArr ); + $tmpStr = sha1( $tmpStr ); + + if( $tmpStr == $signature ){ + return true; + }else{ + return false; + } + } +} +