使用数组检索错误消息

时间:2013-03-31 22:34:29

标签: php arrays exception gocardless

我在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;资源已经确认))

3 个答案:

答案 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>";
}

和页面输出:

  

付款错误

     

服务器返回:资源已经确认