我搜索过了。我保证我有。但是,我无法从此API调用获得所需的输出。我在这里使用示例:http://docs.whmcs.com/API:XML_Sample_Code
$url = "http://www.yourdomain.com/includes/api.php"; # URL to WHMCS API file goes here
$username = "Admin"; # Admin username goes here
$password = "demoxyz"; # Admin password goes here
$postfields = array();
$postfields["username"] = $username;
$postfields["password"] = md5($password);
$postfields["action"] = "getclients";
$postfields["responsetype"] = "xml";
$query_string = "";
foreach ($postfields AS $k=>$v) $query_string .= "$k=".urlencode($v)."&";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $query_string);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$xml = curl_exec($ch);
if (curl_error($ch) || !$xml) $xml = '<whmcsapi><result>error</result>'.
'<message>Connection Error</message><curlerror>'.
curl_errno($ch).' - '.curl_error($ch).'</curlerror></whmcsapi>';
curl_close($ch);
$arr = whmcsapi_xml_parser($xml); # Parse XML
print_r($arr); # Output XML Response as Array
/*
Debug Output - Uncomment if needed to troubleshoot problems
echo "<textarea rows=50 cols=100>Request: ".print_r($postfields,true);
echo "\nResponse: ".htmlentities($xml)."\n\nArray: ".print_r($arr,true);
echo "</textarea>";
*/
function whmcsapi_xml_parser($rawxml) {
$xml_parser = xml_parser_create();
xml_parse_into_struct($xml_parser, $rawxml, $vals, $index);
xml_parser_free($xml_parser);
$params = array();
$level = array();
$alreadyused = array();
$x=0;
foreach ($vals as $xml_elem) {
if ($xml_elem['type'] == 'open') {
if (in_array($xml_elem['tag'],$alreadyused)) {
$x++;
$xml_elem['tag'] = $xml_elem['tag'].$x;
}
$level[$xml_elem['level']] = $xml_elem['tag'];
$alreadyused[] = $xml_elem['tag'];
}
if ($xml_elem['type'] == 'complete') {
$start_level = 1;
$php_stmt = '$params';
while($start_level < $xml_elem['level']) {
$php_stmt .= '[$level['.$start_level.']]';
$start_level++;
}
$php_stmt .= '[$xml_elem[\'tag\']] = $xml_elem[\'value\'];';
@eval($php_stmt);
}
}
return($params);
}
结果如下:
Array (
[WHMCSAPI] => Array (
[ACTION] => getsupportdepartments
[RESULT] => success
[TOTALRESULTS] => 2
[DEPARTMENTS] => Array (
[DEPARTMENT] => Array (
[ID] => 2
[NAME] => Sales
[AWAITINGREPLY] => 5
[OPENTICKETS] => 5
)
[DEPARTMENT1] => Array (
[ID] => 1
[NAME] => Support
[AWAITINGREPLY] => 15
[OPENTICKETS] => 15
)
)
)
)
我正在尝试简单地命名部门,然后等待与每个部门名称相关的等待计数。
有什么见解?
答案 0 :(得分:2)
你可以做这样的事情
foreach($apiResult['WHMCSAPI']['DEPARTMENTS'] as $department) {
echo $department['NAME'].' has '.$department['AWAITINGREPLY'].' cases awaiting reply.'<br />';
}
请在此处查看完整的演示代码: http://phpfiddle.org/main/code/0c4-pgs
更新了答案:“关于如何通过AWAITING回复值输出的任何想法?即:如果销售有10张票,而支持有12显示支持高于销售,反之亦然? - cbcp”
在这里,您可以使用get变量来定义排序。 url.domain / mypage.php?sort = desc | url.domain / mypage.php?排序= ASC
try {
$apiResult = array('WHMCSAPI' => array(
'ACTION' => 'getsupportdepartments',
'RESULT' => 'success',
'TOTALRESULTS' => 2,
'DEPARTMENTS' => array(
'DEPARTMENT' => array(
'ID' => 2,
'NAME' => 'Sales',
'AWAITINGREPLY' => 5,
'OPENTICKETS' => 5
),
'DEPARTMENT1' => array(
'ID' => 1,
'NAME' => 'Support',
'AWAITINGREPLY' => 15,
'OPENTICKETS' => 15
)
)
)
);
echo '<pre>';
print_r($apiResult);
echo '</pre>';
if($apiResult['WHMCSAPI']['RESULT'] != 'success') {
throw new Exception('Something went wrong while fetching the data.');
}
if(!isset($apiResult['WHMCSAPI']['DEPARTMENTS'])) {
throw new Exception('No departments in API response.');
}
if(!empty($_GET['sort'])) {
$tmpArray = array();
foreach($apiResult['WHMCSAPI']['DEPARTMENTS'] as $key => $value) {
$tmpArray[$value['AWAITINGREPLY']] = $value;
}
$apiResult['WHMCSAPI']['DEPARTMENTS'] = $tmpArray;
($_GET['sort'] == 'desc') ? krsort($apiResult['WHMCSAPI']['DEPARTMENTS']) : ksort($apiResult['WHMCSAPI']['DEPARTMENTS']);
}
foreach($apiResult['WHMCSAPI']['DEPARTMENTS'] as $department) {
echo $department['NAME'].' has '.$department['AWAITINGREPLY'].' cases awaiting reply.<br />';
}
} catch (Exception $exc) {
echo $exc;
}
如果您更喜欢默认排序,那么您应该根据自己的需要进行修改。
if(!empty($_GET['sort'])) {
$tmpArray = array();
foreach($apiResult['WHMCSAPI']['DEPARTMENTS'] as $key => $value) {
$tmpArray[$value['AWAITINGREPLY']] = $value;
}
$apiResult['WHMCSAPI']['DEPARTMENTS'] = $tmpArray;
($_GET['sort'] == 'desc') ? krsort($apiResult['WHMCSAPI']['DEPARTMENTS']) : ksort($apiResult['WHMCSAPI']['DEPARTMENTS']);
}
---&GT;
$tmpArray = array();
foreach($apiResult['WHMCSAPI']['DEPARTMENTS'] as $key => $value) {
$tmpArray[$value['AWAITINGREPLY']] = $value;
}
$apiResult['WHMCSAPI']['DEPARTMENTS'] = $tmpArray;
krsort($apiResult['WHMCSAPI']['DEPARTMENTS']);
这将按照您的要求对部门进行排序。