public function postProcess() { /* Dados do post enviado pelo Bcash */ $transactionId = Tools::getValue('transacao_id'); $orderId = Tools::getValue('pedido'); $statusId = Tools::getValue('status_id'); if ($this->isCurrentState($orderId, $statusId)) { return; } $email = Configuration::get(self::prefix . 'EMAIL'); $token = Configuration::get(self::prefix . 'TOKEN'); $notificationContent = new NotificationContent($transactionId, $orderId, $statusId); $notification = new Notification($email, $token, $notificationContent); $notification->enableSandBox(Configuration::get(self::prefix . 'SANDBOX')); $transactionValue = $this->getOrderValue($orderId); try { $result = $notification->verify($transactionValue); if ($result) { $this->updateStatus($orderId, $statusId); $this->writeHistory($orderId, $transactionId); } } catch (ValidationException $e) { $this->logUpdateFail($orderId, $transactionId, $statusId, $e); } catch (ConnectionException $e) { $this->logUpdateFail($orderId, $transactionId, $statusId, $e); } }
/** * Recebimento de notificações pela API */ public function requestAction() { // GET THIS URL -> Mage::getUrl('pagamento/notification/request') // POST request $transactionId = Mage::app()->getRequest()->getParam('transacao_id'); $orderId = trim(stripslashes(Mage::app()->getRequest()->getParam('pedido'))); $statusId = (int) Mage::app()->getRequest()->getParam('status_id'); $status = Mage::app()->getRequest()->getParam('status'); // Instância de classe de notificação $notificationContent = new NotificationContent($transactionId, $orderId, $statusId); $notification = new Notification($this->email, $this->token, $notificationContent); $notification->enableSandBox($this->sandbox); try { // Request log Mage::helper("bcash")->saveLog('Step 2 - Informacoes da requisicao recebida: {transacao_id: ' . $transactionId . ', pedido: ' . $orderId . ', status_id: ' . $statusId . ', status: ' . $status . '}'); $order = Mage::getModel('sales/order')->loadByIncrementId($orderId); if ($order->getData() != null) { // Checa requisição válida através de valor total do pedido (valor dos produtos + frete + acréscimo - desconto) $transactionValue = $order->getBaseGrandTotal(); $validNotification = $notification->verify($transactionValue); if ($validNotification == true) { // Checa se o código da transação está relacionado com o pedido if ($this->isValidTransactionForOrder($order, $transactionId)) { Mage::helper("bcash")->saveLog("Step 3 - Notificacao pode ser processada no pedido."); // Registro de notificação recebida $order->addStatusHistoryComment('Notificação da transação de pagamento recebida. Status: ' . $status); $order->save(); // Processamento da notificação no pedido $this->processNotification($transactionId, $orderId, $statusId); } else { Mage::helper("bcash")->saveLog("Step 3 - A transacao recebida nao esta relacionada com o pedido e nao sera processada."); } } else { Mage::helper("bcash")->saveLog("Step 3 - Notificacao invalida recebida."); } } else { Mage::helper("bcash")->saveLog("Step 3 - Atencao!!! Pedido " . $orderId . " nao encontrado. "); } } catch (ValidationException $e) { Mage::helper("bcash")->saveLog("Validation error - NotificationController->requestAction: " . $e->getMessage(), $e->getErrors()); } catch (ConnectionException $e) { Mage::helper("bcash")->saveLog("Connection error - NotificationController->requestAction: " . $e->getMessage(), $e->getErrors()); } }