content: /*
   * Adyen Checkout API
   *
   * The version of the OpenAPI document: 71
   *
   *
   * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
   * https://openapi-generator.tech
   * Do not edit the class manually.
   */
  
  package com.adyen.model.checkout;
  
  import com.fasterxml.jackson.annotation.JsonInclude;
  import com.fasterxml.jackson.annotation.JsonProperty;
  import com.fasterxml.jackson.annotation.JsonPropertyOrder;
  import com.fasterxml.jackson.core.JsonProcessingException;
  import java.util.*;
  
  /** PaymentCompletionDetails */
  @JsonPropertyOrder({
    PaymentCompletionDetails.JSON_PROPERTY_M_D,
    PaymentCompletionDetails.JSON_PROPERTY_PA_REQ,
    PaymentCompletionDetails.JSON_PROPERTY_PA_RES,
    PaymentCompletionDetails.JSON_PROPERTY_AUTHORIZATION_TOKEN,
    PaymentCompletionDetails.JSON_PROPERTY_BILLING_TOKEN,
    PaymentCompletionDetails.JSON_PROPERTY_CUPSECUREPLUS_SMSCODE,
    PaymentCompletionDetails.JSON_PROPERTY_FACILITATOR_ACCESS_TOKEN,
    PaymentCompletionDetails.JSON_PROPERTY_ONE_TIME_PASSCODE,
    PaymentCompletionDetails.JSON_PROPERTY_ORDER_I_D,
    PaymentCompletionDetails.JSON_PROPERTY_PAYER_I_D,
    PaymentCompletionDetails.JSON_PROPERTY_PAYLOAD,
    PaymentCompletionDetails.JSON_PROPERTY_PAYMENT_I_D,
    PaymentCompletionDetails.JSON_PROPERTY_PAYMENT_STATUS,
    PaymentCompletionDetails.JSON_PROPERTY_REDIRECT_RESULT,
    PaymentCompletionDetails.JSON_PROPERTY_RESULT_CODE,
    PaymentCompletionDetails.JSON_PROPERTY_RETURN_URL_QUERY_STRING,
    PaymentCompletionDetails.JSON_PROPERTY_THREE_D_S_RESULT,
    PaymentCompletionDetails.JSON_PROPERTY_THREEDS2_CHALLENGE_RESULT,
    PaymentCompletionDetails.JSON_PROPERTY_THREEDS2_FINGERPRINT,
    PaymentCompletionDetails.JSON_PROPERTY_VAULT_TOKEN
  })
  public class PaymentCompletionDetails {
    public static final String JSON_PROPERTY_M_D = "MD";
    private String MD;
  
    public static final String JSON_PROPERTY_PA_REQ = "PaReq";
    private String paReq;
  
    public static final String JSON_PROPERTY_PA_RES = "PaRes";
    private String paRes;
  
    public static final String JSON_PROPERTY_AUTHORIZATION_TOKEN = "authorization_token";
    private String authorizationToken;
  
    public static final String JSON_PROPERTY_BILLING_TOKEN = "billingToken";
    private String billingToken;
  
    public static final String JSON_PROPERTY_CUPSECUREPLUS_SMSCODE = "cupsecureplus.smscode";
    private String cupsecureplusSmscode;
  
    public static final String JSON_PROPERTY_FACILITATOR_ACCESS_TOKEN = "facilitatorAccessToken";
    private String facilitatorAccessToken;
  
    public static final String JSON_PROPERTY_ONE_TIME_PASSCODE = "oneTimePasscode";
    private String oneTimePasscode;
  
    public static final String JSON_PROPERTY_ORDER_I_D = "orderID";
    private String orderID;
  
    public static final String JSON_PROPERTY_PAYER_I_D = "payerID";
    private String payerID;
  
    public static final String JSON_PROPERTY_PAYLOAD = "payload";
    private String payload;
  
    public static final String JSON_PROPERTY_PAYMENT_I_D = "paymentID";
    private String paymentID;
  
    public static final String JSON_PROPERTY_PAYMENT_STATUS = "paymentStatus";
    private String paymentStatus;
  
    public static final String JSON_PROPERTY_REDIRECT_RESULT = "redirectResult";
    private String redirectResult;
  
    public static final String JSON_PROPERTY_RESULT_CODE = "resultCode";
    private String resultCode;
  
    public static final String JSON_PROPERTY_RETURN_URL_QUERY_STRING = "returnUrlQueryString";
    private String returnUrlQueryString;
  
    public static final String JSON_PROPERTY_THREE_D_S_RESULT = "threeDSResult";
    private String threeDSResult;
  
    public static final String JSON_PROPERTY_THREEDS2_CHALLENGE_RESULT = "threeds2.challengeResult";
    private String threeds2ChallengeResult;
  
    public static final String JSON_PROPERTY_THREEDS2_FINGERPRINT = "threeds2.fingerprint";
    private String threeds2Fingerprint;
  
    public static final String JSON_PROPERTY_VAULT_TOKEN = "vaultToken";
    private String vaultToken;
  
    public PaymentCompletionDetails() {}
  
    /**
     * A payment session identifier returned by the card issuer.
     *
     * @param MD A payment session identifier returned by the card issuer.
     * @return the current {@code PaymentCompletionDetails} instance, allowing for method chaining
     */
    public PaymentCompletionDetails MD(String MD) {
      this.MD = MD;
      return this;
    }
  
    /**
     * A payment session identifier returned by the card issuer.
     *
     * @return MD A payment session identifier returned by the card issuer.
     */
    @JsonProperty(JSON_PROPERTY_M_D)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public String getMD() {
      return MD;
    }
  
    /**
     * A payment session identifier returned by the card issuer.
     *
     * @param MD A payment session identifier returned by the card issuer.
     */
    @JsonProperty(JSON_PROPERTY_M_D)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setMD(String MD) {
      this.MD = MD;
    }
  
    /**
     * (3D) Payment Authentication Request data for the card issuer.
     *
     * @param paReq (3D) Payment Authentication Request data for the card issuer.
     * @return the current {@code PaymentCompletionDetails} instance, allowing for method chaining
     */
    public PaymentCompletionDetails paReq(String paReq) {
      this.paReq = paReq;
      return this;
    }
  
    /**
     * (3D) Payment Authentication Request data for the card issuer.
     *
     * @return paReq (3D) Payment Authentication Request data for the card issuer.
     */
    @JsonProperty(JSON_PROPERTY_PA_REQ)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public String getPaReq() {
      return paReq;
    }
  
    /**
     * (3D) Payment Authentication Request data for the card issuer.
     *
     * @param paReq (3D) Payment Authentication Request data for the card issuer.
     */
    @JsonProperty(JSON_PROPERTY_PA_REQ)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setPaReq(String paReq) {
      this.paReq = paReq;
    }
  
    /**
     * (3D) Payment Authentication Response data by the card issuer.
     *
     * @param paRes (3D) Payment Authentication Response data by the card issuer.
     * @return the current {@code PaymentCompletionDetails} instance, allowing for method chaining
     */
    public PaymentCompletionDetails paRes(String paRes) {
      this.paRes = paRes;
      return this;
    }
  
    /**
     * (3D) Payment Authentication Response data by the card issuer.
     *
     * @return paRes (3D) Payment Authentication Response data by the card issuer.
     */
    @JsonProperty(JSON_PROPERTY_PA_RES)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public String getPaRes() {
      return paRes;
    }
  
    /**
     * (3D) Payment Authentication Response data by the card issuer.
     *
     * @param paRes (3D) Payment Authentication Response data by the card issuer.
     */
    @JsonProperty(JSON_PROPERTY_PA_RES)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setPaRes(String paRes) {
      this.paRes = paRes;
    }
  
    /**
     * authorizationToken
     *
     * @param authorizationToken
     * @return the current {@code PaymentCompletionDetails} instance, allowing for method chaining
     */
    public PaymentCompletionDetails authorizationToken(String authorizationToken) {
      this.authorizationToken = authorizationToken;
      return this;
    }
  
    /**
     * Get authorizationToken
     *
     * @return authorizationToken
     */
    @JsonProperty(JSON_PROPERTY_AUTHORIZATION_TOKEN)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public String getAuthorizationToken() {
      return authorizationToken;
    }
  
    /**
     * authorizationToken
     *
     * @param authorizationToken
     */
    @JsonProperty(JSON_PROPERTY_AUTHORIZATION_TOKEN)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setAuthorizationToken(String authorizationToken) {
      this.authorizationToken = authorizationToken;
    }
  
    /**
     * PayPal-generated token for recurring payments.
     *
     * @param billingToken PayPal-generated token for recurring payments.
     * @return the current {@code PaymentCompletionDetails} instance, allowing for method chaining
     */
    public PaymentCompletionDetails billingToken(String billingToken) {
      this.billingToken = billingToken;
      return this;
    }
  
    /**
     * PayPal-generated token for recurring payments.
     *
     * @return billingToken PayPal-generated token for recurring payments.
     */
    @JsonProperty(JSON_PROPERTY_BILLING_TOKEN)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public String getBillingToken() {
      return billingToken;
    }
  
    /**
     * PayPal-generated token for recurring payments.
     *
     * @param billingToken PayPal-generated token for recurring payments.
     */
    @JsonProperty(JSON_PROPERTY_BILLING_TOKEN)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setBillingToken(String billingToken) {
      this.billingToken = billingToken;
    }
  
    /**
     * The SMS verification code collected from the shopper.
     *
     * @param cupsecureplusSmscode The SMS verification code collected from the shopper.
     * @return the current {@code PaymentCompletionDetails} instance, allowing for method chaining
     */
    public PaymentCompletionDetails cupsecureplusSmscode(String cupsecureplusSmscode) {
      this.cupsecureplusSmscode = cupsecureplusSmscode;
      return this;
    }
  
    /**
     * The SMS verification code collected from the shopper.
     *
     * @return cupsecureplusSmscode The SMS verification code collected from the shopper.
     */
    @JsonProperty(JSON_PROPERTY_CUPSECUREPLUS_SMSCODE)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public String getCupsecureplusSmscode() {
      return cupsecureplusSmscode;
    }
  
    /**
     * The SMS verification code collected from the shopper.
     *
     * @param cupsecureplusSmscode The SMS verification code collected from the shopper.
     */
    @JsonProperty(JSON_PROPERTY_CUPSECUREPLUS_SMSCODE)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setCupsecureplusSmscode(String cupsecureplusSmscode) {
      this.cupsecureplusSmscode = cupsecureplusSmscode;
    }
  
    /**
     * PayPal-generated third party access token.
     *
     * @param facilitatorAccessToken PayPal-generated third party access token.
     * @return the current {@code PaymentCompletionDetails} instance, allowing for method chaining
     */
    public PaymentCompletionDetails facilitatorAccessToken(String facilitatorAccessToken) {
      this.facilitatorAccessToken = facilitatorAccessToken;
      return this;
    }
  
    /**
     * PayPal-generated third party access token.
     *
     * @return facilitatorAccessToken PayPal-generated third party access token.
     */
    @JsonProperty(JSON_PROPERTY_FACILITATOR_ACCESS_TOKEN)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public String getFacilitatorAccessToken() {
      return facilitatorAccessToken;
    }
  
    /**
     * PayPal-generated third party access token.
     *
     * @param facilitatorAccessToken PayPal-generated third party access token.
     */
    @JsonProperty(JSON_PROPERTY_FACILITATOR_ACCESS_TOKEN)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setFacilitatorAccessToken(String facilitatorAccessToken) {
      this.facilitatorAccessToken = facilitatorAccessToken;
    }
  
    /**
     * A random number sent to the mobile phone number of the shopper to verify the payment.
     *
     * @param oneTimePasscode A random number sent to the mobile phone number of the shopper to verify
     *     the payment.
     * @return the current {@code PaymentCompletionDetails} instance, allowing for method chaining
     */
    public PaymentCompletionDetails oneTimePasscode(String oneTimePasscode) {
      this.oneTimePasscode = oneTimePasscode;
      return this;
    }
  
    /**
     * A random number sent to the mobile phone number of the shopper to verify the payment.
     *
     * @return oneTimePasscode A random number sent to the mobile phone number of the shopper to
     *     verify the payment.
     */
    @JsonProperty(JSON_PROPERTY_ONE_TIME_PASSCODE)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public String getOneTimePasscode() {
      return oneTimePasscode;
    }
  
    /**
     * A random number sent to the mobile phone number of the shopper to verify the payment.
     *
     * @param oneTimePasscode A random number sent to the mobile phone number of the shopper to verify
     *     the payment.
     */
    @JsonProperty(JSON_PROPERTY_ONE_TIME_PASSCODE)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setOneTimePasscode(String oneTimePasscode) {
      this.oneTimePasscode = oneTimePasscode;
    }
  
    /**
     * PayPal-assigned ID for the order.
     *
     * @param orderID PayPal-assigned ID for the order.
     * @return the current {@code PaymentCompletionDetails} instance, allowing for method chaining
     */
    public PaymentCompletionDetails orderID(String orderID) {
      this.orderID = orderID;
      return this;
    }
  
    /**
     * PayPal-assigned ID for the order.
     *
     * @return orderID PayPal-assigned ID for the order.
     */
    @JsonProperty(JSON_PROPERTY_ORDER_I_D)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public String getOrderID() {
      return orderID;
    }
  
    /**
     * PayPal-assigned ID for the order.
     *
     * @param orderID PayPal-assigned ID for the order.
     */
    @JsonProperty(JSON_PROPERTY_ORDER_I_D)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setOrderID(String orderID) {
      this.orderID = orderID;
    }
  
    /**
     * PayPal-assigned ID for the payer (shopper).
     *
     * @param payerID PayPal-assigned ID for the payer (shopper).
     * @return the current {@code PaymentCompletionDetails} instance, allowing for method chaining
     */
    public PaymentCompletionDetails payerID(String payerID) {
      this.payerID = payerID;
      return this;
    }
  
    /**
     * PayPal-assigned ID for the payer (shopper).
     *
     * @return payerID PayPal-assigned ID for the payer (shopper).
     */
    @JsonProperty(JSON_PROPERTY_PAYER_I_D)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public String getPayerID() {
      return payerID;
    }
  
    /**
     * PayPal-assigned ID for the payer (shopper).
     *
     * @param payerID PayPal-assigned ID for the payer (shopper).
     */
    @JsonProperty(JSON_PROPERTY_PAYER_I_D)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setPayerID(String payerID) {
      this.payerID = payerID;
    }
  
    /**
     * Payload appended to the &#x60;returnURL&#x60; as a result of the redirect.
     *
     * @param payload Payload appended to the &#x60;returnURL&#x60; as a result of the redirect.
     * @return the current {@code PaymentCompletionDetails} instance, allowing for method chaining
     */
    public PaymentCompletionDetails payload(String payload) {
      this.payload = payload;
      return this;
    }
  
    /**
     * Payload appended to the &#x60;returnURL&#x60; as a result of the redirect.
     *
     * @return payload Payload appended to the &#x60;returnURL&#x60; as a result of the redirect.
     */
    @JsonProperty(JSON_PROPERTY_PAYLOAD)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public String getPayload() {
      return payload;
    }
  
    /**
     * Payload appended to the &#x60;returnURL&#x60; as a result of the redirect.
     *
     * @param payload Payload appended to the &#x60;returnURL&#x60; as a result of the redirect.
     */
    @JsonProperty(JSON_PROPERTY_PAYLOAD)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setPayload(String payload) {
      this.payload = payload;
    }
  
    /**
     * PayPal-generated ID for the payment.
     *
     * @param paymentID PayPal-generated ID for the payment.
     * @return the current {@code PaymentCompletionDetails} instance, allowing for method chaining
     */
    public PaymentCompletionDetails paymentID(String paymentID) {
      this.paymentID = paymentID;
      return this;
    }
  
    /**
     * PayPal-generated ID for the payment.
     *
     * @return paymentID PayPal-generated ID for the payment.
     */
    @JsonProperty(JSON_PROPERTY_PAYMENT_I_D)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public String getPaymentID() {
      return paymentID;
    }
  
    /**
     * PayPal-generated ID for the payment.
     *
     * @param paymentID PayPal-generated ID for the payment.
     */
    @JsonProperty(JSON_PROPERTY_PAYMENT_I_D)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setPaymentID(String paymentID) {
      this.paymentID = paymentID;
    }
  
    /**
     * Value passed from the WeChat MiniProgram &#x60;wx.requestPayment&#x60; **complete** callback.
     * Possible values: any value starting with &#x60;requestPayment:&#x60;.
     *
     * @param paymentStatus Value passed from the WeChat MiniProgram &#x60;wx.requestPayment&#x60;
     *     **complete** callback. Possible values: any value starting with
     *     &#x60;requestPayment:&#x60;.
     * @return the current {@code PaymentCompletionDetails} instance, allowing for method chaining
     */
    public PaymentCompletionDetails paymentStatus(String paymentStatus) {
      this.paymentStatus = paymentStatus;
      return this;
    }
  
    /**
     * Value passed from the WeChat MiniProgram &#x60;wx.requestPayment&#x60; **complete** callback.
     * Possible values: any value starting with &#x60;requestPayment:&#x60;.
     *
     * @return paymentStatus Value passed from the WeChat MiniProgram &#x60;wx.requestPayment&#x60;
     *     **complete** callback. Possible values: any value starting with
     *     &#x60;requestPayment:&#x60;.
     */
    @JsonProperty(JSON_PROPERTY_PAYMENT_STATUS)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public String getPaymentStatus() {
      return paymentStatus;
    }
  
    /**
     * Value passed from the WeChat MiniProgram &#x60;wx.requestPayment&#x60; **complete** callback.
     * Possible values: any value starting with &#x60;requestPayment:&#x60;.
     *
     * @param paymentStatus Value passed from the WeChat MiniProgram &#x60;wx.requestPayment&#x60;
     *     **complete** callback. Possible values: any value starting with
     *     &#x60;requestPayment:&#x60;.
     */
    @JsonProperty(JSON_PROPERTY_PAYMENT_STATUS)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setPaymentStatus(String paymentStatus) {
      this.paymentStatus = paymentStatus;
    }
  
    /**
     * The result of the redirect as appended to the &#x60;returnURL&#x60;.
     *
     * @param redirectResult The result of the redirect as appended to the &#x60;returnURL&#x60;.
     * @return the current {@code PaymentCompletionDetails} instance, allowing for method chaining
     */
    public PaymentCompletionDetails redirectResult(String redirectResult) {
      this.redirectResult = redirectResult;
      return this;
    }
  
    /**
     * The result of the redirect as appended to the &#x60;returnURL&#x60;.
     *
     * @return redirectResult The result of the redirect as appended to the &#x60;returnURL&#x60;.
     */
    @JsonProperty(JSON_PROPERTY_REDIRECT_RESULT)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public String getRedirectResult() {
      return redirectResult;
    }
  
    /**
     * The result of the redirect as appended to the &#x60;returnURL&#x60;.
     *
     * @param redirectResult The result of the redirect as appended to the &#x60;returnURL&#x60;.
     */
    @JsonProperty(JSON_PROPERTY_REDIRECT_RESULT)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setRedirectResult(String redirectResult) {
      this.redirectResult = redirectResult;
    }
  
    /**
     * Value you received from the WeChat Pay SDK.
     *
     * @param resultCode Value you received from the WeChat Pay SDK.
     * @return the current {@code PaymentCompletionDetails} instance, allowing for method chaining
     */
    public PaymentCompletionDetails resultCode(String resultCode) {
      this.resultCode = resultCode;
      return this;
    }
  
    /**
     * Value you received from the WeChat Pay SDK.
     *
     * @return resultCode Value you received from the WeChat Pay SDK.
     */
    @JsonProperty(JSON_PROPERTY_RESULT_CODE)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public String getResultCode() {
      return resultCode;
    }
  
    /**
     * Value you received from the WeChat Pay SDK.
     *
     * @param resultCode Value you received from the WeChat Pay SDK.
     */
    @JsonProperty(JSON_PROPERTY_RESULT_CODE)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setResultCode(String resultCode) {
      this.resultCode = resultCode;
    }
  
    /**
     * The query string as appended to the &#x60;returnURL&#x60; when using direct issuer links .
     *
     * @param returnUrlQueryString The query string as appended to the &#x60;returnURL&#x60; when
     *     using direct issuer links .
     * @return the current {@code PaymentCompletionDetails} instance, allowing for method chaining
     */
    public PaymentCompletionDetails returnUrlQueryString(String returnUrlQueryString) {
      this.returnUrlQueryString = returnUrlQueryString;
      return this;
    }
  
    /**
     * The query string as appended to the &#x60;returnURL&#x60; when using direct issuer links .
     *
     * @return returnUrlQueryString The query string as appended to the &#x60;returnURL&#x60; when
     *     using direct issuer links .
     */
    @JsonProperty(JSON_PROPERTY_RETURN_URL_QUERY_STRING)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public String getReturnUrlQueryString() {
      return returnUrlQueryString;
    }
  
    /**
     * The query string as appended to the &#x60;returnURL&#x60; when using direct issuer links .
     *
     * @param returnUrlQueryString The query string as appended to the &#x60;returnURL&#x60; when
     *     using direct issuer links .
     */
    @JsonProperty(JSON_PROPERTY_RETURN_URL_QUERY_STRING)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setReturnUrlQueryString(String returnUrlQueryString) {
      this.returnUrlQueryString = returnUrlQueryString;
    }
  
    /**
     * Base64-encoded string returned by the Component after the challenge flow. It contains the
     * following parameters: &#x60;transStatus&#x60;, &#x60;authorisationToken&#x60;.
     *
     * @param threeDSResult Base64-encoded string returned by the Component after the challenge flow.
     *     It contains the following parameters: &#x60;transStatus&#x60;,
     *     &#x60;authorisationToken&#x60;.
     * @return the current {@code PaymentCompletionDetails} instance, allowing for method chaining
     */
    public PaymentCompletionDetails threeDSResult(String threeDSResult) {
      this.threeDSResult = threeDSResult;
      return this;
    }
  
    /**
     * Base64-encoded string returned by the Component after the challenge flow. It contains the
     * following parameters: &#x60;transStatus&#x60;, &#x60;authorisationToken&#x60;.
     *
     * @return threeDSResult Base64-encoded string returned by the Component after the challenge flow.
     *     It contains the following parameters: &#x60;transStatus&#x60;,
     *     &#x60;authorisationToken&#x60;.
     */
    @JsonProperty(JSON_PROPERTY_THREE_D_S_RESULT)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public String getThreeDSResult() {
      return threeDSResult;
    }
  
    /**
     * Base64-encoded string returned by the Component after the challenge flow. It contains the
     * following parameters: &#x60;transStatus&#x60;, &#x60;authorisationToken&#x60;.
     *
     * @param threeDSResult Base64-encoded string returned by the Component after the challenge flow.
     *     It contains the following parameters: &#x60;transStatus&#x60;,
     *     &#x60;authorisationToken&#x60;.
     */
    @JsonProperty(JSON_PROPERTY_THREE_D_S_RESULT)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setThreeDSResult(String threeDSResult) {
      this.threeDSResult = threeDSResult;
    }
  
    /**
     * Base64-encoded string returned by the Component after the challenge flow. It contains the
     * following parameter: &#x60;transStatus&#x60;.
     *
     * @param threeds2ChallengeResult Base64-encoded string returned by the Component after the
     *     challenge flow. It contains the following parameter: &#x60;transStatus&#x60;.
     * @return the current {@code PaymentCompletionDetails} instance, allowing for method chaining
     */
    public PaymentCompletionDetails threeds2ChallengeResult(String threeds2ChallengeResult) {
      this.threeds2ChallengeResult = threeds2ChallengeResult;
      return this;
    }
  
    /**
     * Base64-encoded string returned by the Component after the challenge flow. It contains the
     * following parameter: &#x60;transStatus&#x60;.
     *
     * @return threeds2ChallengeResult Base64-encoded string returned by the Component after the
     *     challenge flow. It contains the following parameter: &#x60;transStatus&#x60;.
     */
    @JsonProperty(JSON_PROPERTY_THREEDS2_CHALLENGE_RESULT)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public String getThreeds2ChallengeResult() {
      return threeds2ChallengeResult;
    }
  
    /**
     * Base64-encoded string returned by the Component after the challenge flow. It contains the
     * following parameter: &#x60;transStatus&#x60;.
     *
     * @param threeds2ChallengeResult Base64-encoded string returned by the Component after the
     *     challenge flow. It contains the following parameter: &#x60;transStatus&#x60;.
     */
    @JsonProperty(JSON_PROPERTY_THREEDS2_CHALLENGE_RESULT)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setThreeds2ChallengeResult(String threeds2ChallengeResult) {
      this.threeds2ChallengeResult = threeds2ChallengeResult;
    }
  
    /**
     * Base64-encoded string returned by the Component after the challenge flow. It contains the
     * following parameter: &#x60;threeDSCompInd&#x60;.
     *
     * @param threeds2Fingerprint Base64-encoded string returned by the Component after the challenge
     *     flow. It contains the following parameter: &#x60;threeDSCompInd&#x60;.
     * @return the current {@code PaymentCompletionDetails} instance, allowing for method chaining
     */
    public PaymentCompletionDetails threeds2Fingerprint(String threeds2Fingerprint) {
      this.threeds2Fingerprint = threeds2Fingerprint;
      return this;
    }
  
    /**
     * Base64-encoded string returned by the Component after the challenge flow. It contains the
     * following parameter: &#x60;threeDSCompInd&#x60;.
     *
     * @return threeds2Fingerprint Base64-encoded string returned by the Component after the challenge
     *     flow. It contains the following parameter: &#x60;threeDSCompInd&#x60;.
     */
    @JsonProperty(JSON_PROPERTY_THREEDS2_FINGERPRINT)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public String getThreeds2Fingerprint() {
      return threeds2Fingerprint;
    }
  
    /**
     * Base64-encoded string returned by the Component after the challenge flow. It contains the
     * following parameter: &#x60;threeDSCompInd&#x60;.
     *
     * @param threeds2Fingerprint Base64-encoded string returned by the Component after the challenge
     *     flow. It contains the following parameter: &#x60;threeDSCompInd&#x60;.
     */
    @JsonProperty(JSON_PROPERTY_THREEDS2_FINGERPRINT)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setThreeds2Fingerprint(String threeds2Fingerprint) {
      this.threeds2Fingerprint = threeds2Fingerprint;
    }
  
    /**
     * PayPalv2-generated token for recurring payments.
     *
     * @param vaultToken PayPalv2-generated token for recurring payments.
     * @return the current {@code PaymentCompletionDetails} instance, allowing for method chaining
     */
    public PaymentCompletionDetails vaultToken(String vaultToken) {
      this.vaultToken = vaultToken;
      return this;
    }
  
    /**
     * PayPalv2-generated token for recurring payments.
     *
     * @return vaultToken PayPalv2-generated token for recurring payments.
     */
    @JsonProperty(JSON_PROPERTY_VAULT_TOKEN)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public String getVaultToken() {
      return vaultToken;
    }
  
    /**
     * PayPalv2-generated token for recurring payments.
     *
     * @param vaultToken PayPalv2-generated token for recurring payments.
     */
    @JsonProperty(JSON_PROPERTY_VAULT_TOKEN)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setVaultToken(String vaultToken) {
      this.vaultToken = vaultToken;
    }
  
    /** Return true if this PaymentCompletionDetails object is equal to o. */
    @Override
    public boolean equals(Object o) {
      if (this == o) {
        return true;
      }
      if (o == null || getClass() != o.getClass()) {
        return false;
      }
      PaymentCompletionDetails paymentCompletionDetails = (PaymentCompletionDetails) o;
      return Objects.equals(this.MD, paymentCompletionDetails.MD)
          && Objects.equals(this.paReq, paymentCompletionDetails.paReq)
          && Objects.equals(this.paRes, paymentCompletionDetails.paRes)
          && Objects.equals(this.authorizationToken, paymentCompletionDetails.authorizationToken)
          && Objects.equals(this.billingToken, paymentCompletionDetails.billingToken)
          && Objects.equals(this.cupsecureplusSmscode, paymentCompletionDetails.cupsecureplusSmscode)
          && Objects.equals(
              this.facilitatorAccessToken, paymentCompletionDetails.facilitatorAccessToken)
          && Objects.equals(this.oneTimePasscode, paymentCompletionDetails.oneTimePasscode)
          && Objects.equals(this.orderID, paymentCompletionDetails.orderID)
          && Objects.equals(this.payerID, paymentCompletionDetails.payerID)
          && Objects.equals(this.payload, paymentCompletionDetails.payload)
          && Objects.equals(this.paymentID, paymentCompletionDetails.paymentID)
          && Objects.equals(this.paymentStatus, paymentCompletionDetails.paymentStatus)
          && Objects.equals(this.redirectResult, paymentCompletionDetails.redirectResult)
          && Objects.equals(this.resultCode, paymentCompletionDetails.resultCode)
          && Objects.equals(this.returnUrlQueryString, paymentCompletionDetails.returnUrlQueryString)
          && Objects.equals(this.threeDSResult, paymentCompletionDetails.threeDSResult)
          && Objects.equals(
              this.threeds2ChallengeResult, paymentCompletionDetails.threeds2ChallengeResult)
          && Objects.equals(this.threeds2Fingerprint, paymentCompletionDetails.threeds2Fingerprint)
          && Objects.equals(this.vaultToken, paymentCompletionDetails.vaultToken);
    }
  
    @Override
    public int hashCode() {
      return Objects.hash(
          MD,
          paReq,
          paRes,
          authorizationToken,
          billingToken,
          cupsecureplusSmscode,
          facilitatorAccessToken,
          oneTimePasscode,
          orderID,
          payerID,
          payload,
          paymentID,
          paymentStatus,
          redirectResult,
          resultCode,
          returnUrlQueryString,
          threeDSResult,
          threeds2ChallengeResult,
          threeds2Fingerprint,
          vaultToken);
    }
  
    @Override
    public String toString() {
      StringBuilder sb = new StringBuilder();
      sb.append("class PaymentCompletionDetails {\n");
      sb.append("    MD: ").append(toIndentedString(MD)).append("\n");
      sb.append("    paReq: ").append(toIndentedString(paReq)).append("\n");
      sb.append("    paRes: ").append(toIndentedString(paRes)).append("\n");
      sb.append("    authorizationToken: ").append(toIndentedString(authorizationToken)).append("\n");
      sb.append("    billingToken: ").append(toIndentedString(billingToken)).append("\n");
      sb.append("    cupsecureplusSmscode: ")
          .append(toIndentedString(cupsecureplusSmscode))
          .append("\n");
      sb.append("    facilitatorAccessToken: ")
          .append(toIndentedString(facilitatorAccessToken))
          .append("\n");
      sb.append("    oneTimePasscode: ").append(toIndentedString(oneTimePasscode)).append("\n");
      sb.append("    orderID: ").append(toIndentedString(orderID)).append("\n");
      sb.append("    payerID: ").append(toIndentedString(payerID)).append("\n");
      sb.append("    payload: ").append(toIndentedString(payload)).append("\n");
      sb.append("    paymentID: ").append(toIndentedString(paymentID)).append("\n");
      sb.append("    paymentStatus: ").append(toIndentedString(paymentStatus)).append("\n");
      sb.append("    redirectResult: ").append(toIndentedString(redirectResult)).append("\n");
      sb.append("    resultCode: ").append(toIndentedString(resultCode)).append("\n");
      sb.append("    returnUrlQueryString: ")
          .append(toIndentedString(returnUrlQueryString))
          .append("\n");
      sb.append("    threeDSResult: ").append(toIndentedString(threeDSResult)).append("\n");
      sb.append("    threeds2ChallengeResult: ")
          .append(toIndentedString(threeds2ChallengeResult))
          .append("\n");
      sb.append("    threeds2Fingerprint: ")
          .append(toIndentedString(threeds2Fingerprint))
          .append("\n");
      sb.append("    vaultToken: ").append(toIndentedString(vaultToken)).append("\n");
      sb.append("}");
      return sb.toString();
    }
  
    /**
     * Convert the given object to string with each line indented by 4 spaces (except the first line).
     */
    private String toIndentedString(Object o) {
      if (o == null) {
        return "null";
      }
      return o.toString().replace("\n", "\n    ");
    }
  
    /**
     * Create an instance of PaymentCompletionDetails given an JSON string
     *
     * @param jsonString JSON string
     * @return An instance of PaymentCompletionDetails
     * @throws JsonProcessingException if the JSON string is invalid with respect to
     *     PaymentCompletionDetails
     */
    public static PaymentCompletionDetails fromJson(String jsonString)
        throws JsonProcessingException {
      return JSON.getMapper().readValue(jsonString, PaymentCompletionDetails.class);
    }
  
    /**
     * Convert an instance of PaymentCompletionDetails to an JSON string
     *
     * @return JSON string
     */
    public String toJson() throws JsonProcessingException {
      return JSON.getMapper().writeValueAsString(this);
    }
  }
  