/** * @desc authorise response * Process the response of the soap * * @param Varien_Object $payment * @param stdClass $response * @param null $request * * @return $this * @todo Add comment with checkout Authorised */ protected function _processResponse(Varien_Object $payment, $response, $request = null) { if (!$response instanceof stdClass) { return false; } switch ($request) { case "authorise": case "authorise3d": if ($response->paymentResult->fraudResult) { $fraudResult = $response->paymentResult->fraudResult->accountScore; $payment->setAdyenTotalFraudScore($fraudResult); } $responseCode = $response->paymentResult->resultCode; $pspReference = $response->paymentResult->pspReference; // save pspreference to match with notification $payment->setAdyenPspReference($pspReference); break; case "refund": $responseCode = $response->refundResult->response; $pspReference = $response->refundResult->pspReference; break; case "cancel_or_refund": $responseCode = $response->cancelOrRefundResult->response; $pspReference = $response->cancelOrRefundResult->pspReference; break; case "capture": $responseCode = $response->captureResult->response; $pspReference = $response->captureResult->pspReference; break; default: $responseCode = null; $this->writeLog("Unknown data type by Adyen"); break; } switch ($responseCode) { case "RedirectShopper": $payment->setAdditionalInformation('paRequest', $response->paymentResult->paRequest); $payment->setAdditionalInformation('md', $response->paymentResult->md); $payment->setAdditionalInformation('issuerUrl', $response->paymentResult->issuerUrl); Mage::getSingleton('customer/session')->setRedirectUrl("adyen/process/validate3d"); $this->_addStatusHistory($payment, $responseCode, $pspReference, $this->_getConfigData('order_status')); break; case "Refused": if ($response->paymentResult->refusalReason) { $refusalReason = $response->paymentResult->refusalReason; switch ($refusalReason) { case "Transaction Not Permitted": $errorMsg = Mage::helper('adyen')->__('The transaction is not permitted.'); break; case "CVC Declined": $errorMsg = Mage::helper('adyen')->__('Declined due to the Card Security Code(CVC) being incorrect. Please check your CVC code!'); break; case "Restricted Card": $errorMsg = Mage::helper('adyen')->__('The card is restricted.'); break; case "803 PaymentDetail not found": $errorMsg = Mage::helper('adyen')->__('The payment is REFUSED because the saved card is removed. Please try an other payment method.'); break; default: $errorMsg = Mage::helper('adyen')->__('The payment is REFUSED by Adyen.'); break; } } else { $errorMsg = Mage::helper('adyen')->__('The payment is REFUSED by Adyen.'); } Adyen_Payment_Exception::throwException($errorMsg); break; case "Authorised": $this->_addStatusHistory($payment, $responseCode, $pspReference, $this->_getConfigData('order_status')); break; case "Received": // boleto payment $pdfUrl = null; $additionalDataResults = $response->paymentResult->additionalData->entry; foreach ($additionalDataResults as $additionalDataResult) { if ($additionalDataResult->key == "boletobancario.url") { $pdfUrl = $additionalDataResult->value; } } $this->_addStatusHistory($payment, $responseCode, $pspReference, false, $pdfUrl); break; case '[capture-received]': case '[refund-received]': case '[cancelOrRefund-received]': $this->_addStatusHistory($payment, $responseCode, $pspReference); break; case "Error": $errorMsg = Mage::helper('adyen')->__('System error, please try again later'); Adyen_Payment_Exception::throwException($errorMsg); break; default: $this->writeLog("Unknown data type by Adyen"); break; } //save all response data for a pure duplicate detection Mage::getModel('adyen/event')->setPspReference($pspReference)->setAdyenEventCode($responseCode)->setAdyenEventResult($responseCode)->setIncrementId($payment->getOrder()->getIncrementId())->setPaymentMethod($this->getInfoInstance()->getCcType())->setCreatedAt(now())->saveData(); return $this; }