示例#1
0
 function plgVmConfirmedOrder($cart, $order)
 {
     if (!($method = $this->getVmPluginMethod($order['details']['BT']->virtuemart_paymentmethod_id))) {
         return NULL;
         // Another method was selected, do nothing
     }
     if (!$this->selectedThisElement($method->payment_element)) {
         return false;
     }
     if (!class_exists('VirtueMartModelOrders')) {
         require JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'orders.php';
     }
     $sessionKlarnaData = $this->getKlarnaSessionData();
     try {
         $result = KlarnaHandler::addTransaction($method, $order, $sessionKlarnaData->KLARNA_DATA['pclass']);
     } catch (Exception $e) {
         $log = $e->getMessage();
         vmError($e->getMessage() . ' #' . $e->getCode());
         //KlarnaHandler::redirectPaymentMethod('error', $e->getMessage() . ' #' . $e->getCode());
     }
     //vmdebug('addTransaction result', $result);
     // Delete all Klarna data
     //unset($sessionKlarnaData->KLARNA_DATA, $_SESSION['SSN_ADDR']);
     $shipTo = KlarnaHandler::getShipToAddress($cart);
     $modelOrder = VmModel::getModel('orders');
     if ($result['status_code'] == KlarnaFlags::DENIED) {
         $order['customer_notified'] = 0;
         $order['order_status'] = $method->status_denied;
         $order['comments'] = JText::sprintf('VMPAYMENT_KLARNA_PAYMENT_KLARNA_STATUS_DENIED');
         if ($method->delete_order) {
             $order['comments'] .= "<br />" . $result['status_text'];
         }
         $modelOrder->updateStatusForOneOrder($order['details']['BT']->virtuemart_order_id, $order, true);
         vmdebug('addTransaction remove order?', $method->delete_order);
         if ($method->delete_order) {
             $modelOrder->remove(array('virtuemart_order_id' => $order['details']['BT']->virtuemart_order_id));
         } else {
             $dbValues['order_number'] = $order['details']['BT']->order_number;
             $dbValues['payment_name'] = $this->renderKlarnaPluginName($method, $order['details']['BT']->virtuemart_country_id, $shipTo, $order['details']['BT']->order_total);
             $dbValues['virtuemart_paymentmethod_id'] = $order['details']['BT']->virtuemart_paymentmethod_id;
             $dbValues['order_payment'] = $order['details']['BT']->order_payment;
             $dbValues['klarna_pclass'] = $sessionKlarnaData->KLARNA_DATA['PCLASS'];
             $dbValues['klarna_log'] = $log;
             $dbValues['klarna_status_code'] = $result['status_code'];
             $dbValues['klarna_status_text'] = $result['status_text'];
             $this->storePSPluginInternalData($dbValues);
         }
         $app = JFactory::getApplication();
         $app->enqueueMessage($result['status_text']);
         $app->redirect(JRoute::_('index.php?option=com_virtuemart&view=cart&task=editpayment'), JText::_('COM_VIRTUEMART_CART_ORDERDONE_DATA_NOT_VALID'));
     } else {
         $invoiceno = $result[1];
         if ($invoiceno && is_numeric($invoiceno)) {
             //Get address id used for this order.
             $country = $sessionKlarnaData->KLARNA_DATA['country'];
             // $lang = KlarnaHandler::getLanguageForCountry($method, KlarnaHandler::convertToThreeLetterCode($country));
             // $d['order_payment_name'] = $kLang->fetch('MODULE_INVOICE_TEXT_TITLE', $lang);
             // Add a note in the log
             $log = Jtext::sprintf('VMPAYMENT_KLARNA_INVOICE_CREATED_SUCCESSFULLY', $invoiceno);
             // Prepare data that should be stored in the database
             $dbValues['order_number'] = $order['details']['BT']->order_number;
             $dbValues['payment_name'] = $this->renderKlarnaPluginName($method, $order['details']['BT']->virtuemart_country_id, $shipTo, $order['details']['BT']->order_total);
             $dbValues['virtuemart_paymentmethod_id'] = $order['details']['BT']->virtuemart_paymentmethod_id;
             $dbValues['order_payment'] = $order['details']['BT']->order_payment;
             $dbValues['order_payment_tax'] = $order['details']['BT']->order_payment_tax;
             $dbValues['klarna_pclass'] = $sessionKlarnaData->KLARNA_DATA['pclass'];
             $dbValues['klarna_invoice_no'] = $invoiceno;
             $dbValues['klarna_log'] = $log;
             $dbValues['klarna_eid'] = $result['eid'];
             $dbValues['klarna_status_code'] = $result['status_code'];
             $dbValues['klarna_status_text'] = $result['status_text'];
             $this->storePSPluginInternalData($dbValues);
             /*
              * Klarna's order status
              *  Integer - 1,2 or 3.
              *  1 = OK: KlarnaFlags::ACCEPTED
              *  2 = Pending: KlarnaFlags::PENDING
              *  3 = Denied: KlarnaFlags::DENIED
              */
             if ($result['status_code'] == KlarnaFlags::PENDING) {
                 /* if Klarna's order status is pending: add it in the history */
                 /* The order is under manual review and will be accepted or denied at a later stage.
                    Use cronjob with checkOrderStatus() or visit Klarna Online to check to see if the status has changed.
                    You should still show it to the customer as it was accepted, to avoid further attempts to fraud. */
                 $order['order_status'] = $method->status_pending;
             } else {
                 $order['order_status'] = $method->status_success;
             }
             $order['customer_notified'] = 1;
             $order['comments'] = $log;
             $modelOrder->updateStatusForOneOrder($order['details']['BT']->virtuemart_order_id, $order, true);
             $html = $this->renderByLayout('orderdone', array('payment_name' => $dbValues['payment_name'], 'klarna_invoiceno' => $invoiceno));
             $session = JFactory::getSession();
             $session->clear('Klarna', 'vm');
             //We delete the old stuff
             $cart->emptyCart();
             JRequest::setVar('html', $html);
             return true;
         } else {
             vmError('Error with invoice number');
         }
     }
 }