2

我在 PHP 中使用GoCardless 的 API版本来处理我网站上的付款。但是,当他们的 API 返回错误时,我想向用户显示更有效的错误。

我已经完成了一半,但我想知道是否有任何方法可以执行以下操作:

如果我有以下错误:

Array ( [error] => Array ( [0] => 资源已经确认) )

The resource has already been confirmed反正有没有用PHP提取部分?

我的代码:

    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 :->print_r($e->getMessage())输出:

Array ( [error] => Array ( [0] => 资源已经确认) )

4

3 回答 3

1

该方法$e->getMessage()似乎返回一个索引为“错误”的数组,该数组又是一个包含消息文本的数组。如果你问我这是糟糕的 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>";
}
于 2013-03-31T22:36:09.550 回答
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>";
}
于 2013-10-09T16:11:55.783 回答
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>";
}

和页面输出:

付款错误

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

于 2013-03-31T23:25:42.130 回答