Logo Web Dizajn i Programiranje
+381 (0) 62 03 20 959 | wdp@sbb.rs

Kursna lista Narodne Banke Srbije

Copy-paste rešenje za iščitavanje srednjeg kursa NBS na zadati datum za sve valute, 15 Jul 2018

Kada mi se pojavio zahtev za prikazom kursne liste NBS na web stranici ja sam, baš kao i većina, otišao na sajt NBS da bih video da li oni nude neko rešenje. Tamo sam pronašao sistem veb-servisa u okviru koga postoje i usluge u vezi kursne liste zasnovane na SOAP (Simple Object Access Protocol) protokolu. Proučivši uputstva krenuo sam u izradu web aplikacije i vrlo brzo sam imao rešenje koje naravno nije radilo. Odmah sam pokrenuo Google pretraživač i naišao na solidan broj stranica sa ovom tematikom. Većina je bila totalno beskorisna, a tek ponegde sam naišao na neke smernice koje nisu bile potpune, ali su doprinele da se primaknem rešenju, no ipak još uvek nisam imao potpuno funkcionalno rešenje. Vreme je bilo da se kontaktira podrška NBS i začudo, već prvi mejl je sadržao veoma upotrebljive informacije koje su doprinele konačnom rešenju koje je ovde predstavljeno uz potrebna uputstva kako bi bilo lako primenljivo i od strane onih koji nemaju dovoljno znanja ga da sami kreiraju.

Napominjem da je ovaj servis dostupan samo pravnim licima i da je potrebno izvršiti registraciju radi dobijanja pristupa. Više o ovome možete pročitati u blogu pod nazivom Veb servis Narodne Banke Srbije, kao i na samom sajtu NBS.

Obzirom da se Veb-servis NBS zasniva na SOAP protokolima koji imaju stroga i komplikovana pravila za kreiranje zahteva koristio sam, uz nezaobilazni PHP i NUSOAP skriptu koja znatno olakšava ovaj posao. Stoga je potrebno skinuti ovu skriptu klikom na ovaj link i nakon raspakivanja arhive fasciklu sa nazivom "lib" kopirati na istu lokaciju u okviru web sajta gde će biti i stranica sa kodom.

Nakon toga potrebno je downloadovati web stranucu sa nazivom kursna_lista.php" i postaviti je na istu lokaciju gde ste postavili fasciklu sa nazivom "lib". U samom kodu web stranice potrebno je uneti podatke koje ste dobili od strane NBS nakon registracije na servis (username,password i licenceid). Na stranici je napravljena forma za unos datuma za koji se želi kursna lista, a ako se ovaj podatak izostavi prikazuje se tekuća kursna lista (na današnji dan).

Naravno uz malo poznavanje CSS-a možete prilagoditi izgled prikaza kursne liste u skladu sa vašim potrebama.

Kompletan kod

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<style> 
table{ 
    margin-top:20px; 

th,td{ 
    padding:5px; 
    border-bottom:1px solid #000000; 
}
td.vrednost{ 
    text-align:right; 

</style> 
<!-- date picker --> 
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"> 
<link rel="stylesheet" href="/resources/demos/style.css"> 
<script src="https://code.jquery.com/jquery-1.12.4.js"></script> 
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script> 
<script> 
  $( function() { 
    $( "#datepicker" ).datepicker(); 
    // Getter 
    var dateFormat = $( "#datepicker" ).datepicker( "option", "dateFormat", "2018-6-18"); 
    // Setter 
    $( "#datepicker" ).datepicker( "option", "dateFormat", "yy-mm-dd" ); 
     
    $( "#datepicker" ).datepicker( "setDate", "<?php echo $datum?>" ); 
      } ); 
  </script> 
</head> 


<body> 
<form action="kursna_lista_na_dan.php" name="kursna_datum" method="post" enctype="multipart/form-data"/> 
    <label>Datum kursne liste</label><br><br> 
    <input type="text" name="datum" id="datepicker" /><br><br> 
    <input type="submit" name="kurs_datum" value="pošalji" /> 
</form> 

<?php 
//***************************************************************************** 
// 
//  Naziv PHP scripte: PRETRAGA PODATAKA O IMAOCIMA RAÖUNA NBS 
//        (Narodna banka Srbije) - SOAP protokol 
// 
//  Autor: Josip Kopestinskij, http://webdizajniprogramiranje.rs 
// 
//  Više o kodu možete pročitati na 
//  http://webdizajniprogramiranje.rs/web-servisi-nbs-php-soap-imaoci-racuna 
// 
//  Kod je slobodan za korišćenje uz obavezu navođenja izvora. 
// 
//***************************************************************************** 

// obrada posta za datum 
if($_POST['datum']!=""){ 
    
$datum=($_POST['datum']); 
}else{ 
    
$datum=date('Y-m-d'); 

$datum=strtotime($datum); 
$zahtev_datum=date("Ymd",$datum); 
$lista_datum=date("d m Y",$datum); 

// pozivanje nusoap skripte 
require_once('lib/nusoap.php'); 

// podaci potrebni za prijavu na servis: korisnicko ime, lozinka i licenca
$login_username '**************';
$login_password '**************';
$login_licenceid '00000000-0000-0000-0000-000000000000';

// lokacija WDSL servisa i NameSpace 
$soap_wsdl =  
"https://webservices.nbs.rs/CommunicationOfficeService1_0/ExchangeRateXmlService.asmx?WSDL"
$soap_namespace "http://communicationoffice.nbs.rs"

// pravljenje klijenta 
$soap_client = new nusoap_client($soap_wsdltrue); 

// isključujemo utf8 dekodiranje da bi smo imali naša slova 
//(html stranica mora mora biti kodirana u utf8 formatu) 
$soap_client->decode_utf8 0

// dodavanje autentifikacije u header 
$header =  
'<AuthenticationHeader xmlns="' $soap_namespace '"> 
      <UserName>' 
$login_username '</UserName> 
      <Password>' 
$login_password '</Password> 
      <LicenceID>' 
$login_licenceid '</LicenceID> 
 </AuthenticationHeader>'

$soap_client->setHeaders($header); 

// kreiranje parametara za zahtev 
$parametri = array('date'=>$zahtev_datum'exchangeRateListTypeID' => 1); 
$parametri_srednji = array('date'=>$zahtev_datum'exchangeRateListTypeID' => 3); 

// slanje zahteva 
$soap_rezultat $soap_client->call ('GetExchangeRateByDate'$parametri); 
$soap_srednji $soap_client->call ('GetExchangeRateByDate'$parametri_srednji); 

// dobijanje rezultata 
$xml_rezultat=$soap_rezultat['GetExchangeRateByDateResult']; 
$xml_rezultat=simplexml_load_string($xml_rezultat);     

$xml_srednji=$soap_srednji['GetExchangeRateByDateResult']; 
$xml_srednji=simplexml_load_string($xml_srednji); 

// obrada i prikaz rezultata 
echo 
<table> 
<tr><th colspan="5" style="font-size:20px;">Kursna lista za: '
.$lista_datum.'</th></tr> 
<tr><th>Naziv valute</th><th>Šifra valute</th><th>kupovni</th><th>srednji</th><th>prodajni</th></tr>'

$broj_valuta count($xml_rezultat->ExchangeRate); 
$broj_srednji count($xml_srednji->ExchangeRate); 
for (
$i=0$i<$broj_valuta$i++){ 
    
$valuta=$xml_rezultat->ExchangeRate[$i]->CurrencyNameSerLat
    
$kod=$xml_rezultat->ExchangeRate[$i]->CurrencyCodeAlfaChar
    
$kupovni=$xml_rezultat->ExchangeRate[$i]->BuyingRate
    
$srednji=$xml_srednji->ExchangeRate[$i]->MiddleRate
    
$prodajni=$xml_rezultat->ExchangeRate[$i]->SellingRate

    echo 
'<tr><td>'.$valuta.'</td><td>'.$kod.'</td><td class="vrednost">'.$kupovni.'</td><td class="vrednost">'.$srednji.'</td><td class="vrednost">'.$prodajni.'</td></tr>'

echo 
'</table>'
?> 
</body> 
</html>
Pregleda   1553
Komentara   0


Dosadašnji komentari


Ostavite komentar

11 - 5 =




© Copyright by WDP