content: /*
   * 支付宝开放平台API
   * 支付宝开放平台v3协议文档
   *
   * The version of the OpenAPI document: 2025-08-26
   * 
   *
   * 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.alipay.v3.model;
  
  import java.util.Objects;
  import java.util.Arrays;
  import com.alipay.v3.model.BkAgentRespInfo;
  import com.alipay.v3.model.ChargeInfo;
  import com.alipay.v3.model.EnterprisePayInfo;
  import com.alipay.v3.model.FulfillmentDetail;
  import com.alipay.v3.model.GoodsDetail;
  import com.alipay.v3.model.HbFqPayInfo;
  import com.alipay.v3.model.IntactChargeInfo;
  import com.alipay.v3.model.PaymentInfoWithId;
  import com.alipay.v3.model.TapPayInfo;
  import com.alipay.v3.model.TradeFundBill;
  import com.alipay.v3.model.TradeSettleInfo;
  import com.alipay.v3.model.VoucherDetail;
  import com.google.gson.TypeAdapter;
  import com.google.gson.annotations.JsonAdapter;
  import com.google.gson.annotations.SerializedName;
  import com.google.gson.stream.JsonReader;
  import com.google.gson.stream.JsonWriter;
  import io.swagger.annotations.ApiModel;
  import io.swagger.annotations.ApiModelProperty;
  import java.io.IOException;
  import java.util.ArrayList;
  import java.util.List;
  
  import com.google.gson.Gson;
  import com.google.gson.GsonBuilder;
  import com.google.gson.JsonArray;
  import com.google.gson.JsonDeserializationContext;
  import com.google.gson.JsonDeserializer;
  import com.google.gson.JsonElement;
  import com.google.gson.JsonObject;
  import com.google.gson.JsonParseException;
  import com.google.gson.TypeAdapterFactory;
  import com.google.gson.reflect.TypeToken;
  
  import java.lang.reflect.Type;
  import java.util.HashMap;
  import java.util.HashSet;
  import java.util.Map;
  import java.util.Map.Entry;
  import java.util.Set;
  
  import com.alipay.v3.JSON;
  
  /**
   * AlipayTradeQueryResponseModel
   */
  @javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen")
  public class AlipayTradeQueryResponseModel {
    public static final String SERIALIZED_NAME_ADDITIONAL_STATUS = "additional_status";
    @SerializedName(SERIALIZED_NAME_ADDITIONAL_STATUS)
    private String additionalStatus;
  
    public static final String SERIALIZED_NAME_ALIPAY_STORE_ID = "alipay_store_id";
    @SerializedName(SERIALIZED_NAME_ALIPAY_STORE_ID)
    private String alipayStoreId;
  
    public static final String SERIALIZED_NAME_ALIPAY_SUB_MERCHANT_ID = "alipay_sub_merchant_id";
    @SerializedName(SERIALIZED_NAME_ALIPAY_SUB_MERCHANT_ID)
    private String alipaySubMerchantId;
  
    public static final String SERIALIZED_NAME_ASYNC_PAY_APPLY_STATUS = "async_pay_apply_status";
    @SerializedName(SERIALIZED_NAME_ASYNC_PAY_APPLY_STATUS)
    private String asyncPayApplyStatus;
  
    public static final String SERIALIZED_NAME_AUTH_TRADE_PAY_MODE = "auth_trade_pay_mode";
    @SerializedName(SERIALIZED_NAME_AUTH_TRADE_PAY_MODE)
    private String authTradePayMode;
  
    public static final String SERIALIZED_NAME_BIZ_SETTLE_MODE = "biz_settle_mode";
    @SerializedName(SERIALIZED_NAME_BIZ_SETTLE_MODE)
    private String bizSettleMode;
  
    public static final String SERIALIZED_NAME_BKAGENT_RESP_INFO = "bkagent_resp_info";
    @SerializedName(SERIALIZED_NAME_BKAGENT_RESP_INFO)
    private BkAgentRespInfo bkagentRespInfo;
  
    public static final String SERIALIZED_NAME_BODY = "body";
    @SerializedName(SERIALIZED_NAME_BODY)
    private String body;
  
    public static final String SERIALIZED_NAME_BUYER_LOGON_ID = "buyer_logon_id";
    @SerializedName(SERIALIZED_NAME_BUYER_LOGON_ID)
    private String buyerLogonId;
  
    public static final String SERIALIZED_NAME_BUYER_OPEN_ID = "buyer_open_id";
    @SerializedName(SERIALIZED_NAME_BUYER_OPEN_ID)
    private String buyerOpenId;
  
    public static final String SERIALIZED_NAME_BUYER_PAY_AMOUNT = "buyer_pay_amount";
    @SerializedName(SERIALIZED_NAME_BUYER_PAY_AMOUNT)
    private String buyerPayAmount;
  
    public static final String SERIALIZED_NAME_BUYER_USER_ID = "buyer_user_id";
    @SerializedName(SERIALIZED_NAME_BUYER_USER_ID)
    private String buyerUserId;
  
    public static final String SERIALIZED_NAME_BUYER_USER_NAME = "buyer_user_name";
    @SerializedName(SERIALIZED_NAME_BUYER_USER_NAME)
    private String buyerUserName;
  
    public static final String SERIALIZED_NAME_BUYER_USER_TYPE = "buyer_user_type";
    @SerializedName(SERIALIZED_NAME_BUYER_USER_TYPE)
    private String buyerUserType;
  
    public static final String SERIALIZED_NAME_CASHIER_TYPE = "cashier_type";
    @SerializedName(SERIALIZED_NAME_CASHIER_TYPE)
    private String cashierType;
  
    public static final String SERIALIZED_NAME_CHARGE_AMOUNT = "charge_amount";
    @SerializedName(SERIALIZED_NAME_CHARGE_AMOUNT)
    private String chargeAmount;
  
    public static final String SERIALIZED_NAME_CHARGE_FLAGS = "charge_flags";
    @SerializedName(SERIALIZED_NAME_CHARGE_FLAGS)
    private String chargeFlags;
  
    public static final String SERIALIZED_NAME_CHARGE_INFO_LIST = "charge_info_list";
    @SerializedName(SERIALIZED_NAME_CHARGE_INFO_LIST)
    private List<ChargeInfo> chargeInfoList = null;
  
    public static final String SERIALIZED_NAME_CREDIT_BIZ_ORDER_ID = "credit_biz_order_id";
    @SerializedName(SERIALIZED_NAME_CREDIT_BIZ_ORDER_ID)
    private String creditBizOrderId;
  
    public static final String SERIALIZED_NAME_CREDIT_PAY_MODE = "credit_pay_mode";
    @SerializedName(SERIALIZED_NAME_CREDIT_PAY_MODE)
    private String creditPayMode;
  
    public static final String SERIALIZED_NAME_DISCOUNT_AMOUNT = "discount_amount";
    @SerializedName(SERIALIZED_NAME_DISCOUNT_AMOUNT)
    private String discountAmount;
  
    public static final String SERIALIZED_NAME_DISCOUNT_GOODS_DETAIL = "discount_goods_detail";
    @SerializedName(SERIALIZED_NAME_DISCOUNT_GOODS_DETAIL)
    private String discountGoodsDetail;
  
    public static final String SERIALIZED_NAME_ENTERPRISE_PAY_INFO = "enterprise_pay_info";
    @SerializedName(SERIALIZED_NAME_ENTERPRISE_PAY_INFO)
    private EnterprisePayInfo enterprisePayInfo;
  
    public static final String SERIALIZED_NAME_EXT_INFOS = "ext_infos";
    @SerializedName(SERIALIZED_NAME_EXT_INFOS)
    private String extInfos;
  
    public static final String SERIALIZED_NAME_FULFILLMENT_DETAIL_LIST = "fulfillment_detail_list";
    @SerializedName(SERIALIZED_NAME_FULFILLMENT_DETAIL_LIST)
    private List<FulfillmentDetail> fulfillmentDetailList = null;
  
    public static final String SERIALIZED_NAME_FUND_BILL_LIST = "fund_bill_list";
    @SerializedName(SERIALIZED_NAME_FUND_BILL_LIST)
    private List<TradeFundBill> fundBillList = null;
  
    public static final String SERIALIZED_NAME_HB_FQ_PAY_INFO = "hb_fq_pay_info";
    @SerializedName(SERIALIZED_NAME_HB_FQ_PAY_INFO)
    private HbFqPayInfo hbFqPayInfo;
  
    public static final String SERIALIZED_NAME_HYB_AMOUNT = "hyb_amount";
    @SerializedName(SERIALIZED_NAME_HYB_AMOUNT)
    private String hybAmount;
  
    public static final String SERIALIZED_NAME_INDUSTRY_SEPC_DETAIL = "industry_sepc_detail";
    @SerializedName(SERIALIZED_NAME_INDUSTRY_SEPC_DETAIL)
    private String industrySepcDetail;
  
    public static final String SERIALIZED_NAME_INDUSTRY_SEPC_DETAIL_ACC = "industry_sepc_detail_acc";
    @SerializedName(SERIALIZED_NAME_INDUSTRY_SEPC_DETAIL_ACC)
    private String industrySepcDetailAcc;
  
    public static final String SERIALIZED_NAME_INDUSTRY_SEPC_DETAIL_GOV = "industry_sepc_detail_gov";
    @SerializedName(SERIALIZED_NAME_INDUSTRY_SEPC_DETAIL_GOV)
    private String industrySepcDetailGov;
  
    public static final String SERIALIZED_NAME_INTACT_CHARGE_INFO_LIST = "intact_charge_info_list";
    @SerializedName(SERIALIZED_NAME_INTACT_CHARGE_INFO_LIST)
    private List<IntactChargeInfo> intactChargeInfoList = null;
  
    public static final String SERIALIZED_NAME_INVOICE_AMOUNT = "invoice_amount";
    @SerializedName(SERIALIZED_NAME_INVOICE_AMOUNT)
    private String invoiceAmount;
  
    public static final String SERIALIZED_NAME_MDISCOUNT_AMOUNT = "mdiscount_amount";
    @SerializedName(SERIALIZED_NAME_MDISCOUNT_AMOUNT)
    private String mdiscountAmount;
  
    public static final String SERIALIZED_NAME_MEDICAL_INSURANCE_INFO = "medical_insurance_info";
    @SerializedName(SERIALIZED_NAME_MEDICAL_INSURANCE_INFO)
    private String medicalInsuranceInfo;
  
    public static final String SERIALIZED_NAME_OPEN_ID = "open_id";
    @SerializedName(SERIALIZED_NAME_OPEN_ID)
    private String openId;
  
    public static final String SERIALIZED_NAME_OUT_TRADE_NO = "out_trade_no";
    @SerializedName(SERIALIZED_NAME_OUT_TRADE_NO)
    private String outTradeNo;
  
    public static final String SERIALIZED_NAME_PASSBACK_PARAMS = "passback_params";
    @SerializedName(SERIALIZED_NAME_PASSBACK_PARAMS)
    private String passbackParams;
  
    public static final String SERIALIZED_NAME_PAY_AMOUNT = "pay_amount";
    @SerializedName(SERIALIZED_NAME_PAY_AMOUNT)
    private String payAmount;
  
    public static final String SERIALIZED_NAME_PAY_CURRENCY = "pay_currency";
    @SerializedName(SERIALIZED_NAME_PAY_CURRENCY)
    private String payCurrency;
  
    public static final String SERIALIZED_NAME_PAYMENT_INFO_WITH_ID_LIST = "payment_info_with_id_list";
    @SerializedName(SERIALIZED_NAME_PAYMENT_INFO_WITH_ID_LIST)
    private List<PaymentInfoWithId> paymentInfoWithIdList = null;
  
    public static final String SERIALIZED_NAME_PERIOD_SCENE = "period_scene";
    @SerializedName(SERIALIZED_NAME_PERIOD_SCENE)
    private String periodScene;
  
    public static final String SERIALIZED_NAME_POINT_AMOUNT = "point_amount";
    @SerializedName(SERIALIZED_NAME_POINT_AMOUNT)
    private String pointAmount;
  
    public static final String SERIALIZED_NAME_PRE_AUTH_PAY_AMOUNT = "pre_auth_pay_amount";
    @SerializedName(SERIALIZED_NAME_PRE_AUTH_PAY_AMOUNT)
    private String preAuthPayAmount;
  
    public static final String SERIALIZED_NAME_RECEIPT_AMOUNT = "receipt_amount";
    @SerializedName(SERIALIZED_NAME_RECEIPT_AMOUNT)
    private String receiptAmount;
  
    public static final String SERIALIZED_NAME_RECEIPT_CURRENCY_TYPE = "receipt_currency_type";
    @SerializedName(SERIALIZED_NAME_RECEIPT_CURRENCY_TYPE)
    private String receiptCurrencyType;
  
    public static final String SERIALIZED_NAME_REQ_GOODS_DETAIL = "req_goods_detail";
    @SerializedName(SERIALIZED_NAME_REQ_GOODS_DETAIL)
    private List<GoodsDetail> reqGoodsDetail = null;
  
    public static final String SERIALIZED_NAME_SEND_PAY_DATE = "send_pay_date";
    @SerializedName(SERIALIZED_NAME_SEND_PAY_DATE)
    private String sendPayDate;
  
    public static final String SERIALIZED_NAME_SETTLE_AMOUNT = "settle_amount";
    @SerializedName(SERIALIZED_NAME_SETTLE_AMOUNT)
    private String settleAmount;
  
    public static final String SERIALIZED_NAME_SETTLE_CURRENCY = "settle_currency";
    @SerializedName(SERIALIZED_NAME_SETTLE_CURRENCY)
    private String settleCurrency;
  
    public static final String SERIALIZED_NAME_SETTLE_TRANS_RATE = "settle_trans_rate";
    @SerializedName(SERIALIZED_NAME_SETTLE_TRANS_RATE)
    private String settleTransRate;
  
    public static final String SERIALIZED_NAME_SETTLEMENT_ID = "settlement_id";
    @SerializedName(SERIALIZED_NAME_SETTLEMENT_ID)
    private String settlementId;
  
    public static final String SERIALIZED_NAME_STORE_ID = "store_id";
    @SerializedName(SERIALIZED_NAME_STORE_ID)
    private String storeId;
  
    public static final String SERIALIZED_NAME_STORE_NAME = "store_name";
    @SerializedName(SERIALIZED_NAME_STORE_NAME)
    private String storeName;
  
    public static final String SERIALIZED_NAME_SUBJECT = "subject";
    @SerializedName(SERIALIZED_NAME_SUBJECT)
    private String subject;
  
    public static final String SERIALIZED_NAME_TAP_PAY_INFO = "tap_pay_info";
    @SerializedName(SERIALIZED_NAME_TAP_PAY_INFO)
    private TapPayInfo tapPayInfo;
  
    public static final String SERIALIZED_NAME_TERMINAL_ID = "terminal_id";
    @SerializedName(SERIALIZED_NAME_TERMINAL_ID)
    private String terminalId;
  
    public static final String SERIALIZED_NAME_TOTAL_AMOUNT = "total_amount";
    @SerializedName(SERIALIZED_NAME_TOTAL_AMOUNT)
    private String totalAmount;
  
    public static final String SERIALIZED_NAME_TRADE_NO = "trade_no";
    @SerializedName(SERIALIZED_NAME_TRADE_NO)
    private String tradeNo;
  
    public static final String SERIALIZED_NAME_TRADE_SETTLE_INFO = "trade_settle_info";
    @SerializedName(SERIALIZED_NAME_TRADE_SETTLE_INFO)
    private TradeSettleInfo tradeSettleInfo;
  
    public static final String SERIALIZED_NAME_TRADE_STATUS = "trade_status";
    @SerializedName(SERIALIZED_NAME_TRADE_STATUS)
    private String tradeStatus;
  
    public static final String SERIALIZED_NAME_TRANS_CURRENCY = "trans_currency";
    @SerializedName(SERIALIZED_NAME_TRANS_CURRENCY)
    private String transCurrency;
  
    public static final String SERIALIZED_NAME_TRANS_PAY_RATE = "trans_pay_rate";
    @SerializedName(SERIALIZED_NAME_TRANS_PAY_RATE)
    private String transPayRate;
  
    public static final String SERIALIZED_NAME_VOUCHER_DETAIL_LIST = "voucher_detail_list";
    @SerializedName(SERIALIZED_NAME_VOUCHER_DETAIL_LIST)
    private List<VoucherDetail> voucherDetailList = null;
  
    public AlipayTradeQueryResponseModel() { 
    }
  
    public AlipayTradeQueryResponseModel additionalStatus(String additionalStatus) {
      
      this.additionalStatus = additionalStatus;
      return this;
    }
  
     /**
     * 交易附加状态： SELLER_NOT_RECEIVED（买家已付款，卖家未收款）；
     * @return additionalStatus
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "SELLER_NOT_RECEIVED", value = "交易附加状态： SELLER_NOT_RECEIVED（买家已付款，卖家未收款）；")
  
    public String getAdditionalStatus() {
      return additionalStatus;
    }
  
  
    public void setAdditionalStatus(String additionalStatus) {
      this.additionalStatus = additionalStatus;
    }
  
  
    public AlipayTradeQueryResponseModel alipayStoreId(String alipayStoreId) {
      
      this.alipayStoreId = alipayStoreId;
      return this;
    }
  
     /**
     * 支付宝店铺编号
     * @return alipayStoreId
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "2015040900077001000100001232", value = "支付宝店铺编号")
  
    public String getAlipayStoreId() {
      return alipayStoreId;
    }
  
  
    public void setAlipayStoreId(String alipayStoreId) {
      this.alipayStoreId = alipayStoreId;
    }
  
  
    public AlipayTradeQueryResponseModel alipaySubMerchantId(String alipaySubMerchantId) {
      
      this.alipaySubMerchantId = alipaySubMerchantId;
      return this;
    }
  
     /**
     * 间连商户在支付宝端的商户编号；  只在银行间联交易场景下返回该信息；
     * @return alipaySubMerchantId
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "2088301372182171", value = "间连商户在支付宝端的商户编号；  只在银行间联交易场景下返回该信息；")
  
    public String getAlipaySubMerchantId() {
      return alipaySubMerchantId;
    }
  
  
    public void setAlipaySubMerchantId(String alipaySubMerchantId) {
      this.alipaySubMerchantId = alipaySubMerchantId;
    }
  
  
    public AlipayTradeQueryResponseModel asyncPayApplyStatus(String asyncPayApplyStatus) {
      
      this.asyncPayApplyStatus = asyncPayApplyStatus;
      return this;
    }
  
     /**
     * 异步支付受理状态，仅异步支付模式且query_options指定async_pay_info时返回。S：受理成功，支付宝内部会在一定期限内捞起任务推进支付，直到支付成功或超出可重试期限；其它：受理结果未知，可重试查询。
     * @return asyncPayApplyStatus
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "S", value = "异步支付受理状态，仅异步支付模式且query_options指定async_pay_info时返回。S：受理成功，支付宝内部会在一定期限内捞起任务推进支付，直到支付成功或超出可重试期限；其它：受理结果未知，可重试查询。")
  
    public String getAsyncPayApplyStatus() {
      return asyncPayApplyStatus;
    }
  
  
    public void setAsyncPayApplyStatus(String asyncPayApplyStatus) {
      this.asyncPayApplyStatus = asyncPayApplyStatus;
    }
  
  
    public AlipayTradeQueryResponseModel authTradePayMode(String authTradePayMode) {
      
      this.authTradePayMode = authTradePayMode;
      return this;
    }
  
     /**
     * 预授权支付模式，该参数仅在信用预授权支付场景下返回。信用预授权支付：CREDIT_PREAUTH_PAY
     * @return authTradePayMode
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "CREDIT_PREAUTH_PAY", value = "预授权支付模式，该参数仅在信用预授权支付场景下返回。信用预授权支付：CREDIT_PREAUTH_PAY")
  
    public String getAuthTradePayMode() {
      return authTradePayMode;
    }
  
  
    public void setAuthTradePayMode(String authTradePayMode) {
      this.authTradePayMode = authTradePayMode;
    }
  
  
    public AlipayTradeQueryResponseModel bizSettleMode(String bizSettleMode) {
      
      this.bizSettleMode = bizSettleMode;
      return this;
    }
  
     /**
     * 账期结算标识，指已完成支付的订单会进行账期管控，不会实时结算。该参数目前会在使用小程序交易组件场景下返回
     * @return bizSettleMode
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "PERIOD", value = "账期结算标识，指已完成支付的订单会进行账期管控，不会实时结算。该参数目前会在使用小程序交易组件场景下返回")
  
    public String getBizSettleMode() {
      return bizSettleMode;
    }
  
  
    public void setBizSettleMode(String bizSettleMode) {
      this.bizSettleMode = bizSettleMode;
    }
  
  
    public AlipayTradeQueryResponseModel bkagentRespInfo(BkAgentRespInfo bkagentRespInfo) {
      
      this.bkagentRespInfo = bkagentRespInfo;
      return this;
    }
  
     /**
     * Get bkagentRespInfo
     * @return bkagentRespInfo
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(value = "")
  
    public BkAgentRespInfo getBkagentRespInfo() {
      return bkagentRespInfo;
    }
  
  
    public void setBkagentRespInfo(BkAgentRespInfo bkagentRespInfo) {
      this.bkagentRespInfo = bkagentRespInfo;
    }
  
  
    public AlipayTradeQueryResponseModel body(String body) {
      
      this.body = body;
      return this;
    }
  
     /**
     * 订单描述； 只在银行间联交易场景下返回该信息；
     * @return body
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "Iphone6 16G", value = "订单描述； 只在银行间联交易场景下返回该信息；")
  
    public String getBody() {
      return body;
    }
  
  
    public void setBody(String body) {
      this.body = body;
    }
  
  
    public AlipayTradeQueryResponseModel buyerLogonId(String buyerLogonId) {
      
      this.buyerLogonId = buyerLogonId;
      return this;
    }
  
     /**
     * 买家支付宝账号
     * @return buyerLogonId
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "159****5620", value = "买家支付宝账号")
  
    public String getBuyerLogonId() {
      return buyerLogonId;
    }
  
  
    public void setBuyerLogonId(String buyerLogonId) {
      this.buyerLogonId = buyerLogonId;
    }
  
  
    public AlipayTradeQueryResponseModel buyerOpenId(String buyerOpenId) {
      
      this.buyerOpenId = buyerOpenId;
      return this;
    }
  
     /**
     * 买家支付宝用户唯一标识
     * @return buyerOpenId
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "01501o8f93I3nJAGB1jG4ONxtxV25DCN3Gec3uggnC4CJU0", value = "买家支付宝用户唯一标识")
  
    public String getBuyerOpenId() {
      return buyerOpenId;
    }
  
  
    public void setBuyerOpenId(String buyerOpenId) {
      this.buyerOpenId = buyerOpenId;
    }
  
  
    public AlipayTradeQueryResponseModel buyerPayAmount(String buyerPayAmount) {
      
      this.buyerPayAmount = buyerPayAmount;
      return this;
    }
  
     /**
     * 买家实付金额，单位为元，两位小数。该金额代表该笔交易买家实际支付的金额，不包含商户折扣等金额
     * @return buyerPayAmount
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "8.88", value = "买家实付金额，单位为元，两位小数。该金额代表该笔交易买家实际支付的金额，不包含商户折扣等金额")
  
    public String getBuyerPayAmount() {
      return buyerPayAmount;
    }
  
  
    public void setBuyerPayAmount(String buyerPayAmount) {
      this.buyerPayAmount = buyerPayAmount;
    }
  
  
    public AlipayTradeQueryResponseModel buyerUserId(String buyerUserId) {
      
      this.buyerUserId = buyerUserId;
      return this;
    }
  
     /**
     * 买家在支付宝的用户id
     * @return buyerUserId
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "2088101117955611", value = "买家在支付宝的用户id")
  
    public String getBuyerUserId() {
      return buyerUserId;
    }
  
  
    public void setBuyerUserId(String buyerUserId) {
      this.buyerUserId = buyerUserId;
    }
  
  
    public AlipayTradeQueryResponseModel buyerUserName(String buyerUserName) {
      
      this.buyerUserName = buyerUserName;
      return this;
    }
  
     /**
     * 买家名称；  买家为个人用户时为买家姓名，买家为企业用户时为企业名称；  默认不返回该信息，需与支付宝约定后配置返回；
     * @return buyerUserName
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "菜鸟网络有限公司", value = "买家名称；  买家为个人用户时为买家姓名，买家为企业用户时为企业名称；  默认不返回该信息，需与支付宝约定后配置返回；")
  
    public String getBuyerUserName() {
      return buyerUserName;
    }
  
  
    public void setBuyerUserName(String buyerUserName) {
      this.buyerUserName = buyerUserName;
    }
  
  
    public AlipayTradeQueryResponseModel buyerUserType(String buyerUserType) {
      
      this.buyerUserType = buyerUserType;
      return this;
    }
  
     /**
     * 买家用户类型。CORPORATE:企业用户；PRIVATE:个人用户。
     * @return buyerUserType
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "PRIVATE", value = "买家用户类型。CORPORATE:企业用户；PRIVATE:个人用户。")
  
    public String getBuyerUserType() {
      return buyerUserType;
    }
  
  
    public void setBuyerUserType(String buyerUserType) {
      this.buyerUserType = buyerUserType;
    }
  
  
    public AlipayTradeQueryResponseModel cashierType(String cashierType) {
      
      this.cashierType = cashierType;
      return this;
    }
  
     /**
     * 收银台类型。  用户支付的收银台类型，取值如下：  APP：支付宝APP收银台支付；  WAP：支付H5收银台支付；  注：只有在无线产品支付接口请求中query_options指定cashier_type才返回该字段。
     * @return cashierType
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "APP", value = "收银台类型。  用户支付的收银台类型，取值如下：  APP：支付宝APP收银台支付；  WAP：支付H5收银台支付；  注：只有在无线产品支付接口请求中query_options指定cashier_type才返回该字段。")
  
    public String getCashierType() {
      return cashierType;
    }
  
  
    public void setCashierType(String cashierType) {
      this.cashierType = cashierType;
    }
  
  
    public AlipayTradeQueryResponseModel chargeAmount(String chargeAmount) {
      
      this.chargeAmount = chargeAmount;
      return this;
    }
  
     /**
     * 该笔交易针对收款方的收费金额；单位：元。  只在银行间联交易场景下返回该信息；
     * @return chargeAmount
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "8.88", value = "该笔交易针对收款方的收费金额；单位：元。  只在银行间联交易场景下返回该信息；")
  
    public String getChargeAmount() {
      return chargeAmount;
    }
  
  
    public void setChargeAmount(String chargeAmount) {
      this.chargeAmount = chargeAmount;
    }
  
  
    public AlipayTradeQueryResponseModel chargeFlags(String chargeFlags) {
      
      this.chargeFlags = chargeFlags;
      return this;
    }
  
     /**
     * 费率活动标识。 当交易享受特殊行业或活动费率时，返回该场景的标识。具体场景如下： trade_special_00：订单优惠费率； industry_special_on_00：线上行业特殊费率0； industry_special_on_01：线上行业特殊费率1； industry_special_00：线下行业特殊费率0； industry_special_01：线下行业特殊费率1； bluesea_1：蓝海活动优惠费率标签； 注：只在机构间联模式下返回，其它场景下不返回该字段； 
     * @return chargeFlags
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "bluesea_1", value = "费率活动标识。 当交易享受特殊行业或活动费率时，返回该场景的标识。具体场景如下： trade_special_00：订单优惠费率； industry_special_on_00：线上行业特殊费率0； industry_special_on_01：线上行业特殊费率1； industry_special_00：线下行业特殊费率0； industry_special_01：线下行业特殊费率1； bluesea_1：蓝海活动优惠费率标签； 注：只在机构间联模式下返回，其它场景下不返回该字段； ")
  
    public String getChargeFlags() {
      return chargeFlags;
    }
  
  
    public void setChargeFlags(String chargeFlags) {
      this.chargeFlags = chargeFlags;
    }
  
  
    public AlipayTradeQueryResponseModel chargeInfoList(List<ChargeInfo> chargeInfoList) {
      
      this.chargeInfoList = chargeInfoList;
      return this;
    }
  
    public AlipayTradeQueryResponseModel addChargeInfoListItem(ChargeInfo chargeInfoListItem) {
      if (this.chargeInfoList == null) {
        this.chargeInfoList = new ArrayList<>();
      }
      this.chargeInfoList.add(chargeInfoListItem);
      return this;
    }
  
     /**
     * 计费信息列表
     * @return chargeInfoList
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(value = "计费信息列表")
  
    public List<ChargeInfo> getChargeInfoList() {
      return chargeInfoList;
    }
  
  
    public void setChargeInfoList(List<ChargeInfo> chargeInfoList) {
      this.chargeInfoList = chargeInfoList;
    }
  
  
    public AlipayTradeQueryResponseModel creditBizOrderId(String creditBizOrderId) {
      
      this.creditBizOrderId = creditBizOrderId;
      return this;
    }
  
     /**
     * 信用业务单号。信用支付场景才有值，先用后付产品里是芝麻订单号。
     * @return creditBizOrderId
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "ZMCB99202103310000450000041833", value = "信用业务单号。信用支付场景才有值，先用后付产品里是芝麻订单号。")
  
    public String getCreditBizOrderId() {
      return creditBizOrderId;
    }
  
  
    public void setCreditBizOrderId(String creditBizOrderId) {
      this.creditBizOrderId = creditBizOrderId;
    }
  
  
    public AlipayTradeQueryResponseModel creditPayMode(String creditPayMode) {
      
      this.creditPayMode = creditPayMode;
      return this;
    }
  
     /**
     * 信用支付模式。表示订单是采用信用支付方式（支付时买家没有出资，需要后续履约）。\&quot;creditAdvanceV2\&quot;表示芝麻先用后付模式，用户后续需要履约扣款。 此字段只有信用支付场景才有值，商户需要根据字段值单独处理。此字段以后可能扩展其他值，建议商户使用白名单方式识别，对于未识别的值做失败处理，并联系支付宝技术支持人员。
     * @return creditPayMode
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "creditAdvanceV2", value = "信用支付模式。表示订单是采用信用支付方式（支付时买家没有出资，需要后续履约）。\"creditAdvanceV2\"表示芝麻先用后付模式，用户后续需要履约扣款。 此字段只有信用支付场景才有值，商户需要根据字段值单独处理。此字段以后可能扩展其他值，建议商户使用白名单方式识别，对于未识别的值做失败处理，并联系支付宝技术支持人员。")
  
    public String getCreditPayMode() {
      return creditPayMode;
    }
  
  
    public void setCreditPayMode(String creditPayMode) {
      this.creditPayMode = creditPayMode;
    }
  
  
    public AlipayTradeQueryResponseModel discountAmount(String discountAmount) {
      
      this.discountAmount = discountAmount;
      return this;
    }
  
     /**
     * 平台优惠金额。单位：元。
     * @return discountAmount
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "88.88", value = "平台优惠金额。单位：元。")
  
    public String getDiscountAmount() {
      return discountAmount;
    }
  
  
    public void setDiscountAmount(String discountAmount) {
      this.discountAmount = discountAmount;
    }
  
  
    public AlipayTradeQueryResponseModel discountGoodsDetail(String discountGoodsDetail) {
      
      this.discountGoodsDetail = discountGoodsDetail;
      return this;
    }
  
     /**
     * 本次交易支付所使用的单品券优惠的商品优惠信息。 只有在query_options中指定时才返回该字段信息。
     * @return discountGoodsDetail
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "[{\"goods_id\":\"STANDARD1026181538\",\"goods_name\":\"雪碧\",\"discount_amount\":\"100.00\",\"voucher_id\":\"2015102600073002039000002D5O\"}]", value = "本次交易支付所使用的单品券优惠的商品优惠信息。 只有在query_options中指定时才返回该字段信息。")
  
    public String getDiscountGoodsDetail() {
      return discountGoodsDetail;
    }
  
  
    public void setDiscountGoodsDetail(String discountGoodsDetail) {
      this.discountGoodsDetail = discountGoodsDetail;
    }
  
  
    public AlipayTradeQueryResponseModel enterprisePayInfo(EnterprisePayInfo enterprisePayInfo) {
      
      this.enterprisePayInfo = enterprisePayInfo;
      return this;
    }
  
     /**
     * Get enterprisePayInfo
     * @return enterprisePayInfo
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(value = "")
  
    public EnterprisePayInfo getEnterprisePayInfo() {
      return enterprisePayInfo;
    }
  
  
    public void setEnterprisePayInfo(EnterprisePayInfo enterprisePayInfo) {
      this.enterprisePayInfo = enterprisePayInfo;
    }
  
  
    public AlipayTradeQueryResponseModel extInfos(String extInfos) {
      
      this.extInfos = extInfos;
      return this;
    }
  
     /**
     * 交易额外信息，特殊场景下与支付宝约定返回。 json格式。
     * @return extInfos
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "{\"action\":\"cancel\"}", value = "交易额外信息，特殊场景下与支付宝约定返回。 json格式。")
  
    public String getExtInfos() {
      return extInfos;
    }
  
  
    public void setExtInfos(String extInfos) {
      this.extInfos = extInfos;
    }
  
  
    public AlipayTradeQueryResponseModel fulfillmentDetailList(List<FulfillmentDetail> fulfillmentDetailList) {
      
      this.fulfillmentDetailList = fulfillmentDetailList;
      return this;
    }
  
    public AlipayTradeQueryResponseModel addFulfillmentDetailListItem(FulfillmentDetail fulfillmentDetailListItem) {
      if (this.fulfillmentDetailList == null) {
        this.fulfillmentDetailList = new ArrayList<>();
      }
      this.fulfillmentDetailList.add(fulfillmentDetailListItem);
      return this;
    }
  
     /**
     * 履约详情列表。 只有入参的query_options中指定fulfillment_detail_list并且所查询的交易存在履约明细时才返回该字段信息。
     * @return fulfillmentDetailList
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(value = "履约详情列表。 只有入参的query_options中指定fulfillment_detail_list并且所查询的交易存在履约明细时才返回该字段信息。")
  
    public List<FulfillmentDetail> getFulfillmentDetailList() {
      return fulfillmentDetailList;
    }
  
  
    public void setFulfillmentDetailList(List<FulfillmentDetail> fulfillmentDetailList) {
      this.fulfillmentDetailList = fulfillmentDetailList;
    }
  
  
    public AlipayTradeQueryResponseModel fundBillList(List<TradeFundBill> fundBillList) {
      
      this.fundBillList = fundBillList;
      return this;
    }
  
    public AlipayTradeQueryResponseModel addFundBillListItem(TradeFundBill fundBillListItem) {
      if (this.fundBillList == null) {
        this.fundBillList = new ArrayList<>();
      }
      this.fundBillList.add(fundBillListItem);
      return this;
    }
  
     /**
     * 交易支付使用的资金渠道。 只有在签约中指定需要返回资金明细，或者入参的query_options中指定时才返回该字段信息。
     * @return fundBillList
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(value = "交易支付使用的资金渠道。 只有在签约中指定需要返回资金明细，或者入参的query_options中指定时才返回该字段信息。")
  
    public List<TradeFundBill> getFundBillList() {
      return fundBillList;
    }
  
  
    public void setFundBillList(List<TradeFundBill> fundBillList) {
      this.fundBillList = fundBillList;
    }
  
  
    public AlipayTradeQueryResponseModel hbFqPayInfo(HbFqPayInfo hbFqPayInfo) {
      
      this.hbFqPayInfo = hbFqPayInfo;
      return this;
    }
  
     /**
     * Get hbFqPayInfo
     * @return hbFqPayInfo
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(value = "")
  
    public HbFqPayInfo getHbFqPayInfo() {
      return hbFqPayInfo;
    }
  
  
    public void setHbFqPayInfo(HbFqPayInfo hbFqPayInfo) {
      this.hbFqPayInfo = hbFqPayInfo;
    }
  
  
    public AlipayTradeQueryResponseModel hybAmount(String hybAmount) {
      
      this.hybAmount = hybAmount;
      return this;
    }
  
     /**
     * 惠营宝回票金额。单位：元。
     * @return hybAmount
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "10.24", value = "惠营宝回票金额。单位：元。")
  
    public String getHybAmount() {
      return hybAmount;
    }
  
  
    public void setHybAmount(String hybAmount) {
      this.hybAmount = hybAmount;
    }
  
  
    public AlipayTradeQueryResponseModel industrySepcDetail(String industrySepcDetail) {
      
      this.industrySepcDetail = industrySepcDetail;
      return this;
    }
  
     /**
     * 行业特殊信息（例如在医保卡支付业务中，向用户返回医疗信息）。
     * @return industrySepcDetail
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "{\"registration_order_pay\":{\"brlx\":\"1\",\"cblx\":\"1\"}}", value = "行业特殊信息（例如在医保卡支付业务中，向用户返回医疗信息）。")
  
    public String getIndustrySepcDetail() {
      return industrySepcDetail;
    }
  
  
    public void setIndustrySepcDetail(String industrySepcDetail) {
      this.industrySepcDetail = industrySepcDetail;
    }
  
  
    public AlipayTradeQueryResponseModel industrySepcDetailAcc(String industrySepcDetailAcc) {
      
      this.industrySepcDetailAcc = industrySepcDetailAcc;
      return this;
    }
  
     /**
     * 行业特殊信息-个账相关
     * @return industrySepcDetailAcc
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "{\"registration_order_pay\":{\"brlx\":\"1\",\"cblx\":\"1\"}}", value = "行业特殊信息-个账相关")
  
    public String getIndustrySepcDetailAcc() {
      return industrySepcDetailAcc;
    }
  
  
    public void setIndustrySepcDetailAcc(String industrySepcDetailAcc) {
      this.industrySepcDetailAcc = industrySepcDetailAcc;
    }
  
  
    public AlipayTradeQueryResponseModel industrySepcDetailGov(String industrySepcDetailGov) {
      
      this.industrySepcDetailGov = industrySepcDetailGov;
      return this;
    }
  
     /**
     * 行业特殊信息-统筹相关
     * @return industrySepcDetailGov
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "{\"registration_order_pay\":{\"brlx\":\"1\",\"cblx\":\"1\"}}", value = "行业特殊信息-统筹相关")
  
    public String getIndustrySepcDetailGov() {
      return industrySepcDetailGov;
    }
  
  
    public void setIndustrySepcDetailGov(String industrySepcDetailGov) {
      this.industrySepcDetailGov = industrySepcDetailGov;
    }
  
  
    public AlipayTradeQueryResponseModel intactChargeInfoList(List<IntactChargeInfo> intactChargeInfoList) {
      
      this.intactChargeInfoList = intactChargeInfoList;
      return this;
    }
  
    public AlipayTradeQueryResponseModel addIntactChargeInfoListItem(IntactChargeInfo intactChargeInfoListItem) {
      if (this.intactChargeInfoList == null) {
        this.intactChargeInfoList = new ArrayList<>();
      }
      this.intactChargeInfoList.add(intactChargeInfoListItem);
      return this;
    }
  
     /**
     * 完整的收费信息
     * @return intactChargeInfoList
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(value = "完整的收费信息")
  
    public List<IntactChargeInfo> getIntactChargeInfoList() {
      return intactChargeInfoList;
    }
  
  
    public void setIntactChargeInfoList(List<IntactChargeInfo> intactChargeInfoList) {
      this.intactChargeInfoList = intactChargeInfoList;
    }
  
  
    public AlipayTradeQueryResponseModel invoiceAmount(String invoiceAmount) {
      
      this.invoiceAmount = invoiceAmount;
      return this;
    }
  
     /**
     * 交易中用户支付的可开具发票的金额，单位为元，两位小数。该金额代表该笔交易中可以给用户开具发票的金额
     * @return invoiceAmount
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "12.11", value = "交易中用户支付的可开具发票的金额，单位为元，两位小数。该金额代表该笔交易中可以给用户开具发票的金额")
  
    public String getInvoiceAmount() {
      return invoiceAmount;
    }
  
  
    public void setInvoiceAmount(String invoiceAmount) {
      this.invoiceAmount = invoiceAmount;
    }
  
  
    public AlipayTradeQueryResponseModel mdiscountAmount(String mdiscountAmount) {
      
      this.mdiscountAmount = mdiscountAmount;
      return this;
    }
  
     /**
     * 商家优惠金额。单位：元。
     * @return mdiscountAmount
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "88.88", value = "商家优惠金额。单位：元。")
  
    public String getMdiscountAmount() {
      return mdiscountAmount;
    }
  
  
    public void setMdiscountAmount(String mdiscountAmount) {
      this.mdiscountAmount = mdiscountAmount;
    }
  
  
    public AlipayTradeQueryResponseModel medicalInsuranceInfo(String medicalInsuranceInfo) {
      
      this.medicalInsuranceInfo = medicalInsuranceInfo;
      return this;
    }
  
     /**
     * 医保信息。入参的query_options中指定时才返回该字段信息。medicareCardType：医保卡类型，\&quot;1\&quot;:\&quot;亲情支付\&quot;,\&quot;0\&quot;:\&quot;本人支付\&quot;，为空默认为本人支付；medicareCardHolderHiddenName：医保卡持卡人姓名。
     * @return medicalInsuranceInfo
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "\"{\\\"medicareCardType\\\":\\\"1\\\",\\\"medicareCardHolderHiddenName\\\":\\\"**华\\\"}\"", value = "医保信息。入参的query_options中指定时才返回该字段信息。medicareCardType：医保卡类型，\"1\":\"亲情支付\",\"0\":\"本人支付\"，为空默认为本人支付；medicareCardHolderHiddenName：医保卡持卡人姓名。")
  
    public String getMedicalInsuranceInfo() {
      return medicalInsuranceInfo;
    }
  
  
    public void setMedicalInsuranceInfo(String medicalInsuranceInfo) {
      this.medicalInsuranceInfo = medicalInsuranceInfo;
    }
  
  
    public AlipayTradeQueryResponseModel openId(String openId) {
      
      this.openId = openId;
      return this;
    }
  
     /**
     * 买家支付宝用户号，该字段将废弃，不要使用
     * @return openId
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "2088102122524333", value = "买家支付宝用户号，该字段将废弃，不要使用")
  
    public String getOpenId() {
      return openId;
    }
  
  
    public void setOpenId(String openId) {
      this.openId = openId;
    }
  
  
    public AlipayTradeQueryResponseModel outTradeNo(String outTradeNo) {
      
      this.outTradeNo = outTradeNo;
      return this;
    }
  
     /**
     * 商家订单号
     * @return outTradeNo
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "6823789339978248", value = "商家订单号")
  
    public String getOutTradeNo() {
      return outTradeNo;
    }
  
  
    public void setOutTradeNo(String outTradeNo) {
      this.outTradeNo = outTradeNo;
    }
  
  
    public AlipayTradeQueryResponseModel passbackParams(String passbackParams) {
      
      this.passbackParams = passbackParams;
      return this;
    }
  
     /**
     * 公用回传参数。 返回支付时传入的passback_params参数信息
     * @return passbackParams
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "merchantBizType%3d3C%26merchantBizNo%3d2016010101111", value = "公用回传参数。 返回支付时传入的passback_params参数信息")
  
    public String getPassbackParams() {
      return passbackParams;
    }
  
  
    public void setPassbackParams(String passbackParams) {
      this.passbackParams = passbackParams;
    }
  
  
    public AlipayTradeQueryResponseModel payAmount(String payAmount) {
      
      this.payAmount = payAmount;
      return this;
    }
  
     /**
     * 支付币种订单金额
     * @return payAmount
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "8.88", value = "支付币种订单金额")
  
    public String getPayAmount() {
      return payAmount;
    }
  
  
    public void setPayAmount(String payAmount) {
      this.payAmount = payAmount;
    }
  
  
    public AlipayTradeQueryResponseModel payCurrency(String payCurrency) {
      
      this.payCurrency = payCurrency;
      return this;
    }
  
     /**
     * 订单支付币种
     * @return payCurrency
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "CNY", value = "订单支付币种")
  
    public String getPayCurrency() {
      return payCurrency;
    }
  
  
    public void setPayCurrency(String payCurrency) {
      this.payCurrency = payCurrency;
    }
  
  
    public AlipayTradeQueryResponseModel paymentInfoWithIdList(List<PaymentInfoWithId> paymentInfoWithIdList) {
      
      this.paymentInfoWithIdList = paymentInfoWithIdList;
      return this;
    }
  
    public AlipayTradeQueryResponseModel addPaymentInfoWithIdListItem(PaymentInfoWithId paymentInfoWithIdListItem) {
      if (this.paymentInfoWithIdList == null) {
        this.paymentInfoWithIdList = new ArrayList<>();
      }
      this.paymentInfoWithIdList.add(paymentInfoWithIdListItem);
      return this;
    }
  
     /**
     * 带支付宝支付id的信息，暂不对外开放
     * @return paymentInfoWithIdList
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(value = "带支付宝支付id的信息，暂不对外开放")
  
    public List<PaymentInfoWithId> getPaymentInfoWithIdList() {
      return paymentInfoWithIdList;
    }
  
  
    public void setPaymentInfoWithIdList(List<PaymentInfoWithId> paymentInfoWithIdList) {
      this.paymentInfoWithIdList = paymentInfoWithIdList;
    }
  
  
    public AlipayTradeQueryResponseModel periodScene(String periodScene) {
      
      this.periodScene = periodScene;
      return this;
    }
  
     /**
     * 该字段用于描述当前账期交易的场景。
     * @return periodScene
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "账期交易的场景。", value = "该字段用于描述当前账期交易的场景。")
  
    public String getPeriodScene() {
      return periodScene;
    }
  
  
    public void setPeriodScene(String periodScene) {
      this.periodScene = periodScene;
    }
  
  
    public AlipayTradeQueryResponseModel pointAmount(String pointAmount) {
      
      this.pointAmount = pointAmount;
      return this;
    }
  
     /**
     * 积分支付的金额，单位为元，两位小数。该金额代表该笔交易中用户使用积分支付的金额，比如集分宝或者支付宝实时优惠等
     * @return pointAmount
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "10", value = "积分支付的金额，单位为元，两位小数。该金额代表该笔交易中用户使用积分支付的金额，比如集分宝或者支付宝实时优惠等")
  
    public String getPointAmount() {
      return pointAmount;
    }
  
  
    public void setPointAmount(String pointAmount) {
      this.pointAmount = pointAmount;
    }
  
  
    public AlipayTradeQueryResponseModel preAuthPayAmount(String preAuthPayAmount) {
      
      this.preAuthPayAmount = preAuthPayAmount;
      return this;
    }
  
     /**
     * 当用户使用芝麻信用先享后付时，会返回该字段，代表整笔交易的原始待履约金额，单位元。
     * @return preAuthPayAmount
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "12.46", value = "当用户使用芝麻信用先享后付时，会返回该字段，代表整笔交易的原始待履约金额，单位元。")
  
    public String getPreAuthPayAmount() {
      return preAuthPayAmount;
    }
  
  
    public void setPreAuthPayAmount(String preAuthPayAmount) {
      this.preAuthPayAmount = preAuthPayAmount;
    }
  
  
    public AlipayTradeQueryResponseModel receiptAmount(String receiptAmount) {
      
      this.receiptAmount = receiptAmount;
      return this;
    }
  
     /**
     * 实收金额，单位为元，两位小数。该金额为本笔交易，商户账户能够实际收到的金额
     * @return receiptAmount
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "15.25", value = "实收金额，单位为元，两位小数。该金额为本笔交易，商户账户能够实际收到的金额")
  
    public String getReceiptAmount() {
      return receiptAmount;
    }
  
  
    public void setReceiptAmount(String receiptAmount) {
      this.receiptAmount = receiptAmount;
    }
  
  
    public AlipayTradeQueryResponseModel receiptCurrencyType(String receiptCurrencyType) {
      
      this.receiptCurrencyType = receiptCurrencyType;
      return this;
    }
  
     /**
     * 收款资金类型，当交易收款资金为数字人民币时返回值为“DC”，否则不返回该字段。
     * @return receiptCurrencyType
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "DC", value = "收款资金类型，当交易收款资金为数字人民币时返回值为“DC”，否则不返回该字段。")
  
    public String getReceiptCurrencyType() {
      return receiptCurrencyType;
    }
  
  
    public void setReceiptCurrencyType(String receiptCurrencyType) {
      this.receiptCurrencyType = receiptCurrencyType;
    }
  
  
    public AlipayTradeQueryResponseModel reqGoodsDetail(List<GoodsDetail> reqGoodsDetail) {
      
      this.reqGoodsDetail = reqGoodsDetail;
      return this;
    }
  
    public AlipayTradeQueryResponseModel addReqGoodsDetailItem(GoodsDetail reqGoodsDetailItem) {
      if (this.reqGoodsDetail == null) {
        this.reqGoodsDetail = new ArrayList<>();
      }
      this.reqGoodsDetail.add(reqGoodsDetailItem);
      return this;
    }
  
     /**
     * 支付请求的商品明细列表
     * @return reqGoodsDetail
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(value = "支付请求的商品明细列表")
  
    public List<GoodsDetail> getReqGoodsDetail() {
      return reqGoodsDetail;
    }
  
  
    public void setReqGoodsDetail(List<GoodsDetail> reqGoodsDetail) {
      this.reqGoodsDetail = reqGoodsDetail;
    }
  
  
    public AlipayTradeQueryResponseModel sendPayDate(String sendPayDate) {
      
      this.sendPayDate = sendPayDate;
      return this;
    }
  
     /**
     * 本次交易打款给卖家的时间
     * @return sendPayDate
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "2014-11-27 15:45:57", value = "本次交易打款给卖家的时间")
  
    public String getSendPayDate() {
      return sendPayDate;
    }
  
  
    public void setSendPayDate(String sendPayDate) {
      this.sendPayDate = sendPayDate;
    }
  
  
    public AlipayTradeQueryResponseModel settleAmount(String settleAmount) {
      
      this.settleAmount = settleAmount;
      return this;
    }
  
     /**
     * 结算币种订单金额
     * @return settleAmount
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "2.96", value = "结算币种订单金额")
  
    public String getSettleAmount() {
      return settleAmount;
    }
  
  
    public void setSettleAmount(String settleAmount) {
      this.settleAmount = settleAmount;
    }
  
  
    public AlipayTradeQueryResponseModel settleCurrency(String settleCurrency) {
      
      this.settleCurrency = settleCurrency;
      return this;
    }
  
     /**
     * 订单结算币种，对应支付接口传入的settle_currency，支持英镑：GBP、港币：HKD、美元：USD、新加坡元：SGD、日元：JPY、加拿大元：CAD、澳元：AUD、欧元：EUR、新西兰元：NZD、韩元：KRW、泰铢：THB、瑞士法郎：CHF、瑞典克朗：SEK、丹麦克朗：DKK、挪威克朗：NOK、马来西亚林吉特：MYR、印尼卢比：IDR、菲律宾比索：PHP、毛里求斯卢比：MUR、以色列新谢克尔：ILS、斯里兰卡卢比：LKR、俄罗斯卢布：RUB、阿联酋迪拉姆：AED、捷克克朗：CZK、南非兰特：ZAR
     * @return settleCurrency
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "USD", value = "订单结算币种，对应支付接口传入的settle_currency，支持英镑：GBP、港币：HKD、美元：USD、新加坡元：SGD、日元：JPY、加拿大元：CAD、澳元：AUD、欧元：EUR、新西兰元：NZD、韩元：KRW、泰铢：THB、瑞士法郎：CHF、瑞典克朗：SEK、丹麦克朗：DKK、挪威克朗：NOK、马来西亚林吉特：MYR、印尼卢比：IDR、菲律宾比索：PHP、毛里求斯卢比：MUR、以色列新谢克尔：ILS、斯里兰卡卢比：LKR、俄罗斯卢布：RUB、阿联酋迪拉姆：AED、捷克克朗：CZK、南非兰特：ZAR")
  
    public String getSettleCurrency() {
      return settleCurrency;
    }
  
  
    public void setSettleCurrency(String settleCurrency) {
      this.settleCurrency = settleCurrency;
    }
  
  
    public AlipayTradeQueryResponseModel settleTransRate(String settleTransRate) {
      
      this.settleTransRate = settleTransRate;
      return this;
    }
  
     /**
     * 结算币种兑换标价币种汇率
     * @return settleTransRate
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "30.025", value = "结算币种兑换标价币种汇率")
  
    public String getSettleTransRate() {
      return settleTransRate;
    }
  
  
    public void setSettleTransRate(String settleTransRate) {
      this.settleTransRate = settleTransRate;
    }
  
  
    public AlipayTradeQueryResponseModel settlementId(String settlementId) {
      
      this.settlementId = settlementId;
      return this;
    }
  
     /**
     * 支付清算编号，用于清算对账使用；  只在银行间联交易场景下返回该信息；
     * @return settlementId
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "2018101610032004620239146945", value = "支付清算编号，用于清算对账使用；  只在银行间联交易场景下返回该信息；")
  
    public String getSettlementId() {
      return settlementId;
    }
  
  
    public void setSettlementId(String settlementId) {
      this.settlementId = settlementId;
    }
  
  
    public AlipayTradeQueryResponseModel storeId(String storeId) {
      
      this.storeId = storeId;
      return this;
    }
  
     /**
     * 商户门店编号
     * @return storeId
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "NJ_S_001", value = "商户门店编号")
  
    public String getStoreId() {
      return storeId;
    }
  
  
    public void setStoreId(String storeId) {
      this.storeId = storeId;
    }
  
  
    public AlipayTradeQueryResponseModel storeName(String storeName) {
      
      this.storeName = storeName;
      return this;
    }
  
     /**
     * 请求交易支付中的商户店铺的名称
     * @return storeName
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "证大五道口店", value = "请求交易支付中的商户店铺的名称")
  
    public String getStoreName() {
      return storeName;
    }
  
  
    public void setStoreName(String storeName) {
      this.storeName = storeName;
    }
  
  
    public AlipayTradeQueryResponseModel subject(String subject) {
      
      this.subject = subject;
      return this;
    }
  
     /**
     * 订单标题；  只在银行间联交易场景下返回该信息；
     * @return subject
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "Iphone6 16G", value = "订单标题；  只在银行间联交易场景下返回该信息；")
  
    public String getSubject() {
      return subject;
    }
  
  
    public void setSubject(String subject) {
      this.subject = subject;
    }
  
  
    public AlipayTradeQueryResponseModel tapPayInfo(TapPayInfo tapPayInfo) {
      
      this.tapPayInfo = tapPayInfo;
      return this;
    }
  
     /**
     * Get tapPayInfo
     * @return tapPayInfo
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(value = "")
  
    public TapPayInfo getTapPayInfo() {
      return tapPayInfo;
    }
  
  
    public void setTapPayInfo(TapPayInfo tapPayInfo) {
      this.tapPayInfo = tapPayInfo;
    }
  
  
    public AlipayTradeQueryResponseModel terminalId(String terminalId) {
      
      this.terminalId = terminalId;
      return this;
    }
  
     /**
     * 商户机具终端编号
     * @return terminalId
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "NJ_T_001", value = "商户机具终端编号")
  
    public String getTerminalId() {
      return terminalId;
    }
  
  
    public void setTerminalId(String terminalId) {
      this.terminalId = terminalId;
    }
  
  
    public AlipayTradeQueryResponseModel totalAmount(String totalAmount) {
      
      this.totalAmount = totalAmount;
      return this;
    }
  
     /**
     * 交易的订单金额，单位为元，两位小数。该参数的值为支付时传入的total_amount
     * @return totalAmount
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "88.88", value = "交易的订单金额，单位为元，两位小数。该参数的值为支付时传入的total_amount")
  
    public String getTotalAmount() {
      return totalAmount;
    }
  
  
    public void setTotalAmount(String totalAmount) {
      this.totalAmount = totalAmount;
    }
  
  
    public AlipayTradeQueryResponseModel tradeNo(String tradeNo) {
      
      this.tradeNo = tradeNo;
      return this;
    }
  
     /**
     * 支付宝交易号
     * @return tradeNo
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "2013112011001004330000121536", value = "支付宝交易号")
  
    public String getTradeNo() {
      return tradeNo;
    }
  
  
    public void setTradeNo(String tradeNo) {
      this.tradeNo = tradeNo;
    }
  
  
    public AlipayTradeQueryResponseModel tradeSettleInfo(TradeSettleInfo tradeSettleInfo) {
      
      this.tradeSettleInfo = tradeSettleInfo;
      return this;
    }
  
     /**
     * Get tradeSettleInfo
     * @return tradeSettleInfo
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(value = "")
  
    public TradeSettleInfo getTradeSettleInfo() {
      return tradeSettleInfo;
    }
  
  
    public void setTradeSettleInfo(TradeSettleInfo tradeSettleInfo) {
      this.tradeSettleInfo = tradeSettleInfo;
    }
  
  
    public AlipayTradeQueryResponseModel tradeStatus(String tradeStatus) {
      
      this.tradeStatus = tradeStatus;
      return this;
    }
  
     /**
     * 交易状态：WAIT_BUYER_PAY（交易创建，等待买家付款）、TRADE_CLOSED（未付款交易超时关闭，或支付完成后全额退款）、TRADE_SUCCESS（交易支付成功）、TRADE_FINISHED（交易结束，不可退款）
     * @return tradeStatus
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "TRADE_CLOSED", value = "交易状态：WAIT_BUYER_PAY（交易创建，等待买家付款）、TRADE_CLOSED（未付款交易超时关闭，或支付完成后全额退款）、TRADE_SUCCESS（交易支付成功）、TRADE_FINISHED（交易结束，不可退款）")
  
    public String getTradeStatus() {
      return tradeStatus;
    }
  
  
    public void setTradeStatus(String tradeStatus) {
      this.tradeStatus = tradeStatus;
    }
  
  
    public AlipayTradeQueryResponseModel transCurrency(String transCurrency) {
      
      this.transCurrency = transCurrency;
      return this;
    }
  
     /**
     * 标价币种，该参数的值为支付时传入的trans_currency，支持英镑：GBP、港币：HKD、美元：USD、新加坡元：SGD、日元：JPY、加拿大元：CAD、澳元：AUD、欧元：EUR、新西兰元：NZD、韩元：KRW、泰铢：THB、瑞士法郎：CHF、瑞典克朗：SEK、丹麦克朗：DKK、挪威克朗：NOK、马来西亚林吉特：MYR、印尼卢比：IDR、菲律宾比索：PHP、毛里求斯卢比：MUR、以色列新谢克尔：ILS、斯里兰卡卢比：LKR、俄罗斯卢布：RUB、阿联酋迪拉姆：AED、捷克克朗：CZK、南非兰特：ZAR、人民币：CNY、新台币：TWD。当trans_currency 和 settle_currency 不一致时，trans_currency支持人民币：CNY、新台币：TWD
     * @return transCurrency
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "TWD", value = "标价币种，该参数的值为支付时传入的trans_currency，支持英镑：GBP、港币：HKD、美元：USD、新加坡元：SGD、日元：JPY、加拿大元：CAD、澳元：AUD、欧元：EUR、新西兰元：NZD、韩元：KRW、泰铢：THB、瑞士法郎：CHF、瑞典克朗：SEK、丹麦克朗：DKK、挪威克朗：NOK、马来西亚林吉特：MYR、印尼卢比：IDR、菲律宾比索：PHP、毛里求斯卢比：MUR、以色列新谢克尔：ILS、斯里兰卡卢比：LKR、俄罗斯卢布：RUB、阿联酋迪拉姆：AED、捷克克朗：CZK、南非兰特：ZAR、人民币：CNY、新台币：TWD。当trans_currency 和 settle_currency 不一致时，trans_currency支持人民币：CNY、新台币：TWD")
  
    public String getTransCurrency() {
      return transCurrency;
    }
  
  
    public void setTransCurrency(String transCurrency) {
      this.transCurrency = transCurrency;
    }
  
  
    public AlipayTradeQueryResponseModel transPayRate(String transPayRate) {
      
      this.transPayRate = transPayRate;
      return this;
    }
  
     /**
     * 标价币种兑换支付币种汇率
     * @return transPayRate
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "0.264", value = "标价币种兑换支付币种汇率")
  
    public String getTransPayRate() {
      return transPayRate;
    }
  
  
    public void setTransPayRate(String transPayRate) {
      this.transPayRate = transPayRate;
    }
  
  
    public AlipayTradeQueryResponseModel voucherDetailList(List<VoucherDetail> voucherDetailList) {
      
      this.voucherDetailList = voucherDetailList;
      return this;
    }
  
    public AlipayTradeQueryResponseModel addVoucherDetailListItem(VoucherDetail voucherDetailListItem) {
      if (this.voucherDetailList == null) {
        this.voucherDetailList = new ArrayList<>();
      }
      this.voucherDetailList.add(voucherDetailListItem);
      return this;
    }
  
     /**
     * 本交易支付时使用的所有优惠券信息。 只有在query_options中指定时才返回该字段信息。
     * @return voucherDetailList
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(value = "本交易支付时使用的所有优惠券信息。 只有在query_options中指定时才返回该字段信息。")
  
    public List<VoucherDetail> getVoucherDetailList() {
      return voucherDetailList;
    }
  
  
    public void setVoucherDetailList(List<VoucherDetail> voucherDetailList) {
      this.voucherDetailList = voucherDetailList;
    }
  
    /**
     * A container for additional, undeclared properties.
     * This is a holder for any undeclared properties as specified with
     * the 'additionalProperties' keyword in the OAS document.
     */
    private Map<String, Object> additionalProperties;
  
    /**
     * Set the additional (undeclared) property with the specified name and value.
     * If the property does not already exist, create it otherwise replace it.
     *
     * @param key name of the property
     * @param value value of the property
     * @return the AlipayTradeQueryResponseModel instance itself
     */
    public AlipayTradeQueryResponseModel putAdditionalProperty(String key, Object value) {
      if (this.additionalProperties == null) {
          this.additionalProperties = new HashMap<String, Object>();
      }
      this.additionalProperties.put(key, value);
      return this;
    }
  
    /**
     * Return the additional (undeclared) property.
     *
     * @return a map of objects
     */
    public Map<String, Object> getAdditionalProperties() {
      return additionalProperties;
    }
  
    /**
     * Return the additional (undeclared) property with the specified name.
     *
     * @param key name of the property
     * @return an object
     */
    public Object getAdditionalProperty(String key) {
      if (this.additionalProperties == null) {
          return null;
      }
      return this.additionalProperties.get(key);
    }
  
  
    @Override
    public boolean equals(Object o) {
      if (this == o) {
        return true;
      }
      if (o == null || getClass() != o.getClass()) {
        return false;
      }
      AlipayTradeQueryResponseModel alipayTradeQueryResponseModel = (AlipayTradeQueryResponseModel) o;
      return Objects.equals(this.additionalStatus, alipayTradeQueryResponseModel.additionalStatus) &&
          Objects.equals(this.alipayStoreId, alipayTradeQueryResponseModel.alipayStoreId) &&
          Objects.equals(this.alipaySubMerchantId, alipayTradeQueryResponseModel.alipaySubMerchantId) &&
          Objects.equals(this.asyncPayApplyStatus, alipayTradeQueryResponseModel.asyncPayApplyStatus) &&
          Objects.equals(this.authTradePayMode, alipayTradeQueryResponseModel.authTradePayMode) &&
          Objects.equals(this.bizSettleMode, alipayTradeQueryResponseModel.bizSettleMode) &&
          Objects.equals(this.bkagentRespInfo, alipayTradeQueryResponseModel.bkagentRespInfo) &&
          Objects.equals(this.body, alipayTradeQueryResponseModel.body) &&
          Objects.equals(this.buyerLogonId, alipayTradeQueryResponseModel.buyerLogonId) &&
          Objects.equals(this.buyerOpenId, alipayTradeQueryResponseModel.buyerOpenId) &&
          Objects.equals(this.buyerPayAmount, alipayTradeQueryResponseModel.buyerPayAmount) &&
          Objects.equals(this.buyerUserId, alipayTradeQueryResponseModel.buyerUserId) &&
          Objects.equals(this.buyerUserName, alipayTradeQueryResponseModel.buyerUserName) &&
          Objects.equals(this.buyerUserType, alipayTradeQueryResponseModel.buyerUserType) &&
          Objects.equals(this.cashierType, alipayTradeQueryResponseModel.cashierType) &&
          Objects.equals(this.chargeAmount, alipayTradeQueryResponseModel.chargeAmount) &&
          Objects.equals(this.chargeFlags, alipayTradeQueryResponseModel.chargeFlags) &&
          Objects.equals(this.chargeInfoList, alipayTradeQueryResponseModel.chargeInfoList) &&
          Objects.equals(this.creditBizOrderId, alipayTradeQueryResponseModel.creditBizOrderId) &&
          Objects.equals(this.creditPayMode, alipayTradeQueryResponseModel.creditPayMode) &&
          Objects.equals(this.discountAmount, alipayTradeQueryResponseModel.discountAmount) &&
          Objects.equals(this.discountGoodsDetail, alipayTradeQueryResponseModel.discountGoodsDetail) &&
          Objects.equals(this.enterprisePayInfo, alipayTradeQueryResponseModel.enterprisePayInfo) &&
          Objects.equals(this.extInfos, alipayTradeQueryResponseModel.extInfos) &&
          Objects.equals(this.fulfillmentDetailList, alipayTradeQueryResponseModel.fulfillmentDetailList) &&
          Objects.equals(this.fundBillList, alipayTradeQueryResponseModel.fundBillList) &&
          Objects.equals(this.hbFqPayInfo, alipayTradeQueryResponseModel.hbFqPayInfo) &&
          Objects.equals(this.hybAmount, alipayTradeQueryResponseModel.hybAmount) &&
          Objects.equals(this.industrySepcDetail, alipayTradeQueryResponseModel.industrySepcDetail) &&
          Objects.equals(this.industrySepcDetailAcc, alipayTradeQueryResponseModel.industrySepcDetailAcc) &&
          Objects.equals(this.industrySepcDetailGov, alipayTradeQueryResponseModel.industrySepcDetailGov) &&
          Objects.equals(this.intactChargeInfoList, alipayTradeQueryResponseModel.intactChargeInfoList) &&
          Objects.equals(this.invoiceAmount, alipayTradeQueryResponseModel.invoiceAmount) &&
          Objects.equals(this.mdiscountAmount, alipayTradeQueryResponseModel.mdiscountAmount) &&
          Objects.equals(this.medicalInsuranceInfo, alipayTradeQueryResponseModel.medicalInsuranceInfo) &&
          Objects.equals(this.openId, alipayTradeQueryResponseModel.openId) &&
          Objects.equals(this.outTradeNo, alipayTradeQueryResponseModel.outTradeNo) &&
          Objects.equals(this.passbackParams, alipayTradeQueryResponseModel.passbackParams) &&
          Objects.equals(this.payAmount, alipayTradeQueryResponseModel.payAmount) &&
          Objects.equals(this.payCurrency, alipayTradeQueryResponseModel.payCurrency) &&
          Objects.equals(this.paymentInfoWithIdList, alipayTradeQueryResponseModel.paymentInfoWithIdList) &&
          Objects.equals(this.periodScene, alipayTradeQueryResponseModel.periodScene) &&
          Objects.equals(this.pointAmount, alipayTradeQueryResponseModel.pointAmount) &&
          Objects.equals(this.preAuthPayAmount, alipayTradeQueryResponseModel.preAuthPayAmount) &&
          Objects.equals(this.receiptAmount, alipayTradeQueryResponseModel.receiptAmount) &&
          Objects.equals(this.receiptCurrencyType, alipayTradeQueryResponseModel.receiptCurrencyType) &&
          Objects.equals(this.reqGoodsDetail, alipayTradeQueryResponseModel.reqGoodsDetail) &&
          Objects.equals(this.sendPayDate, alipayTradeQueryResponseModel.sendPayDate) &&
          Objects.equals(this.settleAmount, alipayTradeQueryResponseModel.settleAmount) &&
          Objects.equals(this.settleCurrency, alipayTradeQueryResponseModel.settleCurrency) &&
          Objects.equals(this.settleTransRate, alipayTradeQueryResponseModel.settleTransRate) &&
          Objects.equals(this.settlementId, alipayTradeQueryResponseModel.settlementId) &&
          Objects.equals(this.storeId, alipayTradeQueryResponseModel.storeId) &&
          Objects.equals(this.storeName, alipayTradeQueryResponseModel.storeName) &&
          Objects.equals(this.subject, alipayTradeQueryResponseModel.subject) &&
          Objects.equals(this.tapPayInfo, alipayTradeQueryResponseModel.tapPayInfo) &&
          Objects.equals(this.terminalId, alipayTradeQueryResponseModel.terminalId) &&
          Objects.equals(this.totalAmount, alipayTradeQueryResponseModel.totalAmount) &&
          Objects.equals(this.tradeNo, alipayTradeQueryResponseModel.tradeNo) &&
          Objects.equals(this.tradeSettleInfo, alipayTradeQueryResponseModel.tradeSettleInfo) &&
          Objects.equals(this.tradeStatus, alipayTradeQueryResponseModel.tradeStatus) &&
          Objects.equals(this.transCurrency, alipayTradeQueryResponseModel.transCurrency) &&
          Objects.equals(this.transPayRate, alipayTradeQueryResponseModel.transPayRate) &&
          Objects.equals(this.voucherDetailList, alipayTradeQueryResponseModel.voucherDetailList)&&
          Objects.equals(this.additionalProperties, alipayTradeQueryResponseModel.additionalProperties);
    }
  
    @Override
    public int hashCode() {
      return Objects.hash(additionalStatus, alipayStoreId, alipaySubMerchantId, asyncPayApplyStatus, authTradePayMode, bizSettleMode, bkagentRespInfo, body, buyerLogonId, buyerOpenId, buyerPayAmount, buyerUserId, buyerUserName, buyerUserType, cashierType, chargeAmount, chargeFlags, chargeInfoList, creditBizOrderId, creditPayMode, discountAmount, discountGoodsDetail, enterprisePayInfo, extInfos, fulfillmentDetailList, fundBillList, hbFqPayInfo, hybAmount, industrySepcDetail, industrySepcDetailAcc, industrySepcDetailGov, intactChargeInfoList, invoiceAmount, mdiscountAmount, medicalInsuranceInfo, openId, outTradeNo, passbackParams, payAmount, payCurrency, paymentInfoWithIdList, periodScene, pointAmount, preAuthPayAmount, receiptAmount, receiptCurrencyType, reqGoodsDetail, sendPayDate, settleAmount, settleCurrency, settleTransRate, settlementId, storeId, storeName, subject, tapPayInfo, terminalId, totalAmount, tradeNo, tradeSettleInfo, tradeStatus, transCurrency, transPayRate, voucherDetailList, additionalProperties);
    }
  
    @Override
    public String toString() {
      StringBuilder sb = new StringBuilder();
      sb.append("class AlipayTradeQueryResponseModel {\n");
      sb.append("    additionalStatus: ").append(toIndentedString(additionalStatus)).append("\n");
      sb.append("    alipayStoreId: ").append(toIndentedString(alipayStoreId)).append("\n");
      sb.append("    alipaySubMerchantId: ").append(toIndentedString(alipaySubMerchantId)).append("\n");
      sb.append("    asyncPayApplyStatus: ").append(toIndentedString(asyncPayApplyStatus)).append("\n");
      sb.append("    authTradePayMode: ").append(toIndentedString(authTradePayMode)).append("\n");
      sb.append("    bizSettleMode: ").append(toIndentedString(bizSettleMode)).append("\n");
      sb.append("    bkagentRespInfo: ").append(toIndentedString(bkagentRespInfo)).append("\n");
      sb.append("    body: ").append(toIndentedString(body)).append("\n");
      sb.append("    buyerLogonId: ").append(toIndentedString(buyerLogonId)).append("\n");
      sb.append("    buyerOpenId: ").append(toIndentedString(buyerOpenId)).append("\n");
      sb.append("    buyerPayAmount: ").append(toIndentedString(buyerPayAmount)).append("\n");
      sb.append("    buyerUserId: ").append(toIndentedString(buyerUserId)).append("\n");
      sb.append("    buyerUserName: ").append(toIndentedString(buyerUserName)).append("\n");
      sb.append("    buyerUserType: ").append(toIndentedString(buyerUserType)).append("\n");
      sb.append("    cashierType: ").append(toIndentedString(cashierType)).append("\n");
      sb.append("    chargeAmount: ").append(toIndentedString(chargeAmount)).append("\n");
      sb.append("    chargeFlags: ").append(toIndentedString(chargeFlags)).append("\n");
      sb.append("    chargeInfoList: ").append(toIndentedString(chargeInfoList)).append("\n");
      sb.append("    creditBizOrderId: ").append(toIndentedString(creditBizOrderId)).append("\n");
      sb.append("    creditPayMode: ").append(toIndentedString(creditPayMode)).append("\n");
      sb.append("    discountAmount: ").append(toIndentedString(discountAmount)).append("\n");
      sb.append("    discountGoodsDetail: ").append(toIndentedString(discountGoodsDetail)).append("\n");
      sb.append("    enterprisePayInfo: ").append(toIndentedString(enterprisePayInfo)).append("\n");
      sb.append("    extInfos: ").append(toIndentedString(extInfos)).append("\n");
      sb.append("    fulfillmentDetailList: ").append(toIndentedString(fulfillmentDetailList)).append("\n");
      sb.append("    fundBillList: ").append(toIndentedString(fundBillList)).append("\n");
      sb.append("    hbFqPayInfo: ").append(toIndentedString(hbFqPayInfo)).append("\n");
      sb.append("    hybAmount: ").append(toIndentedString(hybAmount)).append("\n");
      sb.append("    industrySepcDetail: ").append(toIndentedString(industrySepcDetail)).append("\n");
      sb.append("    industrySepcDetailAcc: ").append(toIndentedString(industrySepcDetailAcc)).append("\n");
      sb.append("    industrySepcDetailGov: ").append(toIndentedString(industrySepcDetailGov)).append("\n");
      sb.append("    intactChargeInfoList: ").append(toIndentedString(intactChargeInfoList)).append("\n");
      sb.append("    invoiceAmount: ").append(toIndentedString(invoiceAmount)).append("\n");
      sb.append("    mdiscountAmount: ").append(toIndentedString(mdiscountAmount)).append("\n");
      sb.append("    medicalInsuranceInfo: ").append(toIndentedString(medicalInsuranceInfo)).append("\n");
      sb.append("    openId: ").append(toIndentedString(openId)).append("\n");
      sb.append("    outTradeNo: ").append(toIndentedString(outTradeNo)).append("\n");
      sb.append("    passbackParams: ").append(toIndentedString(passbackParams)).append("\n");
      sb.append("    payAmount: ").append(toIndentedString(payAmount)).append("\n");
      sb.append("    payCurrency: ").append(toIndentedString(payCurrency)).append("\n");
      sb.append("    paymentInfoWithIdList: ").append(toIndentedString(paymentInfoWithIdList)).append("\n");
      sb.append("    periodScene: ").append(toIndentedString(periodScene)).append("\n");
      sb.append("    pointAmount: ").append(toIndentedString(pointAmount)).append("\n");
      sb.append("    preAuthPayAmount: ").append(toIndentedString(preAuthPayAmount)).append("\n");
      sb.append("    receiptAmount: ").append(toIndentedString(receiptAmount)).append("\n");
      sb.append("    receiptCurrencyType: ").append(toIndentedString(receiptCurrencyType)).append("\n");
      sb.append("    reqGoodsDetail: ").append(toIndentedString(reqGoodsDetail)).append("\n");
      sb.append("    sendPayDate: ").append(toIndentedString(sendPayDate)).append("\n");
      sb.append("    settleAmount: ").append(toIndentedString(settleAmount)).append("\n");
      sb.append("    settleCurrency: ").append(toIndentedString(settleCurrency)).append("\n");
      sb.append("    settleTransRate: ").append(toIndentedString(settleTransRate)).append("\n");
      sb.append("    settlementId: ").append(toIndentedString(settlementId)).append("\n");
      sb.append("    storeId: ").append(toIndentedString(storeId)).append("\n");
      sb.append("    storeName: ").append(toIndentedString(storeName)).append("\n");
      sb.append("    subject: ").append(toIndentedString(subject)).append("\n");
      sb.append("    tapPayInfo: ").append(toIndentedString(tapPayInfo)).append("\n");
      sb.append("    terminalId: ").append(toIndentedString(terminalId)).append("\n");
      sb.append("    totalAmount: ").append(toIndentedString(totalAmount)).append("\n");
      sb.append("    tradeNo: ").append(toIndentedString(tradeNo)).append("\n");
      sb.append("    tradeSettleInfo: ").append(toIndentedString(tradeSettleInfo)).append("\n");
      sb.append("    tradeStatus: ").append(toIndentedString(tradeStatus)).append("\n");
      sb.append("    transCurrency: ").append(toIndentedString(transCurrency)).append("\n");
      sb.append("    transPayRate: ").append(toIndentedString(transPayRate)).append("\n");
      sb.append("    voucherDetailList: ").append(toIndentedString(voucherDetailList)).append("\n");
      sb.append("    additionalProperties: ").append(toIndentedString(additionalProperties)).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    ");
    }
  
  
    public static HashSet<String> openapiFields;
    public static HashSet<String> openapiRequiredFields;
  
    static {
      // a set of all properties/fields (JSON key names)
      openapiFields = new HashSet<String>();
      openapiFields.add("additional_status");
      openapiFields.add("alipay_store_id");
      openapiFields.add("alipay_sub_merchant_id");
      openapiFields.add("async_pay_apply_status");
      openapiFields.add("auth_trade_pay_mode");
      openapiFields.add("biz_settle_mode");
      openapiFields.add("bkagent_resp_info");
      openapiFields.add("body");
      openapiFields.add("buyer_logon_id");
      openapiFields.add("buyer_open_id");
      openapiFields.add("buyer_pay_amount");
      openapiFields.add("buyer_user_id");
      openapiFields.add("buyer_user_name");
      openapiFields.add("buyer_user_type");
      openapiFields.add("cashier_type");
      openapiFields.add("charge_amount");
      openapiFields.add("charge_flags");
      openapiFields.add("charge_info_list");
      openapiFields.add("credit_biz_order_id");
      openapiFields.add("credit_pay_mode");
      openapiFields.add("discount_amount");
      openapiFields.add("discount_goods_detail");
      openapiFields.add("enterprise_pay_info");
      openapiFields.add("ext_infos");
      openapiFields.add("fulfillment_detail_list");
      openapiFields.add("fund_bill_list");
      openapiFields.add("hb_fq_pay_info");
      openapiFields.add("hyb_amount");
      openapiFields.add("industry_sepc_detail");
      openapiFields.add("industry_sepc_detail_acc");
      openapiFields.add("industry_sepc_detail_gov");
      openapiFields.add("intact_charge_info_list");
      openapiFields.add("invoice_amount");
      openapiFields.add("mdiscount_amount");
      openapiFields.add("medical_insurance_info");
      openapiFields.add("open_id");
      openapiFields.add("out_trade_no");
      openapiFields.add("passback_params");
      openapiFields.add("pay_amount");
      openapiFields.add("pay_currency");
      openapiFields.add("payment_info_with_id_list");
      openapiFields.add("period_scene");
      openapiFields.add("point_amount");
      openapiFields.add("pre_auth_pay_amount");
      openapiFields.add("receipt_amount");
      openapiFields.add("receipt_currency_type");
      openapiFields.add("req_goods_detail");
      openapiFields.add("send_pay_date");
      openapiFields.add("settle_amount");
      openapiFields.add("settle_currency");
      openapiFields.add("settle_trans_rate");
      openapiFields.add("settlement_id");
      openapiFields.add("store_id");
      openapiFields.add("store_name");
      openapiFields.add("subject");
      openapiFields.add("tap_pay_info");
      openapiFields.add("terminal_id");
      openapiFields.add("total_amount");
      openapiFields.add("trade_no");
      openapiFields.add("trade_settle_info");
      openapiFields.add("trade_status");
      openapiFields.add("trans_currency");
      openapiFields.add("trans_pay_rate");
      openapiFields.add("voucher_detail_list");
  
      // a set of required properties/fields (JSON key names)
      openapiRequiredFields = new HashSet<String>();
    }
  
   /**
    * Validates the JSON Object and throws an exception if issues found
    *
    * @param jsonObj JSON Object
    * @throws IOException if the JSON Object is invalid with respect to AlipayTradeQueryResponseModel
    */
    public static void validateJsonObject(JsonObject jsonObj) throws IOException {
        if (jsonObj == null) {
          if (AlipayTradeQueryResponseModel.openapiRequiredFields.isEmpty()) {
            return;
          } else { // has required fields
            throw new IllegalArgumentException(String.format("The required field(s) %s in AlipayTradeQueryResponseModel is not found in the empty JSON string", AlipayTradeQueryResponseModel.openapiRequiredFields.toString()));
          }
        }
        if (jsonObj.get("additional_status") != null && !jsonObj.get("additional_status").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `additional_status` to be a primitive type in the JSON string but got `%s`", jsonObj.get("additional_status").toString()));
        }
        if (jsonObj.get("alipay_store_id") != null && !jsonObj.get("alipay_store_id").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `alipay_store_id` to be a primitive type in the JSON string but got `%s`", jsonObj.get("alipay_store_id").toString()));
        }
        if (jsonObj.get("alipay_sub_merchant_id") != null && !jsonObj.get("alipay_sub_merchant_id").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `alipay_sub_merchant_id` to be a primitive type in the JSON string but got `%s`", jsonObj.get("alipay_sub_merchant_id").toString()));
        }
        if (jsonObj.get("async_pay_apply_status") != null && !jsonObj.get("async_pay_apply_status").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `async_pay_apply_status` to be a primitive type in the JSON string but got `%s`", jsonObj.get("async_pay_apply_status").toString()));
        }
        if (jsonObj.get("auth_trade_pay_mode") != null && !jsonObj.get("auth_trade_pay_mode").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `auth_trade_pay_mode` to be a primitive type in the JSON string but got `%s`", jsonObj.get("auth_trade_pay_mode").toString()));
        }
        if (jsonObj.get("biz_settle_mode") != null && !jsonObj.get("biz_settle_mode").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `biz_settle_mode` to be a primitive type in the JSON string but got `%s`", jsonObj.get("biz_settle_mode").toString()));
        }
        // validate the optional field `bkagent_resp_info`
        if (jsonObj.getAsJsonObject("bkagent_resp_info") != null) {
          BkAgentRespInfo.validateJsonObject(jsonObj.getAsJsonObject("bkagent_resp_info"));
        }
        if (jsonObj.get("body") != null && !jsonObj.get("body").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `body` to be a primitive type in the JSON string but got `%s`", jsonObj.get("body").toString()));
        }
        if (jsonObj.get("buyer_logon_id") != null && !jsonObj.get("buyer_logon_id").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `buyer_logon_id` to be a primitive type in the JSON string but got `%s`", jsonObj.get("buyer_logon_id").toString()));
        }
        if (jsonObj.get("buyer_open_id") != null && !jsonObj.get("buyer_open_id").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `buyer_open_id` to be a primitive type in the JSON string but got `%s`", jsonObj.get("buyer_open_id").toString()));
        }
        if (jsonObj.get("buyer_pay_amount") != null && !jsonObj.get("buyer_pay_amount").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `buyer_pay_amount` to be a primitive type in the JSON string but got `%s`", jsonObj.get("buyer_pay_amount").toString()));
        }
        if (jsonObj.get("buyer_user_id") != null && !jsonObj.get("buyer_user_id").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `buyer_user_id` to be a primitive type in the JSON string but got `%s`", jsonObj.get("buyer_user_id").toString()));
        }
        if (jsonObj.get("buyer_user_name") != null && !jsonObj.get("buyer_user_name").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `buyer_user_name` to be a primitive type in the JSON string but got `%s`", jsonObj.get("buyer_user_name").toString()));
        }
        if (jsonObj.get("buyer_user_type") != null && !jsonObj.get("buyer_user_type").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `buyer_user_type` to be a primitive type in the JSON string but got `%s`", jsonObj.get("buyer_user_type").toString()));
        }
        if (jsonObj.get("cashier_type") != null && !jsonObj.get("cashier_type").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `cashier_type` to be a primitive type in the JSON string but got `%s`", jsonObj.get("cashier_type").toString()));
        }
        if (jsonObj.get("charge_amount") != null && !jsonObj.get("charge_amount").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `charge_amount` to be a primitive type in the JSON string but got `%s`", jsonObj.get("charge_amount").toString()));
        }
        if (jsonObj.get("charge_flags") != null && !jsonObj.get("charge_flags").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `charge_flags` to be a primitive type in the JSON string but got `%s`", jsonObj.get("charge_flags").toString()));
        }
        JsonArray jsonArraychargeInfoList = jsonObj.getAsJsonArray("charge_info_list");
        if (jsonArraychargeInfoList != null) {
          // ensure the json data is an array
          if (!jsonObj.get("charge_info_list").isJsonArray()) {
            throw new IllegalArgumentException(String.format("Expected the field `charge_info_list` to be an array in the JSON string but got `%s`", jsonObj.get("charge_info_list").toString()));
          }
  
          // validate the optional field `charge_info_list` (array)
          for (int i = 0; i < jsonArraychargeInfoList.size(); i++) {
            ChargeInfo.validateJsonObject(jsonArraychargeInfoList.get(i).getAsJsonObject());
          };
        }
        if (jsonObj.get("credit_biz_order_id") != null && !jsonObj.get("credit_biz_order_id").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `credit_biz_order_id` to be a primitive type in the JSON string but got `%s`", jsonObj.get("credit_biz_order_id").toString()));
        }
        if (jsonObj.get("credit_pay_mode") != null && !jsonObj.get("credit_pay_mode").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `credit_pay_mode` to be a primitive type in the JSON string but got `%s`", jsonObj.get("credit_pay_mode").toString()));
        }
        if (jsonObj.get("discount_amount") != null && !jsonObj.get("discount_amount").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `discount_amount` to be a primitive type in the JSON string but got `%s`", jsonObj.get("discount_amount").toString()));
        }
        if (jsonObj.get("discount_goods_detail") != null && !jsonObj.get("discount_goods_detail").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `discount_goods_detail` to be a primitive type in the JSON string but got `%s`", jsonObj.get("discount_goods_detail").toString()));
        }
        // validate the optional field `enterprise_pay_info`
        if (jsonObj.getAsJsonObject("enterprise_pay_info") != null) {
          EnterprisePayInfo.validateJsonObject(jsonObj.getAsJsonObject("enterprise_pay_info"));
        }
        if (jsonObj.get("ext_infos") != null && !jsonObj.get("ext_infos").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `ext_infos` to be a primitive type in the JSON string but got `%s`", jsonObj.get("ext_infos").toString()));
        }
        JsonArray jsonArrayfulfillmentDetailList = jsonObj.getAsJsonArray("fulfillment_detail_list");
        if (jsonArrayfulfillmentDetailList != null) {
          // ensure the json data is an array
          if (!jsonObj.get("fulfillment_detail_list").isJsonArray()) {
            throw new IllegalArgumentException(String.format("Expected the field `fulfillment_detail_list` to be an array in the JSON string but got `%s`", jsonObj.get("fulfillment_detail_list").toString()));
          }
  
          // validate the optional field `fulfillment_detail_list` (array)
          for (int i = 0; i < jsonArrayfulfillmentDetailList.size(); i++) {
            FulfillmentDetail.validateJsonObject(jsonArrayfulfillmentDetailList.get(i).getAsJsonObject());
          };
        }
        JsonArray jsonArrayfundBillList = jsonObj.getAsJsonArray("fund_bill_list");
        if (jsonArrayfundBillList != null) {
          // ensure the json data is an array
          if (!jsonObj.get("fund_bill_list").isJsonArray()) {
            throw new IllegalArgumentException(String.format("Expected the field `fund_bill_list` to be an array in the JSON string but got `%s`", jsonObj.get("fund_bill_list").toString()));
          }
  
          // validate the optional field `fund_bill_list` (array)
          for (int i = 0; i < jsonArrayfundBillList.size(); i++) {
            TradeFundBill.validateJsonObject(jsonArrayfundBillList.get(i).getAsJsonObject());
          };
        }
        // validate the optional field `hb_fq_pay_info`
        if (jsonObj.getAsJsonObject("hb_fq_pay_info") != null) {
          HbFqPayInfo.validateJsonObject(jsonObj.getAsJsonObject("hb_fq_pay_info"));
        }
        if (jsonObj.get("hyb_amount") != null && !jsonObj.get("hyb_amount").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `hyb_amount` to be a primitive type in the JSON string but got `%s`", jsonObj.get("hyb_amount").toString()));
        }
        if (jsonObj.get("industry_sepc_detail") != null && !jsonObj.get("industry_sepc_detail").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `industry_sepc_detail` to be a primitive type in the JSON string but got `%s`", jsonObj.get("industry_sepc_detail").toString()));
        }
        if (jsonObj.get("industry_sepc_detail_acc") != null && !jsonObj.get("industry_sepc_detail_acc").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `industry_sepc_detail_acc` to be a primitive type in the JSON string but got `%s`", jsonObj.get("industry_sepc_detail_acc").toString()));
        }
        if (jsonObj.get("industry_sepc_detail_gov") != null && !jsonObj.get("industry_sepc_detail_gov").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `industry_sepc_detail_gov` to be a primitive type in the JSON string but got `%s`", jsonObj.get("industry_sepc_detail_gov").toString()));
        }
        JsonArray jsonArrayintactChargeInfoList = jsonObj.getAsJsonArray("intact_charge_info_list");
        if (jsonArrayintactChargeInfoList != null) {
          // ensure the json data is an array
          if (!jsonObj.get("intact_charge_info_list").isJsonArray()) {
            throw new IllegalArgumentException(String.format("Expected the field `intact_charge_info_list` to be an array in the JSON string but got `%s`", jsonObj.get("intact_charge_info_list").toString()));
          }
  
          // validate the optional field `intact_charge_info_list` (array)
          for (int i = 0; i < jsonArrayintactChargeInfoList.size(); i++) {
            IntactChargeInfo.validateJsonObject(jsonArrayintactChargeInfoList.get(i).getAsJsonObject());
          };
        }
        if (jsonObj.get("invoice_amount") != null && !jsonObj.get("invoice_amount").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `invoice_amount` to be a primitive type in the JSON string but got `%s`", jsonObj.get("invoice_amount").toString()));
        }
        if (jsonObj.get("mdiscount_amount") != null && !jsonObj.get("mdiscount_amount").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `mdiscount_amount` to be a primitive type in the JSON string but got `%s`", jsonObj.get("mdiscount_amount").toString()));
        }
        if (jsonObj.get("medical_insurance_info") != null && !jsonObj.get("medical_insurance_info").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `medical_insurance_info` to be a primitive type in the JSON string but got `%s`", jsonObj.get("medical_insurance_info").toString()));
        }
        if (jsonObj.get("open_id") != null && !jsonObj.get("open_id").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `open_id` to be a primitive type in the JSON string but got `%s`", jsonObj.get("open_id").toString()));
        }
        if (jsonObj.get("out_trade_no") != null && !jsonObj.get("out_trade_no").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `out_trade_no` to be a primitive type in the JSON string but got `%s`", jsonObj.get("out_trade_no").toString()));
        }
        if (jsonObj.get("passback_params") != null && !jsonObj.get("passback_params").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `passback_params` to be a primitive type in the JSON string but got `%s`", jsonObj.get("passback_params").toString()));
        }
        if (jsonObj.get("pay_amount") != null && !jsonObj.get("pay_amount").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `pay_amount` to be a primitive type in the JSON string but got `%s`", jsonObj.get("pay_amount").toString()));
        }
        if (jsonObj.get("pay_currency") != null && !jsonObj.get("pay_currency").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `pay_currency` to be a primitive type in the JSON string but got `%s`", jsonObj.get("pay_currency").toString()));
        }
        JsonArray jsonArraypaymentInfoWithIdList = jsonObj.getAsJsonArray("payment_info_with_id_list");
        if (jsonArraypaymentInfoWithIdList != null) {
          // ensure the json data is an array
          if (!jsonObj.get("payment_info_with_id_list").isJsonArray()) {
            throw new IllegalArgumentException(String.format("Expected the field `payment_info_with_id_list` to be an array in the JSON string but got `%s`", jsonObj.get("payment_info_with_id_list").toString()));
          }
  
          // validate the optional field `payment_info_with_id_list` (array)
          for (int i = 0; i < jsonArraypaymentInfoWithIdList.size(); i++) {
            PaymentInfoWithId.validateJsonObject(jsonArraypaymentInfoWithIdList.get(i).getAsJsonObject());
          };
        }
        if (jsonObj.get("period_scene") != null && !jsonObj.get("period_scene").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `period_scene` to be a primitive type in the JSON string but got `%s`", jsonObj.get("period_scene").toString()));
        }
        if (jsonObj.get("point_amount") != null && !jsonObj.get("point_amount").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `point_amount` to be a primitive type in the JSON string but got `%s`", jsonObj.get("point_amount").toString()));
        }
        if (jsonObj.get("pre_auth_pay_amount") != null && !jsonObj.get("pre_auth_pay_amount").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `pre_auth_pay_amount` to be a primitive type in the JSON string but got `%s`", jsonObj.get("pre_auth_pay_amount").toString()));
        }
        if (jsonObj.get("receipt_amount") != null && !jsonObj.get("receipt_amount").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `receipt_amount` to be a primitive type in the JSON string but got `%s`", jsonObj.get("receipt_amount").toString()));
        }
        if (jsonObj.get("receipt_currency_type") != null && !jsonObj.get("receipt_currency_type").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `receipt_currency_type` to be a primitive type in the JSON string but got `%s`", jsonObj.get("receipt_currency_type").toString()));
        }
        JsonArray jsonArrayreqGoodsDetail = jsonObj.getAsJsonArray("req_goods_detail");
        if (jsonArrayreqGoodsDetail != null) {
          // ensure the json data is an array
          if (!jsonObj.get("req_goods_detail").isJsonArray()) {
            throw new IllegalArgumentException(String.format("Expected the field `req_goods_detail` to be an array in the JSON string but got `%s`", jsonObj.get("req_goods_detail").toString()));
          }
  
          // validate the optional field `req_goods_detail` (array)
          for (int i = 0; i < jsonArrayreqGoodsDetail.size(); i++) {
            GoodsDetail.validateJsonObject(jsonArrayreqGoodsDetail.get(i).getAsJsonObject());
          };
        }
        if (jsonObj.get("send_pay_date") != null && !jsonObj.get("send_pay_date").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `send_pay_date` to be a primitive type in the JSON string but got `%s`", jsonObj.get("send_pay_date").toString()));
        }
        if (jsonObj.get("settle_amount") != null && !jsonObj.get("settle_amount").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `settle_amount` to be a primitive type in the JSON string but got `%s`", jsonObj.get("settle_amount").toString()));
        }
        if (jsonObj.get("settle_currency") != null && !jsonObj.get("settle_currency").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `settle_currency` to be a primitive type in the JSON string but got `%s`", jsonObj.get("settle_currency").toString()));
        }
        if (jsonObj.get("settle_trans_rate") != null && !jsonObj.get("settle_trans_rate").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `settle_trans_rate` to be a primitive type in the JSON string but got `%s`", jsonObj.get("settle_trans_rate").toString()));
        }
        if (jsonObj.get("settlement_id") != null && !jsonObj.get("settlement_id").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `settlement_id` to be a primitive type in the JSON string but got `%s`", jsonObj.get("settlement_id").toString()));
        }
        if (jsonObj.get("store_id") != null && !jsonObj.get("store_id").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `store_id` to be a primitive type in the JSON string but got `%s`", jsonObj.get("store_id").toString()));
        }
        if (jsonObj.get("store_name") != null && !jsonObj.get("store_name").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `store_name` to be a primitive type in the JSON string but got `%s`", jsonObj.get("store_name").toString()));
        }
        if (jsonObj.get("subject") != null && !jsonObj.get("subject").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `subject` to be a primitive type in the JSON string but got `%s`", jsonObj.get("subject").toString()));
        }
        // validate the optional field `tap_pay_info`
        if (jsonObj.getAsJsonObject("tap_pay_info") != null) {
          TapPayInfo.validateJsonObject(jsonObj.getAsJsonObject("tap_pay_info"));
        }
        if (jsonObj.get("terminal_id") != null && !jsonObj.get("terminal_id").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `terminal_id` to be a primitive type in the JSON string but got `%s`", jsonObj.get("terminal_id").toString()));
        }
        if (jsonObj.get("total_amount") != null && !jsonObj.get("total_amount").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `total_amount` to be a primitive type in the JSON string but got `%s`", jsonObj.get("total_amount").toString()));
        }
        if (jsonObj.get("trade_no") != null && !jsonObj.get("trade_no").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `trade_no` to be a primitive type in the JSON string but got `%s`", jsonObj.get("trade_no").toString()));
        }
        // validate the optional field `trade_settle_info`
        if (jsonObj.getAsJsonObject("trade_settle_info") != null) {
          TradeSettleInfo.validateJsonObject(jsonObj.getAsJsonObject("trade_settle_info"));
        }
        if (jsonObj.get("trade_status") != null && !jsonObj.get("trade_status").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `trade_status` to be a primitive type in the JSON string but got `%s`", jsonObj.get("trade_status").toString()));
        }
        if (jsonObj.get("trans_currency") != null && !jsonObj.get("trans_currency").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `trans_currency` to be a primitive type in the JSON string but got `%s`", jsonObj.get("trans_currency").toString()));
        }
        if (jsonObj.get("trans_pay_rate") != null && !jsonObj.get("trans_pay_rate").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `trans_pay_rate` to be a primitive type in the JSON string but got `%s`", jsonObj.get("trans_pay_rate").toString()));
        }
        JsonArray jsonArrayvoucherDetailList = jsonObj.getAsJsonArray("voucher_detail_list");
        if (jsonArrayvoucherDetailList != null) {
          // ensure the json data is an array
          if (!jsonObj.get("voucher_detail_list").isJsonArray()) {
            throw new IllegalArgumentException(String.format("Expected the field `voucher_detail_list` to be an array in the JSON string but got `%s`", jsonObj.get("voucher_detail_list").toString()));
          }
  
          // validate the optional field `voucher_detail_list` (array)
          for (int i = 0; i < jsonArrayvoucherDetailList.size(); i++) {
            VoucherDetail.validateJsonObject(jsonArrayvoucherDetailList.get(i).getAsJsonObject());
          };
        }
    }
  
    public static class CustomTypeAdapterFactory implements TypeAdapterFactory {
      @SuppressWarnings("unchecked")
      @Override
      public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {
         if (!AlipayTradeQueryResponseModel.class.isAssignableFrom(type.getRawType())) {
           return null; // this class only serializes 'AlipayTradeQueryResponseModel' and its subtypes
         }
         final TypeAdapter<JsonElement> elementAdapter = gson.getAdapter(JsonElement.class);
         final TypeAdapter<AlipayTradeQueryResponseModel> thisAdapter
                          = gson.getDelegateAdapter(this, TypeToken.get(AlipayTradeQueryResponseModel.class));
  
         return (TypeAdapter<T>) new TypeAdapter<AlipayTradeQueryResponseModel>() {
             @Override
             public void write(JsonWriter out, AlipayTradeQueryResponseModel value) throws IOException {
               JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject();
               obj.remove("additionalProperties");
               // serialize additonal properties
               if (value.getAdditionalProperties() != null) {
                 for (Map.Entry<String, Object> entry : value.getAdditionalProperties().entrySet()) {
                   if (entry.getValue() instanceof String)
                     obj.addProperty(entry.getKey(), (String) entry.getValue());
                   else if (entry.getValue() instanceof Number)
                     obj.addProperty(entry.getKey(), (Number) entry.getValue());
                   else if (entry.getValue() instanceof Boolean)
                     obj.addProperty(entry.getKey(), (Boolean) entry.getValue());
                   else if (entry.getValue() instanceof Character)
                     obj.addProperty(entry.getKey(), (Character) entry.getValue());
                   else {
                     obj.add(entry.getKey(), gson.toJsonTree(entry.getValue()).getAsJsonObject());
                   }
                 }
               }
               elementAdapter.write(out, obj);
             }
  
             @Override
             public AlipayTradeQueryResponseModel read(JsonReader in) throws IOException {
               JsonObject jsonObj = elementAdapter.read(in).getAsJsonObject();
               validateJsonObject(jsonObj);
               // store additional fields in the deserialized instance
               AlipayTradeQueryResponseModel instance = thisAdapter.fromJsonTree(jsonObj);
               for (Map.Entry<String, JsonElement> entry : jsonObj.entrySet()) {
                 if (!openapiFields.contains(entry.getKey())) {
                   if (entry.getValue().isJsonPrimitive()) { // primitive type
                     if (entry.getValue().getAsJsonPrimitive().isString())
                       instance.putAdditionalProperty(entry.getKey(), entry.getValue().getAsString());
                     else if (entry.getValue().getAsJsonPrimitive().isNumber())
                       instance.putAdditionalProperty(entry.getKey(), entry.getValue().getAsNumber());
                     else if (entry.getValue().getAsJsonPrimitive().isBoolean())
                       instance.putAdditionalProperty(entry.getKey(), entry.getValue().getAsBoolean());
                     else
                       throw new IllegalArgumentException(String.format("The field `%s` has unknown primitive type. Value: %s", entry.getKey(), entry.getValue().toString()));
                   } else { // non-primitive type
                     instance.putAdditionalProperty(entry.getKey(), gson.fromJson(entry.getValue(), HashMap.class));
                   }
                 }
               }
               return instance;
             }
  
         }.nullSafe();
      }
    }
  
   /**
    * Create an instance of AlipayTradeQueryResponseModel given an JSON string
    *
    * @param jsonString JSON string
    * @return An instance of AlipayTradeQueryResponseModel
    * @throws IOException if the JSON string is invalid with respect to AlipayTradeQueryResponseModel
    */
    public static AlipayTradeQueryResponseModel fromJson(String jsonString) throws IOException {
      return JSON.getGson().fromJson(jsonString, AlipayTradeQueryResponseModel.class);
    }
  
   /**
    * Convert an instance of AlipayTradeQueryResponseModel to an JSON string
    *
    * @return JSON string
    */
    public String toJson() {
      return JSON.getGson().toJson(this);
    }
  }
  
  