Кожен приклад виконує state: отримує стан ПРРО без створення чека та зміни стану.
Повний код наведений нижче. Потрібні токен вашого ПРРО та його фіскальний номер.
Linux / macOS (Bash):
export PROCHECK_URL='https://cprro.procheck.com.ua/'
export PROCHECK_TOKEN='YOUR_TOKEN'
export PROCHECK_FISCALNUM='YOUR_FISCAL_NUMBER'
Windows (PowerShell):
$env:PROCHECK_URL = 'https://cprro.procheck.com.ua/'
$env:PROCHECK_TOKEN = 'YOUR_TOKEN'
$env:PROCHECK_FISCALNUM = 'YOUR_FISCAL_NUMBER'
Замініть YOUR_TOKEN і YOUR_FISCAL_NUMBER своїми значеннями.
Приклади призначені для локального або серверного запуску. Не розміщуйте токен
у браузерному JavaScript або публічному репозиторії.
Python 3, без додаткових пакетів:
import json
import os
import urllib.error
import urllib.request
payload = {"operation": "state", "fiscalnum": os.environ["PROCHECK_FISCALNUM"]}
request = urllib.request.Request(
os.environ["PROCHECK_URL"],
data=json.dumps(payload).encode("utf-8"),
headers={
"Authorization": "Bearer " + os.environ["PROCHECK_TOKEN"],
"Content-Type": "application/json; charset=UTF-8",
},
method="POST",
)
try:
with urllib.request.urlopen(request, timeout=60) as response:
result = json.load(response)
except urllib.error.HTTPError as exc:
raise SystemExit(f"HTTP {exc.code}; Retry-After: {exc.headers.get('Retry-After', '-')}")
except urllib.error.URLError:
raise SystemExit("Помилка з'єднання; відповідь не отримано")
if result.get("error") != 0:
print(json.dumps(result, ensure_ascii=False, indent=2))
raise SystemExit(1)
print(json.dumps(result["state_data"], ensure_ascii=False, indent=2))
Node.js 18 або новіший, файл .mjs, без додаткових пакетів:
const url = process.env.PROCHECK_URL;
const token = process.env.PROCHECK_TOKEN;
const fiscalnum = process.env.PROCHECK_FISCALNUM;
if (!url || !token || !fiscalnum) throw new Error('Не задано змінні PROCHECK_*');
const response = await fetch(url, {
method: 'POST',
headers: {
Authorization: 'Bearer ' + token,
'Content-Type': 'application/json; charset=UTF-8',
},
body: JSON.stringify({ operation: 'state', fiscalnum }),
signal: AbortSignal.timeout(60000),
});
if (!response.ok) {
throw new Error('HTTP ' + response.status + '; Retry-After: ' + response.headers.get('Retry-After'));
}
const result = await response.json();
if (result.error !== 0) {
console.error(JSON.stringify(result, null, 2));
process.exitCode = 1;
} else {
console.log(JSON.stringify(result.state_data, null, 2));
}
PHP 8 з розширенням cURL:
<?php
$url = getenv('PROCHECK_URL');
$token = getenv('PROCHECK_TOKEN');
$fiscalnum = getenv('PROCHECK_FISCALNUM');
if (!$url || !$token || !$fiscalnum) {
throw new RuntimeException('Не задано змінні PROCHECK_*');
}
$curl = curl_init($url);
curl_setopt_array($curl, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 60,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $token,
'Content-Type: application/json; charset=UTF-8',
],
CURLOPT_POSTFIELDS => json_encode([
'operation' => 'state', 'fiscalnum' => $fiscalnum,
], JSON_THROW_ON_ERROR),
]);
$body = curl_exec($curl);
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if ($body === false || $status < 200 || $status >= 300) {
throw new RuntimeException('Помилка HTTP або з’єднання: ' . $status);
}
$result = json_decode($body, true, 512, JSON_THROW_ON_ERROR);
if (($result['error'] ?? null) !== 0) {
echo json_encode($result, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT), PHP_EOL;
exit(1);
}
echo json_encode($result['state_data'], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT), PHP_EOL;
.NET 8, консольний застосунок; код для Program.cs:
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Net.Http.Json;
using System.Text.Json;
static string Required(string name) => Environment.GetEnvironmentVariable(name)
?? throw new InvalidOperationException($"Не задано {name}");
using var client = new HttpClient { Timeout = TimeSpan.FromSeconds(60) };
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", Required("PROCHECK_TOKEN"));
using var response = await client.PostAsJsonAsync(Required("PROCHECK_URL"), new {
operation = "state", fiscalnum = Required("PROCHECK_FISCALNUM")
});
if (!response.IsSuccessStatusCode)
throw new HttpRequestException($"HTTP {(int)response.StatusCode}; Retry-After: {response.Headers.RetryAfter}");
using var document = JsonDocument.Parse(await response.Content.ReadAsStringAsync());
var result = document.RootElement;
if (result.GetProperty("error").GetInt32() != 0) {
Console.Error.WriteLine(result.GetRawText());
Environment.ExitCode = 1;
} else {
Console.WriteLine(result.GetProperty("state_data").GetRawText());
}
Тіла запитів наведені у розділах check
і retcheck.
Ці операції створюють фіскальні документи. Для кожної нової операції задавайте
власний стабільний operation_id. При повторі зберігайте початковий ідентифікатор
та всі дані запиту. Правила обробки відповіді дивіться у
розділі помилок.