Akurganow / WooCommerce-Robokassa

Robokassa payments for WooCommerce
23 stars 12 forks source link

Метод расчёта суммы к получению магазином - CalcOutSumm #18

Open shashin-sergey opened 8 years ago

shashin-sergey commented 8 years ago

Регистрируем интернет магазин как физическое лицо. Как заставить плагин вычитать комиссию с нас, а не с покупателя?

saphali commented 8 years ago

По документации такой возможности нет. Обратитесь в сервис Робокассы может это они смогут сделать.

shashin-sergey commented 8 years ago

Такая возможность есть в woocommrece в пункте настроек "налоги". Спасибо google...

saphali commented 8 years ago

А как налоги касаются комиссии, которую берет сервис Робакассы? Или я чего-то не понимаю?

shashin-sergey commented 8 years ago

Я пока сам не разобрался, как оно работает. Но робокасса перестала плюсовать комиссию к сумме заказа.

drgooglle commented 8 years ago

Название метода CalcOutSumm

URL для запросов HTTP GET/POST https://auth.robokassa.ru/Merchant/WebService/Service.asmx/CalcOutSumm

http://docs.robokassa.ru/ru/#6334

ipolikarpov commented 6 years ago

Я решил этот вопрос с помощью хука (фильтра), который, к счастью, разработчик предусмотрел в коде плагина. Код можно добавить в functions.php темы или собрать свой плагин.

//recalculate OutSumm, so customer doesn't pay ROBOKASSA fee
add_filter('woocommerce_robokassa_args', 'ip_recalculte_outsumm');
function ip_recalculte_outsumm($args) {
    $current_summ = $args['OutSum'];
    $mrh_login = $args['MrchLogin'];
    //using xml-method http://docs.robokassa.ru/#2320
    $robokassa_url = 'https://auth.robokassa.ru/Merchant/WebService/Service.asmx/CalcOutSumm?MerchantLogin='.$mrh_login.'&IncCurrLabel=QCardR&IncSum='.$current_summ;
    $final_value = $curren_summ;
    //CURL request
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $robokassa_url); 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $result = curl_exec($ch);
        $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);
    //END OF CURL reques
    //Check result
    if ($code == 200) { //ok, change final summ
        $result = new SimpleXMLElement($result);
        if ($result->Code == 0) {
            $final_value = (string)$result->OutSum;
        } else {
            error_log('Robokassa XML-method is not available, server code is '.$code.', but XML result is: '.print_r($result, true));
            return $args; //return args as is
        }
    } else {
        error_log('Robokassa API is not available, server code is '.$code);
        return $args; //return args as is
    }
    //regenerate CRC
    $options = get_option('woocommerce_robokassa_settings');
    $robokassa_key1 = $options['robokassa_key1'];
    if(!isset($args['OutSumCurrency']))
        $crc = $args['MrchLogin'].':'.$final_value.':'.$args['InvId'].':'.$robokassa_key1;
    else
        $crc = $args['MrchLogin'].':'.$final_value.':'.$args['InvId'].':' . $args['OutSumCurrency'] . ':'.$robokassa_key1;
    $crc = md5($crc);
    //modifi args
    $args['OutSum'] = $final_value;
    $args['SignatureValue'] = $crc;
    //return modified args
    return $args;
}