Opcja dostępna w przypadku włączonej usługi ING Księgowość. Do podstawowego zapytania tworzącego transakcję zgodnie z opisem punktu Utworzenie płatności należy załączyć obiekt invoice. Obiekt ten składa się z obiektu buyer oraz tablicy positions z następujacymi parametrami:

Obiekt buyer:

Parametr Typ Parametr wymagany Opis
type string TAK Przyjmuje wartość PERSON (odbiorca indywidualny) lub COMPANY (firma)
email string(200) TAK Adres e-mail w formacie zgodnym ze standardem RFC 5322 oraz RFC 6531
fullName string(200) TAK Imię i nazwisko nabywcy/nazwa firmy,
dopuszczalne znaki: A-Za-z0-9#_-./ oraz znak spacji(0x20) i znaki z zakresu UNICODE 00C0 - 02C0 (m.in. polskie znaki diakrytyczne), 0400 - 04FF (cyrylica)
street string(200) TAK Ulica
city string(100) TAK Miasto
postalCode string(30) TAK Kod pocztowy
countryCodeAlpha2 string(2) TAK Kod kraju Alpha2
idCountryCodeAlpha2 string(2) NIE Identyfikator kodu kraju Alpha2. Wymagane dla wartości VAT_ID parametru idType
idType string NIE Typ numeru identyfikacyjnego. Wymagane dla wartości COMPANY parametru type. Przyjmuje wartość ID (PESEL) lub VAT_ID (NIP)
idNumber string(30) NIE NIP lub numer PESEL. Wymagane w przypadku wartości COMPANY dla parametru type

Tablica positions:

Parametr Typ Parametr wymagany Opis
name string TAK Nazwa produktu
code string TAK Kod produktu
quantity number TAK Ilość. Minimalna wartość to 0
unit string TAK Jednostka
grossAmount integer TAK Wartość jednostkowa brutto
taxStake string lub number TAK Stawka podatku. Dostępne wartości:
TAX_23
TAX_22
TAX_8
TAX_7
TAX_5
TAX_3
TAX_0
TAX_EXEMPT
TAX_NOT_LIABLE
TAX_REVERSE_CHARGE
TAX_EXCLUDING. Typ string dla TAX_23 lub numeryczny dla 23.
discountAmount integer NIE Wartość upustu

W przypadku zwolnienia z podatku, odpowiednie dane należy przekazać w zapytaniu, korzystając z obiektu basisForVatExemption z parametrami:

Parametr Typ Parametr wymagany Opis
type string NIE Dostępne wartości:
DENTAL_TECHNICAN_SERVICES,
DOCTOR_DENTIST_SERVICES,
PHYSIOTHERAPY_SERVICES,
NURSING_SERVICES,
PSYCHOLOGICAL_SERVICES,
MEDICAL_TRANSPORT_SERVICES,
CARE_SERVICES,
TUTORING,
TEACHING_FOREIGN_LANGUAGES,
ARTISTS,
RENTING_PROPERTY,
INSURANCE_SERVICES,
CREDITS_AND_LOANS_SERVICES,
GUARANTIEES,
SPECIAL_CONDITIONS_FOR_EXEMPTION,
UE_TRANSACTIONS,
SUBJECTIVE_EXEMPTIONS,
OTHER,
OTHER_OBJECTIVE_EXEMPTIONS
text string NIE Opis. Parametr niezbędny w przypadku podania w parametrze type wartości OTHER

Dodatkowo możliwe jest wskazanie, czy faktura ma być automatycznie wysyłana za pomocą parmetru:

Parametr Typ Parametr wymagany Opis
issueInvoice boolean NIE Automatyczna wysyłka faktury

Przykładowa struktura danych

$invoiceData = [
    "buyer"     => [
        "type"              => "PERSON",
        "email"             => "jan.kowalski@example.com",
        "fullName"          => "Jan Kowalski",
        "street"            => "Street",
        "city"              => "City",
        "postalCode"        => "12-345",
        "countryCodeAlpha2" => "PL",
    ],
    "positions" => [
        [
            "name"        => "Produkt",
            "code"        => "produkt-01",
            "quantity"    => 1,
            "unit"        => "Sztuki",
            "taxStake"    => "TAX_23",
            "grossAmount" => 12300,
        ],
    ],
];

Powyższe parametry należy uwzględnić podczas wyliczania sygnatury zgodnie z punktem Autoryzacja.

Przygotowanie obiektu invoice

Za pomocą funkcji PHP

Dane zebrane z powyższych parametrów należy zakodować za pomocą funkcji:

base64_encode(gzencode(json_encode($invoiceData), 5));

gdzie:

$invoiceData - przygotowane wcześniej parametry

$invoiceData = [
    "buyer"     => [
        "type"              => "PERSON",
        "email"             => "jan.kowalski@example.com",
        "fullName"          => "Jan Kowalski",
        "street"            => "Street",
        "city"              => "City",
        "postalCode"        => "12-345",
        "countryCodeAlpha2" => "PL",
    ],
    "positions" => [
        [
            "name"        => "Produkt",
            "code"        => "produkt-01",
            "quantity"    => 1,
            "unit"        => "Sztuki",
            "taxStake"    => "TAX_23",
            "grossAmount" => 12300,
        ],
    ],
];
$invoice = base64_encode(gzencode(json_encode($invoiceData), 5));

$fields = [
    'serviceId' => '63f574ed-d90d-4abe-9cs1-39117584a7b7',
    'merchantId' => '6yt3gjtm9p1odfgx8491',
    'amount' => '12300',
    'currency' => 'PLN',
    'orderId' => '123',
    'orderDescription' => '#Example transaction',
    'customerFirstName' => 'Jan',
    'customerLastName' => 'Kowalski',
    'customerEmail' => 'jan.kowalski@example.com',
    'customerPhone' => '515515515',
    'urlSuccess' => 'https://your-shop.com/success',
    'urlFailure' => 'https://your-shop.com/failure',
    'urlReturn' => 'https://your-shop.com/return',
    'invoice' => $invoice,
];
$serviceKey = 'eAyhFLuHgwl5hu-32GM8QVlCVMWRU0dGjH1c';
$hashMethod = 'sha256';
$signature= createSignature(
    $fields,
    $serviceKey,
    $hashMethod
) . ';' . $hashMethod;

Przykład zakodowanego obiektu invoice

H4sIAAAAAAAAA0WOQQvCNAyF/4rkPGWbenAnh3gTFedBEJGqVcu6dq4pOMf+u8MYeAnJl/fy0sDF17KCpAGsSwkJbJe7bLOGAGQhlCaA0uGcy6jUhO9e67UoZL8zcCHssJISfzAiclVY9zNNpXUo9MLe2BjFw/KkyhrrDVY141SXTxHzAytoO71CZY2D5NiA+QfGna07M6P25YXBLikKwBvFL2Qf9LmiJYp3hiJn7T49nENCj8o6lxacS5ZpGLan9gsKdX5sBQEAAA==

Przykładowa zawartość formularza

<input type="hidden" value="63f574ed-d90d-4abe-9cs1-39117584a7b7" name="serviceId">
<input type="hidden" value="6yt3gjtm9p1odfgx8491" name="merchantId">
<input type="hidden" value="300" name="amount">
<input type="hidden" value="PLN" name="currency">
<input type="hidden" value="123" name="orderId">
<input type="hidden" value="Example transaction" name="orderDescription">
<input type="hidden" value="John" name="customerFirstName">
<input type="hidden" value="Doe" name="customerLastName">
<input type="hidden" value="johndoe@domain.com" name="customerEmail">
<input type="hidden" value="501501501" name="customerPhone">
<input type="hidden" value="https://your-shop.com/success" name="urlSuccess">
<input type="hidden" value="https://your-shop.com/failure" name="urlFailure">
<input type="hidden" value="https://your-shop.com/return" name="urlReturn">
<input type="hidden" value="<?= $invoice ?>" name="invoice">