コード例 #1
0
     Shop::setContext(Shop::CONTEXT_SHOP, (int) $cart->id_shop);
 }
 // Reload language context
 Context::getContext()->language = new Language((int) $cart->id_lang);
 /** @var PayzenResponse $payzenResponse */
 $payzenResponse = new PayzenResponse($_POST, Configuration::get('PAYZEN_MODE'), Configuration::get('PAYZEN_KEY_TEST'), Configuration::get('PAYZEN_KEY_PROD'));
 // Check the authenticity of the request
 if (!$payzenResponse->isAuthentified()) {
     $module->logger->logError("Cart #{$cartId} : authentication error !");
     die($payzenResponse->getOutputForGateway('auth_fail'));
 }
 // Search order in db
 $orderId = Order::getOrderByCartId($cart->id);
 if ($orderId == false) {
     // order has not been processed yet
     if ($payzenResponse->isAcceptedPayment()) {
         $newState = $module->isOneyPendingPayment($payzenResponse) ? Configuration::get('PAYZEN_OS_ONEY_PENDING') : Configuration::get('PS_OS_PAYMENT');
         $module->logger->logInfo("Payment accepted for cart #{$cartId}. New order status is {$newState}.");
         $order = $module->saveOrder($cart, $newState, $payzenResponse);
         // response to server
         die($payzenResponse->getOutputForGateway('payment_ok'));
     } else {
         // payment KO
         $module->logger->logInfo("Payment failed for cart #{$cartId}.");
         if (Configuration::get('PAYZEN_FAILURE_MANAGEMENT') == Payzen::ON_FAILURE_SAVE || $module->isOney($payzenResponse)) {
             // save on failure option is selected or oney payment
             $newState = $payzenResponse->isCancelledPayment() ? Configuration::get('PS_OS_CANCELED') : Configuration::get('PS_OS_ERROR');
             $msg = $module->isOney($payzenResponse) ? 'FacilyPay Oney payment' : 'Save on failure option is selected';
             $module->logger->logInfo("{$msg} : save failed order for cart #{$cartId}. New order status is {$newState}.");
             $order = $module->saveOrder($cart, $newState, $payzenResponse);
         }
コード例 #2
0
ファイル: submit.php プロジェクト: TheTypoMaster/neonflexible
 private function _processPaymentReturn()
 {
     /** @var PayzenResponse $payzenResponse */
     $payzenResponse = new PayzenResponse($_REQUEST, Configuration::get('PAYZEN_MODE'), Configuration::get('PAYZEN_KEY_TEST'), Configuration::get('PAYZEN_KEY_PROD'));
     $cartId = $this->currentCart->id;
     // Check the authenticity of the request
     if (!$payzenResponse->isAuthentified()) {
         $this->module->logger->logError("Cart #{$cartId} : authentication error ! Redirect to home page.");
         Tools::redirectLink('index.php');
     }
     // Search order in db
     $orderId = Order::getOrderByCartId($cartId);
     if ($orderId == false) {
         // order has not been processed yet
         if ($payzenResponse->isAcceptedPayment()) {
             $this->module->logger->logWarning("Payment for cart #{$cartId} has been processed by client return ! This means the check URL did not work.");
             $newState = $this->module->isOneyPendingPayment($payzenResponse) ? Configuration::get('PAYZEN_OS_ONEY_PENDING') : Configuration::get('PS_OS_PAYMENT');
             $this->module->logger->logInfo("Payment accepted for cart #{$cartId}. New order status is {$newState}.");
             $order = $this->module->saveOrder($this->currentCart, $newState, $payzenResponse);
             // redirect to success page
             $this->_redirectSuccess($order, $this->module->id, $payzenResponse, true);
         } else {
             // payment KO
             if (Configuration::get('PAYZEN_FAILURE_MANAGEMENT') == Payzen::ON_FAILURE_SAVE || $this->module->isOney($payzenResponse)) {
                 // save on failure option is selected or oney payment : save order and go to history page
                 $newState = $payzenResponse->isCancelledPayment() ? Configuration::get('PS_OS_CANCELED') : Configuration::get('PS_OS_ERROR');
                 $this->module->logger->logWarning("Payment for order #{$cartId} has been processed by client return ! This means the check URL did not work.");
                 $msg = $this->module->isOney($payzenResponse) ? 'FacilyPay Oney payment' : 'Save on failure option is selected';
                 $this->module->logger->logInfo("{$msg} : save failed order for cart #{$cartId}. New order status is {$newState}.");
                 $this->module->saveOrder($this->currentCart, $newState, $payzenResponse);
                 $this->module->logger->logInfo("Redirect to history page, cart ID : #{$cartId}.");
                 Tools::redirect('index.php?controller=history');
             } else {
                 // option 2 choosen : get back to checkout process and show message
                 $this->module->logger->logInfo("Payment failed, redirect to order checkout page, cart ID : #{$cartId}.");
                 $controller = Configuration::get('PS_ORDER_PROCESS_TYPE') ? 'order-opc' : 'order' . (Tools::version_compare(_PS_VERSION_, '1.5.1', '>=') ? '&step=3' : '');
                 Tools::redirect('index.php?controller=' . $controller . '&payzen_pay_error=yes');
             }
         }
     } else {
         // order already registered
         $this->module->logger->logInfo("Order already registered for cart #{$cartId}.");
         $order = new Order((int) $orderId);
         $oldState = $order->getCurrentState();
         switch ($oldState) {
             case Configuration::get('PS_OS_ERROR'):
             case Configuration::get('PS_OS_CANCELED'):
                 $this->module->logger->logInfo("Save on failure option is selected or FacilyPay Oney payment. Order for cart #{$cartId} is in a failed status.");
                 if ($payzenResponse->isAcceptedPayment()) {
                     // order saved with failed status while payment is successful
                     $this->module->logger->logError("Payment success received from platform while order is in a failed status for cart #{$cartId}.");
                 } else {
                     // just display a failure confirmation message
                     $this->module->logger->logInfo("Payment failure confirmed for cart #{$cartId}.");
                 }
                 $this->module->logger->logInfo("Redirect to history page. Cart ID : #{$cartId}.");
                 Tools::redirect('index.php?controller=history');
                 break;
             case Configuration::get('PAYZEN_OS_ONEY_PENDING'):
             case $oldState == Configuration::get('PS_OS_OUTOFSTOCK') && $this->module->isOney($payzenResponse):
                 $this->module->logger->logInfo("Order for cart #{$cartId} is saved but waiting FacilyPay Oney confirmation. Update order status according to payment result.");
                 if ($payzenResponse->isPendingPayment()) {
                     // redirect to success page
                     $this->module->logger->logInfo("FacilyPay Oney pending status confirmed for cart #{$cartId}. Just redirect to success page.");
                     $this->_redirectSuccess($order, $this->module->id, $payzenResponse);
                 } else {
                     // order is pending Oney confirmation, payment is not pending : error case
                     $this->module->logger->logError("Order saved with FacilyPay Oney pending status while payment not pending, cart ID : #{$cartId}.");
                     Tools::redirect('index.php?controller=order-confirmation&id_cart=' . $cartId . '&id_module=' . $this->module->id . '&id_order=' . $order->id . '&key=' . $order->secure_key . '&error=yes');
                 }
                 break;
             case Configuration::get('PS_OS_PAYMENT'):
             case Configuration::get('PAYZEN_OS_PAYMENT_OUTOFSTOCK'):
             case $oldState == Configuration::get('PS_OS_OUTOFSTOCK') && !$this->module->isOney($payzenResponse):
             default:
                 if ($payzenResponse->isAcceptedPayment()) {
                     // redirect to success page
                     $this->module->logger->logInfo("Payment success confirmed for cart #{$cartId}. Just redirect to success page.");
                     $this->_redirectSuccess($order, $this->module->id, $payzenResponse);
                 } else {
                     // order saved with success status while payment failed
                     $this->module->logger->logError("Order saved with success status while payment failed, cart ID : #{$cartId}.");
                     Tools::redirect('index.php?controller=order-confirmation&id_cart=' . $cartId . '&id_module=' . $this->module->id . '&id_order=' . $order->id . '&key=' . $order->secure_key . '&error=yes');
                 }
                 break;
             default:
                 // order saved with unmanaged status, redirect client according to payment result
                 $this->module->logger->logInfo("Order saved with unmanaged status for cart #{$cartId}, redirect client according to payment result.");
                 if ($payzenResponse->isAcceptedPayment()) {
                     // redirect to success page
                     $this->module->logger->logInfo("Payment success for cart #{$cartId}. Redirect to success page.");
                     $this->_redirectSuccess($order, $this->module->id, $payzenResponse);
                 } else {
                     $this->module->logger->logInfo("Payment failure for cart #{$cartId}. Redirect to history page.");
                     Tools::redirect('index.php?controller=history');
                 }
                 break;
         }
     }
 }
コード例 #3
0
ファイル: payzen.php プロジェクト: Arturogcalleja/herbolario
 /**
  * Check PayZen response, save order and empty cart (if payment success) when server notification is received from payment platform.
  *
  * @param string $return_context session id
  * @param int    $virtuemart_order_id virtuemart order primary key concerned by payment
  * @param string $new_status new order status
  * @return
  */
 function plgVmOnPaymentNotification()
 {
     // platform params and payment data
     $data = JRequest::get('post');
     $this->logInfo('plgVmOnPaymentNotification START ', 'error');
     if (!array_key_exists('vads_order_id', $data) || !isset($data['vads_order_id'])) {
         $this->logInfo('plgVmOnPaymentNotification -- Another method was selected, do nothing : ', 'error');
         return NULL;
         // Another method was selected, do nothing
     }
     // Retrieve order info from database
     if (!class_exists('VirtueMartModelOrders')) {
         require JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'orders.php';
     }
     $virtuemart_order_id = VirtueMartModelOrders::getOrderIdByOrderNumber($data['vads_order_id']);
     // Order not found
     /*
      if (!$virtuemart_order_id) {
     $this->logInfo('plgVmOnPaymentNotification -- payment check attempted on non existing order : ' . $resp->get('order_id'), 'error');
     
     $response .= '<span style="display:none">OK-';
     $response .= $data['vads_hash'];
     $response .= "=Impossible de retrouver la commande\n";
     $response .= '</span>';
     
     die($response);
     }
     */
     // Payment params
     if (!($payment_data = $this->getDataByOrderId($virtuemart_order_id))) {
         return FALSE;
     }
     $method = $this->getVmPluginMethod($payment_data->virtuemart_paymentmethod_id);
     if (!$this->selectedThisElement($method->payment_element)) {
         return FALSE;
     }
     $this->_debug = $method->debug;
     $custom = $this->_name . '_custom';
     $return_context = $payment_data->{$custom};
     // Load API
     if (!class_exists('PayzenResponse')) {
         require JPATH_VMPAYMENTPLUGIN_PAYZEN . DS . 'payzen' . DS . 'payzen_api.php';
     }
     $resp = new PayzenResponse($data, $method->ctx_mode, $method->key_test, $method->key_prod);
     if (!$resp->isAuthentified()) {
         $this->logInfo('plgVmOnPaymentNotification -- suspect request sent to plgVmOnPaymentNotification, IP : ' . $_SERVER['REMOTE_ADDR'], 'error');
         die($resp->getOutputForGateway('auth_fail'));
     }
     $order = VirtueMartModelOrders::getOrder($virtuemart_order_id);
     $order_status_code = $order['items'][0]->order_status;
     // Order not processed yet
     if ($order_status_code == 'P') {
         if ($resp->isAcceptedPayment()) {
             $currency = $resp->api->findCurrencyByNumCode($resp->get('currency'))->alpha3;
             $amount = $resp->get('amount') / 100 . ' ' . $currency;
             $new_status = $method->order_success_status;
             $this->logInfo('plgVmOnPaymentNotification -- payment process OK, ' . $amount . ' paid for order ' . $resp->get('order_id') . ', new status ' . $new_status, 'message');
             echo $resp->getOutputForGateway('payment_ok');
         } else {
             $new_status = $method->order_failure_status;
             $this->logInfo('plgVmOnPaymentNotification -- payment process error ' . $resp->message . ', new status ' . $new_status, 'ERROR');
             echo $resp->getOutputForGateway('payment_ko');
         }
         // Save platform response
         $this->managePaymentResponse($virtuemart_order_id, $resp, $new_status, $return_context, $data['vads_order_id']);
     } else {
         // Order already processed
         if ($resp->isAcceptedPayment()) {
             echo $resp->getOutputForGateway('payment_ok_already_done');
         } else {
             echo $resp->getOutputForGateway('payment_ko_on_order_ok');
         }
     }
     die;
 }