好久就想實現這個功能了,可是一直沒心情,好在收到網易實習的offer,於是心情大好,實現了這個功能來和大家共用。大家可以先看效果吧:只要關注微信公眾帳號say_magic,
然後開啟網址http://www.saymagic.cn/weixin/wall.php,在公眾號裡回複:上牆+您要說的話,您就會發現您說的話會同步到上面的網址上。
整個流程大概是這樣:
公眾號的後台接收到訊息並將訊息存入資料庫,而前台呢,則使用js的setTimeout函數進行迴圈的使用ajax向後台get資料來擷取資料庫的最新資料,當明白整個原理後,就顯得很簡單,接下來看一下主要的代碼:
wall.php(微信牆頁面 )
微信牆 query($wxQuery);while ($wxRow=mysql_fetch_row($wxResult)) { $lastID or $lastID = $wxRow[0];//0代表資料庫中的id,這個要和你自己資料庫相對應 $content = $wxRow[4];//4也是一樣的echo "",$content,"\n";}$lastID = (int)$lastID;?> <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.3.min.js"></script><script>var lastID = ;function getMessages() { $.ajax({ url: "message.php?lastID=" + lastID + "&v=" + (new Date()/1), dataType: "json", error: function(){ alert("Error loading JSON document"); }, success: function(data){//如果調用php成功 $.each(data,function(i,n){ message = "" + n + ""; $(message).prependTo("#msgBox").hide().slideDown("slow"); lastID = i;}); } });window.setTimeout(getMessages, 5000);}getMessages();</script>
mysql操作檔案sql.php:
db_host = $db_host; $this->db_user = $db_user; $this->db_pwd = $db_pwd; $this->db_database = $db_database; $this->conn = $conn; $this->coding = $coding; $this->connect(); } /*資料庫連接*/ public function connect() { if ($this->conn == "pconn") { //永久連結 $this->conn = mysql_pconnect($this->db_host, $this->db_user, $this->db_pwd); } else { //即使連結 $this->conn = mysql_connect($this->db_host, $this->db_user, $this->db_pwd); } if (!mysql_select_db($this->db_database, $this->conn)) { if ($this->show_error) { $this->show_error("資料庫不可用:", $this->db_database); } } //mysql_query("SET NAMES $this->coding"); } /*資料庫執行語句,可執行查詢添加修改刪除等任何sql語句*/ public function query($sql) { if ($sql == "") { $this->show_error("SQL語句錯誤:", "SQL查詢語句為空白"); } $this->sql = $sql; $result = mysql_query($this->sql, $this->conn); if (!$result) { //調試中使用,sql語句出錯時會自動列印出來 if ($this->show_error) { $this->show_error("錯誤SQL語句:", $this->sql); } } else { $this->result = $result; } return $this->result; } }?>
不斷從資料庫擷取最新資料的檔案message.php.
1000) { die("possible deep recursion attack"); } foreach ($array as $key => $value) { if (is_array($value)) { arrayRecursive($array[$key], $function, $apply_to_keys_also); } else { $array[$key] = $function($value); } if ($apply_to_keys_also && is_string($key)) { $new_key = $function($key); if ($new_key != $key) { $array[$new_key] = $array[$key]; unset($array[$key]); } } } $recursive_counter--;}function JSON($array) {arrayRecursive($array, "urlencode", true);$json = json_encode($array);return urldecode($json);}$lastID = (int) $_GET["lastID"];include_once("sql.php");$backValue=array();$wxQuery = "SELECT * FROM wx_note WHERE id > ".$lastID." ORDER BY id LIMIT 3";$wxResult = $mysql->query($wxQuery);while ($wxRow=mysql_fetch_row($wxResult)) {$recordID = $wxRow[0];$content = $wxRow[4]; //$xml=$content; $backValue[$recordID ] = $content;}echo JSON($backValue);?>
最後,如果需要的話,還有背景圖片:/program/UploadPic/2014-3/2014317135337634.jpg.
當然,這裡說的只是後端的部分,在處理微信訊息上,你還需要把收到的訊息存入資料庫,這應該沒什麼難度,就不放代碼了。這裡一定要記得和剛才操作的方法中的資料格式相對應,這是最容易出錯的了。好的,如果有什麼疑問的話,歡迎留言。
轉載請註明:我的原部落格連結http://blog.saymagic.cn/blog.php?id=58