X-Cart: shopping cart software

X-Cart forums (https://forum.x-cart.com/index.php)
-   Third Party Add-Ons for X-Cart 5 (https://forum.x-cart.com/forumdisplay.php?f=64)
-   -   Custom Module call after Payment transaction (https://forum.x-cart.com/showthread.php?t=74981)

Sooraj 02-08-2017 04:52 AM

Custom Module call after Payment transaction - Xcart 5.3
 
Im trying to implement a third party library related to credit card prevention service. I have installed xpayment connector and enabled authorizenet aim module.
I need to fetch credit card details that customer entered and pass those informations with order details to api.
How can I call my function after order is processed. I tried to call my function within handleCheckoutAction() but couldn't fetch credit card datas.

My module structure is:
Code:

CustomModule/
  CustomModule/
    Install.yaml
    Main.php
    icon.png
    Model/
        Payment/
          Transaction.php



Transaction.php file


Code:

<?php
// vim: set ts=4 sw=4 sts=4 et:

namespace XLite\Module\CustomModule\CustomModule\Model\Payment;

/**
 * Payment transaction
 *
 */
class Transaction extends \XLite\Model\Payment\Transaction implements \XLite\Base\IDecorator
{
   
    protected function getclientIpAddress()
    {
        $ipaddress = '';
        if (getenv('HTTP_CLIENT_IP'))
            $ipaddress = getenv('HTTP_CLIENT_IP');
        else if(getenv('HTTP_X_FORWARDED_FOR'))
            $ipaddress = getenv('HTTP_X_FORWARDED_FOR');
        else if(getenv('HTTP_X_FORWARDED'))
            $ipaddress = getenv('HTTP_X_FORWARDED');
        else if(getenv('HTTP_FORWARDED_FOR'))
            $ipaddress = getenv('HTTP_FORWARDED_FOR');
        else if(getenv('HTTP_FORWARDED'))
          $ipaddress = getenv('HTTP_FORWARDED');
        else if(getenv('REMOTE_ADDR'))
            $ipaddress = getenv('REMOTE_ADDR');
        else
            $ipaddress = 'UNKNOWN';
        return $ipaddress;
    }

    protected function getFormattedPrice($price)
    {
        return number_format(
            $price,//$this->transaction->getCurrency()->roundValue($price),
            2,
            '.',
            ''
        );
    }

    /**
    * Process checkout action
    *
    * @return string
    */
    public function handleCheckoutAction()
    {
        $this->processCardFraudCheck();

        return parent::handleCheckoutAction();
    }

    public function processCardFraudCheck()
    {
           
            $config = \XLite\Core\Config::getInstance()->CustomModule->CustomModule;

            $api_key        = $config->my_api_key;
            $api_endpoint  = $config->my_api_url;
            $api_endpoint  = rtrim($api_endpoint, '/');
            $api_url        = $api_endpoint.'/cases';

            $currencytype  = $this->getOrder()->getCurrency();
            $currency      = $currencytype->getCode();

            //@todo - check if payment method is authorizenet
            $paymentMethod      = $this->getOrder()->getPaymentMethod();
            $paymentGateway    = $paymentMethod->getServiceName();
            /*if($paymentGateway != 'XPayments.XPay_Module_AuthorizeNetXML' || $paymentGateway != 'Stripe'){
                return;
            }*/
            $paymentGateway = 'authorizenet';

            $shippingAddress = $this->getProfile()->getShippingAddress();
            if (null === $shippingAddress) {
                $shippingAddress = $this->getProfile()->getBillingAddress();
            }
           
            $objDateTime = new \DateTime('NOW');
            $isoDate = $objDateTime->format(\DateTime::ISO8601);

            //products info
            $cart_items = array();
            foreach ($this->getOrder()->getItems() as $item) {

                $product = $item->getProduct();
                $cart_items[] = array(
                    'itemId' => $product->getProductId(),
                    'itemName' => $product->getName(),
                    'itemUrl' => $product->getCleanURL(),
                    'itemPrice' => $this->getFormattedPrice($item->getNetPrice()),
                    'itemQuantity' => $item->getAmount()
                );
            }
            //recipient info
            $billingFirst      = $this->getProfile()->getBillingAddress()->getFirstname();
            $billingLast        = $this->getProfile()->getBillingAddress()->getLastname();
            $billingAddress1    = $this->getProfile()->getBillingAddress()->getStreet();
            $billingAddress2    = '';
            $billingCity        = $this->getProfile()->getBillingAddress()->getCity();
            $billingState      = '';
            $billingZip        = $this->getProfile()->getBillingAddress()->getZipcode();
            $billingPhone      = $this->getProfile()->getBillingAddress()->getPhone();
            $billingEmail      = $this->getProfile()->getLogin();
            $billingCountry    = strtoupper($this->getProfile()->getBillingAddress()->getCountry()->getCode());
            if ('US' === $billingCountry) {
                $billingState = $this->getProfile()->getBillingAddress()->getState()->getCode();
            }

            $shippingFirst      = $shippingAddress->getFirstname();
            $shippingLast      = $shippingAddress->getLastname();
            $shippingAddress1  = $shippingAddress->getStreet();
            $shippingAddress2  = '';
            $shippingCity      = $shippingAddress->getCity();
            $shippingState      = '';
            $shippingZip        = $shippingAddress->getZipcode();
            $shippingPhone      = '';
            $shippingCountry    = strtoupper($shippingAddress->getCountry()->getCode());
            if ('US' === $shippingCountry) {
                $shippingState = $shippingAddress->getState()->getCode();
            }

            $request = \XLite\Core\Request::getInstance();
           
            //@todo - get credit card details
            $card_number        = $request->card_number;
            $card_holder_name  = $request->card_name;
            $card_expire        = $request->card_number;
            $expire_info        = explode('/', $card_expire);
            $card_expire_month  = $expire_info[0];
            $card_expire_year  = $expire_info[1];

            //@todo - get credit card info avs cvv response etc
            $avsResponseCode    = 'Y';
            $cvvResponseCode    = 'M';


            $bin = $card_number;
            $bin = str_replace("-","",$bin);
            $bin = str_replace(" ","",$bin) ;
            $bin = substr($bin, 0, 6);

            $totalPrice        = $this->getFormattedPrice($this->getOrder()->getTotal());

            //@todo - get order number instead orderid
            $orderId          = $this->getOrder()->getOrderId();//$this->getTransactionId();
            $order_number      = \XLite\Core\Request::getInstance()->order_number;
         
            //code to call api

            \XLite\Core\OrderHistory::getInstance()->registerEvent(
                    $this->getOrder()->getOrderId(),
                    \XLite\Core\OrderHistory::CODE_CHANGE_STATUS_ORDER,
                    'credit card fraud prevention service is applied. '.
                );

       
    }
}


How can I fetch credit card information after order is processed.


All times are GMT -8. The time now is 03:58 AM.

Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.