Очередь процесса на внутреннем APIPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Очередь процесса на внутреннем API

Сообщение 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);
}
}


Подробнее здесь: https://stackoverflow.com/questions/790 ... ck-end-api
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»