принятие решений на основе массива JSON

0

Я работаю над API-интерфейсом платежного шлюза для обработки возмещений.

При успешной работе API возвращает массив json, подобный этому

{
"currencyCode" : "GBP",
"amount" : 100,
"originalMerchantRefNum" : "MERCHANTREF12346",
"mode" : "live",
"confirmationNumber" : 1997160616609792,
"authType" : "refund",
"id" : "25TWPTLHRR81AIG1LF"
}

По ошибке возвращается массив

 {
  "error": {
    "code": "400",
    "message": "Amount exceeds refundable amount"
  }
}

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

Мой код, который делает все сообщения и выборку данных из процессора шлюза ниже

<?php
include('lock.php');
$flag=0;
$oid=$_POST['oid'];

if(isset($_POST['amount']))
{
$amount=$_POST['amount'];
$amount = $amount*100;
$flag=1;
}

// generate random number
$merchantref=mt_rand(10,9999999999);

//API Url
$url = 'https://api.netbanx.com/hosted/v1/orders/'.$oid.'/refund';
//Initiate cURL.
$ch = curl_init($url);


//The JSON data.
if($flag==1)
{
$jsonData = array(
    "amount" => $amount,
    'merchantRefNum' => $merchantref
);
}
else
{
$jsonData = array(
    'merchantRefNum' => $merchantref
);
}
//Encode the array into JSON.
$jsonDataEncoded = json_encode($jsonData);

//Tell cURL that we want to send a POST request.
curl_setopt($ch, CURLOPT_POST, 1);

//Attach our encoded JSON string to the POST fields.
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonDataEncoded);

//Set the content type to application/json and HTTP Authorization code

$headers = array(
    'Content-Type:application/json',
    'Authorization: Basic '. base64_encode("..") //Base 64 encoding and appending Authorization: Basic 
);

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

//Execute the request
$result = curl_exec($ch);

$jdata=$result;

//decode the json output and store it in a variable
$jfo = json_decode($jdata);

//Handle decision making based on json output


?>
  • 0
    Вы пытаетесь вернуть сумму, превышающую первоначальную сумму транзакции. Проверьте сумму транзакции или проверьте, была ли транзакция уже возвращена.
Теги:
arrays

1 ответ

1
Лучший ответ

В основном что-то простое:

$response = json_decode(..., true);

if (isset($response['error'])) {
    echo 'Sorry, ', $response['error']['message'];
} else {
    echo 'Yay!';
}

То, что вам нужно проверить, зависит от возможных значений, которые API может вернуть. Большинство API-интерфейсов указывают что-то в строке " status будет установлен на 'success' или 'error' ", или, может быть," если присутствует ключ error, это указывает на ошибку, в противном случае - на успех ".

Ещё вопросы

Сообщество Overcoder
Наверх
Меню