2

We have a payment gateway called atom for our opencart store. Recently we have upgraded Opencart from 1.5.6.4 to 2.0.1.0 version. Due to this payment method stopped working. I have gone through this post to understand the changes in opencart 2.0

Below is my updated code

//catalog/controller/payment/atompay.php
<?php

class ControllerPaymentAtompay extends Controller {
    protected function index() {
        $this->language->load('payment/atompay');

        $data['button_confirm'] = $this->language->get('button_confirm');       
        $data['url2'] = $this->url->link('payment/atompay/dopayment');  
        $this->session->data['order_id'];       



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




        //$this->render();      
    }
    public function dopayment() {

        $vendor = $this->config->get('atompay_vendor');
        $password = $this->config->get('atompay_password');     
        $data['action'] = $this->config->get('atompay_url');        

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

        $order_info = $this->model_checkout_order->getOrder($this->session->data['order_id']);
        $datenow        = date("d/m/Y");
        $data['BillingCity']           = $order_info['payment_city'];
        $data['BillingPostCode']       = $order_info['payment_postcode'];   
        $data['BillingCountry']      = $order_info['payment_iso_code_2'];

        $data['login']         = $this->config->get('atompay_vendor');
        $data['pass']              = $this->config->get('atompay_password');
        $data['ttype']         = 'NBFundTransfer';
        $data['action']        = $this->config->get('atompay_url');
        $data['prodid']        = $this->config->get('atompay_prodid');
        $data['amt']               = $this->currency->format($order_info['total'], $order_info['currency_code'], $order_info['currency_value'], false);
        $data['txnid']         = $this->session->data['order_id'];
        $data['txndate']           = $datenow;
        $data['CustomerName']    = html_entity_decode($order_info['payment_firstname'] . ' ' . $order_info['payment_lastname'], ENT_QUOTES, 'UTF-8');
        $data['CustomerEMail']   = $order_info['email'];
        $data['BillingPhone']    = $order_info['telephone'];
        $data['BillingAddress1'] = $order_info['payment_address_1']."|".$data['BillingCity']."|".$data['BillingCountry'];
        $data['ru']            = $this->url->link('payment/atompay/success');

        $postFields  = "";
        $postFields .= "&login=".$data['login'];
        $postFields .= "&pass=".$data['pass'];
        $postFields .= "&ttype=".$data['ttype'];
        $postFields .= "&prodid=".$data['prodid'];
        $postFields .= "&amt=".$data['amt'];
        $postFields .= "&txncurr=INR";
        $postFields .= "&txnscamt=0";
        $postFields .= "&clientcode=".urlencode(base64_encode('123'));
        $postFields .= "&txnid=".$data['txnid'];
        $postFields .= "&date=".$datenow;
        $postFields .= "&custacc=123456789012";
        $postFields .= "&udf1=".$data['CustomerName'];
        $postFields .= "&udf2=".$data['CustomerEMail'];
        $postFields .= "&udf3=".$data['BillingPhone'];
        $postFields .= "&udf4=".$data['BillingAddress1'];
        $postFields .= "&ru=".$data['ru'];


        $sendUrl = $data['action']."?".substr($postFields,1);

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL,$data['action']);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_PORT , 80); 
        curl_setopt($ch, CURLOPT_SSLVERSION,3);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
        $returnData = curl_exec($ch); 

        $parser = xml_parser_create('');
        xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, "UTF-8"); 
        xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
        xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
        xml_parse_into_struct($parser, trim($returnData), $xml_values);
        xml_parser_free($parser);

        if(isset($xml_values[3]['value'])=='' || isset($xml_values[4]['value'])=='' || isset($xml_values[5]['value'])=='')
            {
                $this->redirect($this->url->link('checkout/atomfailure&msg=1'));
            }

        $returnArray['url']         = $xml_values[3]['value'];
        $returnArray['ttype']       = $xml_values[4]['value'];
        $returnArray['tempTxnId']   = $xml_values[5]['value'];
        $returnArray['token']       = $xml_values[6]['value'];      

        $url =$returnArray['url'] ;
        $postFields  = "";
        $postFields .= "&ttype=".$returnArray['ttype'] ;
        $postFields .= "&tempTxnId=".$returnArray['tempTxnId'];
        $postFields .= "&token=".$returnArray['token'] ;
        $postFields .= "&txnStage=1";
        $url = $url."?".$postFields;

        if($returnArray['tempTxnId']=='')
            {
                $this->redirect($this->url->link('checkout/atomfailure&msg=1'));
            }
        else
            {
                header("Location: ".$url);  
            }
    }
    public function success() {
        if ($this->request->post['f_code'] =='Ok') {
            $this->load->model('checkout/order');
            $this->model_checkout_order->confirm($this->request->post['mer_txn'], $this->config->get('config_order_status_id'),"Payment Pending");
            $this->model_checkout_order->update($this->request->post['mer_txn'], $this->config->get('atompay_order_status_id'), "Payment Received", false);     
            $this->redirect($this->url->link('checkout/success'));      
        }
        else
            {
            $message = "Payment failed";
            $this->load->model('checkout/order');
            $this->model_checkout_order->confirm($this->request->post['mer_txn'], $this->config->get('config_order_status_id'),"Payment Pending");
            $this->model_checkout_order->update($this->request->post['mer_txn'], $this->config->get('config_order_status_id'), $message, false);
            //$this->error['warning'] = "Transaction Denied. Payment failed.";
            $this->redirect($this->url->link('checkout/atomfailure'));
        }
    }   
}
?>

And

//catalog/model/payment/atompay.php
<?php 
class ModelPaymentAtomPay extends Model {
    public function getMethod($address, $total) {
        $this->load->language('payment/atompay');

        $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "zone_to_geo_zone WHERE geo_zone_id = '" . (int)$this->config->get('atompay_geo_zone_id') . "' AND country_id = '" . (int)$address['country_id'] . "' AND (zone_id = '" . (int)$address['zone_id'] . "' OR zone_id = '0')");

        if ($this->config->get('atompay_total') > $total) {
            $status = false;
        } elseif (!$this->config->get('atompay_geo_zone_id')) {
            $status = true;
        } elseif ($query->num_rows) {
            $status = true;
        } else {
            $status = false;
        }   

        $method_data = array();

        if ($status) {  
            $method_data = array( 
                'code'       => 'atompay',
                'title'      => $this->language->get('text_title'),
                'terms'      => '',
                'sort_order' => $this->config->get('atompay_sort_order')
            );
        }

        return $method_data;
    }
}
?>

When i try to make an order confirm order is disabled and there are no error logs found. Am i missing something?

Community
  • 1
  • 1
Sanjeev Hegde
  • 140
  • 13
  • I am not getting last line of your question, "When i try to make an order confirm order is disabled and there are no error logs found. Am i missing something?" are you talking about front end side on checkout page or admin side ? – Nipun Tyagi Jun 09 '15 at 05:12
  • are you sure `dopayment()` method is called or not when you confirm order. You should first check whether your methods are called or not. And also if there are some changes in admin panel make sure you are getting all the data you saved in config `setting table`. And also check in `tpl` file that is it calling a right file for payment or not. – Vidhyut Pandya Jun 09 '15 at 07:18
  • **Update** `protected function index()` should be `public function index()` – Vidhyut Pandya Jun 09 '15 at 07:24
  • Thanks a lot @VedPandya You saved my time. By changing it to `public function index()` from `protected function index()` everything worked fine – Sanjeev Hegde Jun 09 '15 at 09:51
  • Posting as an answer. So that others will get it clearly. – Vidhyut Pandya Jun 09 '15 at 12:31

1 Answers1

0

Your index() method is defined with protected access. So you are unable to call it from outside its scope. So you should change it to public function index().

Vidhyut Pandya
  • 1,605
  • 1
  • 14
  • 27