PHP通过xmlrpc注册ejabberd用户

正在研发一款社交软件,架构im使用了ejabberd作为xmpp服务器,于是遇到了如何通过php注册xmpp用户的问题。

解决方法有几个:

1.用xmpphp框架发送含<body>元数据的消息到服务器要求处理,这个可参考:http://blog.csdn.net/newjueqi/article/details/7864066

2.使用php的xmpp库jaxl,其demo代码中包含一个register_user的脚本,通过shell调用:

php example/register_user.php YOUR_DOMAIN

即可生成用户,缺点是性能较差且慢,不建议

3.最优方法是使用ejabberd自带的命令行工具ejabberdctl来直接生成用户。网上的回答基本是通过修改sudo用户组权限来直接在php使用exec语句来执行此命令

$username = ‘tester‘;
$password = ‘testerspassword‘;
$node = ‘myserver.com‘;
exec(‘sudo /usr/sbin/ejabberdctl register ‘.$username.‘ ‘.$node.‘ ‘.$password.‘ 2>&1‘,$output,$status);
if($output == 0)
{
    // Success!
}
else
{
    // Failure, $output has the details
    echo ‘<pre>‘;
    foreach($output as $o)
    {
        echo $o."\n";
    }
    echo ‘</pre>‘;
}

需要在sudoer文件中添加ejabberd用户权限,相对不安全也比较麻烦,也不推荐。

其实ejabberd在最近的版本中已经集成了xmlrpc模块,通过该模块可直接访问4560端口使用ejabberd的一些内部命令。官网介绍地址:https://www.ejabberd.im/ejabberd_xmlrpc

由于我使用macos在ejabberd官网下载的一键安装包,安装完后需要cd到/Application/ejabberd_PATH/conf/文件夹中修改ejabberd.yml配置文件,在module中找到xml_rpc一行去掉#(取消注释),重启后 telnet HOST地址 4560 看能否接通,即说明xmlrpc已经可以用了

关于php端的代码在介绍地址中已有提及,以下是php通过ejabberdctl注册一个用户的demo的代码:

$params=array(‘user‘=>‘someUser‘,‘host‘=>‘ejabberdHost‘,‘password‘=>‘somPassword‘);
		$request = xmlrpc_encode_request(‘register‘, $params, (array(‘encoding‘ => ‘utf-8‘)));

		$context = stream_context_create(array(‘http‘ => array(
			‘method‘ => "POST",
			‘header‘ => "User-Agent: XMLRPC::Client mod_xmlrpc\r\n" .
			"Content-Type: text/xml\r\n" .
			"Content-Length: ".strlen($request),
			‘content‘ => $request
			)));

		$file = file_get_contents("http://127.0.0.1:4560", false, $context);

		$response = xmlrpc_decode($file);

		if (xmlrpc_is_fault($response)) {
			trigger_error("xmlrpc: $response[faultString] ($response[faultCode])");
		} else {
			print_r($response);
		}

打印后即生成注册成功的结果

Have a nice try! :)

时间: 2024-10-10 07:08:50

PHP通过xmlrpc注册ejabberd用户的相关文章

环信集成,获取注册开发者用户获取Appkey(二)

首先登陆此网站:https://console.easemob.com 点击注册:具体注册信息,按照自己的信息,记着填写正确的邮箱,因为账号需要邮箱激活. 登陆后,点击我的应用, 创建应用, 成功后就会看到多个一个应用,在创建前有个sandbox的应用,不清楚是干嘛的,直接无视即可. 创建成功自己的应用后,可以创建用户之类.打开这个应用比如叫test1 里面就可以看到.appkey啦,这就是手机端需要在配置文件配置的, 他的下面就有快速集成,和Android,ios怎么配置之类. IOS需要上传

JSP_tomcat_mysql_注册验证用户;

本文出自:http://blog.csdn.net/svitter 资源下载: github: git clone https://github.com/Svtter/JSP-tomcat-mysql 使用了servlet: web.xml: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instanc

如何实现共享软件网络授权认证,包括注册新用户、登录、修改密码等操作

开发共享软件,传统的是采用注册码验证方式,这种方式是大多数共享软件采用的方式,另外还有一种常见的验证方式,就是通过网络授权认证的方式,这种方式通过在程序中调用服务器的服务进行.一般具有验证用户名可用.注册新用户.用户登录认证.用户修改密码等操作,另外还需要配备一个网络授权入口给管理员对注册的用户进行授权控制. 这个是为了进行网络授权认证搭建的一个简单的管理后台,用户在共享软件客户端通过调用服务器的服务连接,可以注册一个新用户,或者进行登录获取身份信息(试用.已注册.已禁用等状态),还可以通过服务

录播教室预约系统(六)-注册新用户

预约系统中,新用户可以自己注册,然后管理员开通. 注册界面如下: 客户端新用户注册代码:       button1_Click((txtUserID.Text.Trim ()==|| txtUserName.Text.Trim ()=== ==== = newTcpConnection.SendReceiveObject<ResMessage>(, ,  (resMessage.Message ==  + 服务器端的相关处理代码: 构造函数中声明:   //注册新用户            

利用Python实现批量注册网站用户,注意不可用于商业用途哦!

场景目标 现在大多数网站的「用户注册功能」都需要用户正确输入了验证码,才能发起注册的请求,如果想大量注册用户,正确识别验证码变的很关键. 普通的验证码使用 tesserocr,加上训练可以完成,如果想简单一点,可以使用「百度云的文字识别 API」. 今天的目标是使用 selenium + 百度云OCR 批量注册「中知网」一批用户.<pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; fon

从数据库获取最大手机号+1注册新用户

import unittestfrom common.get_request import GetRequestfrom common.read_data import ReadDatafrom ddt import ddt, datafrom common import constantfrom common.read_mysql import ReadMysqlimport json @ddtclass TestRegister(unittest.TestCase): ""&quo

XMPP 连续注册出现用户限制:500错误 处理方式

<iq xmlns="jabber:client" from="ava.com.cn" type="error"> <query xmlns="jabber:iq:register"> <username>zyc</username> <password>123456</password> </query> <error code=&qu

帐号注册和用户登录

一.帐号注册: 效果图: 代码: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>帐号注册</title> <style> *{ margin: 0; padding: 0; /*border: 1px dashed red;*/ } h1{ margin-left: 150px; margi

VBA: 错误消息:&quot;类未注册&quot;插入用户窗体

症状 当您尝试插入用户窗体,当您在 Microsoft Visual Basic 编辑器中一在这篇文章,或者在您试图打开的文档包含用户窗体的开头列出的产品时,您可能会收到以下错误消息: 类没有注册.寻找与 CLSID 的对象: {AC9F2F90-E877-11CE-9F68-00AA00574A4F} 或 类没有注册.寻找与 CLSID 的对象: {C62A69F0-16DC-11CE-9E98-00AA00574A4F} 当您单击帮助,将显示以下消息: 不存在帮助主题.您的应用程序供应商联系