115 lines
2.5 KiB
Go
115 lines
2.5 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"io"
|
|
"log"
|
|
"net/http"
|
|
)
|
|
|
|
type KlarnaClient struct {
|
|
Url string
|
|
UserName string
|
|
Password string
|
|
client *http.Client
|
|
}
|
|
|
|
func NewKlarnaClient(url, userName, password string) *KlarnaClient {
|
|
return &KlarnaClient{
|
|
Url: url,
|
|
UserName: userName,
|
|
Password: password,
|
|
client: &http.Client{},
|
|
}
|
|
}
|
|
|
|
const (
|
|
KlarnaPlaygroundUrl = "https://api.playground.klarna.com"
|
|
)
|
|
|
|
func (k *KlarnaClient) GetOrder(orderId string) (*CheckoutOrder, error) {
|
|
req, err := http.NewRequest("GET", k.Url+"/checkout/v3/orders/"+orderId, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
req.Header.Add("Content-Type", "application/json")
|
|
req.SetBasicAuth(k.UserName, k.Password)
|
|
|
|
res, err := k.client.Do(req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer res.Body.Close()
|
|
return k.getOrderResponse(res)
|
|
}
|
|
|
|
func (k *KlarnaClient) getOrderResponse(res *http.Response) (*CheckoutOrder, error) {
|
|
var err error
|
|
var klarnaOrderResponse CheckoutOrder
|
|
if res.StatusCode >= 200 && res.StatusCode <= 299 {
|
|
err = json.NewDecoder(res.Body).Decode(&klarnaOrderResponse)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &klarnaOrderResponse, nil
|
|
}
|
|
body, err := io.ReadAll(res.Body)
|
|
if err == nil {
|
|
log.Println(string(body))
|
|
}
|
|
|
|
return nil, fmt.Errorf(res.Status)
|
|
}
|
|
|
|
func (k *KlarnaClient) CreateOrder(reader io.Reader) (*CheckoutOrder, error) {
|
|
//bytes.NewReader(reply.Payload)
|
|
req, err := http.NewRequest("POST", k.Url+"/checkout/v3/orders", reader)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
req.Header.Add("Content-Type", "application/json")
|
|
req.SetBasicAuth(k.UserName, k.Password)
|
|
|
|
res, err := http.DefaultClient.Do(req)
|
|
if nil != err {
|
|
return nil, err
|
|
}
|
|
defer res.Body.Close()
|
|
return k.getOrderResponse(res)
|
|
}
|
|
|
|
func (k *KlarnaClient) UpdateOrder(orderId string, reader io.Reader) (*CheckoutOrder, error) {
|
|
//bytes.NewReader(reply.Payload)
|
|
req, err := http.NewRequest("POST", fmt.Sprintf("%s/checkout/v3/orders/%s", k.Url, orderId), reader)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
req.Header.Add("Content-Type", "application/json")
|
|
req.SetBasicAuth(k.UserName, k.Password)
|
|
|
|
res, err := http.DefaultClient.Do(req)
|
|
if nil != err {
|
|
return nil, err
|
|
}
|
|
defer res.Body.Close()
|
|
return k.getOrderResponse(res)
|
|
}
|
|
|
|
func (k *KlarnaClient) AbortOrder(orderId string) error {
|
|
req, err := http.NewRequest("POST", fmt.Sprintf("%s/checkout/v3/orders/%s/abort", k.Url, orderId), nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
req.SetBasicAuth(k.UserName, k.Password)
|
|
|
|
_, err = http.DefaultClient.Do(req)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|