# ING Księgowość
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](#topic-utworzenie-platnosci) 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
```php
$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](#topic-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
```php
$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
```php
H4sIAAAAAAAAA0WOQQvCNAyF/4rkPGWbenAnh3gTFedBEJGqVcu6dq4pOMf+u8MYeAnJl/fy0sDF17KCpAGsSwkJbJe7bLOGAGQhlCaA0uGcy6jUhO9e67UoZL8zcCHssJISfzAiclVY9zNNpXUo9MLe2BjFw/KkyhrrDVY141SXTxHzAytoO71CZY2D5NiA+QfGna07M6P25YXBLikKwBvFL2Qf9LmiJYp3hiJn7T49nENCj8o6lxacS5ZpGLan9gsKdX5sBQEAAA==
```
## Przykładowa zawartość formularza
```html
```