【发布时间】:2021-01-14 22:54:42
【问题描述】:
嗯,我有一个奇怪的问题。我通过 POST 方法从 API 接收数据。当请求到达预期路由时,我从请求中获取数据,然后根据请求类型减少或增加用户余额。
我们有两种请求类型:信用卡和借记卡。对于借方,我会减少用户余额,对于贷方,我会将用户余额增加请求中的金额。
现在的问题是,这几乎适用于 99% 的请求,但对于某些请求,尽管已收到余额,但余额并未减少。
下图是我所说的一个例子。带有绿色边框的记录是按要求工作的记录,其中金额按要求递减。带有红色边框的那个是即使它记录了金额也没有减少的地方。下面也是我用来执行此操作的代码。
请帮助我了解我的代码中可能出现的问题或如何解决问题,以使结果保持一致。我使用的是正常的递减和递增运算符,但它的工作方式相同。我决定尝试 laravel Model::decrement() 和 Model::increment() 但我遇到了同样的错误!
public function Debit(){
$data = json_decode(file_get_contents('php://input'), true);
$username = $data['Login'];
$user = User::where('username', $username)->first();
if(!$user){
$rivalaoResponse = ["d"=>["ErrorCode"=>-10,"HasErrors"=>true,"Message"=>"InvalidPlayer"]];
return response()->json($rivalaoResponse);
}
$type="debit";
$userId = $user->id;
$amount = $data['Amount'];
$gameId = $data['GameId'];
$roundId = $data['RoundId'];
$sequence = $data['Sequence'];
if($user->decrement('casino_bakiye', $amount)){
$updatedBalance= $user->refresh()->casino_bakiye;
if($sequence){
$game = XpgTransaction::where('gameId', $gameId)
->where('roundId', $roundId)
->where('sequence', $sequence)
->first();
if(!$game){
$trxn = new XpgTransaction;
$trxn->user_id = $userId;
$trxn ->request=json_encode($data);
$trxn->type =$type;
$trxn->casino_balance = (float)$updatedBalance;
$rivalaoResponse = ["d"=>["Data"=>[(float)$updatedBalance],"ErrorCode"=>0,"HasErrors"=>false,"Message"=>""]];
try {
return response()->json($rivalaoResponse);
} finally {
$trxn->save();
}
}
$rivalaoResponse = ["d"=>["ErrorCode"=>-20,"HasErrors"=>true,"Message"=>"Duplicate transaction"]];
return response()->json($rivalaoResponse);
}
}
}
【问题讨论】:
-
这行我看不懂
if($user->decrement('casino_bakiye', $amount)) -
也就是说,如果用户余额减少,那么该代码将运行@sta