1、前言php
爲了快速瞭解微信公衆號開發過程,我選擇了php語言來進行微信公衆號開發,選擇php的緣由有兩點,一是網上有不少用php開放微信公衆號的教程,能夠減小學習成本;二是php也比較容易學習,學習門檻低。html
學習php開發微信公衆號,開發者須要有一點php基礎。對於學過其餘編程語言的童鞋,瞭解一些基本的php語法就能夠開始了。個人 PHP基礎學習筆記(一)編程
2、微信公衆號開發的步驟api
3、微信公衆號開發步驟詳解安全
+ 微信公衆號開發入門能夠參考 微信公衆平臺開發入門教程服務器
教程中用的新浪雲作的服務器,註冊新浪雲以後能夠無償使用,讓你學習微信公衆號開發用足夠了。微信
注:註冊新浪雲以後你的帳戶還須要認證,認證經過以後你才能拿建立的域名進行後面的服務器配置(認證時間1-2天)。微信公衆平臺
(先按上面的教程作一遍,作一遍以後有須要再來理解後面的原理)編程語言
+ 關於第二步驗證服務器地址的有效性(成功接入,成爲開發者)函數
1.原理:
2.代碼實現:
<?php //1.TOKEN用於服務器配置 驗證安全性 define("TOKEN", "weixin"); $wechatObj = new wechatCallbackapiTest(); //echostr隨機數已經初始化就驗證 if (isset($_GET['echostr'])) { //2.驗證消息來自微信服務器 $wechatObj->valid(); // $wechatObj->definedItems(); }else{ $wechatObj->responseMsg(); } class wechatCallbackapiTest { public function valid() { $echoStr = $_GET["echostr"]; //若確認這次GET請求來自微信服務器,則原樣返回echostr參數內容,接入生效,成爲開發者成功,不然接入失敗。 if($this->checkSignature()){ header('content-type:text'); echo $echoStr; exit; } } //檢驗signature private function checkSignature() { $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); //將token、timestamp、nonce三個參數進行字典序排序 sort($tmpArr, SORT_STRING); //將三個參數字符串拼接成一個字符串進行sha1加密 $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); //開發者得到加密後的字符串與signature對比,標識該請求來源於微信 if( $tmpStr == $signature ){ return true; }else{ return false; } } //3.依據接口文檔實現業務邏輯 public function responseMsg() { //獲取微信推送過來的post數據(xml數據) $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; if (!empty($postStr)){ //simplexml_load_string() 函數把XML字符串載入對象中。 $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $fromUsername = $postObj->FromUserName; $toUsername = $postObj->ToUserName; $keyword = trim($postObj->Content); $picUrl = $postObj->PicUrl; $msgId = $postObj->MsgId; $mediaId = $postObj->MediaId; $event = strtolower($postObj->MsgType); $msgType = "text"; $msgType2 = "image"; $msgType3 = "music"; $msgType4 = "news"; $time = time(); //返回給用戶文本類型數據 $textTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[%s]]></MsgType> <Content><![CDATA[%s]]></Content> <Event><![CDATA[subscribe]]></Event> <FuncFlag>0</FuncFlag> </xml>"; //粉絲髮送的文本信息 if($event == "text") { $this->responseText($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr, $keyword); } }else{ echo ""; exit; } } //給粉絲髮送文本信息 public function responseText($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr,$keyword) { switch($keyword) { case '三圍' : $contentStr ="我木有三圍,你有嗎?"; break; case '帥哥' : $contentStr ="我是萌妹子,好伐"; break; case '多高': $contentStr = "比你高~"; break; case '女神': $contentStr = "你也長的很好看啊~"; break; case 'i love you': $contentStr = "I love you too 麼麼~"; break; case '這是什麼': $contentStr = "這是個人我的公衆號啊~和其餘公衆號相似"; break; case '?' : $contentStr = '送你一串時間:'.date("Y-m-d H:i:s",time()); break; default : $contentStr = $keyword; break; } $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr; }
依據接口文檔實現業務邏輯後面會單獨總結,以上分享了入門教程,總結了接入成爲開發者的原理,分享創造價值,若是你也是初學微信公衆號開發,但願對你有點幫助。