微信公眾平臺的開發過程及其要點
微信公眾平臺的搭建,首先需要確定整體的架構模式,我們一般選用B/S的整體架構模式,手機或者pc端可以通過關註微信公眾
號,進而訪問和操作公眾號中的內容,其中的主要搭建包括:
A.使用xampp繼承開發環境來搭建後臺,需要用到的服務器和數據庫。(apache+mysql)
B.前端頁面通過html+php動態網頁來實現。如果再加點js+css效果就顯示的更加完美了。
1.首先開發者需要申請一個微信的公眾號,由於目前微信開放的微信接口測試號提供了與微信公眾平臺類似的功能,只是在某些
接口的訪問權限和次數上有一定的限制,所以對於初學者,可以先申請一個微信接口測試號。
http://weixin.qq.com/
2.接下來做的是對微信服務器以及對數據庫網頁服務器的部署。
服務器可以選擇阿裏雲,百度雲,騰訊雲等服務器,然後再服務器端完成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.系統的原理
信公眾平臺的數據交互線路一般按照“微信用戶客戶端—微信服務器(我的公眾號)—網微站服務器
(核心代碼頁)—微信服務器(我的公眾號)—微信客戶端”,每一次的數據交互都是通過用戶發送
消息進行請求。微信公眾平臺提供消息接口的行為標準是指導數據進行交互。如果微信公眾號接入
了消息接口,當用戶在向公眾號發送消息請求時,微信服務器將通過HTTP 請求傳送給網站服務器,
網站服務器會根據我們提前設置好的規則進行響應,並回復指定的操作或消息。
4.進行前臺瀏覽器或者手機微信端和後臺數據庫的交互
安裝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.
為了更好的服務用戶,可以開發屬於自己的自定義菜單,公眾平臺已經為開發者提供了在線接口調試工具,開發者在這裏應該選擇的 接口類型為基礎支持,選擇的接口列表為獲取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
微信公眾平臺的開發過程及其要點