ABO.CMS: Расскажите подробнее про курсы валют и магазин

Тема в разделе "ABO CMS", создана пользователем toty, 18 авг 2015.

  1. toty

    toty Постоялец

    Регистр.:
    1 авг 2011
    Сообщения:
    106
    Симпатии:
    2
    Добрый день.
    + 1) Расскажите, как добавить валюту, например UAH
    + 2) Расскажите, как изменить валюту по умолчанию, т.е. чтобы гривна была основной
    + 3) Как добиться мультивалютности? т.е. некого функционала схожего с demo.opencart.com (опенкартом) когда по нажатию на валюту она пересчитывается автоматически в валюту платежа (удобную пользователю)?

    Осталось:
    4) Как в платежные системы, ввести оплату на "соответствующий кошелек" с соответствующей валютой платежа?

    Еще назрел один вопрос, каким образом интегрировать Я.Кассу (https://kassa.yandex.ru/) в платежные системы, может есть наработки?

    С мультивалютностью и новой валютой разобрался, только не ясно как подгрузить курсы из http://www.nbrb.by/Services/XmlExRates.aspx?ondate=01/31/2011

    function get_central_bank_rates($xml_file_url)

    Непонятно как работает, отдельно запустить не удалось.

    Код:
    <?php
    
    include "inc/domxml-php4-to-php5.php";
    
    $xml_file_url = "http://www.nbrb.by/Services/XmlExRates.aspx?ondate=09/14/15";
    
    /**
    * Функция получает значения курса валют с сайта НБРБ и выдает нужные параметры в виде массива
    *
    * @param string $xml_file_url - URL адрес страницы
    * @return mixed массив с данными или false
    */
    function get_central_bank_rates($xml_file_url)
    {
        // Загрузим XML валют.
        $content = file_get_contents($xml_file_url);
        //$content = iconv('windows-1251', 'UTF-8', $content);
    
        $xml = domxml_open_mem($content);
        if (!$xml)
        {
            return false;
        }
    
        // Получаем верхний узел.
        $child_nodes = $xml->child_nodes();
        if (count($child_nodes) == 0)
        {
            return false;
        }
        $xml = $child_nodes[0];
    
        // Получим список узлов валют.
        $child_nodes = $xml->child_nodes();
    
        if (!$child_nodes)
        {
            return false;
        }
    
        $result = array();
    
    
        // Ищем интересующие нас курсы.
        foreach ($child_nodes as $xml)
        {
            $sub_nodes = $xml->child_nodes();
    
            //print_r($sub_nodes);
    
            if (!$sub_nodes)
            {
                continue;
            }
    
            // Ищем название валюты.
            $currency_name = '';
            foreach ($sub_nodes as $node)
            {
                $node_name = trim(strtolower($node->node_name()));
                if ($node_name != 'CharCode')
                {
                    continue;
                }
    
                // Извлекаем значение.
                $value_nodes = $node->child_nodes();
                foreach ($value_nodes as $value_node)
                {
                    if ($value_node->node_type() == XML_TEXT_NODE)
                    {
                        $currency_name .= trim(strtolower($value_node->node_value()));
                    }
                }
            }
    
            if (empty($currency_name))
            {
                continue;
            }
    
            $value = '';
    
            reset($sub_nodes);
            foreach ($sub_nodes as $node)
            {
                $node_name = strtolower($node->node_name());
                if ($node_name != 'Rate')
                {
                    continue;
                }
    
                // Извлекаем значение.
                $value_nodes = $node->child_nodes();
                foreach ($value_nodes as $value_node)
                {
                    if ($value_node->node_type() == XML_TEXT_NODE)
                    {
                        $value .= strtolower($value_node->node_value());
                    }
                }
            }
    
            // Заменяем запятую на точку и преобразуем в вещественное число.
            $value = str_replace(',', '.', $value);
            $value = floatval($value);
            if (!$value)
            {
                continue;
            }
    
            // Добавим валюту.
            switch ($currency_name)
            {
                case 'rur':
                {
                    $result['BYR/RUR'] = $value;
                    break;
                }
                case 'usd':
                {
                    $result['USD/BYR'] = $value;
                    break;
                }
                case 'eur':
                {
                    $result['EUR/BYR'] = $value;
                }
            }
    
        }
    
        if (count($result))
        {
            // Произведем дополнительные расчеты между иностранными валютами.
            if (isset($result['USD/BYR']) && isset($result['EUR/BYR']))
            {
                $result['EUR/USD'] = round($result['EUR/BYR'] / $result['USD/BYR'], 4);
            }
    
            return $result;
        }
        else
        {
            return false;
        }
    }
    echo "<a href='$xml_file_url'>$xml_file_url</a>";
    echo "<br>";
    echo "**** Curs **** <br>";
    echo get_central_bank_rates($xml_file_url);
    var_dump(get_central_bank_rates($xml_file_url));
    
    ?>
    Сделано! Чувствительность к регистру XML
     
    Последнее редактирование модератором: 5 окт 2015