文档章节

PHPWEB在线客服

T_kress
 T_kress
发布于 2015/11/28 14:05
字数 758
阅读 177
收藏 11

首先我用的是Openfire版本是:3.10.3 下载地址Openfire ; 安装就不说了, 安装完成需要做的设置 1.安装2个插件

输入图片说明

在openfire 有效的插件里有 这2个插件都是用来做WEB端用户添加、更新、查询openfire账号和查询用户状态的

PHP 端 方法就放出来一个 还有都是业务端的 插件都有文档大家可以自己去看看 基本业务都是和插件有关的

/**
 *//这个需要安装OPenfire User Service插件  
 * 获取用户当前在线状态
 *
 * @param unknown $username
 * @return mixed text[空闲、在线、离开、电话中、正忙、unavailable]
 */
function get_of_user_status($username)
{
	$_CFG = $GLOBALS['_CFG'];//设置的全局变量
	
	$of_ip = $_CFG['chat_server_ip'];//openfire 服务器地址
	$of_port = $_CFG['chat_server_port'];//插件端口一般默认9090
	
	$of_url = get_of_url($of_ip, $of_port);
	$of_domain = $_CFG['chat_server_ip'];//这个是openfire 服务器名称

	$url = $of_url.'/plugins/presence/status?jid='.$username.'@'.$of_domain.'&type=xml';
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $url);
	
	// 设置可以读取返回值
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

	// 运行curl
	$result = curl_exec ( $ch );

	// 关闭
	curl_close ( $ch );

	$xml = simplexml_load_string($result);

	//$type = $xml->attributes()->type;
	$type=$xml->show;
	if(!empty($type))
	{
		//修改stat
		switch($type){
			case "chat":
				$type="空闲";
			break;
			case "away":
				$type="离开";
			break;
			case "away":
				$type="离开";
			break;
			case "dnd":
				$type="勿扰";
			break;
			case "xa":
				$type="忙碌";
			break;
		}
		//end
		return (string)$type;
	}else{
		 if(!empty($xml->status))
		{
			$status = $xml->status;
			return (string)$status;
		}	
		$type="在线";
		return (string)$type;
	}
	//var_dump($xml);
	

	return 'unavailable';
}


// WEB 端测试JS test.js

// XMPP服务器BOSH地址
var BOSH_SERVICE = 'http://服务器地址:7070/http-bind/';
// XMPP连接
var connection = null;
// 当前状态是否连接
var connected = false;
// 当前登录的JID
var jid = "";
// 连接状态改变的事件
function onConnect(status) {
  console.log(status)
  if (status == Strophe.Status.CONNFAIL) {
    alert("连接失败!");
  } else if (status == Strophe.Status.AUTHFAIL) {
    alert("登录失败!");
  } else if (status == Strophe.Status.DISCONNECTED) {
    alert("连接断开!");
    connected = false;
  } else if (status == Strophe.Status.CONNECTED) {
    alert("连接成功,可以开始聊天了!");
    connected = true;
    // 当接收到<message>节,调用onMessage回调函数
    connection.addHandler(onMessage, null, 'message', null, null, null);
    // 首先要发送一个<presence>给服务器(initial presence)
    connection.send($pres().tree());
  }
}
// 接收到<message>
function onMessage(msg) {
  // 解析出<message>的from、type属性,以及body子元素
  var from = msg.getAttribute('from');
  var type = msg.getAttribute('type');
  var elems = msg.getElementsByTagName('body');
  if (type == "chat" && elems.length > 0) {
    var body = elems[0];
    $("#msg").append(from + ":<br>" + Strophe.getText(body) + "<br>")
  }
  return true;
}
$(document).ready(function() {
  // 通过BOSH连接XMPP服务器
  $('#btn-login').click(function() {
    if(!connected) {
      connection = new Strophe.Connection(BOSH_SERVICE);
      connection.connect($("#input-jid").val(), $("#input-pwd").val(), onConnect);
      jid = $("#input-jid").val();
    }
  });
  // 发送消息
  $("#btn-send").click(function() {
    if(connected) {
      if($("#input-contacts").val() == '') {
        alert("请输入联系人!");
        return;
      }
      // 创建一个<message>元素并发送
      var msg = $msg({
        to: $("#input-contacts").val(), 
        from: jid, 
        type: 'chat'
      }).c("body", null, $("#input-msg").val());
      connection.send(msg.tree());
      $("#msg").append(jid + ":<br>" + $("#input-msg").val() + "<br>");
      $("#input-msg").val('');
    } else {
      alert("请先登录!");
    }
  });
});

html

<!DOCTYPE html>
<html>
<head>
  <script src='http://cdn.bootcss.com/jquery/1.9.1/jquery.min.js'></script>
  <script src='http://cdn.bootcss.com/strophe.js/1.1.3/strophe.min.js'></script>
<!--这里用CDN可以直接用-->
  <script src='test.js'></script>
</head>
<body>
  JID:<input type="text" id="input-jid">
  <br>
  密码:<input type="password" id="input-pwd">
  <br>
  <button id="btn-login">登录</button>
  <div id="msg" style="height: 400px; width: 400px; overflow: scroll;"></div>
  联系人JID:
  <input type="text" id="input-contacts">
  <br>
  消息:
  <br>
  <textarea id="input-msg" cols="30" rows="4"></textarea>
  <br>
  <button id="btn-send">发送</button>
</body>
</html>

实现的效果图 这个HTMLWEB客户端

© 著作权归作者所有

共有 人打赏支持
T_kress
粉丝 2
博文 9
码字总数 3815
作品 0
杭州
程序员
如何选择在线客服系统

随着互联网的迅猛发展及互联网服务的逐步完善,加上电子商务被大众广泛接受,涌现了一批非常优秀的针对电子商务的服务软件-在线客服系统,如Echo,老马在线客服等。如何选择可用的并且适合自...

laomaecho
2011/04/06
777
0
用drupal7出现的问题?

Warning: fileputcontents(temporary://filB800.tmp): failed to open stream: "DrupalTemporaryStreamWrapper::streamopen" call failed in fileunmanagedsavedata() (line 1898 of F:wangz......

Inhere
2013/08/05
1K
7
phpweb网站搬家办法

搬家过程: 1、备份网站文件和数据库, 注:数据库的备份一定要注意,编码格式(utf-8)哦,或者导出数据库的文件打开看看,是不是乱码,不是就可以;有问题就需要注意导出时候的编码方式了。...

afriendly
2016/12/10
17
0
apache+php+mysql运行环境

很多朋友想要在window下配置apache+php+mysql运行环境,其实从这么长时间的经验来看,win2003下还是用iis,如果为了学习或对apache特别熟悉的朋友可以用apache 一 准备 1 下载apache http:/...

roockee
2015/03/04
0
0
求助:客服系统消息分发 消息分配设计

大家好,现在遇到一个需求,是一个在线客服系统,用户登录网站之后,可以给在线客服发送消息, 客服状态只有上线 和下线两种状态,上线就是要接受用户的咨询,下线就不接受用户的咨询,如果客...

steven111
2015/11/20
320
3

没有更多内容

加载失败,请刷新页面

加载更多

下一页

阿里云API网关使用教程

API 网关(API Gateway)提供高性能、高可用的 API 托管服务,帮助用户对外开放其部署在 ECS、容器服务等阿里云产品上的应用,提供完整的 API 发布、管理、维护生命周期管理。用户只需进行简...

mcy0425
22分钟前
3
0
解决远程登陆误按ctrl+s锁屏假死恢复

使用putty时,偶尔发生屏幕假死,不能输入等情况。 后来发现,只要数据ctrl+s,就会假死;输入ctrl+q就可以恢复过来。 很多刚从windows转移到linux上来工作的朋友,在用vi/vim编辑文件时,常常...

HJCui
25分钟前
0
0
@Transactional

事务管理是应用系统开发中必不可少的一部分。Spring 为事务管理提供了丰富的功能支持。Spring 事务管理分为编程式和声明式的两种方式。编程式事务指的是通过编码方式实现事务;声明式事务基于...

asdf08442a
29分钟前
2
0
widows下强制解除8080端口占用问题

使用win+R打开命令窗口 输入以下命令查看哪个任务占用了8080端口 netstat -ano |findstr "8080" 然后通过任务id强制关闭占用该端口的进程 tskill 10044 // 自己的试情况而定,这个ID是LISTE...

_Artisan
39分钟前
2
0
productFlavors简单实用

最近项目中,不同环境需要配置的参数越来越多,为了减少修改代码次数。研究了一下productFlavors的使用方式,总结如下 1. as3.0以上版本使用productFlavors时需要指定一个flavorDimensions,...

火云
41分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部