code: @Nullable
      @SuppressWarnings("unchecked")
      Token createToken(
              @NonNull Map<String, Object> tokenParams,
              @NonNull RequestOptions options,
              @NonNull @Token.TokenType String tokenType)
              throws AuthenticationException,
              InvalidRequestException,
              APIConnectionException,
              CardException,
              APIException {
  
          try {
              final String apiKey = options.getPublishableApiKey();
              if (StripeTextUtils.isBlank(apiKey)) {
                  return null;
              }
  
              final List<String> loggingTokens =
                      (List<String>) tokenParams.get(LoggingUtils.FIELD_PRODUCT_USAGE);
              tokenParams.remove(LoggingUtils.FIELD_PRODUCT_USAGE);
  
              logTelemetryData();
  
              final Map<String, Object> loggingParams =
                      mLoggingUtils.getTokenCreationParams(loggingTokens, apiKey, tokenType);
              logApiCall(loggingParams, options);
          } catch (ClassCastException classCastEx) {
              // This can only happen if someone puts a weird object in the map.
              tokenParams.remove(LoggingUtils.FIELD_PRODUCT_USAGE);
          }
  
          return requestToken(getTokensUrl(), tokenParams, options);
      }
docs: Create a {@link Token} using the input token parameters.
  
  @param tokenParams a mapped set of parameters representing the object for which this token
  is being created
  @param options a {@link RequestOptions} object that contains connection data like the api
  key, api version, etc
  @param tokenType the {@link Token.TokenType} being created
  @return a {@link Token} that can be used to perform other operations with this card
  @throws AuthenticationException if there is a problem authenticating to the Stripe API
  @throws InvalidRequestException if one or more of the parameters is incorrect
  @throws APIConnectionException if there is a problem connecting to the Stripe API
  @throws CardException if there is a problem with the card information
  @throws APIException for unknown Stripe API errors. These should be rare.