Question

I am trying to do card verification with the braintree api when I create a customer. Here is the code that creates the customer:

@braintree_id = "#{current_user.profile_name}" + rand(5..1000).to_s
@result = Braintree::Customer.create(
    :id => @braintree_id,
    :first_name => employer_account_params[:first_name],
    :last_name => employer_account_params[:last_name],
    :company => employer_account_params[:company],
    :email => employer_account_params[:email],
    :phone => employer_account_params[:phone],
    :fax => employer_account_params[:fax],
    :website => employer_account_params[:website],
    :credit_card => {
        :number => employer_account_params[:credit_card][:number],
        :expiration_date => employer_account_params[:credit_card][:expiration_date],
        :billing_address => {
          :street_address => employer_account_params[:credit_card][:billing_address][:street_address],
          :extended_address => employer_account_params[:credit_card][:billing_address][:extended_address],
          :locality => employer_account_params[:credit_card][:billing_address][:locality],
          :region => employer_account_params[:credit_card][:billing_address][:region],
          :postal_code => employer_account_params[:credit_card][:billing_address][:postal_code],
          :country_code_alpha2 => employer_account_params[:credit_card][:billing_address][:country_code_alpha2]
        },
        :options => {
            :verify_card => true
            }
    }
)
puts 'result is ' + @result.inspect.to_s
@verification = @result.credit_card_verification
puts 'verification' + @verification.inspect.to_s
puts 'card results: ' + @verification.gateway_rejection_reason.to_s

The problem is that credit_card_verification is always nil, regardless of whether or not @result returns true or false. Here is the console logs from the code above:

11:57:32 web.1  | result is #<Braintree::SuccessfulResult customer:#<Braintree::Customer id: "person2359", company: nil, email: nil, fax: nil, first_name: "sgdgsfd", last_name: nil, phone: nil, website: nil, created_at: 2014-04-29 15:57:32 UTC, updated_at: 2014-04-29 15:57:32 UTC, addresses: [#<Braintree::Address:0x007fe3639cefe8 @gateway=#<Braintree::Gateway:0x007fe364062eb8 @config=#<Braintree::Configuration:0x007fe3640630e8 @endpoint=nil, @environment=:sandbox, @public_key="vfyzr8zb7jqdhpxn", @private_key="[FILTERED]">>, @id="s7", @customer_id="person2359", @first_name=nil, @last_name=nil, @company=nil, @street_address="sdgfsgfgsdf", @extended_address=nil, @locality=nil, @region=nil, @postal_code=nil, @country_code_alpha2=nil, @country_code_alpha3=nil, @country_code_numeric=nil, @country_name=nil, @created_at=2014-04-29 15:57:32 UTC, @updated_at=2014-04-29 15:57:32 UTC>], credit_cards: [#<Braintree::CreditCard token: "66jz9r", billing_address: #<Braintree::Address:0x007fe3639cf8f8 @gateway=#<Braintree::Gateway:0x007fe364062eb8 @config=#<Braintree::Configuration:0x007fe3640630e8 @endpoint=nil, @environment=:sandbox, @public_key="vfyzr8zb7jqdhpxn", @private_key="[FILTERED]">>, @id="s7", @customer_id="person2359", @first_name=nil, @last_name=nil, @company=nil, @street_address="sdgfsgfgsdf", @extended_address=nil, @locality=nil, @region=nil, @postal_code=nil, @country_code_alpha2=nil, @country_code_alpha3=nil, @country_code_numeric=nil, @country_name=nil, @created_at=2014-04-29 15:57:32 UTC, @updated_at=2014-04-29 15:57:32 UTC>, bin: "411111", card_type: "Visa", cardholder_name: nil, created_at: 2014-04-29 15:57:32 UTC, customer_id: "person2359", expiration_month: "11", expiration_year: "2015", last_4: "1111", updated_at: 2014-04-29 15:57:32 UTC, prepaid: "Unknown", payroll: "Unknown", commercial: "Unknown", debit: "Unknown", durbin_regulated: "Unknown", healthcare: "Unknown", country_of_issuance: "Unknown", issuing_bank: "Unknown", image_url: "https://assets.braintreegateway.com/payment_method_logo/visa.png?environment=sandbox&merchant_id=b7gwpzqrspgmyc2x">]>>
11:57:32 web.1  | Completed 500 Internal Server Error in 844ms
11:57:32 web.1  | 
11:57:32 web.1  | NoMethodError (undefined method `credit_card_verification' for #<Braintree::SuccessfulResult:0x007fe3639ce4d0>):
11:57:32 web.1  |   app/controllers/payments_controller.rb:210:in `create_employer_account'
11:57:32 web.1  | 
11:57:32 web.1  | 
11:57:32 web.1  |   Rendered /usr/local/rvm/gems/ruby-2.0.0-p247@firehose/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_source.erb (0.7ms)
11:57:32 web.1  |   Rendered /usr/local/rvm/gems/ruby-2.0.0-p247@firehose/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_trace.erb (0.9ms)
11:57:32 web.1  |   Rendered /usr/local/rvm/gems/ruby-2.0.0-p247@firehose/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (1.0ms)
11:57:32 web.1  |   Rendered /usr/local/rvm/gems/ruby-2.0.0-p247@firehose/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (16.2ms)

How do I make it so verification works?

Was it helpful?

Solution

Braintree will only run the verification if the passed parameters are valid, and only return the verification if it failed.

In your first example (now edited out of your post), the creation failed because you didn't pass valid parameters.

In your second example, the verification succeeded so it isn't returned.

You can simulate these different conditions in the Sandbox by using an invalid card number or one of the Sandbox credit card numbers or unsuccessful verification numbers.

Example:

result = Braintree::Customer.create(  
  :credit_card => {                   
    :number => "4000111111111115",    
    :expiration_month => "10",        
    :expiration_year => "2014",       
    :cvv => "200",                    
    :options => {:verify_card => true}
  }                                   
)                                     

if result.success?
  # handle success
elsif result.credit_card_verification
  p verification.processor_response_code
  p verification.processor_response_text
else
  # use result.errors to see what part of the request was invalid
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top