All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.stripe.exception.StripeException Maven / Gradle / Ivy

package com.stripe.exception;

import com.google.gson.JsonObject;
import com.stripe.model.StripeError;
import com.stripe.net.ApiMode;
import com.stripe.net.StripeResponseGetter;
import lombok.Getter;

@Getter
public abstract class StripeException extends Exception {
  private static final long serialVersionUID = 2L;

  /** The error resource returned by Stripe's API that caused the exception. */
  // transient so the exception can be serialized, as StripeObject does not
  // implement Serializable
  transient StripeError stripeError;

  // This field and its getter are used internally and may change in a non-major version
  // of the SDK
  ApiMode stripeErrorApiMode;

  public void setStripeError(StripeError err) {
    stripeError = err;
    stripeErrorApiMode = ApiMode.V1;
  }

  public void setStripeV2Error(StripeError err) {
    stripeError = err;
    stripeErrorApiMode = ApiMode.V2;
  }
  /**
   * Returns the error code of the response that triggered this exception. For {@link ApiException}
   * the error code will be equal to {@link StripeError#getCode()}.
   *
   * @return the string representation of the error code.
   */
  private String code;

  /**
   * Returns the request ID of the request that triggered this exception.
   *
   * @return the request ID.
   */
  private String requestId;

  /**
   * Returns the status code of the response that triggered this exception.
   *
   * @return the status code.
   */
  private Integer statusCode;

  protected StripeException(String message, String requestId, String code, Integer statusCode) {
    this(message, requestId, code, statusCode, null);
  }

  /** Constructs a new Stripe exception with the specified details. */
  protected StripeException(
      String message, String requestId, String code, Integer statusCode, Throwable e) {
    super(message, e);
    this.code = code;
    this.requestId = requestId;
    this.statusCode = statusCode;
  }

  /**
   * Returns a description of the exception, including the HTTP status code and request ID (if
   * applicable).
   *
   * @return a string representation of the exception.
   */
  @Override
  public String getMessage() {
    String additionalInfo = "";
    if (code != null) {
      additionalInfo += "; code: " + code;
    }
    if (requestId != null) {
      additionalInfo += "; request-id: " + requestId;
    }
    // a separate user message is only available on v2 errors
    if (stripeErrorApiMode == ApiMode.V2 && this.getUserMessage() != null) {
      additionalInfo += "; user-message: " + this.getUserMessage();
    }
    return super.getMessage() + additionalInfo;
  }

  /**
   * Returns a description of the user facing exception
   *
   * @return a string representation of the user facing exception.
   */
  public String getUserMessage() {
    if (this.getStripeError() != null) {
      switch (stripeErrorApiMode) {
        case V1:
          return this.getStripeError().getMessage();
        case V2:
          return this.getStripeError().getUserMessage();
      }
    }
    return null;
  }

  public static StripeException parseV2Exception(
      String type,
      JsonObject body,
      int statusCode,
      String requestId,
      StripeResponseGetter responseGetter) {
    switch (type) {
        // The beginning of the section generated from our OpenAPI spec
      case "temporary_session_expired":
        return com.stripe.exception.TemporarySessionExpiredException.parse(
            body, statusCode, requestId, responseGetter);
        // The end of the section generated from our OpenAPI spec
    }
    return null;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy