მეთოდის საშუალებით, ბიზნესი ონლაინ გადახდის სერვერზე აგზავნის გადახდის დეტალებს, ტექნიკურ მახასიათებლებსა და გადასახდელ თანხას. ოპერაციის წარმატებით დასრულების შემთხვევაში, პროცესის გასაგრძელებლად, მომხმარებელი უნდა გადაამისამართოთ ონლაინ გადახდის გვერდზე, `_links` პარამეტრში დაბრუნებულ `redirect` მისამართზე.

### Header-ის პარამეტრები

- `Content-Type` — application/json, required

- `Authorization` — Basic <base64>, required

  გადაეცემა `Bearer <jwt_token>`  მნიშვნელობა, სადაც `jwt_token` არის აუტენტიფიკაციის მეთოდის Response-ის access_token პარამეტრში დაბრუნებული მნიშვნელობა.

- `Idempotency-Key` — UUID v4

  Idempotency-Key პარამეტრი უნდა იყოს უნიკალური ყველა ახალი API რექვესთისთვის.
  იმავე API-ზე Idempotency-Key-ის განმეორებით გამოყენებისას სერვერი დააბრუნებს იმავე სტატუს კოდსა და body-ს, რაც თავდაპირველი მოთხოვნისას.
  ეს ფუნქცია განსაკუთრებით სასარგებლოა თანმიმდევრული შედეგის უზრუნველსაყოფად, როდესაც საქმე გვაქვს ქსელური პრობლემებითა ან ხელახალი ცდებით გამოწვეულ დუბლირებულ მოთხოვნებთან.

- `Accept-Language` — string

  განსაზღვრავს ონლაინ გადახდების გვერდზე გადამისამართების შემდეგ, რა ენის ინტერფეისი დახვდება მომხმარებელს. იღებს ორ მნიშვნელობას:
  - `ka` - ქართული (Default)
  - `en` - ინგლისური.

- `Theme` — string

  განსაზღვრავს ონლაინ გადახდების გვერდზე გადამისამართების შემდეგ, რა თემის ინტერფეისი დახვდება მომხმარებელს. იღებს ორ მნიშვნელობას:
  - `light` - ღია (Default)
  - `dark` - მუქი.

### Body-ს პარამეტრები

- `application_type` — "web" | "mobile"

  აპლიკაციის ტიპი, საიდანაც ხდება შეკვეთის შექმნა. გამოიყენება Apple Pay-ით და Google Pay-ით გადახდისას, როდესაც Apple Pay-ის ან Google Pay-ის ღილაკი განთავსებულია უშუალოდ მერჩანტის ვებ გვერდზე ან მობილურ აპლიკაციაში. აპლიკაციის ტიპის მნიშვნელობებია:

  - `web` - ვებ გვერდიდან შექმნილი შეკვეთის აპლიკაციის ტიპი.
  - `mobile` - მობილური აპლიკაციიდან შექმნილი შეკვეთის აპლიკაციის ტიპი.

- `buyer` — object

  ინფორმაცია ბიზნესში მყიდველის შესახებ.

  - `buyer.full_name` — string

    მყიდველის სახელი და გვარი.

  - `buyer.masked_email` — string

    მყიდველის დაშიფრული ელ. ფოსტის მისამართი.

  - `buyer.masked_phone` — string

    მყიდველის დაშიფრული ტელეფონის ნომერი.

- `callback_url` — string, required

  ბიზნესის ვებმისამართი (აუცილებლად https ტიპის), რომელსაც ავტომატურად გამოიძახებს ბანკი, ოპერაციის დასრულების შემდეგ, ბიზნესისთვის გადახდის მონაცემების მიწოდების მიზნით (Callback-ის დროს).

- `external_order_id` — string

  გადახდის იდენტიფიკატორი ბიზნესის სისტემიდან. გადმოცემული მნიშვნელობის პირველი 25 სიმბოლო აისახება გადახდის დანიშნულებაში, როგორც გადამხდელის ამონაწერში, ისე კომპანიის ანგარიშზე თანხის ჩარიცხვის დანიშნულებაში.

- `capture` — "automatic" | "manual"

  ტრანზაქციის ტიპი, რომელიც იღებს ორ მნიშვნელობას:

  - `automatic` - სტანდარტული ორდერის შექმნა, გადახდა მოხდება პრეავტორიზაციის გარეშე, ანუ მომხარებლის ანგარიშიდან თანხა
    მომენტალურად ჩამოიჭრება
  - `manual` - გადახდის შესრულების შემდეგ მომხარებლის ანგარიშზე თანხა დაიბლოკება და მომხმარებლისთვის არ იქნება ხელმისაწვდომი.
    გადახდის დასასრულებლად უნდა გამოიყენოთ პრეავტორიზაციის დასრულების მეთოდი და დაადასტუროთ/უარყოთ ოპერაცია. ამ ოპერაციის
    30 დღეში შეუსრულებლობის შემთხვევაში, თანხას ავტომატურად მოეხსნება ბლოკი და ისევ იქნება ხელმისაწვდომი მომხარებლისთვის. ამ
    ფუნქციონალის გამოყენება შესაძლებელია მხოლოდ Apple Pay-ით, Google Pay-ით ან საბარათე გადახდაზე.

- `purchase_units` — object, required

  ინფორმაცია შეკვეთის შესახებ.

  - `purchase_units.basket` — array, required

    ბიზნესში, მოცემული გადახდის ფარგლებში, შესყიდული პროდუქტების ან სერვისების კალათა.

    - `purchase_units.basket[].product_id` — string, required
      პროდუქტის/სერვისის იდენტიფიკატორი ბიზნესის სისტემაში.

    - `purchase_units.basket[].description` — string
      პროდუქტის/სერვისის დასახელება (აღწერა).

    - `purchase_units.basket[].quantity` — number, required
      თითოეული პროდუქტის/სერვისის რაოდენობა (მოცულობა). მინიმალური მნიშვნელობა არის 1.

    - `purchase_units.basket[].unit_price` — number, required
      პროდუქტის/სერვისის ერთეულის ფასი.

    - `purchase_units.basket[].unit_discount_price` — number
      აქციით გადახდის შემთხვევაში, შესყიდული პროდუქტის/სერვისის ერთეულის დაკლებული თანხის მოცულობა.

    - `purchase_units.basket[].vat` — number
      პროდუქტის/სერვისის დამატებული ღირებულების გადასახადი (დღგ).

    - `purchase_units.basket[].vat_percent` — number
      პროდუქტის/სერვისის დამატებული ღირებულების გადასახადის (დღგ) პროცენტი.

    - `purchase_units.basket[].total_price` — number
      მთლიანი თანხა.

    - `purchase_units.basket[].image` — string
      პროდუქტის/სერვისის სურათის ვებმისამართი (ლინკი).

    - `purchase_units.basket[].package_code` — string
      პროდუქტის კოდი.

    - `purchase_units.basket[].tin` — string
      საგადასახადო საიდენტიფიკაციო ნომერი (TIN).

    - `purchase_units.basket[].pinfl` — string
      გადამხდელის კოდი (PINFL).

    - `purchase_units.basket[].product_discount_id` — string
      პროდუქტის ფასდაკლების იდენტიფიკატორი. თუ მოწოდებული მნიშვნელობით ბანკში დარეგისტრირებულია ფასდაკლების აქცია, ფასდაკლების პირობების გათვალისწინებით, შეკვეთაზე გავრცელდება შესაბამისი აქცია.

  - `purchase_units.delivery` — object

    ინფორმაცია მიტანის სერვისის შესახებ.

    - `purchase_units.delivery.amount` — number
      მიტანის ღირებულება.

  - `purchase_units.total_amount` — number, required
    სრული გადასახდელი თანხის მოცულობა.

  - `purchase_units.total_discount_amount` — number
    აქციით გადახდის შემთხვევაში, დაკლებული თანხის მოცულობა.

  - `purchase_units.currency` — string

    ვალუტა, რომელშიც ხორციელდება გადახდა:
    - `GEL` - ქართული ლარი (ნაგულისმევი)
    - `USD` - ამერიკული დოლარი
    - `EUR` - ევრო
    - `GBP` - ბრიტანული გირვანქა.

- `redirect_urls` — object

  ბიზნესის ვებმისამართები, რომლებზეც შესაძლოა, გადამისამართდეს მომხმარებელი ონლაინ გადახდის სისტემიდან ოპერაციის დასრულების შემდეგ.

  - `redirect_urls.success` — string
    ვებმისამართი ოპერაციის წარმატებით დასრულების შემთხვევაში. მნიშვნელობის არ გადმოცემის შემთხვევაში მომხმარებელი დარჩება ონლაინ გადახდების გვერდზე და გამოუჩნდება შესაბამისი ქვითარი.

  - `redirect_urls.fail` — string
    ვებმისამართი ოპერაციის წარუმატებლად დასრულების შემთხვევაში. მნიშვნელობის არ გადმოცემის შემთხვევაში მომხმარებელი დარჩება ონლაინ გადახდების გვერდზე და გამოუჩნდება შესაბამისი ქვითარი.

- `ttl` — number

  შეკვეთის სიცოცხლის ხანგრძლივობა წუთებში (შეკვეთის შექმნიდან რამდენი წუთის განმავლობაში შეეძლება მომხმარებელს გადახდის შესრულება). მოცემული პარამეტრის ლოგიკა სხვა და სხვა ინდუსტრიის ბიზნესისთვის განსხვავებული შეიძლება იყოს. პარამეტრის მინიმალური შესაძლო მნიშვნელობაა `2`, მაქსიმალური კი - `1440` (24 საათი). პარამეტრის არ გადმოცემის შემთხვევაში სისტემა იგულისხმებს `15` წუთს.

- `payment_method` — array

  გადახდის მეთოდები, რომლების გამოყენებასაც შეძლებს მომხმარებელი ამ შეკვეთაზე გადახდის განსახორციელებლად. აუცილებელია, ბიზნესს გააქტიურებული ჰქონდეს ყველა გადმოცემული მეთოდი. პარამეტრის არ გადმოცემის შემთხვევაში მომხმარებელს ონლაინ გადახდის გვერდზე გადამისამართების შემდეგ შეეძლება ყველა იმ გადახდის მეთოდით სარგებლობა, რომელიც გააქტიურებული აქვს ბიზნესს. შესაძლო მნიშვნელობები:

  - `card` - საბანკო ბარათით გადახდა
  - `google_pay` - Google Pay-ით და საბანკო ბარათით გადახდა (ამ მნიშვნელობის გადმოცემის შემთხვევაში, მომხმარებელს შეეძლება როგორც Google Pay-ით, ასევე საბანკო ბარათით გადახდა. აუცილებელია, რომ ბიზნესს გააქტიურებული ჰქონდეს ორივე გადახდის მეთოდი)
  - `apple_pay` - Apple Pay-ით და საბანკო ბარათით გადახდა (ამ მნიშვნელობის გადმოცემის შემთხვევაში, მომხმარებელს შეეძლება როგორც Apple Pay-ით, ასევე საბანკო ბარათით გადახდა. აუცილებელია, რომ ბიზნესს გააქტიურებული ჰქონდეს ორივე გადახდის მეთოდი)
  - `bog_p2p` - საქართველოს ბანკის, ინტერნეტ ან მობაილ ბანკის მომხმარებლით გადარიცხვა
  - `bog_loyalty` - საქართველოს ბანკის ქულებით MR/Plus გადახდა
  - `bnpl` - ნაწილ-ნაწილით გადახდა
  - `bog_loan` - სტანდარტული საბანკო განვადება
  - `gift_card` - სასაჩუქრე ბარათით გადახდა

- `config` — object

  კონკრეტული გადახდის კონფიგურაცია.

  - `config.loan` — object

    გადახდის კონფიგურაცია. პარამეტრის გადმოცემა აუცილებელია თუ გსურთ, რომ შეკვეთის გადახდა მხოლოდ განვადებით ("payment_method":["bog_loan"] ) ან მხოლოდ ნაწილ-ნაწილით ("payment_method":["bnpl"] ) მოხდეს.

    - `config.loan.type` — string
      განვადების/ნაწილ-ნაწილის ფასდაკლების კოდი (კალკულატორის მიერ დაბრუნებული discount_code პარამეტრის მნიშვნელობა).

    - `config.loan.month` — number
      განვადების/ნაწილ-ნაწილის ხანგრძლივობა თვეებში (კალკულატორის მიერ დაბრუნებული month პარამეტრის მნიშვნელობა).

  - `config.campaign` — object

    აქციით გადახდის კონფიგურაცია. იმისთვის, რომ მომხმარებელმა შეძლოს ბიზნესზე დამატებული აქციით სარგებლობა, საჭიროა, შეკვეთის შექმნისას გადახდის მეთოდში საბარათე გადახდის მითითება ("payment_method":["card"] ).

    - `config.campaign.card` — string

      ბარათი, რომელზეც ვრცელდება აქცია:

      - `visa` - ვიზა
      - `mc` - მასტერქარდი
      - `solo` - სოლო ბარათი

    - `config.campaign.type` — string

      აქციის ტიპი:

      - `restrict` - ბარათის ტიპის შეზღუდვა
      - `client_discount` - ფასდაკლება კონკრეტულ ბარათის ტიპზე

  - `config.google_pay` — object

    გადახდის კონფიგურაცია. პარამეტრის გადმოცემა აუცილებელია თუ გსურთ, რომ შეკვეთის გადახდა ბიზნესის ვებგვერდზე განთავსებული Google Pay-ს ღილაკით მოხდეს.

    - `config.google_pay.google_pay_token` — string
      სრულყოფილი string მნიშვნელობა, რომელიც წარმოადგენს Google Pay-ის დაკრიპტულ გადახდის დეტალებს. მნიშვნელობა უნდა გადმოეცეს სრულყოფილად, როგორი სახითაც მიიღეთ Google Pay SDK-სგან, ცვლილებების გარეშე.

    - `config.google_pay.external` — boolean

      - `true` - გადახდა ინიცირდება ბიზნესის ვებგვერდზე განთავსებული Google Pay-ს ღილაკით
      - `false` - გადახდა ხდება ბანკის გადახდების გვერდიდან (ნაგულისმევი)

  - `config.apple_pay` — object

    გადახდის კონფიგურაცია. პარამეტრის გადმოცემა აუცილებელია თუ გსურთ, რომ შეკვეთის გადახდა ბიზნესის ვებგვერდზე განთავსებული Apple Pay-ს ღილაკით მოხდეს.

    - `config.apple_pay.external` — boolean

      - `true` - გადახდა ინიცირდება ბიზნესის ვებგვერდზე განთავსებული Apple Pay-ს ღილაკით
      - `false` - გადახდა ხდება ბანკის გადახდების გვერდიდან (ნაგულისმევი)

  - `config.account` — object

    გადახდის კონფიგურაცია. პარამეტრის გადმოცემა აუცილებელია თუ თქვენთვის კონფიგურირებულია რამდენიმე ელ.კომერციის POS ტერმინალი ერთსადაიმავე ვალუტაში: შესრულებული ოპერაციები გსურთ დააჯგუფოთ ბიზნესის საჭიროებებიდან გამომდინარე ან ანგარიშსწორება შესრულდეს ბიზნესის სხვადასხვა ანგარიშზე.

    - `config.account.tag` — string

      ელ.კომერციის POS ტერმინალის იდენტიფიკატორი. თუ მოწოდებული tag-ის მნიშვნელობა არ ემთხვევა POS-ის კონფიგურაციას ან tag მოწოდებული არ არის, ოპერაცია შესრულდება default POS ტერმინალზე და შესაბამის ანგარიშსწორების ანგარიშზე. შენიშვნა: ტეგის მნიშვნელობის შეთანხმება აუცილებელია დამატებითი POS-ის კონფიგურირებისას.

  - `config.split` — object

    თანხის გაყოფის კონფიგურაციის ობიექტი. ამ პარამეტრის გადმოცემა აუცილებელია, თუ გსურთ შეკვეთის თანხა ავტომატურად გაიყოს მითითებულ თანხებად ან პროცენტებად და გადაირიცხოს შესაბამის IBAN ანგარიშებზე. დამატებით იხ. [თანხის გაყოფის დეტალები](../split-payment)

    - `config.split.split_payments` — array

      თანხის გაყოფის ტრანზაქციების მასივი. თითოეული ობიექტი შეიცავს ერთი გადარიცხვის დეტალებს.

    - `config.split.split_payments[].iban` — string, required

       მიმღების ანგარიშის ნომერი IBAN ფორმატში, რომელზეც უნდა გადაირიცხოს გაყოფილი თანხა.

    - `config.split.split_payments[].amount` — number, required

      კონკრეტული თანხა, რომელიც უნდა გადაირიცხოს. თანხის ჯამი არ უნდა აღემატებოდეს შეკვეთის ძირითად თანხას.

    - `config.split.split_payments[].percent` — number, required

      პროცენტი შეკვეთის ძირითადი თანხიდან, რომელიც უნდა გადაირიცხოს. პროცენტების ჯამი არ უნდა აღემატებოდეს 100-ს. დასაშვებია მხოლოდ დადებითი რიცხვითი მნიშვნელობები 1-დან 100-მდე.

    - `config.split.split_payments[].description` — string

      გადარიცხვის დანიშნულება/აღწერა.

  :::note
  amount და percent ველების ერთდროულად მითითება ერთ ობიექტში დაუშვებელია.

  split_payments მასივის თითოეული ობიექტი სავალდებულოდ უნდა შეიცავდეს iban ველს და amount ან percent ველს.
  :::

**Standard Order**

```bash
curl -X POST 'https://api.bog.ge/payments/v1/ecommerce/orders' \
-H 'Accept-Language: ka' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
--data-raw '{
    "callback_url": "https://example.com/callback",
    "external_order_id": "id123",
    "purchase_units": {
        "currency": "GEL",
        "total_amount": 1,
        "basket": [
            {
                "quantity": 1,
                "unit_price": 1,
                "product_id": "product123"
            }
	    ]
    },
    "redirect_urls": {
        "fail": "https://example.com/fail",
        "success": "https://example.com/success"
    }
}'
```

**With Account Tag**

```bash
curl -X POST 'https://api.bog.ge/payments/v1/ecommerce/orders' \
-H 'Accept-Language: ka' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
--data-raw '{
    "callback_url": "https://example.com/callback",
    "external_order_id": "id123",
    "purchase_units": {
        "currency": "GEL",
        "total_amount": 1,
        "basket": [
            {
                "quantity": 1,
                "unit_price": 1,
                "product_id": "product123"
            }
        ]
    },
    "redirect_urls": {
        "fail": "https://example.com/fail",
        "success": "https://example.com/success"
    },
    "config": {
        "account": {
            "tag": "category1"
        }
    }
}'
```

**With Split Payment**

```bash
curl -X POST 'https://api.bog.ge/payments/v1/ecommerce/orders' \
-H 'Accept-Language: ka' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
--data-raw '{
    "callback_url": "https://example.com/callback",
    "external_order_id": "id123",
    "purchase_units": {
        "currency": "GEL",
        "total_amount": 1,
        "basket": [
            {
                "quantity": 1,
                "unit_price": 1,
                "product_id": "product123"
            }
        ]
    },
    "redirect_urls": {
        "fail": "https://example.com/fail",
        "success": "https://example.com/success"
    },
    "config": {
        "split": {
            "split_payments": [
                {
                    "amount": 0.30,
                    "iban": "GE00BG0000000000000123",
                    "description": "Split1"
                },
                {
                    "amount": 0.20,
                    "iban": "GE00BG0000000000000321",
                    "description": "Split2"
                }
            ]
        }
    }
}'
```

**With Installment**

```bash
curl -X POST 'https://api.bog.ge/payments/v1/ecommerce/orders' \
-H 'Accept-Language: ka' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
--data-raw '{
    "callback_url": "https://example.com/callback",
    "external_order_id": "id123",
    "purchase_units": {
        "currency": "GEL",
        "total_amount": 45,
        "basket": [
            {
                "quantity": 1,
                "unit_price": 45,
                "product_id": "product123"
            }
        ]
    },
    "redirect_urls": {
        "fail": "https://example.com/fail",
        "success": "https://example.com/success"
    },
    "payment_method": [
        "bog_loan" //"bnpl"
    ],
    "config":{
        "loan":{
            "type":"standard", //"zero" for bnpl
            "month":3
        }
    }
}'
```

### Response

- `id` — string
  ონლაინ გადახდის იდენტიფიკატორი.

- `_links` — object

  ვებრესურსის მისამართები, რომლებიც გადახდის პროცესის შემდგომ ეტაპებზე გამოიყენება. ამჟამად ბრუნდება ორი რესურსი:

  - `_links.details.href` — string

    გადახდის დეტალების მისამართი, რომლის გამოძახებითაც შეგიძლიათ, გაიგოთ ინფორმაცია ონლაინ გადახდის შესახებ.

  - `_links.redirect.href` — string

    ვებგვერდის მისამართი, რომელზეც უნდა გადავიდეს მომხმარებელი პლასტიკური ბარათის ან ონლაინბანკინგის მონაცემების შესაყვანად და გადახდის პროცესის დასასრულებლად.

**RESPONSE**

```json
{
    "id": "{order_id}",
    "_links": {
        "details": {
            "href": "https://api.bog.ge/payments/v1/receipt/{order_id}"
        },
        "redirect": {
            "href": "https://payment.bog.ge/?order_id={order_id}"
        }
    }
}
```
