В настоящее время я использую метод оплаты SquareUp, используя их API Connect V2. Обработка платежа работает нормально, однако я хотел бы отобразить любые ошибки на экране, например, если карта отклоняется.
} catch (\SquareConnect\ApiException $e) {
echo "Caught exception!<br/>";
print_r('<strong>Details:</strong><br/>');
echo "<pre>";
var_dump($e->getResponseBody());
echo "</pre>";
}
Когда я выгружаю весь getResponseBody, я получаю результат ниже, однако я просто хочу выгрузить строку в свойстве «detail». Я думал, что, возможно, преобразование в массив поможет, но, честно говоря, я не уверен.
object(stdClass)#20 (1) {
["errors"]=>
array(1) {
[0]=>
object(stdClass)#21 (3) {
["category"]=>
string(20) "PAYMENT_METHOD_ERROR"
["code"]=>
string(13) "CARD_DECLINED"
["detail"]=>
string(14) "Card declined."
}
}
}
Я пробовал сделать это, но он ничего не сбрасывает внутри <pre></pre>, тогда как сброс всего $e->getResponseBody() выводится в <pre></pre>.
$json = file_get_contents($e->getResponseBody());
$obj = json_decode($json);
echo $obj->errors[0]->detail));






Вам нужно сначала разрешить ($obj->errors), а затем ссылаться на элементы массива, например:
<?php
$obj = (object)['errors' => [(object)['category' => 'PAYMENT_METHOD_ERROR', 'code' => 'CARD_DECLINED', 'detail' => 'Card declined']]];
echo ($obj->errors)[0]->category; // output PAYMENT_METHOD_ERROR
echo '<br />';
echo ($obj->errors)[0]->code; // output CARD_DECLINED
echo '<br />';
echo ($obj->errors)[0]->detail; // output Card declined
?>
не уверен, что понимаю; вы говорите: «однако я просто хочу сбросить строку в свойстве detail», поэтому вы делаете: echo ($obj->errors)[0]->detail; результат эха, очевидно, будет зависеть от того, что вы получили в свойстве detail.
Да, это правильно, и я понимаю, однако, как мне получить содержимое того, что у вас есть в вашем $ obj?
А теперь я понимаю. Это было так просто: $obj = $e->getResponseBody(); echo $obj->errors[0]->detail; // output Card declined
да, вы прибили это
Как мне получить то, что у вас есть в вашем
$obj? Строкаdetailне всегда может бытьCard declined, поэтому я не могу просто скопировать и вставить ваш ответ, но не знаю, что здесь делать. Мне нужно преобразовать в массив? если да, то как? Даже просто скопировав и вставив ошибку кода, я получаю HTTP ERROR 500