Пример #1
0
 /**
  * The invoice_address function is used to retrieve the address of a purchase.
  *
  *
  *
  * @link http://integration.klarna.com/en/api/other-functions/functions/invoiceaddress
  * @param  string  $invNo  Invoice number.
  * @throws KlarnaException
  * @return KlarnaAddr
  */
 public function invoiceAddress($invNo)
 {
     $this->checkInvNo($invNo, __METHOD__);
     $digestSecret = self::digest($this->colon($this->eid, $invNo, $this->secret));
     $paramList = array($this->eid, $invNo, $digestSecret);
     self::printDebug('invoice_address', $paramList);
     $result = $this->xmlrpc_call('invoice_address', $paramList);
     $addr = new KlarnaAddr();
     if (strlen($result[0]) > 0) {
         $addr->isCompany = false;
         $addr->setFirstName($result[0]);
         $addr->setLastName($result[1]);
     } else {
         $addr->isCompany = true;
         $addr->setCompanyName($result[1]);
     }
     $addr->setStreet($result[2]);
     $addr->setZipCode($result[3]);
     $addr->setCity($result[4]);
     $addr->setCountry($result[5]);
     return $addr;
 }
Пример #2
0
 /**
  * @static
  * @param $method
  * @param $order
  * @param $klarna_pclass
  * @return array|bool
  * @throws Exception
  */
 public static function addTransaction($method, $order, $klarna_pclass)
 {
     if (!class_exists('KlarnaAddr')) {
         require JPATH_VMKLARNAPLUGIN . DS . 'klarna' . DS . 'api' . DS . 'klarnaaddr.php';
     }
     $session = JFactory::getSession();
     $sessionKlarna = $session->get('Klarna', 0, 'vm');
     $sessionKlarnaData = (object) json_decode($sessionKlarna, true);
     if (!isset($sessionKlarnaData)) {
         throw new Exception("No klarna Session data set");
     }
     $klarnaData = $sessionKlarnaData->KLARNA_DATA;
     // let's put it back as an array
     $klarnaData = (array) $klarnaData;
     if (VMKLARNA_SHIPTO_SAME_AS_BILLTO) {
         $shipTo = $order['details']['BT'];
     } else {
         $shipTo = (!isset($order['details']['ST']) or empty($order['details']['ST']) or count($order['details']['ST']) == 0) ? $order['details']['BT'] : $order['details']['ST'];
     }
     $billTo = $order['details']['BT'];
     $country = shopFunctions::getCountrybyID($shipTo->virtuemart_country_id, 'country_3_code');
     $cData = self::countryData($method, $country);
     //$total_price_excl_vat = self::convertPrice($order['details']['BT']->order_subtotal, $cData['currency_code']);
     //$total_price_incl_vat = self::convertPrice($order['details']['BT']->order_subtotal + $order['details']['BT']->order_tax, $cData['currency_code'], $order['details']['BT']->order_currency);
     $mode = KlarnaHandler::getKlarnaMode($method, $cData['country_code_3']);
     $ssl = KlarnaHandler::getKlarnaSSL($mode);
     // Instantiate klarna object.
     $klarna = new Klarna_virtuemart();
     $klarna->config($cData['eid'], $cData['secret'], $cData['country_code'], $cData['language'], $cData['currency_code'], $mode, VMKLARNA_PC_TYPE, KlarnaHandler::getKlarna_pc_type(), $ssl);
     // Sets order id's from other systems for the upcoming transaction.
     $klarna->setEstoreInfo($order['details']['BT']->order_number);
     // Fill the good list the we send to Klarna
     foreach ($order['items'] as $item) {
         if ($item->product_basePriceWithTax != 0.0) {
             if ($item->product_basePriceWithTax != $item->product_final_price) {
                 $price = $item->product_basePriceWithTax;
             } else {
                 $price = $item->product_final_price;
             }
         } else {
             if ($item->product_priceWithoutTax != $item->product_item_price) {
                 $price = $item->product_item_price;
             } else {
                 $price = $item->product_discountedPriceWithoutTax;
             }
         }
         $item_price = self::convertPrice($price, $order['details']['BT']->order_currency, $cData['currency_code']);
         $item_price = (double) round($item_price, 2);
         $item_tax_percent = 0;
         foreach ($order['calc_rules'] as $calc_rule) {
             if ($calc_rule->virtuemart_order_item_id == $item->virtuemart_order_item_id and $calc_rule->calc_kind == 'VatTax') {
                 $item_tax_percent = $calc_rule->calc_value;
                 break;
             }
         }
         //$item_discount_percent = (double)(round (abs (($item->product_subtotal_discount / $item->product_quantity) * 100 / $price), 2));
         $item_discount_percent = 0.0;
         $discount_tax_percent = 0.0;
         $klarna->addArticle($item->product_quantity, utf8_decode($item->order_item_sku), utf8_decode(strip_tags($item->order_item_name)), $item_price, (double) $item_tax_percent, $item_discount_percent, KlarnaFlags::INC_VAT);
         $discount_tax_percent = 0.0;
         $includeVat = KlarnaFlags::INC_VAT;
         if ($item->product_subtotal_discount != 0.0) {
             if ($item->product_subtotal_discount > 0.0) {
                 $discount_tax_percent = $item_tax_percent;
                 $includeVat = 0;
             }
             $name = utf8_decode(strip_tags($item->order_item_name)) . ' (' . vmText::_('VMPAYMENT_KLARNA_PRODUCTDISCOUNT') . ')';
             $discount = self::convertPrice(abs($item->product_subtotal_discount), $order['details']['BT']->order_currency, $cData['currency_code']);
             $discount = (double) round(abs($discount), 2) * -1;
             $klarna->addArticle(1, utf8_decode($item->order_item_sku), $name, $discount, (double) $discount_tax_percent, $item_discount_percent, $includeVat);
         }
     }
     // this is not correct yet
     /*
     foreach($order['calc_rules'] as $rule){
     	if ($rule->calc_kind == 'DBTaxRulesBill' or $rule->calc_kind == 'taxRulesBill' or $rule->calc_kind == 'DATaxRulesBill') {
     		$klarna->addArticle (1, "", $rule->calc_rule_name, $rule->calc_amount, 0.0, 0.0, 0);
     
     	}
     
     }
     */
     // Add shipping
     $shipment = self::convertPrice($order['details']['BT']->order_shipment + $order['details']['BT']->order_shipment_tax, $order['details']['BT']->order_currency, $cData['currency_code']);
     foreach ($order['calc_rules'] as $calc_rule) {
         if ($calc_rule->calc_kind == 'shipment') {
             $shipment_tax_percent = $calc_rule->calc_value;
             break;
         }
     }
     $klarna->addArticle(1, "shippingfee", vmText::_('VMPAYMENT_KLARNA_SHIPMENT'), (double) round($shipment, 2), round($shipment_tax_percent, 2), 0, KlarnaFlags::IS_SHIPMENT + KlarnaFlags::INC_VAT);
     // Add invoice fee
     if ($klarna_pclass == -1) {
         //Only for invoices!
         $payment_without_tax = self::convertPrice($order['details']['BT']->order_payment, $order['details']['BT']->order_currency, $cData['currency_code']);
         $payment_with_tax = self::convertPrice($order['details']['BT']->order_payment + $order['details']['BT']->order_payment_tax, $order['details']['BT']->order_currency, $cData['currency_code']);
         foreach ($order['calc_rules'] as $calc_rule) {
             if ($calc_rule->calc_kind == 'payment') {
                 $payment_tax_percent = $calc_rule->calc_value;
                 break;
             }
         }
         if ($payment_without_tax > 0) {
             //vmdebug('invoicefee', $payment, $payment_tax);
             $klarna->addArticle(1, "invoicefee", utf8_decode(vmText::_('VMPAYMENT_KLARNA_INVOICE_FEE_TITLE')), (double) round($payment_with_tax, 2), (double) round($payment_tax_percent, 2), 0, KlarnaFlags::IS_HANDLING + KlarnaFlags::INC_VAT);
         }
     }
     // Add coupon if there is any
     if (abs($order['details']['BT']->coupon_discount) > 0.0) {
         $coupon_discount = self::convertPrice(round($order['details']['BT']->coupon_discount), $order['details']['BT']->order_currency, $cData['currency_code']);
         $coupon_discount = (double) round(abs($coupon_discount), 2) * -1;
         //vmdebug('discount', $coupon_discount);
         $klarna->addArticle(1, 'discount', utf8_decode(vmText::_('VMPAYMENT_KLARNA_DISCOUNT')) . ' ' . utf8_decode($order['details']['BT']->coupon_code), $coupon_discount, 0, 0, KlarnaFlags::INC_VAT);
     }
     try {
         $klarna_shipping = new KlarnaAddr($order['details']['BT']->email, $shipTo->phone_1, isset($shipTo->phone_2) ? $shipTo->phone_2 : "", utf8_decode($shipTo->first_name), utf8_decode($shipTo->last_name), '', utf8_decode($shipTo->address_1), $shipTo->zip, utf8_decode($shipTo->city), utf8_decode($cData['country']), KlarnaHandler::setHouseNo(isset($shipTo->house_no) ? $shipTo->house_no : "", $cData['country_code_3']), KlarnaHandler::setAddress2($shipTo->address_2, $cData['country_code_3']));
     } catch (Exception $e) {
         VmInfo($e->getMessage());
         return FALSE;
     }
     $klarna_reference = "";
     // what is that?
     if ($klarnaData['invoice_type'] == 'company') {
         $klarna_shipping->isCompany = TRUE;
         $klarna_shipping->setCompanyName($shipTo->company);
         $klarna_comment = $shipTo->first_name . ' ' . $shipTo->last_name;
         //$klarnaData['reference'];
         if ($klarna_shipping->getLastName() == "") {
             $klarna_shipping->setLastName("-");
         }
         if ($klarna_shipping->getFirstName() == "") {
             $klarna_shipping->setFirstName("-");
         }
     } else {
         $klarna_reference = "";
         $klarna_comment = "";
     }
     // Only allow billing and shipping to be the same for Germany and the Netherlands
     if (VMKLARNA_SHIPTO_SAME_AS_BILLTO) {
         $klarna_billing = $klarna_shipping;
     } else {
         $klarna_billing = self::getBilling($cData, $order);
     }
     $klarna_flags = KlarnaFlags::RETURN_OCR;
     // get ocr back from KO.
     $klarna->setComment($klarna_comment);
     $klarna->setReference($klarna_reference, "");
     $pno = self::getPNOfromSession($sessionKlarnaData->KLARNA_DATA, $country);
     try {
         $klarna->setAddress(KlarnaFlags::IS_SHIPPING, $klarna_shipping);
         $klarna->setAddress(KlarnaFlags::IS_BILLING, $klarna_billing);
         if (isset($klarnaData['year_salary'])) {
             $klarna->setIncomeInfo("'yearly_salary'", $klarnaData['year_salary']);
         }
         $result = $klarna->addTransaction($pno, $klarna->getCountry() == KlarnaCountry::DE || $klarna->getCountry() == KlarnaCountry::NL ? $klarnaData['gender'] : NULL, $klarna_flags, $klarna_pclass);
         $result['eid'] = $cData['eid'];
         $result['status_code'] = $result[2];
         $result['status_text'] = vmText::_('VMPAYMENT_KLARNA_ORDER_STATUS_TEXT_' . $result[2]);
         return $result;
         //return $result;
     } catch (Exception $e) {
         $result['status_code'] = KlarnaFlags::DENIED;
         $result['status_text'] = mb_convert_encoding($e->getMessage(), 'UTF-8', 'ISO-8859-1') . "  (#" . $e->getCode() . ")";
         return $result;
         //return $result;
         //self::redirectPaymentMethod('error', htmlentities($e->getMessage()) .  "  (#" . $e->getCode() . ")");
     }
 }
Пример #3
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;
    }
}
Пример #4
0
 public static function addTransaction($method, $order, $klarna_pclass)
 {
     if (!class_exists('KlarnaAddr')) {
         require JPATH_VMKLARNAPLUGIN . DS . 'klarna' . DS . 'api' . DS . 'klarnaaddr.php';
     }
     $session = JFactory::getSession();
     $sessionKlarna = $session->get('Klarna', 0, 'vm');
     $sessionKlarnaData = unserialize($sessionKlarna);
     if (!isset($sessionKlarnaData)) {
         throw new Exception("No klarna Session data set");
     }
     $klarnaData = $sessionKlarnaData->KLARNA_DATA;
     //
     $shipTo = (!isset($order['details']['ST']) or empty($order['details']['ST']) or count($order['details']['ST']) == 0) ? $order['details']['BT'] : $order['details']['ST'];
     $billTo = $order['details']['BT'];
     $country = shopFunctions::getCountrybyID($shipTo->virtuemart_country_id, 'country_3_code');
     $cData = self::countryData($method, $country);
     //$total_price_excl_vat = self::convertPrice($order['details']['BT']->order_subtotal, $cData['currency_code']);
     //$total_price_incl_vat = self::convertPrice($order['details']['BT']->order_subtotal + $order['details']['BT']->order_tax, $cData['currency_code'], $order['details']['BT']->order_currency);
     $mode = KlarnaHandler::getKlarnaMode($method);
     $ssl = KlarnaHandler::getKlarnaSSL($mode);
     // Instantiate klarna object.
     $klarna = new Klarna_virtuemart();
     $klarna->config($cData['eid'], $cData['secret'], $cData['country_code'], NULL, $cData['currency_code'], $mode, VMKLARNA_PC_TYPE, KlarnaHandler::getKlarna_pc_type(), $ssl);
     // Fill the good list the we send to Klarna
     foreach ($order['items'] as $item) {
         $item_price = self::convertPrice($item->product_final_price, $cData['currency_code']);
         $item_price = (double) round($item_price, 2);
         $item_tax_percent = (double) round(self::getTaxPercent($item->product_item_price + $item->product_tax / $item->product_quantity, $item->product_item_price), 2);
         $item_discount = self::convertPrice($item->product_subtotal_discount / $item->product_quantity, $cData['currency_code']);
         $item_discount = (double) abs(round($item_discount, 2));
         //vmdebug('addarticle', $item->order_item_sku, $item,  $item_tax_percent);
         $klarna->addArticle($item->product_quantity, utf8_decode($item->order_item_sku), utf8_decode(strip_tags($item->order_item_name)), $item_price, (double) $item_tax_percent, $item_discount, KlarnaFlags::INC_VAT);
     }
     // Add shipping
     $shipment = self::convertPrice($order['details']['BT']->order_shipment + $order['details']['BT']->order_shipment_tax, $cData['currency_code']);
     $shipment_tax_percent = self::getTaxPercent($order['details']['BT']->order_shipment + $order['details']['BT']->order_shipment_tax, $order['details']['BT']->order_shipment);
     $klarna->addArticle(1, "shippingfee", JText::_('VMPAYMENT_KLARNA_SHIPMENT'), (double) round($shipment, 2), (double) $shipment_tax_percent, 0, KlarnaFlags::IS_SHIPMENT + KlarnaFlags::INC_VAT);
     // Add invoice fee
     if ($klarna_pclass == -1) {
         //Only for invoices!
         $payment = self::convertPrice($order['details']['BT']->order_payment + $order['details']['BT']->order_payment_tax, $cData['currency_code']);
         $payment_tax_percent = self::getTaxPercent($order['details']['BT']->order_payment + $order['details']['BT']->order_payment_tax, $order['details']['BT']->order_payment);
         if ($payment > 0) {
             //vmdebug('invoicefee', $payment, $payment_tax);
             $klarna->addArticle(1, "invoicefee", JText::_('VMPAYMENT_KLARNA_INVOICE_FEE_TITLE'), (double) round($payment, 2), (double) round($payment_tax_percent, 2), 0, KlarnaFlags::IS_HANDLING + KlarnaFlags::INC_VAT);
         }
     }
     // Add coupon if there is any
     if ($order['details']['BT']->coupon_discount > 0) {
         $coupon_discount = self::convertPrice(round($order['details']['BT']->coupon_discount, $cData['currency_code']));
         //vmdebug('discount', $coupon_discount);
         $klarna->addArticle(1, 'discount', JText::_('VMPAYMENT_KLARNA_DISCOUNT') . ' ' . $order['details']['BT']->coupon_code, (int) (round($coupon_discount, 2) * -1), 0, 0, KlarnaFlags::INC_VAT);
     }
     try {
         $klarna_shipping = new KlarnaAddr($order['details']['BT']->email, $shipTo->phone_1, '', utf8_decode($shipTo->first_name), utf8_decode($shipTo->last_name), '', utf8_decode($shipTo->address_1), $shipTo->zip, utf8_decode($shipTo->city), utf8_decode($cData['country']), $shipTo->house_no, $shipTo->address_2);
     } catch (Exception $e) {
         VmInfo($e->getMessage());
         return false;
     }
     if ($klarnaData['invoice_type'] == 'company') {
         $klarna_shipping->isCompany = true;
         $klarna_shipping->setCompanyName($klarna_company_name);
         $klarna_comment = $shipTo->first_name . ' ' . $shipTo->last_name;
         //$klarnaData['reference'];
         if ($klarna_shipping->getLastName() == "") {
             $klarna_shipping->setLastName("-");
         }
         if ($klarna_shipping->getFirstName() == "") {
             $klarna_shipping->setFirstName("-");
         }
     } else {
         $klarna_reference = "";
         $klarna_comment = "";
     }
     // Only allow billing and shipping to be the same for Germany and the Netherlands
     if (VMKLARNA_SHIPTO_SAME_AS_BILLTO) {
         $klarna_billing = $klarna_shipping;
     } else {
         $klarna_billing = self::getBilling($cData, $order);
     }
     $klarna_flags = KlarnaFlags::RETURN_OCR;
     // get ocr back from KO.
     $klarna->setComment($klarna_comment);
     $klarna->setReference($klarna_reference, "");
     $pno = self::getPNOfromOrder($billTo, $country);
     try {
         $klarna->setAddress(KlarnaFlags::IS_SHIPPING, $klarna_shipping);
         $klarna->setAddress(KlarnaFlags::IS_BILLING, $klarna_billing);
         if (isset($klarnaData['year_salary'])) {
             $klarna->setIncomeInfo("'yearly_salary'", $klarnaData['year_salary']);
         }
         $result = $klarna->addTransaction($pno, $klarna->getCountry() == KlarnaCountry::DE || $klarna->getCountry() == KlarnaCountry::NL ? $klarnaData['gender'] : NULL, $klarna_flags, $klarna_pclass);
         $result['eid'] = $cData['eid'];
         $result['status_code'] = $result[2];
         $result['status_text'] = JText::_('VMPAYMENT_KLARNA_ORDER_STATUS_TEXT_' . $result[2]);
         return $result;
         //return $result;
     } catch (Exception $e) {
         $result['status_code'] = KlarnaFlags::DENIED;
         $result['status_text'] = htmlentities($e->getMessage()) . "  (#" . $e->getCode() . ")";
         return $result;
         //return $result;
         //self::redirectPaymentMethod('error', htmlentities($e->getMessage()) .  "  (#" . $e->getCode() . ")");
     }
     throw new Exception("Something went wrong!");
 }
 /**
  * Set shipping and billing address.
  *
  * @since  2.0
  **/
 function set_addresses($klarna_billing, $klarna_shipping, $ship_to_billing_address)
 {
     $order = $this->order;
     $klarna = $this->klarna;
     $klarna_billing_address = $klarna_billing['address'];
     $klarna_billing_house_number = $klarna_billing['house_number'];
     $klarna_billing_house_extension = $klarna_billing['house_extension'];
     $klarna_shipping_address = $klarna_shipping['address'];
     $klarna_shipping_house_number = $klarna_shipping['house_number'];
     $klarna_shipping_house_extension = $klarna_shipping['house_extension'];
     // Billing address
     $addr_billing = new KlarnaAddr($email = $order->billing_email, $telno = '', $cellno = $order->billing_phone, $fname = utf8_decode($order->billing_first_name), $lname = utf8_decode($order->billing_last_name), $careof = utf8_decode($order->billing_address_2), $street = utf8_decode($klarna_billing_address), $zip = utf8_decode($order->billing_postcode), $city = utf8_decode($order->billing_city), $country = utf8_decode($order->billing_country), $houseNo = utf8_decode($klarna_billing_house_number), $houseExt = utf8_decode($klarna_billing_house_extension));
     // Add Company if one is set
     if ($order->billing_company) {
         $addr_billing->setCompanyName(utf8_decode($order->billing_company));
     }
     // Shipping address
     if ($order->get_shipping_method() == '' || $ship_to_billing_address == 'yes') {
         // Use billing address if Shipping is disabled in Woocommerce
         $addr_shipping = new KlarnaAddr($email = $order->billing_email, $telno = '', $cellno = $order->billing_phone, $fname = utf8_decode($order->billing_first_name), $lname = utf8_decode($order->billing_last_name), $careof = utf8_decode($order->billing_address_2), $street = utf8_decode($klarna_billing_address), $zip = utf8_decode($order->billing_postcode), $city = utf8_decode($order->billing_city), $country = utf8_decode($order->billing_country), $houseNo = utf8_decode($klarna_billing_house_number), $houseExt = utf8_decode($klarna_billing_house_extension));
         // Add Company if one is set
         if ($order->billing_company) {
             $addr_shipping->setCompanyName(utf8_decode($order->billing_company));
         }
     } else {
         $addr_shipping = new KlarnaAddr($email = $order->billing_email, $telno = '', $cellno = $order->billing_phone, $fname = utf8_decode($order->shipping_first_name), $lname = utf8_decode($order->shipping_last_name), $careof = utf8_decode($order->shipping_address_2), $street = utf8_decode($klarna_shipping_address), $zip = utf8_decode($order->shipping_postcode), $city = utf8_decode($order->shipping_city), $country = utf8_decode($order->shipping_country), $houseNo = utf8_decode($klarna_shipping_house_number), $houseExt = utf8_decode($klarna_shipping_house_extension));
         // Add Company if one is set
         if ($order->shipping_company) {
             $addr_shipping->setCompanyName(utf8_decode($order->shipping_company));
         }
     }
     // Next we tell the Klarna instance to use the address in the next order.
     $klarna->setAddress(KlarnaFlags::IS_BILLING, $addr_billing);
     // Billing / invoice address
     $klarna->setAddress(KlarnaFlags::IS_SHIPPING, $addr_shipping);
     // Shipping / delivery address
 }
 /**
  * Convert a given array to a KlarnaAddr object.
  *
  * @param array  $array   an array of customer data
  * @param string $country the customers country
  *
  * @return KlarnaAddr object
  */
 public function buildKlarnaAddressFromArray($array, $country)
 {
     $address = new KlarnaAddr("", KiTT_String::encode($array["phone_number"]), KiTT_String::encode($array["phone_number"]), KiTT_String::encode($array["first_name"]), KiTT_String::encode($array["last_name"]), "", KiTT_String::encode($array["street"]), KiTT_String::encode($array["zipcode"]), KiTT_String::encode($array["city"]), $country, KiTT_String::encode($array["house_number"]), KiTT_String::encode($array["house_extension"]));
     if ($array["klarna_invoice_type"] == "company") {
         $address->isCompany = true;
         $address->setCompanyName(KiTT_String::encode($array["company_name"]));
         $name = explode(' ', KiTT_String::encode($array["reference"]), 2);
         if (strlen($name[0]) > 0) {
             $address->setFirstName($name[0]);
         } else {
             $address->setFirstName(" ");
         }
         if (count($name) > 1 && strlen($name[1]) > 0) {
             $address->setLastName($name[1]);
         } else {
             $address->setLastName(" ");
         }
     }
     return $address;
 }
Пример #7
0
    /**
     * 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);
    }