首页 > 上网技巧 > 电脑小技巧 > php+ajax实现微信上墙

php+ajax实现微信上墙

时间:2017-09-22 16:52 作者:QQ地带 我要评论

整个流程大概是这样:
公众号的后台接收到消息并将消息存入数据库,而前台呢,则使用js的setTimeout函数进行循环的使用ajax向后台get数据来获取数据库的最新数据,当明白整个原理后,就显得很简单,接下来看一下主要的代码:
wall.php(微信墙页面 )
 
  1. <?php   
  2.      include_once("sql.php");   
  3. ?>   
  4. <!doctype html>   
  5. <html>   
  6. <head>   
  7. <meta charset="utf-8" />   
  8. <title>微信墙</title>   
  9. <style>   
  10.        
  11. #msgBox div {   
  12.     padding: 19px;   
  13.     margin-bottom: 20px;   
  14.     background: #aaaaaa;   
  15.     border: 2px solid #e3e3e3;   
  16.     -webkit-border-radius: 4px;   
  17.     -moz-border-radius: 4px;   
  18.     border-radius: 4px;   
  19.     -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.05);   
  20.     -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,0.05);   
  21.     box-shadow: inset 0 1px 1px rgba(0,0,0,0.05);   
  22.     filter:alpha(opacity=60);   
  23.      /* CSS3 standard */   
  24.      opacity:0.4;   
  25.      font-style:italic;   
  26.      font-size:15px;   
  27.      width:50%;   
  28. }   
  29.        
  30. body{   
  31.     background: url(bg_main.jpg);   
  32. }   
  33. </style>   
  34. </head>   
  35. <body>   
  36.     <center>   
  37. <div id="msgBox">   
  38. <?php   
  39. $wxQuery = 'SELECT * FROM wx_note ORDER BY id DESC LIMIT 25';//把wx_msg更改掉   
  40. $wxResult =$mysql->query($wxQuery);   
  41. while ($wxRow=mysql_fetch_row($wxResult)) {   
  42.     $lastID or $lastID = $wxRow[0];//0代表数据库中的id,这个要和你自己数据库相对应   
  43.     $content = $wxRow[4];//4也是一样的   
  44.     echo '<div>',$content,"</div>\n";   
  45. }   
  46. $lastID = (int)$lastID;   
  47. ?>   
  48. </div>   
  49.     
  50. <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.3.min.js"></script>   
  51. <script>   
  52. var lastID = <?php echo $lastID; ?>;   
  53. function getMessages() {   
  54.        $.ajax({   
  55.            url: "message.php?lastID=" + lastID + "&v=" + (new Date()/1),   
  56.         dataType: "json",   
  57.         error: function(){     
  58.             alert('Error loading JSON document');     
  59.         },     
  60.         success: function(data){//如果调用php成功               
  61.                 $.each(data,function(i,n){   
  62.                         message = '<div>' + n + '</div>';   
  63.                         $(message).prependTo('#msgBox').hide().slideDown('slow');   
  64.                         lastID = i;   
  65.                 });   
  66.    
  67.    
  68.         }   
  69.     });    
  70.     window.setTimeout(getMessages, 5000);   
  71. }   
  72. getMessages();   
  73. </script>   
  74.  </center>   
  75. </body>   
  76. </html>   
 
mysql操作文件sql.php:
 
  1. <?php   
  2. $hostname = '***********';   
  3. $dbuser = '***********';   
  4. $dbpass = '***************';   
  5. $dbname = '************';    
  6. $mysql = new mysql( $hostname,$dbuser,$dbpass,$dbname,'','');   
  7.    
  8. class mysql {   
  9.     private $db_host//数据库主机   
  10.     private $db_user//数据库用户名   
  11.     private $db_pwd//数据库用户名密码   
  12.     private $db_database//数据库名   
  13.     private $conn//数据库连接标识;   
  14.     private $result//执行query命令的结果资源标识   
  15.     private $sql//sql执行语句   
  16.     private $row//返回的条目数   
  17.     private $coding//数据库编码,GBK,UTF8,gb2312   
  18.     private $bulletin = true; //是否开启错误记录   
  19.     private $show_error = false; //测试阶段,显示所有错误,具有安全隐患,默认关闭   
  20.     private $is_error = false; //发现错误是否立即终止,默认true,建议不启用,因为当有问题时用户什么也看不到是很苦恼的   
  21.      
  22.     /*构造函数*/   
  23.     public function __construct($db_host$db_user$db_pwd$db_database$conn$coding) {   
  24.         $this->db_host = $db_host;   
  25.         $this->db_user = $db_user;   
  26.         $this->db_pwd = $db_pwd;   
  27.         $this->db_database = $db_database;   
  28.         $this->conn = $conn;   
  29.         $this->coding = $coding;   
  30.         $this->connect();   
  31.     }   
  32.      
  33.     /*数据库连接*/   
  34.     public function connect() {   
  35.         if ($this->conn == "pconn") {   
  36.             //永久链接   
  37.             $this->conn = mysql_pconnect($this->db_host, $this->db_user, $this->db_pwd);   
  38.         } else {   
  39.             //即使链接   
  40.             $this->conn = mysql_connect($this->db_host, $this->db_user, $this->db_pwd);   
  41.         }   
  42.      
  43.         if (!mysql_select_db($this->db_database, $this->conn)) {   
  44.             if ($this->show_error) {   
  45.                 $this->show_error("数据库不可用:"$this->db_database);   
  46.             }   
  47.         }   
  48.         //mysql_query("SET NAMES $this->coding");   
  49.     }   
  50.      
  51.     /*数据库执行语句,可执行查询添加修改删除等任何sql语句*/   
  52.     public function query($sql) {   
  53.         if ($sql == "") {   
  54.             $this->show_error("SQL语句错误:""SQL查询语句为空");   
  55.         }   
  56.         $this->sql = $sql;   
  57.         $result = mysql_query($this->sql, $this->conn);   
  58.    
  59.    
  60.         if (!$result) {   
  61.    
  62.    
  63.             //调试中使用,sql语句出错时会自动打印出来   
  64.             if ($this->show_error) {   
  65.                 $this->show_error("错误SQL语句:"$this->sql);   
  66.             }   
  67.         } else {   
  68.              $this->result = $result;   
  69.         }   
  70.         return $this->result;   
  71.     }   
  72.      
  73. }   
  74. ?>   
 
 
 
不断从数据库获取最新数据的文件message.php.
 
 
  1. <?php   
  2.  header('Content-Type:text/html; charset=UTF-8');//utf-8,使中文不会变成乱码   
  3. /**************************************************************  
  4.  *  
  5.  *  使用特定function对数组中所有元素做处理  
  6.  *  @param  string  &$array     要处理的字符串  
  7.  *  @param  string  $function   要执行的函数  
  8.  *  @return boolean $apply_to_keys_also     是否也应用到key上  
  9.  *  @access public  
  10.  *  
  11.  *************************************************************/   
  12. function arrayRecursive(&$array$function$apply_to_keys_also = false)   
  13. {   
  14.     static $recursive_counter = 0;   
  15.     if (++$recursive_counter > 1000) {   
  16.         die('possible deep recursion attack');   
  17.     }   
  18.     foreach ($array as $key => $value) {   
  19.         if (is_array($value)) {   
  20.             arrayRecursive($array[$key], $function$apply_to_keys_also);   
  21.         } else {   
  22.             $array[$key] = $function($value);   
  23.         }   
  24.     
  25.         if ($apply_to_keys_also && is_string($key)) {   
  26.             $new_key = $function($key);   
  27.             if ($new_key != $key) {   
  28.                 $array[$new_key] = $array[$key];   
  29.                 unset($array[$key]);   
  30.             }   
  31.         }   
  32.     }   
  33.     $recursive_counter--;   
  34. }   
  35.    
  36.    
  37. function JSON($array) {   
  38.     arrayRecursive($array'urlencode', true);   
  39.     $json = json_encode($array);   
  40.     return urldecode($json);   
  41. }   
  42.    
  43.    
  44. $lastID = (int) $_GET['lastID'];   
  45. include_once("sql.php");   
  46. $backValue=array();   
  47.    
  48.    
  49. $wxQuery = "SELECT * FROM wx_note WHERE id > ".$lastID." ORDER BY id LIMIT  3";   
  50. $wxResult = $mysql->query($wxQuery);   
  51. while ($wxRow=mysql_fetch_row($wxResult)) {   
  52.     $recordID = $wxRow[0];   
  53.     $content = $wxRow[4];   
  54.     //$xml=$content;   
  55.     $backValue[$recordID ] = $content;   
  56.    
  57.    
  58. }   
  59.    
  60.    
  61. echo JSON($backValue);   
  62.    
  63.    
  64. ?>   
 
 
 
最后,如果需要的话,还有可以加背景图片。
 
当然,这里说的只是后端的部分,在处理微信消息上,你还需要把收到的消息存入数据库,这应该没什么难度,就不放代码了。这里一定要记得和刚才操作的方法中的数据格式相对应,这是最容易出错的了。好的,如果有什么疑问的话,欢迎留言。

标签: php
顶一下
(1)
50%
踩一下
(1)
50%

Google提供的广告