- Notifications
You must be signed in to change notification settings - Fork12
Klarna Checkout gateway for Omnipay
License
MyOnlineStore/omnipay-klarna-checkout
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
This repository is no longer being maintained.
Omnipay is a framework agnostic, multi-gateway paymentprocessing library for PHP 5.6+. This package implements Klarna Checkout support for Omnipay.
To install, simply add it to yourcomposer.json
file:
$ composer require myonlinestore/omnipay-klarna-checkout
First, create the Omnipay gateway:
$gateway =Omnipay\Omnipay::create('\MyOnlineStore\Omnipay\KlarnaCheckout\Gateway');// or$gateway =newMyOnlineStore\Omnipay\KlarnaCheckout\Gateway(/* $httpClient, $httpRequest */);
Then, initialize it with the correct credentials:
$gateway->initialize(['username' =>$username,'secret' =>$secret,'api_region' =>$region,// Optional, may be Gateway::API_VERSION_EUROPE (default) or Gateway::API_VERSION_NORTH_AMERICA'testMode' =>false// Optional, default: true]);// or$gateway->setUsername($username);$gateway->setSecret($secret);$gateway->setApiRegion($region);
For general usage instructions, please see the mainOmnipayrepository.
- Create a Klarna order
- Update transaction (if required)
- Render the Iframe
- Respond to redirects to
checkoutUrl
orconfirmation_url
- Respond tocheckout callbacks
- Respond to the request to
push_url
(indicates order was completed by client)with aackowledgement - Extend authorization (if required)
- Update the merchant address (if required)
- Perform one or morecapture(s),refund(s) orvoid operations
To create a new order, use theauthorize
method:
$data = ['amount' =>100,'tax_amount' =>20,'currency' =>'SEK','locale' =>'SE','purchase_country' =>'SE','notify_url' =>'',// https://developers.klarna.com/api/#checkout-api__ordermerchant_urls__validation'return_url' =>'',// https://developers.klarna.com/api/#checkout-api__ordermerchant_urls__checkout'terms_url' =>'',// https://developers.klarna.com/api/#checkout-api__ordermerchant_urls__terms'validation_url' =>'',// https://developers.klarna.com/api/#checkout-api__ordermerchant_urls__validation'items' => [ ['type' =>'physical','name' =>'Shirt','quantity' =>1,'tax_rate' =>25,'price' =>100,'unit_price' =>100,'total_tax_amount' =>20, ], ],];$response =$gateway->authorize($data)->send()->getData();
This will return the order details as well as the checkout HTML snippet to render on your site.
Klarna Checkout requires an iframe to be rendered when authorizing payments:
$response =$gateway->fetchTransaction(['transactionReference' =>'a5bec272-d68d-4df9-9fdd-8e35e51f92ab']) ->send();echo$response->getData()['checkout']['html_snippet'];
After submitting the form within the iframe,Klarna will redirect the client to the providedconfirmation_url
(success)orcheckout_url
(failure)`.
While an order has not been authorized (completed) by the client, it may be updated:
$response =$gateway->updateTransaction(['transactionReference' =>'a5bec272-d68d-4df9-9fdd-8e35e51f92ab','amount' =>200,'tax_amount' =>40,'currency' =>'SEK','locale' =>'SE','purchase_country' =>'SE','items' => [/*...*/],])->send();
The response will contain the updated order data.
Klarna order authorization is valid until a specific date, and may be extended (up to a maximum of 180 days).The updated expiration date may then be retrieved with afetch request
if ($gateway->extendAuthorization(['transactionReference' =>'a5bec272-d68d-4df9-9fdd-8e35e51f92ab'])->send()->isSuccessful()) {$expiration =new \DateTimeImmutable($gateway->fetchTransaction(['transactionReference' =>'a5bec272-d68d-4df9-9fdd-8e35e51f92ab']) ->send() ->getData()['management']['expires_at'] );}
$success =$gateway->capture(['transactionReference' =>'a5bec272-d68d-4df9-9fdd-8e35e51f92ab','amount' =>'995',])->send()->isSuccessful();
A Klarna order is initially available through the checkout API. After it has been authorized, it will be availablethrough the Order management API (and will, after some time, no longer be available in the checkout API).This fetch request will first check whether the order exitst in the checkout API.If that is not the case, or the status indicates the order is finished,it will also fetch the order from the order management API
$response =$gateway->fetchTransaction(['transactionReference' =>'a5bec272-d68d-4df9-9fdd-8e35e51f92ab']) ->send();$success =$response->isSuccessful();$checkoutData =$response->getData()['checkout'] ?? [];$managementData =$response->getData()['management'] ?? [];
API documentation |Checkout |Order management
Acknowledge a completed order
$success =$gateway->acknowledge(['transactionReference' =>'a5bec272-d68d-4df9-9fdd-8e35e51f92ab']) ->send() ->isSuccessful();
$success =$gateway->refund(['transactionReference' =>'a5bec272-d68d-4df9-9fdd-8e35e51f92ab','amount' =>'995',])->send()->isSuccessful();
You may release the remaining authorized amount. Specifying a specific amount is not possible.
$success =$gateway->void(['transactionReference' =>'a5bec272-d68d-4df9-9fdd-8e35e51f92ab']) ->send() ->isSuccessful();
This may be used when updating customer address detailsafter the order has been authorized.Success op this operation is subject to a risk assessment by Klarna. Both addresses are required parameters.
$success =$gateway->refund(['transactionReference' =>'a5bec272-d68d-4df9-9fdd-8e35e51f92ab','shipping_address' => ['given_name'=>'Klara','family_name'=>'Joyce','title'=>'Mrs','street_address'=>'Apartment 10','street_address2'=>'1 Safeway','postal_code'=>'12345','city'=>'Knoxville','region'=>'TN','country'=>'us','email'=>'klara.joyce@klarna.com','phone'=>'1-555-555-5555' ],'billing_address' => ['given_name'=>'Klara','family_name'=>'Joyce','title'=>'Mrs','street_address'=>'Apartment 10','street_address2'=>'1 Safeway','postal_code'=>'12345','city'=>'Knoxville','region'=>'TN','country'=>'us','email'=>'klara.joyce@klarna.com','phone'=>'1-555-555-5555' ],])->send()->isSuccessful();
If an order has been authorized by the client, its merchant references may be updated:
$response =$gateway->updateMerchantReferences(['merchant_reference1' =>'foo','merchant_reference2' =>'bar',])->send();
Klarna expresses amounts in minor units as describedhere.
About
Klarna Checkout gateway for Omnipay
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors9
Uh oh!
There was an error while loading.Please reload this page.