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
invoiceId string TAK Numer faktury
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, 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.
taxAmount integer TAK Wartość podatku w groszach
discountAmount integer NIE Wartość upustu

Przykładowa struktura danych

$invoiceData = [
    "invoiceId" => "04/12/23",
    "buyer"     => [
        "type"                => "COMPANY",
        "idType"              => "VAT_ID",
        "idNumber"            => "5354235387",
        "email"               => "nazwafirmy@example.com",
        "fullName"            => "Nazwa firmy",
        "street"              => "Ulica",
        "city"                => "Miasto",
        "postalCode"          => "12-345",
        "countryCodeAlpha2"   => "PL",
        "idCountryCodeAlpha2" => "PL"
    ],
    "positions" => [
        [
            "name"        => "Produkt",
            "code"        => "produkt-01",
            "quantity"    => 1,
            "unit"        => "Sztuki",
            "taxStake"    => "TAX_23",
            "grossAmount" => 12300,
            "taxAmount" =>  2300
        ],
    ],
];

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 = [
    "invoiceId" => "04/12/23",
    "buyer"     => [
        "type"                => "COMPANY",
        "idType"              => "VAT_ID",
        "idNumber"            => "5354235387",
        "email"               => "nazwafirmy@example.com",
        "fullName"            => "Nazwa firmy",
        "street"              => "Ulica",
        "city"                => "Miasto",
        "postalCode"          => "12-345",
        "countryCodeAlpha2"   => "PL",
        "idCountryCodeAlpha2" => "PL"
    ],
    "positions" => [
        [
            "name"        => "Produkt",
            "code"        => "produkt-01",
            "quantity"    => 1,
            "unit"        => "Sztuki",
            "taxStake"    => "TAX_23",
            "grossAmount" => 12300,
            "taxAmount" =>  2300
        ],
    ],
];
$invoice = base64_encode(gzencode(json_encode($invoiceData), 5));

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

Przykład zakodowanego obiektu invoice

H4sIAAAAAAAACm2QXU+DMBSG/4rp9eaAQjRcSfBmiUOSodE4s3TQaUM/EE51jPDfPe3inZfneT/6phMR+tuImq8bkpIg3q3CaLeKKFmQgx15T9KJwNhxFPPHTZkVr6iIprqg56zar+89Kaw6ODtJaBJHNKG3N8i5YkIi1Oz8w46iV+MdPzHVSX5dG4WGo5WyYMqVFc5z5U0oDNBzDoifpKgZglrAiOdGsAEM3p0ZgMncNC4bRksaJ85lrIZ+dDiT3SeLUCwf/ML8f2n2VQKE0QNJ3ybc6ueUvWlsC77Tv9FdwDIIkX1ZpsEvChfEauGWbs9gW4EisNMWWOtCVfay97/50ZthyJTbgJmIBoH3/REH5vf5FyK2JcWPAQAA

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="12300" name="amount">
<input type="hidden" value="PLN" name="currency">
<input type="hidden" value="Split payment" name="orderId">
<input type="hidden" value="Split payment" name="orderDescription">
<input type="hidden" value="Jan" name="customerFirstName">
<input type="hidden" value="Kowalski" name="customerLastName">
<input type="hidden" value="jan.kowalski@example.com" name="customerEmail">
<input type="hidden" value="501501501" name="customerPhone">
<input type="hidden" value="wt" name="visibleMethod">
<input type="hidden" value="https://domain.com/success" name="urlSuccess">
<input type="hidden" value="https://domain.com/failure" name="urlFailure">
<input type="hidden" value="https://domain.com/return" name="urlReturn">
<input type="hidden" value="<?= $invoice ?>" name="invoice">