我在PHP中使用了GoCardless's API版本来处理我网站上的付款。但是,当他们的API返回错误时,我想向用户显示更有效的错误。
我已经走了一半,但我想知道无论如何我都可以做到以下几点:
如果我有以下错误:
数组([错误] =>数组([0] =>资源已经确认))
无论如何只用PHP提取The resource has already been confirmed
部分?
我的代码:
try{
$confirmed_resource = GoCardless::confirm_resource($confirm_params);
}catch(GoCardless_ApiException $e){
$err = 1;
print '<h2>Payment Error</h2>
<p>Server Returned : <code>' . $e->getMessage() . '</code></p>';
}
感谢。
更新1:
触发异常的代码:
$http_response_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($http_response_code < 200 || $http_response_code > 300) {
// Create a string
$message = print_r(json_decode($result, true), true);
// Throw an exception with the error message
throw new GoCardless_ApiException($message, $http_response_code);
}
更新2: - &gt; print_r($e->getMessage())
输出:
数组([错误] =&gt;数组([0] =&gt;资源已经确认))
答案 0 :(得分:1)
方法$e->getMessage()
似乎返回一个索引为'error'的数组,它是一个包含消息文本的数组。如果你问我这是糟糕的API设计
但是您可以像这样访问消息文本:
try{
$confirmed_resource = GoCardless::confirm_resource($confirm_params);
}catch(GoCardless_ApiException $e){
$err = 1;
$message = $e->getMessage();
$error = $message['error'];
print '<h2>Payment Error</h2>
<p>Server Returned : <code><' . $error[0] . "</code></p>";
}
答案 1 :(得分:1)
如果查看GoCardless_ApiException类代码,您会看到有一个getResponse()方法可用于访问响应数组的错误元素...
$try{
$confirmed_resource = GoCardless::confirm_resource($confirm_params);
}catch(GoCardless_ApiException $e){
$err = 1;
$response = $e->getResponse();
print '<h2>Payment Error</h2>
<p>Server Returned : <code>' . $response['error'][0] . "</code></p>";
}
答案 2 :(得分:0)
我发现了问题,$e->getMessage()
的输出是一个普通的字符串,而不是一个数组。
所以我将Request.php文件编辑为以下内容:
$http_response_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($http_response_code < 200 || $http_response_code > 300) {
// Create a string <<-- THE PROBLEM -->>
// $message = print_r(json_decode($result, true), true);
$message_test = json_decode($result, true);
// Throw an exception with the error message
// OLD - throw new GoCardless_ApiException($message, $http_response_code);
throw new GoCardless_ApiException($message_test[error][0], $http_response_code);
}
然后我的php文件:
try{
$confirmed_resource = GoCardless::confirm_resource($confirm_params);
}catch(GoCardless_ApiException $e){
$err = 1;
$message = $e->getMessage();
print '<h2>Payment Error</h2>
<p>Server Returned : <code>' . $message . "</code></p>";
}
和页面输出:
付款错误
服务器返回:资源已经确认