Вход Регистрация
Файл: upload/catalog/controller/payment/qiwi_rest.php
Строк: 366
<?php
class ControllerPaymentQiwiRest extends Controller {
    public function 
index() {
            
$data['button_confirm'] = $this->language->get('button_confirm');
        
$data['button_back'] = $this->language->get('button_back');

        
$data['continue'] = $this->url->link('checkout/success');

        
$data['text_loading'] = $this->language->get('text_loading');

        
$data['action'] = 'https://qiwi.com/order/external/main.action';

        
$this->load->model('checkout/order');

        
$order_info $this->model_checkout_order->getOrder($this->session->data['order_id']);


        
$this->load->language('payment/qiwi_rest');


        
$data['qiwi_error'] = $this->language->get('qiwi_error');
        
$data['qiwi_error_5'] = $this->language->get('qiwi_error_5');
        
$data['qiwi_error_13'] = $this->language->get('qiwi_error_13');
        
$data['qiwi_error_78'] = $this->language->get('qiwi_error_78');
        
$data['qiwi_error_150'] = $this->language->get('qiwi_error_150');
        
$data['qiwi_error_152'] = $this->language->get('qiwi_error_152');
        
$data['qiwi_error_210'] = $this->language->get('qiwi_error_210');
        
$data['qiwi_error_215'] = $this->language->get('qiwi_error_215');
        
$data['qiwi_error_220'] = $this->language->get('qiwi_error_220');
        
$data['qiwi_error_241'] = $this->language->get('qiwi_error_241');
        
$data['qiwi_error_242'] = $this->language->get('qiwi_error_242');
        
$data['qiwi_error_298'] = $this->language->get('qiwi_error_298');
        
$data['qiwi_error_300'] = $this->language->get('qiwi_error_300');
        
$data['qiwi_error_303'] = $this->language->get('qiwi_error_303');
        
$data['qiwi_error_316'] = $this->language->get('qiwi_error_316');
        
$data['qiwi_error_319'] = $this->language->get('qiwi_error_319');
        
$data['qiwi_error_341'] = $this->language->get('qiwi_error_341');
        
$data['qiwi_error_700'] = $this->language->get('qiwi_error_700');
        
$data['qiwi_error_702'] = $this->language->get('qiwi_error_702');
        
$data['qiwi_error_1001'] = $this->language->get('qiwi_error_1001');
        
$data['qiwi_error_1003'] = $this->language->get('qiwi_error_1003');
        
$data['qiwi_error_1019'] = $this->language->get('qiwi_error_1019');

        
$data['qiwi_continue'] = $this->language->get('qiwi_continue');


        
//$data['sub_text_info'] = $this->language->get('sub_text_info');
        
$data['sub_text_info_phone'] = $this->language->get('sub_text_info_phone');

        
$data['qiwi_rest_limit'] = $this->language->get('qiwi_rest_limit');
        
$data['button_back'] = $this->language->get('button_back');


        
// Переменные
        
$data['shop'] = $this->config->get('qiwi_rest_shop_id');
        
$data['transaction'] = $this->session->data['order_id'];

        
$data['successUrl'] = $this->url->link('payment/qiwi_rest/success''''SSL'); 
        
$data['failUrl'] =  $this->url->link('payment/qiwi_rest/fail''''SSL');

        
$data['qiwi_rest_show_pay_now'] = $this->config->get('qiwi_rest_show_pay_now');

        
$this->load->model('account/customer');

        
$qiwi_rest_markup $this->config->get('qiwi_rest_markup');
        if (
$this->customer->isLogged())
        {
            
$customer_info $this->model_account_customer->getCustomer($this->customer->getId());
            
$customer_group_id $customer_info['customer_group_id']; 

            foreach(
$this->config->get('qiwi_rest_group_markup') as $group_id => $group_markup)
            {
                if (
$group_id == $customer_group_id
                    if (
$group_markup!=""$qiwi_rest_markup $group_markup;
            }
        }

        
        
$ccy_code $this->config->get('qiwi_rest_ccy_select');
        
$ccy_order_total $this->currency->convert($order_info['total'], $order_info['currency_code'], $ccy_code);
        
$data['summ'] = $this->currency->format($ccy_order_total$ccy_code$order_info['currency_value'], FALSE);
        
$data['summ'] = round((float)$data['summ'] + (float)$data['summ']/100*(float)$qiwi_rest_markup2);
        
$data['ccy'] = $ccy_code;


        
$data['phone'] = preg_replace("/D+/"""$order_info['telephone']);
        
//if (strlen ($data['phone']) > 10) $data['phone'] = substr($data['phone'], -10);

        
$text_title '<b>'.$this->language->get('text_title').'</b>';
        if (
$this->customer->isLogged())
        {
            
$customer_info $this->model_account_customer->getCustomer($this->customer->getId());
            
$customer_group_id $customer_info['customer_group_id']; 

            foreach(
$this->config->get('qiwi_rest_group_desc') as $group_id => $group_desc)
            {
                if (
$group_id == $customer_group_id
                    if (
$group_desc!=""$text_title '<b>'.$group_desc.'</b>';
            }
        }

        
$data['markup'] = sprintf ($this->language->get('markup'), $text_title$qiwi_rest_markup).$data['summ'].' '.$this->config->get('qiwi_rest_ccy_select'); 

        if (
file_exists(DIR_TEMPLATE $this->config->get('config_template') . '/template/payment/qiwi_rest.tpl')) {
            return 
$this->load->view($this->config->get('config_template') . '/template/payment/qiwi_rest.tpl'$data);
        } else {
            return 
$this->load->view('default/template/payment/qiwi_rest.tpl'$data);
        }

    }


    public function 
confirm() {
        if (
$this->session->data['payment_method']['code'] != 'qiwi_rest') return;

        
$this->response->addHeader('Content-Type: application/json');

        
$json = array();

        
$this->load->language('payment/qiwi_rest');

        
$this->load->model('checkout/order');

        
$order_id $this->session->data['order_id'];

        
$order_info $this->model_checkout_order->getOrder($order_id);
        if(!
$order_info)
        {
            
$this->log->write('qiwi_rest confirm no order');

            
$json['error'] = 210;
            
$this->response->setOutput(json_encode($json));
            return;
        }

        
$this->load->model('account/customer');

        
$qiwi_rest_markup $this->config->get('qiwi_rest_markup');
        if (
$this->customer->isLogged())
        {
            
$customer_info $this->model_account_customer->getCustomer($this->customer->getId());
            
$customer_group_id $customer_info['customer_group_id']; 

            foreach(
$this->config->get('qiwi_rest_group_markup') as $group_id => $group_markup)
            {
                if (
$group_id == $customer_group_id
                    
$qiwi_rest_markup $group_markup;
            }
        }


        
$ccy_code $this->config->get('qiwi_rest_ccy_select');
        
$ccy_order_total $this->currency->convert($order_info['total'], $order_info['currency_code'], $ccy_code);
        
$summ $this->currency->format($ccy_order_total$ccy_code$order_info['currency_value'], FALSE);
        
$summ round((float)$summ + (float)$summ/100*(float)$qiwi_rest_markup2);

        
$objDateTime = new DateTime('NOW');
        
$qiwi_rest_lifetime $this->config->get('qiwi_rest_lifetime');

        if (!isset(
$qiwi_rest_lifetime)) $qiwi_rest_lifetime '24';
        if (
$qiwi_rest_lifetime==""$qiwi_rest_lifetime '24';

        
$objDateTime->modify('+'.$qiwi_rest_lifetime.' hour');

        
//$objDateTime->add(new DateInterval('PT'.$this->config->get('qiwi_rest_lifetime').'H'));        
        
$qiwi_rest_order_end_time $objDateTime->format(DateTime::ISO8601);

        
$name '';
        
$name $this->config->get('config_store');
        if (
$name==''$name $this->config->get('config_name');
        if (
$name==''$name 'qiwi';
        
$name=htmlspecialchars_decode($name);

        if (
mb_strlen($name,'UTF-8')>99)
            
$name mb_substr($name090'UTF-8').'...';


        
$products $this->cart->getProducts();
        
$_prods $this->language->get('order_id') . $order_id;
        foreach (
$products as $product
        { 
            if (
$_prods == "")
                
$_prods $_prods $product['name'] . " - " $product['quantity'] . $this->language->get('qiwi_pcs');
            else
                
$_prods $_prods ', ' $product['name'] . " - " $product['quantity'] . $this->language->get('qiwi_pcs');

        } 
        
$_prods " [ " $_prods " ] ";

        if (
mb_strlen($_prods,'UTF-8')>200$_prods mb_substr($_prods0200'UTF-8').'...';
        
$comment addslashes(html_entity_decode($_prodsENT_QUOTES'UTF-8'));

        if (
mb_strlen($comment,'UTF-8')>250)
            
$comment mb_substr($comment0250'UTF-8').'...';

        
$data = array( 
            
"user" => "tel:+" $this->request->post['qiwi_phone'], 
            
"amount" => $summ
            
"ccy" => $ccy_code
            
"comment" => $comment
            
"lifetime" => $qiwi_rest_order_end_time
            
"pay_source" => "qw"
            
"prv_name" => $name
        
); 


        if (
$this->config->get('qiwi_rest_mode_select')=='qiwi_rest_mode_debug')
        {
            
$this->log->write('qiwi_rest _order ' print_r($datatrue));
        }


        
$service_url 'https://qiwi.com/api/v2/prv/' $this->config->get('qiwi_rest_shop_id') . '/bills/' $order_id;
        
$ch curl_init($service_url);

        
curl_setopt($chCURLOPT_HTTPAUTHCURLAUTH_BASIC); 

            
curl_setopt($chCURLOPT_USERPWD$this->config->get('qiwi_rest_id') . ":" $this->config->get('qiwi_rest_password'));
        
        
curl_setopt($chCURLOPT_POSTFIELDShttp_build_query($data));

        
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
        
curl_setopt($chCURLOPT_CUSTOMREQUEST"PUT");

        
curl_setopt($chCURLOPT_POST1);
        
curl_setopt($chCURLOPT_SSL_VERIFYPEERFALSE);

            
curl_setopt($chCURLOPT_HTTPHEADER, array (
            
"Accept: application/json"
            
));


        
$curl_response curl_exec($ch);
        if (
$curl_response === false) {
                
$info curl_error($ch);
                
curl_close($ch);

                
$this->log->write('qiwi_rest error ' .  $info);
            
$json['error'] = 0;
            
$this->response->setOutput(json_encode($json));
                return; 
        }
        
curl_close($ch);
        
$decoded json_decode($curl_response);

        if (
$this->config->get('qiwi_rest_mode_select')=='qiwi_rest_mode_debug')
        {
            
$this->log->write('qiwi_rest order ' ' ' print_r($decoded->responsetrue));
        }

        if (
$decoded->response->result_code != 0) {
            
//$this->log->write('qiwi_rest ' . 'error occured: ' . $decoded->response->errormessage);

            
$json['error'] = $decoded->response->result_code;
            
$this->response->setOutput(json_encode($json));
            return;
        }

        
//var_export($decoded->response);


        
if( (int)$order_info['order_status_id'] == 0) {
            
$this->model_checkout_order->addOrderHistory($order_id$this->config->get('qiwi_rest_order_status_progress_id'), 'qiwi_rest');
            
//return;
        
}

        if( 
$order_info['order_status_id'] != $this->config->get('qiwi_rest_order_status_progress_id')) {
            
$this->model_checkout_order->addOrderHistory($order_id$this->config->get('qiwi_rest_order_status_progress_id'),'qiwi_rest',TRUE);
        }

        
$json['error'] = 'no_error';
        
$this->response->setOutput(json_encode($json));

       }


    public function 
fail() {

        
$this->response->redirect($this->url->link('checkout/checkout''''SSL'));

    }

    public function 
success() {

        
$this->response->redirect($this->url->link('checkout/success''''SSL'));

    }


    private function 
sendAnswer($error) {
        
$x '<?xml version="1.0"?>';
        
$x .= '<result>';
        
$x .= '<result_code>'.$error.'</result_code>';
        
$x .= '</result>';

        
header ("HTTP/1.1 200 OK");
        
header ("Content-Type: text/xml" false); 
        echo(
$x);

        
//$this->log->write('qiwi_rest order5 ' . ' ' .$x);
    
}


    private function 
cidr_match($ip$cidr)
    {
            list(
$subnet$mask) = explode('/'$cidr);
    
            if ((
ip2long($ip) & ~((<< (32 $mask)) - 1) ) == ip2long($subnet))
            { 
                return 
true;
            }
    
            return 
false;
    }

    public function 
callback() {

        if (
$this->config->get('qiwi_rest_mode_select')=='qiwi_rest_mode_debug')
        {
            
$this->log->write('qiwi_rest callback order ' ' ' .http_build_query($this->request->post));
        }


        
$in $this->cidr_match($_SERVER["REMOTE_ADDR"], "91.232.230.0/23");
        if (
$in == false$in $this->cidr_match($_SERVER["REMOTE_ADDR"], "79.142.16.0/20");

        if (
$in == false)
        {
        
//    $this->log->write('qiwi_rest attack ' . $_SERVER["REMOTE_ADDR"]);
        //    $this->sendAnswer(5);
        //    exit;
        
}

        if (isset(
$this->request->post['command'])) {
            
$command $this->request->post['command'];
        } else {
            
$this->sendAnswer(5);
            exit;
        }

        if (
$command != 'bill')
        {
            
$this->sendAnswer(5);
            exit;
        }

        if (isset(
$this->request->post['bill_id'])) {
            
$bill_id $this->request->post['bill_id'];
        } else {
            
$this->sendAnswer(5);
            exit;
        }

        if (isset(
$this->request->post['status'])) {
            
$status $this->request->post['status'];
        } else {
            
$this->sendAnswer(5);
            exit;
        }

        if (isset(
$this->request->post['error'])) {
            
$error $this->request->post['error'];
        } else {
            
$this->sendAnswer(5);
            exit;
        }

        if (isset(
$this->request->post['amount'])) {
            
$amount $this->request->post['amount'];
        } else {
            
$this->sendAnswer(5);
            exit;
        }

        
// for test
        
if (strstr($bill_id"_TEST_")!=false)
        {
            
$this->sendAnswer(0);
            exit;
        }



        
$service_url 'https://qiwi.com/api/v2/prv/' $this->config->get('qiwi_rest_shop_id') . '/bills/' $bill_id;
        
$ch curl_init($service_url);
        
curl_setopt($chCURLOPT_HTTPAUTHCURLAUTH_BASIC); 
            
curl_setopt($chCURLOPT_USERPWD$this->config->get('qiwi_rest_id') . ":" $this->config->get('qiwi_rest_password'));
        
curl_setopt($chCURLOPT_HEADERfalse);
        
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
        
curl_setopt($chCURLOPT_SSL_VERIFYPEERFALSE);
            
curl_setopt($chCURLOPT_HTTPHEADER, array (
            
"Accept: text/json"
            
));


        
$curl_response curl_exec($ch);
        if (
$curl_response === false) {
                
$info curl_error($ch);
                
curl_close($ch);
                
$this->log->write('qiwi_rest get error ' .  $info);
                
$this->sendAnswer(5);
                return ; 
        }
        
curl_close($ch);
        
$decoded json_decode($curl_response);

        if (
$decoded->response->result_code != 0) {
                
$this->log->write('qiwi_rest get error code ' $decoded->response->result_code);
                
$this->sendAnswer(5);
            return;
        }

        
$bill_amount $decoded->response->bill->amount;
        
$bill_status $decoded->response->bill->status;

        
$this->load->model('checkout/order');

        
$order_info $this->model_checkout_order->getOrder($bill_id);
        if(!
$order_info
        {
            
$this->sendAnswer(210);
            exit;
        }


        
// Статус проведения счета.
        
if( $status == 'paid' ) {

            if (
$amount != $bill_amount)
            {
                    
$this->log->write('qiwi_rest bill_amount error - ' $amount':' $bill_amount );
                    
$this->sendAnswer(5);
                return;
            }
    
            if (
$status != $bill_status)
            {
                    
$this->log->write('qiwi_rest bill_status error - ' $status':' $bill_status);
                    
$this->sendAnswer(5);
                return;
            }

            if( 
$order_info['order_status_id'] == 0) {
                
$this->model_checkout_order->addOrderHistory($bill_id$this->config->get('qiwi_rest_order_status_id'), 'qiwi_rest');
                return 
$param;
            }

            if( 
$order_info['order_status_id'] != $this->config->get('qiwi_rest_order_status_id')) {
                
$this->model_checkout_order->addOrderHistory($bill_id$this->config->get('qiwi_rest_order_status_id'),'qiwi_rest',TRUE);
            }
        } elseif( 
$status == 'waiting') {

            if( 
$order_info['order_status_id'] == 0) {
                
$this->model_checkout_order->addOrderHistory($bill_id$this->config->get('qiwi_rest_order_status_progress_id'), 'qiwi_rest');
                return 
$param;
            }

            if( 
$order_info['order_status_id'] != $this->config->get('qiwi_rest_order_status_progress_id')) {
                
$this->model_checkout_order->addOrderHistory($bill_id$this->config->get('qiwi_rest_order_status_progress_id'),'qiwi_rest',TRUE);
            }

        } else {

            if( 
$order_info['order_status_id'] == 0) {
                
$this->model_checkout_order->addOrderHistory($bill_id$this->config->get('qiwi_rest_order_status_cancel_id'), 'qiwi_rest');
                return 
$param;
            }

            if( 
$order_info['order_status_id'] != $this->config->get('qiwi_rest_order_status_cancel_id')) {
                
$this->model_checkout_order->addOrderHistory($bill_id$this->config->get('qiwi_rest_order_status_cancel_id'),'qiwi_rest',TRUE);
            }

        }


        
$this->sendAnswer(0);

    }


}
Онлайн: 1
Реклама