Користење на веб сервисот за курсна листа на Народна Банка со PHP и SOAP

nbrm_thumb

Народна Банка на Република Македонија нуди веб-сервис со чија помош програмерите можат да ја користат курсната листа за менувачко работење, директно во сопствените апликации.

Веб сервисот располага со 4 методи кои во суштина враќаат исти резултати во XML формат. Разликата меѓу нив е форматот на параметрите што го прифаќаат. Сите 4 методи примаат 2 параметри StartDate и EndDate. Методите се: GetExchangeRate, GetExchangeRateD, GetExchangeRates, GetExchangeRatesD.

nbrm-servis

За користење на овој сервис со PHP ќе се послужиме со SOAP. Односно, би требало во вашата инсталација на PHP да ја имате инсталирано php5-soap екстензијата и истата да биде овозможена. Ќе ја преземеме денешната курсна листа со следниот код:

<?php

try {
    // креираме објект од класата SoapClient 
    $client = new SoapClient("http://www.nbrm.mk/klservice/kurs.asmx?wsdl", array('trace' => true));

    // ја иницијализираме променливата $startDate на денешната дата
    $startDate = date('d.m.Y');

    // го извршуваме барањето со методот GetExchangeRates при што 
    // му проследуваме 2 аргументи, 'StartDate' и 'EndDate' чии што
    // вредности се еднакви на променливата $startDate
    $response = $client->GetExchangeRates(array('StartDate' => $startDate, 'EndDate' => $startDate));

    // ја користиме функцијата simplexml_load_string за добиениот XML
    // да го претвориме во објект и едноставно да го користиме
    $data = simplexml_load_string($response->GetExchangeRatesResult);

    // за да видите што содржи променливата $data
    // одкоментирајте го следниот ред
    // var_dump($data);
    ?>
<!-- Фино форматиран, излезот го прикажуваме со HTML -->
    <table id="currency_table">
        <tr>
            <th>Ознака</th>
            <th>Држава</th>
            <th>Ном.</th>
            <th>Куповен</th>
            <th>Продажен</th>
        </tr>
        <?php foreach ($data->KursZbir as $object) { ?>
            <tr>
                <td><?php echo $object->Oznaka ?></td>
                <td><?php echo $object->Drzava ?></td>
                <td><?php echo (int) $object->Nomin ?></td>
                <td><?php echo number_format(round((float) $object->Kupoven, 2), 2) ?></td>
                <td><?php echo number_format(round((float) $object->Prodazen, 2), 2) ?></td>
            </tr>	

        <?php } ?>
    </table>
    <?php
} catch (SoapFault $e) {
    echo "Грешка: <br/>";
    echo $e->getMessage();
}
?>
gravatar
Автор: Горан Митев
За авторот: Freelance PHP програмер којшто професионално работи развој на комплексни веб апликации, CMS решенија, Е-Бизнис решенија, Wordpress. повеќе >>

6 Коментари

  1. Одличен напис!

    Во нашата имплементација користиме слична техника, но со уште еден додаток: кеширање на податоците.
    Со оглед на тоа дека курсната листа се менува еднаш дневно, со првиот клиент кој ќе ја повика рутината, всушност се запишува и мал фајл во tmp фолдерот на апликацијата. Во фајлот ги впишуваме прочитаните курсни податоци кои ги „стрингифираме“ во (во нашиов случај) JSON енкодиран стринг, иако може и во XML, па дури и comma-delimited формат. Името на фајлот го содржи и датумот на листата.
    Секој следен request започнува со проверка дали постои фајл за денешниот датум, па ако постои, се чита тој, наместо повик кон сервисот.

    На овој начин е овозможено кеширање, за да не помисли НБРМ дека некој и прави DDOS. Во поголеми инсталации, каде што имаме 100-120, и повеќе, активни клиенти, ова навистина и може да заличи на тоа. 🙂

  2. Апсолутно се согласувам, секако треба да има некој вид кеширање на податоците.

  3. Морам малку да појаснам – сите 4 методи не враќаат исти резултати, туку 2 типа на различни резултати.

    Првата група, getExchangeRate се однесува на Народна банка како централна банка која објавува индикативен курс на ниво на цела држава. таму за една валута враќаме еден курс (на пример 61,5 за евро).

    Втората група, getExchangeRates се одневуа на Народна банка како банка на државните органи и во тој случај, покрај индикативниот (среден) курс, како и секоја банка дава податоци за куповниот и продажниот курс. тоа значи по кој курс им продава девизи на државните органи и по кој курс ги купува девизите од државните органи.

    Кои ќе ги користите, зависи од вашата потреба дали ви треба СРЕДНИОТ курс или КУПОВНИОТ и ПРОДАЖНИОТ.

    Инаку ако имате некои (битни) предлози за подобрување слободно пишете.

  4. WOW браво
    Чисто за да го комплетираме постов, како би изгледал PHP кодот за берзанскиот тикер со следниов XML output ? Фала однапред








  5. Би сакал да замолам за помош околу преземање на тикерот од македонска берза и преземање на курсната листа (само среден курс).