Example #1
0
/**
 * 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);
    }