从Json API端点获取数据并将数据保存在数组中。基本上根据从API回调收到的Json数据创建变量

时间:2019-02-13 14:56:41

标签: php arrays json api

我正在尝试从api获取数据,将数据保存到我计划最终保存在数据库中的变量中。问题在于该项目引发了我无法解决的错误。

此代码用于PHP和JSON。我正在使用在线支付系统,我想将从回调接收的数据保存到我的数据库中。但是,我无法执行此操作,因为以JSON格式接收的数据提取出来非常麻烦。

这是我提取变量的 PHP代码

$amount=$callbackData->Body->CallbackMetadata->Item[0]->Value; $mpesaReceiptNumber=$callbackData->Body->stkCallback->CallbackMetadata->Item[1]->Value; $balance=$callbackData->Body->stkCallback->CallbackMetadata->Item[2]->Value; $b2CUtilityAccountAvailableFunds=$callbackData->Body->stkCallback->CallbackMetadata->Item[3]->Value; $transactionDate=$callbackData->Body->stkCallback->CallbackMetadata->Item[4]->Value; $phoneNumber=$callbackData->Body->stkCallback->CallbackMetadata->Item[5]->Value;

这是JSON数据:

{  

“身体”:{
      “ stkCallback”:{
         “ MerchantRequestID”:“ 22571-1918158-1”,          “ CheckoutRequestID”:“ ws_CO_DMZ_357840864_13022019182443436”,          “ ResultCode”:0,          “ ResultDesc”:“服务请求已成功处理。”,          “ CallbackMetadata”:{
            “项目”:[
               {
                  “名称”:“金额”,                   “值”:1.00                },                {
                  “名称”:“ MpesaReceiptNumber”,                   “值”:“ NBD5TUW3AV”                },                {
                  “名称”:“余额”                },                {
                  “名称”:“交易日期”,                   “值”:20190213182502                },                {
                  “名称”:“电话号码”,                   “值”:254727304011                }             ]          }       }    } }

这是我遇到的错误:

[13-Feb-2019 14:46:07欧洲/伦敦] PHP注意:未定义的属性:/home/vinemupw/public_html/project/callbacks/stkcallback.php中的stdClass :: $ CallbackMetadata行25 [13-Feb-2019 14:46:07欧洲/伦敦] PHP注意:试图在第25行的/home/vinemupw/public_html/project/callbacks/stkcallback.php中获取非对象的属性“ Item” [13-Feb-2019 14:46:07欧洲/伦敦] PHP注意:试图在第25行的/home/vinemupw/public_html/project/callbacks/stkcallback.php中获取非对象的属性“值” [13-Feb-2019 14:46:07欧洲/伦敦] PHP注意:未定义的属性:stdClass :: $ CallbackMetadata在/home/vinemupw/public_html/project/callbacks/stkcallback.php中的第26行 [13-Feb-2019 14:46:07欧洲/伦敦] PHP注意:试图在第26行的/home/vinemupw/public_html/project/callbacks/stkcallback.php中获取非对象的属性“ Item” [13-Feb-2019 14:46:07欧洲/伦敦] PHP注意:试图在第26行的/home/vinemupw/public_html/project/callbacks/stkcallback.php中获取非对象的属性“值” [13-Feb-2019 14:46:07欧洲/伦敦] PHP注意:未定义的属性:stdClass :: $ CallbackMetadata在/home/vinemupw/public_html/project/callbacks/stkcallback.php的第27行 [13-Feb-2019 14:46:07欧洲/伦敦] PHP注意:试图在第27行的/home/vinemupw/public_html/project/callbacks/stkcallback.php中获取非对象的属性“ Item” [13-Feb-2019 14:46:07欧洲/伦敦] PHP注意:试图在第27行的/home/vinemupw/public_html/project/callbacks/stkcallback.php中获取非对象的属性“值” [13-Feb-2019 14:46:07欧洲/伦敦] PHP注意:未定义的属性:28行/home/vinemupw/public_html/project/callbacks/stkcallback.php中的stdClass :: $ CallbackMetadata [13-Feb-2019 14:46:07欧洲/伦敦] PHP注意:试图在第28行的/home/vinemupw/public_html/project/callbacks/stkcallback.php中获取非对象的属性“ Item” [13-Feb-2019 14:46:07欧洲/伦敦] PHP注意:试图在第28行的/home/vinemupw/public_html/project/callbacks/stkcallback.php中获取非对象的属性“值” [13-Feb-2019 14:46:07欧洲/伦敦] PHP注意:未定义的属性:stdClass :: $ CallbackMetadata在第29行的/home/vinemupw/public_html/project/callbacks/stkcallback.php中 [13-Feb-2019 14:46:07欧洲/伦敦] PHP注意:试图在第29行的/home/vinemupw/public_html/project/callbacks/stkcallback.php中获取非对象的属性“ Item” [13-Feb-2019 14:46:07欧洲/伦敦] PHP注意:试图在第29行的/home/vinemupw/public_html/project/callbacks/stkcallback.php中获取非对象的属性“值” [13-Feb-2019 14:46:07欧洲/伦敦] PHP注意:未定义的属性:第30行/home/vinemupw/public_html/project/callbacks/stkcallback.php中的stdClass :: $ CallbackMetadata [13-Feb-2019 14:46:07欧洲/伦敦] PHP注意:试图在第30行的/home/vinemupw/public_html/project/callbacks/stkcallback.php中获取非对象的属性“ Item” [13-Feb-2019 14:46:07欧洲/伦敦] PHP注意:试图在第30行的/home/vinemupw/public_html/project/callbacks/stkcallback.php中获取非对象的属性“值” [13-Feb-2019 14:46:07欧洲/伦敦] PHP警告:json_decode()期望参数1为字符串,在第64行的/home/vinemupw/public_html/project/callbacks/stkcallback.php中给出的数组

1 个答案:

答案 0 :(得分:0)

您对响应进行json_decode吗?建议$ data保存您必须执行的json字符串

$arr = json_decode($data, true); 

然后您可以使用以下方式访问ResultCode:

$arr['Body']['stkCallback']['ResultCode'];

访问项目列表

    $callbackMetadata = $data['Body']['stkCallback']['CallbackMetadata'];
    $amount = $callbackMetadata['Item'][0];

作为注释:json_decode中的第二个参数定义是否应返回assoc数组或对象。

编辑:您上面发布的json具有无效结构,您可能删除了一些值吗?