error_message = ''; $this->klarna = new Klarna(); KlarnaConfig::$store = false; $this->base_object = $base_object; $this->customer_data = $base_object->customer->get_data(); $this->shoppingcart = false; //Create the config object, since we aren't storing the file, we //don't need to specify a URI. $config = new KlarnaConfig($file = null); $config['eid'] = 0; //Merchant ID or Estore ID, an integer above 0 if (isset($this->base_object->config->shopConfiguration['klarna_eid']) && $this->base_object->config->shopConfiguration['klarna_eid']) { $config['eid'] = $this->base_object->config->shopConfiguration['klarna_eid']; } $config['secret'] = ''; //The shared secret / password if (isset($this->base_object->config->shopConfiguration['klarna_secret']) && $this->base_object->config->shopConfiguration['klarna_secret']) { $config['secret'] = $this->base_object->config->shopConfiguration['klarna_secret']; } $config['country'] = KlarnaCountry::DE; $config['language'] = KlarnaLanguage::DE; $config['currency'] = KlarnaCurrency::EUR; $config['mode'] = Klarna::LIVE; //or Klarna::BETA, depending on which server your eid is associated with. //Define pclass settings: $config['pcStorage'] = 'json'; //Which storage module? can be json, xml or mysql. $config['pcURI'] = './web/'.SHOP_SYSTEM.'/config/pclasses.json'; //Where the json filefor the pclasses are stored. //Should we use HTTPS? $config['ssl'] = true; //Should we error report/status report to Klarna? $config['candice'] = true; //(set to false if your server doesn't support UDP) if ($DEVMODE) { //Do we want to see xmlrpc debugging information? $config['xmlrpcDebug'] = true; //Do we want to see normal debug information? $config['debug'] = true; } else { //Do we want to see xmlrpc debugging information? $config['xmlrpcDebug'] = false; //Do we want to see normal debug information? $config['debug'] = false; } //Set the config object. $this->klarna->setConfig($config); } // end __construct public function get_error() { return $this->error_message; } // end get_error public function set_shoppingcart($shoppingcart) { $this->shoppingcart = $shoppingcart; } // end set_shoppingcart public function set_order_data($delivery_charges, $payment_method_charges) { if ($this->shoppingcart) { foreach ($this->shoppingcart['items'] as $item) { $qty = $item->cartQuantity; $artNo = $item->number; $title = $item->name; $price = round($item->calculatedPrices['itemPriceGross'], 2); $vat = $item->tax; $discount = 0; $flags = KlarnaFlags::INC_VAT; $this->klarna->addArticle($qty, $artNo, $title, $price, $vat, $discount, $flags); } // $delivery_charges $this->klarna->addArticle( $qty = 1, $artNo = "", $title = "Versandkosten", $price = $delivery_charges, $vat = 19, $discount = 0, $flags = KlarnaFlags::INC_VAT + KlarnaFlags::IS_SHIPMENT ); // $payment_method_charges $this->klarna->addArticle( $qty = 1, $artNo = "", $title = "Zahlungsgebuehren", $price = $payment_method_charges, $vat = 19, $discount = 0, $flags = KlarnaFlags::INC_VAT + KlarnaFlags::IS_HANDLING ); if (isset($this->shoppingcart['gift_certificate_code'])) { foreach ($this->shoppingcart['tax_values'] as $key => $value) { $this->klarna->addArticle( $qty = 1, $artNo = "", $title = "Gutscheine ".$this->shoppingcart['gift_certificate_code'].' zu '.$value['gift']['percent'].'%', $price = - $value['gift']['gross'], $vat = $key, $discount = 0, $flags = KlarnaFlags::INC_VAT ); } } } } // end set_order_data public function set_address($billing_address, $shipping_address) { $addr_billing = new KlarnaAddr( $email = $this->customer_data->email, $telno = $this->customer_data->phone, $telno = $this->customer_data->mobile, //$fname = utf8_decode($billing_address['firstname']), $fname = $billing_address['firstname'], //$lname = utf8_decode($billing_address['surname']), $lname = $billing_address['surname'], $careof = '', //$street = utf8_decode($billing_address['street']), $street = $billing_address['street'], $zip = $billing_address['zip_code'], //$city = utf8_decode($billing_address['city']), $city = $billing_address['city'], $country = KlarnaCountry::DE, //$houseNo = utf8_decode($billing_address['house_number']), $houseNo = $billing_address['house_number'], $houseExt = null ); $addr_shipping = new KlarnaAddr( $email = $this->customer_data->email, $telno = $this->customer_data->phone, $telno = $this->customer_data->mobile, //$fname = utf8_decode($shipping_address['firstname']), $fname = $shipping_address['firstname'], //$lname = utf8_decode($shipping_address['surname']), $lname = $shipping_address['surname'], $careof = '', //No care of, C/O. //$street = utf8_decode($shipping_address['street']), $street = $shipping_address['street'], $zip = $shipping_address['zip_code'], //$city = utf8_decode($shipping_address['city']), $city = $shipping_address['city'], $country = KlarnaCountry::DE, //$houseNo = utf8_decode($shipping_address['house_number']), $houseNo = $shipping_address['house_number'], $houseExt = null ); //Next we tell the Klarna instance to use the address in the next order. $this->klarna->setAddress(KlarnaFlags::IS_BILLING, $addr_billing); //Billing / invoice address $this->klarna->setAddress(KlarnaFlags::IS_SHIPPING, $addr_shipping); //Shipping / delivery address } // end set_address public function transaction_test($pay_in_installments = false) { global $DEVMODE; try { $pno = substr($this->customer_data->burth_date,8,2).substr($this->customer_data->burth_date,5,2).substr($this->customer_data->burth_date,0,4); if ($this->customer_data->honorific == 2) { // company $this->error_message = 'Klarna steht nur Privatkunden zur Verfügung. Bitte wahlen sei eine andere Bezahlmethode.'; return false; } else if ($this->customer_data->honorific == 1) { $gender = KlarnaFlags::FEMALE; //The customer is a male. } else { $gender = KlarnaFlags::MALE; //The customer is a male. } $flags = KlarnaFlags::NO_FLAG; //No specific behaviour like TEST_MODE.^ // pclass values: // -1 -> Rechnung // 2882 -> Finanzierung (24 Monate) $pclass = KlarnaPClass::INVOICE; if ($pay_in_installments) { $pclass = 2882; } $result = $this->klarna->addTransaction($pno, $gender, $flags, $pclass); //Check the order status if ($result[1] == KlarnaFlags::ACCEPTED) { $this->klarna->deleteInvoice($result[0]); return true; } else if ($result[1] == KlarnaFlags::PENDING) { $this->klarna->deleteInvoice($result[0]); $this->error_message = 'Ihre Bestellung wird von Klarna Geprüft. Bitte wahlen sei eine andere Bezahlmethode.'; return false; } else if ($result[1] == KlarnaFlags::DENIED) { $this->error_message = 'Sie können bei uns nicht mit Klaner bestellen. Bitte wahlen sei eine andere Bezahlmethode. Sie können sich mit Klaner in Verbindung setzen wenn sie trotzdem mit Klaner bezahlen wollen. '; return false; } } catch(Exception $e) { //The purchase was denied or something went wrong, print the message: if ($DEVMODE) { echo "
".$e->getMessage()." (#".$e->getCode().")"; $this->error_message = $e->getMessage(); } else { //$this->error_message = "ERROR NR: ".$e->getCode().' '.$e->getMessage(); $this->error_message = $e->getMessage(); } } return false; } // end transaction_test public function transaction($pay_in_installments = false) { global $DEVMODE; try { $pno = substr($this->customer_data->burth_date,8,2).substr($this->customer_data->burth_date,5,2).substr($this->customer_data->burth_date,0,4); if ($this->customer_data->honorific == 2) { // company $this->error_message = 'Klarna steht nur Privatkunden zur Verfügung. Bitte wahlen sei eine andere Bezahlmethode.'; return false; } else if ($this->customer_data->honorific == 1) { $gender = KlarnaFlags::FEMALE; //The customer is a male. } else { $gender = KlarnaFlags::MALE; //The customer is a male. } $flags = KlarnaFlags::NO_FLAG; //No specific behaviour like TEST_MODE.^ // pclass values: // -1 -> Rechnung // 2882 -> Finanzierung (24 Monate) $pclass = KlarnaPClass::INVOICE; if ($pay_in_installments) { $pclass = 2882; } $result = $this->klarna->addTransaction($pno, $gender, $flags, $pclass); //Check the order status if ($result[1] == KlarnaFlags::ACCEPTED) { return $result[0]; } else if ($result[1] == KlarnaFlags::PENDING) { $this->klarna->deleteInvoice($result[0]); $this->error_message = 'Ihre Bestellung wird von Klarna Geprüft. Bitte wahlen sei eine andere Bezahlmethode.'; return false; } else if ($result[1] == KlarnaFlags::DENIED) { $this->error_message = 'Sie können bei uns nicht mit Klaner bestellen. Bitte wahlen sei eine andere Bezahlmethode. Sie können sich mit Klaner in Verbindung setzen wenn sie trotzdem mit Klaner bezahlen wollen. '; return false; } } catch(Exception $e) { //The purchase was denied or something went wrong, print the message: if ($DEVMODE) { echo "
".$e->getMessage()." (#".$e->getCode().")"; $this->error_message = $e->getMessage(); } else { $this->error_message = $e->getMessage(); } } return false; } // end transaction public function get_installments($sum) { $data = array(); $installments = get_pclass_ids(); foreach ($installments as $inst) { $type = get_type($inst); if ($type == 1) { // calc monthly costs $flag = KlarnaFlags::PRODUCT_PAGE; //or KlarnaFlags::CHECKOUT_PAGE, if you want to do it for the whole order. $pclass = $this->klarna->getCheapestPClass($sum, $flag); //Did we get a PClass? (it is false if we didn't) if ($pclass) { //Here we reuse the same values as above: $monthly_costs = KlarnaCalc::calc_monthly_cost( $sum, $pclass, $flag ); } if ($monthly_costs) { $data[$inst] = array( 'months' => get_months($inst), 'monthly_costs' => $monthly_costs ); } } } return $data; } // end get_installments public function activate($invoice_number) { global $DEVMODE; try { $this->klarna->activateInvoice($invoice_number); return true; } catch(Exception $e) { //The purchase was denied or something went wrong, print the message: if ($DEVMODE) { echo "
".$e->getMessage()." (#".$e->getCode().")"; $this->error_message = $e->getMessage(); } else { $this->error_message = $e->getMessage(); } return false; } } // end activate public function delete($invoice_number) { global $DEVMODE; try { $this->klarna->deleteInvoice($invoice_number); return true; } catch(Exception $e) { //The purchase was denied or something went wrong, print the message: if ($DEVMODE) { echo "
".$e->getMessage()." (#".$e->getCode().")"; $this->error_message = $e->getMessage(); } else { $this->error_message = $e->getMessage(); } return false; } } // end delete } // ene Shop_klarna include('./web/'.SHOP_SYSTEM.'/config/pclass.php');