zimbra-api / soap-api

Zimbra SOAP client in PHP language

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

How to use WaitSet?

vladus-06 opened this issue · comments

Hi.
How i can use WaitSet? I want to listen to all Zimbra accounts тo see when new letters arrive.

require 'vendor/autoload.php';

use Zimbra\Admin\AdminFactory;
use Zimbra\Admin\Request\AdminCreateWaitSet;
use Zimbra\Common\TypedSequence;
use Zimbra\Enum\InterestType;
use Zimbra\Struct\WaitSetSpec;

$api = AdminFactory::instance('https://localhost:7071/service/admin/soap');
$api->auth('admin', 'paddword');

$accounts = array();
$interests = array('m');

$waitset = new AdminCreateWaitSet();
$waitset->setAllAccounts(TRUE);
........
var_dump($waitset);

Can someone help me with this code? What am I doing wrong?


class ApiTest
{
    private $_api;
    

 public function testAdminWaitSet()
	 {
	$api = AdminFactory::instance('https://localhost:7071/service/admin/soap');
        $api->auth('admin', '************');  
	  $name = 'admin@mail.local.com';
	  $id = '7ac0ebb7-2bd5-4c48-828c-74cbc0e636d1';
	  $token = '0_78f6491445198621727b10d20104482cc46fa509_69643d33363a37616330656262372d326264352d346334382d383238632d3734636263306536333664313b6578703d31333a313630333835323430383236383b61646d696e3d313a313b747970653d363a7a696d6272613b753d313a613b7469643d393a3835363634343238383b76657273696f6e3d31343a382e382e31355f47415f333836393b';
	  $waitSet = 1;//self::randomName();
	  $seq = 1;//self::randomName();
	  $timeout = 1000; //mt_rand(0, 1000);
	  $a = new \Zimbra\Struct\WaitSetAddSpec($name, $id, $token, [InterestType::FOLDERS(), InterestType::MESSAGES(), InterestType::CONTACTS()]);
	  $add = new \Zimbra\Struct\WaitSetSpec([$a]);
	  $update = new \Zimbra\Struct\WaitSetSpec([$a]);
	  $a = new \Zimbra\Struct\Id($id);
	  $remove = new \Zimbra\Struct\WaitSetId([$a]);
	  $api->adminWaitSet($waitSet, $seq, $add, $update, $remove, true, [InterestType::FOLDERS(), InterestType::MESSAGES()], $timeout);
	  $client = $api->client();
	  $req = $client->lastRequest();
	  $xml = '<?xml version="1.0"?>' . 
	  "\n" . '<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:urn="urn:zimbra" xmlns:urn1="urn:zimbraAdmin">' . 
	  '<env:Body>' . '<urn1:AdminWaitSetRequest waitSet="' . 
	  $waitSet . '" seq="' . $seq . '" block="true" defTypes="f,m" timeout="' . $timeout . '" >' . '<urn1:add>' . '<urn1:a name="' . 
	  $name . '" id="' . $id . '" token="' . $token . '" types="f,m,c" />' . '</urn1:add>' . '<urn1:update>' . '<urn1:a name="' . 
	  $name . '" id="' . $id . '" token="' . $token . '" types="f,m,c" />' . '</urn1:update>' . '<urn1:remove>' . '<urn1:a id="' . 
	  $id . '" />' . '</urn1:remove>' . '</urn1:AdminWaitSetRequest>' . '</env:Body>' . '</env:Envelope>';
//	  $this->assertXmlStringEqualsXmlString($xml, (string) $req);
	    return $xml;
	  }
}

$qwe = new ApiTest;
echo $qwe->testAdminWaitSet();

PHP Fatal error: Uncaught GuzzleHttp\Exception\ServerException: Server error: POST https://localhost:7071/service/admin/soap resulted in a 500 Server Error response:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">soap:Header<change tok (truncated...)
in /root/zmadmin/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php:113
Stack trace:
#0 /root/zmadmin/vendor/guzzlehttp/guzzle/src/Middleware.php(65): GuzzleHttp\Exception\RequestException::create()
#1 /root/zmadmin/vendor/guzzlehttp/promises/src/Promise.php(204): GuzzleHttp\Middleware::GuzzleHttp{closure}()
#2 /root/zmadmin/vendor/guzzlehttp/promises/src/Promise.php(153): GuzzleHttp\Promise\Promise::callHandler()
#3 /root/zmadmin/vendor/guzzlehttp/promises/src/TaskQueue.php(48): GuzzleHttp\Promise\Promise::GuzzleHttp\Promise{closure}()
#4 /root/zmadmin/vendor/guzzlehttp/promises/src/Promise.php(248): GuzzleHttp\Promise\TaskQueue->run()
#5 /root/zmadmin/vendor/guzzlehttp/promises/src/Promise.php(224): GuzzleHttp\P in /root/zmadmin/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php on line 113