微信公衆平臺的搭建,首先須要肯定總體的架構模式,咱們通常選用B/S的總體架構模式,手機或者pc端能夠經過關注微信公衆javascript
號,進而訪問和操做公衆號中的內容,其中的主要搭建包括:php
A.使用xampp繼承開發環境來搭建後臺,須要用到的服務器和數據庫。(apache+mysql)css
B.前端頁面經過html+php動態網頁來實現。若是再加點js+css效果就顯示的更加完美了。html
1.首先開發者須要申請一個微信的公衆號,因爲目前微信開放的微信接口測試號提供了與微信公衆平臺相似的功能,只是在某些前端
接口的訪問權限和次數上有必定的限制,因此對於初學者,能夠先申請一個微信接口測試號。java
http://weixin.qq.com/
2.接下來作的是對微信服務器以及對數據庫網頁服務器的部署。mysql
服務器能夠選擇阿里雲,百度雲,騰訊雲等服務器,而後再服務器端完成xampp的下載和總體部署。 linux下xampp集成包安裝配置方法 http://www.cnblogs.com/ygyg/p/5395207.html xampp的下載地址 https://www.apachefriends.org/zh_cn/index.html wget https://downloadsapachefriends.global.ssl.fastly.net/xampp-files/5.6.30/xampp-linux-x64-5.6.30-0-installer.run
3.系統的原理linux
信公衆平臺的數據交互線路通常按照「微信用戶客戶端—微信服務器(個人公衆號)—網微站服務器
(核心代碼頁)—微信服務器(個人公衆號)—微信客戶端」,每一次的數據交互都是經過用戶發送
消息進行請求。微信公衆平臺提供消息接口的行爲標準是指導數據進行交互。若是微信公衆號接入
了消息接口,當用戶在向公衆號發送消息請求時,微信服務器將經過HTTP 請求傳送給網站服務器,
網站服務器會根據咱們提早設置好的規則進行響應,並回復指定的操做或消息。
4.進行前臺瀏覽器或者手機微信端和後臺數據庫的交互git
安裝php-curl apt-get install php5-curl 啓動xampp開發環境 /opt/lampp/lampp start 向服務器上傳校驗文件,與微信公衆平臺校驗,以一微信公衆平臺稅務系統爲例,校驗文件內容能夠爲: <?php $text[0]="請點擊相應按鈕完成您辦理的業務。"; $text[1]="歡迎關注林海市國稅系統微信公衆平臺!"; $text[2]="很高興爲你服務!"; $text[3]="有事請留言,咱們會在第一時間爲您解決!"; include "wechat.class.php"; $options = array('token'=>'weixin_abc', //填寫你設定的key
'encodingaeskey'=>'encodingaeskey', //填寫加密用的EncodingAESKey,如接口爲明模式可忽略
'appid' => 'wxe64345b8801234ad', //填寫與本身公衆號相對應的appid
'appsecret' => 'f21524rty822rttycd1e9c846566da8676' //填寫與本身公衆號相對應的appsecret
); print_r($options);//自定義菜單開發 $button_data = array (
'button' => array (
0 => array (
'name' => '我要報稅',
'sub_button' => array (
0 => array (
'type' => 'view',
'name' => '身份綁定',
'url' => '115.28.26.89/bangding1.php', ),
1 => array (
'type' => 'view',
'name' => '申報納稅',
'url' => 'http://115.28.26.89/userlogin.php', ),
2 => array (
'type' => 'view',
'name' => '業務辦理',
'url' => 'http://115.28.26.89/ywbl.php', ),
3 => array (
'type' => 'view',
'name' => '辦稅指南',
'url' => '115.28.26.89/zhinan.php', ), ), ),
1 => array (
'name' => '我要查詢',
'sub_button' => array (
0 => array (
'type' => 'view',
'name' => '最新通知',
'url' => '115.28.26.89/zxgg.php', ),
1 => array (
'type' => 'view',
'name' => '發票信息查詢',
'url' => '115.28.26.89/fpxxcx.php', ),
2 => array (
'type' => 'view',
'name' => '稅收查詢',
'url' => '115.28.26.89/sscx.php', ),
3 => array (
'type' => 'view',
'name' => '稅收法規',
'url' => '115.28.26.89/ssfg.php', ), ), ),
2 => array (
'name' => '其餘',
'sub_button' => array (
0 => array (
'type' => 'view',
'name' => '留言',
'url' => '115.28.26.89/ly.php', ),
1 => array (
'type' => 'location_select',
'name' => '發送位置',
'key' => 'rselfmenu_2_1', ), ), ), ), ); $weObj = new Wechat($options); $weObj->valid();//明文或兼容模式能夠在接口驗證經過後註釋此句,但加密模式必定不能註釋,不然會驗證失ètype = $weObj->createMenu($button_data);//image上傳照片開發 $type="image"; $data1=array('media'=>'11234','filename'=>'@/opt/lampp/htdocs/pic/fen.jpg' ); print_r($data1); $media_id1=11234;//$result=$weObj->uploadMedia($data1,$type);//print_r($result); $type = $weObj->getRev()->getRevType();
switch($type)
{case Wechat::MSGTYPE_TEXT://$weObj->text(" hello, I'm wechat ,welcome to the linhai guo shui system . can we help you? " )->reply(); $weObj->text($text[rand()%4])->reply(); exit;
break;
case Wechat::MSGTYPE_EVENT:break;
case Wechat::MSGTYPE_IMAGE: $response = $weObj->getRevPic();
foreach($response as $key=>$value) { $weObj->image($value)->reply();//$weObj->text($value)->reply();//$weObj->text($key)->reply();}//$weObj->text("$media_id"+$text[rand()%3])->reply();//$weObj->image($media_id1)->reply();//$weObj->news($data_news)->reply();break;default: $weObj->text('bangding1.php ')->reply(); }?>
5.在自定義接口菜單型中獲取access_token.github
爲了更好的服務用戶,能夠開發屬於本身的自定義菜單,公衆平臺已經爲開發者提供了在線接口調試工具,開發者在這裏應該選擇的 接口類型爲基礎支持,選擇的接口列表爲獲取access_token接口/token,而後輸入本身測試號appid和secret,選擇點擊檢查問題按 鈕,得到我要進行自定義菜單設計的access_token編碼。 當取得access token編碼串之後,繼續在接口的調試工具中進行從新選擇,這時選擇的接口類型爲自定義菜單,自定義接口爲menu 下的create,在參數列表中輸入本身剛纔獲取的access_token編碼,最後在body框中寫入本身編好的自定義菜單編碼。注意這裏的自定 義菜單提交的編碼格式只支持JSON數據結構,他和網站服務器中提交的自定義菜單數組格式不一樣。
在成功的獲取access_token之後,進行自定義接口菜單的調試。
6.而後進行自定義接口json包的上傳驗證。
{"button": [ {"name": "我要辦稅", "sub_button": [ {"type": "view", "name": "身份綁定", "url": "http://114.218.216.89/bangding1.php/" }, {"type": "view", "name": "申報納稅", "url": "http://114.218.216.89/userlogin.php/" }, {"type": "view", "name": "業務辦理", "url": "http://114.218.216.89/ywbl.php/" }, {"type": "view", "name": "辦稅指南", "url": "http://114.128.216.89/zhinan.php/" } ] }, {"name": "我要查詢", "sub_button": [ {"type": "view", "name": "最新通知", "url": "http://114.218.216.89/zxgg.php/" }, {"type": "view", "name": "發票信息查詢", "url": "http://114.218.216.89/fpxxcx.php/" }, {"type": "view", "name": "稅收查詢", "url": "http://115.28.216.89/sscx.php/" }, {"type": "view", "name": "稅收法規", "url": "http://114.218.216.89/ssfg.php/" } ] }, {"name": "其餘", "sub_button": [ {"type": "view", "name": "留言", "url": "http://114.218.216.89/ly.php/" }, {"name": "發送位置", "type": "location_select", "key": "rselfmenu_2_1" } ] } ] }
在提交json body自動定義接口包後,微信公衆平臺會和後臺服務器平臺進行驗證。
7.token與access_token的區別
token是在微信後臺選擇開發模式的時候填寫的,是本身的微信公衆平臺與後臺驗證的關鍵字,相似於一種令牌或者指令。
而access_token則是經過接口調用生成的,在相應的微信公衆平臺接口調試頁面經過輸入本身的appid和appsecret而生成的。 https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx607ad3f161bc9c83&secret=7d955b008d74fafbc6878d48a9641961 https://segmentfault.com/q/1010000003749563 https://mp.weixin.qq.com/debug
8.在經過驗證後,就能夠編寫網頁文件,網頁編寫能夠採用html+php,在加一部分jsp和css,效果會顯得更加完美。
網頁通常上傳在本身的/opt/lampp/htdocs目錄當中。
上傳過程當中可使用Linux自帶的命令rz/sz命令來完成。也可使用工具進行,好比xftp和MobaXtermPersonalEdition等工具。
經過在瀏覽器窗口輸入本身的服務器公網ip地址,或者是本身的域名,就能夠訪問進入到本身的服務器頁面當中。如圖。
經過點擊第一行的PhpMyAdmin能夠進入到數據庫,進而在數據庫中建立愛你,修改查詢等對本身的數據庫進行操做。
9.公衆號中的自動回覆設計
在已經寫好的驗證文件demo.php中進行添加自定義回覆消息,尋找選擇模塊switch語句,而後進行設置MEGTYPE_TEXT。
$weObj->text($text[rand()%4])->reply();添加數組text,併爲其賦值,最後根據用戶消息請求次數給予回覆[15]。 涉及到的核心代碼主要包括:$text[0]="請點擊相應按鈕完成您辦理的業務。
";$text[1]="歡迎關注林海市國稅系統微信公衆平臺!";$text[2]="很高興爲你服務!";switch($type) { $weObj->text($text[rand()%4])->reply(); $response = $weObj->getRevPic(); foreach($response as $key=>$value) { $weObj->image($value)->reply(); } break; default: $weObj->text('wehope.top/bangding1.php ')->reply(); }
10.數據庫的管理和設計
經過與服務器中的數據庫創建鏈接,能夠將用戶的註冊信息,增值稅、消費稅、我的所得稅等信息方便的錄入到數據庫的表單中。同時爲了方便系統管理員對數據庫MySql的管理,
採用了phpMyAdmin技術,經過網頁遠程對數據庫進行有效的管理[16]。 數據庫中的表單建立代碼包括: (1) 註冊表的建立 CREATE table `register` ( `id` int(10) NOT NULL auto_increment, `user` varchar(10) NOT NULL default '0', `regdate` date NOT NULL, `code` varchar(11) NOT NULL default '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ; (2) 給註冊表插入新用戶 insert into register (id,user,regdate,tel) values('','李斯','now()','12345678901') (3) 與數據庫創建鏈接<?php$connect = @ mysql_connect("localhost", "root", "zfdroot")
or die("數據庫連接錯誤");mysql_select_db("bbs", $connect);mysql_query("set names 'utf-8'"); //使用utf-8編碼格式; ?>
11.前臺界面的設計和實現
經過在阿里雲的網站服務器端配置PHP5-curl,採用預約義的$_GET、$_POST變量、能夠收集來自method="post"表單中提交的值,並向服務器和數據庫提交參數。
微信客戶端能夠將用戶輸入的註冊、綁定、納稅等基本信息經過http、ftp等協議傳輸到服務器的數據庫中,同時服務器端經過判斷客戶端的請求類型給出相應的響應信息 部分代碼包括: if(isset($_POST['submit']) && $_POST['submit']) { $sql="insert into register (id,user,regdate,code) values('','$_POST[user]',now(),'$_POST[code]')"; mysql_query($sql); echo "<script language=\"javascript\">alert('註冊成功');history.go(-1)</script>"; }
涉及到的標題設置代碼包括: <?php echo '<img src="/pic/wa.jpg" width="1300" height="400">' ; ?> <head> <title>我要查詢 | 最新通知 </title> <p><font size=7 color= blue >通知公告 </p> </font> <p><hr size=3 color= blue></p><br> </head>
核心代碼包括: <?php error_reporting(E_ALL^E_NOTICE); include("fpxxcx.php"); include("connect.php"); echo '<img src="/pic/fen.jpg" width="1300" height="400">' ; ?> <p><font size=7 color= blue >發票查詢信息明細 </p> </font> <p><hr size=3 color= blue></p><br> <? $sql="select * from luru where haoma= $work "; //倒序排序 $query=mysql_query($sql); while($row=mysql_fetch_array($query)) { ?> <td><b><font color=red size=6 ><center> <?=$row[type]?>類發票</font></b></td></center> 時間:<?echo date("Y年-m月-d日 H:i:s",time());?> <td>編號ID:<?=$row[id]?> </td> <td>發票代碼:<?=$row[daima]?></td> <td>開票日期:<?=$row[date]?> </td> <td>發票號碼:<?=$row[haoma]?></td> <td>付款方名稱:<?=$row[user]?> </td> <td>身份識別號碼:<?=$row[uid]?></td> <td>工程項目名稱:<?=$row[user1]?> </td> <td>金額:<?=$row[money]?></td> <td>利率:<?=$row[money1]?> </td> <td>備註:</td> <? } ?>
16:41:46
其中的關鍵代碼包括: const EVENT_LOCATION = 'LOCATION'; //上報地理位置 if (isset($this->_receive['Location_X'])){ return array( 'x'=>$this->_receive['Location_X'], 'y'=>$this->_receive['Location_Y'], ); } else return false; }
12.資料文檔下載
WeChatPHPSDK,讓PHP接入微信公衆平臺更便捷 WeChatPHP-SDK-Intro 其它微信公衆號開發文檔若干 https://github.com/dodgepudding/wechat-php-sdk https://mp.weixin.qq.com/wiki
13.構造函數及其參數
.構造函數參數 public function __construct($options) { $this->token = isset($options['token'])?$options['token']:''; $this->encodingAesKey = isset($options['encodingaeskey'])?$options['encodingaeskey']:''; $this->appid = isset($options['appid'])?$options['appid']:''; $this->appsecret = isset($options['appsecret'])?$options['appsecret']:''; $this->debug = isset($options['debug'])?$options['debug']:false; $this->logcallback = isset($options['logcallback'])?$options['logcallback']:false; }
14.遇到的問題
(1)從微信客戶端提交的數據,在數據庫中顯示常看時,顯示亂碼
解決措施:文件以及數據庫的編碼格式儘可能統一修改爲utf-8格式。
(1)從微信客戶端提交的數據,在數據庫中顯示常看時,顯示亂碼 解決措施:文件以及數據庫的編碼格式儘可能統一修改爲utf-8格式。 (2)圖片沒法顯式 緣由爲路徑不對, <img src="/pic/deng.jpg" width="1300" height="400"> 中缺乏了/pic中的/
2018-01-17
16:09:0416:09:04