Weird Zeros are appended at the end of double values returned by Soap Web Service
The WSDL file is located here : http://www.rasd.ro/BSEFinancialsWS/financials.asmx?WSDL Here's the operation page: http://www.rasd.ro/BSEFinancialsWS/financials.asmx?op=GetCompanyBalance
For IdentityType try Symbol
For Identity try BVB
For ReportType try Q1
For Year try 2011
Basically, what you`ll get is:
> <CompanyBalance>
> <Company>
> &l开发者_Go百科t;CompanyName>SC BURSA DE VALORI BUCURESTI SA</CompanyName>
> <FiscalCode>17777754</FiscalCode>
> </Company>
> <LastYear>2011</LastYear>
> <ReportType>Q1</ReportType>
> <NetCrtLiab>64931998</NetCrtLiab>
> <CrtAssets>67220118</CrtAssets>
> <FixedAssets>25299375</FixedAssets>
> <PaidUpCap>76741980</PaidUpCap>
> <ShahEqy>90231373</ShahEqy>
> <OpExp>2975724</OpExp>
> <ExtrExp>0</ExtrExp>
> <FinExp>1411570</FinExp>
> <TotExp>4387294</TotExp>
> <NetTurn>5977651</NetTurn>
> <Debt1>0</Debt1>
> <Debt2>2086920</Debt2>
> <TotLiab>2086920</TotLiab>
> <BackPay>0</BackPay>
> <NoPaidTax>0</NoPaidTax>
> <Empl>57</Empl> <BackLiab>0</BackLiab>
> <BackPaym>0</BackPaym>
> <Gross>2624119</Gross>
> <OpRes>3002199</OpRes>
> <ExtrRes>0</ExtrRes>
> <FinRes>-378080</FinRes>
> <NetRes>2196413</NetRes>
> <CurrRes>2624119</CurrRes>
> <ResPerShare xsi:nil="true"/>
> <TotAssets>90231373</TotAssets>
> <TotReceiv>3368756</TotReceiv>
> <RevInAdv>584055</RevInAdv>
> <OpIncome>5977923</OpIncome>
> <ExIncome>0</ExIncome>
> <FinInc>1033490</FinInc>
> <TotRev>**7011413**</TotRev>
> </CompanyBalance>
Notice the TotRev value? Well, its exactly how it
s supposed to be.
Now, in my implementation of the SoapClient I have:
...
static $WSConf=array(
'financials'=>array('host'=>'rasd.ro','port'=>80,'wsdlURL'=>'http://www.rasd.ro/BSEFinancialsWS/financials.asmx?WSDL'),
'companies'=>array('host'=>'rasd.ro','port'=>80,'wsdlURL'=>'http://www.rasd.ro/BSEFinancialsWS/companiesandsecurities.asmx?WSDL'),);
...
private static function S($name) {
$name=strtolower($name);
if(!is_object(self::$soapClients[$name])) {
self::$soapClients[$name] = new SoapClient(self::$WSConf[$name]['wsdlURL']);
}
if(is_object(self::$soapClients[$name])) {
self::Delay();
return self::$soapClients[$name];
}
error_log('site.ro '.__FILE__.' error'."\n\n".__FILE__.': '.__CLASS___.'::'.__METHOD__."\n\n msc_WebServBVB2 ".date('Y-M-d H:i:s')."\nCannot init webservice {$name}", 3, WSBVBExtLOG);
}
...
public static function RaportareFinanciara($simbol,$timestampOrAn,$trimestru=false){
self::timerReset();
if(empty($trimestru)) {
$trimestru=utilsDT::Quarter($timestampOrAn);
$an=date('Y',$timestampOrAn);
}else{
$an=$timestampOrAn;
}
$IdentityType='Symbol';
$Identity=$simbol;
$Year=$an;
$ReportType=strtr($trimestru,array('1'=>'Q1','2'=>'Semestrial','3'=>'Q3','4'=>'Annual'));
$balanceType=self::GetBalanceType($IdentityType,$Identity,$ReportType,$Year);
$type=$balanceType['BalanceType'];
if(!empty($type)) {
switch($type) {
case 'Company':
$balance=self::GetCompanyBalance($IdentityType,$Identity,$ReportType,$Year);
break;
case 'Bank':
$balance=self::GetBankBalance($IdentityType,$Identity,$ReportType,$Year);
break;
case 'Assurance':
$balance=self::GetInsuranceBalance($IdentityType,$Identity,$ReportType,$Year);
break;
case 'Fund':
$balance=self::GetInvestmentFundsBalance($IdentityType,$Identity,$ReportType,$Year);
break;
default:
return false;
}
if(!empty($balance)) {
if(self::$debug) {
self::timerAddAction("Mapping balance fields to compatibility names for ".strtolower($type));
}
if(isset(self::$BVBROAPI_FldCorespCustom[strtolower($type)])) {
$FldCoresp=array_merge(self::$BVBROAPI_FldCoresp,self::$BVBROAPI_FldCorespCustom[strtolower($type)]);
}else{
$FldCoresp=self::$BVBROAPI_FldCoresp;
}
if(self::$debug) {
print_r($FldCoresp);
}
$result=array();
foreach($FldCoresp as $compat_name=>$wsname) {
if(isset($balance[$wsname])) {
$result[$compat_name]=$balance[$wsname];
}
}
$result['BallanceType']=$type;
if(!empty($result)) {
if(self::$debug) {
self::timerPrintInfo();
}
return $result;
}
}
if(self::$debug) {
self::timerAddAction("Balance empty");
}
}
if(self::$debug) {
self::timerPrintInfo();
}
return false;
}
...
public static function GetCompanyBalance($IdentityType,$Identity,$ReportType,$Year){ self::timerReset();
if(self::$debug) {
self::timerAddAction("Called GetCompanyBalance ($IdentityType,$Identity,$ReportType,$Year) Method");
}
$cacheid='webservbvbext_balance'.$IdentityType.$Identity.$ReportType.$Year;
if(self::$debug) {
self::timerAddAction("Checking cache");
}
if(self::CM()->cacheIsExpired($cacheid)) {
if(self::$debug) {
self::timerAddAction("Calling webservice Method");
}
try{
$rawresult=self::S('Financials')->GetCompanyBalance(array('IdentityType'=>$IdentityType,'Identity'=>$Identity,'ReportType'=>$ReportType,'Year'=>$Year));
} catch (Exception $e) {
if(self::$debug) {
self::timerAddAction('Caught exception: ', $e->getMessage());
}
return false;
}
if(self::$debug) {
echo '<pre>';
print_r($rawresult);
echo '</pre>';
}
if(self::$debug) {
self::timerAddAction("Mapping array fields");
}
if(!empty($rawresult) && sizeof($rawresult)>=1) {
$fields=array();
foreach($rawresult->GetCompanyBalanceResult as $key=>$Field) {
$Field=(is_object($Field) ? (array) $Field : $Field);
$fields[$key]=$Field;
}
if($fields['LastYear']!=$Year || $fields['ReportType']!=$ReportType) {
return false;
}
if(self::$debug) {
self::timerAddAction("Caching results");
}
self::CM()->cacheThis($cacheid,'',self::$cacheTime['Ballance'],$fields,true);
if(self::$debug) {
self::timerAddAction("Finished caching. Return data");
}
if(self::$debug) {
self::timerPrintInfo();
}
if(!empty($fields)) {
return $fields;
}
}
return false;
}else{
$out=self::CM()->getCached($cacheid);
if(is_array($out) && !empty($out)) {
if(self::$debug) {
self::timerAddAction("Cached Request Details: ".date('Y.m.d H:i:s',self::CM()->cacheTimeStmp($cacheid)));
self::timerPrintInfo();
}
return $out;
}
return false;
}
...
So running something like this:
$result=msc_WebServBVBExt::GetCompanyBalance('Symbol','BVB','Q1',2011);
echo "<pre>";
print_r($result);
echo "</pre>";
Returns:
Array
( [Company] => Array ( [CompanyName] => SC BURSA DE VALORI BUCURESTI SA [FiscalCode] => 17777754 )
[LastYear] => 2011
[ReportType] => Q1
[NetCrtLiab] => 6493199800
[CrtAssets] => 6722011800
[FixedAssets] => 2529937500
[PaidUpCap] => 7674198000
[ShahEqy] => 9023137300
[OpExp] => 297572400
[ExtrExp] => 0
[FinExp] => 141157000
[TotExp] => 438729400
[NetTurn] => 597765100
[Debt1] => 0
[Debt2] => 208692000
[TotLiab] => 208692000
[BackPay] => 0
[NoPaidTax] => 0
[Empl] => 57
[BackLiab] => 0
[BackPaym] => 0
[Gross] => 262411900
[OpRes] => 300219900
[ExtrRes] => 0
[FinRes] => -37808000
[NetRes] => 219641300
[CurrRes] => 262411900
[ResPerShare] =>
[TotAssets] => 9023137300
[TotReceiv] => 336875600
[RevInAdv] => 58405500
[OpIncome] => 597792300
[ExIncome] => 0
[FinInc] => 103349000
**[TotRev] => 701141300**
)
}
As you notice from the last value, it has 2 zeros appended at the end of the value. Any ideas why?
Perhaps that value is supposed to be dollars and cents. Many financial systems are designed to store money in an integer format that represents the amount in cents or mils as oppose dollars.
精彩评论