%PDF- %PDF-
Direktori : /proc/self/root/home1/lightco1/www/plugins/vmpayment/klarna/klarna/helpers/ |
Current File : //proc/self/root/home1/lightco1/www/plugins/vmpayment/klarna/klarna/helpers/klarna_payments.php |
<?php defined ('_JEXEC') or die('Restricted access'); /** * @version $Id: klarna_payments.php 8388 2014-10-07 21:06:30Z alatak $ * * @author Valérie Isaksen * @package VirtueMart * @copyright Copyright (C) 2012 iStraxx - All rights reserved. * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php * VirtueMart is free software. This version may have been modified pursuant * to the GNU General Public License, and as distributed it includes or * is derivative of works licensed under the GNU General Public License or * other free or open source software licenses. */ class klarna_payments { // Estore ID /** * @var */ private $eid; // Estore Shared Secret private $secret; // LIVE or BETA private $mode; // SSL or not private $ssl; // Klarna API instance private $klarna; // Klarna Checkout instance private $kCheckout; // Country private $country; private $country_code_3; //lang private $lang; // Currency private $currency; private $virtuemart_currency_id; // Web Root directory private $web_root; // Title private $title; private $code; // Enabled modules private $enabled; // User information from Virtuemart & Joomla private $shipTo; // Variables for the the html page. private $klarna_addr; private $klarna_first_name; private $klarna_last_name; private $klarna_gender; private $klarna_street; private $klarna_houseNr; private $klarna_houseExt; private $klarna_phone; private $klarna_email; private $klarna_reference; private $payment_charge_link; private $klarna_year_salary; private $splitAddress; private $klarna_bday; /** * @param $cData * @param $shipTo */ function __construct ($cData, $shipTo) { $this->shipTo = $shipTo; $this->country = $cData['country_code']; $this->country_code_3 = $cData['country_code_3']; $this->currency = $cData['currency_code']; $this->virtuemart_currency_id = $cData['virtuemart_currency_id']; //$this->currency = $vendor_currency; // Get EID and Secret $this->eid = $cData['eid']; $this->secret = $cData['secret']; $this->lang = $cData['language_code']; // Is Invoice enabled? $this->enabled = TRUE; // Set modes $this->mode = $cData['mode']; $this->ssl = KlarnaHandler::getKlarnaSSL ($this->mode); $this->web_root = JURI::base (); try { $this->klarna = new Klarna_virtuemart(); $this->klarna->config ($this->eid, $this->secret, $this->country, $this->lang, $this->currency, $this->mode, VMKLARNA_PC_TYPE, KlarnaHandler::getKlarna_pc_type (), $this->ssl); } catch (Exception $e) { VmError ('klarna_payments', $e); unset($this->klarna); } } /** * Attempt to fill in some of what we've already filled in if we * come back after failing a purchase. */ private function setPreviouslyFilledIn ($klarna_data) { if (is_object($klarna_data)) { $klarna_data=(array)$klarna_data; } if (($this->country == "nl" ) && isset($klarna_data['pno'])) { $pno = $klarna_data['pno']; $this->birth_year = $klarna_data['birth_year']; $this->birth_month = $klarna_data['birth_month']; $this->birth_day = $klarna_data['birth_day']; } elseif ( $this->country == "de") { $pno = $klarna_data['pno']; $this->birth_year = $klarna_data['birth_year']; $this->birth_month = $klarna_data['birth_month']; $this->birth_day = $klarna_data['birth_day']; } else { $this->socialNumber=$klarna_data['socialNumber']; } $this->klarna_street = ((isset($klarna_data['street']) && !isset($this->klarna_street)) ? $klarna_data['street'] : $this->klarna_street); $this->klarna_houseNr = ((isset($klarna_data['house_no']) && !isset($this->klarna_houseNr)) ? $klarna_data['house_no'] : $this->klarna_houseNr); $this->klarna_houseExt = ((isset($klarna_data['house_ext']) && !isset($this->klarna_houseExt)) ? $klarna_data['house_ext'] : $this->klarna_houseExt); $this->klarna_gender = ((isset($klarna_data['gender']) && !isset($this->klarna_gender)) ? $klarna_data['gender'] : $this->klarna_gender); $this->klarna_year_salary = ((isset($klarna_data['year_salary']) && !isset($this->klarna_year_salary)) ? $klarna_data['year_salary'] : $this->klarna_year_salary); } /** * Build the Payment params */ public function get_payment_params ($method, $payment_type, $cart = NULL, $country_currency_code = '', $vendor_currency='') { if (!class_exists ('CurrencyDisplay')) { require(VMPATH_ADMIN . DS . 'helpers' . DS . 'currencydisplay.php'); } if (!class_exists ('KlarnaAPI')) { require (JPATH_VMKLARNAPLUGIN . DS . 'klarna' . DS . 'helpers' . DS . 'klarnaapi.php'); } $payment_params = array(); $invoice_fee = 0; if (!isset($this->klarna) || !($this->klarna instanceof Klarna_virtuemart)) { return NULL; } $payment_params['payment_currency_info'] = ""; if ($cart->pricesCurrency != $this->virtuemart_currency_id) { $payment_params['payment_currency_info'] = vmText::_ ('VMPAYMENT_KLARNA_PAYMENT_CURRENCY_INFO'); } if ($payment_type == 'invoice') { KlarnaHandler::getInvoiceFeeInclTax ($method, $this->country_code_3, $cart->pricesCurrency, $this->virtuemart_currency_id, $display_invoice_fee, $invoice_fee); $billTotalInCountryCurrency = 0; $aTypes = NULL; $payment_params['pClasses'] = NULL; } else { $display_fee = 0; $billTotalInCountryCurrency = 0; if (isset($cart->cartPrices['billTotal'])) { $billTotalInCountryCurrency = KlarnaHandler::convertPrice ($cart->cartPrices['billTotal'], $vendor_currency, $country_currency_code, $cart->cartPrices); } if ($billTotalInCountryCurrency <= 0) { return NULL; } //$aTypes = array(KlarnaPClass::ACCOUNT, KlarnaPClass::CAMPAIGN, KlarnaPClass::FIXED); $aTypes = array(KlarnaPClass::ACCOUNT, KlarnaPClass::CAMPAIGN); } $payment_params['sType'] = $payment_type; $kCheckout = new KlarnaAPI($this->country, $this->lang, $payment_type, $billTotalInCountryCurrency, KlarnaFlags::CHECKOUT_PAGE, $this->klarna, $aTypes, JPATH_VMKLARNAPLUGIN); if ($payment_type == 'invoice') { if ($invoice_fee) { $payment_params['module'] = vmText::sprintf ('VMPAYMENT_KLARNA_INVOICE_TITLE', $display_invoice_fee); } else { $payment_params['module'] = vmText::_ ('VMPAYMENT_KLARNA_INVOICE_TITLE_NO_PRICE'); } $payment_params['pClasses'] = NULL; $payment_params['id'] = 'klarna_invoice'; } elseif ($payment_type == 'part') { KlarnaHandler::getCheapestPclass ($kCheckout, $cheapest, $minimum); if ($billTotalInCountryCurrency < $minimum) { return NULL; } if (!class_exists ('VirtueMartModelCurrency')) { require(VMPATH_ADMIN . DS . 'models' . DS . 'currency.php'); } // Cheapest is in the Klarna country currency, convert it to the current currency display //$currencyDisplay = CurrencyDisplay::getInstance( ); //$countryCurrencyId = $this->virtuemart_currency_id; //$sFee = $currencyDisplay->priceDisplay($cheapest, 0, 1,false); $sFee = $kCheckout->getPresentableValuta ($cheapest); $payment_params['module'] = vmText::sprintf ('VMPAYMENT_KLARNA_PARTPAY_TITLE', $sFee); $payment_params['pClasses'] = $kCheckout->getPClassesInfo (); $payment_params['id'] = 'klarna_partPayment'; } else { $pclasses = $kCheckout->aPClasses; if (empty($pclasses)) { return NULL; } $payment_params['module'] = vmText::_ ('VMPAYMENT_KLARNA_SPEC_TITLE'); $payment_params['pClasses'] = $kCheckout->getPClassesInfo (); $payment_params['id'] = 'klarna_SpecCamp'; } $payment_params['payment_link'] = "https://online.klarna.com/villkor.yaws?eid=" . $this->eid . "&charge=" . $invoice_fee; if (strtolower ($this->country) == 'de') { $vendor_id = 1; $payment_params['agb_link'] = JRoute::_ ('index.php?option=com_virtuemart&view=vendor&layout=tos&virtuemart_vendor_id=' . $vendor_id); } //$lang = KlarnaHandler::getLanguageForCountry($method, $this->country); $symbol = KlarnaHandler::getCurrencySymbolForCountry ($method, $this->country); if (KlarnaHandler::getKlarnaError ($klarnaError, $klarnaOption)) { if ($klarnaOption == 'klarna_' . $payment_type) { $payment_params['red_baloon_content'] = $klarnaError; $payment_params['red_baloon_paymentBox'] = 'klarna_box_' . $klarnaOption; //KlarnaHandler::clearKlarnaError (); } } // Something went wrong, refill what we can. $session = JFactory::getSession (); $sessionKlarna = $session->get ('Klarna', 0, 'vm'); if (!empty($sessionKlarna)) { $sessionKlarnaData = (object) json_decode($sessionKlarna ,true); if (isset($sessionKlarnaData->KLARNA_DATA)) { $klarnaData = (array)$sessionKlarnaData->KLARNA_DATA; $this->setPreviouslyFilledIn ($klarnaData); } } $payment_params['paymentPlan'] = ''; if (is_array ($kCheckout->aPClasses)) { foreach ($kCheckout->aPClasses as $pclass) { if ($pclass['default'] === TRUE) { $payment_params['paymentPlan'] = $pclass['pclass']->getId (); break; } } } if ($payment_type != "spec") { //$payment_params['conditionsLink'] = $aTemplateData['conditions']; } $payment_params['fields'] = $this->shipTo; $payment_params['payment_id'] = 'virtuemart_paymentmethod_id'; $payment_params['checkout'] = $this->klarna->checkoutHTML (); $payment_params['eid'] = $this->eid; $payment_params['year_salary'] = $this->klarna_year_salary; $payment_params['agreement_link'] = $this->payment_charge_link; $payment_params['sum'] = $invoice_fee; $payment_params['fee'] = $invoice_fee; $payment_params['invoice_fee'] = $invoice_fee; $payment_params['langISO'] = $this->lang; $payment_params['countryCode'] = $this->country; $payment_params['flag'] = KlarnaFlags::CHECKOUT_PAGE; $payment_params['payment_id'] = "payment"; $payment_params['invoice_name'] = 'klarna_invoice'; $payment_params['part_name'] = 'klarna_partPayment'; $payment_params['spec_name'] = 'klarna_SpecCamp'; $payment_params['fields']['socialNumber'] = isset($this->socialNumber)?$this->socialNumber:""; $payment_params['fields']['birth_day'] = isset($this->birth_day)?$this->birth_day:""; $payment_params['fields']['birth_month'] = isset($this->birth_month)?$this->birth_month:""; $payment_params['fields']['birth_year'] = isset($this->birth_year)?$this->birth_year:""; return $payment_params; } /** * Build the Payment params */ public function getCheapestMonthlyCost ($cart = NULL, $cData) { if (!class_exists ('CurrencyDisplay')) { require(VMPATH_ADMIN . DS . 'helpers' . DS . 'currencydisplay.php'); } if (!class_exists ('KlarnaAPI')) { require (JPATH_VMKLARNAPLUGIN . DS . 'klarna' . DS . 'helpers' . DS . 'klarnaapi.php'); } if (!isset($this->klarna) || !($this->klarna instanceof Klarna_virtuemart)) { return NULL; } $display_fee = 0; $billTotalInCountryCurrency = 0; if (isset($cart->cartPrices['billTotal'])) { $billTotalInCountryCurrency = KlarnaHandler::convertPrice ($cart->cartPrices['billTotal'], $cData['vendor_currency'], $cData['virtuemart_currency_id'], $cart->pricesCurrency); } if ($billTotalInCountryCurrency <= 0) { return NULL; } $aTypes = array(KlarnaPClass::ACCOUNT, KlarnaPClass::CAMPAIGN); $kCheckout = new KlarnaAPI($this->country, $this->lang, 'part', $billTotalInCountryCurrency, KlarnaFlags::CHECKOUT_PAGE, $this->klarna, $aTypes, JPATH_VMKLARNAPLUGIN); KlarnaHandler::getCheapestPclass ($kCheckout, $cheapest, $minimum); vmdebug('getCheapestMonthlyCost',$cart->cartPrices['billTotal'], $billTotalInCountryCurrency , $cheapest,$minimum); if ($billTotalInCountryCurrency < $minimum) { return NULL; } if (!class_exists ('VirtueMartModelCurrency')) { require(VMPATH_ADMIN . DS . 'models' . DS . 'currency.php'); } $sFee = $kCheckout->getPresentableValuta ($cheapest); return $sFee; } /** * @return string */ public function getTermsLink () { return 'https://static.klarna.com/external/html/' . KLARNA_SPECIAL_CAMPAIGN . '_' . strtolower ($this->country) . '.html'; } /** * @param $pid * @param $totalSum * @return string */ function displayPclass ($pid, $totalSum) { if (!class_exists ('KlarnaAPI')) { require (JPATH_VMKLARNAPLUGIN . DS . 'klarna' . DS . 'helpers' . DS . 'klarnaapi.php'); } $kCheckout = new KlarnaAPI($this->country, $this->lang, 'part', $totalSum, KlarnaFlags::CHECKOUT_PAGE, $this->klarna, array(KlarnaPClass::ACCOUNT, KlarnaPClass::CAMPAIGN, KlarnaPClass::FIXED), JPATH_VMKLARNAPLUGIN); return $kCheckout->renderPClass ($pid); } }