2

PHP でGoCardless の API のバージョンを使用して、Web サイトで支払いを処理しています。ただし、API がエラーを返した場合、ユーザーにより効果的なエラーを表示したいと考えています。

私は途中まで行きましたが、とにかく次のことができるかどうか疑問に思っていました:

次のエラーがある場合:

Array ( [error] => Array ( [0] => リソースは確認済みです ) )

The resource has already been confirmedPHPでその部分だけを抽出する方法はありますか?

私のコード:

    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);

}

UPDATE 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 に答える