%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/klarnaapi.php |
<?php defined ('_JEXEC') or die('Restricted access'); /** * The Klarna API class. This class handles all the API functions send by the GUI. * * @package Klarna Standard Kassa API * @version 2.0.0 * @since 2011-10-10 * @link http://integration.klarna.com/ * @copyright Copyright (c) 2011 Klarna AB (http://klarna.com) */ class KlarnaAPI { /** * Array with different input values * * @var array */ protected $aInputParameters = array(); /** * Array with different input value values * * @var array */ protected $aInputValues = array(); /** * The county code * * @var string */ protected $sCountryCode; /** * The type of class loaded. Either part or invoice or spec * * @var string */ protected $sType; /** * The ISO for language (e.g. sv, da, nb, en, de) * * @var string */ protected $sLangISO; /** * The setup values. * * @var array */ protected $aSetupSettings = array(); /** * The PClasses * * @var array */ public $aPClasses; /** * The klarna object * * @var Klarna */ protected $oKlarna; /** * The klarna language, set from KlarnaLanguage object * * @var integer */ protected $iKlarnaLanguage; /** * The klarna currency, set from KlarnaCurrency object * * @var integer */ protected $iKlarnaCurrency; /** * The klarna country, set from KlarnaCountry object * * @var integer */ protected $iKlarnaCountry; /** * The path where the API and Standard register is located * * @var string */ protected $sPath; /** * The ILT questions */ protected $aIltQuestions = array(); /** * Klarna language pack */ protected $languagePack; /** * The class constructor. Initiates the Klarna Api class * * @ignore Do not show this in PHPDoc. * @return void */ public function __construct ($a_sCountry, $a_sLangISO, $a_sType, $a_iSum, $a_iFlag, &$a_oKlarna = NULL, $aTypes = NULL, $sPath = NULL) { $this->sPath = $sPath; if ($a_sLangISO == NULL) { $aLangArray = array( "swe" => "sv", "deu" => "de", "dnk" => "da", "nld" => "nl", "nor" => "nb", "fin" => "fi", "en" => "en"); $a_sLangISO = @$aLangArray[strtolower ($a_sCountry)]; } // Set the klarna object $this->oKlarna = &$a_oKlarna; // Validate the submitted values $this->setCountry ($a_sCountry); $this->setLanguage ($a_sLangISO); $this->validateType ($a_sType); /* // Set the default input names $this->aInputParameters['street'] = "street"; $this->aInputParameters['homenumber'] = "homenumber"; $this->aInputParameters['paymentPlan'] = "paymentPlan"; $this->aInputParameters['gender'] = "gender"; $this->aInputParameters['male'] = "male"; $this->aInputParameters['female'] = "female"; $this->aInputParameters['birth_day'] = "birth_day"; $this->aInputParameters['birth_month'] = "birth_month"; $this->aInputParameters['birth_year'] = "birth_year"; $this->aInputParameters['bd_jan'] = "1"; $this->aInputParameters['bd_feb'] = "2"; $this->aInputParameters['bd_mar'] = "3"; $this->aInputParameters['bd_apr'] = "4"; $this->aInputParameters['bd_may'] = "5"; $this->aInputParameters['bd_jun'] = "6"; $this->aInputParameters['bd_jul'] = "7"; $this->aInputParameters['bd_aug'] = "8"; $this->aInputParameters['bd_sep'] = "9"; $this->aInputParameters['bd_oct'] = "10"; $this->aInputParameters['bd_nov'] = "11"; $this->aInputParameters['bd_dec'] = "12"; $this->aInputParameters['socialNumber'] = "socialNumber"; $this->aInputParameters['phoneNumber'] = "phoneNumber"; $this->aInputParameters['year_salary'] = "year_salary"; $this->aInputParameters['house_extension'] = "house_extension"; $this->aInputParameters['shipmentAddressInput'] = "shipment_address"; $this->aInputParameters['emailAddress'] = "emailAddress"; $this->aInputParameters['invoiceType'] = "invoiceType"; $this->aInputParameters['reference'] = "reference"; $this->aInputParameters['companyName'] = "companyName"; $this->aInputParameters['firstName'] = "firstName"; $this->aInputParameters['lastName'] = "lastName"; $this->aInputParameters['invoice_type'] = "invoice_type"; $this->aInputParameters['consent'] = "consent"; $this->aInputParameters['city'] = "city"; $this->aInputParameters['zipcode'] = "zipcode"; // Set the default setup values $this->aSetupSettings['langISO'] = $this->sLangISO; $this->aSetupSettings['countryCode'] = $this->sCountryCode; $this->aSetupSettings['sum'] = $a_iSum; $this->aSetupSettings['flag'] = $a_iFlag; $this->aSetupSettings['payment_id'] = "payment"; $this->aSetupSettings['invoice_name'] = 'klarna_invoice'; $this->aSetupSettings['part_name'] = 'klarna_partPayment'; $this->aSetupSettings['spec_name'] = 'klarna_SpecCamp'; */ // $this->aSetupSettings['web_root'] = "/"; //$this->setPaths(); //$this->country=$this->getCountry(); //?????? // Fetch PClasses in case type is invoice if (($this->sType == 'part' || $this->sType == 'spec') && $this->oKlarna != NULL) { $this->fetchPClasses ($a_iSum, $a_iFlag, $aTypes); } } // public function setPaths() { // $this->aSetupSettings['path_css'] = $this->aSetupSettings['web_root'].VMKLARNAPLUGINWEBROOT. '/klarna/assets/css/'; // $this->aSetupSettings['path_js'] = $this->aSetupSettings['web_root'] .VMKLARNAPLUGINWEBROOT. '/klarna/assets/js/'; // $this->aSetupSettings['path_img'] = $this->aSetupSettings['web_root'] .VMKLARNAPLUGINWEBROOT. '/klarna/assets/images/'; // } /** * Add/Overwrite extra setup values. * * @param string $sName The name of the value * @param string $sValue The value * @return void * @deprecated */ public function addSetupValue ($sName, $sValue) { $this->aSetupSettings[$sName] = $sValue; } /** * Add multiple setup values at once * * @param array $aSetupValues The setup values as array. Key is name, value is value. * @return void * * @deprecated */ public function addMultipleSetupValues ($aSetupValues) { foreach ($aSetupValues as $sName => $sValue) { $this->aSetupSettings[$sName] = $sValue; } } public function getSetupValues () { return $this->aSetupSettings; } /** * Add/Overwrite input values. * * @param string $sName The name of the value * @param string $sValue The value * @return void * @deprecated */ public function addInputValue ($sName, $sValue) { $this->aInputValue[$sName] = $sValue; } /** * Add multiple input values at once * * @param array $aSetupValues The setup values as array. Key is name, value is value. * @return void */ public function addMultipleInputValues ($aInputValues) { foreach ($aInputValues as $sName => $sValue) { $this->aInputValue[$sName] = $sValue; } } /* * * @deprecated */ public function getInputValues () { return $this->aInputValues; } /* * @deprecated * */ public function setInvoiceFee ($fee) { if ($this->sType != 'invoice') { throw new KlarnaApiException("Invoice fee only supported when payment type is invoice"); } $this->aSetupSettings['fee'] = round (floatval ($fee), 1); } /** * Retrieve the finished HTML * * @param array $a_aParams The input field names. Only submitted for those that should be different from default values * @param string $a_sHTMLFile (Optional) The file to import. If not submitted, which HTML file will be decides by the class * @return string * @deprecated */ public function retrieveHTML ($a_aParams = NULL, $a_aValues = NULL, $a_sHTMLFile = NULL, $aTemplateData = NULL) { if ($a_aValues != NULL) { $this->aInputValues = array_merge ( $this->aInputValues, $a_aValues); } if ($a_aParams != NULL) { $this->aInputParameters = array_merge ( $this->aInputParameters, $a_aParams); } // print_r($this->aInputValues); // Backwards compability // using input values for red baloon is DEPRECATED if (array_key_exists ('red_baloon_content', $this->aInputValues)) { $this->aSetupSettings['red_baloon_content'] = $this->aInputValues['red_baloon_content']; } if (array_key_exists ('red_baloon_paymentBox', $this->aInputValues)) { $this->aSetupSettings['red_baloon_paymentBox'] = $this->aInputValues['red_baloon_paymentBox']; } if (is_array ($this->aPClasses)) { foreach ($this->aPClasses as $pclass) { if ($pclass['default'] === TRUE) { $this->aInputValues['paymentPlan'] = $pclass['pclass']->getId (); break; } } } $sTemplate = $this->loadTemplate ($a_sHTMLFile, $aTemplateData); Klarna::printDebug (__METHOD__ . ' setup settings', $this->aSetupSettings); Klarna::printDebug (__METHOD__ . ' input values', $this->aInputValues); return $this->translateInputFields ($sTemplate); } /** * @param null $a_sHTMLFile * @param null $aTemplateData * @return string * @deprecated */ public function loadTemplate ($a_sHTMLFile = NULL, $aTemplateData = NULL) { $sFilename = ''; /** * @todo Check for file and trow error if missing */ if ($a_sHTMLFile != NULL) { $sFilename = $a_sHTMLFile; } else { if ($this->sType != "spec") { $sFilename = ($this->sPath != NULL ? $this->sPath : "") . "/klarna/tmpl/" . $this->sType . "_" . strtolower ($this->sCountryCode) . ".html"; } else { $this->aSetupSettings['conditionsLink'] = $aTemplateData['conditions']; $sFilename = ($this->sPath != NULL ? $this->sPath : "") . '/klarna/tmpl/' . $this->sType . "_" . strtolower ($this->sCountryCode) . ".html"; } } Klarna::printDebug (__METHOD__ . 'loading template', $sFilename); return file_get_contents ($sFilename); } /** * Fetch the PClasses from file * * @param integer $iSum The sum of the objects to be bought * @param integer $iFlag The KlarnaFlag to be used. Either Checkout or ProductPage flag. * @return void */ public function fetchPClasses ($iSum, $iFlag, $aTypes = NULL) { if ($this->oKlarna == NULL) { throw new KlarnaApiException("No klarna class is set.", "1000"); } $aPClasses = array(); $default = NULL; foreach ($this->oKlarna->getPClasses () as $pclass) { if ($aTypes == NULL || in_array ($pclass->getType (), $aTypes)) { $sType = $pclass->getType (); if ($sType != KlarnaPClass::SPECIAL) { if ($iSum < $pclass->getMinAmount ()) { continue; } if ($pclass->getType () == KlarnaPClass::FIXED) { if ($iFlag == KlarnaFlags::PRODUCT_PAGE) { continue; } $iMonthlyCost = -1; } else { $lowest_payment = KlarnaCalc::get_lowest_payment_for_account ($pclass->getCountry ()); $iMonthlyCost = KlarnaCalc::calc_monthly_cost ($iSum, $pclass, $iFlag); if ($iMonthlyCost < 0.01) { continue; } if ($iFlag == KlarnaFlags::CHECKOUT_PAGE && $pclass->getType () == KlarnaPClass::ACCOUNT && $iMonthlyCost < $lowest_payment) { $iMonthlyCost = $lowest_payment; } if ($pclass->getType () == KlarnaPClass::CAMPAIGN && $iMonthlyCost < $lowest_payment) { continue; } } } else { $iMonthlyCost = -1; } if ($this->sType == 'part') { if ($sType == KlarnaPClass::ACCOUNT) { $default = $pclass; } else { if ($sType == KlarnaPClass::CAMPAIGN) { if ($default === NULL || $default->getType () != KlarnaPClass::ACCOUNT) { $default = $pclass; } } else { if ($sType == KlarnaPClass::FIXED) { if ($default === NULL) { $default = $pclass; } } else { continue; } } } } else { if ($this->sType == 'spec') { if ($sType != KlarnaPClass::SPECIAL) { continue; } $default = $pclass; } } $aPClasses[$pclass->getId ()]['pclass'] = $pclass; $aPClasses[$pclass->getId ()]['monthlyCost'] = $iMonthlyCost; $aPClasses[$pclass->getId ()]['default'] = FALSE; } } if ($default !== NULL) { $aPClasses[$default->getId ()]['default'] = TRUE; } $this->aPClasses = $aPClasses; } /** * Checks whether the country code is accepted by the API * * @throws KlarnaApiException * @param string $sCountryCode The country code ISO-2 * @return boolean */ private function validateCountry ($sCountryCode) { if (in_array (strtolower ($sCountryCode), array("nl", "se", "de", "dk", "no", "fi"))) { $this->sCountryCode = strtolower ($sCountryCode); switch ($this->sCountryCode) { case "nl": $this->iKlarnaCountry = KlarnaCountry::NL; $this->iKlarnaCurrency = KlarnaCurrency::EUR; break; case "se": $this->iKlarnaCountry = KlarnaCountry::SE; $this->iKlarnaCurrency = KlarnaCurrency::SEK; break; case "de": $this->iKlarnaCountry = KlarnaCountry::DE; $this->iKlarnaCurrency = KlarnaCurrency::EUR; break; case "dk": $this->iKlarnaCountry = KlarnaCountry::DK; $this->iKlarnaCurrency = KlarnaCurrency::DKK; break; case "no": $this->iKlarnaCountry = KlarnaCountry::NO; $this->iKlarnaCurrency = KlarnaCurrency::NOK; break; case "fi": $this->iKlarnaCountry = KlarnaCountry::FI; $this->iKlarnaCurrency = KlarnaCurrency::EUR; break; default: break; } return TRUE; } else { throw new KlarnaApiException('Error in ' . __METHOD__ . ': Invalid country code submitted!'); } } /** * Checks whether the country code is accepted by the API * * @throws KlarnaApiException * @param string $sType The type. Either "part", "spec" or "invoice" * @return boolean */ private function validateType ($sType) { if (in_array (strtolower ($sType), array("part", "invoice", "spec"))) { $this->sType = strtolower ($sType); return TRUE; } else { throw new KlarnaApiException('Error in ' . __METHOD__ . ': Invalid type submitted!'); } } /** * Sets the active country from a ISO country string * or a KlarnaCountry constant */ public function setCountry ($country) { if (!is_numeric ($country)) { $country = KlarnaCountry::fromCode ($country); } else { $country = intval ($country); } if ($this->oKlarna == NULL) { throw new KlarnaApiException('Error in ' . __METHOD__ . ': Klarna instance not set'); } $this->iKlarnaCountry = $country; $this->iKlarnaCurrency = $this->oKlarna->getCurrencyForCountry ($country); $this->sCountryCode = $this->oKlarna->getCountryCode ($country); } public function getCountry () { return $this->iKlarnaCountry; } /** * Sets the active country from a ISO country string * or a KlarnaLanguage constant */ public function setLanguage ($language) { if (!is_numeric ($language)) { $language = Klarna::getLanguageForCode ($language); } else { $language = intval ($language); } $this->iKlarnaLanguage = $language; if ($this->oKlarna == NULL) { throw new KlarnaApiException('Error in ' . __METHOD__ . ': Klarna instance not set'); } $this->sLangISO = $this->oKlarna->getLanguageCode ($language); } public function getLanguage () { return $this->iKlarnaLanguage; } /** * Checks whether the country code is accepted by the API * * @throws KlarnaApiException * @param string $a_sLangISO The language in ISO-2 format * @return boolean * @deprecated */ private function validateLangISO ($a_sLangISO) { if (in_array (strtolower ($a_sLangISO), array("sv", "da", "en", "de", "nl", "nb", "fi"))) { $this->sLangISO = strtolower ($a_sLangISO); switch ($this->sLangISO) { case "sv": $this->iKlarnaLanguage = KlarnaLanguage::SV; break; case "da": $this->iKlarnaLanguage = KlarnaLanguage::DA; break; case "de": $this->iKlarnaLanguage = KlarnaLanguage::DE; break; case "nl": $this->iKlarnaLanguage = KlarnaLanguage::NL; break; case "nb": $this->iKlarnaLanguage = KlarnaLanguage::NB; break; case "fi": $this->iKlarnaLanguage = KlarnaLanguage::FI; break; default: break; } return TRUE; } else { throw new KlarnaApiException('Error in ' . __METHOD__ . ': Invalid language (' . $a_sLangISO . ') ISO submitted!'); } } /** * Translating the fetched HTML agains dynamic values set in this class * * @param string $sHtml The HTML to translate * @return string */ private function translateInputFields ($sHtml) { $sHtml = preg_replace_callback ("@{{(.*?)}}@", array($this, 'changeText'), $sHtml); return $sHtml; } /** * Changing the text from a HTML {{VALUE}} to the actual value decided by the array * * @param array $aText The result from the match in function translateInputFields * @return mixed * @deprecated */ private function changeText ($aText) { // Split them $aExplode = explode (".", $aText[1]); $sType = $aExplode[0]; $sName = @$aExplode[1]; if ($sType == "input") { if (array_key_exists ($sName, $this->aInputParameters)) { return $this->aInputParameters[$sName]; } else { throw new KlarnaApiException('Error in ' . __METHOD__ . ': Invalid inputfield value (' . $sName . ') found in HTML code!'); } } else { if ($sType == "lang") { return vmText::_ ('VMPAYMENT_KLARNA_' . strtoupper ($sName)); //$this->fetchFromLanguagePack($sName); } else { if ($sType == "setup") { if ($sName == "pclasses") { return $this->renderPClasses (); } if ($sName == 'threatmetrix') { if (!array_key_exists ('threatmetrix', $this->aSetupSettings)) { $this->aSetupSettings['threatmetrix'] = $this->oKlarna-> checkoutHTML (); } return @$this->aSetupSettings['threatmetrix']; } if ($sName == 'additional_information') { $key = @$this->aSetupSettings['additional_information']; $key = 'VMPAYMENT_KLARNA_' . strtoupper ($key); $lang = JFactory::getLanguage (); if ($lang->hasKey ($key)) { $frmt = @vmText::_ ($key); //$this->fetchFromLanguagePack($key); return @$this->translateInputFields ($frmt); } else { return ''; } } return @$this->aSetupSettings[$sName]; } else { if ($sType == "value") { return (@$this->aInputValues[$sName]); } else { throw new KlarnaApiException('Error in ' . __METHOD__ . ': Invalid field name (' . $sType . ') found in HTML code!'); } } } } } /** * Redender the PClasses to HTML * * @deprecated * * @return string */ public function renderPClasses () { $sString = ''; foreach ($this->aPClasses as $sPClassId => $aPClassData) { $value = $this->getPresentableValuta ($aPClassData['monthlyCost']); $pm = vmText::_ ('VMPAYMENT_KLARNA_PER_MONTH'); $sString .= '<li ' . ($aPClassData['default'] ? 'id="click"' : "") . '> <div>' . $aPClassData['pclass']->getDescription () . ($aPClassData['monthlyCost'] > 0 ? " - $value $pm" : '') . ($aPClassData['default'] ? '<img src="' . VMKLARNAPLUGINWEBASSETS . '/images/share/ok.gif" border="0" alt="Chosen" />' : '') . '</div> <span style="display: none">' . $sPClassId . '</span> </li>'; } return $sString; } /** * Redender the PClasses to HTML * * @return string */ public function getPClassesInfo () { $pClasses = array(); $i = 0; foreach ($this->aPClasses as $sPClassId => $aPClassData) { $value = $this->getPresentableValuta ($aPClassData['monthlyCost']); $pm = vmText::_ ('VMPAYMENT_KLARNA_PER_MONTH'); $pClasses[$i]['class'] = $aPClassData['default'] ? 'id="click"' : ""; $sString = $aPClassData['pclass']->getDescription () . ($aPClassData['monthlyCost'] > 0 ? " - $value $pm" : '') . ($aPClassData['default'] ? '<img src="' . VMKLARNAPLUGINWEBASSETS . '/images/share/ok.gif" border="0" alt="Chosen" />' : ''); $pClasses[$i]['string'] = $sString; $pClasses[$i]['classId'] = $sPClassId; $i++; } return $pClasses; } /** * Redender the PClasses to HTML * * @return string */ public function renderPClass ($pid) { $sString = ""; foreach ($this->aPClasses as $sPClassId => $aPClassData) { if ($aPClassData['pclass']->getId () == $pid) { $value = $this->getPresentableValuta ($aPClassData['monthlyCost']); $pm = vmText::_ ('VMPAYMENT_KLARNA_PER_MONTH'); $sString .= $aPClassData['pclass']->getDescription () . ($aPClassData['monthlyCost'] > 0 ? " - $value $pm" : ''); return $sString; } } return $sString; } /** * Make the sum shown presentable * * @param integer $iSum The sum to present * @return string */ /* private */ function getPresentableValuta ($iSum) { $sBefore = ""; $sAfter = ""; switch (strtolower($this->sCountryCode)) { case 'se': $sAfter = " kr"; break; case 'no': $sAfter = " NOK"; break; case 'dk': $sAfter = " DKK"; break; case 'fi'; $sBefore = "EUR"; break; case 'de'; case 'nl'; $sBefore = "€"; break; } return $sBefore . $iSum . $sAfter; } public function setCurrency ($currency) { if (!is_numeric ($currency)) { $currency = KlarnaCurrency::fromCode ($currency); } else { $currency = intval ($currency); } switch ($currency) { case KlarnaCurrency::SEK: case KlarnaCurrency::NOK: case KlarnaCurrency::DKK: $this->addSetupValue ('currency_suffix', ' kr'); $this->addSetupValue ('currency_prefix', ''); break; case KlarnaCurrency::EUR: $this->addSetupValue ('currency_prefix', '€'); $this->addSetupValue ('currency_suffix', ''); break; default: $this->addSetupValue ('currency_suffix', ''); $this->addSetupValue ('currency_prefix', ''); break; } } /** * Fetch data from the language pack * * @param string $sText The text to fech * @param null $sISO * @param null $sPath * @return string * @deprecated */ public function fetchFromLanguagePack ($sText, $sISO = NULL, $sPath = NULL) { if ($sISO == NULL) { if ($this != NULL && $this->sLangISO != NULL) { $sISO = strtolower ($this->sLangISO); } else { $sISO = KlarnaAPI::getISOCode (); } } else { $sISO = KlarnaAPI::getISOCode ($sISO); } if ($this->sPath != NULL) { $sPath = $this->sPath; } if ($this->languagePack == NULL) { $this->languagePack = new KlarnaLanguagePack(JPATH_VMKLARNAPLUGIN . '/klarna/language/klarna_language.xml'); } return $this->languagePack->fetch ($sText, $sISO); } /** * Returns the country code for the set country constant. * * @return string */ public function getISOCode ($sCode = NULL) { switch (strtolower ($sCode)) { case "se": case "sv": return "sv"; case "no": case "nb": return "nb"; case "dk": case "da": return "da"; case "fi": return "fi"; case "de": return "de"; case "nl": return "nl"; case "us": case "uk": case "en": default: return "en"; } } public function displayError ($message, $field = NULL) { // Append message if (array_key_exists ('red_baloon_content', $this->aSetupSettings)) { $this->aSetupSettings['red_baloon_content'] = $this->aSetupSettings['red_baloon_content'] . '<br/>' . $message; } else { $this->aSetupSettings['red_baloon_content'] = $message; } // fall back to logo on multiple messages if (array_key_exists ('red_baloon_paymentBox', $this->aSetupSettings)) { $this->aSetupSettings['red_baloon_paymentBox'] = ''; } else { $this->aSetupSettings['red_baloon_paymentBox'] = $field; } } /** * * @param <type> $address * @return <type> */ public static function splitAddress ($address) { $numbers = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9'); $characters = array( '-', '/', ' ', '#', '.', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'); $specialchars = array('-', '/', ' ', '#', '.'); //Where do the numbers start? Allow for leading numbers $numpos = self::strpos_arr ($address, $numbers, 2); //Get the streetname by splitting off the from the start of the numbers $streetname = substr ($address, 0, $numpos); //Strip off spaces at the end $streetname = trim ($streetname); //Get the housenumber+extension $numberpart = substr ($address, $numpos); //and strip off spaces $numberpart = trim ($numberpart); //Get the start position of the extension $extpos = self::strpos_arr ($numberpart, $characters, 0); //See if there is one, if so if ($extpos != '') { //get the housenumber $housenumber = substr ($numberpart, 0, $extpos); // and the extension $houseextension = substr ($numberpart, $extpos); // and strip special characters from it $houseextension = str_replace ($specialchars, '', $houseextension); } else { //Otherwise, we already have the housenumber $housenumber = $numberpart; } return array($streetname, $housenumber, $houseextension); } /** * * @param <type> $haystack * @param <type> $needle * @param <type> $where * @return <type> */ private static function strpos_arr ($haystack, $needle, $where) { $defpos = 10000; if (!is_array ($needle)) { $needle = array($needle); } foreach ($needle as $what) { if (($pos = strpos ($haystack, $what, $where)) !== FALSE) { if ($pos < $defpos) { $defpos = $pos; } } } return $defpos; } public function setAddress (KlarnaAddr $addr) { if (!$addr instanceof KlarnaAddr) { throw new KlarnaApiException(__METHOD__ . ': must be passed a KlarnaAddr'); } $reference = @($addr->getFirstName () . ' ' . $addr->getLastName ()); $cellno = $addr->getCellno (); $telno = $addr->getTelno (); $phone = (strlen ($cellno) > 0) ? $cellno : $telno; $values = &$this->aInputValues; $values['firstName'] = $addr->getFirstName (); $values['lastName'] = $addr->getLastName (); $values['phoneNumber'] = $phone; $values['zipcode'] = $addr->getZipCode (); $values['city'] = $addr->getCity (); $values['street'] = $addr->getStreet (); $values['homenumber'] = $addr->getHouseNumber (); $values['house_extension'] = $addr->getHouseExt (); $values['reference'] = $reference; } /** * Given a ISO 8601 date string (YYYY-MM-DD) sets birth_year, birth_month * and birth_day */ public function setBirthday ($dob) { $splitbday = explode ('-', $dob); $values['birth_year'] = @$splitbday[0]; $values['birth_month'] = @$splitbday[1]; $values['birth_day'] = @$splitbday[2]; } } /** * KlarnaApiException class, only used so it says "KlarnaApiException" instead of Exception. * * @package Klarna Standard Kassa API * @author Paul Peelen * @version 1.0 * @since 1.0 - 14 mar 2011 * @link http://integration.klarna.com/ * @copyright Copyright (c) 2011 Klarna AB (http://klarna.com) */ class KlarnaApiException extends Exception { public function __construct ($sMessage, $code = 0) { parent::__construct ($sMessage, $code); } public function __toString () { return __CLASS__ . ":<p><font style='font-family: Arial, Verdana; font-size: 11px'>[Error: {$this->code}]: {$this->message}</font></p>\n"; } }