_loggable = TRUE; $this->tableFields = array_keys ($this->getTableSQLFields ()); $this->_tablepkey = 'id'; //virtuemart_payzen_id'; $this->_tableId = 'id'; //'virtuemart_payzen_id'; $varsToPush = $this->getVarsToPush (); $this->setConfigParameterable ($this->_configTableFieldName, $varsToPush); //self::$_this = $this; } protected function getVmPluginCreateTableSQL () { return $this->createTableSQL ('Payment ' . $this->_name . ' Table'); } function getTableSQLFields () { $SQLfields = array( 'id' => 'int(11) UNSIGNED NOT NULL AUTO_INCREMENT', 'virtuemart_order_id' => 'int(1) UNSIGNED', 'order_number' => ' char(64)', 'virtuemart_paymentmethod_id' => 'mediumint(1) UNSIGNED', 'payment_name' => 'varchar(5000)', 'payment_order_total' => 'decimal(15,5) NOT NULL DEFAULT \'0.00000\'', 'payment_currency' => 'char(3)', 'cost_per_transaction' => 'decimal(10,2)', 'cost_percent_total' => 'decimal(10,2)', 'tax_id' => 'smallint(1)', 'payzen_custom' => 'varchar(255)', 'payzen_response_payment_amount' => 'char(15)', 'payzen_response_auth_number' => 'char(10)', 'payzen_response_payment_currency' => 'char(3)', 'payzen_response_payment_mean' => 'char(255)', 'payzen_response_payment_date' => 'char(20)', 'payzen_response_payment_status' => 'char(3)', 'payzen_response_payment_message' => 'char(255)', 'payzen_response_card_number' => 'char(50)', 'payzen_response_trans_id' => 'char(6)', 'payzen_response_expiry_month' => 'char(2)', 'payzen_response_expiry_year' => 'char(4)', ); return $SQLfields; } function getCosts (VirtueMartCart $cart, $method, $cart_prices) { if (preg_match ('/%$/', $method->cost_percent_total)) { $cost_percent_total = substr ($method->cost_percent_total, 0, -1); } else { $cost_percent_total = $method->cost_percent_total; } return ($method->cost_per_transaction + ($cart_prices['salesPrice'] * $cost_percent_total * 0.01)); } /** * Reimplementation of vmPaymentPlugin::checkPaymentConditions() * * @param array $cart_prices all cart prices * @param object $payment payment parameters object * @return bool true if conditions verified */ function checkConditions ($cart, $method, $cart_prices) { $this->convert ($method); $amount = $cart_prices['salesPrice']; $amount_cond = ($amount >= $method->min_amount && $amount <= $method->max_amount || ($amount >= $method->min_amount && empty($method->max_amount))); return $amount_cond; } function convert ($method) { $method->min_amount = (float)$method->min_amount; $method->max_amount = (float)$method->max_amount; } /** * Prepare data and redirect to PayZen payment platform * * @param string $order_number * @param object $orderData * @param string $return_context the session id * @param string $html the form to display * @param bool $new_status false if it should not be changed, otherwise new staus * @return NULL */ 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; } $this->_debug = $method->debug; // enable debug $session = JFactory::getSession (); $return_context = $session->getId (); $this->logInfo ('plgVmOnConfirmedOrderGetPaymentForm -- order number: ' . $order['details']['BT']->order_number, 'message'); if (!class_exists ('VadsApi')) { require(JPATH_VMPAYMENTPLUGIN . DS . 'payzen' . DS . 'payzen_api.php'); } $api = new VadsApi('UTF-8'); // set config parameters $paramNames = array( 'platform_url', 'key_test', 'key_prod', 'capture_delay', 'ctx_mode', 'site_id', 'validation_mode', 'redirect_enabled', 'redirect_success_timeout', 'redirect_success_message', 'redirect_error_timeout', 'redirect_error_message', 'return_mode' ); foreach ($paramNames as $name) { $api->set ($name, $method->$name); } // Set urls $url_return = JROUTE::_ (JURI::root () . 'index.php?option=com_virtuemart&view=pluginresponse&task=pluginresponsereceived'); $uri = JURI::getInstance ($url_return); //$uri->setVar('pelement', $this->payment_element); $uri->setVar ('pm', $order['details']['BT']->virtuemart_paymentmethod_id); $uri->setVar ('Itemid', JRequest::getInt ('Itemid')); $api->set ('url_return', $uri->toString ()); $url_success = JROUTE::_ (JURI::root () . 'index.php?option=com_virtuemart&view=pluginresponse&task=pluginresponsereceived'); $uri = JURI::getInstance ($url_success); //$uri->setVar('pelement', $this->payment_element); $uri->setVar ('Itemid', JRequest::getInt ('Itemid')); $uri->setVar ('pm', $order['details']['BT']->virtuemart_paymentmethod_id); $api->set ('url_success', $uri->toString ()); $url_cancel = JROUTE::_ (JURI::root () . 'index.php?option=com_virtuemart&view=pluginresponse&task=pluginUserPaymentCancel'); $uri = JURI::getInstance ($url_cancel); $uri->setVar ('on', $order['details']['BT']->order_number); $uri->setVar ('pm', $order['details']['BT']->virtuemart_paymentmethod_id); $uri->setVar ('Itemid', JRequest::getInt ('Itemid')); $api->set ('url_cancel', $uri->toString ()); // Set the language code $lang = JFactory::getLanguage (); $lang->load ('plg_vmpayment_' . $this->_name, JPATH_ADMINISTRATOR); $tag = substr ($lang->get ('tag'), 0, 2); $language = in_array ($tag, $api->getSupportedLanguages ()) ? $tag : ($method->language ? $method->language : 'fr'); $api->set ('language', $language); // Set currency if (!class_exists ('VirtueMartModelCurrency')) { require(JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'currency.php'); } $currencyModel = new VirtueMartModelCurrency(); $currencyObj = $currencyModel->getCurrency ($order['details']['BT']->order_currency); $currency = $api->findCurrencyByNumCode ($currencyObj->currency_numeric_code); if ($currency == NULL) { $this->logInfo ('plgVmOnConfirmedOrderGetPaymentForm -- Could not find currency numeric code for currency : ' . $currencyObj->currency_numeric_code, 'error'); vmInfo (JText::_ ('VMPAYMENT_' . $this->_name . '_CURRENCY_NOT_SUPPORTED')); return NULL; } $api->set ('currency', $currency->num); // payment_cards may be one value or array $cards = $method->payment_cards; $cards = !is_array ($cards) ? $cards : (in_array ("", $cards) ? "" : implode (";", $cards)); $api->set ('payment_cards', $cards); // available_languages may be one value or array $available_languages = $method->available_languages; $available_languages = !is_array ($available_languages) ? $available_languages : (in_array ("", $available_languages) ? "" : implode (";", $available_languages)); $api->set ('available_languages', $available_languages); $api->set ('contrib', 'VirtueMart2.0.0_1.2'); // Set customer info // $usr = JFactory::getUser(); $usrBT = $order['details']['BT']; $usrST = ((isset($order['details']['ST'])) ? $order['details']['ST'] : $order['details']['BT']); $api->set ('cust_email', $usrBT->email); // $api->set('cust_id', ''); $api->set ('cust_title', @$usrBT->title); $api->set ('cust_first_name', $usrBT->first_name); $api->set ('cust_last_name', $usrBT->last_name); $api->set ('cust_address', $usrBT->address_1 . ' ' . $usrBT->address_2); $api->set ('cust_zip', $usrBT->zip); $api->set ('cust_city', $usrBT->city); $api->set ('cust_state', @ShopFunctions::getStateByID ($usrBT->virtuemart_state_id)); $api->set ('cust_country', @ShopFunctions::getCountryByID ($usrBT->virtuemart_country_id, 'country_2_code')); $api->set ('cust_phone', $usrBT->phone_1); $api->set ('cust_cell_phone', $usrBT->phone_2); $api->set ('ship_to_first_name', $usrST->first_name); $api->set ('ship_to_last_name', $usrST->last_name); $api->set ('ship_to_city', $usrST->city); $api->set ('ship_to_street', $usrST->address_1); $api->set ('ship_to_street2', $usrST->address_2); $api->set ('ship_to_state', @ShopFunctions::getStateByID ($usrST->virtuemart_state_id)); $api->set ('ship_to_country', @ShopFunctions::getCountryByID ($usrST->virtuemart_country_id, 'country_2_code')); $api->set ('ship_to_phone_num', $usrST->phone_1); $api->set ('ship_to_zip', $usrST->zip); // Set order_id $api->set ('order_id', $order['details']['BT']->order_number); // Set the amount to pay $api->set ('amount', round ($order['details']['BT']->order_total * 100)); // Prepare data that should be stored in the database $dbValues['order_number'] = $order['details']['BT']->order_number; $dbValues['payment_name'] = $this->renderPluginName ($method, $order); $dbValues['virtuemart_paymentmethod_id'] = $cart->virtuemart_paymentmethod_id; $dbValues[$this->_name . '_custom'] = $return_context; $this->storePSPluginInternalData ($dbValues); $this->logInfo ('plgVmOnConfirmedOrderGetPaymentForm -- payment data saved to table ' . $this->_tablename, 'message'); // echo the redirect form $form = 'Redirection
'; $form .= '

' . JText::_ ('VMPAYMENT_' . $this->_name . '_PLEASE_WAIT') . '

'; $form .= '

' . JText::_ ('VMPAYMENT_' . $this->_name . '_CLICK_BUTTON_IF_NOT_REDIRECTED') . '

'; $form .= '
'; $form .= ''; $form .= $api->getRequestFieldsHtml (); $form .= '
'; $form .= ''; $this->logInfo ('plgVmOnConfirmedOrderGetPaymentForm -- user redirected to ' . $this->_name, 'message'); echo $form; $cart->_confirmDone = FALSE; $cart->_dataValidated = FALSE; $cart->setCartIntoSession (); die(); // not save order, not send mail, do redirect } /** * Check PayZen response, save order if not done by server call and redirect to response page * when client comes back from payment platform. * * @param int $virtuemart_order_id virtuemart order primary key concerned by payment * @param string $html message to show as result * @return */ function plgVmOnPaymentResponseReceived (&$html) { if (!class_exists ('VirtueMartCart')) { require(JPATH_VM_SITE . DS . 'helpers' . DS . 'cart.php'); } // the payment itself should send the parameter needed. $virtuemart_paymentmethod_id = JRequest::getInt ('pm', 0); //vmDebug($this->_name.' plgVmOnPaymentResponseReceived',$virtuemart_paymentmethod_id); $vendorId = 0; if (!($method = $this->getVmPluginMethod ($virtuemart_paymentmethod_id))) { return NULL; // Another method was selected, do nothing } //vmDebug($this->_name.' plgVmOnPaymentResponseReceived',$method); if (!$this->selectedThisElement ($method->payment_element)) { return FALSE; } //$this->_debug = true; // enable debug $this->logInfo ('plgVmOnPaymentResponseReceived -- user returned back from ' . $this->_name, 'message'); $data = JRequest::get ('request'); // Load API if (!class_exists ('VadsApi')) { require(JPATH_VMPAYMENTPLUGIN . DS . 'payzen' . DS . 'payzen_api.php'); } $api = new VadsApi(); $resp = $api->getResponse ( $data, $method->ctx_mode, $method->key_test, $method->key_prod ); if (!$resp->isAuthentified ()) { $this->logInfo ('plgVmOnPaymentResponseReceived -- suspect request sent to plgVmOnPaymentResponseReceived, IP : ' . $_SERVER['REMOTE_ADDR'], 'error'); $html = $this->_getHtmlPaymentResponse ('VMPAYMENT_' . $this->_name . '_ERROR_MSG', FALSE); return NULL; } // Retrieve order info from database if (!class_exists ('VirtueMartModelOrders')) { require(JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'orders.php'); } // $resp->get ('order_id') is the virtuemart order_number $virtuemart_order_id = VirtueMartModelOrders::getOrderIdByOrderNumber ($resp->get ('order_id')); // Order not found if (!$virtuemart_order_id) { // vmdebug('plgVmOnPaymentResponseReceived ' . $this->_name, $data, $resp->get('order_id')); $this->logInfo ('plgVmOnPaymentResponseReceived -- payment check attempted on non existing order : ' . $resp->get ('order_id'), 'error'); $html = $this->_getHtmlPaymentResponse ('VMPAYMENT_' . $this->_name . '_ERROR_MSG', FALSE); // JRequest::setVar('paymentResponseHtml', $html, 'post'); return NULL; } $order = VirtueMartModelOrders::getOrder ($virtuemart_order_id); $order_status_code = $order['items'][0]->order_status; if ($resp->isAcceptedPayment ()) { $currency = $api->findCurrencyByNumCode ($resp->get ('currency'))->alpha3; $amount = ($resp->get ('amount') / 100) . ' ' . $currency; $html = $this->_getHtmlPaymentResponse ('VMPAYMENT_' . $this->_name . '_SUCCESS_MSG', TRUE, $resp->get ('order_id'), $amount); //JRequest::setVar('paymentResponseHtml', $html, 'post'); $new_status = $method->order_success_status; } else { $html = $this->_getHtmlPaymentResponse ('VMPAYMENT_' . $this->_name . '_FAILURE_MSG', FALSE); // JRequest::setVar('paymentResponseHtml', $html, 'post'); $new_status = $method->order_failure_status; } // Order not processed yet if ($order_status_code == 'P') { $this->logInfo ('plgVmOnPaymentResponseReceived -- check url does not work.', 'warning'); if ($method->site_id == '56790135') { // Mode TEST DEFAULT VALUE: The plugin use default value. vmWarn (JText::_ ('VMPAYMENT_' . $this->_name . '_CHECK_URL_WARN_VIRTUEMART'), ''); } elseif ($method->ctx_mode == 'TEST') { //Mode TEST warning : Check URL not correctly called. vmWarn (JText::_ ('VMPAYMENT_' . $this->_name . '_CHECK_URL_WARN'), ''); } $this->managePaymentResponse ($virtuemart_order_id, $resp, $new_status); } //We delete the old stuff // get the correct cart / session $cart = VirtueMartCart::getCart (); $cart->emptyCart (); return NULL; } /** * Process a PayZen payment cancellation. * * @param int $virtuemart_order_id virtuemart order primary key concerned by payment * @return */ function plgVmOnUserPaymentCancel () { if (!class_exists ('VirtueMartModelOrders')) { require(JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'orders.php'); } $order_number = JRequest::getString ('on'); if (!$order_number) { return FALSE; } if (!$virtuemart_order_id = VirtueMartModelOrders::getOrderIdByOrderNumber ($order_number)) { return NULL; } if (!($paymentTable = $this->getDataByOrderId ($virtuemart_order_id))) { return NULL; } $session = JFactory::getSession (); $return_context = $session->getId (); $field = $this->_name . '_custom'; if (strcmp ($paymentTable->$field, $return_context) === 0) { $this->handlePaymentUserCancel ($virtuemart_order_id); } //JRequest::setVar('paymentResponse', $returnValue); return TRUE; } /** * 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 .= 'OK-'; $response .= $data['vads_hash']; $response .= "=Impossible de retrouver la commande\n"; $response .= ''; die($response); } */ // Payment params $payment_data = $this->getDataByOrderId ($virtuemart_order_id); /* if (!$payment_data || !($payment = $this->getPaymentMethod($payment_data->payment_method_id))) { $this->logInfo('plgVmOnPaymentNotification -- payment data not found: exit ', 'ERROR'); $response .= 'OK-'; $response .= $data['vads_hash']; $response .= "=Méthode de paiement introuvable\n"; $response .= ''; die($response); } */ $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 ('VadsApi')) { require(JPATH_VMPAYMENTPLUGIN . DS . 'payzen' . DS . 'payzen_api.php'); } $api = new VadsApi(); $resp = $api->getResponse ( $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 = $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(); } /** * Display stored payment data for an order * * @see components/com_virtuemart/helpers/vmPaymentPlugin::plgVmOnShowOrderPaymentBE() */ function plgVmOnShowOrderBEPayment ($virtuemart_order_id, $payment_method_id) { if (!$this->selectedThisByMethodId ($payment_method_id)) { return NULL; // Another method was selected, do nothing } if (!($paymentTable = $this->getDataByOrderId ($virtuemart_order_id))) { return NULL; } $html = '' . "\n"; $html .= $this->getHtmlHeaderBE (); $html .= $this->getHtmlRowBE (strtoupper ($this->_name) . '_PAYMENT_NAME', $paymentTable->payment_name); $payment_status = $this->_name . '_response_payment_status'; $payment_response_trans_id = $this->_name . '_response_trans_id'; $payment_response_card_number = $this->_name . '_response_card_number'; $payment_response_payment_mean = $this->_name . '_response_payment_mean'; $payment_response_payment_message = $this->_name . '_response_payment_message'; $payment_response_expiry_month = $this->_name . '_response_expiry_month'; $payment_response_expiry_year = $this->_name . '_response_expiry_year'; $result = $paymentTable->$payment_response_payment_message . '(' . $paymentTable->$payment_status . ')'; $expiry = str_pad ($paymentTable->$payment_response_expiry_month, 2, '0', STR_PAD_LEFT) . ' / ' . $paymentTable->$payment_response_expiry_year; $html .= $this->getHtmlRowBE ($this->_name . '_RESULT', $result); $html .= $this->getHtmlRowBE ($this->_name . '_TRANS_ID', $paymentTable->$payment_response_trans_id); $html .= $this->getHtmlRowBE ($this->_name . '_CC_NUMBER', $paymentTable->$payment_response_card_number); $html .= $this->getHtmlRowBE ($this->_name . '_CC_EXPIRY', $expiry); $html .= $this->getHtmlRowBE ($this->_name . '_CC_TYPE', $paymentTable->$payment_response_payment_mean); $html .= '
' . "\n"; return $html; } function _getHtmlPaymentResponse ($msg, $is_success = TRUE, $order_id = NULL, $amount = NULL) { if (!$is_success) { return '

' . JText::_ ($msg) . '

'; } else { $html = '' . "\n"; $html .= ''; $html .= $this->getHtmlRow ($this->_name . '_ORDER_NUMBER', $order_id, 'style="width: 90px;" class="key"'); $html .= $this->getHtmlRow ($this->_name . '_AMOUNT', $amount, 'style="width: 90px;" class="key"'); $html .= '
' . JText::_ ($msg) . '
' . "\n"; return $html; } } function savePaymentData ($virtuemart_order_id, $resp) { //vmdebug($this->_name . ' response', $resp->raw_response); $response[$this->_tablepkey] = $this->_getTablepkeyValue ($virtuemart_order_id); $response['virtuemart_order_id'] = $virtuemart_order_id; $response[$this->_name . '_response_payment_amount'] = $resp->get ('amount'); $response[$this->_name . '_response_payment_currency'] = $resp->get ('currency'); $response[$this->_name . '_response_auth_number'] = $resp->get ('auth_number'); $response[$this->_name . '_response_payment_mean'] = $resp->get ('card_brand'); $response[$this->_name . '_response_payment_date'] = gmdate ('Y-m-d H:i:s', time ()); $response[$this->_name . '_response_payment_status'] = $resp->code; $response[$this->_name . '_response_payment_message'] = $resp->message; $response[$this->_name . '_response_card_number'] = $resp->get ('card_number'); $response[$this->_name . '_response_trans_id'] = $resp->get ('trans_id'); $response[$this->_name . '_response_expiry_month'] = $resp->get ('expiry_month'); $response[$this->_name . '_response_expiry_year'] = $resp->get ('expiry_year'); $this->storePSPluginInternalData ($response, $this->_tablepkey, TRUE); } function _getTablepkeyValue ($virtuemart_order_id) { $db = JFactory::getDBO (); $q = 'SELECT ' . $this->_tablepkey . ' FROM `' . $this->_tablename . '` ' . 'WHERE `virtuemart_order_id` = ' . $virtuemart_order_id; $db->setQuery ($q); if (!($pkey = $db->loadResult ())) { JError::raiseWarning (500, $db->getErrorMsg ()); return ''; } return $pkey; } function emptyCart ($session_id) { if ($session_id != NULL) { $session = JFactory::getSession (); $session->close (); // Recover session in wich the payment is done session_id ($session_id); session_start (); } $cart = VirtueMartCart::getCart (); //vmDebug('emptyCart', $cart); $cart->emptyCart (); return TRUE; } function managePaymentResponse ($virtuemart_order_id, $resp, $new_status, $return_context = NULL, $order_number=NULL) { // Save platform response data $this->savePaymentData ($virtuemart_order_id, $resp); if (!class_exists ('VirtueMartModelOrders')) { require(JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'orders.php'); } // save order data $modelOrder = new VirtueMartModelOrders(); $order['order_status'] = $new_status; $order['virtuemart_order_id'] = $virtuemart_order_id; $order['customer_notified'] = 1; $date = JFactory::getDate (); $order['comments'] = JText::sprintf ('VMPAYMENT_' . $this->_name . '_NOTIFICATION_RECEVEIVED', $date->toFormat ('%Y-%m-%d %H:%M:%S')); //vmdebug($this->_name . ' - managePaymentResponse', $order); // la fonction updateStatusForOneOrder fait l'envoie de l'email à partir de VM2.0.2 $modelOrder->updateStatusForOneOrder ($virtuemart_order_id, $order, TRUE); if (!class_exists ('VirtueMartCart')) { require(JPATH_VM_SITE . DS . 'helpers' . DS . 'cart.php'); } if ($resp->isAcceptedPayment ()) { // Empty cart in session $this->emptyCart ($return_context, $order_number); } } /** * We must reimplement this triggers for joomla 1.7 */ /** * Create the table for this plugin if it does not yet exist. * This functions checks if the called plugin is active one. * When yes it is calling the standard method to create the tables * * @author Valérie Isaksen * */ function plgVmOnStoreInstallPaymentPluginTable ($jplugin_id) { return $this->onStoreInstallPluginTable ($jplugin_id); } /** * This event is fired after the payment method has been selected. It can be used to store * additional payment info in the cart. * * @author Max Milbers * @author Valérie isaksen * * @param VirtueMartCart $cart: the actual cart * @return null if the payment was not selected, true if the data is valid, error message if the data is not vlaid * */ public function plgVmOnSelectCheckPayment (VirtueMartCart $cart) { return $this->OnSelectCheck ($cart); } /** * plgVmDisplayListFEPayment * This event is fired to display the pluginmethods in the cart (edit shipment/payment) for exampel * * @param object $cart Cart object * @param integer $selected ID of the method selected * @return boolean True on succes, false on failures, null when this plugin was not selected. * On errors, JError::raiseWarning (or JError::raiseError) must be used to set a message. * * @author Valerie Isaksen * @author Max Milbers */ public function plgVmDisplayListFEPayment (VirtueMartCart $cart, $selected = 0, &$htmlIn) { return $this->displayListFE ($cart, $selected, $htmlIn); } /* * plgVmonSelectedCalculatePricePayment * Calculate the price (value, tax_id) of the selected method * It is called by the calculator * This function does NOT to be reimplemented. If not reimplemented, then the default values from this function are taken. * @author Valerie Isaksen * @cart: VirtueMartCart the current cart * @cart_prices: array the new cart prices * @return null if the method was not selected, false if the shiiping rate is not valid any more, true otherwise * * */ public function plgVmonSelectedCalculatePricePayment (VirtueMartCart $cart, array &$cart_prices, &$cart_prices_name) { return $this->onSelectedCalculatePrice ($cart, $cart_prices, $cart_prices_name); } /** * plgVmOnCheckAutomaticSelectedPayment * Checks how many plugins are available. If only one, the user will not have the choice. Enter edit_xxx page * The plugin must check first if it is the correct type * * @author Valerie Isaksen * @param VirtueMartCart cart: the cart object * @return null if no plugin was found, 0 if more then one plugin was found, virtuemart_xxx_id if only one plugin is found * */ function plgVmOnCheckAutomaticSelectedPayment (VirtueMartCart $cart, array $cart_prices = array(), &$paymentCounter) { return $this->onCheckAutomaticSelected ($cart, $cart_prices, $paymentCounter); } /** * This method is fired when showing the order details in the frontend. * It displays the method-specific data. * * @param integer $order_id The order ID * @return mixed Null for methods that aren't active, text (HTML) otherwise * @author Max Milbers * @author Valerie Isaksen */ public function plgVmOnShowOrderFEPayment ($virtuemart_order_id, $virtuemart_paymentmethod_id, &$payment_name) { $this->onShowOrderFE ($virtuemart_order_id, $virtuemart_paymentmethod_id, $payment_name); } /** * This event is fired during the checkout process. It can be used to validate the * method data as entered by the user. * * @return boolean True when the data was valid, false otherwise. If the plugin is not activated, it should return null. * @author Max Milbers public function plgVmOnCheckoutCheckDataPayment($psType, VirtueMartCart $cart) { return null; } */ /** * This method is fired when showing when priting an Order * It displays the the payment method-specific data. * * @param integer $_virtuemart_order_id The order ID * @param integer $method_id method used for this order * @return mixed Null when for payment methods that were not selected, text (HTML) otherwise * @author Valerie Isaksen */ function plgVmonShowOrderPrintPayment ($order_number, $method_id) { return $this->onShowOrderPrint ($order_number, $method_id); } /** * Save updated order data to the method specific table * * @param array $_formData Form data * @return mixed, True on success, false on failures (the rest of the save-process will be * skipped!), or null when this method is not actived. public function plgVmOnUpdateOrderPayment( $_formData) { return null; } */ /** * Save updated orderline data to the method specific table * * @param array $_formData Form data * @return mixed, True on success, false on failures (the rest of the save-process will be * skipped!), or null when this method is not actived. public function plgVmOnUpdateOrderLine( $_formData) { return null; } */ /** * plgVmOnEditOrderLineBE * This method is fired when editing the order line details in the backend. * It can be used to add line specific package codes * * @param integer $_orderId The order ID * @param integer $_lineId * @return mixed Null for method that aren't active, text (HTML) otherwise public function plgVmOnEditOrderLineBE( $_orderId, $_lineId) { return null; } */ /** * This method is fired when showing the order details in the frontend, for every orderline. * It can be used to display line specific package codes, e.g. with a link to external tracking and * tracing systems * * @param integer $_orderId The order ID * @param integer $_lineId * @return mixed Null for method that aren't active, text (HTML) otherwise public function plgVmOnShowOrderLineFE( $_orderId, $_lineId) { return null; } */ function plgVmDeclarePluginParamsPayment ($name, $id, &$data) { return $this->declarePluginParams ('payment', $name, $id, $data); } function plgVmSetOnTablePluginParamsPayment ($name, $id, &$table) { return $this->setOnTablePluginParams ($name, $id, $table); } } // No closing tag