Update order

This functionality allows you to update an existing order in Klarna’s system, before it has been activated. If this update increases the total amount of the order, we will run a credit check. An increase in the total amount of the order is not possible for purchases made with credit card and direct banking in Klarna Checkout.

Note: If the order has been activated, you will need to process a refund.

Use case

A consumer has placed an order. Before the order has been shipped, the consumer contacts your customer care center to add another item to the order, or change a mistake in the contact information.

Prerequisites


1. Initialize the Klarna object

Each Klarna library function requires a basic setup of the Klarna object. This configuration specifies how the library communicates with Klarna’s servers.

Follow the code examples below to see how to do this with our different libraries:

use Klarna\XMLRPC\Klarna;
use Klarna\XMLRPC\Country;
use Klarna\XMLRPC\Language;
use Klarna\XMLRPC\Currency;

$k = new Klarna();

$k->config(
    0,              // Merchant ID
    'sharedSecret', // Shared secret
    Country::SE,    // Purchase country
    Language::SV,   // Purchase language
    Currency::SEK,  // Purchase currency
    Klarna::BETA,   // Server
);
Klarna k = new Klarna(
        0,
        "sharedSecret",
        KlarnaCountry.SE,
        KlarnaCurrency.SEK,
        new JsonStorage("/srv/data/pclasses.json"),
        Klarna.BETA
);
config = klarna.Config(
    eid=0,
    secret='sharedSecret',
    country='DE',
    language='DE',
    currency='EUR',
    mode='beta',
    pcstorage='json',
    pcuri='/srv/pclasses.json',
    scheme='https',
    candice=True)

k = klarna.Klarna(config)
k.init()
Configuration configuration = new Configuration(
    Country.Code.SE, Language.Code.SV, Currency.Code.SEK,
    Encoding.Sweden)
{
    Eid = 0,
    Secret = "sharedsecret",
    IsLiveMode = false
};

Api api = new Api(configuration);
Dim kAPI
Set kAPI = GetKlarna(0, "sharedsecret", "SE", "SV", "SEK")
kAPI.SetPort(HTTPS_PORT) ' or HTTP_PORT
kAPI.SetHost(BETA_HOST) ' or LIVE_HOST
kAPI.SetPClassesStorageUri(Server.MapPath("pclasses.xml"))

2. Make the API call

The update call allows you to change different aspects of an order, such as consumer contact information, your internal order ID and cart content.

Note: If you change the cart content, the new cart content provided will replace the existing cart content for this order on Klarna's system.

This is an example of how to update the cart content:

$flags = Flags::INC_VAT | Flags::IS_HANDLING;
$k->addArticle(
    4,              // Quantity
    "HANDLING",     // Article number
    "Handling fee", // Article name/title
    50.99,          // Price
    25,             // 25% VAT
    0,              // Discount
    $flags          // Flags
);
int flags = Goods.IS_HANDLING.toInt() | Goods.INC_VAT.toInt();
k.addArticle(
        1,              // Quantity
        "HANDLING",     // SKU / Article Number
        "Invoice Fee",  // Title
        15d,            // Price
        25d,            // VAT
        0d,             // Discount
        flags           // Flags
);
k.add_article(
    qty=1,
    title="Handling fee",
    price=1.5,
    vat=19,
    discount=0,
    flags=GoodsIs.INC_VAT | GoodsIs.HANDLING)
api.AddArticle(
              1,                                      // Quantity
              string.Empty,                           // Article Number
              "Handling fee",                         // Product Name
              10.0,                                   // Price
              25.0,                                   // VAT
              0.0,                                    // Discount
              GoodsFlags.Handling | GoodsFlags.IncVAT // Flags (Bitwise OR:ed)
);
Dim flags
flags = INC_VAT + IS_HANDLING ' Handling fee, price including VAT.

' Here we add a normal product to our goods list.
' -Quantity
' -Article number
' -Article name/title
' -Price
' -VAT, 25% VAT
' -Discount
' -Flags, price including VAT
Call kAPI.AddArticle(4, "MG200MMS", "Matrox G200 MMS", 299.99, 25, 0, flags)

This is an example of how to update consumer contact information:

use Klarna\XMLRPC\Address;
use Klarna\XMLRPC\Country;
use Klarna\XMLRPC\Flags;

$addr = new Address(
    'always_approved@klarna.com', // Email address
    '',                           // Telephone number, only one phone number is needed
    '0762560000',                 // Cell phone number
    'Testperson-se',              // First name (given name)
    'Approved',                   // Last name (family name)
    '',                           // No care of, C/O
    'Stårgatan 1',                // Street address
    '12345',                      // Zip code
    'Ankeborg',                   // City
    Country::SE,                  // Country
    null,                         // House number (AT/DE/NL only)
    null                          // House extension (NL only)
);

$k->setAddress(Flags::IS_BILLING, $addr);
$k->setAddress(Flags::IS_SHIPPING, $addr);
KlarnaAddr address = new KlarnaAddr(
      "always_accepted@klarna.com",   // Email address
      "",                             // Landline phone
      "4676520000",                   // Mobile number
      "Testperson-se",                // First (given) name
      "Approved",                     // Last (family) name
      "",                             // Care of ( c/o )
      "Stårgatan 1",                  // Street
      "12345",                        // Zip code
      "Ankeborg",                     // City
      KlarnaCountry.SE,               // KlarnaCountry constant
      null,                           // House Number (DE/AT/NL only)
      null                            // House Extension (NL only)
);

k.setAddress(Address.IS_BILLING, address);
k.setAddress(Address.IS_SHIPPING, address);
addr = klarna.Address(
    email='always_accepted@klarna.com',
    telno='',
    cellno='015 2211 3356',
    fname='Testperson-de',
    lname='Approved',
    careof='',
    street='Hellersbergstraße',
    zip='14601',
    city='Neuss',
    country='DE',
    house_number='14',     # For DE, AT and NL we need to specify house_number.
    house_extension=None)  # Only required for NL.

k.shipping = addr
k.billing = addr
Address address = new Address()
{
   Email = "pending_approved@klarna.se",
   PhoneNumber = string.Empty,
   CellPhoneNumber = "0765260000",
   FirstName = "Testperson-se",
   LastName = "Approved",
   Street = "Stårgatan 1",
   CareOf = string.Empty,
   ZipCode = "12345",
   City = "Ankeborg",
   Country = Country.Code.SE,
   HouseNumber = string.Empty,     // Needed for AT, DE and NL
   HouseExtension = string.Empty,  // Needed for NL
   CompanyName = string.Empty
};

api.ShippingAddress = address;
api.BillingAddress = address;
Dim address
Set address = new KlarnaAddr

address.setEmail("always_accepted@klarna.se")
address.setTelno("")
address.setCellno("0765260000")
address.setFirstName("Testperson-se")
address.setLastName("Approved")
address.setCompanyName("")
address.setCareof("")
address.setStreet("Stårgatan 1")
address.setZipCode("12345")
address.setCountry(COUNTRY_SE)
address.setCity("Ankeborg")
address.setHouseNumber("") ' House number (AT/DE/NL only)
address.setHouseExt("")    ' House extension (NL only)

Call kAPI.SetAddress(IS_BILLING, address)
Call kAPI.SetAddress(IS_SHIPPING, address)

and here you can see how to attach your internal order ID to this order:

// Set store specific information so you can e.g. search and associate invoices
// with order numbers.
$k->setEstoreInfo(
    '175012',       // Order ID 1
    '1999110234',   // Order ID 2
    ''              // Optional username, email or identifier
);
//Set store specific information so you can e.g. search and associate invoices with order numbers.
   k.setEstoreInfo(
       "134567", // Order ID to attach to the order.
       ""); // Second Order ID to attach.
# Set store specific information so you can e.g. search and associate invoices
# with order numbers.
k.set_estore_info(
    orderid1="1011001",
    orderid2="0100110")
api.OrderId1 = "order_id";
// Use api.OrderId2 to set order id 2
' Set store specific information so you can e.g. search and associate invoices with order numbers.
' -Order id 1, maybe the estore's order number/id?
' -Order id 2, could be an order number from another system?
' -User, Username, email or identifier for the user?
Call kAPI.SetEstoreInfo("175012", "1999110234", "")

All that is left to do is call Klarna with the requested updates.

$k->update('123456');
k.update("123456");
k.update("123456789")
api.Update("987654321");
' Transmit all the specified data.
' -reservationNumber, Reservation number.
' -clear, Clears set data after the call has been successfully made.
Call kAPI.Update("123456", True)

The XML-RPC will respond with "ok" in a lowercase string, however our libraries will translate this response to a boolean. In case of an error, an exception containing an error code and message will be thrown.


3. Update the order in your system

After receiving the response from Klarna, update the order in your system.