/** * 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); } }
/** * 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); }
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); }
/** * 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); }
/** * 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); }
/** * 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); }
/** * 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); }
/** * 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); } }
public function processReturn(\XLite\Model\Payment\Transaction $transaction) { parent::processReturn($transaction); $this->transaction->setStatus($transaction::STATUS_PENDING); }
public function processReturn(\XLite\Model\Payment\Transaction $transaction) { parent::processReturn($transaction); }
/** * 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); } }
/** * 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)); }
/** * 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'); } }