Мне нужна помощь.
Я выполнил приведенный выше код, это функция, которая вызывает внешний внутренний сервер, и нам нужно управлять некоторой информацией и возвращать ее обратно. проблема в том, что они отправляют НЕСКОЛЬКО запросов одновременно (в секунду), и наш код обрабатывается одновременно, и это неправильно, потому что это управляет балансом клиентов. поэтому, если они отправляют, например, 3 запроса одновременно, это уменьшает средства клиента по первому запросу, но принимает второй и последний запрос без остатка, но на балансе. поэтому мне нужно получать все запросы, ставить их в очередь, обрабатывать и возвращать на сервер.
как мне это сделать? я использую Laravel.
public function bmake(Request $request)
{
try {
$data = json_decode(json_encode($request->all()), true);
$decoded = $this->decodeJwt($data['payload']);
$request = $decoded['payload']->payload;
if ($request->currency != "BRL") {
return response()->json(["code" => 2002, "message" => "Invalid currency"], 400);
}
\DB::table('debug')->insert(['text' => 'bmake > ' . json_encode($request)]);
$Corte = explode('-', $request->player_id);
$UserID = $Corte[2];
$User = null;
$User = User::Where('id', $UserID)->lockForUpdate()->first();
if (!$User)
{
return response()->json(["code" => 1007, "message" => "Session is expired"], 400);
}
if ($User->banned == 1){
return response()->json(["code" => 1005, "message" => "Player is blocked"], 400);
}
if ($User->wallet->balance < $rsamount){
return response()->json(["code" => 2001, "message" => "Not enough money"], 400);
}else{
$User->wallet->balance -= $rsamount;
$User->wallet->save();
}
try {
$centsamount = $request->amount;
$rsamount = Helper::convertToRealAmount($centsamount);
DB::transaction(function () use ($User, $rsamount) {
$wallet = DB::table('wallets')->where('user_id', $User->id)->lockForUpdate()->first();
if (floatval($wallet->balance) < floatval($rsamount)) {
throw new Exception("Saldo insuficiente.");
} else {
$wallet->balance -= $rsamount;
DB::table('wallets')->where('user_id', $User->id)->update(['balance' => $wallet->balance]);
}
});
} catch (Exception $e) {
return response()->json(["code" => 2001, "message" => "Not enough money"], 400);
}
if (!isset($request->transaction)) {
return response()->json(["code" => 2004, "message" => "Bad request"], 400);
}
$player_id = $request->player_id;
$session_id = $request->session_id;
$transaction = $request->transaction;
$CheckDiscard = SportBetDiscards::Where('transaction_id', $transaction->id)->first();
if ($CheckDiscard){
return response()->json(["code" => 2004, "message" => "Bad request"], 400);
}
$InfSum = SportBetSummary::create([
'user_id' => (String)$User->id,
'transactionId' => $transaction->id,
'operation' => 'make',
'status' => 'Pending',
'statusel' => 'Nil',
'reason' => 'Nil',
'amount' => $centsamount,
'transaction' => json_encode($transaction),
'betslip' => json_encode($request->betslip->bets),
]);
$balance = $User->wallet->balance;
$balanceLong = (int)($balance * 100);
$IDX = $InfSum->id . "-" . time();
SportBetParents::Create([
'tId' => $User->id,
'transaction_id' => $transaction->id,
'parent' => $IDX,
]);
return response()->json([
"id" => $IDX,
"ext_transaction_id" => (string)$transaction->id,
"parent_transaction_id" => null,
"user_id" => 'user-id-'.$User->id,//(String)$User->id,
"operation" => "bet",
"amount" => $centsamount,
"currency" => "BRL",
"balance" => $balanceLong,
], 200);
} catch (Exception $e) {
return response()->json(["code" => 2004, "message" => "Bad request"], 400);
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... ck-end-api
Очередь процесса на внутреннем API ⇐ Php
Кемеровские программисты php общаются здесь
1728536299
Anonymous
Мне нужна помощь.
Я выполнил приведенный выше код, это функция, которая вызывает внешний внутренний сервер, и нам нужно управлять некоторой информацией и возвращать ее обратно. проблема в том, что они отправляют НЕСКОЛЬКО запросов одновременно (в секунду), и наш код обрабатывается одновременно, и это неправильно, потому что это управляет балансом клиентов. поэтому, если они отправляют, например, 3 запроса одновременно, это уменьшает средства клиента по первому запросу, но принимает второй и последний запрос без остатка, но на балансе. поэтому мне нужно получать все запросы, ставить их в очередь, обрабатывать и возвращать на сервер.
как мне это сделать? я использую Laravel.
public function bmake(Request $request)
{
try {
$data = json_decode(json_encode($request->all()), true);
$decoded = $this->decodeJwt($data['payload']);
$request = $decoded['payload']->payload;
if ($request->currency != "BRL") {
return response()->json(["code" => 2002, "message" => "Invalid currency"], 400);
}
\DB::table('debug')->insert(['text' => 'bmake > ' . json_encode($request)]);
$Corte = explode('-', $request->player_id);
$UserID = $Corte[2];
$User = null;
$User = User::Where('id', $UserID)->lockForUpdate()->first();
if (!$User)
{
return response()->json(["code" => 1007, "message" => "Session is expired"], 400);
}
if ($User->banned == 1){
return response()->json(["code" => 1005, "message" => "Player is blocked"], 400);
}
if ($User->wallet->balance < $rsamount){
return response()->json(["code" => 2001, "message" => "Not enough money"], 400);
}else{
$User->wallet->balance -= $rsamount;
$User->wallet->save();
}
try {
$centsamount = $request->amount;
$rsamount = Helper::convertToRealAmount($centsamount);
DB::transaction(function () use ($User, $rsamount) {
$wallet = DB::table('wallets')->where('user_id', $User->id)->lockForUpdate()->first();
if (floatval($wallet->balance) < floatval($rsamount)) {
throw new Exception("Saldo insuficiente.");
} else {
$wallet->balance -= $rsamount;
DB::table('wallets')->where('user_id', $User->id)->update(['balance' => $wallet->balance]);
}
});
} catch (Exception $e) {
return response()->json(["code" => 2001, "message" => "Not enough money"], 400);
}
if (!isset($request->transaction)) {
return response()->json(["code" => 2004, "message" => "Bad request"], 400);
}
$player_id = $request->player_id;
$session_id = $request->session_id;
$transaction = $request->transaction;
$CheckDiscard = SportBetDiscards::Where('transaction_id', $transaction->id)->first();
if ($CheckDiscard){
return response()->json(["code" => 2004, "message" => "Bad request"], 400);
}
$InfSum = SportBetSummary::create([
'user_id' => (String)$User->id,
'transactionId' => $transaction->id,
'operation' => 'make',
'status' => 'Pending',
'statusel' => 'Nil',
'reason' => 'Nil',
'amount' => $centsamount,
'transaction' => json_encode($transaction),
'betslip' => json_encode($request->betslip->bets),
]);
$balance = $User->wallet->balance;
$balanceLong = (int)($balance * 100);
$IDX = $InfSum->id . "-" . time();
SportBetParents::Create([
'tId' => $User->id,
'transaction_id' => $transaction->id,
'parent' => $IDX,
]);
return response()->json([
"id" => $IDX,
"ext_transaction_id" => (string)$transaction->id,
"parent_transaction_id" => null,
"user_id" => 'user-id-'.$User->id,//(String)$User->id,
"operation" => "bet",
"amount" => $centsamount,
"currency" => "BRL",
"balance" => $balanceLong,
], 200);
} catch (Exception $e) {
return response()->json(["code" => 2004, "message" => "Bad request"], 400);
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79072649/queue-of-process-at-back-end-api[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия