Stripe Ruby ライブラリでは、エラーオブジェクトは stripe. error. StripeError
およびそのサブクラスに属します。応答方法については、各クラスのドキュメントをご覧ください。
支払いエラー カード以外の支払いエラー このセクションのすべての内容はカード以外の支払いにも適用されます。歴史的理由から、支払いエラーには、Stripe::CardError のタイプがあります。しかし、実際には支払い方法に関係なく、あらゆる支払いの問題を表す可能性があります。
支払いエラー (歴史的理由から「カードエラー」と呼ばれることもあります) は、幅広い一般的な問題から発生し、以下の 3 つのカテゴリーに分類されます。
これらのカテゴリーの区別や対応方法について、詳細はエラーコード 、拒否コード 、支払い結果 をご覧ください。
(エラーオブジェクトから支払い結果を見つけるには、最初に、関連する Payment Intent と作成された最新の Charge を取得します。以下の例でデモンストレーションをご覧ください。)
require 'stripe'
Stripe . api_key = 'sk_test_09l3shTSTKHYCzzZZsiLl2vA'
def example_function ( params )
begin
Stripe : : PaymentIntent . create ( params )
rescue Stripe : : CardError = > e
charge = Stripe : : Charge . retrieve ( e . error . payment_intent . latest_charge )
if charge . outcome . type == 'blocked'
puts 'Payment blocked for suspected fraud.'
elsif e . code == 'card_declined'
puts 'Payment declined by the issuer.'
elsif e . code == 'expired_card'
puts 'Card expired.'
else
puts 'Other card error.'
end
end
end
API バージョン 2022-08-01 以前のユーザー:
(エラーオブジェクトから支払い結果を見つけるには、最初に、関連する Payment Intent と 作成された最新の Charge を取得します。下記の例でデモンストレーションをご覧ください。)
require 'stripe'
Stripe . api_key = 'sk_test_09l3shTSTKHYCzzZZsiLl2vA'
def example_function ( params )
begin
Stripe : : PaymentIntent . create ( params )
rescue Stripe : : CardError = > e
if e . error . payment_intent . charges . data [ 0 ] . outcome . type == 'blocked'
puts 'Payment blocked for suspected fraud.'
elsif e . code == 'card_declined'
puts 'Payment declined by the issuer.'
elsif e . code == 'expired_card'
puts 'Card expired.'
else
puts 'Other card error.'
end
end
end
テストカードを使用して、一般的な支払いエラーをトリガーすることができます。オプションについては、以下のリストをご覧ください。
以下のテストコードは、いくつかの可能性を示しています。
example_function (
currency : 'usd' ,
amount : 2000 ,
confirm : true ,
payment_method : ,
)
Payment blocked for suspected fraud.
支払いが不正使用の疑いのためにブロックされた タイプ Stripe::CardError
コード charge = Stripe::Charge.retrieve(e.error.payment_intent.latest_charge)
charge.outcome.type == 'blocked'
コード e. error. payment_ intent. charges. data[0]. outcome. type == 'blocked'
問題 Stripe の不正使用防止システムである Radar によって支払いがブロックされました 解決方法
このエラーは、組み込みが正常に機能している場合でも発生することがあります。このエラーを検出して、別の支払い方法を使用するように顧客に求めます。
正当な支払いのブロックを減らすには、以下を試します。
Radar for Teams の顧客は、以下の追加のオプションを使用できます。
特定の支払いを免除するには、許可リストに追加します。Radar for Fraud Teams リスク許容度を変更するには、リスク設定 を調整します。Radar for Fraud Teams 支払いをブロックする基準を変更するには、カスタムルール を使用します。Radar for Fraud Teams 不正利用をシミュレーションするテストカード を使用して、実装の設定をテストできます。カスタムの Radar ルールを使用している場合は、Radar のドキュメント に記載されているテストに関するアドバイスに従ってください。
支払いがカード発行会社によって拒否された タイプ Stripe::CardError
コード e. error. code == "card_ declined"
問題 カード発行会社によって支払いが拒否されました。 解決方法
このエラーは、実装が正常に機能している場合でも発生することがあります。このエラーは、カード発行会社によるアクションを反映しており、そのアクションは正当である可能性があります。適切な次のステップを判断するには、拒否コードを使用します。各コードに対する適切な対応については、拒否コードに関するドキュメント をご覧ください。
以下も行うことができます。
成功した支払いと拒否された支払いをシミュレーションするテストカード を使用して、実装で支払い拒否を処理する方法をテストします。
他の支払いエラー タイプ Stripe::CardError
問題 別の支払いエラーが発生しました。 解決方法 このエラーは、実装が正常に機能している場合でも発生することがあります。適切な次のステップを判断するには、エラーコードを使用します。各コードに対する適切な対応については、エラーコードに関するドキュメント をご覧ください。
無効なリクエストエラー タイプ Stripe::InvalidRequestError
問題 API コールのパラメーターが誤っているか、状態が誤っているか、方法が無効でした。 解決方法 大半の場合、問題はリクエスト自体にあります。パラメーターが無効であるか、組み込みの現在の状態では実行でないかのどちらかです。問題についての詳細は、エラーコードのドキュメント をご覧ください。 ご参考までに、 のリンクからエラーコードに関するドキュメントをご覧いただけます。 エラーが特定のパラメーターに関連している場合は、 を使用して、そのパラメーターを判断します。
接続エラー タイプ Stripe::APIConnectionError
問題 お客様のサーバーと Stripe の間でネットワークの問題が発生しました。 解決方法
API コールの結果は不確定なものとして扱います。成功または失敗の断定をしないでください。
成功したかどうかを確認するには、以下のようにします。
関連オブジェクトを Stripe から取得して、ステータスを確認します。 操作の成功または失敗を示す Webhook 通知をリッスンします。 接続エラーからの回復を容易にするには、以下のようにします。
オブジェクトを作成または更新するときに、べき等キー を使用します。これにより、接続エラーが発生した場合に、2 つ目のオブジェクトを作成することや 2 度更新するリスクを生じることなく、リクエストを安全に繰り返すことができます。成功または失敗の明確な結果を得られるまで、同じべき等キーを使用してリクエストを繰り返します。この対策に関する高度なアドバイスについては、低レベルのエラー処理 をご覧ください。 自動リトライ をオンにします。これにより、Stripe は自動的にべき等キーを生成して、安全な状況でリクエストを繰り返します。このエラーにより他のエラーが隠される場合があり、接続エラーが解決された後で他のエラーが明らかになる可能性があります。元のリクエストと同じように、これらのすべての解答にエラーがないかを確認してください。
API エラー タイプ Stripe::APIError
問題 Stripe 側で問題が発生しました (稀な状況です)。 解決方法
API コールの結果は不確定なものとして扱います。成功または失敗の断定をしないでください。
Webhook を使用して結果に関する情報を確認します。可能な限り、Stripe は問題を解決するときに作成する新しいオブジェクトに関する Webhook を送信します。
異常な状況下で最大限の堅牢性を得るように実装を設定するには、サーバーエラーに関する詳しい説明 をご覧ください。
認証エラー タイプ Stripe::AuthenticationError
問題 Stripe は、提供された情報では認証できません。 解決方法
べき等エラー タイプ Stripe::IdempotencyError
問題 別のパラメーターを渡してリクエストを再試行するなど、予期しないものにべき等キー が使用されました。 解決方法 べき等キーを使用した後は、同一の API コールでのみ再使用してください。 255 文字の制限内でべき等キーを使用してください。
権限エラー タイプ Stripe::PermissionError
問題 このリクエストに使用された API キーには必要な権限がありません。 解決方法
レート制限エラー タイプ Stripe::RateLimitError
問題 短時間のうちに過剰な回数の API コールが行われました。 解決方法 単一の API コールでこのエラーがトリガーされた場合は、しばらくしてからもう一度お試しください。 レート制限を自動的に処理するには、遅延後に API コールを再試行して、エラーが続く場合には遅延時間を飛躍的に増加させます。詳細については、レート制限 に関するドキュメントをご覧ください。 トラフィックが大幅に増えることが予想され、レート制限の引き上げをご希望の場合は、事前にサポートまでお問い合わせください 。
署名確認エラー タイプ Stripe::SignatureVerificationError
問題 Webhook の署名確認 が使用されており、Webhook イベントが本物であるかどうかを確認できませんでした。解決方法
このエラーは、組み込みが正常に機能している場合でも発生することがあります。Webhook の署名確認を使用する際に、サードパーティーが偽物の Webhook や悪意のある Webhook の送信を試みると、確認が失敗してこのエラーが発生します。このエラーを検出して、400 Bad Request
ステータスコードで応答してください。
受け取るはずがないエラーを受け取った場合、(Webhook の発信者が Stripe であることが明らかな場合など)、Webhook の署名の確認 に関するドキュメントをご覧ください。具体的には、正しいエンドポイントシークレットを使用していることを確認します。これは、API キーとは別のものです。