/
alexey92
/
test
Обзор
Документация
Войти
/
alexey92
/
test
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
app/Http/Controllers/PayeerController.php
180 строк
8 KB
alexeylavrentev
new test
07 ноя 2024, 14:33
07 ноя 2024, 14:33
8de66b9
Код
Авторство
О чём код?
<?php namespace App\Http\Controllers; use App\Models\Transaction; use App\Models\User; use App\Models\Withdrawal; use Illuminate\Http\Request; use Illuminate\Support\Carbon; use Illuminate\Support\Facades\Auth; use Inertia\Inertia; class PayeerController extends Controller { public function inPayeer(Request $request) { if($request->has('sum') && !empty($request->sum)) { $sum = preg_replace("#[^0-9\.]+#i", '', $request->sum); $user = auth()->user(); $shopId = env('PAYEER_SHOP_ID'); // Предполагается, что у вас есть .env переменная с ID магазина $payKey = env('PAYEER_PAY_KEY'); // Аналогично, переменная с ключом Payeer $dateTime = now()->toDateTimeString(); $dateTimeWithoutSpaces = str_replace(' ', '', $dateTime); $carbonDateTime = Carbon::createFromFormat('Y-m-d H:i:s', $dateTimeWithoutSpaces); $timestamp = $carbonDateTime->timestamp; $orderId = $user->id . '_' . $timestamp; $amount = number_format($sum, 2, '.', ''); $currency = 'RUB'; $description = base64_encode("Пополнение баланса аккаунта " . $user->login); $arHash = [ $shopId, $orderId, $amount, $currency, $description, $payKey, ]; $sign = strtoupper(hash('sha256', implode(':', $arHash))); // Создаем новую транзакцию $transaction = new Transaction([ 'user_id' => $user->id, 'amount' => '+'.$amount, // Сумма 'status' => 'Не завершён', // Или 'successful', если транзакция уже обработана 'type' => 'Пополнение личного кабинета', // Тип транзакции 'order_id' => $orderId, ]); // Сохраняем транзакцию $transaction->save(); // После выполнения всех условий, отображаем страницу с заполненными данными return Inertia::render('Pay', [ 'shopId' => $shopId, 'orderId' => $orderId, 'amount' => $amount, 'currency' => $currency, 'description' => $description, 'sign' => $sign ]); } else { // Handle the case when 'sum' is not set or empty return response()->json(['message' => 'Вы не ввели сумму!'], 400); } // Перенаправляем пользователя на страницу оплаты Payeer //return redirect()->away("https://payeer.com/merchant/?m_shop=$shopId&m_orderid=$orderId&m_amount=$amount&m_curr=$currency&m_desc=$description&m_sign=$sign&m_process=send"); } // Обработчик для получения статуса платежа от Payeer public function payeerPaymentStatus(Request $request) { if ($request->has('m_operation_id') && $request->has('m_sign')) { $m_key = env('PAYEER_PAY_KEY'); // Формирование массива данных для подписи $arHash = [ $request->get('m_operation_id'), $request->get('m_operation_ps'), $request->get('m_operation_date'), $request->get('m_operation_pay_date'), $request->get('m_shop'), $request->get('m_orderid'), $request->get('m_amount'), $request->get('m_curr'), $request->get('m_desc'), $request->get('m_status'), ]; $arHash[] = $m_key; // Создание подписи $sign_hash = strtoupper(hash('sha256', implode(':', $arHash))); // Проверка подписи if ($request->get('m_sign') == $sign_hash && $request->get('m_status') == 'success') { // Обновление информации о транзакции в базе данных // Установка статуса успешного платежа $transaction = Transaction::where('order_id', $request->get('m_orderid'),)->first(); $transaction->status = 'Успешно'; // Или 'successful', если транзакция уже обработана $transaction->save(); // Обновление баланса пользователя // Найдите пользователя по ID и увеличьте его баланс на сумму платежа $user = User::find($transaction->user_id); // Находим пользователя по идентификатору $user->balance += $request->get('m_amount'); $user->save(); ob_end_clean(); echo $request->get('m_orderid') . '|success';exit(); } else { ob_end_clean(); echo $request->get('m_orderid') . '|error';exit(); } } ob_end_clean(); echo $request->get('m_orderid') . '|error';exit(); } public function outPayeer(Request $request) { // Получаем сумму из запроса и очищаем её от ненужных символов $summa = preg_replace("#[^0-9\.]+#i", '', $request->sum); // Получаем текущего пользователя через параметр метода контроллера $user = auth()->user(); // Получаем баланс и кошелек пользователя $balans = $user->balance; $payeer = $user->sbp_number; //Генерируем ID запроса $dateTime = now()->toDateTimeString(); $dateTimeWithoutSpaces = str_replace(' ', '', $dateTime); $carbonDateTime = Carbon::createFromFormat('Y-m-d H:i:s', $dateTimeWithoutSpaces); $timestamp = $carbonDateTime->timestamp; $orderId = $user->id . '_' . $timestamp; // Проверяем достаточность средств на балансе пользователя if ($balans < $summa) { return response()->json(['message' => 'На вашем балансе не достаточно средств!'], 400); } // Проверяем указан ли Payeer кошелек у пользователя if (!$payeer) { return response()->json(['message' => 'Укажите номер кошелька в настройках аккаунта!'], 400); } // Создаем новую транзакцию $transaction = new Transaction([ 'user_id' => $user->id, 'amount' => '-'.$summa, // Сумма 'status' => 'В процессе', // Или 'successful', если транзакция уже обработана 'type' => 'Вывод с личного кабинета', // Тип транзакции 'order_id' => $orderId, ]); // Сохраняем транзакцию $transaction->save(); // Найдите пользователя по ID и уменьшить его баланс на сумму платежа $user->balance -= $summa; $user->save(); $withdrawal = new Withdrawal([ 'user_id' => $user->id, 'amount' => $summa, 'status' => 'pending', 'order_id' => $orderId, ]); $withdrawal->save(); return response()->json(['message' => 'Выплата обрабатывается!'], 200); } }