public
Last active — forked from dpickett/braintree.rb

  • Download Gist
braintree.rb
Ruby
1 2 3 4 5 6 7 8 9 10 11
if Rails.env.production?
Braintree::Configuration.environment = Rails.env.staging? ? :sandbox : :production
Braintree::Configuration.merchant_id = ENV["braintree_merchant_id"]
Braintree::Configuration.public_key = ENV["braintree_public_key"]
Braintree::Configuration.private_key = ENV["braintree_private_key"]
else
Braintree::Configuration.environment = :sandbox
Braintree::Configuration.merchant_id = "<super secret>"
Braintree::Configuration.public_key = "<super secret>"
Braintree::Configuration.private_key = "<super secret>"
end
braintree_test_app.rb
Ruby
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
if Rails.env.test?
::Rails.application.config.middleware.use BraintreeTestApp
end
 
class BraintreeTestApp
def initialize(app)
@app = app
end
def call(env)
@env = env
config = Braintree::Configuration.instantiate
if request.path =~ /\/merchants\/#{config.merchant_id}\/transparent_redirect_requests$/
#proxy post to braintree
uri = URI.parse(config.protocol + "://" + config.server + ":" +
config.port.to_s + request.path)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
res = http.post(uri.path, request.body.read)
 
if res.code == "303"
header_hash = res.header.to_hash
header_hash["location"].first.gsub!("http://localhost:3000/", "http://www.example.com/")
[303, {"location" => header_hash["location"].first}, ""]
else
raise "unexpected response from Braintree: expected a 303"
end
else
@app.call(env)
end
end
 
def request
@request = Rack::Request.new(@env)
end
end
new.html.erb
HTML+ERB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
<%= simple_form_for @braintree_customer,
:as => :customer,
:url => Braintree::TransparentRedirect.url,
:html => {:class => "form"} do |f| %>
 
<%= f.input :first_name, :required => true %>
<%= f.input :last_name, :required => true %>
<%= f.input :email, :required => true %>
 
<%= f.fields_for :credit_card, @braintree_customer.credit_card do |cc| -%>
<%= cc.input :number,
:input_html => {:autocomplete => "off" },
:wrapper_html => {:class => "credit_card_number"},
:hint => image_tag("/images/cards_accepted.png", :alt => "MasterCard, Visa") %>
<%= cc.input :expiration_month, :collection => 1..12,
:required => true,
:wrapper_html => {:class => "expiration_month"} %>
<%= cc.input :expiration_year,
:wrapper_html => {:class => "expiration_year"},
:collection => Time.zone.now.year..(Time.zone.now.year + 25) %>
 
<%= cc.input :cvv,
:input_html => {:autocomplete => "off" },
:required => true,
:wrapper_html => {:class => "cvv"} %>
<%- end -%>
<%= f.button :submit %>
<%- end -%>
schema_change.rb
Ruby
1
add_column :accounts, :payment_processor_subscription_id, :integer

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.