Esempio n. 1
0
 /**
  * @return bool|null
  */
 function plgVmOnPaymentNotification()
 {
     //$this->_debug = true;
     if (!class_exists('VirtueMartModelOrders')) {
         require VMPATH_ADMIN . DS . 'models' . DS . 'orders.php';
     }
     $order_number = vRequest::getString('on', '');
     if (empty($order_number)) {
         return FALSE;
     }
     if (!($virtuemart_order_id = VirtueMartModelOrders::getOrderIdByOrderNumber($order_number))) {
         return FALSE;
     }
     if (!($payments = $this->getDatasByOrderId($virtuemart_order_id))) {
         return FALSE;
     }
     $this->debugLog('OK', 'plgVmOnPaymentNotification', 'debug');
     $this->_currentMethod = $this->getVmPluginMethod($payments[0]->virtuemart_paymentmethod_id);
     if (!$this->selectedThisElement($this->_currentMethod->payment_element)) {
         return FALSE;
     }
     if (!class_exists('SofortLib')) {
         require VMPATH_ROOT . DS . 'plugins' . DS . 'vmpayment' . DS . 'sofort' . DS . 'sofort' . DS . 'library' . DS . 'sofortLib.php';
     }
     $sofortLib_Notification = new SofortLib_Notification();
     $transactionId = $sofortLib_Notification->getNotification();
     //no valid parameters/xml
     if (empty($transactionId) || $sofortLib_Notification->isError()) {
         $this->debugLog('no transaction ID for order number' . $order_number, 'plgVmOnPaymentNotification', 'error');
         return FALSE;
     }
     $this->debugLog($transactionId, 'plgVmOnPaymentNotification Transaction ID ', 'debug');
     $sofortLib_TransactionData = new SofortLib_TransactionData(trim($this->_currentMethod->configuration_key));
     $sofortLib_TransactionData->setTransaction($transactionId)->sendRequest();
     // check that secret , and order are identical
     $security = vRequest::getString('security', '');
     if ($security != $payments[0]->security) {
         $this->debugLog("security token received: " . $security . " security token expected: " . $payments[0]->security, 'plgVmOnPaymentNotification', 'error');
         return false;
     }
     $paymentMethod = $sofortLib_TransactionData->getPaymentMethod();
     if ($paymentMethod != self::SU_SOFORTBANKING) {
         $this->debugLog("Payment method is " . $paymentMethod . " Should be SU" . 'plgVmOnPaymentNotification', 'error');
         return false;
     }
     $sofort_data['sofort_response_amount'] = $sofortLib_TransactionData->getAmount();
     $sofort_data['sofort_response_currency'] = $sofortLib_TransactionData->getCurrency();
     // check that the amount is the same
     if (!$this->_checkAmountAndCurrency($sofort_data, $payments)) {
         return false;
     }
     $modelOrder = VmModel::getModel('orders');
     $order_history = array();
     $status = 'status_' . $sofortLib_TransactionData->getStatus();
     //$this->debugLog('plgVmOnPaymentNotification getStatus:' .$status. ' '.var_export($method, true) , 'message');
     $order_history['customer_notified'] = true;
     $order_history['order_status'] = $this->_currentMethod->{$status};
     $order_history['comments'] = vmText::_('VMPAYMENT_SOFORT_RESPONSE_STATUS_REASON_' . $sofortLib_TransactionData->getStatusReason());
     $sofort_data['sofort_response_status_reason'] = $sofortLib_TransactionData->getStatusReason();
     $sofort_data['sofort_response_transaction'] = $sofortLib_TransactionData->getTransaction();
     $sofort_data['payment_name'] = str_replace(array('\\t', '\\n'), '', $this->renderPluginName($this->_currentMethod));
     $sofort_data['virtuemart_order_id'] = $payments[0]->virtuemart_order_id;
     $sofort_data['order_number'] = $payments[0]->order_number;
     $sofort_data['virtuemart_paymentmethod_id'] = $payments[0]->virtuemart_paymentmethod_id;
     $sofort_data['sofort_response_status'] = $sofortLib_TransactionData->getStatus();
     $sofort_data['sofort_response_status_reason'] = $sofortLib_TransactionData->getStatusReason();
     $this->debugLog(var_export($sofort_data, true), 'plgVmOnPaymentNotification storePSPluginInternalData ', 'debug');
     $this->storePSPluginInternalData($sofort_data);
     $modelOrder->updateStatusForOneOrder($payments[0]->virtuemart_order_id, $order_history, false);
 }
Esempio n. 2
0
 /**
  * @return bool|null
  */
 function plgVmOnPaymentNotification()
 {
     //$this->_debug = true;
     if (!class_exists('VirtueMartModelOrders')) {
         require JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'orders.php';
     }
     $order_number = JRequest::getString('on', '');
     if (empty($order_number)) {
         $this->logInfo('plgVmOnPaymentNotification EMPTY order number' . $order_number, 'message');
         return FALSE;
     }
     if (!($virtuemart_order_id = VirtueMartModelOrders::getOrderIdByOrderNumber($order_number))) {
         $this->logInfo('plgVmOnPaymentNotification NO getOrderIdByOrderNumber ' . $order_number, 'message');
         return FALSE;
     }
     if (!($payments = $this->getDatasByOrderId($virtuemart_order_id))) {
         $this->logInfo('plgVmOnPaymentNotification NO getDatasByOrderId ' . $virtuemart_order_id, 'message');
         return FALSE;
     }
     $this->logInfo('plgVmOnPaymentNotification OK ', 'message');
     $method = $this->getVmPluginMethod($payments[0]->virtuemart_paymentmethod_id);
     if (!$this->selectedThisElement($method->payment_element)) {
         return FALSE;
     }
     if (!class_exists('SofortLib')) {
         require JPATH_ROOT . DS . 'plugins' . DS . 'vmpayment' . DS . 'sofort' . DS . 'sofort' . DS . 'library' . DS . 'sofortLib.php';
     }
     $sofortLib_Notification = new SofortLib_Notification();
     $transactionId = $sofortLib_Notification->getNotification();
     //no valid parameters/xml
     if (empty($transactionId) || $sofortLib_Notification->isError()) {
         $this->logInfo('plgVmOnPaymentNotification NO transaaction or $sofortLib_Notification is error \\n', 'message');
         return FALSE;
     }
     $this->logInfo('plgVmOnPaymentNotification transaction ' . $transactionId, 'message');
     $sofortLib_TransactionData = new SofortLib_TransactionData($method->configuration_key);
     $sofortLib_TransactionData->setTransaction($transactionId)->sendRequest();
     $this->logInfo('plgVmOnPaymentNotification setTransaction OK', 'message');
     // check that secret , and order are identical
     $security = JRequest::getString('security', '');
     if ($security != $payments[0]->security) {
         $this->logInfo('plgVmOnPaymentNotification SECURITY not the one expected GOT: ' . $security . ' stored: ' . $payments[0]->security, 'message');
         $emailBody = "Hello,\n\nerror while receiving a SOFORT NOTIFICATION" . "\n";
         $emailBody .= "for order number: " . $order_number . "\n";
         $emailBody .= "security token received: " . $security . "\n";
         $emailBody .= "security token expected: " . $payments[0]->security . "\n";
         $this->sendEmailToVendorAndAdmins(JText::_('VMPAYMENT_SOFORT_ERROR_NOTIFICATION'), $emailBody);
         return false;
     }
     $paymentMethod = $sofortLib_TransactionData->getPaymentMethod();
     if ($paymentMethod != self::SU_SOFORTBANKING) {
         // answer not expected
         $this->logInfo('plgVmOnPaymentNotification not the one one expected?' . $paymentMethod . ' ' . self::SU_SOFORTBANKING, 'message');
         $emailBody = "Hello,\n\nerror while receiving a SOFORT NOTIFICATION" . "\n";
         $emailBody .= "Payment method is " . $paymentMethod . " Should be SU \n";
         $this->sendEmailToVendorAndAdmins(JText::_('VMPAYMENT_SOFORT_ERROR_NOTIFICATION'), $emailBody);
         return false;
     }
     $this->logInfo('plgVmOnPaymentNotification so', 'message');
     $sofort_data['sofort_response_amount'] = $sofortLib_TransactionData->getAmount();
     $sofort_data['sofort_response_currency'] = $sofortLib_TransactionData->getCurrency();
     // check that the amount is the same
     if (!$this->_checkAmountAndCurrency($sofort_data, $payments)) {
         return false;
     }
     $modelOrder = VmModel::getModel('orders');
     $order = array();
     $status = 'status_' . $sofortLib_TransactionData->getStatus();
     //$this->logInfo('plgVmOnPaymentNotification getStatus:' .$status. ' '.var_export($method, true) , 'message');
     $order['customer_notified'] = true;
     $order['order_status'] = $method->{$status};
     $order['comments'] = JText::_('VMPAYMENT_SOFORT_RESPONSE_STATUS_REASON_' . $sofortLib_TransactionData->getStatusReason());
     $sofort_data['sofort_response_status_reason'] = $sofortLib_TransactionData->getStatusReason();
     $sofort_data['sofort_response_transaction'] = $sofortLib_TransactionData->getTransaction();
     $sofort_data['payment_name'] = str_replace(array('\\t', '\\n'), '', $this->renderPluginName($method));
     $sofort_data['virtuemart_order_id'] = $payments[0]->virtuemart_order_id;
     $sofort_data['order_number'] = $payments[0]->order_number;
     $sofort_data['virtuemart_paymentmethod_id'] = $payments[0]->virtuemart_paymentmethod_id;
     $sofort_data['sofort_response_status'] = $sofortLib_TransactionData->getStatus();
     $sofort_data['sofort_response_status_reason'] = $sofortLib_TransactionData->getStatusReason();
     $this->logInfo('storePSPluginInternalData before storePSPluginInternalData ' . var_export($sofort_data, true), 'message');
     $this->storePSPluginInternalData($sofort_data);
     $modelOrder->updateStatusForOneOrder($payments[0]->virtuemart_order_id, $order, TRUE);
 }
 /**
  * Construct the SofortLib_TransactionData object
  * Collect every order's item and set it accordingly
  * TransactionData is used encapsulated in this class to retrieve information about the order's details
  * @return object SofortLib_TransactionData
  * @private
  */
 private function _setupTransactionData()
 {
     $SofortLib_TransactionData = new SofortLib_TransactionData($this->_configKey, $this->_apiUrl);
     $SofortLib_TransactionData->setTransaction($this->_transactionId);
     $SofortLib_TransactionData->sendRequest();
     if (!$SofortLib_TransactionData->getCount()) {
         return false;
     }
     $this->setStatus($SofortLib_TransactionData->getStatus());
     $this->setStatusReason($SofortLib_TransactionData->getStatusReason());
     $this->setStatusOfInvoice($SofortLib_TransactionData->getInvoiceStatus());
     $this->setInvoiceObjection($SofortLib_TransactionData->getInvoiceObjection());
     $this->setLanguageCode($SofortLib_TransactionData->getLanguageCode());
     $this->setTransaction($this->getTransactionId());
     $this->setTime($SofortLib_TransactionData->getTime());
     $this->setPaymentMethod($SofortLib_TransactionData->getPaymentMethod());
     $this->setInvoiceUrl($SofortLib_TransactionData->getInvoiceUrl());
     $this->setAmount($SofortLib_TransactionData->getAmount());
     $this->setAmountRefunded($SofortLib_TransactionData->getAmountRefunded());
     $itemArray = $SofortLib_TransactionData->getItems();
     // should there be any items, fetch them accordingly
     $this->_items = array();
     if (is_array($itemArray) && !empty($itemArray)) {
         foreach ($itemArray as $item) {
             $this->setItem($item['item_id'], $item['product_number'], $item['product_type'], $item['title'], $item['description'], $item['quantity'], $item['unit_price'], $item['tax']);
             $this->_amount += $item['unit_price'] * $item['quantity'];
         }
     }
     /*
      * set the state according to the state given by transaction information (status, status_reason, invoice_status)
      * @see $statusMask
      */
     $this->setState($this->_calcInvoiceStatusCode());
     return $SofortLib_TransactionData;
 }
Esempio n. 4
0
 private function _setupTransactionData()
 {
     $SofortLib_TransactionData = new SofortLib_TransactionData($this->_configKey, $this->_apiUrl);
     $SofortLib_TransactionData->setTransaction($this->_transactionId);
     $SofortLib_TransactionData->sendRequest();
     if (!$SofortLib_TransactionData->getCount()) {
         return false;
     }
     $this->setStatus($SofortLib_TransactionData->getStatus());
     $this->setStatusReason($SofortLib_TransactionData->getStatusReason());
     $this->setStatusOfInvoice($SofortLib_TransactionData->getInvoiceStatus());
     $this->setInvoiceObjection($SofortLib_TransactionData->getInvoiceObjection());
     $this->setLanguageCode($SofortLib_TransactionData->getLanguageCode());
     $this->setTransaction($this->getTransactionId());
     $this->setTime($SofortLib_TransactionData->getTime());
     $this->setPaymentMethod($SofortLib_TransactionData->getPaymentMethod());
     $this->setInvoiceUrl($SofortLib_TransactionData->getInvoiceUrl());
     $this->setAmount($SofortLib_TransactionData->getAmount());
     $this->setAmountRefunded($SofortLib_TransactionData->getAmountRefunded());
     $itemArray = $SofortLib_TransactionData->getItems();
     $this->_items = array();
     if (is_array($itemArray) && !empty($itemArray)) {
         foreach ($itemArray as $item) {
             $this->setItem($item['item_id'], $item['product_number'], $item['product_type'], $item['title'], $item['description'], $item['quantity'], $item['unit_price'], $item['tax']);
             $this->_amount += $item['unit_price'] * $item['quantity'];
         }
     }
     $this->setState($this->_calcInvoiceStatusCode());
     return $SofortLib_TransactionData;
 }