false, 'error' => 'Некорректная сумма заказа']);
exit;
}
$bonusToUse = max(0, min($bonusToUse, $orderAmount));
$finalAmountRub = max(1, $orderAmount - $bonusToUse);
$finalAmountKop = $finalAmountRub * 100;
$orderId = 'ANKA-' . time() . '-' . rand(1000, 9999);
$payment = [
'TerminalKey' => $terminalKey,
'Amount' => $finalAmountKop,
'OrderId' => $orderId,
'Description' => 'Оплата заказа ANKABAGS',
'SuccessURL' => 'https://ankabags.ru/success',
'FailURL' => 'https://ankabags.ru/fail',
'DATA' => [
'Email' => $email,
'Phone' => $phone,
'BonusUsed' => $bonusToUse,
'OriginalAmount' => $orderAmount
],
'Receipt' => [
'Email' => $email,
'Taxation' => 'usn_income',
'Items' => [[
'Name' => 'Заказ ANKABAGS с учетом бонусов',
'Price' => $finalAmountKop,
'Quantity' => 1,
'Amount' => $finalAmountKop,
'Tax' => 'none',
'PaymentMethod' => 'full_payment',
'PaymentObject' => 'commodity'
]]
]
];
$tokenData = $payment;
unset($tokenData['Receipt'], $tokenData['DATA']);
$tokenData['Password'] = $password;
ksort($tokenData);
$tokenString = '';
foreach ($tokenData as $value) {
$tokenString .= $value;
}
$payment['Token'] = hash('sha256', $tokenString);
$ch = curl_init('https://securepay.tinkoff.ru/v2/Init');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode($payment, JSON_UNESCAPED_UNICODE)
]);
$response = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);
if ($error) {
echo json_encode(['success' => false, 'error' => $error]);
exit;
}
$result = json_decode($response, true);
if (!empty($result['Success']) && !empty($result['PaymentURL'])) {
echo json_encode([
'success' => true,
'paymentUrl' => $result['PaymentURL'],
'orderId' => $orderId,
'finalAmount' => $finalAmountRub,
'bonusUsed' => $bonusToUse
], JSON_UNESCAPED_UNICODE);
} else {
echo json_encode([
'success' => false,
'error' => $result
], JSON_UNESCAPED_UNICODE);
}