Esempio n. 1
0
 /**
  * Process return
  *
  * @param \XLite\Model\Payment\Transaction $transaction Return-owner transaction
  *
  * @return void
  */
 public function processReturn(\XLite\Model\Payment\Transaction $transaction)
 {
     parent::processReturn($transaction);
     $request = \XLite\Core\Request::getInstance();
     if ($request->isPost() && isset($request->trans_result)) {
         $status = 'APPROVED' == $request->trans_result ? $transaction::STATUS_SUCCESS : $transaction::STATUS_FAILED;
         $this->saveDataFromRequest();
         // Amount checking
         if (isset($request->amount) && !$this->checkTotal($request->amount)) {
             $status = $transaction::STATUS_FAILED;
         }
         if (isset($request->decline_reason)) {
             $this->transaction->setNote($request->decline_reason);
         }
         // MD5 hash checking
         if ($status == $transaction::STATUS_SUCCESS && isset($request->md5_hash)) {
             $order = $this->getOrder();
             $amount = $order->getCurrency()->roundValue($this->transaction->getValue());
             $hash = md5(strval($this->getSetting('hash')) . $this->getSetting('login') . $request->transID . number_format($amount, 2) . ('Y' == $this->getSetting('include_response') ? $request->trans_result : ''));
             if ($hash != $request->md5_hash) {
                 $status = $transaction::STATUS_FAILED;
                 $this->setDetail('hash_checking', 'failed', 'MD5 hash checking');
             }
         }
         $this->transaction->setStatus($status);
     }
 }
Esempio n. 2
0
 /**
  * Process return
  *
  * @param \XLite\Model\Payment\Transaction $transaction Return-owner transaction
  *
  * @return void
  */
 public function processReturn(\XLite\Model\Payment\Transaction $transaction)
 {
     parent::processReturn($transaction);
     $request = \XLite\Core\Request::getInstance();
     $status = 1 == $request->x_response_code ? $transaction::STATUS_SUCCESS : $transaction::STATUS_FAILED;
     if (isset($request->x_response_reason_text)) {
         $this->setDetail('response', $request->x_response_reason_text, 'Response');
         $this->transaction->setNote($request->x_response_reason_text);
     } elseif (isset($this->err[$request->x_response_reason_code])) {
         $this->setDetail('response', $this->err[$request->x_response_reason_code], 'Response');
         $this->transaction->setNote($this->err[$request->x_response_reason_code]);
     }
     if ($request->x_auth_code) {
         $this->setDetail('authCode', $request->x_auth_code, 'Auth code');
     }
     if ($request->x_trans_id) {
         $this->setDetail('transId', $request->x_trans_id, 'Transaction ID');
     }
     if ($request->x_response_subcode) {
         $this->setDetail('responseSubcode', $request->x_response_subcode, 'Response subcode');
     }
     if (isset($request->x_avs_code) && isset($this->avserr[$request->x_avs_code])) {
         $this->setDetail('avs', $this->avserr[$request->x_avs_code], 'AVS status');
     }
     if (isset($request->x_CVV2_Resp_Code) && isset($this->cvverr[$request->x_CVV2_Resp_Code])) {
         $this->setDetail('cvv', $this->cvverr[$request->x_CVV2_Resp_Code], 'CVV status');
     }
     if (!$this->checkTotal($request->x_amount)) {
         $status = $transaction::STATUS_FAILED;
     }
     $this->transaction->setStatus($status);
 }
Esempio n. 3
0
 public function processReturn(\XLite\Model\Payment\Transaction $transaction)
 {
     parent::processReturn($transaction);
     $result = \XLite\Core\Request::getInstance()->status;
     $status = 'Paid' == $result ? $transaction::STATUS_PENDING : $transaction::STATUS_FAILED;
     $this->transaction->setStatus($status);
 }
Esempio n. 4
0
 /**
  * Process return
  *
  * @param \XLite\Model\Payment\Transaction $transaction Return-owner transaction
  *
  * @return void
  */
 public function processReturn(\XLite\Model\Payment\Transaction $transaction)
 {
     parent::processReturn($transaction);
     \XLite\Module\XC\IdealPayments\Main::addLog('processReturn', \XLite\Core\Request::getInstance()->getData());
     $message = '';
     $data = array();
     if (\XLite\Core\Request::getInstance()->ec && \XLite\Core\Request::getInstance()->trxid) {
         // iDEAL must redirect customer to URL with parameters ec and trxid
         $status = $transaction::STATUS_FAILED;
         // Perform request for transaction status to iDEAL server
         $statusRequest = $this->getIdealRequest('status');
         $statusRequest->setTransactionId(\XLite\Core\Request::getInstance()->trxid);
         $transactionStatus = $statusRequest->doRequest();
         if ($statusRequest->hasErrors()) {
             // Response contains errors
             foreach ($statusRequest->getErrors() as $errorEntry) {
                 $message .= $errorEntry['desc'] . PHP_EOL;
             }
         } elseif (!empty($transactionStatus)) {
             // Transaction status successfully received
             if ($statusRequest->getAccountName()) {
                 $data['accountName'] = utf8_encode($statusRequest->getAccountName());
             }
             if ($statusRequest->getAccountNumber()) {
                 $data['accountNum'] = utf8_encode($statusRequest->getAccountNumber());
             }
             if (strcmp($transactionStatus, 'SUCCESS') === 0) {
                 // Transaction is successful
                 $status = $transaction::STATUS_SUCCESS;
             } elseif (strcmp($transactionStatus, 'CANCELLED') === 0) {
                 // Transaction is canceled by customer
                 $this->setDetail('status', 'Customer has canceled checkout before completing their payments', 'Status');
                 $this->transaction->setNote('Customer has canceled checkout before completing their payments');
                 $status = $transaction::STATUS_CANCELED;
             } else {
                 // Transaction is failed by iDEAL payment gateway
                 foreach ($statusRequest->getErrors() as $errorEntry) {
                     $message .= $errorEntry['desc'] . PHP_EOL;
                 }
             }
         } else {
             $message = static::t('Unexpected result was received from iDEAL (transaction status is not set)');
         }
     } else {
         $message = static::t('Payment return page requested without expected parameters');
     }
     // Save data in order history
     if ($message) {
         $data['message'] = $message;
     }
     if (!empty($data)) {
         $this->saveFilteredData($data);
     }
     // Set transaction status
     $this->transaction->setStatus($status);
 }
Esempio n. 5
0
 /**
  * Process return
  *
  * @param \XLite\Model\Payment\Transaction $transaction Return-owner transaction
  *
  * @return void
  */
 public function processReturn(\XLite\Model\Payment\Transaction $transaction)
 {
     parent::processReturn($transaction);
     $request = \XLite\Core\Request::getInstance();
     $requestBody = $this->decode($request->crypt);
     $status = $transaction::STATUS_FAILED;
     \XLite\Module\XC\SagePay\Main::addLog('processReturnRawResult', $request->getData());
     \XLite\Module\XC\SagePay\Main::addLog('processReturn', $requestBody);
     if (isset($requestBody['Status'])) {
         if ('OK' === $requestBody['Status']) {
             // Success status
             $this->setDetail('TxAuthNo', $requestBody['TxAuthNo'], 'Authorisation code of the transaction');
             $status = $transaction::STATUS_SUCCESS;
         } else {
             // Some error occuried
             $status = $transaction::STATUS_FAILED;
         }
         $this->setDetail('StatusDetail', $requestBody['StatusDetail'], 'Status details');
     } else {
         // Invalid response
         $this->setDetail('StatusDetail', 'Invalid response was received', 'Status details');
     }
     if (isset($requestBody['VPSTxId'])) {
         $this->setDetail('VPSTxId', $requestBody['VPSTxId'], 'The unique Sage Pay ID of the transaction');
     }
     if (isset($requestBody['AVSCV2'])) {
         $this->setDetail('AVSCV2', $requestBody['AVSCV2'], 'AVSCV2 Status');
     }
     if (isset($requestBody['AddressResult'])) {
         $this->setDetail('AddressResult', $requestBody['AddressResult'], 'Cardholder address checking status');
     }
     if (isset($requestBody['PostCodeResult'])) {
         $this->setDetail('PostCodeResult', $requestBody['PostCodeResult'], 'Cardholder postcode checking status');
     }
     if (isset($requestBody['CV2Result'])) {
         $this->setDetail('CV2Result', $requestBody['CV2Result'], 'CV2 code checking result');
     }
     if (isset($requestBody['3DSecureStatus'])) {
         $this->setDetail('3DSecureStatus', $requestBody['3DSecureStatus'], '3DSecure checking status');
     }
     if (!$this->checkTotal($requestBody['Amount'])) {
         $this->setDetail('StatusDetail', 'Invalid amount value was received', 'Status details');
         $status = $transaction::STATUS_FAILED;
     }
     $this->transaction->setStatus($status);
 }
Esempio n. 6
0
 /**
  * Process return
  *
  * @param \XLite\Model\Payment\Transaction $transaction Return-owner transaction
  *
  * @return void
  */
 public function processReturn(\XLite\Model\Payment\Transaction $transaction)
 {
     parent::processReturn($transaction);
     $request = \XLite\Core\Request::getInstance();
     $status = $request->cart_order_id ? $transaction::STATUS_SUCCESS : $transaction::STATUS_FAILED;
     // Checking MD5. /Secret/Account/OrderId/Total cost/
     $orderId = 'test' === $this->getSetting('mode') ? 1 : $request->order_number;
     $calculated = $this->getSetting('secret') . $this->getSetting('account') . $orderId . $this->getFormattedPrice($request->total);
     $calculated = strtoupper(md5($calculated));
     if ($calculated != $request->key) {
         $status = $transaction::STATUS_FAILED;
         $this->setDetail('verification', 'MD5 verification failed', 'Verification');
         $this->transaction->setNote('MD5 verification failed');
     }
     // Checking total cost value
     if (!$this->checkTotal($request->total)) {
         $status = $transaction::STATUS_FAILED;
     }
     $this->transaction->setStatus($status);
 }
Esempio n. 7
0
 /**
  * Process return
  *
  * @param \XLite\Model\Payment\Transaction $transaction Return-owner transaction
  *
  * @return void
  */
 public function processReturn(\XLite\Model\Payment\Transaction $transaction)
 {
     parent::processReturn($transaction);
     \XLite\Module\XC\EPDQ\Main::addLog('processReturn', \XLite\Core\Request::getInstance()->getData());
     $response = array_change_key_case(\XLite\Core\Request::getInstance()->getData(), CASE_UPPER);
     $status = $transaction::STATUS_FAILED;
     $this->saveDataFromRequest();
     if (\XLite\Core\Request::getInstance()->cancel) {
         // Cancel
         $this->setDetail('status', 'Customer has canceled checkout before completing their payments', 'Status');
         $this->transaction->setNote('Customer has canceled checkout before completing their payments');
         $status = $transaction::STATUS_CANCELED;
     } else {
         // Accept / Decline
         $message = '';
         if (!$this->isResponseTrusted($response)) {
             $message = static::t('Response from ePDQ is not trusted (SHA checking is failed)');
         } elseif (!isset($response['STATUS'])) {
             $message = static::t('Unexpected result was received from ePDQ (transaction status is not set)');
         } else {
             $allowedStatuses = $this->getEPDQStatuses();
             $this->setDetail('status', isset($allowedStatuses[$response['STATUS']]) ? $allowedStatuses[$response['STATUS']] : 'Unknown status received', 'Status');
             if (in_array($response['STATUS'], $this->getSuccessfulStatuses())) {
                 if (!$this->checkTotal($response['AMOUNT'])) {
                     $this->setDetail('StatusDetail', 'Invalid amount value was received. Transaction rejected.', 'Status details');
                     $status = $transaction::STATUS_FAILED;
                 } else {
                     $status = $transaction::STATUS_SUCCESS;
                 }
             }
         }
         if ($message) {
             $this->setDetail('status', $message, 'Status');
         }
     }
     $this->transaction->setStatus($status);
 }
Esempio n. 8
0
 /**
  * Process return
  *
  * @param \XLite\Model\Payment\Transaction $transaction Return-owner transaction
  *
  * @return void
  */
 public function processReturn(\XLite\Model\Payment\Transaction $transaction)
 {
     parent::processReturn($transaction);
     if (\XLite\Core\Request::getInstance()->cancel) {
         $this->setDetail('cancel', 'Customer has canceled checkout before completing their payments');
         $this->transaction->setStatus($transaction::STATUS_CANCELED);
     } elseif ($transaction::STATUS_INPROGRESS == $this->transaction->getStatus()) {
         $this->transaction->setStatus($transaction::STATUS_PENDING);
     }
 }
Esempio n. 9
0
 public function processReturn(\XLite\Model\Payment\Transaction $transaction)
 {
     parent::processReturn($transaction);
     $this->transaction->setStatus($transaction::STATUS_PENDING);
 }
Esempio n. 10
0
 public function processReturn(\XLite\Model\Payment\Transaction $transaction)
 {
     parent::processReturn($transaction);
 }
Esempio n. 11
0
 /**
  * Process return
  *
  * @param \XLite\Model\Payment\Transaction $transaction Return-owner transaction
  *
  * @return void
  */
 public function processReturn(\XLite\Model\Payment\Transaction $transaction)
 {
     parent::processReturn($transaction);
     if (\XLite\Core\Request::getInstance()->cancel) {
         $this->setDetail('cancel', 'Payment transaction is cancelled');
         $this->transaction->setStatus($transaction::STATUS_FAILED);
     } elseif ($transaction::STATUS_INPROGRESS == $this->transaction->getStatus()) {
         $this->transaction->setStatus($transaction::STATUS_PENDING);
     }
 }
Esempio n. 12
0
 /**
  * Process return
  *
  * @param \XLite\Model\Payment\Transaction $transaction Return-owner transaction
  *
  * @return void
  */
 public function processReturn(\XLite\Model\Payment\Transaction $transaction)
 {
     parent::processReturn($transaction);
     $request = \XLite\Core\Request::getInstance();
     static::log(array('request' => $request->getData()));
     $status = '';
     $notes = array();
     if ($request->type == 'accept') {
         $status = $transaction::STATUS_SUCCESS;
         $this->setDetail('result', 'Accept', 'Result');
         $notes[] = 'Accept';
     } elseif ($request->type == 'cancel') {
         $status = $transaction::STATUS_CANCELED;
         $this->setDetail('result', 'Cancel', 'Result');
         $notes[] = 'Cancel';
     } elseif ($request->type == 'decline') {
         $status = $transaction::STATUS_FAILED;
         $this->setDetail('result', 'Decline', 'Result');
         $notes[] = 'Decline';
     } elseif ($request->type == 'exception') {
         $status = $transaction::STATUS_FAILED;
         $this->setDetail('result', 'Exception', 'Result');
         $notes[] = 'Exception';
     } else {
         $status = $transaction::STATUS_FAILED;
         $this->setDetail('result', 'Result is incorrect', 'Result');
         $notes[] = 'Result is incorrect';
     }
     if (!$request->orderID) {
         $status = $transaction::STATUS_FAILED;
         $this->setDetail('order_checking', 'Order ID is empty', 'Checking');
         $notes[] = 'Order ID is empty';
     }
     $fields = $request->getGetData();
     unset($fields['SHASIGN'], $fields['target'], $fields['type'], $fields[self::RETURN_TXN_ID]);
     $hash = $this->generateSign($fields, $this->getSetting('shaOut'));
     if ($hash != $request->SHASIGN) {
         $status = $transaction::STATUS_FAILED;
         $this->setDetail('sha_verification', 'SHA verification failed', 'Verification');
         $notes[] = 'SHA verification failed';
     }
     if (!$this->checkTotal($request->amount)) {
         $status = $transaction::STATUS_FAILED;
         $this->setDetail('total_checking', 'Total checking failed', 'Checking');
         $notes[] = 'Total checking failed';
     }
     if (!$this->checkCurrency($request->CURRENCY)) {
         $status = $transaction::STATUS_FAILED;
         $this->setDetail('currency_checking', 'Currency checking failed', 'Checking');
         $notes[] = 'Currency checking failed';
     }
     $this->transaction->setStatus($status);
     $this->transaction->setNote(implode('. ', $notes));
 }
Esempio n. 13
0
 /**
  * Process return
  *
  * @param \XLite\Model\Payment\Transaction $transaction Return-owner transaction
  *
  * @return void
  */
 public function processReturn(\XLite\Model\Payment\Transaction $transaction)
 {
     parent::processReturn($transaction);
     $request = \XLite\Core\Request::getInstance();
     static::log(array('return' => $request->getData()));
     $status = $transaction::STATUS_FAILED;
     if (!empty($request->response_order_id) && !empty($request->response_code)) {
         if ('null' != $request->response_code && 50 > $request->response_code && 1 == $request->result && $this->checkTotal($request->charge_total)) {
             $status = $transaction::STATUS_SUCCESS;
         } elseif ($request->message && 'null' != $request->message) {
             $transaction->setNote($request->message);
             $this->setDetail('status', $request->message, 'Fail reason');
         }
     }
     $transaction->setStatus($status);
     if ('null' != $request->bank_transaction_id) {
         $this->setDetail('BankTransID', $request->bank_transaction_id, 'Bank transaction ID');
     }
     if ('null' != $request->bank_approval_code) {
         $this->setDetail('BankApproval', $request->bank_approval_code, 'Bank approval code');
     }
     if (!empty($request->transactionKey)) {
         $this->setDetail('TransactionKey', $request->transactionKey, 'Transaction key');
     }
     if (!empty($request->txn_num)) {
         $this->setDetail('TxnNum', $request->txn_num, 'Transaction number');
     }
     if (!empty($request->f4l4)) {
         $this->setDetail('CardF4L4', $this->cardTypes[$request->card] . ' #' . $request->f4l4 . ', Exp.:' . $request->expiry_date, 'Card');
     }
     if ($request->trans_name && 'null' != $request->trans_name) {
         $this->setDetail('TransName', $request->trans_name, 'Transaction type');
     }
 }