我在使用ejabberd和php库访问xmlrpc时遇到了一些问题。我能够创建没有问题的房间,所以这一切似乎都有效。
use \GameNet\Jabber\RpcClient;
use \GameNet\Jabber\Mixins\UserTrait;
$rpc = new RpcClient([
'server' => $app->config['jabber'].':4560',
'host' => 'mydomain.org',
'debug' => false,
]);
$rpc->createRoom($groupname);
$rpc->setRoomOption($groupname,'persistent',true);
$rpc->setRoomOption($groupname,'members_only',true);
$rpc->setRoomOption($groupname,'public',false);
$rpc->setRoomOption($groupname,'moderated',false);
$rpc->setRoomAffiliation($groupname, $user.'@mydomain.org' , 'owner');
我可以在Ejabberd看到房间,并使用Ejabberd管理员帐户加入MUC房间。然后我添加另一个用户并成为会员:
$rpc->setRoomAffiliation($groupname, 'user2@mydomain.org' , 'member');
使用jabber客户端,user2可以看到房间,但是当他们加入它时,我收到错误(来自客户端,没有从服务器传递)"无法加入房间:无法输入房间:你被禁止进入房间"
让我感到困惑的是,如果我使用管理员帐户启动另一个客户端并加入会议室,我可以使用user2加入它。如果Admin离开,则user2未被踢出,但如果user2离开并尝试重新加入,则会收到错误消息。
似乎房间的权限是错误的,但我无法思考。几乎看起来房间想要主持人出席,但房间没有被调节。
我希望只有附属成员的用户可以看到/访问该房间。
附加信息 - 这是对会员室联盟请求的响应 - 该响应值为0表示它不起作用吗?
<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
<params>
<param>
<value>
<struct>
<member>
<name>res</name>
<value>
<int>0</int>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodResponse>