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); }
Made on
Tilda