2014-01-20 5 views
1

Я и несколько друзей пытаются использовать WHMCS для предоставления услуг в виртуальном мире. Проблема заключается в том, что WHMCS не предоставляет простой способ поиска конкретной клиентской записи без уже имеющегося идентификатора клиента, который не хранится нигде, кроме базы данных WHMCS. функция api getclients возвращает результаты в формате XML, проблема заключается в том, что при поиске клиента с помощью этого метода вы можете искать только имя, фамилию или адрес электронной почты. Теперь мы попытались передать переменные для firstname и lastname (они должны быть переданы отдельно). Это, к сожалению, возвращает клиентские записи для всех клиентов, что X firstname ИЛИ Y Lastname, вместо сужения одного клиента как с X, так и с Y.Результаты поиска WHMCS getclients

Я хочу знать, как искать PHP-массив, полученный из результата XML, чтобы попытаться захватить записи клиента только для клиента, которого мы ищем.

Результаты размещены так:

Array ([WHMCSAPI] => Array ([ACTION] => getclients [РЕЗУЛЬТАТ] => успех [TOTALRESULTS] => 2 [STARTNUMBER] => 0 [NUMRETURNED ] => 2 [КЛИЕНТЫ] => Массив ([КЛИЕНТ] => Массив ([ID] => 9 [FIRSTNAME] => Test1 [LASTNAME] => Test2 [COMPANYNAME] => [EMAIL] => test1 @ test. com [DATECREATED] => 2013-04-24 [GROUPID] => 1 [STATUS] => Active) [CLIENT1] => Array ([ID] => 20 [FIRSTNAME] => Test3 [LASTNAME] => Test2 [ COMPANYNAME] => [EMAIL] => [email protected] [DATECREATED] => 2014-01-20 [GROUPID] => 0 [STATUS] => Active))))

Код, который мы пытаемся использовать для поиск:

$postfields["action"] = "getclients"; 
$postfields["search"] = $firstname; 
$postfields["search"] = $lastname; 
$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 
$client = searchClient($firstname, $lastname, $arr); 

print_r($client); # 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); 
} 
function searchClient($first, $last, $array) 
{ 
    foreach ($array as $key => $val) 
{ 
    if($val['FIRSTNAME'] == $first && $val['LASTNAME'] == $last) 
    { 
     return $key; 
    } 
} 
return null; 
} 
?> 

Это возвращает пустой результат. Я признаю, что не совсем уверен, как это сделать, поэтому любые указатели помогут.

ответ

0

Вы можете «поиск конкретной записи клиента» по адресу электронной почты, используя их API, и теперь они поддерживают формат JSON для responsetype

«Пожалуйста, обратите внимание либо ClientID или по электронной почте не требуется.»

http://docs.whmcs.com/API:Get_Clients_Details

Смежные вопросы