Печать результата ответа в массиве - PullRequest
0 голосов
/ 28 мая 2018

Я использую вызов API с использованием php curl.В случае отклонения я получаю эти два типа ответов:

  1. В случае отклонения транзакции из-за неверного номера

    {"result": "ERROR", "message":" Транзакция отклонена: неверный номер карты "}

  2. Когда какие-либо поля отсутствуют

    {" result ":" ERROR "," message ": {" address":" является обязательным полем "," city ":" является обязательным полем "," state ":" является обязательным полем "}}

В файле обработки API, Iсохранить эту ошибку в сеансе, поэтому на странице обработки ошибок я использую следующий код

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

Таким образом, в случае ошибки пропущенных полей все отображается правильно.Но в случае 1, когда карта отклонена, на ней не отображается ответ с кодом, приведенным выше, но если я просто повторю

   echo $_SESSION['error_message'];

, то будет отображаться ответ об ошибке.Мне было интересно, если есть лучший способ справиться с этим, так что обе ошибки могут быть показаны.

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Вы можете создать функцию, которая будет принимать строку или массив и обрабатывать ее:

<?php

function storeError($message) {
  if(!isset($_SESSION['error_message'])) {
    $_SESSION['error_message'] = array();
  }

  if(is_array($message)) {
    $_SESSION['error_message'] = array_merge($_SESSION['error_message'], $message);
  } else {
    $_SESSION['error_message'][] = $message;
  }
}

storeError('test');
storeError(array(
    "address" => "is a required field",
    "city"=> "is a required field",
    "state" => "is a required field"
    ));
print_r($_SESSION['error_message']);

====>
Array
(
    [0] => test
    [address] => is a required field
    [city] => is a required field
    [state] => is a required field
)
0 голосов
/ 28 мая 2018

Проверьте, является ли $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);

?>
...