Example #1
0
 /**
  * @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;
 }