def charge(
      amazon_reference_id,
      authorization_reference_id,
      charge_amount,
      charge_currency_code: @currency_code,
      charge_note: nil,
      charge_order_id: nil,
      store_name: nil,
      custom_information: nil,
      soft_descriptor: nil,
      platform_id: nil,
      merchant_id: @merchant_id,
      mws_auth_token: nil
    )

      if order_reference?(amazon_reference_id)
        call_order_reference_api(
          amazon_reference_id,
          authorization_reference_id,
          charge_amount,
          charge_currency_code,
          charge_note,
          charge_order_id,
          store_name,
          custom_information,
          soft_descriptor,
          platform_id,
          merchant_id,
          mws_auth_token
        )
      elsif billing_agreement?(amazon_reference_id)
        call_billing_agreement_api(
          amazon_reference_id,
          authorization_reference_id,
          charge_amount,
          charge_currency_code,
          charge_note,
          charge_order_id,
          store_name,
          custom_information,
          soft_descriptor,
          platform_id,
          merchant_id,
          mws_auth_token
        )
      end
    end
def charge(
      amazon_reference_id,
      authorization_reference_id,
      charge_amount,
      charge_currency_code: @currency_code,
      charge_note: nil,
      charge_order_id: nil,
      store_name: nil,
      custom_information: nil,
      soft_descriptor: nil,
      platform_id: nil,
      merchant_id: @merchant_id,
      mws_auth_token: nil
    )

      if order_reference?(amazon_reference_id)
        call_order_reference_api(
          amazon_reference_id,
          authorization_reference_id,
          charge_amount,
          charge_currency_code,
          charge_note,
          charge_order_id,
          store_name,
          custom_information,
          soft_descriptor,
          platform_id,
          merchant_id,
          mws_auth_token
        )
      elsif billing_agreement?(amazon_reference_id)
        call_billing_agreement_api(
          amazon_reference_id,
          authorization_reference_id,
          charge_amount,
          charge_currency_code,
          charge_note,
          charge_order_id,
          store_name,
          custom_information,
          soft_descriptor,
          platform_id,
          merchant_id,
          mws_auth_token
        )
      end
    end
This method combines multiple API calls to perform
 a complete transaction with minimum requirements.
 @param amazon_reference_id [String]
 @param authorization_reference_id [String]
 @param charge_amount [String]
 @optional charge_currency_code [String]
 @optional charge_note [String]
 @optional charge_order [String]
 @optional store_name [String]
 @optional custom_information [String]
 @optional soft_descriptor [String]
 @optional platform_id [String]
 @optional merchant_id [String]
 @optional mws_auth_token [String]