PreAuth and Completion PHP SDK
PREAUTH — двофазний платіж: спочатку кошти блокуються на картці покупця, а потім мерчант підтверджує списання через операцію COMPLETION.
Створення PreAuth
Для створення PREAUTH-замовлення використовуються ті самі класи, що й для звичайного PURCHASE; потрібно лише встановити hppPayType у значення PREAUTH.
Поле preAuthExpDate — термін дії блокування
Сценарій
Поведінка
Поле не передано
SDK автоматично встановлює значення now + 2 години.
Поле передано явно
Значення має бути в діапазоні від now + 2 години до now + 28 діб.
Формат: YYYY-MM-DD HH:MM:SS.ss±HH:MM, наприклад 2026-08-10 15:30:00.00+03:00.
Приклад створення PREAUTH-замовлення
use AlliancePay\Sdk\Payment\Order\CreateOrder;
use AlliancePay\Sdk\Payment\Dto\Order\OrderRequestDTO;
use AlliancePay\Sdk\Services\RequestIdentification\GenerateRequestIdentification;
$orderData = [
'merchantRequestId' => GenerateRequestIdentification::generateRequestId(),
'merchantId' => $authDto->getMerchantId(),
'hppPayType' => 'PREAUTH',
'directType' => 'REDIRECT',
'coinAmount' => 10050,
'paymentMethods' => ['CARD'],
'successUrl' => '<redacted URL>',
'failUrl' => '<redacted URL>',
'statusPageType' => 'STATUS_TIMER_PAGE',
'customerData' => ['senderCustomerId' => 'customer_id_1'],
// Опціонально: від +2 год до +28 діб від поточного часу.
// 'preAuthExpDate' => '2026-08-10 15:30:00.00+03:00',
];
$orderRequest = OrderRequestDTO::fromArray($orderData);
$createOrder = new CreateOrder();
try {
$response = $createOrder->createOrder($orderRequest, $authDto);
$responseArray = $response->toArray();
// Збережіть ці значення для COMPLETION.
$hppOrderId = $responseArray['hppOrderId'];
$redirectUrl = $responseArray['redirectUrl'];
} catch (\AlliancePay\Sdk\Exceptions\CreateOrderException $e) {
echo "Помилка створення PREAUTH: " . $e->getMessage();
} catch (\AlliancePay\Sdk\Exceptions\ValidateDataException $e) {
echo "Помилка валідації: " . $e->getMessage();
}Після успішного створення PREAUTH-замовлення збережіть у своїй системі hppOrderId, operationId та coinAmount з відповіді. Ці значення потрібні для COMPLETION.
Completion (Завершення попередньої авторизації)
COMPLETION підтверджує та списує кошти, заблоковані операцією PREAUTH. Для цього використовуються клас CreateOrderCompletion і DTO OrderRequestCompletionDTO.
Ключові правила
originalOperationId— це полеoperationIdз відповіді на PREAUTH, а неecomOperationId.coinAmount— сума списання. Допускається відхилення ±20% від оригінальної суми PREAUTH.Третій аргумент методу
createCompletion()— оригінальна сума PREAUTH у копійках. SDK використовує її для внутрішньої перевірки діапазону ±20%.
Поля OrderRequestCompletionDTO
Поле
Тип
Опис
merchantRequestId
string
Унікальний ID запиту, генерується для кожного COMPLETION.
merchantId
string
Ідентифікатор мерчанта.
originalOperationId
string
operationId з відповіді на PREAUTH.
coinAmount
int
Сума списання в копійках (±20% від суми PREAUTH).
date
DateTimeImmutable
Дата й час виконання запиту.
notificationUrl
string
URL для webhook-сповіщення про результат.
Приклад виконання COMPLETION
Останнє оновлення