/** * Activates the reservation when the order or a part of it is send. * Saves the invoice on the webserver. * * @param Object $k Configured Klarna object. * @param String $ordernumber The ordernumber from the order the items are send from. * @param String $action The transaction id from the changed order. * @param Array $articles Array of articles that are send. * * @throws KlarnaException * * @return Array $myerror Configured Klarna object with error message. */ function piKlarnaActivateReservation($k, $ordernumber, $action, $articles) { $piKlarnaConfig = array(); $sql = "SELECT id FROM s_order WHERE ordernumber = ?"; $orderId = Shopware()->Db()->fetchOne($sql, array($ordernumber)); $sql = "SELECT * FROM s_order_billingaddress WHERE orderID = ?"; $myuser = Shopware()->Db()->fetchRow($sql, array((int)$orderId)); $sql = "SELECT countryiso FROM s_core_countries WHERE id = ?"; $piKlarnaCountryIso = Shopware()->Db()->fetchOne($sql, array((int)$myuser["countryID"])); $piKlarnaConfig = Shopware()->Plugins()->Frontend()->PigmbhKlarnaPayment()->Config(); $sql = "SELECT * FROM Pi_klarna_payment_user_data WHERE ordernumber = ?"; $myKlarnaUser = Shopware()->Db()->fetchRow($sql, array($ordernumber)); if ($piKlarnaCountryIso == 'DE' || $piKlarnaCountryIso == 'NL') { $piKlarnaStreet = $myuser["street"]; } else { $piKlarnaStreet = $myuser["street"] . ' ' . $myuser["streetnumber"]; } $myerror = array(); $myerror['error'] = false; $myerror['errormessage'] = " "; $addr = new KlarnaAddr( $myKlarnaUser["mail"], '', $myKlarnaUser["cellphone"], utf8_decode($myKlarnaUser["firstname"]), utf8_decode($myKlarnaUser["lastname"]), '', utf8_decode($piKlarnaStreet), $myKlarnaUser["zip"], utf8_decode($myKlarnaUser["city"]), getCountryCode($piKlarnaCountryIso), $myKlarnaUser["housenr"], utf8_decode($myuser["text4"]) ); if($piKlarnaCountryIso=='DE' || $piKlarnaCountryIso=='NL'){ $addr->setHouseNumber($myuser["streetnumber"]); if($piKlarnaCountryIso=='NL' && $myuser["text4"]){ $addr->setHouseExt(utf8_decode($myuser["text4"])); } } elseif($myuser["company"]){ $addr->setCompanyName(utf8_decode($myuser["company"])); $addr->isCompany=true; } $k->setAddress(KlarnaFlags::IS_BILLING, $addr); $k->setAddress(KlarnaFlags::IS_SHIPPING, $addr); $k->setEstoreInfo($ordernumber); $sql = "SELECT transactionid FROM Pi_klarna_payment_order_data WHERE order_number = ?"; $rno = Shopware()->Db()->fetchOne($sql, array($ordernumber)); $sql = "SELECT payment_name FROM Pi_klarna_payment_order_data WHERE order_number = ?"; $PigmbhKlarnaPaymentName = Shopware()->Db()->fetchOne($sql, array($ordernumber)); if ($PigmbhKlarnaPaymentName == 'KlarnaInvoice') $PigmbhKlarnaPaymentFlag = KlarnaPClass::INVOICE; else { try { $pclasses = $k->getPClasses(null); $PigmbhKlarnaPaymentFlag = $pclasses[0]->getId(); } catch (Exception $e) { $myerror['error'] = true; $myerror['errormessage'] = $e->getMessage() . " (#" . $e->getCode() . ")"; return $myerror; } } if ($piKlarnaConfig->pi_klarna_Testmode == true) $piKlarnaTestmode = KlarnaFlags::TEST_MODE; else $piKlarnaTestmode = 0; if ($myuser["salutation"] == "mr") $mygender = KlarnaFlags::MALE; else $mygender = KlarnaFlags::FEMALE; $sql = "SELECT birthday FROM Pi_klarna_payment_user_data WHERE ordernumber = ?"; $myBirthday = Shopware()->Db()->fetchOne($sql, array($ordernumber)); try { $result = $k->activateReservation( $myBirthday , $rno, $mygender, '', $piKlarnaTestmode, $PigmbhKlarnaPaymentFlag ); $invno = $result[1]; $invNo = $invno; $k2 = piKlarnaCreateKlarnaInstance($ordernumber); if ($piKlarnaConfig->pi_klarna_liveserver == true) $testvar = 'true'; else $testvar = 'false'; try { $result = $k2->invoiceAmount($invNo); if ($action == 'last') $method = 'Letzte Rechnung'; elseif ($action == 'complete') $method = 'Komplette Rechnung'; else $method = 'Teilrechnung'; $sql = "INSERT INTO `Pi_klarna_payment_bills`(`method`, `order_number`, `invoice_amount`, `invoice_number`, `liveserver`) VALUES(?, ?, ?, ?, ?)"; Shopware()->Db()->query($sql, array($method, $ordernumber, $result, $invno, $testvar)); for ($i = 0; $i < sizeof($articles); $i++) { $myarticlename = $articles[$i]['name']; // $myarticlename = str_replace("'", "\'", $articles[$i]['name']); $sql = "INSERT INTO `Pi_klarna_payment_bills_articles` (`order_number`, `invoice_number`, `name`, `bestell_nr`, `anzahl`, `einzelpreis`) VALUES(?, ?, ?, ?, ? ,?)"; Shopware()->Db()->query($sql, array( $ordernumber, $invno, $myarticlename, $articles[$i]['bestell_nr'], (int)$articles[$i]['anzahl'], $articles[$i]['einzelpreis'] )); } $ch = ""; if ($piKlarnaConfig->pi_klarna_liveserver == true) { $ch = curl_init('https://online.klarna.com/invoices/' . $invno . '.pdf'); } else { $ch = curl_init('https://beta-test.klarna.com/invoices/' . $invno . '.pdf'); } $fp = fopen('files/documents/' . $invno . '.pdf', 'wb'); curl_setopt($ch, CURLOPT_FILE, $fp); curl_setopt($ch, CURLOPT_HEADER, 0); curl_exec($ch); curl_close($ch); fclose($fp); return $myerror; } catch (Exception $e) { $myerror['error'] = true; $myerror['errormessage'] = $e->getMessage() . " (#" . $e->getCode() . ")"; return $myerror; } } catch (Exception $e) { $myerror['error'] = true; $myerror['errormessage'] = $e->getMessage() . " (#" . $e->getCode() . ")"; return $myerror; } }
/** * Adds address to Klarna object * * @param Object $k Klarna object * */ public function addKlarnaAddress($k) { $myuser = $this->getUser(); $piKlarnaCountryIso = getBillingCountry($myuser); if ($piKlarnaCountryIso == 'DE' || $piKlarnaCountryIso == 'NL') { $piKlarnaStreet = $myuser["billingaddress"]["street"]; } else { $piKlarnaStreet = $myuser["billingaddress"]["street"] . ' ' . $myuser["billingaddress"]["streetnumber"]; } $addr = new KlarnaAddr($myuser["additional"]["user"]["email"], '', $myuser["billingaddress"]["phone"], $this->_convertEncoding($myuser["billingaddress"]["firstname"]), $this->_convertEncoding($myuser["billingaddress"]["lastname"]), '', $this->_convertEncoding($piKlarnaStreet), $myuser["billingaddress"]["zipcode"], $this->_convertEncoding($myuser["billingaddress"]["city"]), getCountryCode($piKlarnaCountryIso) ); if ($piKlarnaCountryIso == 'DE' || $piKlarnaCountryIso == 'NL') { $addr->setHouseNumber($myuser["billingaddress"]["streetnumber"]); if ($piKlarnaCountryIso == 'NL') { $addr->setHouseExt($this->_convertEncoding($myuser["billingaddress"]["text4"])); } } elseif ($myuser["billingaddress"]["company"]) { $addr->setCompanyName($this->_convertEncoding($myuser["billingaddress"]["company"])); $addr->isCompany = true; } $k->setCountry($piKlarnaCountryIso); $k->setAddress(KlarnaFlags::IS_BILLING, $addr); $k->setAddress(KlarnaFlags::IS_SHIPPING, $addr); }