Joomla Templates and Joomla Extensions by JoomlaVision.Com

osCommerce - polska strona wsparcia

Naszą witrynę przegląda teraz 33 gości 

Get Adobe Flash Player

Artykuły w etykiet: kurs
poniedziałek, 17 października 2011 20:53

Aktualizowanie kursu walut na podstawie kursów NBP

I zamieniamy go na:

Standardowo w oscommerce dostępna jest aktualizacja kursów walut z banków światowych. W Polsce jednak bardziej opłaca się korzystać z kursów NBP.

Na początek zmieniamy plik zarządzający aktualizacją kursów walut, czyli admin/includes/functions/localization.php. Usuwamy z niego dotychczasową zawartość i wstawiamy:

testKod: php
  1. <?php
  2. /*
  3.  $Id: localization.php 1739 2007-12-20 00:52:16Z hpdl $
  4.  
  5.  osCommerce, Open Source E-Commerce Solutions
  6.  www.oscommerce.com
  7.  
  8.  Copyright (c) 2003 osCommerce
  9.  
  10.  Released under the GNU General Public License
  11. */
  12. function xml_to_array( $file ) {
  13. $parser = xml_parser_create();
  14. xml_parser_set_option( $parser, XML_OPTION_CASE_FOLDING, 0 );
  15. xml_parser_set_option( $parser, XML_OPTION_SKIP_WHITE, 1 );
  16. xml_parse_into_struct( $parser, $file, $tags );
  17. xml_parser_free( $parser );
  18.  
  19. $elements = array();
  20. $stack = array();
  21. foreach ( $tags as $tag )
  22. {
  23. $index = count( $elements );
  24. if ( $tag['type'] == "complete" || $tag['type'] == "open" )
  25. {
  26. $elements[$index] = array();
  27. $elements[$index]['name'] = $tag['tag'];
  28. $elements[$index]['attributes'] = $tag['attributes'];
  29. $elements[$index]['content'] = $tag['value'];
  30.  
  31. if ( $tag['type'] == "open" )
  32. {    # push
  33. $elements[$index]['children'] = array();
  34. $stack[count($stack)] = &$elements;
  35. $elements = &$elements[$index]['children'];
  36. }
  37. }
  38.  
  39. if ( $tag['type'] == "close" )
  40. {    # pop
  41. $elements = &$stack[count($stack) - 1];
  42. unset($stack[count($stack) - 1]);
  43. }
  44. }
  45. return $elements[0];
  46. }
  47. function nazwa_aktualnego_kursu() {
  48. $alte_url = "http://nbp.pl/Kursy/KursyA.html";
  49. $alte_params = '';
  50. $alte_user_agent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
  51. $alte_ch = curl_init();
  52. curl_setopt($alte_ch, CURLOPT_URL,$alte_url);
  53. curl_setopt($alte_ch, CURLOPT_SSL_VERIFYHOST, 2);
  54. curl_setopt($alte_ch, CURLOPT_USERAGENT, $alte_user_agent);
  55. curl_setopt($alte_ch, CURLOPT_RETURNTRANSFER,1);
  56. curl_setopt($alte_ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  57. $alte_page=curl_exec ($alte_ch);
  58. curl_close ($alte_ch);
  59. $tresc = $alte_page;
  60. $wzorzec = '/xml\/[\d\w]+\.xml/';
  61. $sukces  = preg_match($wzorzec, $tresc, $pasujace);
  62. if (empty($pasujace)) return false;
  63. return $pasujace[0];
  64. }
  65.  
  66.  
  67. function quote_nbp_currency($code, $base = DEFAULT_CURRENCY) {
  68. if($code == $base) return 1;
  69. $aktualny_kurs = nazwa_aktualnego_kursu();
  70. $alte_url = "http://nbp.pl/Kursy/".$aktualny_kurs;
  71. $alte_user_agent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
  72. $alte_ch = curl_init();
  73. curl_setopt($alte_ch, CURLOPT_URL,$alte_url);
  74. curl_setopt($alte_ch, CURLOPT_SSL_VERIFYHOST, 2);
  75. curl_setopt($alte_ch, CURLOPT_USERAGENT, $alte_user_agent);
  76. curl_setopt($alte_ch, CURLOPT_RETURNTRANSFER,1);
  77. curl_setopt($alte_ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  78. $alte_page=curl_exec ($alte_ch);
  79. curl_close ($alte_ch);
  80. $tresc = $alte_page;
  81.  
  82. $tresc = xml_to_array($tresc);
  83.  
  84. $i=0;
  85. for($i=0, $n=sizeof($tresc['children']); $i<$n; $i++){
  86. if(isset($tresc['children'][$i]['children'][2]['content'])) {
  87. if($tresc['children'][$i]['children'][2]['content'] == $code){
  88. $kurs = str_replace(',', '.', $tresc['children'][$i]['children'][3]['content']);
  89. $kurs = 1/$kurs;
  90. return $kurs;
  91. }
  92. }
  93. }
  94.  
  95. return false;
  96. }
  97.  
  98. function quote_oanda_currency($code, $base = DEFAULT_CURRENCY) {
  99.  
  100. $alte_url = "http://www.oanda.com/convert/fxdaily";
  101. $alte_params = 'value=1&redirected=1&exch=' . $code .  '&format=CSV&dest=Get+Table&sel_list=' . $base;
  102. $alte_user_agent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
  103.  
  104. $alte_ch = curl_init();
  105. curl_setopt($alte_ch, CURLOPT_POST,1);
  106. curl_setopt($alte_ch, CURLOPT_POSTFIELDS,$alte_params);
  107. curl_setopt($alte_ch, CURLOPT_URL,$alte_url);
  108. curl_setopt($alte_ch, CURLOPT_SSL_VERIFYHOST, 2);
  109. curl_setopt($alte_ch, CURLOPT_USERAGENT, $alte_user_agent);
  110. curl_setopt($alte_ch, CURLOPT_RETURNTRANSFER,1);
  111. curl_setopt($alte_ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  112.  
  113. $alte_page=curl_exec ($alte_ch);
  114. curl_close ($alte_ch);
  115.  
  116. $page = explode("\n",$alte_page);
  117.  
  118. $match = array();
  119.  
  120. preg_match('/(.+),(\w{3}),([0-9.]+),([0-9.]+)/i', implode('', $page), $match);
  121.  
  122. if (sizeof($match) > 0) {
  123. return $match[3];
  124. } else {
  125. return false;
  126. }
  127. }
  128.  
  129. function quote_xe_currency($to, $from = DEFAULT_CURRENCY) {
  130.  
  131. $alte_url = "http://www.xe.net/ucc/convert.cgi";
  132. $alte_params = 'Amount=1&From=' . $from . '&To=' . $to;
  133. $alte_user_agent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
  134.  
  135. $alte_ch = curl_init();
  136. curl_setopt($alte_ch, CURLOPT_POST,1);
  137. curl_setopt($alte_ch, CURLOPT_POSTFIELDS,$alte_params);
  138. curl_setopt($alte_ch, CURLOPT_URL,$alte_url);
  139. curl_setopt($alte_ch, CURLOPT_SSL_VERIFYHOST, 2);
  140. curl_setopt($alte_ch, CURLOPT_USERAGENT, $alte_user_agent);
  141. curl_setopt($alte_ch, CURLOPT_RETURNTRANSFER,1);
  142. curl_setopt($alte_ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  143.  
  144. $alte_page=curl_exec ($alte_ch);
  145. curl_close ($alte_ch);
  146.  
  147. $page = explode("\n",$alte_page);
  148.  
  149. $match = array();
  150.  
  151. preg_match('/[0-9.]+\s*' . $from . '\s*=\s*([0-9.]+)\s*' . $to . '/', implode('', $page), $match);
  152.  
  153. if (sizeof($match) > 0) {
  154. return $match[1];
  155. } else {
  156. return false;
  157. }
  158. }
  159. ?>

Następnie edytujemy plik admin/currencies.php. Odszukujemy kod:

testKod: php
  1. case 'update':
  2. $server_used = CURRENCY_SERVER_PRIMARY;
  3.  
  4. $currency_query = tep_db_query("select currencies_id, code, title from " . TABLE_CURRENCIES);
  5. while ($currency = tep_db_fetch_array($currency_query)) {
  6. $quote_function = 'quote_' . CURRENCY_SERVER_PRIMARY . '_currency';
  7. $rate = $quote_function($currency['code']);
  8.  
  9. if (empty($rate) && (tep_not_null(CURRENCY_SERVER_BACKUP))) {
  10. $messageStack->add_session(sprintf(WARNING_PRIMARY_SERVER_FAILED, CURRENCY_SERVER_PRIMARY, $currency['title'], $currency['code']), 'warning');
  11.  
  12. $quote_function = 'quote_' . CURRENCY_SERVER_BACKUP . '_currency';
  13. $rate = $quote_function($currency['code']);
  14.  
  15. $server_used = CURRENCY_SERVER_BACKUP;
  16. }
  17.  
  18. if (tep_not_null($rate)) {
  19. tep_db_query("update " . TABLE_CURRENCIES . " set value = '" . $rate . "', last_updated = now() where currencies_id = '" . (int)$currency['currencies_id'] . "'");
  20.  
  21. $messageStack->add_session(sprintf(TEXT_INFO_CURRENCY_UPDATED, $currency['title'], $currency['code'], $server_used), 'success');
  22. } else {
  23. $messageStack->add_session(sprintf(ERROR_CURRENCY_INVALID, $currency['title'], $currency['code'], $server_used), 'error');
  24. }
  25. }
  26.  
  27. tep_redirect(tep_href_link(FILENAME_CURRENCIES, 'page=' . $HTTP_GET_VARS['page'] . '&cID=' . $HTTP_GET_VARS['cID']));
  28. break;

i zamieniamy go na:

testKod: php
  1. case 'update':
  2. $server_used = CURRENCY_SERVER_PRIMARY;
  3.  
  4. $currency_query = tep_db_query("select currencies_id, code, title from " . TABLE_CURRENCIES);
  5. while ($currency = tep_db_fetch_array($currency_query)) {
  6. $quote_function = 'quote_' . CURRENCY_SERVER_PRIMARY . '_currency';
  7. $rate = $quote_function($currency['code']);
  8.  
  9. if (empty($rate) && (tep_not_null(CURRENCY_SERVER_BACKUP))) {
  10. $messageStack->add_session(sprintf(WARNING_PRIMARY_SERVER_FAILED, CURRENCY_SERVER_PRIMARY, $currency['title'], $currency['code']), 'warning');
  11.  
  12. $quote_function = 'quote_' . CURRENCY_SERVER_BACKUP . '_currency';
  13. $rate = $quote_function($currency['code']);
  14.  
  15. $server_used = CURRENCY_SERVER_BACKUP;
  16. }
  17.  
  18. if (empty($rate) && (tep_not_null(CURRENCY_SERVER_BACKUP2))) {
  19. $messageStack->add_session(sprintf(WARNING_PRIMARY_SERVER_FAILED, CURRENCY_SERVER_BACKUP, $currency['title'], $currency['code']), 'warning');
  20.  
  21. $quote_function = 'quote_' . CURRENCY_SERVER_BACKUP2 . '_currency';
  22. $rate = $quote_function($currency['code']);
  23.  
  24. $server_used = CURRENCY_SERVER_BACKUP2;
  25. }
  26.  
  27. if ($rate > 0) {
  28. tep_db_query("update " . TABLE_CURRENCIES . " set value = '" . $rate . "', last_updated = now() where currencies_id = '" . (int)$currency['currencies_id'] . "'");
  29.  
  30. $messageStack->add_session(sprintf(TEXT_INFO_CURRENCY_UPDATED, $currency['title'], $currency['code'], $server_used), 'success');
  31. } else {
  32. $messageStack->add_session(sprintf(ERROR_CURRENCY_INVALID, $currency['title'], $currency['code'], $server_used), 'error');
  33. }
  34. }
  35.  
  36. tep_redirect(tep_href_link(FILENAME_CURRENCIES, 'page=' . $HTTP_GET_VARS['page'] . '&cID=' . $HTTP_GET_VARS['cID']));
  37. break;

Na koniec edytujemy plik admin/includes/application_top.php. Odszukujemy w nim kod:

testKod: php
  1. define('CURRENCY_SERVER_PRIMARY', 'oanda');
  2. define('CURRENCY_SERVER_BACKUP', 'xe');

I zamieniamy go na:

testKod: php
  1. define('CURRENCY_SERVER_PRIMARY', 'nbp');
  2. define('CURRENCY_SERVER_BACKUP', 'oanda');
  3. define('CURRENCY_SERVER_BACKUP2', 'xe');

Dodatkowe informacje

  • Wersja skepu osCommerce Merchant rc2.2, Merchant 2.3, Proffesional 1.0.3
  • Dostępne wersje językowe Polska
Opublikowane w Tips & tricks

Logowanie

Nasze sondy

Czy podoba ci się nowa odsłona strony?
 
Money.pl - wiadomości, notowania, giełda, kursy walut
NBP 2012-05-22
USD 3,3811 -0,34%
EUR 4,3205 -0,27%
CHF 3,5973 -0,27%
GBP 5,3419 -0,44%
Money.pl - Kliknij po więcej
23 maja 2012
Źródło: MeteoGroup