public function testGenerateConfirmResponseHtmlCommentOKString()
 {
     $response = WirecardCEE_QMore_ReturnFactory::generateConfirmResponseString('', true);
     $this->assertEquals('<!--<QPAY-CONFIRMATION-RESPONSE result="OK" />-->', $response);
 }
Exemplo n.º 2
0
 /**
  * Process transaction confirm message
  */
 public function confirmAction()
 {
     /** @var Wirecard_CheckoutSeamless_Helper_Data $helper */
     $helper = Mage::helper('wirecard_checkoutseamless');
     try {
         if (!$this->getRequest()->isPost()) {
             throw new Exception('Not a POST message');
         }
         $data = $this->getRequest()->getPost();
         $helper->log(__METHOD__ . ':' . print_r($data, true));
         if (!isset($data['mage_orderId'])) {
             throw new Exception('Magent OrderId is missing');
         }
         $return = WirecardCEE_QMore_ReturnFactory::getInstance($data, $helper->getConfigData('settings/secret'));
         if (!$return->validate()) {
             throw new Exception('Validation error: invalid response');
         }
         /** @var Mage_Sales_Model_Order $order */
         $order = Mage::getModel('sales/order');
         $order->loadByIncrementId($data['mage_orderId']);
         if (!$order->getId()) {
             throw new Exception('Order not found with Id:' . $data['mage_orderId']);
         }
         /** @var Wirecard_CheckoutSeamless_Model_Abstract $paymentInst */
         $paymentInst = $order->getPayment()->getMethodInstance();
         $paymentInst->setResponse($data);
         switch ($return->getPaymentState()) {
             case WirecardCEE_QMore_ReturnFactory::STATE_SUCCESS:
             case WirecardCEE_QMore_ReturnFactory::STATE_PENDING:
                 $this->_confirmOrder($order, $return);
                 break;
             case WirecardCEE_QMore_ReturnFactory::STATE_CANCEL:
                 /** @var WirecardCEE_QMore_Return_Cancel $return */
                 $this->_cancelOrder($order);
                 break;
             case WirecardCEE_QMore_ReturnFactory::STATE_FAILURE:
                 /** @var WirecardCEE_QMore_Return_Failure $return */
                 if (!$this->_succeeded($order)) {
                     $msg = array();
                     foreach ($return->getErrors() as $error) {
                         $msg[] = $error->getConsumerMessage();
                     }
                     if (!count($msg)) {
                         // dont show technical error to consumer
                         $message = $helper->__('An error occured during the payment process');
                     } else {
                         $message = implode("<br/>\n", $msg);
                     }
                     $payment = $order->getPayment();
                     $additionalInformation = array('confirmProcessed' => true, 'consumerMessage' => $message);
                     $payment->setAdditionalInformation($additionalInformation);
                     $payment->setAdditionalData(serialize($additionalInformation));
                     $payment->save();
                     $order->setState(Mage_Sales_Model_Order::STATE_PENDING_PAYMENT, true, $helper->__('An error occured during the payment process'))->save();
                     $order->cancel();
                 }
                 break;
             default:
                 throw new Exception('Unhandled Wirecard Checkout Seamless payment state:' . $return->getPaymentState());
         }
         $order->save();
         die(WirecardCEE_QMore_ReturnFactory::generateConfirmResponseString());
     } catch (Exception $e) {
         $helper->log(__METHOD__ . ':' . $e->getMessage(), Zend_Log::ERR);
         die(WirecardCEE_QMore_ReturnFactory::generateConfirmResponseString($e->getMessage()));
     }
 }