在阵列

时间:2018-05-28 03:21:58

标签: php arrays json

我正在使用php curl进行API调用。如果出现下降,我会得到这两种类型的回复;

  1. 如果由于号码无效而导致交易被拒绝

    {     "结果":" ERROR",     "消息":"交易被拒绝:无效的卡号" }

  2. 缺少任何字段时

    {     "结果":" ERROR",     " message":{         "地址":"是必填字段",         " city":"是必填字段",         "州":"是必填字段"     } }

  3. 在API处理文件中,我将此错误存储在会话中,因此在错误处理页面上,我使用以下代码

    foreach($_SESSION['error_message'] as $x => $x_value) {
        echo ucfirst($x) . " " . $x_value;
        echo "<br>";
    

    这种方式如果缺少字段错误,一切都会正确显示。但是在案例1的情况下,当卡被拒绝时,它没有显示上面代码的响应,但是如果我只是回应

       echo $_SESSION['error_message'];
    

    它将显示错误响应。我想知道是否有更好的方法来处理这个问题,因此可以显示两个错误。

2 个答案:

答案 0 :(得分:0)

测试$data->message是数组还是字符串,然后执行foreach或直接设置错误消息。将所需字段上的错误作为简单的字符串数组更好,使对象的格式更接近事务拒绝消息的内容,如果您可以控制如何生成JSON ...

即 -

{ "result": "ERROR", "message": { "address is a required field", "city is a required field", "state is a required field" } }

{ "result": "ERROR", "message": { "Transaction Declined: .... " }}

<?php

$json1='{ "result": "ERROR", "message": "Transaction Declined: Invalid Card Number" }';

$json2='{ "result": "ERROR", "message": { "address": "is a required field", "city": "is a required field", "state": "is a required field" } }';


$obj=json_decode($json2);


if(is_object($obj->message)){
    foreach($obj->message as $k=>$v){
        $msg['error'][]="The field $k is a required field <br />";
    }
}else{
    $msg['error'][]=$obj->message;
}


print_r($msg);

?>

答案 1 :(得分:0)

你可以创建一个函数来接受字符串或数组并处理它:

FileSystemWatcher