Esempio n. 1
0
 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;
 }
Esempio n. 2
0
 /**
  * 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;
 }
Esempio n. 3
0
 /**
  * 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;
 }
Esempio n. 4
0
 /**
  * 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
     // ===================
 }
Esempio n. 5
0
 /**
  * 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;
 }
Esempio n. 6
0
 /**
  * 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;
 }
Esempio n. 7
0
 /**
  * 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;
 }