SOAP code : cannot connect to server When I run this code the browser says it is loading the page for about 3 minutes then times out with the message
"ERROR: curl_exec - (7) couldn't connect to host ZimbraAdminCreateAccount Failed!"
There was little information in the documentation with the source code about how to connect to the server.
The documentation is useful for when you can connect to the Zimbra server.
This is the code I am using that supposedly works. It is from another forum thread.
What I need to know is how to troubleshoot the problem when the only error message is so vague.
Is the problem with the code I am using?
Is it a server issue?
Is it a Zimbra issue?
Where do I start?
<?PHP
$ServerAddress = "zimbra.mydomain.com";
$AdminUserName = "";
$AdminPassword = "";
$NewUserName = "mynewaccount@mydomain.com";
$NewUserPassword = "mynewpassoword";
$COSId = "f070eede-c0c5-4867-a158-1f35f1c39e15";
// To get your COSId for COS defualt or any other COS (I left mine in there as an example):
// zmprov getCos default | grep "zimbraId:" from the command line
if(($ZimbraSOAPResponse = ZimbraAdminCreateAccount(1, $ServerAddress, $AdminUserName, $AdminPassword, $NewUserName, $NewUserPassword, $COSId)) == FALSE)
{
printf("ZimbraAdminCreateAccount Failed!<BR>\n");
return(FALSE);
}
print("Zimbra create account response:<BR>" . htmlentities($ZimbraSOAPResponse) . "<BR><BR>\n");
?>
<?PHP
// -------------------------------------------------------------------
function ZimbraAdminCreateAccount($Trace, $ServerAddress, $AdminUserName, $AdminPassword, $NewUserName, $NewUserPassword, $COSId)
{
$CurlHandle = curl_init();
curl_setopt($CurlHandle, CURLOPT_URL, "https://" . $ServerAddress . ":7071/service/admin/soap/");
curl_setopt($CurlHandle, CURLOPT_POST, TRUE);
curl_setopt($CurlHandle, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($CurlHandle, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($CurlHandle, CURLOPT_SSL_VERIFYHOST, FALSE);
// ------ Send the zimbraAdmin AuthRequest -----
$SOAPMessage = '<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Header>
<context xmlns="urn:zimbra"/>
</soap:Header>
<soap:Body>
<AuthRequest xmlns="urn:zimbraAdmin">
<name>' . $AdminUserName . '</name>
<password>' . $AdminPassword . '</password>
</AuthRequest>
</soap:Body>
</soap:Envelope>';
curl_setopt($CurlHandle, CURLOPT_POSTFIELDS, $SOAPMessage);
if(!($ZimbraSOAPResponse = curl_exec($CurlHandle)))
{
print("ERROR: curl_exec - (" . curl_errno($CurlHandle) . ") " . curl_error($CurlHandle));
return(FALSE);
}
print("Raw Zimbra SOAP Response:<BR>" . htmlentities($ZimbraSOAPResponse) . "<BR><BR>\n");
// Parse for the sessionId
// <sessionId type="admin" id="123">123</sessionId>
$sessionId = strstr($ZimbraSOAPResponse, "<sessionId");
$sessionId = strstr($sessionId, ">");
$sessionId = substr($sessionId, 1, strpos($sessionId, "<") - 1);
print("sessionId = $sessionId<BR>\n");
// Parse for the authToken
// <authToken>123</authToken>
$authToken = strstr($ZimbraSOAPResponse, "<authToken");
$authToken = strstr($authToken, ">");
$authToken = substr($authToken, 1, strpos($authToken, "<") - 1);
print("authToken = $authToken<BR>\n");
// ------ Send the zimbraCreateAccount request -----
$SOAPMessage = '<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Header>
<context xmlns="urn:zimbra">
<authToken>' . $authToken . '</authToken>
<sessionId id="' . $sessionId . '">' . $sessionId . '</sessionId>
</context>
</soap:Header>
<soap:Body>
<CreateAccountRequest xmlns="urn:zimbraAdmin">
<name>' . $NewUserName . '</name>
<password>' . $NewUserPassword . '</password>
<a n="zimbraCOSId">' . $COSId . '</a>
</CreateAccountRequest>
</soap:Body>
</soap:Envelope>';
curl_setopt($CurlHandle, CURLOPT_POSTFIELDS, $SOAPMessage);
if(!($ZimbraSOAPResponse = curl_exec($CurlHandle)))
{
print("ERROR: curl_exec - (" . curl_errno($CurlHandle) . ") " . curl_error($CurlHandle));
return(FALSE);
}
// print("Raw Zimbra SOAP Response:<BR>" . htmlentities($ZimbraSOAPResponse) . "<BR><BR>\n");
return($ZimbraSOAPResponse);
}
?> |