/** * Get order instance based on last order ID * * @return \Magento\Sales\Model\Order */ public function getLastRealOrder() { $orderId = $this->getLastRealOrderId(); if ($this->_order !== null && $orderId == $this->_order->getIncrementId()) { return $this->_order; } $this->_order = $this->_orderFactory->create(); if ($orderId) { $this->_order->loadByIncrementId($orderId); } return $this->_order; }
public function procesWebhook($json = null) { /** * Se valida el request y se transforma con la cadena a un objeto de tipo CpOrderInfo con el Factory */ if (empty($json) || !($resp_webhook = Factory::cpOrderInfo($json))) { die('Tipo de Request no Valido'); } /** * Gurdamos la informacion necesaria para el Cliente * las llaves de compropago y el modo de ejecucion de la tienda */ $publickey = $this->model->getPublicKey(); $privatekey = $this->model->getPrivateKey(); $live = $this->model->getLiveMode(); // si es modo pruebas cambiar por 'false' /** * Se valida que las llaves no esten vacias (No es obligatorio pero si recomendado) */ //keys set? if (empty($publickey) || empty($privatekey)) { die("Se requieren las llaves de compropago"); } try { /** * Se incializa el cliente */ $client = new Client($publickey, $privatekey, $live); /** * Validamos que nuestro cliente pueda procesar informacion */ Validations::validateGateway($client); } catch (\Throwable $e) { //something went wrong at sdk lvl die($e->getMessage()); } /** * Verificamos si recivimos una peticion de prueba */ if ($resp_webhook->getId() == "ch_00000-000-0000-000000") { die("Probando el WebHook?, <b>Ruta correcta.</b>"); } try { /** * Verificamos la informacion del Webhook recivido */ $response = $client->api->verifyOrder($resp_webhook->getId()); /** * Comprovamos que la verificacion fue exitosa */ if ($response->getType() == 'error') { die('Error procesando el número de orden'); } $this->orderManager->loadByIncrementId($response->getOrderInfo()->getOrderId()); /** * Generamos las rutinas correspondientes para cada uno de los casos posible del webhook */ switch ($response->getType()) { case 'charge.success': $this->orderManager->setState('processing'); break; case 'charge.pending': $this->orderManager->setState('pending_payment'); break; case 'charge.declined': $this->orderManager->setState('canceled'); break; case 'charge.expired': $this->orderManager->setState('canceled'); break; case 'charge.deleted': $this->orderManager->setState('canceled'); break; case 'charge.canceled': $this->orderManager->setState('canceled'); break; default: die('Invalid Response type'); } } catch (\Exception $e) { //something went wrong at sdk lvl die($e->getMessage()); } }