Class: MerbMerchant::Billing::TrustCommerceGateway

Inherits:
Gateway
  • Object
show all
Defined in:
lib/merb_merchant/billing/gateways/trust_commerce.rb

Overview

TO USE: First, make sure you have everything setup correctly and all of your dependencies in place with:

require 'rubygems'
require 'merb_merchant'

MerbMerchant expects amounts to be Integer values in cents

tendollar = 1000

Next, create a credit card object using a TC approved test card.

creditcard = MerbMerchant::Billing::CreditCard.new(
  :number => '4111111111111111',
  :month => 8,
  :year => 2006,
  :first_name => 'Longbob',
  :last_name => 'Longsen'
)

To finish setting up, create the merb_merchant object you will be using, with the TrustCommerce gateway. If you have a functional TrustCommerce account, replace login and password with your account info. Otherwise the defaults will work for testing.

gateway = MerbMerchant::Billing::Base.gateway(:trust_commerce).new(:login => "TestMerchant", :password => "password")

Now we are ready to process our transaction

response = gateway.purchase(tendollar, creditcard)

Sending a transaction to TrustCommerce with merb_merchant returns a Response object, which consistently allows you to:

1) Check whether the transaction was successful

response.success?

2) Retrieve any message returned by TrustCommerce, either a “transaction was successful” note or an explanation of why the transaction was rejected.

response.message

3) Retrieve and store the unique transaction ID returned by Trust Commerece, for use in referencing the transaction in the future.

response.params["transid"]

For higher performance and failover with the TrustCommerceGateway you can install the TCLink library from www.trustcommerce.com/tclink.html. Follow the instructions available there to get it working on your system. MerbMerchant will automatically use tclink if available.

The TCLink library has the following added benefits:

* Good transaction times. Transaction duration under 1.2 seconds are common.
* Fail-over to geographically distributed servers for extreme reliability

Once it is installed, you should be able to make sure that it is visible to your ruby install by opening irb and typing “require ‘tclink’”, which should return “true”.

This should be enough to get you started with Trust Commerce and merb_merchant. For further information, review the methods below and the rest of merb_merchant’s documentation, as well as Trust Commerce’s user and developer documentation.

Constant Summary collapse

URL =
'https://vault.trustcommerce.com/trans/'
SUCCESS_TYPES =
["approved", "accepted"]
DECLINE_CODES =
{
  "decline"       => "The credit card was declined",
  "avs"           => "AVS failed; the address entered does not match the billing address on file at the bank",
  "cvv"           => "CVV failed; the number provided is not the correct verification number for the card",
  "call"          => "The card must be authorized manually over the phone",
  "expiredcard"   => "Issuer was not certified for card verification",
  "carderror"     => "Card number is invalid",
  "authexpired"   => "Attempt to postauth an expired (more than 14 days old) preauth",
  "fraud"         => "CrediGuard fraud score was below requested threshold",
  "blacklist"     => "CrediGuard blacklist value was triggered", 
  "velocity"      => "CrediGuard velocity control value was triggered",
  "dailylimit"    => "Daily limit in transaction count or amount as been reached",
  "weeklylimit"   => "Weekly limit in transaction count or amount as been reached",
  "monthlylimit"  => "Monthly limit in transaction count or amount as been reached"
}
BADDATA_CODES =
{
  "missingfields"       => "One or more parameters required for this transaction type were not sent",
  "extrafields"         => "Parameters not allowed for this transaction type were sent",
  "badformat"           => "A field was improperly formatted, such as non-digit characters in a number field",
  "badlength"           => "A field was longer or shorter than the server allows",
  "merchantcantaccept"  => "The merchant can't accept data passed in this field",
  "mismatch"            => "Data in one of the offending fields did not cross-check with the other offending field"
}
ERROR_CODES =
{
  "cantconnect"   => "Couldn't connect to the TrustCommerce gateway",
  "dnsfailure"    => "The TCLink software was unable to resolve DNS hostnames",
  "linkfailure"   => "The connection was established, but was severed before the transaction could complete",
  "failtoprocess" => "The bank servers are offline and unable to authorize transactions"
}
TEST_LOGIN =
'TestMerchant'
TEST_PASSWORD =
'password'

Constants inherited from Gateway

Gateway::DEBIT_CARDS

Constants included from PostsData

PostsData::MAX_RETRIES, PostsData::OPEN_TIMEOUT, PostsData::READ_TIMEOUT

Instance Attribute Summary

Attributes inherited from Gateway

#options

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Gateway

#card_brand, card_brand, inherited, supports?

Methods included from Utils

generate_unique_id

Methods included from CreditCardFormatting

#format

Methods included from RequiresParameters

#requires!

Methods included from PostsData

included, #ssl_get, #ssl_post

Constructor Details

#initialize(options = {}) ⇒ TrustCommerceGateway

Creates a new TrustCommerceGateway

The gateway requires that a valid login and password be passed in the options hash.

Options

  • :login – The TrustCommerce account login.

  • :password – The TrustCommerce account password.

  • :test => true or false – Perform test transactions

Test Account Credentials

  • :login – TestMerchant

  • :password – password



131
132
133
134
135
136
# File 'lib/merb_merchant/billing/gateways/trust_commerce.rb', line 131

def initialize(options = {})
  requires!(options, :login, :password)

  @options = options
  super
end

Class Method Details

.tclink?Boolean

Returns:

  • (Boolean)


113
114
115
# File 'lib/merb_merchant/billing/gateways/trust_commerce.rb', line 113

def self.tclink?
  defined?(TCLink)
end

Instance Method Details

#authorize(money, creditcard_or_billing_id, options = {}) ⇒ Object

authorize() is the first half of the preauth(authorize)/postauth(capture) model. The TC API docs call this preauth, we preserve merb_merchant’s nomenclature of authorize() for consistency with the rest of the library. This method simply checks to make sure funds are available for a transaction, and returns a transid that can be used later to postauthorize (capture) the funds.



152
153
154
155
156
157
158
159
160
161
162
# File 'lib/merb_merchant/billing/gateways/trust_commerce.rb', line 152

def authorize(money, creditcard_or_billing_id, options = {})
  parameters = {
    :amount => amount(money),
  }                                                             
  
  add_order_id(parameters, options)
  add_customer_data(parameters, options)
  add_payment_source(parameters, creditcard_or_billing_id)
  add_addresses(parameters, options)
  commit('preauth', parameters)
end

#capture(money, authorization, options = {}) ⇒ Object

capture() is the second half of the preauth(authorize)/postauth(capture) model. The TC API docs call this postauth, we preserve merb_merchant’s nomenclature of capture() for consistency with the rest of the library. To process a postauthorization with TC, you need an amount in cents or a money object, and a TC transid.



181
182
183
184
185
186
187
188
# File 'lib/merb_merchant/billing/gateways/trust_commerce.rb', line 181

def capture(money, authorization, options = {})
  parameters = {
    :amount => amount(money),
    :transid => authorization,
  }
                                            
  commit('postauth', parameters)
end

#credit(money, identification, options = {}) ⇒ Object

credit() allows you to return money to a card that was previously billed. You need to supply the amount, in cents or a money object, that you want to refund, and a TC transid for the transaction that you are refunding.



192
193
194
195
196
197
198
199
# File 'lib/merb_merchant/billing/gateways/trust_commerce.rb', line 192

def credit(money, identification, options = {})  
  parameters = {
    :amount => amount(money),
    :transid => identification
  }
                                            
  commit('credit', parameters)
end

#purchase(money, creditcard_or_billing_id, options = {}) ⇒ Object

purchase() is a simple sale. This is one of the most common types of transactions, and is extremely simple. All that you need to process a purchase are an amount in cents or a money object and a creditcard object or billingid string.



166
167
168
169
170
171
172
173
174
175
176
# File 'lib/merb_merchant/billing/gateways/trust_commerce.rb', line 166

def purchase(money, creditcard_or_billing_id, options = {})        
  parameters = {
    :amount => amount(money),
  }                                                             
  
  add_order_id(parameters, options)
  add_customer_data(parameters, options)
  add_payment_source(parameters, creditcard_or_billing_id)
  add_addresses(parameters, options)
  commit('sale', parameters)
end

#recurring(money, creditcard, options = {}) ⇒ Object

recurring() a TrustCommerce account that is activated for Citatdel, TrustCommerce’s hosted customer billing info database.

Recurring billing uses the same TC action as a plain-vanilla ‘store’, but we have a separate method for clarity. It can be called like store, with the addition of a required ‘periodicity’ parameter:

The parameter :periodicity should be specified as either :bimonthly, :monthly, :biweekly, :weekly, :yearly or :daily

gateway.recurring(tendollar, creditcard, :periodicity => :weekly)

You can optionally specify how long you want payments to continue using ‘payments’



234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
# File 'lib/merb_merchant/billing/gateways/trust_commerce.rb', line 234

def recurring(money, creditcard, options = {})        
  requires!(options, [:periodicity, :bimonthly, :monthly, :biweekly, :weekly, :yearly, :daily] )

  cycle = case options[:periodicity]
  when :monthly
    '1m'
  when :bimonthly
    '2m'
  when :weekly
    '1w'
  when :biweekly
    '2w'
  when :yearly
    '1y'
  when :daily
    '1d'
  end
  
  parameters = {
    :amount => amount(money),
    :cycle => cycle,
    :verify => options[:verify] || 'y',
    :billingid => options[:billingid] || nil,
    :payments => options[:payments] || nil,
  }
  
  add_creditcard(parameters, creditcard)
                                            
  commit('store', parameters)
end

#store(creditcard, options = {}) ⇒ Object

store() requires a TrustCommerce account that is activated for Citatdel. You can call it with a credit card and a billing ID you would like to use to reference the stored credit card info for future captures. Use ‘verify’ to specify whether you want to simply store the card in the DB, or you want TC to verify the data first.



269
270
271
272
273
274
275
276
277
278
# File 'lib/merb_merchant/billing/gateways/trust_commerce.rb', line 269

def store(creditcard, options = {})   
  parameters = {
    :verify => options[:verify] || 'y',
    :billingid => options[:billingid] || options[:billing_id] || nil,
  }
  
  add_creditcard(parameters, creditcard)
  add_addresses(parameters, options)                              
  commit('store', parameters)
end

#tclink?Boolean

Returns:

  • (Boolean)


138
139
140
# File 'lib/merb_merchant/billing/gateways/trust_commerce.rb', line 138

def tclink?
  self.class.tclink?
end

#test?Boolean

Returns:

  • (Boolean)


142
143
144
145
# File 'lib/merb_merchant/billing/gateways/trust_commerce.rb', line 142

def test?
  @options[:login] == TEST_LOGIN &&
    @options[:password] == TEST_PASSWORD || @options[:test] || super
end

#unstore(identification, options = {}) ⇒ Object

To unstore a creditcard stored in Citadel using store() or recurring(), all that is required is the billing id. When you run unstore() the information will be removed and a Response object will be returned indicating the success of the action.



282
283
284
285
286
287
288
# File 'lib/merb_merchant/billing/gateways/trust_commerce.rb', line 282

def unstore(identification, options = {})
  parameters = {
    :billingid => identification,
  }
                                            
  commit('unstore', parameters)
end

#void(authorization, options = {}) ⇒ Object

void() clears an existing authorization and releases the reserved fund s back to the cardholder. The TC API refers to this transaction as a reversal. After voiding, you will no longer be able to capture funds from this authorization. TrustCommerce seems to always return a status of “accepted” even if the transid you are trying to deauthorize has already been captured. Note: Your account needs to be configured by TrustCommerce to allow for reversal transactions before you can use this method.

NOTE: AMEX preauth’s cannot be reversed. If you want to clear it more quickly than the automatic expiration (7-10 days), you will have to capture it and then immediately issue a credit for the same amount which should clear the customers credit card with 48 hours according to TC.



215
216
217
218
219
220
221
# File 'lib/merb_merchant/billing/gateways/trust_commerce.rb', line 215

def void(authorization, options = {})
  parameters = {
    :transid => authorization,
  }
  
  commit('reversal', parameters)
end