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">