function _postPayment($data) { $orderpayment_id = JRequest::getVar('orderpayment_id'); $offline_payment_method = JRequest::getVar('offline_payment_method'); $formatted = array('offline_payment_method' => $offline_payment_method); $nw_uname = JRequest::getVar('nw_username'); $nw_uemail = JRequest::getVar('nw_useremail'); $nw_uphone = JRequest::getVar('nw_userphone'); JTable::addIncludePath(JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_j2store' . DS . 'tables'); $orderpayment = JTable::getInstance('Orders', 'Table'); $orderpayment->load($orderpayment_id); $orderpayment->transaction_details = '訂單完成,等待付款!'; $orderpayment->transaction_status = '本次交易使用第三方線上金流模組。'; $orderpayment->order_state = 'Pending'; $orderpayment->order_state_id = 4; // PENDING 4 if ($orderpayment->save()) { JLoader::register('J2StoreHelperCart', JPATH_SITE . DS . 'components' . DS . 'com_j2store' . DS . 'helpers' . DS . 'cart.php'); J2StoreHelperCart::removeOrderItems($orderpayment->id); } else { $errors[] = $orderpayment->getError(); } $user = JFactory::getUser(); if ($user->id > 0) { $userprofile = JUserHelper::getProfile($user->id); $vars = new JObject(); $vars->user_name = $user->name; $vars->user_email = $user->email; } else { $vars->user_name = $nw_uname; $vars->user_email = $nw_uemail; $vars->user_phone = $nw_uphone; } $vars->orderpayment_id = $orderpayment->id; $vars->ezship_email = $this->params->get('ezmail'); $vars->ret_url = JURI::base() . 'index.php/component/nicepayment'; $vars->orderpayment_amount = ceil($orderpayment->orderpayment_amount); $vars->paymethod = $offline_payment_method; $pay2go_message = ''; $pay2go_message = $this->Pay2go_MPG($orderpayment->orderpayment_amount, $orderpayment->id); require_once JPATH_SITE . DS . 'components' . DS . 'com_j2store' . DS . 'helpers' . DS . 'orders.php'; // 寄信錯誤 // J2StoreOrdersHelper::sendUserEmail($orderpayment->user_id, $orderpayment->order_id, $orderpayment->transaction_status, $orderpayment->order_state, $orderpayment->order_state_id); return $pay2go_message; }
/** * Processes the payment form * and returns HTML to be displayed to the user * generally with a success/failed message * * @param $data array form post data * @return string HTML to display */ function _postPayment($data) { // Process the payment $app = JFactory::getApplication(); $vars = new JObject(); $html = ''; $orderpayment_id = $app->input->getInt('orderpayment_id'); // load the orderpayment record and set some values JTable::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_j2store/tables'); $orderpayment = JTable::getInstance('Orders', 'Table'); $orderpayment->load($orderpayment_id); if ($orderpayment->id == $orderpayment_id) { $payment_status = $this->getPaymentStatus($this->params->get('payment_status', 4)); $orderpayment->transaction_status = $payment_status; $orderpayment->order_state = $payment_status; $orderpayment->order_state_id = $this->params->get('payment_status', 4); // DEFAULT: PENDING // save the orderpayment if ($orderpayment->save()) { JLoader::register('J2StoreHelperCart', JPATH_SITE . '/components/com_j2store/helpers/cart.php'); // remove items from cart J2StoreHelperCart::removeOrderItems($orderpayment->id); } else { $errors[] = $orderpayment->getError(); } // let us inform the user that the order is successful require_once JPATH_SITE . '/components/com_j2store/helpers/orders.php'; J2StoreOrdersHelper::sendUserEmail($orderpayment->user_id, $orderpayment->order_id, $orderpayment->transaction_status, $orderpayment->order_state, $orderpayment->order_state_id); $vars->onafterpayment_text = $this->params->get('onafterpayment', ''); // display the layout $html = $this->_getLayout('postpayment', $vars); // append the article with cash payment information $html .= $this->_displayArticle(); } return $html; }
/** * Processes the payment * This method process only real time (simple) payments * * @return string unknown_type. * * @return string * * @access protected * */ public function _process() { if (!JRequest::checkToken()) { return $this->_renderHtml(JText::_('J2STORE_PAYMILL_INVALID_TOKEN')); } $app = JFactory::getApplication(); $data = $app->input->getArray($_POST); $json = array(); $errors = array(); // Get order information JTable::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_j2store/tables'); $order = JTable::getInstance('Orders', 'Table'); $order->load($data['orderpayment_id']); // Check for exisiting things if (empty($order->order_id)) { $json['error'] = JText::_('J2STORE_PAYMILL_INVALID_ORDER'); } if (empty($data['token'])) { $json['error'] = JText::_('J2STORE_PAYMILL_TOKEN_MISSING'); } if (!$json) { $currency_values = $this->getCurrency($order); $amount = $this->getAmount($order->orderpayment_amount, $currency_values['currency_code'], $currency_values['currency_value'], $currency_values['convert']) * 100; try { require JPath::clean(dirname(__FILE__) . "/library/autoload.php"); $request = new Paymill\Request($this->private_key); $request->setSource('J2Store'); $transaction = new Paymill\Models\Request\Transaction(); $transaction->setAmount($amount)->setCurrency($currency_values['currency_code'])->setToken($data['token'])->setDescription(JText::_('J2STORE_PAYMILL_ORDER_DESCRIPTION')); $response = $request->create($transaction); $paymentId = $response->getId(); $responseCode = $response->getResponseCode(); $raw = $request->getLastResponse(); $rawResponse = $raw['body']['data']; $transaction_details = $this->_getFormattedTransactionDetails($rawResponse); $order->transaction_id = $paymentId; $order->transaction_details = $transaction_details; $order->transaction_status = $rawResponse['status']; $sendEmail = false; if (isset($rawResponse['error'])) { $order->order_state_id = 3; $order->order_state = JText::_('J2STORE_DECLINED'); $errors[] = $resp['error']; } elseif (strtolower($rawResponse['status']) == 'closed') { $order->order_state_id = 1; $order->order_state = JText::_('J2STORE_COMPLETED'); $sendEmail = true; } elseif (strtolower($rawResponse['status']) == 'pending') { $order->order_state_id = 4; $order->order_state = JText::_('J2STORE_PENDING'); } elseif (strtolower($rawResponse['status']) == 'failed') { $order->order_state_id = 3; $order->order_state = JText::_('J2STORE_FAILED'); } else { $order->order_state_id = 3; $order->order_state = JText::_('J2STORE_FAILED'); $errors[] = JText::_("J2STORE_PAYMILL_ERROR_PROCESSING_PAYMENT"); } // save the orderpayment if (!$order->save()) { $errors[] = $order->getError(); } } catch (PaymillException $e) { //Do something with the error informations below $e->getResponseCode(); $e->getStatusCode(); $errMsg = $e->getErrorMessage(); $errors[] = $errMsg; $this->_log($errMsg, 'payment response error'); } if (empty($errors)) { // remove items from cart J2StoreHelperCart::removeOrderItems($order->id); if ($sendEmail) { //let us inform the user that the payment is successful J2StoreOrdersHelper::sendUserEmail($order->user_id, $order->order_id, $order->order_state, $order->order_state, $order->order_state_id); } $json['success'] = JText::_($this->params->get('onafterpayment', '')); $json['redirect'] = JRoute::_('index.php?option=com_j2store&view=checkout&task=confirmPayment&orderpayment_type=' . $this->_element . '&paction=display'); } if (count($errors)) { $json['error'] = implode("\n", $errors); } } return $json; }
/** * Proceeds the simple payment * * @param string $resp * @param array $submitted_values * @return object Message object * @access protected */ function _evaluateSimplePaymentResponse($resp, $submitted_values) { $object = new JObject(); $object->message = ''; $html = ''; $errors = array(); $return = array(); $payment_status = JText::_('J2STORE_INCOMPLETE'); $user = JFactory::getUser(); $transaction_details = $this->_getFormattedTransactionDetails($resp); $this->_log($transaction_details, 'Payment Gateway Response'); // Evaluate a typical response from sage pay $this->_log($resp['Status']); switch ($resp['Status']) { case 'OK': // Approved $payment_status = JText::_('J2STORE_COMPLETED'); break; case 'MALFORMED': case 'INVALID': case 'NOTAUTHED': case 'REJECTED': case 'ERROR': // Declined $payment_status = JText::_('J2STORE_DECLINED'); $errors[] = $resp['StatusDetail']; break; default: // Error $payment_status = JText::_('J2STORE_ERROR'); $order_status = JText::_('J2STORE_INCOMPLETE'); $errors[] = $this->params->get('onerrorpayment', ' '); break; } // ======================= // verify & create payment // ======================= $orderpayment_id = $this->_getOrderPaymentId($submitted_values['VendorTxCode']); // check that payment amount is correct for order_id JTable::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_j2store/tables'); $orderpayment = JTable::getInstance('Orders', 'Table'); $orderpayment->load($orderpayment_id); if (empty($orderpayment->order_id)) { // TODO fail } $transaction_id = isset($resp['VPSTxId']) ? $resp['VPSTxId'] : ''; $orderpayment->transaction_details = $transaction_details; $orderpayment->transaction_id = $transaction_id; $orderpayment->transaction_status = $payment_status; //set a default status to it $orderpayment->order_state = JText::_('J2STORE_PENDING'); // PENDING $orderpayment->order_state_id = 4; // PENDING // set the order's new status and update quantities if necessary if (count($errors)) { // if an error occurred $orderpayment->order_state = trim(JText::_('J2STORE_FAILED')); // FAILED $orderpayment->order_state_id = 3; // FAILED } else { $orderpayment->order_state = trim(JText::_('J2STORE_CONFIRMED')); // Payment received and CONFIRMED $orderpayment->order_state_id = 1; // CONFIRMED JLoader::register('J2StoreHelperCart', JPATH_SITE . '/components/com_j2store/helpers/cart.php'); // remove items from cart J2StoreHelperCart::removeOrderItems($orderpayment->id); //$this->setOrderPaymentReceived( $orderpayment->order_id ); } // save the order if (!$orderpayment->save()) { $errors[] = $orderpayment->getError(); } if (empty($errors)) { // let us inform the user that the payment is successful require_once JPATH_SITE . '/components/com_j2store/helpers/orders.php'; J2StoreOrdersHelper::sendUserEmail($orderpayment->user_id, $orderpayment->order_id, $payment_status, $orderpayment->order_state, $orderpayment->order_state_id); $return['success'] = JText::_($this->params->get('onafterpayment', '')); $return['redirect'] = JRoute::_('index.php?option=com_j2store&view=checkout&task=confirmPayment&orderpayment_type=' . $this->_element . '&paction=display'); } else { $error = count($errors) ? implode("\n", $errors) : ''; $this->_sendErrorEmails($error, $transaction_details); $this->_log($error, 'Transaction Errors'); $return['error'] = $error; } return $return; // =================== // end custom code // =================== }
/** * Processes the payment form * and returns HTML to be displayed to the user * generally with a success/failed message * * @param $data array form post data * @return string HTML to display */ function _postPayment($data) { // Process the payment $app = JFactory::getApplication(); $vars = new JObject(); $html = ''; $orderpayment_id = $app->input->getInt('orderpayment_id'); // load the orderpayment record and set some values JTable::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_j2store/tables'); $orderpayment = JTable::getInstance('Orders', 'Table'); $orderpayment->load($orderpayment_id); if ($orderpayment->id == $orderpayment_id) { $bank_information = stripslashes($_POST['moneyorder_information']); //we have to save the bank information in the customer note because that is the only field availale to display now //TODO: Trigger a plugin event so that you can show custom info depending on the payment plugin. //get the customer note. We dont want to overwrite it. if (JString::strlen($bank_information) > 5) { $customer_note = $orderpayment->customer_note; $html = '<br />'; $html .= '<strong>' . JText::_('J2STORE_MONEYORDER_INSTRUCTIONS') . '</strong>'; $html .= '<br />'; $html .= $bank_information; $orderpayment->customer_note = $customer_note . $html; } $payment_status = $this->getPaymentStatus($this->params->get('payment_status', 4)); $orderpayment->transaction_status = $payment_status; $orderpayment->order_state = $payment_status; $orderpayment->order_state_id = $this->params->get('payment_status', 4); // DEFAULT: PENDING // save the orderpayment if ($orderpayment->save()) { JLoader::register('J2StoreHelperCart', JPATH_SITE . '/components/com_j2store/helpers/cart.php'); // remove items from cart J2StoreHelperCart::removeOrderItems($orderpayment->id); } else { $errors[] = $orderpayment->getError(); } // let us inform the user that the order is successful require_once JPATH_SITE . '/components/com_j2store/helpers/orders.php'; J2StoreOrdersHelper::sendUserEmail($orderpayment->user_id, $orderpayment->order_id, $orderpayment->transaction_status, $orderpayment->order_state, $orderpayment->order_state_id); $vars->onafterpayment_text = $this->params->get('onafterpayment', ''); // display the layout $html = $this->_getLayout('postpayment', $vars); // append the article with moneyorder payment information $html .= $this->_displayArticle(); } return $html; }
/** * Processes the payment form * and returns HTML to be displayed to the user * generally with a success/failed message * * @param $data array form post data * @return string HTML to display */ function _postPayment($data) { // Process the payment $vars = new JObject(); $orderpayment_id = JRequest::getVar('orderpayment_id'); $offline_payment_method = JRequest::getVar('offline_payment_method'); $formatted = array('offline_payment_method' => $offline_payment_method); // load the orderpayment record and set some values JTable::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_j2store/tables'); $orderpayment = JTable::getInstance('Orders', 'Table'); //remove this after live. //$orderpayment_id = substr($orderpayment_id, 2, 3); $orderpayment->load($orderpayment_id); $orderpayment->transaction_details = implode("\n", $formatted); //$orderpayment->transaction_status = JText::_('Pending_Payment'); //$orderpayment->order_state = JText::_('Pending'); $payment_status = $this->getPaymentStatus($this->params->get('payment_status', 4)); $orderpayment->transaction_status = $payment_status; $orderpayment->order_state = $payment_status; $orderpayment->order_state_id = $this->params->get('payment_status', 4); // DEFAULT: PENDING // save the orderpayment if ($orderpayment->save()) { JLoader::register('J2StoreHelperCart', JPATH_SITE . '/components/com_j2store/helpers/cart.php'); // remove items from cart J2StoreHelperCart::removeOrderItems($orderpayment->id); } else { $errors[] = $orderpayment->getError(); } // let us inform the user that the order is successful require_once JPATH_SITE . '/components/com_j2store/helpers/orders.php'; J2StoreOrdersHelper::sendUserEmail($orderpayment->user_id, $orderpayment->order_id, $orderpayment->transaction_status, $orderpayment->order_state, $orderpayment->order_state_id); $vars->onafterpayment_text = $this->params->get('onafterpayment', ''); // display the layout $html = $this->_getLayout('postpayment', $vars); // append the article with offline payment information $html .= $this->_displayArticle(); return $html; }
/** * This method occurs after payment is attempted, * and fires the onPostPayment plugin event * * @return unknown_type */ function confirmPayment() { $app = JFactory::getApplication(); $orderpayment_type = $app->input->getString('orderpayment_type'); // Get post values $values = $app->input->getArray($_POST); //backward compatibility for payment plugins foreach ($values as $name => $value) { $app->input->set($name, $value); } //set the guest mail to null if it is present //check if it was a guest checkout $account = $this->session->get('account', 'register', 'j2store'); // get the order_id from the session set by the prePayment $orderpayment_id = (int) $app->getUserState('j2store.orderpayment_id'); if ($account != 'guest') { $order_link = 'index.php?option=com_j2store&view=orders&task=view&id=' . $orderpayment_id; } else { $guest_token = $app->getUserState('j2store.order_token'); $order_link = 'index.php?option=com_j2store&view=orders&task=view'; //assign to another session variable, for security reasons if ($this->session->has('guest', 'j2store')) { $guest = $this->session->get('guest', array(), 'j2store'); $this->session->set('guest_order_email', $guest['billing']['email']); $this->session->set('guest_order_token', $guest_token); } } $dispatcher = JDispatcher::getInstance(); JPluginHelper::importPlugin('j2store'); $html = ""; $order = $this->_order; $order->load(array('id' => $orderpayment_id)); //save the coupon to the order_coupons table for tracking and unset session. if ($this->session->has('coupon', 'j2store')) { $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('*')->from('#__j2store_coupons')->where('coupon_code=' . $db->q($this->session->get('coupon', '', 'j2store')))->where('state=1'); $query->where("((valid_from = '0000-00-00' OR valid_from < NOW()) AND (valid_to = '0000-00-00' OR valid_to > NOW()))"); $db->setQuery($query); $coupon_info = $db->loadObject(); if ($coupon_info) { $order_coupons = JTable::getInstance('OrderCoupons', 'Table'); $order_coupons->set('coupon_id', $coupon_info->coupon_id); $order_coupons->set('coupon_code', $coupon_info->coupon_code); $order_coupons->set('orderpayment_id', $orderpayment_id); $order_coupons->set('order_id', $order->order_id); $order_coupons->set('customer_id', JFactory::getUser()->id); $order_coupons->set('customer_email', $order->user_email); $order_coupons->set('amount', $order->order_discount); $order_coupons->set('created_date', JFactory::getDate()->toSql()); $order_coupons->store(); } } // free product? set the state to confirmed and save the order. if (!empty($orderpayment_id) && (double) $order->order_total == (double) '0.00') { $order->order_state = trim(JText::_('CONFIRMED')); $order->order_state_id = '1'; // PAYMENT RECEIVED. if ($order->save()) { // remove items from cart J2StoreHelperCart::removeOrderItems($order->id); } //send email require_once JPATH_SITE . '/components/com_j2store/helpers/orders.php'; J2StoreOrdersHelper::sendUserEmail($order->user_id, $order->order_id, $order->transaction_status, $order->order_state, $order->order_state_id); } else { // get the payment results from the payment plugin $results = $dispatcher->trigger("onJ2StorePostPayment", array($orderpayment_type, $values)); // Display whatever comes back from Payment Plugin for the onPrePayment for ($i = 0; $i < count($results); $i++) { $html .= $results[$i]; } // re-load the order in case the payment plugin updated it $order->load(array('id' => $orderpayment_id)); } // $order_id would be empty on posts back from Paypal, for example if (isset($orderpayment_id)) { //unset a few things from the session. $this->session->clear('shipping_method', 'j2store'); $this->session->clear('shipping_methods', 'j2store'); $this->session->clear('payment_method', 'j2store'); $this->session->clear('payment_methods', 'j2store'); $this->session->clear('payment_values', 'j2store'); $this->session->clear('guest', 'j2store'); $this->session->clear('customer_note', 'j2store'); //clear the session $this->session->clear('coupon', 'j2store'); //trigger onAfterOrder plugin event $results = $dispatcher->trigger("onJ2StoreAfterPayment", array($order)); foreach ($results as $result) { $html .= $result; } // Set display $view = $this->getView('checkout', 'html'); $view->setLayout('postpayment'); $view->set('_doTask', true); $params = $params = JComponentHelper::getParams('com_j2store'); if ($params->get('show_postpayment_orderlink', 1)) { $view->assign('order_link', $order_link); } else { $view->assign('order_link', ''); } $view->assign('plugin_html', $html); // Get and Set Model $model = $this->getModel('checkout'); $view->setModel($model, true); $view->display(); } return; }