1 公眾號准備
首先申請一個公眾號申請公眾號網頁
由於一般的個人訂閱號開放的功能有限,作為學習者,我們並不推薦使用這種賬號的開發者模式進行開發,而是另外申請一個測試號進行開發學習,測試號開放的功能基本可以滿足我們的學習需求。
默認的測試號登陸進去是這樣子的
2 服務器准備
微信開發需要一台具有公網IP的服務器,通常可以使用各種雲平台的服務器:如騰訊雲,阿里雲等,大多數都是收費的,如果僅僅是體驗一下,可以使用免費的新浪雲sae服務器
2.1 新浪sae服務器的申請和使用(僅支持PHP)
2.1.1 創建應用
注冊或登錄,點擊控制台->雲應用SAE,點擊創建應用
選擇空間(運行環境選擇標准環境,其他的需要付費)
2.1.2 代碼管理
在應用列表選擇管理
選擇運行環境管理,代碼管理,創建新版本
新建完成后可以直接在線編輯代碼上傳代碼包
2.1.3 訪問測試
創建新版本時默認是沒有代碼的,故直接訪問結果是404
這時可以通過在線編輯或者上傳代碼包的方式增加代碼,比如我在線編輯一個index.html
保存之后再訪問
由於還沒實名認證,瀏覽器給出了風險提示,但是我們的代碼已經生效了
實名認證可以到新浪雲用戶中心進行操作
2.1.4 使用git進行代碼控制
在新浪雲創建新運用后,新浪雲默認為我們創建了一個代碼倉庫,地址:https://git.sinacloud.com/newapp,將newapp換成你的二級域名即可,我們可以將這個代碼庫克隆下來
示例:
git clone https://git.sinacloud.com/chzchat
cd chzchat
這樣我們就可以在這個目錄下進行開發,開發完成后使用git命令就可以將代碼推送到代碼庫,代碼庫是和服務器關聯的,這個操作等同於上傳代碼包,但是更方便,關於git的使用可以參考廖雪峰老師的教程
2.2 騰訊雲15天免費雲服務器
2.2.1 領取免費服務器
領取地址,首先需要實名認證,這里我選擇的操作系統是Ubuntu14
開通后會在控制台的通知那里收到一條信息,里面有操作系統的初始密碼,我們可以選擇重置密碼來設置新密碼
2.2.2 登陸服務器
-
在瀏覽器端登陸服務器
選擇登陸操作,需要微信授權,選擇標准登陸模式
用戶名默認為ubuntu,登陸密碼為初始密碼或重置后的密碼,成功登陸
-
使用xshell登陸
新建連接
雙擊新建立的連接,按提示輸入用戶名和密碼即可成功登陸
-
使用xftp登陸
使用xftp可以在兩台計算機之間快速傳輸文件,連接方式選擇sftp,其他操作和xshell基本一致
傳輸失敗的原因可能是Linux的目錄沒有寫入權限,這時我們可以使用xshell先設置好目錄權限
chmod 777 目錄名
2.2.3 配置開發環境
-
配置apache2+php5+mysql
sudo apt-get update sudo apt-get install apache2 sudo apt-get install php5 sudo apt-get install mysql-server mysql-client
測試apache2是否安裝成功
瀏覽器訪問服務器公網IP
測試php是否安裝成功
sudo vim /var/www/html/phpinfo.php
phpinfo.php內容
<?php phpinfo();
保存退出編輯,訪問phpinfo.php
測試mysql是否安裝成功
#連接數據庫 mysql -uroot -p #輸入密碼
-
其他環境配置請自行百度
3 公眾號與服務器關聯
3.1 微信入口文件
在開發目錄下新建微信入口文件wx_entrance.php
<?php define('TOKEN','chz'); $signature=$_GET['signature']; $timestamp=$_GET['timestamp']; $nonce=$_GET['nonce']; $echostr=$_GET['echostr']; $tmpArr=array(TOKEN,$timestamp,$nonce); sort($tmpArr,SORT_STRING); // 拼接字符串 sha1加密 $tmpStr=join($tmpArr); $tmpStr=sha1($tmpStr); if ($tmpStr==$signature) { echo $echostr; }else{ echo "error"; exit; }
3.2 接口配置信息
上傳代碼到服務器,配置微信測試號接口配置信息
URL填:http://你的服務器公網IP(或域名)/微信入口文件名
Token填微信入口文件中定義的TOKEN,如果信息匹配且服務器器已經實名驗證,則提交后提示配置成功
4 微信開發小demo——微信消息的接入和消息回復
修改微信入口文件的代碼為
<?php // 加密簽名 $signature=$_GET['signature']; // 時間戳 $timestamp=$_GET['timestamp']; // 隨機出 $nonce=$_GET['nonce']; // 隨機字符串 $echostr=$_GET['echostr']; // TOKEN define('TOKEN','chz'); // 字典序排序 $tmpArr=array(TOKEN,$timestamp,$nonce); sort($tmpArr,SORT_STRING); // 拼接字符串 sha1加密 $tmpStr=join($tmpArr); $tmpStr=sha1($tmpStr); // 加密簽名的比較 if ($tmpStr==$signature) { echo $echostr; }else{ echo "error"; exit; } // 接受xml數據 $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; if (!$postStr) { echo "post data error"; exit; } $postObj=simplexml_load_string($postStr,'SimpleXMLElement', LIBXML_NOCDATA ); $MsgType=$postObj->MsgType; switch ($MsgType) { case 'text': $Content=$postObj->Content; switch ($Content) { case 'hello': $xml='<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%d</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[%s]]></Content> </xml>'; echo sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),'歡迎關注'); break; default: $xml='<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%d</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[%s]]></Content> </xml>'; echo sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),$postObj->Content); break; } break; case 'image':