/** * @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); }
/** * @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); }
/** * Copyright (c) 2012 SOFORT AG * * Released under the GNU General Public License (Version 2) * [http://www.gnu.org/licenses/gpl-2.0.html] * * $Date$ * @version SofortLib 1.5.0rc $Id$ * @author SOFORT AG http://www.sofort.com (integration@sofort.com) * */ // read the notification from php://input (http://php.net/manual/en/wrappers.php.php) // this class should be used as a callback function require_once '../../library/sofortLib.php'; $notification = new SofortLib_Notification(); $notification->getNotification(); echo $notification->getTime(); $transactionId = $notification->getTransactionId(); // fetch some information for the transaction id retrieved above $transactionData = new SofortLib_TransactionData(); $transactionData->setTransaction($transactionId); $transactionData->sendRequest(); echo '<table border="1">'; echo '<tr><td>transaction was: </td><td align="right">' . $transactionData->getTransaction() . '</td></tr>'; echo '<tr><td>start date is: </td><td align="right">' . $transactionData->getSofortaboStartDate() . '</td></tr>'; echo '<tr><td>amount is: </td><td align="right">' . $transactionData->getAmount() . ' ' . $transactionData->getCurrency() . '</td></tr>'; echo '<tr><td>interval is: </td><td align="right">' . $transactionData->getSofortaboInterval() . '</td></tr>'; echo '<tr><td>minimum payments: </td><td align="right">' . $transactionData->getSofortaboMinimumPayments() . '</td></tr>'; echo '<tr><td>status is: </td><td align="right">' . $transactionData->getStatus() . ' - ' . $transactionData->getStatusReason() . '</td></tr>'; echo '</table>';