code: public Transaction createWithTokenAndFee( String token, Integer amount, String currency, String description, Fee fee ) {
      ValidationUtils.validatesToken( token );
      ValidationUtils.validatesAmount( amount );
      ValidationUtils.validatesCurrency( currency );
      ValidationUtils.validatesFee( fee );
  
      ParameterMap<String, String> params = new ParameterMap<String, String>();
      params.add( "token", token );
      params.add( "amount", String.valueOf( amount ) );
      params.add( "currency", currency );
      params.add( "source", String.format( "%s-%s", PaymillContext.getProjectName(), PaymillContext.getProjectVersion() ) );
  
      if( StringUtils.isNotBlank( description ) )
        params.add( "description", description );
      if( fee != null && fee.getAmount() != null )
        params.add( "fee_amount", String.valueOf( fee.getAmount() ) );
      if( fee != null && StringUtils.isNotBlank( fee.getPayment() ) )
        params.add( "fee_payment", fee.getPayment() );
  
      return RestfulUtils.create( TransactionService.PATH, params, Transaction.class, super.httpClient );
    }
docs: Executes a {@link Transaction} with token for the given amount in the given currency.
  @param token
  Token generated by PAYMILL Bridge, which represents a credit card or direct debit.
  @param amount
  Amount (in cents) which will be charged.
  @param currency
  ISO 4217 formatted currency code.
  @param description
  A short description for the transaction.
  @param fee
  A {@link Fee}.
  @return {@link Transaction} object indicating whether a the call was successful or not.