php - 使用 JSON 转账
问题描述
我为位于个人资料页面上的表单处理 api-transfer-money。一切正常,突然我的 api 文件开始向我显示错误“你没有这个帐户 id”,我不知道为什么。
客户端.json:
{
"data": {
"peterjak": {
"name": "Peter",
"accounts": {
"5c7072a835c3b": {
"balance": 1000,
"name": "Savings"
},
"5c7696db0745b": {
"balance": 2000,
"name": "University"
}
},
"nikajak": {
"name": "nika",
"accounts": {
"5c7000098525e": {
"balance": 500
}
}
}
}
}
}
api-transfer-money.php:
<?php
session_start();
$sSender = $_SESSION['sUserId'];
$sData = file_get_contents('../data/clients.json');
$jData = json_decode($sData);
$idRecipient = $_POST['txtToAccountId'];
$idSender = $_POST['txtFromAccountId'];
$sBalanceSender = $jData
->data
->$sSender
->accounts->{$idSender}->balance;
if ($sBalanceSender < $iAmount) {
sendResponse(-1, __LINE__, 'you are too poor');
}
$sSenderAccounts = $jData
->data
->$sSender->accounts;
$sSenderAccountsList = array_keys($sSenderAccounts);
$sRecipientAccounts = $jData
->data
->$sRecipient->accounts;
$sRecipientAccountsList = array_keys($sRecipientAccounts);
if (!in_array($idSender, $sSenderAccountsList)) {
sendResponse(-1, __LINE__, 'You dont have this account id');
}
if (!in_array($idRecipient, $sRecipientAccountsList)) {
sendResponse(-1, __LINE__, 'Recipients account id not found');
}
$jData
->data
->$sRecipient
->accounts->{$idRecipient}->balance += $iAmount;
// Take money from the logged user
$jData
->data
->$sSender
->accounts->{$idSender}->balance -= $iAmount;
$sData = json_encode($jData);
if ($sData == null) {
sendResponse(0, __LINE__);
}
file_put_contents('../data/clients.json', $sData);
function sendResponse($iStatus, $iLineNumber, $sMessage) {
echo '{"status":' . $iStatus . ', "code":' . $iLineNumber . ',"message":"' . $sMessage . '"}';
exit;
}
解决方案
$sRecipientAccounts
并且$sSenderAccounts
是对象,而不是数组,因此您不能使用它array_keys()
来获取属性名称。
您可以使用get_object_vars()
来获取属性名称和值的关联数组,然后array_keys()
在此使用。但是只检查指定的属性是否直接存在会更简单。
$sSenderAccounts = $jData->data->$sSender->accounts;
$sRecipientAccounts = $jData->data->$sRecipient->accounts;
if(!isset($sSenderAccounts->{$idSender})){
sendResponse( -1, __LINE__, 'You dont have this account id');
}
if(!isset($sRecipientAccounts->{$idRecipient})){
sendResponse( -1, __LINE__, 'Recipients account id not found');
}
推荐阅读
- c++ - C++/libscreen 无法更新可见性
- html - 表单提交成功后如何通知显示
- r - 如何找出每个包在 R 中包含多少个数据集?
- algorithm - 为什么我们不将父指针保存在“B+树”中以便在树中轻松向上遍历?
- angularjs - 当数据很大时,Angularjs dir-pagination 冻结
- python - 如何在python中打印三角形?
- sql-server - 在where子句中避免表函数?
- html - HTML 页面溢出,但无法滚动
- python - 让递归过程在循环场景中工作(开始 A -> B,然后 B -> A 无限期)
- c - strcat 和返回错误的差异