Example #1
0
 public function startTransaction()
 {
     $this->load->model('payment/' . $this->_paymentMethodName);
     $this->load->model('checkout/order');
     $this->load->model('setting/setting');
     $settings = $this->model_setting_setting->getSetting('paynl');
     $statusPending = $settings[$this->_paymentMethodName . '_pending_status'];
     $order_info = $this->model_checkout_order->getOrder($this->session->data['order_id']);
     // var_dump($order_info);
     $response = array();
     try {
         $apiStart = new Pay_Api_Start();
         $apiStart->setApiToken($settings[$this->_paymentMethodName . '_apitoken']);
         $apiStart->setServiceId($settings[$this->_paymentMethodName . '_serviceid']);
         $returnUrl = $this->url->link('payment/' . $this->_paymentMethodName . '/finish');
         $exchangeUrl = $this->url->link('payment/' . $this->_paymentMethodName . '/exchange');
         $apiStart->setFinishUrl($returnUrl);
         $apiStart->setExchangeUrl($exchangeUrl);
         $apiStart->setPaymentOptionId($this->_paymentOptionId);
         $currency_amount = $this->currency->format($order_info['total'], $order_info['currency_code'], '', false);
         $amount = round($currency_amount * 100);
         $apiStart->setAmount($amount);
         $apiStart->setCurrency($order_info['currency_code']);
         $optionSub = null;
         if (!empty($_POST['optionSubId'])) {
             $optionSub = $_POST['optionSubId'];
             $apiStart->setPaymentOptionSubId($optionSub);
         }
         $apiStart->setDescription($order_info['order_id']);
         $apiStart->setExtra1($order_info['order_id']);
         // Klantdata verzamelen en meesturen
         $strAddress = $order_info['shipping_address_1'] . ' ' . $order_info['shipping_address_2'];
         list($street, $housenumber) = Pay_Helper::splitAddress($strAddress);
         $arrShippingAddress = array('streetName' => $street, 'streetNumber' => $housenumber, 'zipCode' => $order_info['shipping_postcode'], 'city' => $order_info['shipping_city'], 'countryCode' => $order_info['shipping_iso_code_2']);
         $initialsPayment = substr($order_info['payment_firstname'], 0, 10);
         $initialsShipping = substr($order_info['shipping_firstname'], 0, 10);
         $strAddress = $order_info['payment_address_1'] . ' ' . $order_info['payment_address_2'];
         list($street, $housenumber) = Pay_Helper::splitAddress($strAddress);
         $arrPaymentAddress = array('initials' => substr($initialsPayment, 0, 1), 'lastName' => $order_info['payment_lastname'], 'streetName' => $street, 'streetNumber' => $housenumber, 'zipCode' => $order_info['payment_postcode'], 'city' => $order_info['payment_city'], 'countryCode' => $order_info['payment_iso_code_2']);
         $arrEnduser = array('initials' => substr($initialsShipping, 0, 1), 'lastName' => $order_info['shipping_lastname'], 'language' => substr($order_info['language_code'], 0, 2), 'emailAddress' => $order_info['email'], 'address' => $arrShippingAddress, 'invoiceAddress' => $arrPaymentAddress);
         $apiStart->setEnduser($arrEnduser);
         $totalAmount = 0;
         //Producten toevoegen
         foreach ($this->cart->getProducts() as $product) {
             $priceWithTax = $this->tax->calculate($product['price'], $product['tax_class_id'], true);
             $tax = $priceWithTax - $product['price'];
             $price = round($priceWithTax * 100);
             $totalAmount += $price * $product['quantity'];
             $apiStart->addProduct($product['product_id'], $product['name'], $price, $product['quantity'], Pay_Helper::calculateTaxClass($priceWithTax, $tax));
         }
         //            // Shipping costs?
         //            if (isset($this->session->data['shipping_method']['cost']) && $this->session->data['shipping_method']['cost'] != 0) {
         //                $arrShipping = $this->session->data['shipping_method'];
         //                $shippingCost = $this->tax->calculate($arrShipping['cost'], $arrShipping['tax_class_id'], true);
         //                $shippingCost = round($shippingCost*100);
         //                $apiStart->addProduct('0', 'Verzendkosten', $shippingCost, 1, 'H');
         //                $totalAmount += $shippingCost;
         //            }
         //Extra totals rijen
         $total_data = array();
         $total = 0;
         $taxes = $this->cart->getTaxes();
         $this->load->model('setting/extension');
         $results = $this->model_setting_extension->getExtensions('total');
         $taxesForTotals = array();
         foreach ($results as $result) {
             $taxesBefore = array_sum($taxes);
             if ($this->config->get($result['code'] . '_status')) {
                 $this->load->model('total/' . $result['code']);
                 $this->{'model_total_' . $result['code']}->getTotal($total_data, $total, $taxes);
                 $taxAfter = array_sum($taxes);
                 $taxesForTotals[$result['code']] = $taxAfter - $taxesBefore;
             }
         }
         foreach ($total_data as $total_row) {
             if (!in_array($total_row['code'], array('sub_total', 'tax', 'total'))) {
                 $totalIncl = $total_row['value'] + $taxesForTotals[$total_row['code']];
                 $apiStart->addProduct($total_row['code'], $total_row['title'], round($totalIncl * 100), 1, Pay_Helper::calculateTaxClass($totalIncl, $taxesForTotals[$total_row['code']]));
             }
         }
         $postData = $apiStart->getPostData();
         $result = $apiStart->doRequest();
         //transactie is aangemaakt, nu loggen
         $modelName = 'model_payment_' . $this->_paymentMethodName;
         $this->{$modelName}->addTransaction($result['transaction']['transactionId'], $order_info['order_id'], $this->_paymentOptionId, $amount, $postData, $optionSub);
         $message = 'Pay.nl Transactie aangemaakt. TransactieId: ' . $result['transaction']['transactionId'] . ' .<br />';
         if ($settings[$this->_paymentMethodName . '_send_confirm_email'] == 'start') {
             $this->model_checkout_order->confirm($order_info['order_id'], $statusPending, $message, true);
         }
         $response['success'] = $result['transaction']['paymentURL'];
     } catch (Pay_Api_Exception $e) {
         $response['error'] = "De pay.nl api gaf de volgende fout: " . $e->getMessage();
     } catch (Pay_Exception $e) {
         $response['error'] = "Er is een fout opgetreden: " . $e->getMessage();
     } catch (Exception $e) {
         $response['error'] = "Onbekende fout: " . $e->getMessage();
     }
     die(json_encode($response));
 }
Example #2
0
 function onAfterOrderConfirm(&$order, &$methods, $method_id)
 {
     parent::onAfterOrderConfirm($order, $methods, $method_id);
     // This is a mandatory line in order to initialize the attributes of the payment method
     //Here we can do some checks on the options of the payment method and make sure that every required parameter is set and otherwise display an error message to the user
     if (empty($this->payment_params->service_id)) {
         $this->app->enqueueMessage('You have to configure a Service ID for the Pay.nl plugin payment first : check your plugin\'s parameters, on your website backend', 'error');
         //Enqueued messages will appear to the user, as Joomla's error messages
         return false;
     } elseif (empty($this->payment_params->token_api)) {
         $this->app->enqueueMessage('You have to configure an api token for the Pay.nl plugin payment first : check your plugin\'s parameters, on your website backend', 'error');
         return false;
     } elseif (empty($this->payment_params->option_id)) {
         $this->app->enqueueMessage('You have to configure a payment option for the Pay.nl plugin payment first : check your plugin\'s parameters', 'error');
         return false;
     } else {
         if (!class_exists('Pay_Api_Start')) {
             require JPATH_SITE . '/plugins/hikashoppayment/paynl/paynl/Api.php';
             require JPATH_SITE . '/plugins/hikashoppayment/paynl/paynl/api/Start.php';
             require JPATH_SITE . '/plugins/hikashoppayment/paynl/paynl/Exception.php';
             require JPATH_SITE . '/plugins/hikashoppayment/paynl/paynl/api/Exception.php';
         }
         if (!class_exists('Pay_Helper')) {
             require JPATH_SITE . '/plugins/hikashoppayment/paynl/paynl/Helper.php';
         }
         if ($this->currency->currency_locale['int_frac_digits'] > 2) {
             $this->currency->currency_locale['int_frac_digits'] = 2;
         }
         $notify_url = HIKASHOP_LIVE . 'index.php?option=com_hikashop&ctrl=checkout&task=notify&notif_payment=' . $this->name . '&tmpl=component&lang=' . $this->locale . $this->url_itemid;
         $return_url = HIKASHOP_LIVE . 'index.php?option=com_hikashop&user=true&ctrl=checkout&task=notify&notif_payment=' . $this->name . '&order_id=' . $order->order_id . $this->url_itemid;
         //buyer data
         $addressBT = $this->splitAddress($order->cart->billing_address->address_street . ' ' . $order->cart->billing_address->address_street2);
         $addressST = $this->splitAddress($order->cart->shipping_address->address_street . ' ' . $order->cart->shipping_address->address_street2);
         $lang = JFactory::getLanguage();
         $enduser = array('initials' => substr($order->cart->billing_address->address_firstname, 0, 1), 'lastName' => $order->cart->billing_address->address_lastname, 'language' => substr($lang->getTag(), 0, 2), 'emailAddress' => $order->customer->email, 'invoiceAddress' => array('streetName' => $addressBT[0], 'streetNumber' => $addressBT[1], 'city' => $order->cart->billing_address->address_city, 'zipCode' => $order->cart->billing_address->address_post_code, 'countryCode' => $order->cart->billing_address->address_country->zone_code_2), 'address' => array('initials' => substr($order->cart->shipping_address->address_firstname, 0, 1), 'lastName' => $order->cart->shipping_address->address_firstname, 'streetName' => $addressST[0], 'streetNumber' => $addressST[1], 'city' => $order->cart->shipping_address->address_city, 'zipCode' => $order->cart->shipping_address->address_post_code, 'countryCode' => $order->cart->shipping_address->address_country->zone_code_2));
         $paynlService = new Pay_Api_Start();
         $paynlService->setServiceId($this->payment_params->service_id);
         $paynlService->setApiToken($this->payment_params->token_api);
         $paynlService->setPaymentOptionId($this->payment_params->option_id);
         $paynlService->setAmount(round($order->cart->full_total->prices[0]->price_value_with_tax, 2) * 100);
         $paynlService->setDescription(JText::_('INVOICE') . ': ' . $order->order_number);
         $paynlService->setCurrency($this->currency->currency_code);
         $paynlService->setExchangeUrl($notify_url);
         $paynlService->setFinishUrl($return_url);
         $paynlService->setExtra1($order->order_id);
         $paynlService->setExtra2($order->order_number);
         $paynlService->setEnduser($enduser);
         //add items
         foreach ($order->cart->products as $product) {
             $amount = round($product->order_product_total_price * 100);
             if ($amount != 0) {
                 $price = $product->order_product_total_price;
                 $tax = $product->order_product_tax;
                 $taxClass = Pay_Helper::calculateTaxClass($price, $tax);
                 $paynlService->addProduct($product->order_product_id, $product->order_product_name, $amount, $product->order_product_quantity, $taxClass);
             }
         }
         //shipment
         if (!empty($order->order_shipping_price) && $order->order_shipping_price != 0) {
             $taxClass = Pay_Helper::calculateTaxClass($order->order_shipping_price, $order->order_shipping_tax);
             $paynlService->addProduct('shipment', $order->order_shipping_method, round($order->order_shipping_price * 100), 1, $taxClass);
         }
         //coupon
         if (!empty($order->order_discount_price) && $order->order_discount_price != 0) {
             $taxClass = Pay_Helper::calculateTaxClass($order->order_discount_price, $order->order_discount_tax);
             $paynlService->addProduct('discount', $order->order_discount_code, round($order->order_discount_price * -100), 1);
         }
         //payment
         if (!empty($order->order_payment_price) && $order->order_payment_price != 0) {
             $paynlService->addProduct('payment', $order->order_payment_method, round($order->order_payment_price, (int) $this->currency->currency_locale['int_frac_digits']) * 100, 1);
         }
         try {
             $result = $paynlService->doRequest();
         } catch (Exception $ex) {
             die($ex);
         }
         $paynlUrl = $result['transaction']['paymentURL'];
         $this->saveTransaction(array('transaction_id' => $result['transaction']['transactionId'], 'option_id' => $this->payment_params->option_id, 'amount' => round($order->cart->full_total->prices[0]->price_value_with_tax, 2) * 100, 'order_id' => $order->order_id, 'status' => 'PENDING'));
         $this->app->redirect($paynlUrl);
         return true;
     }
 }