首页 > 开发 > PHP > 正文

微信墙源码|适用微信公众平台(MySQL、PHP、jQuery、AJAX)

2024-05-04 23:21:04
字体:
来源:转载
供稿:网友
伴随着SNS产品市场的不断成熟,人人网状态墙、新浪微博大屏幕等越来越多地进入展会、晚会等活动现场,很大程度上增强了观众互动。状态墙、微博幕外观相似,但在功能上又有所区别,本质上讲是SNS网站模式不同所决定的。前者较为私密,适合受众之间存在强社交关系时使用,例如高校文艺活动、内部晚会等。后者则相对开放,任何人都能够直接参与,发出的微博在很大程度上还可以为活动造势。因此,展会、抽奖活动常常采用后一种形式。

2013年05月11日,中国互联网创业者大会上,第一面功能完善的“微信墙”横空出世,进一步丰富了活动组织的选择空间。微信墙相对于前述二者,更类似于早年间的短信互动。参与者可以很方便地提问、发表看法,而不用担心自己的“热情参与”会对好友产生骚扰以及在个人主页中留下很多痕迹。与前二者相比,互动更加快捷、灵活、准确,内容与活动主题更贴切。此外,如果能够充分利用微信独具的语音功能,此时相当于每名观众手中都拥有一个麦克风,经过筛选,将可以极大地丰富现场互动。

可惜的是,目前微信并未像人人网、微博公开提供“上墙”服务,开发者需要通过微信公众平台API间接实现微信墙。

/weixin-wall
├── wechat.php 连接微信公众平台 将消息存入数据库
├── wall.php 微信墙
└── message.php 新增消息XML

wechat.php

微信公众平台与服务器通信 将用户发送的消息存入MySQL数据库

12345678910111213141516171819202122232425262728293031323334353637383940414243
<?php/* 微信公众平台API*/ error_reporting(0);// 关闭错误报告 $db = mysqli_connect('localhost', '用户名', '密码', '数据库名') or exit('Unable to connect to MySQL.');mysqli_query($db, 'SET NAMES UTF8');// 连接数据库 if (!$postStr=$GLOBALS['HTTP_RAW_POST_DATA'])	exit;// 无POST内容 退出 $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);	//解析XML $msgType = $postObj->MsgType;	// 获取消息类型 if ($msgType!='text')	exit;// 非文本消息 退出 $openID = antiInjection($postObj->FromUserName);	// 获取发送者openID$content = antiInjection($postObj->Content);		// 获取文本消息内容 record($openID, $content);	// 将消息写入MySQL数据库 function record($openID, $content) {	$recordQuery = "INSERT INTO message (openID, content) VALUES ('$openID', '$content');";	mysqli_query($GLOBALS['db'], $recordQuery);}function antiInjection($value) {	// 反SQL注入	global $db;	if (get_magic_quotes_gpc())		$value = stripslashes($value);	$value = trim($value);	$value = mysqli_real_escape_string($db, $value);	return $value;}?>

wall.php

微信墙主体 访问时加载已经存在的消息
当接收到新消息时,无需刷新,通过AJAX jQuery即可实现消息滚动。

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
<?php$db = mysqli_connect('localhost', '用户名', '密码', '数据库名') or exit('Unable to connect to MySQL.');mysqli_query($db, 'SET NAMES UTF8');?><!doctype html><html><head><meta charset="utf-8" /><title>微信墙</title><style>#msgBox div {	padding: 19px;	margin-bottom: 20px;	background: #f5f5f5;	border: 1px solid #e3e3e3;	-webkit-border-radius: 4px;	-moz-border-radius: 4px;	border-radius: 4px;	-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.05);	-moz-box-shadow: inset 0 1px 1px rgba(0,0,0,0.05);	box-shadow: inset 0 1px 1px rgba(0,0,0,0.05);}</style></head><body><div id="msgBox"><?php$wxQuery = 'SELECT * FROM message ORDER BY recordID DESC LIMIT 20';$wxResult = mysqli_query($db, $wxQuery);while ($wxRow=mysqli_fetch_assoc($wxResult)) {	$lastID or $lastID = $wxRow['recordID'];	$content = $wxRow['content'];	echo '<div>',$content,"</div>/n";}$lastID = (int)$lastID;?></div> <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.3.min.js"></script><script>var lastID = <?php echo $lastID; ?>;function getMessages() {	$.ajax({		url : '/message.php?lastID=' + lastID + '&v=' + (new Date()/1),		success : function(xml){			$(xml).find('message').each(function() {				if ($(this).attr('recordID') > lastID) {					var message = $(this).text();					message = '<div>' + message + '</div>';					$(message).prependTo('#msgBox').hide().slideDown('slow');					lastID = $(this).attr('recordID');				}			});		}	});	window.setTimeout(getMessages, 5000);}getMessages();</script></body></html>

message.php

页面加载完毕后再接收到的新消息 通过XML传送

123456789101112131415161718
<?php$db = mysqli_connect('localhost', '用户名', '密码', '数据库名') or exit('Unable to connect to MySQL.');mysqli_query($db, 'SET NAMES UTF8');header('Content-type: text/xml');$lastID = (int) $_GET['lastID'];echo '<?xml version="1.0" encoding="UTF-8"?>',"/n";?><feitsui><?php$wxQuery = "SELECT * FROM message WHERE recordID > $lastID ORDER BY recordID LIMIT 20";$wxResult = mysqli_query($db, $wxQuery);while ($wxRow=mysqli_fetch_assoc($wxResult)) {	$recordID = $wxRow['recordID'];	$content = $wxRow['content'];	echo '<message recordID="',$recordID,'">',$content,"</message>/n";}?></feitsui>

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表