Странные нули добавляются в конце двойных значений, возвращаемых веб-службой Soap - PullRequest
0 голосов
/ 09 мая 2011

Файл WSDL находится здесь: http://www.rasd.ro/BSEFinancialsWS/financials.asmx?WSDL Вот операционная страница: http://www.rasd.ro/BSEFinancialsWS/financials.asmx?op=GetCompanyBalance

Для IdentityType Попробуйте Символ

Для Идентичность Попробуйте BVB

Для ReportType try Q1

Для Год Попробуйте 2011

По сути, вы получите:

> <CompanyBalance> 
> <Company>
>    <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>

Обратите внимание на значение TotRev ? Ну, это должно быть s exactly how it. Теперь в моей реализации SoapClient у меня есть:

...

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;

    }

...

публичная статическая функция GetCompanyBalance ($ IdentityType, $ Identity, $ ReportType, $ Year) { самостоятельно :: timerReset ();

<code>    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 '
'; } if (self :: $ debug) { self :: timerAddAction ("Отображение полей массива"); } if (! empty ($ rawresult) && sizeof ($ rawresult)> = 1) { $ Полей = массив (); foreach ($ rawresult-> GetCompanyBalanceResult as $ key => $ Field) { $ Field = (is_object ($ Field)? (Массив) $ Field: $ Field); $ поля [$ ключ] = $ Field; } if ($ fields ['LastYear']! = $ Year || $ fields ['ReportType']! = $ ReportType) { вернуть ложь; } if (self :: $ debug) { self :: timerAddAction («Результаты кэширования»); } самостоятельно :: CM () -> cacheThis ($ CacheId, '', само :: $ cacheTime [ 'балланс'], $ поля, правда); if (self :: $ debug) { self :: timerAddAction («Завершено кэширование. Возвращаем данные»); } if (self :: $ debug) { самостоятельно :: timerPrintInfo (); } if (! empty ($ fields)) { вернуть $ поля; } } вернуть ложь; } Еще { $ Из = само :: CM () -> getCached ($ CacheId); if (is_array ($ out) &&! empty ($ out)) { if (self :: $ debug) { self :: timerAddAction ("Детали кэшированного запроса:" .date ('Y.m.d H: i: s', self :: CM () -> cacheTimeStmp ($ cacheid))); самостоятельно :: timerPrintInfo (); } вернуть $ out; } вернуть ложь; }

...

Так работает примерно так:

<code>    $result=msc_WebServBVBExt::GetCompanyBalance('Symbol','BVB','Q1',2011);



echo "<pre>";
print_r($result);
echo "
";

Возвращает:

Array

( [Company] => Массив ( [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**

)

}

Как вы заметили из последнего значения, к его концу добавлены 2 нуля. Есть идеи почему?

1 Ответ

1 голос
/ 09 мая 2011

Возможно, это значение должно быть долларов и центов. Многие финансовые системы предназначены для хранения денег в целочисленном формате, который представляет сумму в центах или миллах, а не в долларах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...