Example #1
0
 /**
  * Receives webhook events from Roadrunner
  */
 public function execute()
 {
     $this->_logger->addDebug('paystandmagento/webhook/paystand endpoint was hit');
     $body = @file_get_contents('php://input');
     $json = json_decode($body);
     $this->_logger->addDebug(">>>>> body=" . print_r($body, TRUE));
     if (isset($json->resource->meta->source) && $json->resource->meta->source == "magento 2") {
         $quoteId = $json->resource->meta->quote;
         $this->_logger->addDebug('magento 2 webhook identified with quote id = ' . $quoteId);
         $this->_order->loadByAttribute('quote_id', $quoteId);
         if (!empty($this->_order->getIncrementId())) {
             $this->_logger->addDebug('current order increment id = ' . $this->_order->getIncrementId());
             $state = $this->_order->getState();
             $this->_logger->addDebug('current order state = ' . $state);
             $status = $this->_order->getStatus();
             $this->_logger->addDebug('current order status = ' . $status);
             $storeScope = \Magento\Store\Model\ScopeInterface::SCOPE_STORE;
             if ($this->scopeConfig->getValue(self::USE_SANDBOX, $storeScope)) {
                 $base_url = 'https://api.paystand.co/v3';
             } else {
                 $base_url = 'https://api.paystand.com/v3';
             }
             $url = $base_url . "/events/" . $json->id . "/verify";
             $auth_header = array("x-publishable-key: " . $this->scopeConfig->getValue(self::PUBLISHABLE_KEY, $storeScope));
             $curl = $this->buildCurl("POST", $url, json_encode($json), $auth_header);
             $response = $this->runCurl($curl);
             $this->_logger->addDebug("http_response_code is " . $this->http_response_code);
             if (FALSE !== $response && $this->http_response_code == 200) {
                 if ($json->resource->object = "payment") {
                     switch ($json->resource->status) {
                         case 'posted':
                             $state = 'pending';
                             $status = 'pending';
                             break;
                         case 'paid':
                             $state = 'processing';
                             $status = 'processing';
                             break;
                         case 'failed':
                             $state = 'closed';
                             $status = 'closed';
                             break;
                         case 'canceled':
                             $state = 'canceled';
                             $status = 'canceled';
                             break;
                     }
                 }
                 $this->_order->setState($state);
                 $this->_order->setStatus($status);
                 $this->_order->save();
                 $this->_logger->addDebug('new order state = ' . $state);
                 $this->_logger->addDebug('new order status = ' . $status);
             } else {
                 $this->_logger->addDebug('event verify failed');
             }
         }
     }
 }
Example #2
0
 /**
  * Process payment reversal and cancelled reversal notification
  *
  * @return void
  */
 protected function _registerPaymentReversal()
 {
     $reasonCode = $this->getRequestData('reason_code');
     $reasonComment = $this->_paypalInfo->explainReasonCode($reasonCode);
     $notificationAmount = $this->_order->getBaseCurrency()->formatTxt($this->getRequestData('mc_gross') + $this->getRequestData('mc_fee'));
     $paymentStatus = $this->_filterPaymentStatus($this->getRequestData('payment_status'));
     $orderStatus = $paymentStatus == Info::PAYMENTSTATUS_REVERSED ? Info::ORDER_STATUS_REVERSED : Info::ORDER_STATUS_CANCELED_REVERSAL;
     //Change order status to PayPal Reversed/PayPal Cancelled Reversal if it is possible.
     $message = __('IPN "%1". %2 Transaction amount %3. Transaction ID: "%4"', $this->getRequestData('payment_status'), $reasonComment, $notificationAmount, $this->getRequestData('txn_id'));
     $this->_order->setStatus($orderStatus);
     $this->_order->save();
     $this->_order->addStatusHistoryComment($message, $orderStatus)->setIsCustomerNotified(false)->save();
 }
 protected function _processOrderCreated($params)
 {
     $this->_order->setStatus($this->_paymentMethod->getConfigData('order_approved_status'));
     if (!$this->_order->getEmailSent()) {
         $this->orderSender->send($this->_order);
     }
     $this->_order->save();
     if ($this->_paymentMethod->getConfigData('invoice_before_fraud_review')) {
         $this->_createInvoice($params);
     }
     $comment = $this->_createNotificationComment(sprintf('ORDER CREATED: "%s"', $params['sale_id']));
     $comment->save();
 }
 protected function _processOrder(\Magento\Sales\Model\Order $order, $response)
 {
     //$response = $this->getResponse();
     $payment = $order->getPayment();
     //$payment->setTransactionId($response->getPnref())->setIsTransactionClosed(0);
     //TODO: add validation for request data
     try {
         $errors = array();
         //$this->readConfig();
         //$order = Mage::getModel("sales/order")->load($this->getOrderId($answer));
         //$order = Mage::getModel("sales/order")->loadByIncrementId($this->getOrderId($answer));
         $hashArray = array($response["OutSum"], $response["InvId"], $this->getConfigData('pass_word_2'));
         $hashCurrent = strtoupper(md5(implode(":", $hashArray)));
         $correctHash = strcmp($hashCurrent, strtoupper($response['SignatureValue'])) == 0;
         if (!$correctHash) {
             $errors[] = "Incorrect HASH (need:" . $hashCurrent . ", got:" . strtoupper($response['SignatureValue']) . ") - fraud data or wrong secret Key";
             $errors[] = "Maybe success payment";
         }
         /**
          * @var $order Mage_Sales_Model_Order
          */
         // if ($this->_transferCurrency != $order->getOrderCurrencyCode()) {
         //     $outSum = round(
         //         $order->getBaseCurrency()->convert($order->getBaseGrandTotal(), $this->_transferCurrency),
         //         2
         //     );
         // } else {
         $outSum = round($order->getGrandTotal(), 2);
         // }
         if ($outSum != $response["OutSum"]) {
             $errors[] = "Incorrect Amount: " . $response["OutSum"] . " (need: " . $outSum . ")";
         }
         // if (count($errors) > 0) {
         //     return $errors;
         // }
         //return (bool)$correctHash;
         //$payment->registerCaptureNotification($payment->getBaseAmountAuthorized());
         if (!$correctHash) {
             $payment->setTransactionId($response["InvId"])->setIsTransactionClosed(0);
             $order->setStatus(Order::STATE_PAYMENT_REVIEW);
             $order->save();
             return "Ok" . $response["InvId"];
         }
         //
     } catch (Exception $e) {
         return array("Internal error:" . $e->getMessage());
     }
 }
 /**
  * Confirm the payment of an order
  *
  * @param \Magento\Sales\Model\Order $order
  * @param \WirecardCEE_Stdlib_Return_ReturnAbstract $return
  * @param bool $fraudDetected
  *
  * @return Order
  *
  * @throws \Magento\Framework\Exception\LocalizedException
  */
 public function confirmOrder($order, $return, $fraudDetected)
 {
     /** @var \Magento\Sales\Model\Order\Payment $payment */
     $payment = $order->getPayment();
     /** @var \Wirecard\CheckoutPage\Model\AbstractPayment $paymentInstance */
     $paymentInstance = $payment->getMethodInstance();
     $additionalInformation = array();
     foreach ($return->getReturned() as $fieldName => $fieldValue) {
         $additionalInformation[htmlentities($fieldName)] = htmlentities($fieldValue);
     }
     $payment->setAdditionalInformation($additionalInformation);
     if ($fraudDetected) {
         $order->setStatus(\Magento\Sales\Model\Order::STATUS_FRAUD);
         $message = $this->_dataHelper->__('fraud attemmpt detected, cart has been modified during checkout!');
         $this->_logger->debug(__METHOD__ . ':' . $message);
         $order->addStatusHistoryComment($message);
     }
     $doCapture = false;
     if (!$this->isOrderProcessed($order)) {
         if ($return->getPaymentState() == \WirecardCEE_QPay_ReturnFactory::STATE_PENDING) {
             /** @var \WirecardCEE_QPay_Return_Pending $return */
             $order->setState(\Magento\Sales\Model\Order::STATE_PENDING_PAYMENT);
             $message = $this->_dataHelper->__('The payment authorization is pending.');
         } else {
             /** @var \WirecardCEE_QPay_Return_Success $return */
             $order->setState(\Magento\Sales\Model\Order::STATE_PROCESSING);
             $order->setStatus(\Magento\Sales\Model\Order::STATE_PROCESSING);
             $message = $this->_dataHelper->__('The payment has been successfully completed.');
             // invoice payment
             if ($order->canInvoice()) {
                 $invoice = $order->prepareInvoice();
                 $invoice->register();
                 /* capture invoice if toolkit is not availble */
                 if (!$this->_dataHelper->isBackendAvailable()) {
                     $doCapture = true;
                 } else {
                     $hasBackedOps = false;
                     $orderDetails = $paymentInstance->getOrderDetails($payment->getAdditionalInformation('orderNumber'));
                     foreach ($orderDetails->getOrder()->getPayments() as $wdPayment) {
                         /** @var \WirecardCEE_QPay_Response_Toolkit_Order_Payment $wdPayment */
                         $this->_logger->debug(__METHOD__ . ':payment-state:' . $wdPayment->getState() . ' allowed operations:' . implode(',', $wdPayment->getOperationsAllowed()));
                         if (count($wdPayment->getOperationsAllowed())) {
                             $hasBackedOps = true;
                             break;
                         }
                     }
                     if (count($orderDetails->getOrder()->getOperationsAllowed())) {
                         $this->_logger->debug(__METHOD__ . ':order allowed operations: ' . implode(',', $orderDetails->getOrder()->getOperationsAllowed()));
                         $hasBackedOps = true;
                     }
                     /* no backend ops allowed anymore, assume final state of payment, capture invoice */
                     if (!$hasBackedOps) {
                         $doCapture = true;
                     }
                 }
                 if ($doCapture && !$fraudDetected) {
                     $invoice->capture();
                 }
                 $order->addRelatedObject($invoice);
             }
             $this->_orderSender->send($order);
         }
         $type = $doCapture ? Transaction::TYPE_CAPTURE : Transaction::TYPE_AUTH;
         $this->saveTransaction($type, $message, $order, $return);
     }
     $order->save();
     return $order;
 }
Example #6
0
 /**
  * Capture order's payment using AIM.
  *
  * @param \Magento\Sales\Model\Order $order
  * @return void
  */
 protected function _captureOrder(\Magento\Sales\Model\Order $order)
 {
     $payment = $order->getPayment();
     if ($payment->getAdditionalInformation('payment_type') == self::ACTION_AUTHORIZE_CAPTURE) {
         try {
             $payment->setTransactionId(null)->setParentTransactionId($this->getResponse()->getXTransId())->capture(null);
             // set status from config for AUTH_AND_CAPTURE orders.
             if ($order->getState() == \Magento\Sales\Model\Order::STATE_PROCESSING) {
                 $orderStatus = $this->getConfigData('order_status');
                 if (!$orderStatus || $order->getIsVirtual()) {
                     $orderStatus = $order->getConfig()->getStateDefaultStatus(\Magento\Sales\Model\Order::STATE_PROCESSING);
                 }
                 if ($orderStatus) {
                     $order->setStatus($orderStatus);
                 }
             }
             $order->save();
         } catch (\Exception $e) {
             //if we couldn't capture order, just leave it as NEW order.
             $this->_logger->logException($e);
         }
     }
 }
 public function postProcessing(\Magento\Sales\Model\Order $order, \Magento\Framework\DataObject $payment, $response)
 {
     // Update payment details
     $payment->setTransactionId($response['invoice_id']);
     $payment->setIsTransactionClosed(0);
     $payment->setTransactionAdditionalInfo('tco_order_number', $response['order_number']);
     $payment->setAdditionalInformation('tco_order_number', $response['order_number']);
     $payment->setAdditionalInformation('tco_order_status', 'approved');
     $payment->place();
     // Update order status
     $order->setStatus($this->getOrderStatus());
     $order->setExtOrderId($response['order_number']);
     $order->save();
     // Send email confirmation
     $this->orderSender->send($order);
 }