LanBillingアカウントのステータスとRTUクラス4および5を同期する

こんにちは、ハブユーザーの皆様。



LanBillingとRTUのアカウントのステータスを同期するタスクがありました。

実装オプションを共有したいと思います。



中古



ランビリングv.1.8

RTUクラス4および5

PHP 5.3

mysql 5.0.51a-24 + lenny5

cron



実装



LanBillingアカウントステータスデータはvgroupsテーブルに保存されます。



テーブルフィールド:



ブロック - ブロック状態(0-ロック解除、> 0-ブロック)

blk_req-ブロックのリクエストのステータス(!= 0 and!=ブロック-ブロック、! = 0および=ブロック-ロック解除)



cronタスクでは、指定された間隔でphpスクリプトの実行を追加します。これにより、フィールドステータスが取得されます

LanBillingデータベースのblk_req、標準RTUスクリプト(set.aspxまたはget.aspx)の1つにsoapコマンドを送信し、trueの場合、 blockedおよびblk_reqフィールドの値を変更します



SOAPリクエストを送信する機能


function xmlHttpsReq($xml,$type){ $ch = curl_init('https://IP_:/mobile_request/'.$type.'.aspx?admin'); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_POST,1); curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); $data=curl_exec($ch); $result=substr($data,0,strpos($data,'</Root>')+7); if( curl_errno($ch) != 0 ) { die('CURL_error: ' . curl_errno($ch) . ', ' . curl_error($ch)); }; curl_close($ch); return $result; }
      
      





すべてのユーザーに関するデータを受信する機能


 function getUserList() { $data=xmlHttpsReq('<commands><command name="Get" table="User" /></commands>','get'); $xml = new SimpleXMLElement($data); foreach ($xml->command->user as $user) { $usr[]=$user; } return $usr; }
      
      





ログインによりユーザーデータを受信する機能


 function getUser($ID) { $data=xmlHttpsReq('<commands><command name="Get" table="User"><item><id>'.$ID.'</id></item></command></commands>','get'); $xml = new SimpleXMLElement($data); return $xml->command->user; }
      
      





アカウントのパラメーターを設定する機能


 function setUser($arr) { $converter = new Array2XML(); $obj = $converter->convert($arr); $data=xmlHttpsReq('<commands><command name="Edit" table="User">'.$obj.'</command></commands>','set'); $xml = new SimpleXMLElement($data); return $xml->command->item->result; }
      
      





配列をxmlに変換するクラス


 class Array2XML { private $writer; private $rootName = 'item'; function __construct() { $this->writer = new XMLWriter(); } public function convert($data) { $this->writer->openMemory(); $this->writer->startElement($this->rootName); if (is_array($data)) { $this->getXML($data); } $this->writer->endElement(); return $this->writer->outputMemory(); } public function setVersion($version) { $this->version = $version; } public function setEncoding($encoding) { $this->encoding = $encoding; } public function setRootName($rootName) { $this->rootName = $rootName; } private function getXML($data) { foreach ($data as $key => $val) { if (is_numeric($key)) { $key = 'key'.$key; } if (is_array($val)) { $this->writer->startElement($key); $this->getXML($val); $this->writer->endElement(); } else { $this->writer->writeElement($key, $val); } } } }
      
      







アカウント設定を変更するには、ログインとGUIDを知る必要があります。

現在の実装では、RTU APIではログインによるアカウントのGUIDの取得が許可されていないため( getUser関数)、 getUserList関数を使用してGUIDを取得します



実装


 mysql_connect(HOST,USERNAME,PASSWORD); mysql_select_db(DBNAME); //      RTU $allusers = getUserList(); //    LanBilling   $res = mysql_query("SELECT CASE WHEN blk_req != 0 AND blk_req = blocked THEN 'true' WHEN blk_req != 0 AND blocked = 0 THEN 'false' ELSE 'none' END AS blk, login FROM vgroups WHERE blk_req != 0"); while ($row=mysql_fetch_array($res)) { unset($user); foreach($allusers as $allusr) { if($allusr->id==$row['login']) { $user=$allusr; break; } } if (($user)&&($row['blk']!='none')) { if(setUser(array('id'=>$user->id,'guid'=>$user->guid,'enabled'=>$row['blk']))=='true') $ids[] = $row['vg_id']; //     RTU        LanBilling } else $ids[] = $row['vg_id']; } //   if (count(@$ids)>0) { $sql = 'UPDATE vgroups SET blocked = IF(blk_req = blocked, 0, blk_req), blk_req = 0, blk_req_user = "" WHERE vg_id IN (' . implode(',', $ids) . ')'; mysql_query($sql); }
      
      







コメントを歓迎します。



All Articles