From 411a93001c017d41fd545e0dc9d4edef3422759e Mon Sep 17 00:00:00 2001 From: Jack Chu Date: Tue, 14 Jul 2015 10:33:14 -0400 Subject: [PATCH 001/163] initial project --- .gitignore | 9 +++++++ .rspec | 2 ++ .travis.yml | 4 ++++ Gemfile | 4 ++++ LICENSE.txt | 21 ++++++++++++++++ README.md | 41 ++++++++++++++++++++++++++++++++ Rakefile | 6 +++++ bin/console | 14 +++++++++++ bin/setup | 7 ++++++ lib/solidus_braintree.rb | 5 ++++ lib/solidus_braintree/version.rb | 3 +++ solidus_braintree.gemspec | 33 +++++++++++++++++++++++++ spec/solidus_braintree_spec.rb | 11 +++++++++ spec/spec_helper.rb | 2 ++ 14 files changed, 162 insertions(+) create mode 100644 .gitignore create mode 100644 .rspec create mode 100644 .travis.yml create mode 100644 Gemfile create mode 100644 LICENSE.txt create mode 100644 README.md create mode 100644 Rakefile create mode 100755 bin/console create mode 100755 bin/setup create mode 100644 lib/solidus_braintree.rb create mode 100644 lib/solidus_braintree/version.rb create mode 100644 solidus_braintree.gemspec create mode 100644 spec/solidus_braintree_spec.rb create mode 100644 spec/spec_helper.rb diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..0cb6eeb0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +/.bundle/ +/.yardoc +/Gemfile.lock +/_yardoc/ +/coverage/ +/doc/ +/pkg/ +/spec/reports/ +/tmp/ diff --git a/.rspec b/.rspec new file mode 100644 index 00000000..8c18f1ab --- /dev/null +++ b/.rspec @@ -0,0 +1,2 @@ +--format documentation +--color diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000..91bb4773 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,4 @@ +language: ruby +rvm: + - 2.1.6 +before_install: gem install bundler -v 1.10.5 diff --git a/Gemfile b/Gemfile new file mode 100644 index 00000000..01ad9a5b --- /dev/null +++ b/Gemfile @@ -0,0 +1,4 @@ +source 'https://rubygems.org' + +# Specify your gem's dependencies in solidus_braintree.gemspec +gemspec diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 00000000..6534544d --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015 Jack Chu + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 00000000..a933e08b --- /dev/null +++ b/README.md @@ -0,0 +1,41 @@ +# SolidusBraintree + +Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/solidus_braintree`. To experiment with that code, run `bin/console` for an interactive prompt. + +TODO: Delete this and the text above, and describe your gem + +## Installation + +Add this line to your application's Gemfile: + +```ruby +gem 'solidus_braintree' +``` + +And then execute: + + $ bundle + +Or install it yourself as: + + $ gem install solidus_braintree + +## Usage + +TODO: Write usage instructions here + +## Development + +After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake rspec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment. + +To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org). + +## Contributing + +Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/solidus_braintree. + + +## License + +The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT). + diff --git a/Rakefile b/Rakefile new file mode 100644 index 00000000..b7e9ed54 --- /dev/null +++ b/Rakefile @@ -0,0 +1,6 @@ +require "bundler/gem_tasks" +require "rspec/core/rake_task" + +RSpec::Core::RakeTask.new(:spec) + +task :default => :spec diff --git a/bin/console b/bin/console new file mode 100755 index 00000000..f8d2e27e --- /dev/null +++ b/bin/console @@ -0,0 +1,14 @@ +#!/usr/bin/env ruby + +require "bundler/setup" +require "solidus_braintree" + +# You can add fixtures and/or initialization code here to make experimenting +# with your gem easier. You can also use a different console, if you like. + +# (If you use this, don't forget to add pry to your Gemfile!) +# require "pry" +# Pry.start + +require "irb" +IRB.start diff --git a/bin/setup b/bin/setup new file mode 100755 index 00000000..b65ed50f --- /dev/null +++ b/bin/setup @@ -0,0 +1,7 @@ +#!/bin/bash +set -euo pipefail +IFS=$'\n\t' + +bundle install + +# Do any other automated setup that you need to do here diff --git a/lib/solidus_braintree.rb b/lib/solidus_braintree.rb new file mode 100644 index 00000000..58a6c2e8 --- /dev/null +++ b/lib/solidus_braintree.rb @@ -0,0 +1,5 @@ +require "solidus_braintree/version" + +module SolidusBraintree + # Your code goes here... +end diff --git a/lib/solidus_braintree/version.rb b/lib/solidus_braintree/version.rb new file mode 100644 index 00000000..77ba3ced --- /dev/null +++ b/lib/solidus_braintree/version.rb @@ -0,0 +1,3 @@ +module SolidusBraintree + VERSION = "0.1.0" +end diff --git a/solidus_braintree.gemspec b/solidus_braintree.gemspec new file mode 100644 index 00000000..ff9d43dc --- /dev/null +++ b/solidus_braintree.gemspec @@ -0,0 +1,33 @@ +# coding: utf-8 +lib = File.expand_path('../lib', __FILE__) +$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) +require 'solidus_braintree/version' + +Gem::Specification.new do |spec| + spec.name = "solidus_braintree" + spec.version = SolidusBraintree::VERSION + spec.authors = ["Jack Chu"] + spec.email = ["jack@jackchu.com"] + + spec.summary = %q{TODO: Write a short summary, because Rubygems requires one.} + spec.description = %q{TODO: Write a longer description or delete this line.} + spec.homepage = "TODO: Put your gem's website or public repo URL here." + spec.license = "MIT" + + # Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or + # delete this section to allow pushing this gem to any host. + if spec.respond_to?(:metadata) + spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'" + else + raise "RubyGems 2.0 or newer is required to protect against public gem pushes." + end + + spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) } + spec.bindir = "exe" + spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) } + spec.require_paths = ["lib"] + + spec.add_development_dependency "bundler", "~> 1.10" + spec.add_development_dependency "rake", "~> 10.0" + spec.add_development_dependency "rspec" +end diff --git a/spec/solidus_braintree_spec.rb b/spec/solidus_braintree_spec.rb new file mode 100644 index 00000000..11689b18 --- /dev/null +++ b/spec/solidus_braintree_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe SolidusBraintree do + it 'has a version number' do + expect(SolidusBraintree::VERSION).not_to be nil + end + + it 'does something useful' do + expect(false).to eq(true) + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb new file mode 100644 index 00000000..2c03dffe --- /dev/null +++ b/spec/spec_helper.rb @@ -0,0 +1,2 @@ +$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__) +require 'solidus_braintree' From b716e1ebf62825a819e14450dfdd3fb002e42576 Mon Sep 17 00:00:00 2001 From: Jack Chu Date: Tue, 14 Jul 2015 18:54:19 -0400 Subject: [PATCH 002/163] Added Braintree v.zero gateway --- .gitignore | 1 + Guardfile | 70 +++ Rakefile | 9 +- .../payment_braintree_nonce_concern.rb | 22 + app/models/spree/gateway/braintree.rb | 254 +++++++++++ .../install/install_generator.rb | 28 ++ lib/solidus_braintree.rb | 6 +- lib/solidus_braintree/engine.rb | 11 + solidus_braintree.gemspec | 24 +- .../Credit_Card/decline/fails.yml | 225 ++++++++++ .../Credit_Card/invalid_email/fails.yml | 96 ++++ .../should_have_the_correct_attributes.yml | 116 +++++ .../Credit_Card/successful/succeeds.yml | 320 ++++++++++++++ .../can_be_fully_credited.yml | 389 ++++++++++++++++ .../with_completed_payment/can_be_voided.yml | 415 ++++++++++++++++++ ...fails_capture_with_settlement_declined.yml | 302 +++++++++++++ .../should_have_the_correct_attributes.yml | 96 ++++ .../succeeds_authorization_and_capture.yml | 302 +++++++++++++ .../should_raise_exception.yml | 96 ++++ .../on_a_payment/PayPal/failure/fails.yml | 303 +++++++++++++ .../PayPal/success/can_be_voided.yml | 302 +++++++++++++ .../on_a_payment/PayPal/success/succeeds.yml | 302 +++++++++++++ spec/solidus_braintree_spec.rb | 4 - spec/spec_helper.rb | 51 +++ spec/spree/gateway/braintree_spec.rb | 212 +++++++++ 25 files changed, 3942 insertions(+), 14 deletions(-) create mode 100644 Guardfile create mode 100644 app/models/concerns/payment_braintree_nonce_concern.rb create mode 100644 app/models/spree/gateway/braintree.rb create mode 100644 lib/generators/solidus_braintree/install/install_generator.rb create mode 100644 lib/solidus_braintree/engine.rb create mode 100644 spec/cassettes/Spree_Gateway_Braintree/Credit_Card/decline/fails.yml create mode 100644 spec/cassettes/Spree_Gateway_Braintree/Credit_Card/invalid_email/fails.yml create mode 100644 spec/cassettes/Spree_Gateway_Braintree/Credit_Card/should_have_the_correct_attributes.yml create mode 100644 spec/cassettes/Spree_Gateway_Braintree/Credit_Card/successful/succeeds.yml create mode 100644 spec/cassettes/Spree_Gateway_Braintree/Credit_Card/with_completed_payment/can_be_fully_credited.yml create mode 100644 spec/cassettes/Spree_Gateway_Braintree/Credit_Card/with_completed_payment/can_be_voided.yml create mode 100644 spec/cassettes/Spree_Gateway_Braintree/PayPal/fails_capture_with_settlement_declined.yml create mode 100644 spec/cassettes/Spree_Gateway_Braintree/PayPal/should_have_the_correct_attributes.yml create mode 100644 spec/cassettes/Spree_Gateway_Braintree/PayPal/succeeds_authorization_and_capture.yml create mode 100644 spec/cassettes/Spree_Gateway_Braintree/Previously_consumed_nonce/should_raise_exception.yml create mode 100644 spec/cassettes/Spree_Gateway_Braintree/on_a_payment/PayPal/failure/fails.yml create mode 100644 spec/cassettes/Spree_Gateway_Braintree/on_a_payment/PayPal/success/can_be_voided.yml create mode 100644 spec/cassettes/Spree_Gateway_Braintree/on_a_payment/PayPal/success/succeeds.yml create mode 100644 spec/spree/gateway/braintree_spec.rb diff --git a/.gitignore b/.gitignore index 0cb6eeb0..79a1f313 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ /pkg/ /spec/reports/ /tmp/ +/spec/dummy diff --git a/Guardfile b/Guardfile new file mode 100644 index 00000000..deea540d --- /dev/null +++ b/Guardfile @@ -0,0 +1,70 @@ +# A sample Guardfile +# More info at https://github.com/guard/guard#readme + +## Uncomment and set this to only include directories you want to watch +# directories %w(app lib config test spec features) \ +# .select{|d| Dir.exists?(d) ? d : UI.warning("Directory #{d} does not exist")} + +## Note: if you are using the `directories` clause above and you are not +## watching the project directory ('.'), then you will want to move +## the Guardfile to a watched dir and symlink it back, e.g. +# +# $ mkdir config +# $ mv Guardfile config/ +# $ ln -s config/Guardfile . +# +# and, you'll have to watch "config/Guardfile" instead of "Guardfile" + +# Note: The cmd option is now required due to the increasing number of ways +# rspec may be run, below are examples of the most common uses. +# * bundler: 'bundle exec rspec' +# * bundler binstubs: 'bin/rspec' +# * spring: 'bin/rspec' (This will use spring if running and you have +# installed the spring binstubs per the docs) +# * zeus: 'zeus rspec' (requires the server to be started separately) +# * 'just' rspec: 'rspec' + +guard :rspec, cmd: "bundle exec rspec" do + require "guard/rspec/dsl" + dsl = Guard::RSpec::Dsl.new(self) + + # Feel free to open issues for suggestions and improvements + + # RSpec files + rspec = dsl.rspec + watch(rspec.spec_helper) { rspec.spec_dir } + watch(rspec.spec_support) { rspec.spec_dir } + watch(rspec.spec_files) + + # Ruby files + ruby = dsl.ruby + dsl.watch_spec_files_for(ruby.lib_files) + + # Rails files + rails = dsl.rails(view_extensions: %w(erb haml slim)) + dsl.watch_spec_files_for(rails.app_files) + dsl.watch_spec_files_for(rails.views) + + watch(rails.controllers) do |m| + [ + rspec.spec.("routing/#{m[1]}_routing"), + rspec.spec.("controllers/#{m[1]}_controller"), + rspec.spec.("acceptance/#{m[1]}") + ] + end + + # Rails config changes + watch(rails.spec_helper) { rspec.spec_dir } + watch(rails.routes) { "#{rspec.spec_dir}/routing" } + watch(rails.app_controller) { "#{rspec.spec_dir}/controllers" } + + # Capybara features specs + watch(rails.view_dirs) { |m| rspec.spec.("features/#{m[1]}") } + watch(rails.layouts) { |m| rspec.spec.("features/#{m[1]}") } + + # Turnip features and steps + watch(%r{^spec/acceptance/(.+)\.feature$}) + watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) do |m| + Dir[File.join("**/#{m[1]}.feature")][0] || "spec/acceptance" + end +end diff --git a/Rakefile b/Rakefile index b7e9ed54..f92295bf 100644 --- a/Rakefile +++ b/Rakefile @@ -1,6 +1,13 @@ require "bundler/gem_tasks" require "rspec/core/rake_task" +require 'spree/testing_support/common_rake' RSpec::Core::RakeTask.new(:spec) -task :default => :spec +task default: :spec + +desc "Generates a dummy app for testing" +task :test_app do + ENV['LIB_NAME'] = 'solidus_braintree' + Rake::Task['common:test_app'].invoke +end diff --git a/app/models/concerns/payment_braintree_nonce_concern.rb b/app/models/concerns/payment_braintree_nonce_concern.rb new file mode 100644 index 00000000..15ba2a49 --- /dev/null +++ b/app/models/concerns/payment_braintree_nonce_concern.rb @@ -0,0 +1,22 @@ +module SolidusBraintree + module PaymentBraintreeNonceConcern + extend ActiveSupport::Concern + included do + attr_accessor :payment_method_nonce + + prepend(InstanceMethods) + end + + module InstanceMethods + def create_payment_profile + return unless source.respond_to?(:has_payment_profile?) && !source.has_payment_profile? + + payment_method.create_profile_from_nonce(self.order.user, self.order.bill_address, self.payment_method_nonce) + rescue ActiveMerchant::ConnectionError => e + gateway_error e + end + end + end +end + +Spree::Payment.include SolidusBraintree::PaymentBraintreeNonceConcern diff --git a/app/models/spree/gateway/braintree.rb b/app/models/spree/gateway/braintree.rb new file mode 100644 index 00000000..c16fe176 --- /dev/null +++ b/app/models/spree/gateway/braintree.rb @@ -0,0 +1,254 @@ +require "braintree" + +module Spree + class Gateway::Braintree < ::Spree::Gateway + preference :environment, :string + preference :merchant_id, :string + preference :public_key, :string + preference :private_key, :string + + CARD_TYPE_MAPPING = { + 'American Express' => 'american_express', + 'Diners Club' => 'diners_club', + 'Discover' => 'discover', + 'JCB' => 'jcb', + 'Laser' => 'laser', + 'Maestro' => 'maestro', + 'MasterCard' => 'master', + 'Solo' => 'solo', + 'Switch' => 'switch', + 'Visa' => 'visa' + } + + ENVIRONMENTS = { + 'development' => :development, + 'qa' => :qa, + 'sandbox' => :sandbox, + 'production' => :production + } + + def gateway_options + { + environment: ENVIRONMENTS.fetch(preferred_environment), + merchant_id: preferred_merchant_id, + public_key: preferred_public_key, + private_key: preferred_private_key, + logger: ::Braintree::Configuration.logger.clone + } + end + + def braintree_gateway + @braintree_gateway ||= ::Braintree::Gateway.new(gateway_options) + end + + def payment_profiles_supported? + true + end + + def generate_client_token(options = {}) + braintree_gateway.client_token.generate(options) + end + + def create_profile_from_nonce(user, address, nonce, options = {}) + params = { + first_name: address.firstname, + last_name: address.lastname, + email: user.email, + credit_card: { + billing_address: map_address(address), + payment_method_nonce: nonce, + options: { + verify_card: true + }, + } + } + + params.merge!(options) + + result = braintree_gateway.customer.create(params) + + if result.success? + card = result.customer.payment_methods.last + + user.credit_cards.create! do |spree_cc| + if card.is_a?(::Braintree::PayPalAccount) + spree_cc.cc_type = 'paypal' + spree_cc.name = card.email + else + spree_cc.name = "#{address.firstname} #{address.lastname}" + spree_cc.cc_type = card.card_type.downcase + spree_cc.month = card.expiration_month + spree_cc.year = card.expiration_year + spree_cc.last_digits = card.last_4 + end + spree_cc.payment_method = self + spree_cc.gateway_customer_profile_id = customer_id(user) + spree_cc.gateway_payment_profile_id = card.token + end + else + raise Core::GatewayError, result.message + end + end + + def supports?(payment) + true + end + + def provider_class + self + end + + def authorize(cents, creditcard, options) + result = braintree_gateway.transaction.sale(transaction_authorize_or_purchase_params(cents, creditcard, options)) + handle_result(result) + end + + def purchase(cents, creditcard, options) + params = transaction_authorize_or_purchase_params(cents, creditcard, options) + params[:options][:submit_for_settlement] = true + result = braintree_gateway.transaction.sale(params) + handle_result(result) + end + + # order id for braintree is "#{order.number}-#{payment.number}" + def get_order_id_for_auth(order_id) + order_id && order_id.split('-')[0] + end + + def capture(money, authorization_code, options = {}) + result = braintree_gateway.transaction.submit_for_settlement(authorization_code, amount(money)) + handle_result(result) + end + + def void(authorization_code, source = {}, options = {}) + result = braintree_gateway.transaction.void(authorization_code) + + handle_result(result) + end + + def credit(cents, source, authorization_code, options = {}) + result = braintree_gateway.transaction.refund(authorization_code, amount(cents)) + handle_result(result) + end + + def voidable?(response_code) + transaction = braintree_gateway.transaction.find(response_code) + [ + ::Braintree::Transaction::Status::SubmittedForSettlement, + ::Braintree::Transaction::Status::Authorized, + ].include?(transaction.status) + end + + private + def customer_id(user) + "user_#{user.id}" + end + + def message_from_result(result) + if result.success? + "OK" + elsif result.errors.count == 0 && result.credit_card_verification + "Processor declined: #{result.credit_card_verification.processor_response_text} (#{result.credit_card_verification.processor_response_code})" + elsif result.errors.count == 0 && result.transaction + result.transaction.status + else + result.errors.map { |e| "#{e.message} (#{e.code})" }.join(" ") + end + end + + def handle_result(result) + ActiveMerchant::Billing::Response.new( + result.success?, + message_from_result(result), + {}, + { authorization: (result.transaction.id if result.success?) } + ) + end + + def map_address(addr) + { + first_name: addr.firstname, + last_name: addr.lastname, + street_address: addr.address1, + extended_address: addr.address2, + company: addr.company, + locality: addr.city, + region: addr.state ? addr.state.name : addr.state_name, + country_code_alpha3: addr.country.iso3, + postal_code: addr.zipcode + } + end + + def amount(cents) + sprintf("%.2f", cents.to_f / 100) + end + + def transaction_authorize_or_purchase_params(cents, creditcard, options = {}) + params = options.select {|k| %i[ + billing + billing_address_id + channel + custom_fields + customer + customer_id + descriptor + device_data + device_session_id + merchant_account_id + options + order_id + purchase_order_number + recurring + service_fee_amount + shipping + shipping_address_id + tax_amount + tax_exempt + ].include?(k)} + + params[:options] ||= {} + + params[:amount] = amount(cents) + + if params[:payment_method_nonce].nil? + params[:payment_method_token] = creditcard.gateway_payment_profile_id + params.delete(:billing_address) + end + + # Is this necessary? Or FRT specific? + params[:order_id] = get_order_id_for_auth(params[:order_id]) + + # if has profile, set the customer_id to the profile_id and delete the customer key + if creditcard.respond_to?(:gateway_customer_profile_id) && creditcard.gateway_customer_profile_id + params[:customer_id] = creditcard.gateway_customer_profile_id + params.delete(:customer) + # if no profile, define the customer key, delete the customer_id because they are + # mutually exclusive + else + params[:customer] = { + id: params[:customer_id], + email: options[:customer], + first_name: creditcard.first_name, + last_name: creditcard.last_name, + } + params.delete(:customer_id) + end + + # delete the shipping price in options + params.delete(:shipping) + + # if there's a shipping_address/billing_address, set it to the shipping/billing key + # and convert the address into a format Braintree understands + if params[:shipping_address] + params[:shipping] = map_address(params.delete(:shipping_address)) + end + if params[:billing_address] + params[:billing] = map_address(params.delete(:billing_address)) + end + + params[:channel] ||= "Spree" + + params + end + end +end diff --git a/lib/generators/solidus_braintree/install/install_generator.rb b/lib/generators/solidus_braintree/install/install_generator.rb new file mode 100644 index 00000000..fe49edda --- /dev/null +++ b/lib/generators/solidus_braintree/install/install_generator.rb @@ -0,0 +1,28 @@ +module SolidusBraintree + module Generators + class InstallGenerator < Rails::Generators::Base + class_option :auto_run_migrations, type: :boolean, default: false + + def add_migrations + run 'bundle exec rake railties:install:migrations FROM=solidus_braintree' + end + + def run_migrations + if running_migrations? + run 'bundle exec rake db:migrate' + else + puts "Skiping rake db:migrate, don't forget to run it!" + end + end + + private + + def running_migrations? + options.auto_run_migrations? || begin + response = ask 'Would you like to run the migrations now? [Y/n]' + ['', 'y'].include? response.downcase + end + end + end + end +end diff --git a/lib/solidus_braintree.rb b/lib/solidus_braintree.rb index 58a6c2e8..6abb96e4 100644 --- a/lib/solidus_braintree.rb +++ b/lib/solidus_braintree.rb @@ -1,5 +1,3 @@ +require "solidus_core" require "solidus_braintree/version" - -module SolidusBraintree - # Your code goes here... -end +require 'solidus_braintree/engine' diff --git a/lib/solidus_braintree/engine.rb b/lib/solidus_braintree/engine.rb new file mode 100644 index 00000000..c8c87e71 --- /dev/null +++ b/lib/solidus_braintree/engine.rb @@ -0,0 +1,11 @@ +module SolidusBraintree + class Engine < Rails::Engine + engine_name 'solidus_braintree' + + config.autoload_paths += %W(#{config.root}/lib) + + initializer "spree.gateway.payment_methods", after: "spree.register.payment_methods" do |app| + app.config.spree.payment_methods << Spree::Gateway::Braintree + end + end +end diff --git a/solidus_braintree.gemspec b/solidus_braintree.gemspec index ff9d43dc..27481669 100644 --- a/solidus_braintree.gemspec +++ b/solidus_braintree.gemspec @@ -6,12 +6,12 @@ require 'solidus_braintree/version' Gem::Specification.new do |spec| spec.name = "solidus_braintree" spec.version = SolidusBraintree::VERSION - spec.authors = ["Jack Chu"] - spec.email = ["jack@jackchu.com"] + spec.authors = ["Bonobos"] + spec.email = ["engineering@bonobos.com"] - spec.summary = %q{TODO: Write a short summary, because Rubygems requires one.} - spec.description = %q{TODO: Write a longer description or delete this line.} - spec.homepage = "TODO: Put your gem's website or public repo URL here." + spec.summary = %q{Adds Solidus support for Braintree v.zero Gateway.} + spec.description = %q{Adds Solidus support for Braintree v.zero Gateway.} + spec.homepage = "https://bonobos.com" spec.license = "MIT" # Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or @@ -27,7 +27,21 @@ Gem::Specification.new do |spec| spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) } spec.require_paths = ["lib"] + spec.add_dependency "solidus_core", [">= 1.0.0pre", "< 2"] + spec.add_dependency "braintree" + spec.add_development_dependency "bundler", "~> 1.10" spec.add_development_dependency "rake", "~> 10.0" + spec.add_development_dependency 'factory_girl', '~> 4.4' + spec.add_development_dependency 'rspec-rails' + spec.add_development_dependency 'ffaker' spec.add_development_dependency "rspec" + spec.add_development_dependency "guard" + spec.add_development_dependency "guard-rspec" + spec.add_development_dependency "pry" + spec.add_development_dependency "pry-byebug" + spec.add_development_dependency 'sqlite3' + spec.add_development_dependency 'database_cleaner', '~> 1.2.0' + spec.add_development_dependency "vcr" + spec.add_development_dependency "webmock" end diff --git a/spec/cassettes/Spree_Gateway_Braintree/Credit_Card/decline/fails.yml b/spec/cassettes/Spree_Gateway_Braintree/Credit_Card/decline/fails.yml new file mode 100644 index 00000000..66e7aa82 --- /dev/null +++ b/spec/cassettes/Spree_Gateway_Braintree/Credit_Card/decline/fails.yml @@ -0,0 +1,225 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + John + Doe + pete_berge@kohlergerlach.biz + + + John + Doe + 10 Lovely Street + Northwest + Company + Herndon + Alabama + USA + 35005 + + fake-valid-nonce + + true + + + {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Tue, 14 Jul 2015 22:50:13 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"93448144ef307a2cb1bc8d78e26d9850"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - e5d58a6a4c0cb14c53853f4a60f7b284 + X-Runtime: + - '1.192207' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIACWSpVUAA7RYWW/bOBB+z68w/K5I8oE4haJusItFsUewix4o+lJQ0thi + IpEKSdlxf/0OqYuy7PhI9yGIOfPNaDi3FLx/ybPRGoSknN2N/WtvPAIW84Sy + 1d3486ffncX4fXgVxKVUPAcRXo1GAU3Cue/NF/7NbeDiQdOQF6eEKQfPPyI2 + 3/54vlU3m3zzMpsErs3V6CUVUjmM5BD+wVMWuBZB8zPSnH7jELjdUTNjnheE + bUeMZndjJUoYu4YOOaFZWICC7xGIFfzyxNNM/xAZidPriP4I3Aqj0UXKGQx0 + LMnLgLaBSFI1xMYCiILEIWqktgXcjRM8KprDOJx4/tzxbhx/9mkyeTf33vmT + b4HbCRj5skhOl5+ifCdQPd/ExFlSyBLZmpRQ5cREJLJWSoQg27Hm9vkVBWkR + zTKMtkOSRICUDb2Ks3psIlzTmkRweklgUzvskSjXqNdi3Ty0inj4a/Ufn1cT + OohUAkC1l/C90V98Ddl29NEwAncH0EnCiwKWaLfWrAcuVLoBiUIDnmU2j0lG + 1Tb8AIIlHG/XUjqQgBXWVXifkYjkJHDrcwcouFQkc7DgIJzOPW8euDbJdkHJ + lNgaskOyIiWT8PNH7Ykh/TWpKUrd7xObHhJjJQaWxuFi5u3INZyhoInfZ4ZV + k2AAMGnliC9H9wZOOi27YX5bQdVaziqryaCsjA73QFFgsbBw5vmTxUJj2kgG + uqIc/bjwC5X6hu3ZRqQ8S7BI9LV3u0mT57pTUpKh854Y3zCT6g2tg1Xu40uH + SlkSFkM/qjajFTrHudO9zj29+DukLgqlc94k64Da4BOIqOouXR075pKUWWN3 + xHkGhI1D7TwNNcwOXAoMjIOVVmbafkvpLqcRgZeCCmOPk3Om0tCf6NLfIe5B + b4EI9N7E68ENtYfGKtixfUkyCbWUZUkKJFMppgp0Zlu0BkZzsgKnFFmYKlXI + d65LpAQlryNBKNONboUX3JDtNWaPW5BtDkx9z0GlPPme8RV315il1wVbvQe2 + poIzDbiThCURf8GO3+pvn4jppOshIuypM61HbaCmgc9Cf7Hw624+a3loiuCZ + ld0NoQUIKAjm0QNHXv274ckykrGghXZyf7p1FaT4E7BwurydTjeBW50aXsno + c2m6VmSSFa9McXiKcJZMZ/P4BmaR799MpiSZwHI5j5IbEnk+/mGLOCTa6n7b + LDc61sBy7sjk6UCytHxLQqAZVSntm/cDUEc2I5OoUoYVHxI9Ig3BxsTrNRaM + LFA/VCPpbyzjAdEWIWvpgBBc9DH7Gl6Lt2be8HGvA3ZV9ef8fm2vYmyFdRkh + 4hFiU9zYFCVnBy/TLrokNs1Y90SJiQzWDmyxbNFC8Bit2fUbrjKep4thP/eI + BoUbTHhfIGetI3wIYWtBsx6Xt4vnRX/z6zZFm3bqlmeQxze9KueObnt1+l64 + 8Rnpy7a+6honbH4GeGz7q4J24gZYu+YN+5W11/RrfPhSUHNe6aZtSuzdh+yA + 7x8FzbOP7U1tuM4Y0UOZ44O6see8vcW6xZHdrkb+jzOoyafDE7RGnLZk1ODX + FrMGcvbG1bjtpHW3udeR1aGGnb6otEacv0y3ruZJGZtG3lnV0XqFd6DIfs47 + z89ZQIweQeWTgxyy69cknH774nl/fvj68PWff3dng8mUmErT76pxo5OlpvQ8 + secJercZLil9at2FB57sEQwoqNs27P0EsvtGN/jIccZbzgmj7+jQOzruLh10 + F424E4bbkbF24kC75IPGRZ8zLvyY8ZZR+zOK+u2fMXDV7WLbHgCPXTKHV/8B + AAD//wMAezTNhAEWAAA= + http_version: + recorded_at: Tue, 14 Jul 2015 22:50:13 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + body: + encoding: UTF-8 + string: | + + + + + 2001.00 + 3f933w + + + + + John + Doe + + Spree + sale + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 422 + message: Unprocessable Entity + headers: + Date: + - Tue, 14 Jul 2015 22:50:15 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Cache-Control: + - no-cache + X-Request-Id: + - 7a0e8f122bcd13dbf79a062fcbb15fd3 + X-Runtime: + - '2.277728' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + http_version: + recorded_at: Tue, 14 Jul 2015 22:50:15 GMT +recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Gateway_Braintree/Credit_Card/invalid_email/fails.yml b/spec/cassettes/Spree_Gateway_Braintree/Credit_Card/invalid_email/fails.yml new file mode 100644 index 00000000..40023a66 --- /dev/null +++ b/spec/cassettes/Spree_Gateway_Braintree/Credit_Card/invalid_email/fails.yml @@ -0,0 +1,96 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + John + Doe + quux@foo_bar.com + + + John + Doe + 10 Lovely Street + Northwest + Company + Herndon + Alabama + USA + 35005 + + fake-valid-nonce + + true + + + {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 422 + message: Unprocessable Entity + headers: + Date: + - Tue, 14 Jul 2015 22:50:11 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Cache-Control: + - no-cache + X-Request-Id: + - 19b36b6f35ebf0ec2a4407e73553119a + X-Runtime: + - '0.072802' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIACOSpVUAA5RUS2/bMAy+91cIvitO0HXoQVFX7IFhGHbpeh4Yi06E6eFR + chb/+8lO4keSttnJ5veR1CdSpHjYWcO2SEF7t8wWs3nG0BVeabdeZs8/v/D7 + 7EHeCKg0RyJPnDBU3gWUN4yJDgrtb2+w2FS4zIAImiw/UEUdordIe/Oy75E7 + soPdJvAK5f3i/fydyLv/MQkxkl7VEQ/5QmNX3mQSLWgj8p6eBFkMAdYoP7dO + TAcGjmm3BaMVKz1ZiDORH50GaflE28EMvV1BY9FFbjFuvDq90sXitFkuh4mC + UOnIC6BrUyV6pY1J3eOgVOpVmFz6jdD8hdhU81MlCRr1dFyHVAMCG17qfKkp + RO7AovzmN07kI+DoY+CIfPIo8sHsn0/bNPmnrncfSu9/rYBmhbdJRYe/Xr7X + 6nOFuKsEdk4hEmLsz1nM2Xe/RdOwp44Q+YnDpFG7iE6h6skfnuLmL4YUdsZN + B8VW4Br5cf9tp2UPTOT7Ir3z2MivSE75dM8eGbsRrtNWkI8GVmBB5Ad7elzt + IjW8nUkOptrArXx+emyPPSfGgZUPEUxHy9u7+fwuDcEIevtNng0bd94VKEv4 + jbwb4z1wOlwHtyGLr2K61bSKaSHqstm/nEh1SjJGRuLOgoXCrS6QhyQ1MTxt + E6fNMmuzTGatJKhV0kTFBpK4y35XDN4wbf+50tJivLDU/wEAAP//AwAaGrb+ + EQYAAA== + http_version: + recorded_at: Tue, 14 Jul 2015 22:50:11 GMT +recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Gateway_Braintree/Credit_Card/should_have_the_correct_attributes.yml b/spec/cassettes/Spree_Gateway_Braintree/Credit_Card/should_have_the_correct_attributes.yml new file mode 100644 index 00000000..332c9ec9 --- /dev/null +++ b/spec/cassettes/Spree_Gateway_Braintree/Credit_Card/should_have_the_correct_attributes.yml @@ -0,0 +1,116 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + John + Doe + rebeka.pfeffer@veum.name + + + John + Doe + 10 Lovely Street + Northwest + Company + Herndon + Alabama + USA + 35005 + + fake-valid-nonce + + true + + + {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Tue, 14 Jul 2015 22:50:08 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"6f804879b2e52945cbfc0c8e08febce6"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 08326dc8753f94643ab02c82641fc441 + X-Runtime: + - '0.795892' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIACCSpVUAA7RYWW/jNhB+z68w/K5IvmonUJSmLYqiaPehmwToviwoaWxz + I5FakvKxv75D6qIs30kfAocz31BDzvVJ/uMmTXorEJJy9tAf3Hr9HrCIx5Qt + Hvovz787s/5jcONHuVQ8BRHc9Ho+jYPhxBsPpt6d7+JCy1AXLQlTDq5/hGyy + /fH9Tk3X6XozHvqurdXoORVSOYykEPzJl8x3LYHWJ6Ra/cbBd5ulVkY8zQjb + 9hhNHvpK5NB3jRxSQpNAQAhv5Dabw3wO4ucV5OmtNvXdQq+R2ZIz6NjPyaYj + W0MoqepiIwFEQewQ1VPbDB76MS4VTaEfDL3BxPGmzmD8PBzeT7x7b/bFdxsD + Y59n8WX2jUHxfBMPZ04hiWXtUkyVExERy3JTIgTZ9rW2rS8kKAtpkmCkHRLH + AqSs5EWMx4squqWsSgKnlQC2tMGeiHCJOhbn6qFFtINfi198XiloIFIJAFUf + YuD1/uIrSLa9z0bhuzuAxhI2Clisr7VUfeJCLdcg0aijs9zmEUmo2gZ/gGAx + x9PVkgYkYIE1FTwlJCQp8d1y3QAyLhVJHCw2CEYTz5v4ri2yryBnSmyN2CFJ + tiTD4OWzvomu/JjVCK2e9pmNDpmxHANLo2A29nbsKk3X0MTvhWHVxBgATFrZ + 4/Pek4GTZpfdML+voMpd3llWZg/3QFFgsbBg7A2Gs5nG1JH0dUU5+nHBK5X6 + hPXaRix5EmOR6GPvdpMqz3WXpCTBy3tjfM1MqleyBlZcH587VMqcsAjaUbUV + tdH7L/f84m+QuiiUznmTrB1phY8hpKo5dLFslHOSJ5XfIecJENYP9OVpqFE2 + 4FxgYBystDzR/lub7moqE9hkVBh/nJQztQwGQ136O8I96C0Qgbc39FpwI22h + sQp2fJ+TREJpZXmyBJKoJaYKNG5bsgpGU7IAJxdJsFQqk/euS6QEJW9DQSjT + jW6BB1yT7S1mj5uRbQpMfU1BLXn8NeEL7q4wS28ztngEtqKCMw14kITFId9g + x6/3r5+I6aTrISTsrXGtJa2gpoGPg8FsNii7+bjWoSuCJ1Z2V4IaICAjmEef + OOrK/yudzEMZCZrpS25Pt6aCFH8DFtyJTK6F7xarSpcz+j03XSs0yYpHpjg8 + RTCOR+NJNIVxOBhMhyMSD5E3TMJ4SkJvgH/YIg6Z1nt/QNNZAUu5I+O3A8lS + 6y0LgW4UpbRv3ndAjdiMTKJyGRR6iPWINAIbE61WWDAyw/2hGEl/Yxl3hLYJ + WUkHhOCijdnX8Gq8NfO6jzsO2N2qPef373YUY29YlhEivkFkihubouTs4GFq + kksi04x1T5SYyGDxX0tlm2aCR+jN7r0hlfE8XQz7tSd2UMhggqcMNSsd4UMI + exd0a7KYzqbf2syvYYq27FyWZ5CnmV6RcyfZXpm+VzI+Y30d6yuOcQbzM8BT + 7K8I2pkMsLyad/Ari9e0a7z7UlBqjnTTOiX28iE74PtHQfXsU7ypDtcFI7pr + c3pQV/5cxlusU5zgdiXyf5xBVT4dnqAl4jySUYKPEbMKcjHjqq7tLLpbnesE + dShh5xOV2onLyXR91TzOI9PIG68aWavwDhTZZbR8euCd52MIiNlHUPnmoIbs + 3mscjL68et7zL/+Mf3r9d3c2mEyJqDT9rhg3OllKSesm9jxBc5suSWlLyy7c + ucmWwID8sm3D3k8gu290nY8cF7zlnDH6Tg69k+Pu2kF31Yg7Y7idGGtnDrRr + Pmhc9Tnjyo8Z7xm1H/Ku/e6CRqrbxLZeAC6bZA5u/gMAAP//AwA+Ig78/RUA + AA== + http_version: + recorded_at: Tue, 14 Jul 2015 22:50:08 GMT +recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Gateway_Braintree/Credit_Card/successful/succeeds.yml b/spec/cassettes/Spree_Gateway_Braintree/Credit_Card/successful/succeeds.yml new file mode 100644 index 00000000..c6b1d721 --- /dev/null +++ b/spec/cassettes/Spree_Gateway_Braintree/Credit_Card/successful/succeeds.yml @@ -0,0 +1,320 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + John + Doe + gay@bauch.name + + + John + Doe + 10 Lovely Street + Northwest + Company + Herndon + Alabama + USA + 35005 + + fake-valid-nonce + + true + + + {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Tue, 14 Jul 2015 22:50:09 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"a0cb7bfc8c799154bc702f19e00be68a"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 53d5c98cc4ca40706f48c7a1d4549ee6 + X-Runtime: + - '0.786264' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIACGSpVUAA7RYWW/jNhB+319h+F2RfDVOoGgbtCgW7XZf9gC6LwtKHNus + JVJLUo6dX98hdVGWrzjpQ+Bw5htqyLk+KXy/zdLBBqRigj8MRzfBcAA8EZTx + 5cPw65c/vPnwffQuTAqlRQYyejcYhIxGt9PJ3XQ6/yX0cWFkqEtWhGsP188x + n+2ef97p26fsaTsdh76rNegFk0p7nGQQ/SlWPPQdgdGnpF79LiD026VRJiLL + Cd8NOEsfhloWMPStHDLC0mhJdr/GpEhWN8Yg9Eup0ecrwaFntSDbnuwJYsV0 + H5tIIBqoR/RA73J4GFJcapbBMBoHo5kX3Hqj6Zfx+H4W3Ad330O/NbD2RU5f + Zt8alM+3UfAWDFKqGpco015CJFXVpkRKshsabVdfSlAWszTF+HqEUglK1fIy + snNZx7SS1aH3OmF3pS32TFwr1Kno1g8tYxz9Vv7i8ypBC1FaAujmEKNg8FFs + IN0NPltF6O8BWkvYauDUXGul+iSkXj2BQqOeznFbJCRlehd9AMmpwNM1khYk + YYmVFD2mJCYZCf1q3QJyoTRJPSwxiCazIJiFvityr6DgWu6s2CNpviLj6Otn + cxN9+SmrCVo9HjKbHDPjBQaWJdF8GuzZ1Zq+oY3fV45VQzEAmLRqIBaDRwsn + 7S77YX5dQVW7vLKs7B7+kaLAYuHRNBiN53ODaSIZmoryzOOib0yZEzZrF7ES + KcUiMcfe7yZ1npveyEiKl7fm4onbVK9lLay8PrHwmFIF4Ql0o+oqGqPXX+7l + xd8iTVFok/M2WXvSGk8hZro9dLlslQtSpLXfsRApED6MzOUZqFW24EJiYDys + tCI1/jub7mtqE9jmTFp/vExwvYpGY1P6e8ID6B0Qibc3DjpwK+2gsQr2fF+Q + VEFl5XiyApLqFaYKtG47shrGMrIEr5BptNI6V/e+T5QCrW5iSRg3jW6JB3wi + uxvMHj8nuwy4/pGBXgn6IxVL4W8wS29yvnwPfMOk4AbwoAinsdhix2/2b56I + 6WTqISZ83brWkdZQ28Cn0Wg+H1XdfNro0BUpUie7a0EDkJATzKNPAnXV/7VO + FbFKJMvNJXenW1tBWqyBR+v1ePuMMSxXta7g7Gdhu1ZskxWPzHB4ymhKJ9NZ + cgvTeDS6HU8IHcNiMYvpLYmDEf5hizhm2uz9Bk1nAzwTnqLrI8nS6B0LiW6U + pXRo3vdArdiOTKILFZV6oGZEWoGLSTYbLBiV4/5QjqS/sYx7QteEbJQHUgrZ + xRxqeA3emXn9x50G7G/VnfOHdzuJcTesyggR/0JiixubohL86GEaaksS24xN + T1SYyOCwXkflmuZSJOjN/r0hlQkCUwyHtWd20MhgosccNRsT4WMIdxd0azFf + 0zvdZX4tU3Rll7I8izzP9MqcO8v2qvS9kvFZ6+tYX3mMC5ifBZ5jf2XQLmSA + 1dW8gl85vKZb4/2Xgkpzops2KXGQD7kBPzwK6mef401NuF4wovs25wd17c/L + eItzijPcrkL+jzOozqfjE7RCXEYyKvApYlZDXsy46mu7iO7W5zpDHSrY5USl + ceLlZLq5akGLxDby1qtW1im8I0X2Nu88b0NA7D6SqbWHGrJ/rzSafP8WBP98 + DD5++OtufzbYTEmYsv2uHDcmWSpJ5yYOPMFwmz5J6UqrLty7yY7AgsKqbcPB + TyD7b3S9jxwveMu5YPSdHXpnx921g+6qEXfBcDsz1i4caNd80Ljqc8aVHzNe + M2rf5F371QWNVLeNbbMAXLbJHL37DwAA//8DALI3YELzFQAA + http_version: + recorded_at: Tue, 14 Jul 2015 22:50:09 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + body: + encoding: UTF-8 + string: | + + + + + 50.00 + kk2xz2 + + + + + John + Doe + + Spree + sale + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Tue, 14 Jul 2015 22:50:10 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"33e7b845c3dce75dbba5b2d71ab840e1"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - ce49a34faeeaaf05890531e2ae4d4d22 + X-Runtime: + - '0.618023' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIACKSpVUAA7RXS3PbNhC+51dodIdJvWolQzP1JNNJ08aXxJ5OLhmQWImo + SIAFQFnKr++CIClSBJ300IPH4u4HYHexjw/R21ORz46gNJfibr64CeczEKlk + XOzv5o9ffiPb+dv4VWQUFZqmBlHxq9ks4ix+nbJkW0YB/rQSbaipdEwrk0nF + vwOLgkZkteZcQqxpDlFQ/7SytFIKzzoTriXBIyF+/Pw+CsZiC6aFrISJN+FN + GEZB82UVBag0o8IQmqZWSNAeXSrAk3wqu0QqBgo/ZoLnd3OjKpgHziIF1AAj + 1MyslXdzhp+GFzCPl+FiQ8Jbslh/WS7fbMI3i/Ar2totqNdXJftv6y8Lmoho + I9Fq++GCfLtevV6vt7+0YUbpjittiKAFxB9lJqKgJ3CInLbf7yWG4fLp1Kks + SirO196jBgrK83hPz78mtEqzG7soCpzUIZ4h0dyAZ22ZSeGT7+hpFOeg72iU + 8DzHdLs4vVX/g7vxO/cfD28ETq0N5gqmCGMKtI4X4exPeYT8PPtcK2wWDwBN + pE4GBLM314gfpDLZM2hcMNI1ZsqU5tyc4w+gBJPoSSdxAAV7W173OU1oQaOg + +W7CK7GaclcPq00YbqKgL2pdxSxXZ+f9o8CLYugGZpieyd3sHgPOU2oD0IMN + V9rNCM3LjC6xGi/QvnxqxQpX3PuWrHxLRFWbE2/X4dWaVlNnSi85MEC7SjBf + 4XYa3RQeVYqeB0q8j14T822iwZgcCsBGkVCTZl5Mxsuyn6y+jO8S1KPsstOj + my7MYQ76Kvcq53wnN9nmUblM8xX1JcW89l7y6AV1L3d+CrX6EapJkHFb6d9O + 00zJjkPOtAPQoyaglFQEY1RKocHrWo3ruT5Ex59w/rwIaLcY3pp/lxcxtRvH + 45X0d6yXkdBC91jpz/SMmr/BZTmOJz2+2KhUMsXTMA7tuKY1vN4pfPr04eEj + tpeXQMNdhqYsQjuip7QTKw1mcHxfouZoqcMUog4tY9xagsEfw0a+HiVP7QXt + 8OJxBeZOAmockcpSBTzFcYMJlKEn4qiHVwUnKMp29CdS5kDFPN7RXFva0wFa + qoFekJSqdtAZeQARHw7L0/clwusvp0m4iNfhYrnd2n4o+p1kHS+220Uz9NZt + seCmpKZZT1zbft99t82i5MpdZiGFyeLF0k6tK+EIewaqkMcswwG4ljbnNlOd + 2FZTU8V6hIykFyszmdfh9jcQXtA9kErlcWZMqd8EAdXYpPVNoigXtnCajL/B + zhmU9Gx797cCMFvZt1zuZXBE/29KsX8L4siVFBZwp6lgiTwhx+j2b7qdgpIi + 8XiQNgHdb6fJgOYmQ4vtWD0I+YzTuydzIAYJNxe9+2xUlcKLwyzcV7klfD3U + taYbBZa9cppfoD1ZYy89K5n3EK2gCZ/WFTZDHGbicMEMpMPmKnfEaqlIYTjK + +4o2VJJVac2oL6dfZA5UCf5PBU0xoRiDz7Edq3jNVutNegvrZLG4Xa4oW8Ju + t0nYLU3CBf4hMZ5a6nY+gigk0ewwUWydvqGbw2Jr3iok45iZ6jygDN3ArRGA + GzV3aCsUmTwqivIn2X2H73Z48ZFUI6beOS6gGiPACir2gJPDPXJqWWdhj+Fo + iT0NYlpytGQsd34G1452kiY4rjvm1M+YqkSnipeTjKqn73pZzedIiRNcMoKk + hdgweqr/ColmKePFoslX59gRQXAaeMgg47rOaq8O3C6yTbOJvjT11MFOMrZt + uClSLfu+Rb8mMrfTuymBz1cBefzZ3XX76diqOtrJtgOYmkn2ZPlM3IWOtBiJ + pFLaEV4GBh957VNlqPJfT48t+48fYkav+p+Ew8k6jW1a+c2w1B6TFTmeb8Mq + TT1kGC9lwnfreVnZ99I4O5r5QrhAzlbVP+uZ6prLN9tcomAKNGQ9PUeH5KhP + fCZBP96rpko/2qvjU4rrg71lenmBr74+heGH5V/vNqs/em9xBinX9RvVETWb + 3Y2kDutgp8hkmLQEK9emNGBIdnJ4E4O+FL/6FwAA//8DAPxXNTmMEgAA + http_version: + recorded_at: Tue, 14 Jul 2015 22:50:10 GMT +- request: + method: put + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/9cdb8p/submit_for_settlement + body: + encoding: UTF-8 + string: | + + + 50.00 + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 200 + message: OK + headers: + Date: + - Tue, 14 Jul 2015 22:50:11 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"e0160f7b4dbcbb5f363f41f1c10a74aa"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 512127faf1cd22823db83003734cbd9b + X-Runtime: + - '0.271630' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + http_version: + recorded_at: Tue, 14 Jul 2015 22:50:11 GMT +recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Gateway_Braintree/Credit_Card/with_completed_payment/can_be_fully_credited.yml b/spec/cassettes/Spree_Gateway_Braintree/Credit_Card/with_completed_payment/can_be_fully_credited.yml new file mode 100644 index 00000000..09b09322 --- /dev/null +++ b/spec/cassettes/Spree_Gateway_Braintree/Credit_Card/with_completed_payment/can_be_fully_credited.yml @@ -0,0 +1,389 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + John + Doe + alexa.ferry@welch.co.uk + + + John + Doe + 10 Lovely Street + Northwest + Company + Herndon + Alabama + USA + 35005 + + fake-valid-nonce + + true + + + {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Tue, 14 Jul 2015 22:50:19 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"126c55b491a5ac37f1b2f068d26392d4"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - a1631e7198f730b416ee167ff7daa515 + X-Runtime: + - '3.102811' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIACuSpVUAA7RYyXLjNhC9z1eodKdJypIlu2g6riyVSiVzmXEOuUyBZMtE + TAIcANQyX58GuIGidjsHl4zu12ADvT0yeNrk2WgFQlLOHsf+jTceAYt5Qtnr + 4/jl62/OYvwUfgriUiqegwg/jUYBTUL/bnLn386ngYsLLUNdnBKmHFz/iNhs + ++P7vZqv8/VmOglcW6vRSyqkchjJIfyDpyxwLYHWZ6RZ/cIhcLulVsY8Lwjb + jhjNHsdKlDB2jRxyQrOQZLAhN0sQYvvTGrI4vYn5TfkWuJVaA4uUMxiYL8lm + IFtDJKkaYmMBREHiEDVS2wIexwkuFc1hHE48f+Z4c8effp1MHmbeg7/4J3A7 + A2NfFsn59vdo3xlUzzfhcJYUskS2LiVUOTERiaw3JUKQ7Vhr+/pKgrKIZhkG + 2iFJIkDKRl6FmKVNcGtZkwNOL/62tMOeCHCNOhbm5qFVsMOfq198Xi3oIFIJ + ANUewvdGf/IVZNvRF6MI3B1AZwkbBSzR11qrPnOh0jVINBroLLd5TDKqtuHv + IFjC8XStpAMJeMWSCp8zEpGcBG697gAFl4pkDtYahLczz5sFri2yr6BkSmyN + 2CFZkZJJ+PJF38RQfszqFq2e95ndHjJjJQaWxuFi6u3YNZqhoYnfC8OqSTAA + mLRyxJejZwMn3S67Yb6koO4HBVXv8s6yMnu4B4oCi4WFU8+fLBYa00Yy0BXl + 6MeFf1OpT9iubUTKswSLRB97t5s0ea6bJCUZXt4b42tmUr2RdbDq+vjSoVKW + hMXQj6qtaI3ef7nnF3+H1EWhdM6bZB1IG3wCEVXdoatlp1ySMmv8jjjPgLBx + qC9PQ42yA5cCA+NgpZWZ9t/adFfTmMCmoML44+ScqTT0J7r0d4R70FsgAm9v + 4vXgRtpDYxXs+L4kmYTayvIkBZKpFFMFOrctWQOjOXkFpxRZmCpVyAfXJVKC + kjeRIJTpRveKB1yTLY693C3INgemvuWgUp58y/grd1eYpTcFe30CtqKCMw14 + lIQlEd9gx2/3b5+I6aTrISLsrXOtJ22gpoFPQ3+x8OtuPm116IrgmZXdjaAF + CCgI5tFnjrr6/0Yny0jGghb6kvvTrasgxd+AhelU3c+jwK1Wja5k9HtpulZk + khWPTHF4inCa3E5n8Rymke/PJ7ckmcByOYuSOYk8H/+wRRwybff+gKazApZz + RyZvB5Kl1VsWAt2oSmnfvB+AOrEZmUSVMqz0kOgRaQQ2Jl6tsGBkgftDNZL+ + wjIeCG0TspIOEi8u+ph9Da/FWzNv+LjjgN2t+nN+/25HMfaGdRkh4l+ITXFj + U5ScHTxMy3FJbJqx7okSExks+mupbNNC8Bi92b03pDKep4thv/bEDgoZTPhc + oGalI3wIYe+Cbs1ZvpoWfebXMUVbdi7LM8jTTK/KuZNsr07fKxmfsb6O9VXH + OIP5GeAp9lcF7UwGWF/NO/iVxWv6NT58Kag1R7ppmxJ7+ZAd8P2joHn2Kd7U + huuCET20OT2oG38u4y3WKU5wuxr5P86gJp8OT9AacR7JqMHHiFkDuZhxNdd2 + Ft1tznWCOtSw84lK68TlZLq9ap6UsWnknVedrFd4B4rsMlp+d+Cd52MIiNlH + UPnmoIbs3mtyJKsTiKn+doRJp0a/rkhW6q11ttTy3lXseYQmN0OW0pfWbXhw + lT2BAQV134a930B2X+kGXzkueM05Y/adnHon5921k+6qGXfGdDsx186caNd8 + 0bjqe8aVXzPeM2s/5GX73RWNXLeLbbsAXHbJHH76DwAA//8DAAlAuWz9FQAA + http_version: + recorded_at: Tue, 14 Jul 2015 22:50:19 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + body: + encoding: UTF-8 + string: | + + + + + 50.00 + h4t97b + + + + + John + Doe + + Spree + sale + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Tue, 14 Jul 2015 22:50:20 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"ddb7912e90997a48c6fd6caf4bbe78e3"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - e77c978c5d83e1296ac227231f54dca9 + X-Runtime: + - '0.796334' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + rpUSAAA= + http_version: + recorded_at: Tue, 14 Jul 2015 22:50:20 GMT +- request: + method: put + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/gc96rd/submit_for_settlement + body: + encoding: UTF-8 + string: | + + + 50.00 + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 200 + message: OK + headers: + Date: + - Tue, 14 Jul 2015 22:50:21 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"4b9b32b3ab147949b37cb3ec41ad06be"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - da22c0839bdaaaa61d6a59d89788b5a1 + X-Runtime: + - '0.364811' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + http_version: + recorded_at: Tue, 14 Jul 2015 22:50:21 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/gc96rd/refund + body: + encoding: UTF-8 + string: | + + + 50.00 + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 422 + message: Unprocessable Entity + headers: + Date: + - Tue, 14 Jul 2015 22:50:21 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Cache-Control: + - no-cache + X-Request-Id: + - 7feca69de3cfdd80561f138a4c1741d0 + X-Runtime: + - '0.151570' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAC2SpVUAA6xSQU7DMBC89xWW76lTRAuVXPeAxAvgAZtkKZYSO6w3tOnr + cZqkSVHFidvOzqx3Z2S9P1Wl+EYK1rudXC1TKdDlvrDusJPvb6/Js9ybhYba + JkjkKSEMtXcBzUIIfWmFrrwCwW2NOwlE0Eo1UEzgAuQcl/Sd+/KRG9kJx048 + Cs12tU43Wl3qOQnMZLOGcXgvtFXmS2kyCKjVlb2ZqTAEOKB5Aec8C8KPxhUC + xOxY0bgyqoRlYYMIyFxisdRqHJ3uVTcHD3BMRv3yP6d1DQRV+CMoqHzj2KzT + ZZpGLz26/3Cn7kHvJsrnXO4dky9LJDMbDF2eV2IxZEP5JzhObGHOmVu3568t + Px2r4+nxobM/sb0+Fod8u6G4se9pNfn6l6SjlTt/8AcAAP//AwDkh3L4wAIA + AA== + http_version: + recorded_at: Tue, 14 Jul 2015 22:50:21 GMT +recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Gateway_Braintree/Credit_Card/with_completed_payment/can_be_voided.yml b/spec/cassettes/Spree_Gateway_Braintree/Credit_Card/with_completed_payment/can_be_voided.yml new file mode 100644 index 00000000..78fdbb23 --- /dev/null +++ b/spec/cassettes/Spree_Gateway_Braintree/Credit_Card/with_completed_payment/can_be_voided.yml @@ -0,0 +1,415 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + John + Doe + sebastian.leannon@kris.com + + + John + Doe + 10 Lovely Street + Northwest + Company + Herndon + Alabama + USA + 35005 + + fake-valid-nonce + + true + + + {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Tue, 14 Jul 2015 22:50:23 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"f2343883c1fb360aa824e6378119cba6"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 8503338dc6ec945694d4ef4becf34a33 + X-Runtime: + - '0.710900' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAC+SpVUAA7RYS2/bOBC+91cYviuSX7VdKOoGLRaLxW4vaXropaDEccxG + IlWScuL++h1SL0qyY8fJHgKHM9+MhvOWwo9PWTragVRM8Ovx5CoYj4AngjJ+ + fz2++/qntxp/jN6FSaG0yEBG70ajkNHo/WqxCtbrWejjwdCQl2wJ1x6ef8d8 + sf/9a62Xj9nj03wa+i7XoDdMKu1xkkH0t9jy0HcIhp+S+vRZQOi3R8NMRJYT + vh9xll6PtSxg7Fs6ZISlkYIY0YzwqxQI54L/8SCZukKh0C8RBptvBYeBhg15 + GtAeIVZMD7GJBKKBekSP9D6H6zHFo2YZjKNpMFl4wdKbzL9Opx8WwYfp9Hvo + twJWvsjpy+RbgfL5NiLehkFKVWMSZdpLiKSqUkqkJPux4Xb5JQVpMUtTjLVH + KJWgVE0vo5zTOr4VrU4Dr5MCLrXFnohxhXou0vVDy3hHn8pffF5FaCFKSwDd + XGISjP4RO0j3o1vLCP0eoJWEJw2cGrdWrC9C6u0jKBQa8ByzRUJSpvfRXyA5 + FXi7htKCJNxjVUU3KYlJRkK/OreAXChNUg/LDaLZIggWoe+SXBcUXMu9JXsk + zbdkGt3dGk8M6c9JzVDq5pDY7JgYLzCwLIlW86AnV3OGgjZ+dxyrhmIAMGnV + SGxGNxZOWi39ML+uoCotrywrq8M/UhRYLDyaB5PpamUwTSRDU1GeeVz0jSlz + w+bsIrYipVgk5tr9blLnuemTjKTovAcuHrlN9ZrWwkr3iY3HlCoIT6AbVZfR + CL3euecXf4s0RaFNzttkHVBrPIWY6fbS5bFlbkiR1nbHQpi+Po6M8wzUMltw + ITEwHlZakRr7HaV9Ti0CTzmT1h4vE1xvo8nUlH6PeAC9ByLRe9OgA7fUDhqr + oGf7hqQKKinHki2QVG8xVaA126HVMJaRe/AKmUZbrXP1wfeJUqDVVSwJ46bR + 3eMFH8neDD0/J/sMuP6Rgd4K+iMV98LfYZZe5fz+I/Adk4IbwLUinMbiCTt+ + o795IqaTqYeY8IfWtA61htoGPo8mq9Wk6ubzhoemSJE62V0TGoCEnGAefRHI + q/6veaqIVSJZbpzcnW5tBWnxADxarSXlceiXp5pXcParsF0rtsmKV2Y4PGU0 + p7P5IlnCPJ5MltMZoVPYbBYxXZI4mOAftohjoo3uN2g6O+CZ8BR9OJIsDd+R + kGhGWUqH5v0A1JLtyCS6UFHJB2pGpCW4mGS3w4JROeqHciT9i2U8ILoiZKc8 + kFLILuZQw2vwzswbPu55QF9Vd84f1vYsxlVYlREifkJiixubohL86GWaNZck + thmbnqgwkcHZgB2WK5pLkaA1fb/hKhMEphgOc09o0LjBRDc5cnYmwscQrhY0 + a/lzGb/vbX7tpujSzt3yLPL0plfm3Mltr0rfCzc+K33Z1lde44zNzwJPbX9l + 0M7cACvXvGK/cvaabo0PXwoqzjPdtEmJg/uQG/DDo6B+9qm9qQnXC0b0UOb0 + oK7tedne4tzixG5XIf/HGVTn0/EJWiHOWzIq8HOLWQ158cZVu+2sdbe+14nV + oYKdv6g0Rrx8mW5cLWiR2EbeWtXSOoV3pMje5p3nbRYQq0cy9eAhh/T9SqPZ + 929BcLv+/Onz93V/NthMSZiy/a4cNyZZKkrHEweeYHab4ZLSpVZdeODJDsGC + wqptw8FPIP03usFHjhe85Zwx+k4OvZPj7tJBd9GIO2O4nRhrZw60Sz5oXPQ5 + 48KPGa8ZtW/yrv3qgsZVt41tcwA8tskcvfsPAAD//wMA0ZiCjP8VAAA= + http_version: + recorded_at: Tue, 14 Jul 2015 22:50:23 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + body: + encoding: UTF-8 + string: | + + + + + 50.00 + 89rdnb + + + + + John + Doe + + Spree + sale + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Tue, 14 Jul 2015 22:50:24 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"4d34795a565bd326668d06ff8f4fdccb"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - c57c65f127dcd359e8ea31a445d337bf + X-Runtime: + - '0.867446' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + mBIAAA== + http_version: + recorded_at: Tue, 14 Jul 2015 22:50:24 GMT +- request: + method: put + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/fcyx84/submit_for_settlement + body: + encoding: UTF-8 + string: | + + + 50.00 + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 200 + message: OK + headers: + Date: + - Tue, 14 Jul 2015 22:50:24 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"2a3f4fa2d8feddc55c3ecc8e6baf460c"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 795f748629345d91ee6694142aa238b1 + X-Runtime: + - '0.156611' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + http_version: + recorded_at: Tue, 14 Jul 2015 22:50:24 GMT +- request: + method: put + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/fcyx84/void + body: + encoding: UTF-8 + string: '' + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 200 + message: OK + headers: + Date: + - Tue, 14 Jul 2015 22:50:25 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"3ba5fca93a203c00faf42e6e139608be"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 84fa2dc3f96d8e40791fd2e344a442f8 + X-Runtime: + - '0.261326' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + AA== + http_version: + recorded_at: Tue, 14 Jul 2015 22:50:25 GMT +recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Gateway_Braintree/PayPal/fails_capture_with_settlement_declined.yml b/spec/cassettes/Spree_Gateway_Braintree/PayPal/fails_capture_with_settlement_declined.yml new file mode 100644 index 00000000..b1a848f3 --- /dev/null +++ b/spec/cassettes/Spree_Gateway_Braintree/PayPal/fails_capture_with_settlement_declined.yml @@ -0,0 +1,302 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + John + Doe + myrl_hickle@goyette.com + + + John + Doe + 10 Lovely Street + Northwest + Company + Herndon + Alabama + USA + 35005 + + fake-paypal-future-nonce + + true + + + {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Tue, 14 Jul 2015 22:50:29 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"fd3a8c35884f31e45a39ea131e040ed7"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - bf6b79fccf1173211293dd007634d769 + X-Runtime: + - '0.280967' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIADWSpVUAA6RTS3ObMBC+51cw3LFsGjeuR8Y5dHroOb304lnQAnL0oNIS + Q359BfiRhF46OX6v3dUu8H2nVfSCzktrdvFqsYwjNIUV0lS7+NfTj2QT77M7 + XrSerEaX3UURlyJbfdls0nT9lbMABi5oRQ2GkoBfc7PuX/98o4eTPnX3KWdv + 1cFdSucpMaAx+2lrw9kbYtAVXNB3i5zd4CAWVjdg+shItYvJtRizkUcNUmW6 + d+pQy+JZ4WNleyTCRUhwNsmDsamtwVm8hG7GnTD3kubewiEQigQoor7BXSwC + JKkxztLlap0sH5LV/VOabtfLbbr5zdktMObbRvxf/haY+o/nSEqJSvjrSEJS + UoAT/lwUnIP+PHEDfQMqgaKwraH3jsEws0xkoMk+o8nS47H0OWcTumjTTo9g + cCEsPmIHulEf9z06BZbQqstzc2sVgomzYaecncWrWWqoMGmdymqixm8ZA++R + /CJ3IA05xCps4wT90ImFuTUaOmik2oqDspVl01sWjan2aF6ks2aw7DwYkdsu + fLXXDpeenzzpWOOTZx1r+Db3hZMNhR/yH4cMDjY/1EfOjyQI4TAsblYmDH/9 + n/8CAAD//wMAp3RPLQIEAAA= + http_version: + recorded_at: Tue, 14 Jul 2015 22:50:29 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + body: + encoding: UTF-8 + string: | + + + + + 4001.00 + 2jjfsb + + + + + jane.doe@example.com + + + Spree + sale + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Tue, 14 Jul 2015 22:50:29 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"97819bc002f1dd5896a1af3ffc23ce65"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 48e864ac5572167cb1cea4d93fc0a256 + X-Runtime: + - '0.397278' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + bwAAAP//AwDiN4fQjRQAAA== + http_version: + recorded_at: Tue, 14 Jul 2015 22:50:29 GMT +- request: + method: put + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/d5vkv8/submit_for_settlement + body: + encoding: UTF-8 + string: | + + + 4001.00 + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 422 + message: Unprocessable Entity + headers: + Date: + - Tue, 14 Jul 2015 22:50:30 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Cache-Control: + - no-cache + X-Request-Id: + - 3101940b31730a099bd2ed45ca8e8114 + X-Runtime: + - '0.304199' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + http_version: + recorded_at: Tue, 14 Jul 2015 22:50:30 GMT +recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Gateway_Braintree/PayPal/should_have_the_correct_attributes.yml b/spec/cassettes/Spree_Gateway_Braintree/PayPal/should_have_the_correct_attributes.yml new file mode 100644 index 00000000..5ea7ff3a --- /dev/null +++ b/spec/cassettes/Spree_Gateway_Braintree/PayPal/should_have_the_correct_attributes.yml @@ -0,0 +1,96 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + John + Doe + yvonne@kertzmann.us + + + John + Doe + 10 Lovely Street + Northwest + Company + Herndon + Alabama + USA + 35005 + + fake-paypal-future-nonce + + true + + + {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Tue, 14 Jul 2015 22:50:26 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"39adfbbcbb157070cd7c405d5ef433f5"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 58b7bca99723aa65889231dee940f6d0 + X-Runtime: + - '0.261291' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIADKSpVUAA6RTS3ObMBC+51cw3EE2Y5LYI+McOj30nF56ySxojZVIKyIJ + 2/jXV4BfLb10cvwe+9B+wDdHraI9WicNreN5OosjpMoISfU6/vn6PXmON8UD + r1rnjUZbPEQRl6JYzPJ8mT8vOQug54JW7YB8EvCppLw7fS7900EfjouMs3u1 + d2+ldT4h0Fj8MDvi7I7odQUX9M0gZzfYi5XRDVAXkVTr2NsWYzbwqEGqotsb + Inz5QOtPGojS1nE2Sr2p2RnCSekWjhPugKWTfuqtLIJHkYCPfNfgOhYBeqkx + LrLZPE9mT8l88Zplq3y2yh5/cXYrGOrbRvxf/a1gnD9EkWwlKuGuKwnpkwqs + cOemYC10540b6BpQCVSVacn/6egNE8tIBtqbD6Tiscr32nI2oos23vQdCFNh + 8AWPoBuFaUjn7t6DU+AWWnV5bmmMQqC46G/K2Vm8mqWGGpPWqmLnfeNWjIFz + 6F1aWpDkLWIdrnGArp/Ewt4ayb9p9Dsj3pSpDRvfkjZUb5D20hrqLWsHJEpz + DF/sdcJl5hcjHXp8Mdahh2tLV1nZ+PAz/iPI4GDToP7m3ECCEBbD4SZtwvLX + f/k3AAAA//8DAI6CySr+AwAA + http_version: + recorded_at: Tue, 14 Jul 2015 22:50:26 GMT +recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Gateway_Braintree/PayPal/succeeds_authorization_and_capture.yml b/spec/cassettes/Spree_Gateway_Braintree/PayPal/succeeds_authorization_and_capture.yml new file mode 100644 index 00000000..7307843c --- /dev/null +++ b/spec/cassettes/Spree_Gateway_Braintree/PayPal/succeeds_authorization_and_capture.yml @@ -0,0 +1,302 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + John + Doe + sigurd@kohlermuller.biz + + + John + Doe + 10 Lovely Street + Northwest + Company + Herndon + Alabama + USA + 35005 + + fake-paypal-future-nonce + + true + + + {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Tue, 14 Jul 2015 22:50:27 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"a688aaef8a6f2658a816021cb6638fdb"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 8020253a88171d58c9a6453223636ecb + X-Runtime: + - '0.257093' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIADOSpVUAA6RTy3KbMBTd5ysY9kKGsePGAziLThddp5tuMhd0DWr0iiRi + 8NdXgF8t3XSy0cw959yH7pHyfS9F9IHWca2KOE1WcYSq1oyrpoh/vHwjX+J9 + +ZDXnfNaoi0foijnrHxMn1bpNlvnNAQjFri6BeVJiE+V2gyn9ye/Pcpjv85y + es+O6gO3zhMFEsvvulU5vQNGXsAl+qoxp7dwJGstDaghUlwUsbcdxnTCUQIX + peNNZ9nzm24FWtmJcCYVP+V0pkehabXCRfoB+gV2xMpxv9TWFsEjI+AjPxgs + YhZCzyXGZbZKN2S1Jen6Jct2m9Uue/yZ01vClN8Z9n/5t4S5/2QHOXAUzF1H + YtyTGixz56JgLQzniQ0MBgSButad8n8qRsFCMoMB9voNVdls2tN7cHKOLty8 + 01+gMGEan7EHaQQmwaG7fU9KhgfoxOW6ldYCQcXluNOcnsmrmEtokHRWlK33 + xu0oBefQu6SywJW3iE3YxhGGsRMNc0tU/lWibzV7FbrRdL5LYlSzR/XBrVaj + pHCgWKX78GqvHS49P2npVOOTtk41XFe52nLjw4f8h5FBQZdG/Y25CQTGLIbF + LcqE4a//+TcAAAD//wMAdukpsgIEAAA= + http_version: + recorded_at: Tue, 14 Jul 2015 22:50:27 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + body: + encoding: UTF-8 + string: | + + + + + 50.00 + g5hzq2 + + + + + jane.doe@example.com + + + Spree + sale + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Tue, 14 Jul 2015 22:50:27 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"0a189bd35f7531f3cf518cd86a60a775"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - c896d1c1f1841af6c28882b5dd066008 + X-Runtime: + - '0.309252' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + FLTXYTBc43d/AwAA//8DAGeKpHGJFAAA + http_version: + recorded_at: Tue, 14 Jul 2015 22:50:27 GMT +- request: + method: put + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/b792tp/submit_for_settlement + body: + encoding: UTF-8 + string: | + + + 50.00 + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 200 + message: OK + headers: + Date: + - Tue, 14 Jul 2015 22:50:28 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"5a84213d4ec639c4b39c7016ca7ca4b2"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 1acec5083f4b1c7ef9a09ef245c48df3 + X-Runtime: + - '0.210291' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + //8DADbiabXPFgAA + http_version: + recorded_at: Tue, 14 Jul 2015 22:50:28 GMT +recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Gateway_Braintree/Previously_consumed_nonce/should_raise_exception.yml b/spec/cassettes/Spree_Gateway_Braintree/Previously_consumed_nonce/should_raise_exception.yml new file mode 100644 index 00000000..2593aff8 --- /dev/null +++ b/spec/cassettes/Spree_Gateway_Braintree/Previously_consumed_nonce/should_raise_exception.yml @@ -0,0 +1,96 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + John + Doe + cleve@rosenbaumgrady.co.uk + + + John + Doe + 10 Lovely Street + Northwest + Company + Herndon + Alabama + USA + 35005 + + fake-consumed-nonce + + true + + + {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 422 + message: Unprocessable Entity + headers: + Date: + - Tue, 14 Jul 2015 22:50:25 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Cache-Control: + - no-cache + X-Request-Id: + - d8ec789536262f5227a5ffa240ce76f4 + X-Runtime: + - '0.042763' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIADGSpVUAA9xVyW7bMBC9+ysI3WnZMIK0gMwkSFEURdFLmnMwFsc2ES7C + kHKjvy8ly7LkLUbbU04S35vlcTQzyu7ejGYbJK+cnSfT8SRhaHMnlV3Nk+df + X/mn5E6MMigURyJHnNAXznoUI8ayBvL1a3dgoSpwngARVEnaUnnpgzNI2+NF + 20gWUBm0gRsMayd38GmvPbvj+0id2kkUn2fTyW2WNu9DGkIgtSgDtlF9ZRZO + J6LV8LLV8GKdzTFLO+uDKAa9hxWKR7DWBVZ6ZMBOhWDGUUy1Bsvq4zhLd679 + e6QHF2kB31UoPV2iLCeUKvAc6P+UbXo7m36cskVkobSOrc1BytjI/rgMZ3qy + DnbGN9bnsOoR6jV8X0bsbQLjz43FUpEP3IJB8d2tbZb2gJ2Nhh3yxcXa7o/d + bBlQWuQaN3hPzqNdQGlWBLIa525cvkY9jcXlprlUqStkXiW1MfKBEEOXZzph + P9wGdcWeGiJLDwwGn+wtoJUoO/Kno7D+jT66HXF9x9yZAmwlHrfPuse3wEC+ + y0GrUIlvSFa6eM8O6ZsRruLyFA8aFmAgS9vzMF1pA1W8niQOuljDTDw/PdRp + j4m+Y+F8AN3QYnYzmdzE0e9B73fn0TrlzUCJJbxijGF9abDFDrdKa7kP5IoQ + LzYsZPx1qGW1bZ5AZQzSR3r6jpwziRuVI/dRbWS4kswqPU/qKIPBWxKUMmqi + PM5/OGN3xRTuR+/vF8/oX1ZVXIQnfqN/AAAA//8DAF2lzQ+DBwAA + http_version: + recorded_at: Tue, 14 Jul 2015 22:50:25 GMT +recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Gateway_Braintree/on_a_payment/PayPal/failure/fails.yml b/spec/cassettes/Spree_Gateway_Braintree/on_a_payment/PayPal/failure/fails.yml new file mode 100644 index 00000000..6c3bda4b --- /dev/null +++ b/spec/cassettes/Spree_Gateway_Braintree/on_a_payment/PayPal/failure/fails.yml @@ -0,0 +1,303 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + John + Doe + gerda_keeling@labadie.ca + + + John + Doe + 10 Lovely Street + Northwest + Company + Herndon + Alabama + USA + 35005 + + fake-paypal-future-nonce + + true + + + {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Tue, 14 Jul 2015 22:50:35 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"acbab2bd593d36b3f3b865d0d1f181b1"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 96d03c3e80cd40eb7a10fa1a9b4b65e4 + X-Runtime: + - '0.222756' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIADuSpVUAA6RTOXOcMBTu/SsYetCCYezsCNaFJ0Vqp0mz80BvQbEOLAmz + +NdHwF4OaTIuv+PdEt0dpQje0ViuVREm8SYMUNWacdUU4c+X79FjuCvvaN1b + pyWa8i4IKGflY57myX2SUOLBxHmtbkG5yOOPSuXjx9s39zDI4ZillNyqk/vA + jXWRAonlD90qSm6ISRdwRs8aKbnCSay17ECNgeKiCJ3pMSQzjxK4KBs0DPav + iMKP8CSgAsYxroGSRZ+cXasVruIPcFxxA1aWu7W3NggOWQQucGOHRcg8dFxi + WKabJI82D1GSvaTpNt9s77NflFwD5vi+Y/8Xfw1Y6s/3iA4cBbOXlhh3UQ2G + 2VNSMAbGU8cdjB2ICOpa98p9dkyGlWUhPe30K6oya7PRDpQs6KwtO/0NCmOm + 8QmPIDvh163lzb5nJ8MD9OI8bqW1QFBhOe2UkpN4MXMJDUa9EWXrXGe3hIC1 + 6GxcGeDKGcTGb2OAcapEfN8SldtLdK1me6EbTZZZ4k41O1Tv3Gg1WQoLilX6 + 6J/tpcK55hdPOuf44lnnHLavbG145/yP/MchvYOsD/U3Z2cSGDPoF7dK45u/ + fOg/AAAA//8DAB9t5z4DBAAA + http_version: + recorded_at: Tue, 14 Jul 2015 22:50:35 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + body: + encoding: UTF-8 + string: | + + + + 2 + gianni@koepp.info + jane.doe@example.com + + + R816662992 + + + 4001.00 + 4h4ysw + Spree + sale + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Tue, 14 Jul 2015 22:50:35 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"250493666f40a94d16a4e807650ada61"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 532919b72082519ef6ca1af2f4f9f8d6 + X-Runtime: + - '0.278264' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIADuSpVUAA+xYS3PbNhC+51d4dIept60MzTzGbsadHDpxfGgvHpBYiahJ + gAFAWeqv74IgKVIEY3emhx56E3c/APvC7geFHw55drEHpbkUN5PZ5XRyASKR + jIvdzeTx+y/kevIhehcaRYWmiUFU9O7iIuQsWsX6x+Y6DPCnlWhDTakjWppU + Kv4XsDCoRVZrjgVEmmYQBtVPK0tKpfCsI+FaEjwSoseH2zAYii2Y5rIUJlpO + p2jjNAzqb6vKQSUpFYbQJLFCghbpQgGe5VPZJVIxUPbj2/VsvV7PN5t5GLTC + yjgF1AAj1FxYg28mDD8Nz2ESzaezFZlekdny+3z+fjV9v1j9gWa3C6r1ZcH+ + 2frTgjo42kg03364eF+v5qvZYjZrIo7SLVfaEEFziH6VqQiDjsAhMtp830qM + x+nTqROZF1QcLwTPbiZGlTAJag3klGfRDhSjT88AGdbDx4zGlHG4TGgYOL3D + vkCsuQHPLkUqhU++pYdzqU38yeUw5pk9s3Xft0nrrEfZeurRjXutDZYNVgtj + CrT2heVgQDCbplFIJhOacePbXsEOL5AvThLvSlZVu9deLF11HHfHqe1qQrMi + pfM3oRavoUSJ2eDJMFOd5KBP21IwMszQSaPrK0CVoseeEgPZ6Sy+TTQYk0EO + eHdjapLUi0l5UfxfLP/RYulmp25rZMshY9oB6F4TUEoqgjEqpNDgda3CdVzv + o6N7HAk/BTRb9LPm3+WnmMqN/X64cii00B129Rd6RM2f4KocB4UeJjYslEzw + NIxDM0NpBfcG4wTunzib2uE4ph1ZabBQo08FavZ2bI8hqggyxq1VGOMhbGDl + XvLE5mGL+cUVWCIxqKEvpR3SeIobwCMoQw/EDX2vCg6QF82sjaXMgIpJtKWZ + tpSjBTSzHb0gCVXNIDXyGUS0TJdH/YLw6stpYu67glXDWPquBO5JrBHedlBw + 5XKaS2HSCKfouWiAPAJVfWAlqU+rJyaxbcT4u4W1KJVZFVl/S+A53QEpVRal + xhT6fRBQjW1XX8aKcmGvQl3Dl9gLg4IebTd+ygGLlD1lcieDUjwL+SIuC7H7 + AGLPlRQWc6OpYLE8IGNpj6hbmIKCIo15dAttzTmBU6dAM5Oi5XBCdGQOxCDm + 5qR3n7WqVJg3LLxdmVlS1UGda9omb6kip9kJ2pHVRtOjklkH0QjqMGpdYpvD + MSWeT5ietN825ZZYLRUJdE8dKpuYSVYmFYXthK2VOVAp+I8S6juEYswCx2Y7 + uE72coLIJdHseeTStPqanfUvTc33ScqxBNWxN+Hb+VghADeqE2NvGlJgVOTF + G2lxi293+OlDo0KMvxVcjDRyTJZTsQNs9e6hUMlaGzuUREvsThDRgqMtQ7nz + NDh3tZXU4XF9LqN+ilPGOlG8GKVAHX3blSoCRgocuZIRZBnEBtKT5TMkmqWM + F4smn51jmz3Bvu5hb4zrqlC9OnC7yKZLjbSdsbcBdomhbf1NkRvZVyL6NVK7 + rd71e3wCCsiiB5fr5tPRS7W3M2oLMDZd7MnyhbiEDrQYibhU2jFUBgZfRbrp + Qj2VPz0deus/vo8ZvI3fCIeDdRpbsPKbYbk4FiuSMt+GZZJ42CsmZcR363lR + GvBVRz0+CBdIssrqZ/WHAMoLmj3V7/QwGMP1KUzH1z7T6bKYUdDre1W857W9 + WnJkUqwvgpfMVh+g6Vs5JDuVn6/SDoRh/3aP7Or3RzhgE8zAzuAqOq26XeDi + xaLfPv1OlsvV4mo6Y/MlLFZAl4s4oWy+XnQC24yMPttE8cOnr3eExWu6vqKL + xWZzNaXXMXbRc9y/xR5cSN5OHnDSlztrwO3d58cvZJNsF5vr9XYL1spWeYoj + uED5uFHnNeLrUFWUXUTvvj3d35IrSLYbOt+w9SpJphA3meidp8jgf5mBuIs+ + +4/mXNjc6ixDMVaiqZ8R9dC7+3r/5f7z1zvs32OQhggWpipLn6ujr/izcTje + Jz3AV7tVGDTXoTdco3d/AwAA//8DAFp08v+XFAAA + http_version: + recorded_at: Tue, 14 Jul 2015 22:50:35 GMT +- request: + method: put + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/5bsq98/submit_for_settlement + body: + encoding: UTF-8 + string: | + + + 4001.00 + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 422 + message: Unprocessable Entity + headers: + Date: + - Tue, 14 Jul 2015 22:50:36 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Cache-Control: + - no-cache + X-Request-Id: + - 4fd7d21b69f951c42758aef125a4a688 + X-Runtime: + - '0.283652' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + GgAA + http_version: + recorded_at: Tue, 14 Jul 2015 22:50:36 GMT +recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Gateway_Braintree/on_a_payment/PayPal/success/can_be_voided.yml b/spec/cassettes/Spree_Gateway_Braintree/on_a_payment/PayPal/success/can_be_voided.yml new file mode 100644 index 00000000..1e369239 --- /dev/null +++ b/spec/cassettes/Spree_Gateway_Braintree/on_a_payment/PayPal/success/can_be_voided.yml @@ -0,0 +1,302 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + John + Doe + blanca@bailey.com + + + John + Doe + 10 Lovely Street + Northwest + Company + Herndon + Alabama + USA + 35005 + + fake-paypal-future-nonce + + true + + + {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Tue, 14 Jul 2015 22:50:32 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"1e45a5954ce0900d9e2939e5ffe37e18"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - db3985ae0b44242c0d1b7609358f006d + X-Runtime: + - '0.189121' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIADiSpVUAA6RTS3ObMBC+51cw3LFsYjuuR8Y5dHroOb30klnQGtRKKyqJ + APn1FeBHEnrp5Mb32NVqP8SPnVbRC1onDR3i1WIZR0iFEZLKQ/zj6Vuyi4/Z + HS8a541Gm91FEZci22zT9Xa3XXEWwMAFraiAfBLwa06b/vXPF//Q6rZbp5y9 + VQf3SVrnEwKN2XdTEWdviEFXcEFfDXJ2g4NYGF0D9RFJdYi9bTBmI48apMpy + BVTAYx6+sV8EL2eTMFjqyhDOCk/QzbgWcyf93FtYBI8iAR/5vsZDLAL0UmOc + pcvVJlk+JKv1U5ruN8v9ffqTs1vBWN/U4v/qbwXT+WMQyUmiEu46kpA+KcAK + d24K1kJ/nriGvgaVQFGYhvx7x2CYWSYy0N78RsrK3T21lrMJXbRpp7+AcCEM + PmIHulb4Yd+jU+AJGnW5bm6MQqA4G3bK2Vm8mqWGEpPGqqzyvnZ7xsA59G6R + W5DkLWIZttHCmCwLc2sk/6zRV0Y8K1MaNt1lUVN5RHqR1tBgOTggkZsu/K/X + Ey5nfjLSsccnYx17uCZ3hZW1D0/xH0EGB5sH9ZFzIwlCWAyLm7UJw19f8l8A + AAD//wMABeFuvfwDAAA= + http_version: + recorded_at: Tue, 14 Jul 2015 22:50:32 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + body: + encoding: UTF-8 + string: | + + + + 2 + bradford.parisian@osinski.name + jane.doe@example.com + + + R685599308 + + + 50.00 + g83nwr + Spree + sale + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Tue, 14 Jul 2015 22:50:33 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"4586e0e2b8eb1131f14cbffbd4f1076c"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 73b8a4df2f24f6a04f8e1edd650037ff + X-Runtime: + - '0.426921' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + rcKguQ694Rq9+xsAAP//AwA8qTbcjBQAAA== + http_version: + recorded_at: Tue, 14 Jul 2015 22:50:33 GMT +- request: + method: put + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/79d89t/submit_for_settlement + body: + encoding: UTF-8 + string: | + + + 50.00 + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 200 + message: OK + headers: + Date: + - Tue, 14 Jul 2015 22:50:34 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"97cf57d8ee4312aebb8d7ded68ac9a31"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - ac74b126821429b88dc72618b574fb51 + X-Runtime: + - '0.344684' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + AAD//wMA10mcj9IWAAA= + http_version: + recorded_at: Tue, 14 Jul 2015 22:50:34 GMT +recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Gateway_Braintree/on_a_payment/PayPal/success/succeeds.yml b/spec/cassettes/Spree_Gateway_Braintree/on_a_payment/PayPal/success/succeeds.yml new file mode 100644 index 00000000..c15852d1 --- /dev/null +++ b/spec/cassettes/Spree_Gateway_Braintree/on_a_payment/PayPal/success/succeeds.yml @@ -0,0 +1,302 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + John + Doe + neoma@kiehn.us + + + John + Doe + 10 Lovely Street + Northwest + Company + Herndon + Alabama + USA + 35005 + + fake-paypal-future-nonce + + true + + + {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Tue, 14 Jul 2015 22:50:31 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"c1df133020d7f7da190a97e3308c0d72"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - cdf23a075eb2940f9266506963ae15e7 + X-Runtime: + - '0.245171' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIADeSpVUAA6RTS3ObMBC+51cw3EFgx3XqkXEOnR56Ti+9ZBa0BjXSikgi + Nvn1FeBXSi+dHL/HPrQf8N1Rq+gNrZOGtnGeZnGEVBkhqd7GP5++Jw/xrrjj + Vee80WiLuyjiUhQP63W+zPIlZwEMXNCqBsgnAb+XtOrfX7/69UEfjvcLzm7V + wb2X1vmEQGPxwzTE2Q0x6ArO6JtBzq5wECujW6A+Iqm2sbcdxmzkUYNUBaHR + 8PgisaG0c5xN7KC3jSGcVe3hOOMOWDrp597KIngUCfjI9y1uYxGglxrjYpHl + qyRbJ/n902KxWWWbZfaLs2vBWN+14v/qrwXT/DGFZC9RCXdZSUifVGCFOzUF + a6E/bdxC34JKoKpMR/6jYzDMLBMZaG9ekIov+9fG15xN6KxNN/0NhKkw+IhH + 0K3CNARzc+/RKXAPnTo/tzRGIVBcDDfl7CRezFJDjUlnVdF437oNY+AcepeW + FiR5i1iHaxygHyaxsLdG8s8afWPEszK1YdNb0pbqHdKbtIYGy9YBidIcw8d6 + mXCe+clIxx6fjHXs4brSVVa2PvyH/wgyONg8qL85N5IghMVwuFmbsPzlN/4D + AAD//wMA0dJlXfkDAAA= + http_version: + recorded_at: Tue, 14 Jul 2015 22:50:31 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + body: + encoding: UTF-8 + string: | + + + + 2 + tabitha_franecki@hansen.name + jane.doe@example.com + + + R000741104 + + + 50.00 + 6fqhtg + Spree + sale + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Tue, 14 Jul 2015 22:50:31 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"eb94ddb84e104d419a3f5f2a4cc5852d"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 1cedf1f9a23ae4e9c4fe070fe6baa242 + X-Runtime: + - '0.280241' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + Be11GAzX+N3fAAAA//8DAAd23qiJFAAA + http_version: + recorded_at: Tue, 14 Jul 2015 22:50:31 GMT +- request: + method: put + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/3d768p/submit_for_settlement + body: + encoding: UTF-8 + string: | + + + 50.00 + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 200 + message: OK + headers: + Date: + - Tue, 14 Jul 2015 22:50:32 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"c4cd6658428ef2f022ec266cc6b85561"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - a9a6adbc5fb1529ea4b3184924b49b17 + X-Runtime: + - '0.311954' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + /wMA/hO/188WAAA= + http_version: + recorded_at: Tue, 14 Jul 2015 22:50:32 GMT +recorded_with: VCR 2.9.3 diff --git a/spec/solidus_braintree_spec.rb b/spec/solidus_braintree_spec.rb index 11689b18..9f8cb17b 100644 --- a/spec/solidus_braintree_spec.rb +++ b/spec/solidus_braintree_spec.rb @@ -4,8 +4,4 @@ it 'has a version number' do expect(SolidusBraintree::VERSION).not_to be nil end - - it 'does something useful' do - expect(false).to eq(true) - end end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 2c03dffe..e0795b98 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,2 +1,53 @@ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__) require 'solidus_braintree' + +ENV["RAILS_ENV"] = "test" + +require File.expand_path("../dummy/config/environment.rb", __FILE__) + +require 'rspec/rails' +require 'database_cleaner' +require 'ffaker' + +Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} + +require 'spree/testing_support/factories' +require 'spree/testing_support/order_walkthrough' +require 'spree/testing_support/preferences' + +require_relative "../app/models/concerns/payment_braintree_nonce_concern" + +FactoryGirl.find_definitions + +VCR.configure do |c| + c.cassette_library_dir = "spec/cassettes" + c.hook_into :webmock + c.configure_rspec_metadata! +end + +RSpec.configure do |config| + config.mock_with :rspec + config.use_transactional_fixtures = false + + #config.filter_run focus: true + #config.filter_run_excluding slow: true + + config.include FactoryGirl::Syntax::Methods + config.include Spree::TestingSupport::Preferences + + config.before :suite do + DatabaseCleaner.strategy = :transaction + DatabaseCleaner.clean_with :truncation + end + + config.before do |example| + DatabaseCleaner.strategy = example.metadata[:js] ? :truncation : :transaction + DatabaseCleaner.start + reset_spree_preferences + end + + config.after do + DatabaseCleaner.clean + end + +end diff --git a/spec/spree/gateway/braintree_spec.rb b/spec/spree/gateway/braintree_spec.rb new file mode 100644 index 00000000..ec2510c5 --- /dev/null +++ b/spec/spree/gateway/braintree_spec.rb @@ -0,0 +1,212 @@ +require 'spec_helper' + +describe Spree::Gateway::Braintree, :vcr do + let(:payment_method){ @braintree_payment_method } + let(:user){ FactoryGirl.create :user } + let(:address){ FactoryGirl.create :address } + let(:device_data){'{"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"}'} + let(:card){ payment_method.create_profile_from_nonce(user, address, nonce, { device_data: device_data }) } + + before do + @braintree_payment_method = Spree::Gateway::Braintree.create!( + name: 'Braintree Gateway', + environment: 'sandbox', + active: true + ) + @braintree_payment_method.set_preference(:environment, 'sandbox') + @braintree_payment_method.set_preference(:merchant_id, 'zbn5yzq9t7wmwx42') + @braintree_payment_method.set_preference(:public_key, 'ym9djwqpkxbv3xzt') + @braintree_payment_method.set_preference(:private_key, '4ghghkyp2yy6yqc8') + @braintree_payment_method.save! + end + + context 'Credit Card' do + let(:nonce){ Braintree::Test::Nonce::Transactable } + it "should have the correct attributes" do + expect(card.user).to eq user + expect(card.payment_method).to eq payment_method + expect(card.cc_type).to eq 'visa' + expect(card.last_digits).to eq '1881' + expect(card.name).to eq "#{address.firstname} #{address.lastname}" + + expect(card.month).to eq '12' + expect(card.year).to eq '2020' + + expect(card.gateway_payment_profile_id).to be_present + expect(card.gateway_customer_profile_id).to be_present + end + + context 'successful' do + it "succeeds" do + card.gateway_customer_profile_id = nil + auth = payment_method.authorize(5000, card, {}) + expect(auth).to be_success + expect(auth.authorization).to be_present + + capture = payment_method.capture(5000, auth.authorization, {}) + expect(capture).to be_success + expect(capture.authorization).to be_present + end + end + + context 'invalid_email' do + before do + user.email = "quux@foo_bar.com" + user.save! + end + it "fails" do + expect{ + card + }.to raise_error(Spree::Core::GatewayError, 'Email is an invalid format.') + end + end + + context 'decline' do + it "fails" do + card.gateway_customer_profile_id = nil + auth = payment_method.authorize(200100, card, {}) + expect(auth).to_not be_success + expect(auth.message).to eq "processor_declined" + expect(Spree::CreditCard.count).to eql(1) + expect(Spree::CreditCard.first.gateway_payment_profile_id).to be_present + end + end + + context 'with completed payment' do + let!(:auth) do + card.gateway_customer_profile_id = nil + payment_method.authorize(5000, card, {}) + end + let(:auth_code){ auth.authorization } + let!(:capture) do + payment_method.capture(5000, auth_code, {}) + end + + it "can be fully credited" do + credit = payment_method.credit(5000, card, auth_code, {}) + expect(credit).to_not be_success + expect(credit.message).to eq "Cannot refund a transaction unless it is settled. (91506)" + end + + it "can be voided" do + void = payment_method.void(auth_code, card, {}) + expect(void).to be_success + end + end + end + + context 'Previously consumed nonce' do + let(:nonce){ Braintree::Test::Nonce::Consumed } + it "should raise exception" do + expect{ + card + }.to raise_error(Spree::Core::GatewayError) + end + end + + context 'PayPal' do + let(:nonce){ Braintree::Test::Nonce::PayPalFuturePayment } + it "should have the correct attributes" do + expect(card.user).to eq user + expect(card.payment_method).to eq payment_method + expect(card.cc_type).to eq 'paypal' + expect(card.name).to eq 'jane.doe@example.com' + + expect(card.gateway_payment_profile_id).to be_present + expect(card.gateway_customer_profile_id).to be_present + end + + it "succeeds authorization and capture" do + card.gateway_customer_profile_id = nil + auth = payment_method.authorize(5000, card, {}) + expect(auth).to be_success + expect(auth.authorization).to be_present + + capture = payment_method.capture(5000, auth.authorization, {}) + expect(capture).to be_success + expect(capture.authorization).to be_present + end + + it "fails capture with settlement declined" do + card.gateway_customer_profile_id = nil + auth = payment_method.authorize(400100, card, {}) + expect(auth).to be_success + expect(auth.authorization).to be_present + + capture = payment_method.capture(400100, auth.authorization, {}) + expect(capture).to_not be_success + expect(capture.message).to eq 'settlement_declined' + + expect(Spree::CreditCard.count).to eql(1) + expect(Spree::CreditCard.first.gateway_payment_profile_id).to be_present + end + + xit "fails capture on pending settlement" do + auth = payment_method.authorize(400200, card, {}) + expect(auth).to be_success + expect(auth.authorization).to be_present + + capture = payment_method.capture(400200, auth.authorization, {}) + expect(capture).to_not be_success + expect(capture.message).to eq 'settlement_pending' + + expect(Spree::CreditCard.count).to eql(1) + expect(Spree::CreditCard.first.gateway_payment_profile_id).to be_present + end + end + + context 'on a payment' do + context 'PayPal' do + let(:nonce){ Braintree::Test::Nonce::PayPalFuturePayment } + let!(:payment) do + card.gateway_customer_profile_id = nil + FactoryGirl.create(:payment, payment_method: payment_method, source: card, amount: amount) + end + before do + payment.payment_method.environment = Rails.env + payment.authorize! + expect(payment).to be_pending + expect(payment.response_code).to be_present + end + context 'success' do + let(:amount){ 50.00 } + it "succeeds" do + payment.capture! + expect(payment).to be_completed + end + + it "can be voided" do + payment.capture! + payment.void! + expect(payment).to be_void + end + + xit "can be refunded" do + payment.capture! + refund = payment.credit!(50.00) + expect(refund.amount).to eq -50.00 + expect(refund).to be_completed + end + + xit "errors on bad refund" do + payment.capture! + expect{ + payment.credit!(51.00) + }.to raise_error(Spree::Core::GatewayError, 'Refund amount is too large. (91521)') + end + end + context 'failure', transaction_clean: false do + let(:amount){ 4001.00 } + it "fails" do + expect{ + payment.capture! + }.to raise_error(Spree::Core::GatewayError) + expect(payment).to be_failed + + expect(Spree::CreditCard.count).to eql(1) + expect(Spree::CreditCard.first.gateway_payment_profile_id).to be_present + end + end + end + end +end From eafda5a1ffddd4a9ce3d4dac0a34005d601f9769 Mon Sep 17 00:00:00 2001 From: Jack Chu Date: Tue, 14 Jul 2015 19:13:12 -0400 Subject: [PATCH 003/163] Remove extracting out the order id portion of the order id with payment id This was there because it was specific to one FRT client --- app/models/spree/gateway/braintree.rb | 8 -------- 1 file changed, 8 deletions(-) diff --git a/app/models/spree/gateway/braintree.rb b/app/models/spree/gateway/braintree.rb index c16fe176..5bc5361f 100644 --- a/app/models/spree/gateway/braintree.rb +++ b/app/models/spree/gateway/braintree.rb @@ -110,11 +110,6 @@ def purchase(cents, creditcard, options) handle_result(result) end - # order id for braintree is "#{order.number}-#{payment.number}" - def get_order_id_for_auth(order_id) - order_id && order_id.split('-')[0] - end - def capture(money, authorization_code, options = {}) result = braintree_gateway.transaction.submit_for_settlement(authorization_code, amount(money)) handle_result(result) @@ -215,9 +210,6 @@ def transaction_authorize_or_purchase_params(cents, creditcard, options = {}) params.delete(:billing_address) end - # Is this necessary? Or FRT specific? - params[:order_id] = get_order_id_for_auth(params[:order_id]) - # if has profile, set the customer_id to the profile_id and delete the customer key if creditcard.respond_to?(:gateway_customer_profile_id) && creditcard.gateway_customer_profile_id params[:customer_id] = creditcard.gateway_customer_profile_id From 0f16c497b1c27d25d4aeb833a168b712067e5081 Mon Sep 17 00:00:00 2001 From: Jack Chu Date: Wed, 15 Jul 2015 12:03:49 -0400 Subject: [PATCH 004/163] change the gateway name to Solidus::Gateway::BraintreeGateway --- .../gateway/braintree_gateway.rb} | 10 +- app/models/spree/gateway/braintree_gateway.rb | 246 +++++++++++ lib/solidus_braintree/engine.rb | 2 +- .../Credit_Card/decline/fails.yml | 223 ++++++++++ .../Credit_Card/invalid_email/fails.yml | 10 +- .../should_have_the_correct_attributes.yml | 74 ++-- .../Credit_Card/successful/succeeds.yml | 320 ++++++++++++++ .../can_be_fully_credited.yml | 389 ++++++++++++++++ .../with_completed_payment/can_be_voided.yml | 415 ++++++++++++++++++ ...fails_capture_with_settlement_declined.yml | 301 +++++++++++++ .../should_have_the_correct_attributes.yml | 34 +- .../succeeds_authorization_and_capture.yml | 301 +++++++++++++ .../should_raise_exception.yml | 36 +- .../on_a_payment/PayPal/failure/fails.yml | 303 +++++++++++++ .../PayPal/success/can_be_voided.yml | 302 +++++++++++++ .../on_a_payment/PayPal/success/succeeds.yml | 302 +++++++++++++ .../Credit_Card/decline/fails.yml | 225 ---------- .../Credit_Card/successful/succeeds.yml | 320 -------------- .../can_be_fully_credited.yml | 389 ---------------- .../with_completed_payment/can_be_voided.yml | 415 ------------------ ...fails_capture_with_settlement_declined.yml | 302 ------------- .../succeeds_authorization_and_capture.yml | 302 ------------- .../on_a_payment/PayPal/failure/fails.yml | 303 ------------- .../PayPal/success/can_be_voided.yml | 302 ------------- .../on_a_payment/PayPal/success/succeeds.yml | 302 ------------- .../gateway/braintree_spec.rb | 4 +- 26 files changed, 3187 insertions(+), 2945 deletions(-) rename app/models/{spree/gateway/braintree.rb => solidus/gateway/braintree_gateway.rb} (97%) create mode 100644 app/models/spree/gateway/braintree_gateway.rb create mode 100644 spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/decline/fails.yml rename spec/cassettes/{Spree_Gateway_Braintree => Solidus_Gateway_BraintreeGateway}/Credit_Card/invalid_email/fails.yml (93%) rename spec/cassettes/{Spree_Gateway_Braintree => Solidus_Gateway_BraintreeGateway}/Credit_Card/should_have_the_correct_attributes.yml (50%) create mode 100644 spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/successful/succeeds.yml create mode 100644 spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/with_completed_payment/can_be_fully_credited.yml create mode 100644 spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/with_completed_payment/can_be_voided.yml create mode 100644 spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/fails_capture_with_settlement_declined.yml rename spec/cassettes/{Spree_Gateway_Braintree => Solidus_Gateway_BraintreeGateway}/PayPal/should_have_the_correct_attributes.yml (70%) create mode 100644 spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/succeeds_authorization_and_capture.yml rename spec/cassettes/{Spree_Gateway_Braintree => Solidus_Gateway_BraintreeGateway}/Previously_consumed_nonce/should_raise_exception.yml (68%) create mode 100644 spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/failure/fails.yml create mode 100644 spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/success/can_be_voided.yml create mode 100644 spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/success/succeeds.yml delete mode 100644 spec/cassettes/Spree_Gateway_Braintree/Credit_Card/decline/fails.yml delete mode 100644 spec/cassettes/Spree_Gateway_Braintree/Credit_Card/successful/succeeds.yml delete mode 100644 spec/cassettes/Spree_Gateway_Braintree/Credit_Card/with_completed_payment/can_be_fully_credited.yml delete mode 100644 spec/cassettes/Spree_Gateway_Braintree/Credit_Card/with_completed_payment/can_be_voided.yml delete mode 100644 spec/cassettes/Spree_Gateway_Braintree/PayPal/fails_capture_with_settlement_declined.yml delete mode 100644 spec/cassettes/Spree_Gateway_Braintree/PayPal/succeeds_authorization_and_capture.yml delete mode 100644 spec/cassettes/Spree_Gateway_Braintree/on_a_payment/PayPal/failure/fails.yml delete mode 100644 spec/cassettes/Spree_Gateway_Braintree/on_a_payment/PayPal/success/can_be_voided.yml delete mode 100644 spec/cassettes/Spree_Gateway_Braintree/on_a_payment/PayPal/success/succeeds.yml rename spec/{spree => solidus}/gateway/braintree_spec.rb (98%) diff --git a/app/models/spree/gateway/braintree.rb b/app/models/solidus/gateway/braintree_gateway.rb similarity index 97% rename from app/models/spree/gateway/braintree.rb rename to app/models/solidus/gateway/braintree_gateway.rb index 5bc5361f..bce15c5d 100644 --- a/app/models/spree/gateway/braintree.rb +++ b/app/models/solidus/gateway/braintree_gateway.rb @@ -1,7 +1,7 @@ require "braintree" -module Spree - class Gateway::Braintree < ::Spree::Gateway +module Solidus + class Gateway::BraintreeGateway < ::Spree::Gateway preference :environment, :string preference :merchant_id, :string preference :public_key, :string @@ -21,8 +21,8 @@ class Gateway::Braintree < ::Spree::Gateway } ENVIRONMENTS = { - 'development' => :development, - 'qa' => :qa, + 'development' => :sandbox, + 'qa' => :sandbox, 'sandbox' => :sandbox, 'production' => :production } @@ -86,7 +86,7 @@ def create_profile_from_nonce(user, address, nonce, options = {}) spree_cc.gateway_payment_profile_id = card.token end else - raise Core::GatewayError, result.message + raise ::Spree::Core::GatewayError, result.message end end diff --git a/app/models/spree/gateway/braintree_gateway.rb b/app/models/spree/gateway/braintree_gateway.rb new file mode 100644 index 00000000..4f0c66d3 --- /dev/null +++ b/app/models/spree/gateway/braintree_gateway.rb @@ -0,0 +1,246 @@ +require "braintree" + +module Solidus + class Gateway::BraintreeGateway < ::Spree::Gateway + preference :environment, :string + preference :merchant_id, :string + preference :public_key, :string + preference :private_key, :string + + CARD_TYPE_MAPPING = { + 'American Express' => 'american_express', + 'Diners Club' => 'diners_club', + 'Discover' => 'discover', + 'JCB' => 'jcb', + 'Laser' => 'laser', + 'Maestro' => 'maestro', + 'MasterCard' => 'master', + 'Solo' => 'solo', + 'Switch' => 'switch', + 'Visa' => 'visa' + } + + ENVIRONMENTS = { + 'development' => :development, + 'qa' => :qa, + 'sandbox' => :sandbox, + 'production' => :production + } + + def gateway_options + { + environment: ENVIRONMENTS.fetch(preferred_environment), + merchant_id: preferred_merchant_id, + public_key: preferred_public_key, + private_key: preferred_private_key, + logger: ::Braintree::Configuration.logger.clone + } + end + + def braintree_gateway + @braintree_gateway ||= ::Braintree::Gateway.new(gateway_options) + end + + def payment_profiles_supported? + true + end + + def generate_client_token(options = {}) + braintree_gateway.client_token.generate(options) + end + + def create_profile_from_nonce(user, address, nonce, options = {}) + params = { + first_name: address.firstname, + last_name: address.lastname, + email: user.email, + credit_card: { + billing_address: map_address(address), + payment_method_nonce: nonce, + options: { + verify_card: true + }, + } + } + + params.merge!(options) + + result = braintree_gateway.customer.create(params) + + if result.success? + card = result.customer.payment_methods.last + + user.credit_cards.create! do |solidus_cc| + if card.is_a?(::Braintree::PayPalAccount) + solidus_cc.cc_type = 'paypal' + solidus_cc.name = card.email + else + solidus_cc.name = "#{address.firstname} #{address.lastname}" + solidus_cc.cc_type = card.card_type.downcase + solidus_cc.month = card.expiration_month + solidus_cc.year = card.expiration_year + solidus_cc.last_digits = card.last_4 + end + solidus_cc.payment_method = self + solidus_cc.gateway_customer_profile_id = customer_id(user) + solidus_cc.gateway_payment_profile_id = card.token + end + else + raise Core::GatewayError, result.message + end + end + + def supports?(payment) + true + end + + def provider_class + self + end + + def authorize(cents, creditcard, options) + result = braintree_gateway.transaction.sale(transaction_authorize_or_purchase_params(cents, creditcard, options)) + handle_result(result) + end + + def purchase(cents, creditcard, options) + params = transaction_authorize_or_purchase_params(cents, creditcard, options) + params[:options][:submit_for_settlement] = true + result = braintree_gateway.transaction.sale(params) + handle_result(result) + end + + def capture(money, authorization_code, options = {}) + result = braintree_gateway.transaction.submit_for_settlement(authorization_code, amount(money)) + handle_result(result) + end + + def void(authorization_code, source = {}, options = {}) + result = braintree_gateway.transaction.void(authorization_code) + + handle_result(result) + end + + def credit(cents, source, authorization_code, options = {}) + result = braintree_gateway.transaction.refund(authorization_code, amount(cents)) + handle_result(result) + end + + def voidable?(response_code) + transaction = braintree_gateway.transaction.find(response_code) + [ + ::Braintree::Transaction::Status::SubmittedForSettlement, + ::Braintree::Transaction::Status::Authorized, + ].include?(transaction.status) + end + + private + def customer_id(user) + "user_#{user.id}" + end + + def message_from_result(result) + if result.success? + "OK" + elsif result.errors.count == 0 && result.credit_card_verification + "Processor declined: #{result.credit_card_verification.processor_response_text} (#{result.credit_card_verification.processor_response_code})" + elsif result.errors.count == 0 && result.transaction + result.transaction.status + else + result.errors.map { |e| "#{e.message} (#{e.code})" }.join(" ") + end + end + + def handle_result(result) + ActiveMerchant::Billing::Response.new( + result.success?, + message_from_result(result), + {}, + { authorization: (result.transaction.id if result.success?) } + ) + end + + def map_address(addr) + { + first_name: addr.firstname, + last_name: addr.lastname, + street_address: addr.address1, + extended_address: addr.address2, + company: addr.company, + locality: addr.city, + region: addr.state ? addr.state.name : addr.state_name, + country_code_alpha3: addr.country.iso3, + postal_code: addr.zipcode + } + end + + def amount(cents) + sprintf("%.2f", cents.to_f / 100) + end + + def transaction_authorize_or_purchase_params(cents, creditcard, options = {}) + params = options.select {|k| %i[ + billing + billing_address_id + channel + custom_fields + customer + customer_id + descriptor + device_data + device_session_id + merchant_account_id + options + order_id + purchase_order_number + recurring + service_fee_amount + shipping + shipping_address_id + tax_amount + tax_exempt + ].include?(k)} + + params[:options] ||= {} + + params[:amount] = amount(cents) + + if params[:payment_method_nonce].nil? + params[:payment_method_token] = creditcard.gateway_payment_profile_id + params.delete(:billing_address) + end + + # if has profile, set the customer_id to the profile_id and delete the customer key + if creditcard.respond_to?(:gateway_customer_profile_id) && creditcard.gateway_customer_profile_id + params[:customer_id] = creditcard.gateway_customer_profile_id + params.delete(:customer) + # if no profile, define the customer key, delete the customer_id because they are + # mutually exclusive + else + params[:customer] = { + id: params[:customer_id], + email: options[:customer], + first_name: creditcard.first_name, + last_name: creditcard.last_name, + } + params.delete(:customer_id) + end + + # delete the shipping price in options + params.delete(:shipping) + + # if there's a shipping_address/billing_address, set it to the shipping/billing key + # and convert the address into a format Braintree understands + if params[:shipping_address] + params[:shipping] = map_address(params.delete(:shipping_address)) + end + if params[:billing_address] + params[:billing] = map_address(params.delete(:billing_address)) + end + + params[:channel] ||= "Solidus" + + params + end + end +end diff --git a/lib/solidus_braintree/engine.rb b/lib/solidus_braintree/engine.rb index c8c87e71..56cb36b9 100644 --- a/lib/solidus_braintree/engine.rb +++ b/lib/solidus_braintree/engine.rb @@ -5,7 +5,7 @@ class Engine < Rails::Engine config.autoload_paths += %W(#{config.root}/lib) initializer "spree.gateway.payment_methods", after: "spree.register.payment_methods" do |app| - app.config.spree.payment_methods << Spree::Gateway::Braintree + app.config.spree.payment_methods << Solidus::Gateway::BraintreeGateway end end end diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/decline/fails.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/decline/fails.yml new file mode 100644 index 00000000..c859bb48 --- /dev/null +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/decline/fails.yml @@ -0,0 +1,223 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + John + Doe + amos@zulauf.info + + + John + Doe + 10 Lovely Street + Northwest + Company + Herndon + Alabama + USA + 35005 + + fake-valid-nonce + + true + + + {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Wed, 15 Jul 2015 16:03:13 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"8b6591be0967bc08bedda0f043f8fdcb"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 1cc37d590e85c8055c127c77aaf8897c + X-Runtime: + - '1.826309' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAEGEplUAA7RYWW/jNhB+319h+F2R5GPjBIrSYIui6LHAYpMW3ZcFJY1t + NhKpJSknzq/vkLooy7fTh8DhzDfUkHN9UnD/mqWDFQhJObsb+lfecAAs5gll + i7vh0+Mvzmx4H34I4kIqnoEIPwwGAU3CsefPrv3pJHBxoWWoi5eEKQfXbxGb + rt9+3Kjrl+zldTIKXFur0XMqpHIYySD8jS9Z4FoCrU9JvfqZQ+C2S62MeZYT + th4wmt4NlShg6Bo5ZISmIcm4/OmtSEkxv6JszgO3lGtEvuQMenZz8tqTvUAk + qepjYwFEQeIQNVDrHO6GCS4VzWAYjjx/6njXjj999D/eeuNbf/QtcFsDY1/k + yWn2rUH5fBMHZ04hTWTjUkKVExORyGpTIgRZD7W2qy8lKItommKEHZIkAqSs + 5WVsV6s6qpWsDr7TCbwtbbEHIluh9sW3fmgZ5fBT+YvPqwQtRCoBoJpD+N7g + D76CdD34ahSBuwFoLeFVAUv0tVaqz1yo5QtINOrpLLd5TFKq1uGvIFjC8XSN + pAUJWGAthQ8piUhGArdat4CcS0VSB4sMwvHU86aBa4vsKyiYEmsjdkiaL8ko + fPqqb6Iv32c1RquHbWbjXWaswMDSOJxNvA27WtM3NPF7Ylg1CQYAk1YO+Hzw + YOCk3WUzzJcVVLXLhWVl9nB3FAUWCwsnnj+azTSmiWSgK8rRjwv/olKfsFnb + iCVPEywSfezNblLnue6OlKR4ec+MvzCT6rWshZXXx+cOlbIgLIZuVG1FY3T5 + 5R5f/C1SF4XSOW+StSet8QlEVLWHLpetck6KtPY74jwFwoahvjwNNcoWXAgM + jIOVhn0f/bc23dTUJvCaU2H8cTLO1DL0R7r0N4Rb0GsgAm9v5HXgRtpBYxVs + +D4nqYTKyvJkCSRVS0wVaN22ZDWMZmQBTiHScKlULm9dl0gJSl5FglCmG90C + D/hC1leYPW5O1hkw9T0DteTJ95QvuLvCLL3K2eIe2IoKzjTgThKWRPwVO36z + f/NETCddDxFhz61rHWkNNQ18EvqzmV9180mjQ1cET63srgUNQEBOMI8+46yu + /691sohkLGiuL7k73doKUvwZWHgzzhfzLHDLVa0rGP1RmK4VmWTFI1McniKc + JOPJNL6GSeT716MxSUYwn0+j5JpEno9/2CJ2mTZ7v0PTWQHLuCOT5x3J0ugt + C4FulKW0bd73QK3YjEyiChmWekj0iDQCGxOvVlgwMsf9oRxJf2IZ94S2CVlJ + B4TgoovZ1vAavDXz+o/bD9jcqjvnt++2F2NvWJURIv6F2BQ3NkXJ2c7DNOSW + xKYZ654oMZHB4r2WyjbNBY/Rm817QyrjeboYtmsP7KCQwYQPOWpWOsK7EPYu + 6Nbohk1Xsy7za5miLTuW5RnkYaZX5txBtlel75mMz1ifx/rKYxzB/AzwEPsr + g3YkA6yu5gJ+ZfGabo33XwoqzZ5u2qTEVj5kB3z7KKiffYg3NeE6YUT3bQ4P + 6tqf03iLdYoD3K5C/o8zqM6n3RO0QhxHMirwPmJWQ05mXPW1HUV363MdoA4V + 7Hii0jhxOplurponRWwaeetVK+sU3o4iO42W+zveed6HgJh9BJXPDmrI5r0i + 4//298T79PHL4z+/92aDyZSYStPvynGjk6WSdG5iyxM0t+mTlK606sK9m+wI + DCio2jZs/QSy+UbX+8hxwlvOEaPv4NA7OO7OHXRnjbgjhtuBsXbkQDvng8ZZ + nzPO/Jhxyah9l3ftiwsaqW4b22YBuGyTOfzwHwAAAP//AwA1BPVx9RUAAA== + http_version: + recorded_at: Wed, 15 Jul 2015 16:03:13 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + body: + encoding: UTF-8 + string: | + + + + + 2001.00 + 93pgfm + + + + John + Doe + + Spree + sale + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 422 + message: Unprocessable Entity + headers: + Date: + - Wed, 15 Jul 2015 16:03:14 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Cache-Control: + - no-cache + X-Request-Id: + - 66c852a1b69d796d08b6db292d6b0ccf + X-Runtime: + - '0.647884' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + http_version: + recorded_at: Wed, 15 Jul 2015 16:03:14 GMT +recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Gateway_Braintree/Credit_Card/invalid_email/fails.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/invalid_email/fails.yml similarity index 93% rename from spec/cassettes/Spree_Gateway_Braintree/Credit_Card/invalid_email/fails.yml rename to spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/invalid_email/fails.yml index 40023a66..c58bfbef 100644 --- a/spec/cassettes/Spree_Gateway_Braintree/Credit_Card/invalid_email/fails.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/invalid_email/fails.yml @@ -47,7 +47,7 @@ http_interactions: message: Unprocessable Entity headers: Date: - - Tue, 14 Jul 2015 22:50:11 GMT + - Wed, 15 Jul 2015 16:03:10 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -70,15 +70,15 @@ http_interactions: Cache-Control: - no-cache X-Request-Id: - - 19b36b6f35ebf0ec2a4407e73553119a + - 6806499f8424ac7608644baeaf34d29b X-Runtime: - - '0.072802' + - '0.130275' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIACOSpVUAA5RUS2/bMAy+91cIvitO0HXoQVFX7IFhGHbpeh4Yi06E6eFR + H4sIAD6EplUAA5RUS2/bMAy+91cIvitO0HXoQVFX7IFhGHbpeh4Yi06E6eFR chb/+8lO4keSttnJ5veR1CdSpHjYWcO2SEF7t8wWs3nG0BVeabdeZs8/v/D7 7EHeCKg0RyJPnDBU3gWUN4yJDgrtb2+w2FS4zIAImiw/UEUdordIe/Oy75E7 soPdJvAK5f3i/fydyLv/MQkxkl7VEQ/5QmNX3mQSLWgj8p6eBFkMAdYoP7dO @@ -92,5 +92,5 @@ http_interactions: E6fNMmuzTGatJKhV0kTFBpK4y35XDN4wbf+50tJivLDU/wEAAP//AwAaGrb+ EQYAAA== http_version: - recorded_at: Tue, 14 Jul 2015 22:50:11 GMT + recorded_at: Wed, 15 Jul 2015 16:03:10 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Gateway_Braintree/Credit_Card/should_have_the_correct_attributes.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/should_have_the_correct_attributes.yml similarity index 50% rename from spec/cassettes/Spree_Gateway_Braintree/Credit_Card/should_have_the_correct_attributes.yml rename to spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/should_have_the_correct_attributes.yml index 332c9ec9..96e3e0e3 100644 --- a/spec/cassettes/Spree_Gateway_Braintree/Credit_Card/should_have_the_correct_attributes.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/should_have_the_correct_attributes.yml @@ -10,7 +10,7 @@ http_interactions: John Doe - rebeka.pfeffer@veum.name + marquis@bahringer.biz John @@ -47,7 +47,7 @@ http_interactions: message: Created headers: Date: - - Tue, 14 Jul 2015 22:50:08 GMT + - Wed, 15 Jul 2015 16:03:02 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -68,49 +68,49 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"6f804879b2e52945cbfc0c8e08febce6"' + - '"6ad773bea56d93dce2975d257c664b30"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 08326dc8753f94643ab02c82641fc441 + - 7e690e1feee25a5ff21b404f20951f2c X-Runtime: - - '0.795892' + - '1.635009' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIACCSpVUAA7RYWW/jNhB+z68w/K5IvmonUJSmLYqiaPehmwToviwoaWxz - I5FakvKxv75D6qIs30kfAocz31BDzvVJ/uMmTXorEJJy9tAf3Hr9HrCIx5Qt - Hvovz787s/5jcONHuVQ8BRHc9Ho+jYPhxBsPpt6d7+JCy1AXLQlTDq5/hGyy - /fH9Tk3X6XozHvqurdXoORVSOYykEPzJl8x3LYHWJ6Ra/cbBd5ulVkY8zQjb - 9hhNHvpK5NB3jRxSQpNAQAhv5Dabw3wO4ucV5OmtNvXdQq+R2ZIz6NjPyaYj - W0MoqepiIwFEQewQ1VPbDB76MS4VTaEfDL3BxPGmzmD8PBzeT7x7b/bFdxsD - Y59n8WX2jUHxfBMPZ04hiWXtUkyVExERy3JTIgTZ9rW2rS8kKAtpkmCkHRLH - AqSs5EWMx4squqWsSgKnlQC2tMGeiHCJOhbn6qFFtINfi198XiloIFIJAFUf - YuD1/uIrSLa9z0bhuzuAxhI2Clisr7VUfeJCLdcg0aijs9zmEUmo2gZ/gGAx - x9PVkgYkYIE1FTwlJCQp8d1y3QAyLhVJHCw2CEYTz5v4ri2yryBnSmyN2CFJ - tiTD4OWzvomu/JjVCK2e9pmNDpmxHANLo2A29nbsKk3X0MTvhWHVxBgATFrZ - 4/Pek4GTZpfdML+voMpd3llWZg/3QFFgsbBg7A2Gs5nG1JH0dUU5+nHBK5X6 - hPXaRix5EmOR6GPvdpMqz3WXpCTBy3tjfM1MqleyBlZcH587VMqcsAjaUbUV - tdH7L/f84m+QuiiUznmTrB1phY8hpKo5dLFslHOSJ5XfIecJENYP9OVpqFE2 - 4FxgYBystDzR/lub7moqE9hkVBh/nJQztQwGQ136O8I96C0Qgbc39FpwI22h - sQp2fJ+TREJpZXmyBJKoJaYKNG5bsgpGU7IAJxdJsFQqk/euS6QEJW9DQSjT - jW6BB1yT7S1mj5uRbQpMfU1BLXn8NeEL7q4wS28ztngEtqKCMw14kITFId9g - x6/3r5+I6aTrISTsrXGtJa2gpoGPg8FsNii7+bjWoSuCJ1Z2V4IaICAjmEef - OOrK/yudzEMZCZrpS25Pt6aCFH8DFtyJTK6F7xarSpcz+j03XSs0yYpHpjg8 - RTCOR+NJNIVxOBhMhyMSD5E3TMJ4SkJvgH/YIg6Z1nt/QNNZAUu5I+O3A8lS - 6y0LgW4UpbRv3ndAjdiMTKJyGRR6iPWINAIbE61WWDAyw/2hGEl/Yxl3hLYJ - WUkHhOCijdnX8Gq8NfO6jzsO2N2qPef373YUY29YlhEivkFkihubouTs4GFq - kksi04x1T5SYyGDxX0tlm2aCR+jN7r0hlfE8XQz7tSd2UMhggqcMNSsd4UMI - exd0a7KYzqbf2syvYYq27FyWZ5CnmV6RcyfZXpm+VzI+Y30d6yuOcQbzM8BT - 7K8I2pkMsLyad/Ari9e0a7z7UlBqjnTTOiX28iE74PtHQfXsU7ypDtcFI7pr - c3pQV/5cxlusU5zgdiXyf5xBVT4dnqAl4jySUYKPEbMKcjHjqq7tLLpbnesE - dShh5xOV2onLyXR91TzOI9PIG68aWavwDhTZZbR8euCd52MIiNlHUPnmoIbs - 3mscjL68et7zL/+Mf3r9d3c2mEyJqDT9rhg3OllKSesm9jxBc5suSWlLyy7c - ucmWwID8sm3D3k8gu290nY8cF7zlnDH6Tg69k+Pu2kF31Yg7Y7idGGtnDrRr - Pmhc9Tnjyo8Z7xm1H/Ku/e6CRqrbxLZeAC6bZA5u/gMAAP//AwA+Ig78/RUA - AA== + H4sIADaEplUAA7RYW2/bNhR+768w/K5I8qVxCkVdumEYhq3A0HYD+lJQ4nHM + RSJVkvIlv36H1I2y7PiS7iFweM53KPJcPyl6v82z0RqkYoLfj8ObYDwCngrK + +OP9+MvnX73F+H38JkpLpUUOMn4zGkWMxou7u7vJ5C6MfFwYGerSFeHaw/Vz + wue75+93+naTb7azSeS7WoNeMqm0x0kO8e9ixSPfERh9RprVLwIiv1saZSry + gvDdiLPsfqxlCWPfyiEnLItzIr+XTP2UkJXES4C8Sdhz5FdKAytWgsPAeEm2 + A9kGEsX0EJtKIBqoR/RI7wq4H1NcapbDOJ4E4dwLbr1w/jl8+y6YvgvCr5Hf + GVj7sqCX2XcG1fNtMLwlg4yq9kiUaS8lkqp6UyIl2Y2Ntq+vJChLWJahhzxC + qQSlGnkV4CfdhLaWNRng9aLvSjvsifDWqJeC3Dy0CnX8c/WLz6sFHURpCaDb + S4TB6A+xhmw3+mQVkb8H6Cxhq4FT49Za9VFIvdqAQqOBzjm2SEnG9C7+DSSn + Am/XSjqQhEcsqPghIwnJSeTX6w5QCKVJ5mGlQTydB8E88l2R64KSa7mzYo9k + xYpM4i+fjCeG8pespmj1cMhsesyMlxhYlsaLWbBn12iGhjZ+XzhWDcUAYNKq + kViOHiycdLvsh/l1BVXv8sqysnv4R4oCi4XHsyCcLBYG00YyMhXlmcfFfzNl + btiuXcRKZBSLxFx7v5s0eW5aJCMZOu+Jiw23qd7IOljlPrH0mFIl4Sn0o+oq + WqPXO/f84u+Qpii0yXmbrANpg6eQMN1dulp2yiUps+bciRAZED6OjfMM1Co7 + cCkxMB5WWpmZ8zub7msaE9gWTNrzeLngehWHE1P6e8ID6B0Qid6bBD24lfbQ + WAV7Z1+STEFt5ZxkBSTTK0wV6I7tyBoYy8kjeKXM4pXWhXrn+0Qp0OomkYRx + 0+ge8YIbsrvB7PELssuB62856JWg3zLxKPw1ZulNwR/fA18zKbgB3CvCaSK2 + 2PHb/dsnYjqZekgIf+qO1pM2UNvAZ3G4WIR1N5+1OjyKFJmT3Y2gBUgoCObR + R4G6+v9Gp8pEpZIVxsn96dZVkBZPwOPb+XS7xBhWq0ZXcva9tF0rscmKV2Y4 + PGU8o9PZPL2FWRKGt5MpoRNYLucJvSVJEOIftohjpu3eP6DprIHnwlP06Uiy + tHrHQuIxqlI6NO8HoE5sRybRpYorPVAzIq3AxaTrNRaMKnB/qEbSn1jGA6Fr + QtbKAymF7GMONbwW78y84eNeBuxv1Z/zh3d7EeNuWJcRIv6F1BY3NkUl+NHL + tAyXpLYZm56oMJHBIb+OyjUtpEjxNPt+QyoTBKYYDmtP7KCRwcQPBWrWJsLH + EO4ueCx6Rze66DO/jim6snNZnkWeZnpVzp1ke3X6Xsn4rPV1rK+6xhnMzwJP + sb8qaGcywNo1r+BXDq/p1/jwpaDWvNBN25Q4yIfcgB8eBc2zT/GmNlwXjOih + zelB3ZznMt7i3OIEt6uR/+MMavLp+AStEeeRjBr8EjFrIBczrsZtZ9Hd5l4n + qEMNO5+otIe4nEy3rha0TG0j707VyXqFd6TILqPlwZF3nh9DQOw+kqknDzVk + 3680nn79ZxbMP/319sOHt/uzwWZKypTtd9W4MclSS3qeOPAEw22GJKUvrbvw + wJM9gQVFdduGg59A9t/oBh85LnjLOWP0nRx6J8fdtYPuqhF3xnA7MdbOHGjX + fNC46nPGlR8zXjNqf8i79qsLGqluF9t2Abjskjl+8x8AAAD//wMAqp0Sr/oV + AAA= http_version: - recorded_at: Tue, 14 Jul 2015 22:50:08 GMT + recorded_at: Wed, 15 Jul 2015 16:03:02 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/successful/succeeds.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/successful/succeeds.yml new file mode 100644 index 00000000..c19b048e --- /dev/null +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/successful/succeeds.yml @@ -0,0 +1,320 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + John + Doe + anthony@olson.biz + + + John + Doe + 10 Lovely Street + Northwest + Company + Herndon + Alabama + USA + 35005 + + fake-valid-nonce + + true + + + {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Wed, 15 Jul 2015 16:03:04 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"0e2184b8b9437548237e19899f791fbf"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 8533a32bb9dab949e4c8bcd566804b68 + X-Runtime: + - '2.267814' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIADiEplUAA7RYS3PbNhC+51dodKdJSpStZmi6nmY6nU6bi5N2JpcMSK4k + xCRAA6As+dd3Ab5AUW+nh4yD3W+BBfb1UeHDJs9GaxCScnY/9m+88QhYwlPK + lvfjr19+d+bjh+hDmJRS8RxE9GE0CmkaTfzb2yCY34YuLrQMdcmKMOXg+i1m + s+3byy/q7jV/3QST0LW1Gr2gQiqHkRyiP/mKha4l0PqMNKtPHEK3W2plwvOC + sO2I0ex+rEQJY9fIISc0i/CUFWfbX3kmObuJ6VvoVgoNKVAFA8MF2QxkrxBL + qobYRABRkDpEjdS2gPtxiktFcxhHE8+fOd6d48+++LcfvelHL/gWup2BsS+L + 9DL7zqA63wTCWVDIUtm6lFLlJESkst6UCEG2Y63t6ysJymKaZRhih6SpACkb + eRXcl6AJay1rou/0Im9LO+yJ0NaoYwFuDq3CHP1W/cXzakEHkUoAqPYSvjf6 + i68h246ejCJ0dwCdJWwUsFQ/a636zIVavYJEo4HOcpsnJKNqG/0BgqUcb9dK + OpCAJRZT9JiRmOQkdOt1Byi4VCRzsMogms48bxa6tsh+gpIpsTVih2TFikyi + r0/6JYbyY1ZTtHrcZzY9ZMZKDCxNonng7dg1mqGhid9XhlWTYgAwaeWIL0aP + Bk66XXbD/L6Cqnd5Z1mZPdwDRYHFwqLA8yfzuca0kQx1RTn6uOgfKvUN27WN + WPEsxSLR197tJk2e6/ZISYaP98z4KzOp3sg6WPV8fOFQKUvCEuhH1Va0Ru9/ + 3POLv0PqolA6502yDqQNPoWYqu7S1bJTLkiZNX7HnGdA2DjSj6ehRtmBS4GB + cbDSykz7b226q2lMYFNQYfxxco4zI/InuvR3hHvQWyACX2/i9eBG2kNjFez4 + viCZhNrK8mQFJFMrTBXo3LZkDYzmZAlOKbJopVQhP7oukRKUvIkFoUw3uiVe + 8JVsbzB73IJsc2Dqew44DtPvGV9yd41ZelOw5QOwNRWcacC9JCyN+QY7frt/ + eyKmk66HmLDnzrWetIGaBh5E/nzu1908aHXoiuCZld2NoAUIKAjm0WeOuvr/ + jU6WsUwELfQj96dbV0GKPwOLlpvldBWHbrVqdCWjL6XpWrFJVrwyxeEpoiCd + BrPkDoLY9+8mU5JOYLGYxekdiT0f/2GLOGTa7v0Tms4aWM4dmT4fSJZWb1kI + dKMqpX3zfgDqxGZkElXKqNJDqkekEdiYZL3GgpEF7g/VSPoby3ggtE3IWjog + BBd9zL6G1+KtmTc87jhgd6v+nN+/21GMvWFdRoj4AYkpbmyKSCYPXqZltyQx + zVj3RImJDBbxtVS2aSF4gt7svhtSGc/TxbBfe2IHhQwmeixQs9YRPoSwd0G3 + ftw+b9eqz/w6pmjLzmV5Bnma6VU5d5Lt1el7JeMz1texvuoaZzA/AzzF/qqg + nckA66d5B7+yeE2/xocfBbXmSDdtU2IvH7IDvn8UNGef4k1tuC4Y0UOb04O6 + 8ecy3mLd4gS3q5H/4wxq8unwBK0R55GMGnyMmDWQixlX82xn0d3mXieoQw07 + n6i0TlxOptun5mmZmEbeedXJeoV3oMguo+WTA988P4eAmH0Elc8Oasjuu6bR + 9Nu/gfcUzGefbr/szgaTKQmVpt9V40YnSy3pvcSeEzS3GZKUvrTuwoOX7AkM + KKzbNuz9CWT3i27wI8cFXzlnjL6TQ+/kuLt20F014s4YbifG2pkD7ZofNK76 + OePKHzPeM2p/yrf2uwsaqW4X23YBuOySOfrwHwAAAP//AwCokZ2d9hUAAA== + http_version: + recorded_at: Wed, 15 Jul 2015 16:03:04 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + body: + encoding: UTF-8 + string: | + + + + + 50.00 + gxg3hb + + + + John + Doe + + Spree + sale + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Wed, 15 Jul 2015 16:03:07 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"edf146e8ad1874e9a16b91c6b3f94671"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 3826a6ece5b1f3d987cfa110d5a00cd4 + X-Runtime: + - '2.344103' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + EgAA + http_version: + recorded_at: Wed, 15 Jul 2015 16:03:07 GMT +- request: + method: put + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/cb4nbd/submit_for_settlement + body: + encoding: UTF-8 + string: | + + + 50.00 + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 200 + message: OK + headers: + Date: + - Wed, 15 Jul 2015 16:03:09 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"7c8057be354a16ba03482bead3ca945c"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 2a82b7d197cd69eb3c1fcfde2a7ddcf4 + X-Runtime: + - '0.207693' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + http_version: + recorded_at: Wed, 15 Jul 2015 16:03:09 GMT +recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/with_completed_payment/can_be_fully_credited.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/with_completed_payment/can_be_fully_credited.yml new file mode 100644 index 00000000..54ee19fb --- /dev/null +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/with_completed_payment/can_be_fully_credited.yml @@ -0,0 +1,389 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + John + Doe + malachi.hauck@jastbradtke.ca + + + John + Doe + 10 Lovely Street + Northwest + Company + Herndon + Alabama + USA + 35005 + + fake-valid-nonce + + true + + + {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Wed, 15 Jul 2015 16:03:15 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"72777199d7331425e789a98ee7880a11"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - ae8c699af915d2a8c04947757b0e63e4 + X-Runtime: + - '0.864874' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAEOEplUAA7RYS2/jNhC+51cYviuS/Ei8gaI0aFEsinYvu9kCuSwocRxx + LZFaknLs/PoOqbdlx46THgKHM99Q5Dw/KbjbZOloDVIxwW/H/qU3HgGPBWX8 + 6Xb88O1PZzG+Cy+CuFBaZCDDi9EoYDS8+uRfTa4Xs8DFhZGhLk4I1w6uXyI+ + 3778+qSvn7PnzWwSuF2tQS+ZVNrhJIPwL5HwwO0IjD4l9eoPAYHbLo0yFllO + +HbEWXo71rKAsWvlkBGWhhlJSZywy4QU8eq3n2gZSUL1Ci5jErglxqDzRHAY + 7LEkm4HsGSLF9BAbSyAaqEP0SG9zuB1TXGqWwTiceP7c8a4df/7Nv7rxpjf+ + /DFwWwNrX+T0bfatQfl8GxNnySClqjkSZdqJiaSq2pRISbZjo+3rSwnKIpam + GG2HUCpBqVpexpm+1BGuZHUiOL0k6Epb7JEoV6jXYl0/tIx4+Hv5i8+rBC1E + aQmgm0v43uhvsYZ0O/pqFYG7A2gtYaOBU+PWSvVFSJ08g0Kjga5zbBGTlOlt + +BkkpwJv10hakIQnrKvwPiURyTD9qnULyIXSJHWw4CCczj1vHrhdUdcFBddy + a8UOSfOETMKHr8YTQ/lrVlO0ut9nNj1kxgsMLIvDxczbsas1Q0MbvweOVUMx + AJi0aiSWo3sLJ+0uu2F+X0FVu7yzrOwe7oGiwGLh4czzJ4uFwTSRDExFOeZx + 4XemzA2bdReRiJRikZhr73aTOs9Np2QkReetuHjmNtVrWQsr3SeWDlOqIDyG + flS7isbo/c49vfhbpCkKbXLeJutAWuMpREy3ly6XrXJJirQ+dyRECoSPQ+M8 + A7XKFlxIDIyDlVak5vydTXc1tQlscibteZxMcJ2E/sSU/o5wD3oLRKL3Jl4P + bqU9NFbBztmXJFVQWXVOkgBJdYKpAu2xO7IaxjLyBE4h0zDROlc3rkuUAq0u + cdQxbhrdE17wmWwvMXvcnGwz4PpHBjoR9EcqnoS7xiy9zPnTHfA1k4IbwK0i + nEZigx2/2b95IqaTqYeI8FV7tJ60htoGPgv9xcKvuvms0eFRpEg72V0LGoCE + nGAefRGoq/6vdaqIVCxZbpzcn25tBWmxAo6til5tosAtV7Wu4OxXYbtWZJMV + r8xweMpwRqezeXwNs8j3rydTQiewXM4jek0iz8c/bBGHTJu9P6DprIFnwlF0 + dSBZGn3HQuIxylLaN+8HoFZsRybRhQpLPVAzIq2gi4nXaywYleP+UI6kf7CM + B8KuCVkrB6QUso/Z1/AafGfmDR/3OmB3q/6c37/bq5juhlUZIeInxLa4sSkq + wQ9epiG6JLbN2PREhYkMHQ7cUXVNcyliPM2u35DKeJ4phv3aIztoZDDhfY6a + tYnwIUR3F8P6Jiu9nfWZX8sUu7JTWZ5FHmd6Zc4dZXtV+p7J+Kz1eayvvMYJ + zM8Cj7G/MmgnMsDKNe/gVx1e06/x4UtBpXmlmzYpsZcPdQO+fxTUzz7Gm5pw + vWFED22OD+r6PG/jLZ1bHOF2FfJ/nEF1Ph2eoBXiNJJRgV8jZjXkzYyrdttJ + dLe+1xHqUMFOJyrNId5OphtXC1rEtpG3p2plvcI7UGQf887zMQTE7iOZWjmo + Ibt+peH08d+ZN53PFo/fP+/OBpspMVO235XjxiRLJel5Ys8TDLcZkpS+tOrC + A0/2BBYUVG0b9n4C2X2jG3zkeMNbzgmj7+jQOzruzh10Z424E4bbkbF24kA7 + 54PGWZ8zzvyY8Z5R+yHv2u8uaKS6bWybBeCyTebw4j8AAAD//wMAn+Gc5AEW + AAA= + http_version: + recorded_at: Wed, 15 Jul 2015 16:03:15 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + body: + encoding: UTF-8 + string: | + + + + + 50.00 + 84d6xb + + + + John + Doe + + Spree + sale + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Wed, 15 Jul 2015 16:03:17 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"136e4d327a9d1b85893dcfd1a8feb4dc"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 1eefa7a981d218f057c4bf46cb22281d + X-Runtime: + - '0.725251' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + AwAQeu10mhIAAA== + http_version: + recorded_at: Wed, 15 Jul 2015 16:03:17 GMT +- request: + method: put + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/gygngy/submit_for_settlement + body: + encoding: UTF-8 + string: | + + + 50.00 + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 200 + message: OK + headers: + Date: + - Wed, 15 Jul 2015 16:03:17 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"eccc41399615061a49aca3790aaccd34"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 177a15115580eee579570fee8b929a6a + X-Runtime: + - '0.349216' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + http_version: + recorded_at: Wed, 15 Jul 2015 16:03:17 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/gygngy/refund + body: + encoding: UTF-8 + string: | + + + 50.00 + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 422 + message: Unprocessable Entity + headers: + Date: + - Wed, 15 Jul 2015 16:03:18 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Cache-Control: + - no-cache + X-Request-Id: + - d027d93e5da40ad4a6bf666673968b1a + X-Runtime: + - '0.143446' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAEaEplUAA6xSy26DMBC85yss34lJ1fQhOc6hUr+g/YAFttQSrOnaNCFf + XxMgkCrqqbedndn1zsh6f6wr8Y3sraOd3KxTKZByV1gqd/L97TV5knuz0tDY + BJkdJ4y+ceTRrITQ55bvywsQoWtwJ4EZOqlGKjCQhzzER4bObfnETeyMYyce + heZ5s00ftDrXSxJCYJu1Acd9vqszV0mTgUetLuzVTI3eQ4nmBYhcEIwfLRUC + xOJY0VIVVcIGYb3wGEKFxVqraXS+V10dPMIpGfXL/5LWDTDU/o+goHYtBbNN + 12kavQzo9uJePYDBTZQvudxRYFdVyGYx6Ps8L8RqzIbzT6CQ2MKcMtp2p6/n + 8HioD8f7u97+zA76WJRdSWWn1dDTavb1L0lHKzf+4A8AAAD//wMAzP0nGMAC + AAA= + http_version: + recorded_at: Wed, 15 Jul 2015 16:03:18 GMT +recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/with_completed_payment/can_be_voided.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/with_completed_payment/can_be_voided.yml new file mode 100644 index 00000000..f5973761 --- /dev/null +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/with_completed_payment/can_be_voided.yml @@ -0,0 +1,415 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + John + Doe + nikolas.shields@harvey.com + + + John + Doe + 10 Lovely Street + Northwest + Company + Herndon + Alabama + USA + 35005 + + fake-valid-nonce + + true + + + {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Wed, 15 Jul 2015 16:03:19 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"626d738e224b9ebc6e589d5e54578460"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 80ddce2c50db3689e28ffa3ef637437e + X-Runtime: + - '0.801615' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAEeEplUAA7RYWY/bNhB+z68w/K6V5GPXG2iVLloURdMu0CZpgbwElDRe + MZZIhaR85Nd3SF2UZa+PTR8WXs58Qw051ycF77Z5NlqDkJSzh7F/441HwGKe + UPb8MP708VdnMX4XvgniUiqegwjfjEYBTcL54nZ6f+vdBi4utAx1cUqYcnD9 + PWLz3fdv9+puk2+2s0ng2lqNXlIhlcNIDuHvPGWBawm0PiPN6hcOgdsttTLm + eUHYbsRo9jBWooSxa+SQE5qFjK444m9kSiFL5E8pEWvY3aBR4FYIjS1SzmCw + w5JsB7INRJKqITYWQBQkDlEjtSvgYZzgUtEcxuHE8+eOd+f484/+7Vtv+ta/ + /xy4nYGxL4vkMvvOoHq+iYizNKdsXUqocmIiEllvSoQgu7HW9vWVBGURzTKM + tUOSRICUjbyKcv6tiW8ta9LA6aWALe2wJ2Jco16KdPPQKt7hz9UvPq8WdBCp + BIBqD+F7oz/4GrLd6INRBO4eoLOErQKW6GutVU9cqHQDEo0GOsttHpOMql34 + GwiWcDxdK+lAAp6xqsLHjEQkJ4FbrztAwaUimYPlBuF07nnzwLVF9hWUTImd + ETskK1IyCT990DcxlL9kNUWrx0Nm02NmrMTA0jhczLw9u0YzNDTx+8SwahIM + ACatHPHl6NHASbfLfphfV1D1Lq8sK7OHe6QosFhYOPP8yWKhMW0kA11Rjn5c + +A+V+oTt2kakPEuwSPSx97tJk+e6T1KS4eWtGN8wk+qNrINV18eXDpWyJCyG + flRtRWv0+ss9v/g7pC4KpXPeJOtA2uATiKjqDl0tO+WSlFnjd8R5BoSNQ315 + GmqUHbgUGBgHK63MtP/WpvuaxgS2BRXGHyfnTKWhP9Glvyc8gN4BEXh7E68H + N9IeGqtgz/clySTUVpYnKZBMpZgq0LltyRoYzckzOKXIwlSpQr51XSIlKHkT + CUKZbnTPeMANMUPPLcguB6a+5KBSnnzJ+DN315ilNwV7fgdsTQVnGvAgCUsi + vsWO3+7fPhHTSddDRNiqc60nbaCmgc9Cf7Hw624+a3XoiuCZld2NoAUIKAjm + 0RNHXf1/o5NlJGNBC33J/enWVZDiK2Dhah1tJpiZ1arRlYx+K03Xikyy4pEp + Dk8RzpLpbB7fwSzy/bvJlCQTWC7nUXJHIs/HP2wRx0zbvX9A01kDy7kjk9WR + ZGn1loVAN6pSOjTvB6BObEYmUaUMKz0kekQagY2J12ssGFng/lCNpD+xjAdC + 24SspQNCcNHHHGp4Ld6aecPHvQzY36o/5w/v9iLG3rAuI0R8hdgUNzZFydnR + w7Q0l8SmGeueKDGRwWLAlso2LQSP0Zv9e0Mq43m6GA5rT+ygkMGEjwVq1jrC + xxD2LujW1+30Nv3aZ34dU7Rl57I8gzzN9KqcO8n26vS9kvEZ6+tYX3WMM5if + AZ5if1XQzmSA9dW8gl9ZvKZf48OXglrzQjdtU+IgH7IDfngUNM8+xZvacF0w + ooc2pwd1489lvMU6xQluVyP/xxnU5NPxCVojziMZNfglYtZALmZczbWdRXeb + c52gDjXsfKLSOnE5mW6vmidlbBp551Un6xXekSK7jJYvjrzz/BgCYvYRVK4c + 1JD9e03C6ed/Z95776/3fz/d788GkykxlabfVeNGJ0st6d3EgSdobjMkKX1p + 3YUHN9kTGFBQt204+Alk/41u8JHjgrecM0bfyaF3ctxdO+iuGnFnDLcTY+3M + gXbNB42rPmdc+THjNaP2h7xrv7qgkep2sW0XgMsumcM3/wEAAP//AwAc/wAM + /xUAAA== + http_version: + recorded_at: Wed, 15 Jul 2015 16:03:19 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + body: + encoding: UTF-8 + string: | + + + + + 50.00 + kvbw26 + + + + John + Doe + + Spree + sale + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Wed, 15 Jul 2015 16:03:20 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"7ba2318b5704291a26edc226227688eb"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 47617052aec5ff34b5bc428b8c6e2e11 + X-Runtime: + - '0.692526' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + 0s2YEgAA + http_version: + recorded_at: Wed, 15 Jul 2015 16:03:20 GMT +- request: + method: put + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/bknfpp/submit_for_settlement + body: + encoding: UTF-8 + string: | + + + 50.00 + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 200 + message: OK + headers: + Date: + - Wed, 15 Jul 2015 16:03:21 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"62884edc2f4bf4815d157dd411fbdd62"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 9f5bbdb4b6ee271478180333cd1dd668 + X-Runtime: + - '0.251309' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + http_version: + recorded_at: Wed, 15 Jul 2015 16:03:21 GMT +- request: + method: put + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/bknfpp/void + body: + encoding: UTF-8 + string: '' + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 200 + message: OK + headers: + Date: + - Wed, 15 Jul 2015 16:03:22 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"a624e5bfb3f9046a3a5d9b0c8fb2026d"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - c4ae1c853e49cd7778cc9da8dc404057 + X-Runtime: + - '0.365905' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + dWOWFAAA + http_version: + recorded_at: Wed, 15 Jul 2015 16:03:22 GMT +recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/fails_capture_with_settlement_declined.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/fails_capture_with_settlement_declined.yml new file mode 100644 index 00000000..2233634b --- /dev/null +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/fails_capture_with_settlement_declined.yml @@ -0,0 +1,301 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + John + Doe + brionna@casper.ca + + + John + Doe + 10 Lovely Street + Northwest + Company + Herndon + Alabama + USA + 35005 + + fake-paypal-future-nonce + + true + + + {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Wed, 15 Jul 2015 16:03:25 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"31ac33060b74cf1f2b4e5a0064258e22"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 69c84acb308eacf4186c57d0e609eacd + X-Runtime: + - '0.256912' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAE2EplUAA6RTu3LbMBDs/RUc9iREKbIVDUW5yKRI7TRpPEfgJCHGK8BR + Iv31AUm9EqbJuLzdvecC5bbVKjmiD9KaTVrkszRBw62QZr9Jv798zVbptnoo + eRPIavTVQ5KUUlTFoijmi9VjyWLQY5HjBzCUxfi9Nsvu/ddnejrpU/tpXrJ7 + tlfvpA+UGdBYfbMHU7I7oOcVXKIvFkt2C3uSW+3AdImRapOSbzBlA44apKpq + Hzcx8MwhOPQ5h5KNRC9xB2twkriDdoKdsA6SplruEQhFBpRQ53CTihiS1JhW + 81mxzGZPWbF8KR7Xs8V6vvxRslvCkN848X/5t4Sx/2BEtpOoRLiOJCRlHLwI + 56LgPXTniR10DlQGnNvG0J+KXjCRjGCEyb6hqVZ0FG/RwzG6cONNf4LBXFh8 + xha0U5hHb+7uPSgF7qBRl3VraxWCSav+piU7k1ex1LDHrPGqOhC5sGYMQkAK + ee1BGvKI+3iNE3R9Jxbn1mjoVSMdrHhVdm/ZuEvuzH6L5ii9Nb1kE8CI2rbx + vV47XHp+0NKhxgdtHWqEpg7cS0fxAf/DyKhgU6P+xsIAghAe4+EmZeLw15/8 + GwAA//8DAB1ruEz8AwAA + http_version: + recorded_at: Wed, 15 Jul 2015 16:03:25 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + body: + encoding: UTF-8 + string: | + + + + + 4001.00 + 8tvdk2 + + + + jane.doe@example.com + + + Spree + sale + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Wed, 15 Jul 2015 16:03:26 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"1c4472f337dc23350bc41fccf6a38e55"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - bb63dd64b314d9a855fd3ca777fa87b5 + X-Runtime: + - '0.323021' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAE6EplUAA+xYS3PbNhC+51d4dIdJSbYlZ2jmMXYz7uTQqeNDe/FAxEpC + DAIMAMpSf30XBEmRIhi7Mz300Ju4+wHYF3Y/KPmwz8XZDrThSt5Mpufx5Axk + phiXm5vJ47dfyHLyIX2XWE2loZlFVPru7CzhLM2+739cHZIIfzqJsdSWJqWl + 3SrN/wKWRLXIae2hgNRQAUlU/XSyrNQazzoQbhTBIyF9fLhNoqHYgWmuSmnT + izhGG+Mkqr+dKgedbam0hGaZExK0yBQa8KyQyi1RmoHGjzPJxc3E6hImkbdJ + A7XACLVnzs6bCcNPy3OYpLN4ekniBZlefptevY/n72dXf6K17YJqfVmwf7b+ + uKCOibEKrXYfPszT+XQ6my+vmkCjdM21sUTSHNJf1VYmUUfgEYI237cKw3D8 + 9OpM5QWVh1PvUQM55SJdacyzpB8zagrQ5xlNIq/woBdYGW4hsLzYKhmSr+l+ + EOqo62uy4kJgzbV+hzZpvQwoWxcDunF3jcUywepgTIMxoXjsLUjm8jMKESqj + gtvQ9ho2GMhQnBTeDVFVd9BeLFV9GHfHq91qQkWxpbM3oeavoWSJ2eDZMFOd + 5KBP61Ky0N1pNaaufao1PfSUGMhOJwltYsBaATngXV1Rm22DmC0viv+L5T9a + LN3s1P2MrDkIZjyA7gwBrZUmGKNCSQNB1ypcx/U+Or3HEfBTQLNFP2vhXX6K + qdzY7YYrh0IH3WA7f6EH1HwHX+U4IcwwsUmhVYanYRyamUkreDAYR3D/xGns + huGYdmSlxUJNPxWo2bkxPYaoIsgYd1ZhjIewgZU7xTOXhzXmF1dgiaxAD30p + 3VDGU/wUHkFZuid+yAdVsIe8aIbsSikBVE7SNRXGUYwW0Ax19IJkVDcT1Kpn + kOnS7tjzDOHVl9eseOgKVg3jInQlcE/ijAi2g4Jrn9NcSbtNcYqeigbIA1Dd + B1aS+rR6YhLXRmy4WziLtkpUkQ23BJ7TDZBSi3RrbWHeRxE12HbN+UpTLt1V + qGv4HHthVNCD68ZPOWCRsiehNioq5bNUL/K8kJsPIHdcK+kwN4ZKtlJ7pCrt + EXUL01BQ5C+PfqGrOS/w6i1QYbdoORwRHZkHMVhxe9T7z1pVaswbFt6mFI5N + dVCnmrbJO2rIqThCO7LaaHrQSnQQjaAOozEltjkcU/L5iOlJ+21TrYnTUplB + 99ShsomZYmVWUdZO2FqZB5WS/yihvkMoxixwbLaD6+QuJ8hcEcOeRy5Nq6/Z + Wf/S1PyebDmWoD70Jnw7HysE4EZ1YtxNQ+6Lirx4Ix9u8e0OP31YVIjxt4GP + kUGOyXIqN4Ct3j8MKllrY4eSGIXdCVJacLRlKPeeRqeutpI6PL7PCRqmOOXK + ZJoXoxSoo2+7UkXACLJxrhhBlkFcIANZPkGiWdoGsWjyyTmu2RPs6wH2xrip + CjWoA7+LarrUSNsZextglxja1t8UuZF7FaJfI7Xb6n2/xyefBJE++Fw3n55e + 6p2bUWuAseniTlYvxCd0oMVIrEptPENlYPFVZJou1FOF09Oht+Hj+5jBW/iN + cNg7p7EF67AZjotjsSIpC21YZlmAvWJSRnx3nhelhVB11OODcIkkq6x+Vn8A + oLyg4ql+lyfRGK5PYTq+9plOl8WMgl7fq+I9r+3VkiO7xfoieMlc9QGavlZD + slP5+SrtQBj2b//Irn5/hD02QQFuBlfRadXtAh8vlv726Q9CYQkzehWz6cVq + tpxfX18ssut4Bp3ANiOjzzZR/PDp6x1hl9N4uojj2eJyHl/MXRc9xf1b7MGH + 5O3kASd9uXEG3N59fvxCltPpfL6YxfM5nVU0wCuPcQQfqBA36rxGQh2qirKP + 6N3vT/e35Hq5jNliCRdXMzqbL5ZNJnrnaTL4Q2Yg7qJP/pw5FTa3WggUYyXa + +hlRD727r/df7j9/vcP+PQZpiGBhq7IMuTr6ij8Zh+N9MgB8tVslUXMdesM1 + ffc3AAAA//8DALcjuQ2HFAAA + http_version: + recorded_at: Wed, 15 Jul 2015 16:03:26 GMT +- request: + method: put + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/cjxq6y/submit_for_settlement + body: + encoding: UTF-8 + string: | + + + 4001.00 + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 422 + message: Unprocessable Entity + headers: + Date: + - Wed, 15 Jul 2015 16:03:27 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Cache-Control: + - no-cache + X-Request-Id: + - c86df1b650fc484690d9763558f1470c + X-Runtime: + - '0.215953' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + http_version: + recorded_at: Wed, 15 Jul 2015 16:03:27 GMT +recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Gateway_Braintree/PayPal/should_have_the_correct_attributes.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/should_have_the_correct_attributes.yml similarity index 70% rename from spec/cassettes/Spree_Gateway_Braintree/PayPal/should_have_the_correct_attributes.yml rename to spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/should_have_the_correct_attributes.yml index 5ea7ff3a..9485233d 100644 --- a/spec/cassettes/Spree_Gateway_Braintree/PayPal/should_have_the_correct_attributes.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/should_have_the_correct_attributes.yml @@ -10,7 +10,7 @@ http_interactions: John Doe - yvonne@kertzmann.us + friedrich.oreilly@jacobi.biz John @@ -47,7 +47,7 @@ http_interactions: message: Created headers: Date: - - Tue, 14 Jul 2015 22:50:26 GMT + - Wed, 15 Jul 2015 16:03:23 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -68,29 +68,29 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"39adfbbcbb157070cd7c405d5ef433f5"' + - '"8a77fbec21e9d6a4889a46b42e176596"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 58b7bca99723aa65889231dee940f6d0 + - 48bd267ac68a882949ac5378dd18b44a X-Runtime: - - '0.261291' + - '0.221912' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIADKSpVUAA6RTS3ObMBC+51cw3EE2Y5LYI+McOj30nF56ySxojZVIKyIJ - 2/jXV4BfLb10cvwe+9B+wDdHraI9WicNreN5OosjpMoISfU6/vn6PXmON8UD - r1rnjUZbPEQRl6JYzPJ8mT8vOQug54JW7YB8EvCppLw7fS7900EfjouMs3u1 - d2+ldT4h0Fj8MDvi7I7odQUX9M0gZzfYi5XRDVAXkVTr2NsWYzbwqEGqotsb - Inz5QOtPGojS1nE2Sr2p2RnCSekWjhPugKWTfuqtLIJHkYCPfNfgOhYBeqkx - LrLZPE9mT8l88Zplq3y2yh5/cXYrGOrbRvxf/a1gnD9EkWwlKuGuKwnpkwqs - cOemYC10540b6BpQCVSVacn/6egNE8tIBtqbD6Tiscr32nI2oos23vQdCFNh - 8AWPoBuFaUjn7t6DU+AWWnV5bmmMQqC46G/K2Vm8mqWGGpPWqmLnfeNWjIFz - 6F1aWpDkLWIdrnGArp/Ewt4ayb9p9Dsj3pSpDRvfkjZUb5D20hrqLWsHJEpz - DF/sdcJl5hcjHXp8Mdahh2tLV1nZ+PAz/iPI4GDToP7m3ECCEBbD4SZtwvLX - f/k3AAAA//8DAI6CySr+AwAA + H4sIAEuEplUAA6RTy3KbMBTd5ysY9iDbievEI+MsOl10nW66yVykCyjVq5KI + wV9fAX6ldNPJ8jzuQ/cA3XdKJu/ovDB6ly7zRZqgZoYLXe/SHy/fssd0X9xR + 1vpgFLriLkmo4MV68bTaPD4sKYlg4KLGGtAhi/hY6nV//P0UNgd16B5WlNyq + g7sSzodMg8Liu2k0JTfEoEs4o68GKbnCQWRGWdB9ooXcpcG1mJKRRwVCFpUT + yJ1gTW4cCin75zdgphR5KY6UTJ7BbRujcdajgm7GHbD0Isy9zCEE5BmEJPQW + dymPMAiFabFaLNfZYpMt1y/LL9vF/XZ1/5OSa8FY31r+f/XXgmn+mElWCZTc + X1biImQMHPenpuAc9KeNLfQWZAaMmVaHj47BMLNMZKSD+YW6qK06KkfJhM7a + dNM30Jhzg8/YgbIS8xjTzb1HJ8cKWnl+bmmMRNBpMdyUkpN4MQsFNWatk0UT + gvVbQsB7DD4vHQgdHGIdr3GAfphE4t4KdXhVGBrDX6WpDZnekltd71G/C2f0 + YNl50Lw0Xfx0LxPOMz8Z6djjk7GOPXxbeuaEDfGv/EeQ0UHmQf3N+ZEEzh3G + w83axOUvP/UfAAAA//8DAAFlxDgHBAAA http_version: - recorded_at: Tue, 14 Jul 2015 22:50:26 GMT + recorded_at: Wed, 15 Jul 2015 16:03:23 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/succeeds_authorization_and_capture.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/succeeds_authorization_and_capture.yml new file mode 100644 index 00000000..4bc7b109 --- /dev/null +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/succeeds_authorization_and_capture.yml @@ -0,0 +1,301 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + John + Doe + madilyn_predovic@quigley.com + + + John + Doe + 10 Lovely Street + Northwest + Company + Herndon + Alabama + USA + 35005 + + fake-paypal-future-nonce + + true + + + {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Wed, 15 Jul 2015 16:03:24 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"4e77e7542ff6fb462700c5d7af0a8e97"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 9c2fbfa54deed9b4c9164a859213b63c + X-Runtime: + - '0.262918' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAEyEplUAA6RTO3PbMAze8yt02mXKTuzUPlrO0OvQOV26+CARlpmSIENS + tpVfX0ryI4265DJ+D4AgPpJvTlolB3ReGlqn00meJkiVEZLqdfrr+Uf2Ld0U + d7xqfDAaXXGXJFyK4iFfLJbzfMlZBB0XtWoPFLKI30qat2+vy/B41MfTw4yz + 92rn3knnQ0agsfhp9sTZO6LTFVzQd4Oc3WAnVkZboDYhqdZpcA2mrOdRg1SF + BiFVS1vrUJiDrJ5eG1krbCexjLPB07nt3hCOeuzgNOKOWHoZxt7KIQQUGYQk + tBbXqYgwSI1pMcun8yx/zKbz5+lild+vZve/ObsV9PWNFZ+rvxUM5/eZZDuJ + SvjrSEKGrAIn/LkpOAfteWILrQWVQVWZhsK/js4wsgxkpIP5g1QIN6v1grMB + XbRhpy9AOBEGn/AE2ir8sO/eKXAHjbpctzRGIVBadDvl7CxezVJDjVnjVLEP + wfoVY+A9Bj8pHUgKDrGO2zhCnyyLc2uksNUY9kZslakNG+4ysVRvkA7SGeos + aw8kSnOKT/d6wuXML0ba9/hirH0P35S+ctKG+Cv/E2R0sHFQHznfkyCEw7i4 + UZs4/PVT/wUAAP//AwCgzbX0BwQAAA== + http_version: + recorded_at: Wed, 15 Jul 2015 16:03:24 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + body: + encoding: UTF-8 + string: | + + + + + 50.00 + dr2gm6 + + + + jane.doe@example.com + + + Spree + sale + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Wed, 15 Jul 2015 16:03:24 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"61ccf2af2bafa4dfffcfaf4d175633ea"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 50005c567de245694d773d512cf49b91 + X-Runtime: + - '0.314515' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + MFyjd38DAAD//wMAZG0IJo4UAAA= + http_version: + recorded_at: Wed, 15 Jul 2015 16:03:24 GMT +- request: + method: put + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/8n2wp4/submit_for_settlement + body: + encoding: UTF-8 + string: | + + + 50.00 + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 200 + message: OK + headers: + Date: + - Wed, 15 Jul 2015 16:03:25 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"dac596d6d04c98ade6f2ea3b41151633"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 3c7ca1b99ecd4bcc9fd1d8bdbc2b267b + X-Runtime: + - '0.328642' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + AE8ZDmTUFgAA + http_version: + recorded_at: Wed, 15 Jul 2015 16:03:25 GMT +recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Gateway_Braintree/Previously_consumed_nonce/should_raise_exception.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/Previously_consumed_nonce/should_raise_exception.yml similarity index 68% rename from spec/cassettes/Spree_Gateway_Braintree/Previously_consumed_nonce/should_raise_exception.yml rename to spec/cassettes/Solidus_Gateway_BraintreeGateway/Previously_consumed_nonce/should_raise_exception.yml index 2593aff8..3d8ed535 100644 --- a/spec/cassettes/Spree_Gateway_Braintree/Previously_consumed_nonce/should_raise_exception.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/Previously_consumed_nonce/should_raise_exception.yml @@ -10,7 +10,7 @@ http_interactions: John Doe - cleve@rosenbaumgrady.co.uk + lily.schmeler@daredach.name John @@ -47,7 +47,7 @@ http_interactions: message: Unprocessable Entity headers: Date: - - Tue, 14 Jul 2015 22:50:25 GMT + - Wed, 15 Jul 2015 16:03:22 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -70,27 +70,27 @@ http_interactions: Cache-Control: - no-cache X-Request-Id: - - d8ec789536262f5227a5ffa240ce76f4 + - a383a780b90c84f294ab41276a273480 X-Runtime: - - '0.042763' + - '0.113904' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIADGSpVUAA9xVyW7bMBC9+ysI3WnZMIK0gMwkSFEURdFLmnMwFsc2ES7C - kHKjvy8ly7LkLUbbU04S35vlcTQzyu7ejGYbJK+cnSfT8SRhaHMnlV3Nk+df - X/mn5E6MMigURyJHnNAXznoUI8ayBvL1a3dgoSpwngARVEnaUnnpgzNI2+NF - 20gWUBm0gRsMayd38GmvPbvj+0id2kkUn2fTyW2WNu9DGkIgtSgDtlF9ZRZO - J6LV8LLV8GKdzTFLO+uDKAa9hxWKR7DWBVZ6ZMBOhWDGUUy1Bsvq4zhLd679 - e6QHF2kB31UoPV2iLCeUKvAc6P+UbXo7m36cskVkobSOrc1BytjI/rgMZ3qy - DnbGN9bnsOoR6jV8X0bsbQLjz43FUpEP3IJB8d2tbZb2gJ2Nhh3yxcXa7o/d - bBlQWuQaN3hPzqNdQGlWBLIa525cvkY9jcXlprlUqStkXiW1MfKBEEOXZzph - P9wGdcWeGiJLDwwGn+wtoJUoO/Kno7D+jT66HXF9x9yZAmwlHrfPuse3wEC+ - y0GrUIlvSFa6eM8O6ZsRruLyFA8aFmAgS9vzMF1pA1W8niQOuljDTDw/PdRp - j4m+Y+F8AN3QYnYzmdzE0e9B73fn0TrlzUCJJbxijGF9abDFDrdKa7kP5IoQ - LzYsZPx1qGW1bZ5AZQzSR3r6jpwziRuVI/dRbWS4kswqPU/qKIPBWxKUMmqi - PM5/OGN3xRTuR+/vF8/oX1ZVXIQnfqN/AAAA//8DAF2lzQ+DBwAA + H4sIAEqEplUAA9xVS4+bMBC+51dY3B0SRattJeLtaquqqqpetnteTfAkWPUD + 2SZd/n0HQgjk1ajtqSfw983j8zAzZA9vRrMt+qCcXSbz6SxhaHMnld0sk5fv + n/i75EFMMigVR++d5x5D6WxAMWEsa6HQvPYHFusSlwl4D3WSdlRehegM+t3x + qi2RJdQGbeQGY+HkHj7vdWD3/BBpUjuJ4v1iPrvP0vZ9TEOMXq2qiF3UUJuV + 04noNLzuNLxaZ3PM0t76KIrBEGCD4gmsdZFVARmwcyGYcZ5SFWBZc5xm6d51 + eI/06CIdEPoKpedLlOUepYo8B/9vyja/X8z/n7IRslJaU2tzkJIaOZyW4UJP + NsEu+FJ9jqtO0KDhhzKotz2YcGks1sqHyC0YFF9cYbN0AOxtNOyRj45qezj2 + s2VAaaGVrqchLwxq9B8kkEbIi2ljSYJak+tdc61UN+i8SWtrFKJHjH2e+Yx9 + dVvUNXtuiSw9Mhh9s7eIVqLsyW/Ox+InBnI74YaOuTMl2Fo87Z5Nk++AkXyX + g1axFp/RW+nonj0yNPO4oe0pHjWswECWdudxuspGX/NmlDjosoCFeHl+bNKe + EkPH0oUIuqXF4m42u6PZH0C/b8+TfcrbiRJr+IEUw4bKYIcdr5XO8hDIlZEu + Ni4k/TvUut41T/QVBRkiA30nzpnErcqRB1JLDFeSWaWXSRNlNHlrD5UkTT6n + BRAv2N0whofZ+/PNM/mbXUWb8Mx/9BcAAAD//wMAOKDE9IQHAAA= http_version: - recorded_at: Tue, 14 Jul 2015 22:50:25 GMT + recorded_at: Wed, 15 Jul 2015 16:03:22 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/failure/fails.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/failure/fails.yml new file mode 100644 index 00000000..738cca4d --- /dev/null +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/failure/fails.yml @@ -0,0 +1,303 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + John + Doe + efrain.stark@nolan.info + + + John + Doe + 10 Lovely Street + Northwest + Company + Herndon + Alabama + USA + 35005 + + fake-paypal-future-nonce + + true + + + {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Wed, 15 Jul 2015 16:03:32 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"8dd5cab405431be9e436140cc7a232ac"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - f04d03f6b720da337f7ff8735f8d0de1 + X-Runtime: + - '0.560592' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAFSEplUAA6RTS3ObMBC+51cw3EG2qZPYI+McOj30nF56ySxosdVIK1US + scmvrwC/Unrp5Pg99qH9gG+PWiVv6Lw0tEnn+SxNkGojJO026Y/nb9ljui3v + eN36YDS68i5JuBRlsXosVsXinrMIei5q9R4oZBG/V7Ts3n+vwsNBH45fFpzd + qr27kc6HjEBj+d3sibMbotcVnNFXg5xdYS/WRlugLiGpNmlwLaZs4FGDVCU2 + DiTlPoB7fSKjgHJJjeFslHuj3RvCSXkDxwl3wMrLMPXWDiGgyCAkobO4SUWE + QWpMy8VsvsxmD9l8+Ty/X8+KdbH4ydm1YKhvrfi/+mvBOH+II2skKuEvKwkZ + shqc8Kem4Bx0p40tdBZUBnVtWgofHb1hYhnJSAfzilSuwtIWFWcjOmvjTX8B + YS4MPuERtFWYx4Ru7j04BTbQqvNzK2MUAqVlf1POTuLFLDXsMGudKvchWL9m + DLzH4POqzzY4xF28xgG6fhKLe2uk8KIx7I14UWZn2PiW3NJui/QmnaHesvFA + ojLH+NVeJpxnfjLSoccnYx16+LbytZM2xB/yH0FGB5sG9TfnBxKEcBgPN2kT + l7/8z38AAAD//wMAM5q/OAIEAAA= + http_version: + recorded_at: Wed, 15 Jul 2015 16:03:32 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + body: + encoding: UTF-8 + string: | + + + + 2 + luella@binshudson.biz + jane.doe@example.com + + + R032156106-QZKEF46U + + + 4001.00 + 9t5p3b + Spree + sale + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Wed, 15 Jul 2015 16:03:33 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"606a4c7154bf0773d82c85b0bdb27906"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 9f39d757ce33bf5f595e06de6aebf03e + X-Runtime: + - '0.306843' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAFWEplUAA+xYS3PbNhC+51d4dIdJPS1laOYxdjJufWiT+NBcPBC5FFGT + AAuAspRf3wVBUqQIxu5MDz30Ju5+APaF3Q8K3h3y7GIPUjHBryfTS39yATwS + MeO768nDt09kPXkXvgm0pFzRSCMqfHNxEbA4vPrx4+pYBB7+NBKlqS5VSEud + Csl+QBx4tcho9bGAUNEMAq/6aWRRKSWedSRMCYJHQvjw9SbwhmIDprkouQ4X + vo82+oFXfxtVDjJKKdeERpERErRIFRLwLJfKLBEyBmk+vvjz2XS5mvor8vv3 + X28/LVYPgddqKyslUA0xofrCWH49ifFTsxwm4cyfLol/RabLb9PVW3/+dj7/ + jva3C6r1ZRH/s/WnBXWUlBboh/mwgZ9v1vPNfLZqQo/ShEmlCac5hL+IlAde + R2ARGW2+bwQG5vRp1ZHIC8qPF5xl1xMtS5h4tQZyyrIQEkkZv8SMyqf3XGSU + XzKeiMCzagt9hq1iGhybFKngLnlCD+dSUwAnj4MtyzKsxdZ71yatrw5l66hD + N+600lg+WDVxLEEpV1QOGnhssjQKyUREM6Zd20vY4UVyxUlghLOq6p32YgnL + 47g7Vm1WE5oVKZ29CjV/CcVLzAaLhpnqJAd9Skoek2GGThpV3wAqJT32lBjI + TodxbaJA6wxywDu8pTpKnZiUFcX/xfIfLZZuduquRhIGWawsgO4VASmFJBij + QnAFTtcqXMf1Pjq8w9HwU0CzRT9r7l1+iqnc2O+HK4dCA91hU3+mR9T8CbbK + cU6oYWKDQooIT8M4NLOUVnBnME7g/olT3wzJMe3ISo2FGn4oULM343sMUUUw + jpmxCmM8hA2s3AsWmTwkmF9cgSWyBTn0pTTDGk+x83cEpemB2OHvVMEB8qIZ + tVshMqB8EiY0U4Z6tIBmtKMXJKKymaNaPAEPN3pZzLcIr76sZstcV7BqGAvX + lcA9iTHC2Q4KJm1Oc8F1GuIUPRcNkEegsg+sJPVp9cQkpo1od7cwFqUiqyLr + bgkspzsgpczCVOtCvfU8qrDtqsutmf3mKtQ1fIm90Cvo0XTjxxywSOPHTOyE + V/InLp75ZcF374DvmRTcYK4V5fFWHJCwtEfULUxCQZHFPNiFpuaswKpToJlO + 0XI4IToyC4phy/RJbz9rVSkxb1h4uzIznKqDOte0Td5QRkazE7Qjq42mRymy + DqIR1GFUqsQ2h2OKP50wPWm/bYqEGC3lEXRPHSqbmIm4jCoq2wlbK7OgkrO/ + SqjvEIoxCwyb7eA6mcsJPBdExU8jl6bV1+ysf2lq3k9ShiUoj70J387HCgG4 + UZ0Yc9OQAaMiL17Jilt8u8NPHxwVYvzNYGOkkGPGOeU7wFZvHwyVrLWxQ0mU + wO4EIS0Y2jKUW0+9c1dbSR0e2+eQPTvpS7lVkWTFKAXq6NuuVBEwUuDIFTFB + lkFMIB1ZPkMaIq+dWDT57BzT7An2dQd7i5mqCtWpA7uLaLrUSNsZextglxja + 1t8UuZF5LaJfI7Xb6m2/x6cghyz8anPdfFp6KfdmRiUAY9PFnCyeiU3oQIuR + 2JZSWYYag8ZXkWq6UE/lTk+H3rqP72MGb+RXwuFgnMYWLN1mGC6OxYqkzLVh + GUUO9opJGfHdeF6UGlzVUY8PwjiSrLL6Wf0xgPKCZo/1ez3wxnB9CtPxtc90 + uixmFPTyXhXveWmvlhzpFOuL4CUz1QfEPJSHZKfy80XagTDs3/aRXf1+Dwds + ghmYGVxFp1W3C2y84vC3D3+QeL26Wi83qxn4m000TegUYLpMaCewzcjos00U + f/1wf0uWy/V6FidX0XoxSxZXM+yi57h/iz3YkLyePOCkL3fGgJvbjw+fiZ9M + 10t/MdusYVbRAKs8xRFsoFzcqPMacXWoKso2ordfHu9uCJ1S8NezqT9f0Hg2 + mzeZ6J0nyeBvmYG4iz77i+Zc2NzqLEMxVqKunxH10Lu9v/t89/H+Fvv3GKQh + goWuytLl6ugr/mwcjvdJB/DFbhV4zXXoDdfwzd8AAAD//wMAwjdEap8UAAA= + http_version: + recorded_at: Wed, 15 Jul 2015 16:03:33 GMT +- request: + method: put + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/7zz7yp/submit_for_settlement + body: + encoding: UTF-8 + string: | + + + 4001.00 + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 422 + message: Unprocessable Entity + headers: + Date: + - Wed, 15 Jul 2015 16:03:33 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Cache-Control: + - no-cache + X-Request-Id: + - 4893d500900b7d0b1fca66c60ab61d40 + X-Runtime: + - '0.230048' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + /wMAiLIiHeoaAAA= + http_version: + recorded_at: Wed, 15 Jul 2015 16:03:33 GMT +recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/success/can_be_voided.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/success/can_be_voided.yml new file mode 100644 index 00000000..bb2dd856 --- /dev/null +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/success/can_be_voided.yml @@ -0,0 +1,302 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + John + Doe + lillie_boyer@eichmann.ca + + + John + Doe + 10 Lovely Street + Northwest + Company + Herndon + Alabama + USA + 35005 + + fake-paypal-future-nonce + + true + + + {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Wed, 15 Jul 2015 16:03:30 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"49e29202070b95d171fa5b887b023acc"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 2f601665d5ecd140b0133a5116d8b88b + X-Runtime: + - '0.256347' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAFKEplUAA6RTS3ObMBC+51cw3EHYKbHjwTiHTg89p5dePIu0NmqkFZWE + bfLrK8CvlF46OX6PfWg/KDYnraIDWicNreNZmsUREjdC0n4d/3j9lizjTflQ + 8NZ5o9GWD1FUSFHOl3m2fMqfCxZAzwWN10A+Cfi9orx7//3sF0d9PH2ZF+xe + 7d07aZ1PCDSW301NBbsjel3BBX01WLAb7EVudAPURSTVOva2xZgNPGqQqlRS + KYnbynRoX1DyWgNRyqFgo947m9oQTup3cJpwR6yc9FMvtwgeRQI+8l2D61gE + 6KXGuJxnszzJFsksf509rbLH1WP2s2C3gqG+bcT/1d8KxvlDHslOohLuupKQ + PuFghTs3BWuhO2/cQNeASoBz05L/6OgNE8tIBtqbN6RycXjL57ZgI7po401/ + AWEqDL7gCXSjMA0R3d17cArcQasuz62MUQgUl/1NC3YWr2apYY9Ja1VZe9+4 + FWPgHHqXVhYkeYu4D9c4QtdPYmFvjeS3Gn1txFaZvWHjW9KG9hukg7SGesva + AYnKnMJne51wmfnJSIcen4x16OHaynErGx/+yH8EGRxsGtTfnBtIEMJiONyk + TVj++kP/AQAA//8DAC5g1F0DBAAA + http_version: + recorded_at: Wed, 15 Jul 2015 16:03:30 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + body: + encoding: UTF-8 + string: | + + + + 2 + keshaun_batz@stantonveum.name + jane.doe@example.com + + + R617240243-DR6GQU86 + + + 50.00 + 7vk52r + Spree + sale + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Wed, 15 Jul 2015 16:03:31 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"555cbc6e282101d61478e366bddf4631"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 693c19e4b76ea4acb4d4d56379c2f424 + X-Runtime: + - '0.461538' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + http_version: + recorded_at: Wed, 15 Jul 2015 16:03:31 GMT +- request: + method: put + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/fvrv2d/submit_for_settlement + body: + encoding: UTF-8 + string: | + + + 50.00 + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 200 + message: OK + headers: + Date: + - Wed, 15 Jul 2015 16:03:31 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"fae506a6e7cc40ffea4f22eb11cddc89"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 1a815f6bf0d8562960cbf22256ad188e + X-Runtime: + - '0.260482' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAFOEplUAA+xYS3PbNhC+51d4dIdFyZasZGQmTu1m3MkhdeJDe/GAxEpE + TQIsAMpWf30XAEmRIhh7pj1kpr2Rux8e+8DuB6zfPxf5yQ6U5lJcTman0eQE + RCoZF9vLyf23n8lq8j5+szaKCk1Tg6j4zcnJmrN4s1O7OVtP8dNKtKGm0rEG + Y3IcvJ7WAqsz+xJiTXNYT92nlaWVUrjSnnAtCS4I8f3X6/V0KLZgWshKmHgR + nUbRelr/WUUBKs2oMISmqRUS3I0uFeBKIZUdIhUDZX/ulrOL+Xk0Pz8j13fL + T7/er5braat1e1RADTBCzYnd9+WE4a/hBUzieTRbkOiCzBbfZst30dm7s+h3 + 3H07wI2vSvb68TMcfxhQ+0gbiXbYH+/0+WoRrZaLt43bUbrhShsiaAHxLzIT + 62lH4BE5bf6vJTrm8OvVqSxKKvYngueXE6MqmExrDRSU53HO85zDQyL3oD4A + T7OCCnGa0vXU6z32CRLNDQRmKTMpQvINfT6W2vgfTF4ndmWxbc0PTdIaG1C2 + lgZ041Zrg/mDacOYAq1Dbnk2IJgN0ygklynNuQlNr2CLpyjkJ4lHJndJH9wv + 5rDaj5vj1XY0oXmZ0fmrUGcvoUSF0eDpMFKd4KBNm0owMozQQaPrI0CVovue + Eh3ZKS+hSVxRgQLwECfUpFkQk/Gy/D9ZftBk6UanLmtkwyFn2gPoThNQSiqC + Piql0BA0zeE6pvfR8S32hu8Cmin6UQvP8l2MM2O3G44cCi10i1X9ie5R8wf4 + LMdGoYeBXZdKprga+oFWJpOK/0UdPOiMA7i/4iyyXXJMOzLSYKLGVyVqdsCC + ox3CeZAxbneFPh7CBrvcSZ7aOGwwvjgCUyQBNbSlst0aV/ENeARl6DPx3T+o + gmcoyqbXJlLmQMUk3tBcW+bRAprejlaQlKqmkRr5CCK+2D0u5grh7s9rEh46 + gq5gnIeOBM5J7CaC5aDkyse0kMJkMXbRY9EAuQeq+kAnqVerOyaxZcSEq4Xd + USZz59lwSeAF3QKpVB5nxpT63XRKNZZdfZooyoU9CnUOn2ItnJZ0b6vxQwGY + pOwhl1s5rcSjkE/itBTb9yB2XElhMZeaCpbIZ2Qs7RJ1CVNQUqQx936gzTkv + 8OoMaG4y3DkcEB2ZBzFIuDno/W+tqhTGDRNvW+WWVHVQx5q2yFvOyGl+gHZk + 9abpXsm8g2gEtRu1rrDMYZsSjwdMT9ovm3JDrJaKFLqrDpWNzySrUsdlO25r + ZR5UCf5nBfUZQjFGgWOxHRwnezhBFJJo9jhyaFp9zc76h6Ym/STjmIJq3+vw + bX90CMCJ6sDYk4YUGBVF+Upa3eLbGerLRVMkbcU63DccYuzK4D2kkWEy5LFb + wELv7wtO1u6wQ0i0xNoEMS057mQo93ZOh4b+c9tn37NdV0nBDabvw0aqhwNF + +g96InDn/CEsbyX1AfGdLqdhklslOlW8HCXBHX3blxwFJyWSLskI8kxinRg4 + 50dI3JYyQSxu+Wgd2+4JdvYAf2dcu1IV1IGfRTZ9aqTxjN0OsU8M99afFNmx + fS5Au0aqV6v3HT/Deyvk8Vcf6+bXXzDUzrKUDcAYv7AryyfiAzrQoieSSml/ + R2Fg8F6smz7UU4XD07nghJfvYwaPJK+Ew7M1GpuwCm/D3sYwWZGWhyas0jRw + f8GgjNhuLS8rA6HsqAkE4QJpduU+3csQykuaP9RPNuvpGK5PYju29rnu+RET + HgW+PJ9jvz9JgXfIok+QR9GOlmaYbARPnE1FQDs2csh9ndEvslCEYTv3by7u + +wM8YzXMwVIy56pW3Q7wzmPxl6vfyJKeb9gM5gmly/k8WiaLhCaredLxcsMg + +pcPFH+9+nxDInY+Y+w8PdtsLhYpXWFJPcb9W2TSu+T1XBKJX7W1G7i++Xj/ + iayWF2l0sVylS0YdK/TKgx/BOypElTuX01C5cl72Hr25e7i9JugNBqvFLJ29 + Zau3tTvbN8R2yOCZbiDuoo+e7I6FzRHPcxRjJpr6Vln3v5vPt59uP36+wWI+ + BmnuBaVxacnin66+fLu/u0GLsDQexM0zxMj7zlGbPNTPODpdRP1e2VGGR448 + Cb8Mc2WoOUW9AfGbvwEAAP//AwBKXyDI4hYAAA== + http_version: + recorded_at: Wed, 15 Jul 2015 16:03:31 GMT +recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/success/succeeds.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/success/succeeds.yml new file mode 100644 index 00000000..f9949912 --- /dev/null +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/success/succeeds.yml @@ -0,0 +1,302 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + John + Doe + jalyn@reilly.us + + + John + Doe + 10 Lovely Street + Northwest + Company + Herndon + Alabama + USA + 35005 + + fake-paypal-future-nonce + + true + + + {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Wed, 15 Jul 2015 16:03:27 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"34c4b7bbf13dd4bf7bc283b569666dde"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 908bda2659cc01e208ab85bd0c5e9ef2 + X-Runtime: + - '0.408364' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAE+EplUAA6RTuXLbMBDt/RUc9iB0RrYGolxkUqR2mjSeJbGiYAMLBgAt + UV8fkBIlJUyTcfmOPbCPFNuj0ckHOq8sbdJpNkkTpNJKRdUm/fHyjT2m2/xB + lI0P1qDLH5JEKJk/rp6Wq8ViLngEHRe1cg8UWMSngpbt6ddTWB3M4biYCX6v + du6dcj4wAoP5d7snwe+ITtcwoK8WBb/BTiytqYHahJTepME1mPKeRwNK52+g + W3p2qLRus8YLfqY7Q723hKOyHRxH3AELr8LYWzqEgJJBSEJb4yaVEQZlMM1n + k+mSTVZsunyZfllP5uvZ6qfgt4K+vqnl/9XfCs7z+xjYTqGW/rqSVIGV4KS/ + NAXnoL1sXENbg2ZQlrah8KejM4wsZzLSwb4j5fNWzk5G8DMatOHUhJm0+IxH + MLXGLCZzd+/eKXEHjR6eW1irESjNu5sKfhGvZmWgQtY4ne9DqP2ac/Aeg88K + B4qCQ6ziNQ7QdpN43NsghVeDYW/lq7aV5ee3ZDVVW6QP5Sx1lo0HkoU9xq/1 + OmGY+clI+x6fjLXv4ZvCl07VIf6I/wgyOvg4qL8535MgpcN4uFGbuPz1P/4N + AAD//wMAnr8PZPoDAAA= + http_version: + recorded_at: Wed, 15 Jul 2015 16:03:27 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + body: + encoding: UTF-8 + string: | + + + + 2 + vernie@haley.us + jane.doe@example.com + + + R909600223-EALQVM7S + + + 50.00 + 3yd2zm + Spree + sale + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Wed, 15 Jul 2015 16:03:28 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"e4a45c43b74a2d397c86611a7f855e13"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 61b7a8f2013c62f398626836b06fbc7a + X-Runtime: + - '0.329859' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + http_version: + recorded_at: Wed, 15 Jul 2015 16:03:28 GMT +- request: + method: put + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/9mc66d/submit_for_settlement + body: + encoding: UTF-8 + string: | + + + 50.00 + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 200 + message: OK + headers: + Date: + - Wed, 15 Jul 2015 16:03:29 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"074114aa45c809f447481c5233814356"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - a5ddd2b037b8c2aa1ade3be5e8321c8b + X-Runtime: + - '0.340920' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + yzBbhqpT1BoQvvkbAAD//wMA0x7my9kWAAA= + http_version: + recorded_at: Wed, 15 Jul 2015 16:03:29 GMT +recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Gateway_Braintree/Credit_Card/decline/fails.yml b/spec/cassettes/Spree_Gateway_Braintree/Credit_Card/decline/fails.yml deleted file mode 100644 index 66e7aa82..00000000 --- a/spec/cassettes/Spree_Gateway_Braintree/Credit_Card/decline/fails.yml +++ /dev/null @@ -1,225 +0,0 @@ ---- -http_interactions: -- request: - method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers - body: - encoding: UTF-8 - string: | - - - John - Doe - pete_berge@kohlergerlach.biz - - - John - Doe - 10 Lovely Street - Northwest - Company - Herndon - Alabama - USA - 35005 - - fake-valid-nonce - - true - - - {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Tue, 14 Jul 2015 22:50:13 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - '"93448144ef307a2cb1bc8d78e26d9850"' - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - e5d58a6a4c0cb14c53853f4a60f7b284 - X-Runtime: - - '1.192207' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - H4sIACWSpVUAA7RYWW/bOBB+z68w/K5I8oE4haJusItFsUewix4o+lJQ0thi - IpEKSdlxf/0OqYuy7PhI9yGIOfPNaDi3FLx/ybPRGoSknN2N/WtvPAIW84Sy - 1d3486ffncX4fXgVxKVUPAcRXo1GAU3Cue/NF/7NbeDiQdOQF6eEKQfPPyI2 - 3/54vlU3m3zzMpsErs3V6CUVUjmM5BD+wVMWuBZB8zPSnH7jELjdUTNjnheE - bUeMZndjJUoYu4YOOaFZWICC7xGIFfzyxNNM/xAZidPriP4I3Aqj0UXKGQx0 - LMnLgLaBSFI1xMYCiILEIWqktgXcjRM8KprDOJx4/tzxbhx/9mkyeTf33vmT - b4HbCRj5skhOl5+ifCdQPd/ExFlSyBLZmpRQ5cREJLJWSoQg27Hm9vkVBWkR - zTKMtkOSRICUDb2Ks3psIlzTmkRweklgUzvskSjXqNdi3Ty0inj4a/Ufn1cT - OohUAkC1l/C90V98Ddl29NEwAncH0EnCiwKWaLfWrAcuVLoBiUIDnmU2j0lG - 1Tb8AIIlHG/XUjqQgBXWVXifkYjkJHDrcwcouFQkc7DgIJzOPW8euDbJdkHJ - lNgaskOyIiWT8PNH7Ykh/TWpKUrd7xObHhJjJQaWxuFi5u3INZyhoInfZ4ZV - k2AAMGnliC9H9wZOOi27YX5bQdVaziqryaCsjA73QFFgsbBw5vmTxUJj2kgG - uqIc/bjwC5X6hu3ZRqQ8S7BI9LV3u0mT57pTUpKh854Y3zCT6g2tg1Xu40uH - SlkSFkM/qjajFTrHudO9zj29+DukLgqlc94k64Da4BOIqOouXR075pKUWWN3 - xHkGhI1D7TwNNcwOXAoMjIOVVmbafkvpLqcRgZeCCmOPk3Om0tCf6NLfIe5B - b4EI9N7E68ENtYfGKtixfUkyCbWUZUkKJFMppgp0Zlu0BkZzsgKnFFmYKlXI - d65LpAQlryNBKNONboUX3JDtNWaPW5BtDkx9z0GlPPme8RV315il1wVbvQe2 - poIzDbiThCURf8GO3+pvn4jppOshIuypM61HbaCmgc9Cf7Hw624+a3loiuCZ - ld0NoQUIKAjm0QNHXv274ckykrGghXZyf7p1FaT4E7BwurydTjeBW50aXsno - c2m6VmSSFa9McXiKcJZMZ/P4BmaR799MpiSZwHI5j5IbEnk+/mGLOCTa6n7b - LDc61sBy7sjk6UCytHxLQqAZVSntm/cDUEc2I5OoUoYVHxI9Ig3BxsTrNRaM - LFA/VCPpbyzjAdEWIWvpgBBc9DH7Gl6Lt2be8HGvA3ZV9ef8fm2vYmyFdRkh - 4hFiU9zYFCVnBy/TLrokNs1Y90SJiQzWDmyxbNFC8Bit2fUbrjKep4thP/eI - BoUbTHhfIGetI3wIYWtBsx6Xt4vnRX/z6zZFm3bqlmeQxze9KueObnt1+l64 - 8Rnpy7a+6honbH4GeGz7q4J24gZYu+YN+5W11/RrfPhSUHNe6aZtSuzdh+yA - 7x8FzbOP7U1tuM4Y0UOZ44O6see8vcW6xZHdrkb+jzOoyafDE7RGnLZk1ODX - FrMGcvbG1bjtpHW3udeR1aGGnb6otEacv0y3ruZJGZtG3lnV0XqFd6DIfs47 - z89ZQIweQeWTgxyy69cknH774nl/fvj68PWff3dng8mUmErT76pxo5OlpvQ8 - secJercZLil9at2FB57sEQwoqNs27P0EsvtGN/jIccZbzgmj7+jQOzruLh10 - F424E4bbkbF24kC75IPGRZ8zLvyY8ZZR+zOK+u2fMXDV7WLbHgCPXTKHV/8B - AAD//wMAezTNhAEWAAA= - http_version: - recorded_at: Tue, 14 Jul 2015 22:50:13 GMT -- request: - method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions - body: - encoding: UTF-8 - string: | - - - - - 2001.00 - 3f933w - - - - - John - Doe - - Spree - sale - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 422 - message: Unprocessable Entity - headers: - Date: - - Tue, 14 Jul 2015 22:50:15 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Cache-Control: - - no-cache - X-Request-Id: - - 7a0e8f122bcd13dbf79a062fcbb15fd3 - X-Runtime: - - '2.277728' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - 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 - http_version: - recorded_at: Tue, 14 Jul 2015 22:50:15 GMT -recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Gateway_Braintree/Credit_Card/successful/succeeds.yml b/spec/cassettes/Spree_Gateway_Braintree/Credit_Card/successful/succeeds.yml deleted file mode 100644 index c6b1d721..00000000 --- a/spec/cassettes/Spree_Gateway_Braintree/Credit_Card/successful/succeeds.yml +++ /dev/null @@ -1,320 +0,0 @@ ---- -http_interactions: -- request: - method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers - body: - encoding: UTF-8 - string: | - - - John - Doe - gay@bauch.name - - - John - Doe - 10 Lovely Street - Northwest - Company - Herndon - Alabama - USA - 35005 - - fake-valid-nonce - - true - - - {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Tue, 14 Jul 2015 22:50:09 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - '"a0cb7bfc8c799154bc702f19e00be68a"' - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 53d5c98cc4ca40706f48c7a1d4549ee6 - X-Runtime: - - '0.786264' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - H4sIACGSpVUAA7RYWW/jNhB+319h+F2RfDVOoGgbtCgW7XZf9gC6LwtKHNus - JVJLUo6dX98hdVGWrzjpQ+Bw5htqyLk+KXy/zdLBBqRigj8MRzfBcAA8EZTx - 5cPw65c/vPnwffQuTAqlRQYyejcYhIxGt9PJ3XQ6/yX0cWFkqEtWhGsP188x - n+2ef97p26fsaTsdh76rNegFk0p7nGQQ/SlWPPQdgdGnpF79LiD026VRJiLL - Cd8NOEsfhloWMPStHDLC0mhJdr/GpEhWN8Yg9Eup0ecrwaFntSDbnuwJYsV0 - H5tIIBqoR/RA73J4GFJcapbBMBoHo5kX3Hqj6Zfx+H4W3Ad330O/NbD2RU5f - Zt8alM+3UfAWDFKqGpco015CJFXVpkRKshsabVdfSlAWszTF+HqEUglK1fIy - snNZx7SS1aH3OmF3pS32TFwr1Kno1g8tYxz9Vv7i8ypBC1FaAujmEKNg8FFs - IN0NPltF6O8BWkvYauDUXGul+iSkXj2BQqOeznFbJCRlehd9AMmpwNM1khYk - YYmVFD2mJCYZCf1q3QJyoTRJPSwxiCazIJiFvityr6DgWu6s2CNpviLj6Otn - cxN9+SmrCVo9HjKbHDPjBQaWJdF8GuzZ1Zq+oY3fV45VQzEAmLRqIBaDRwsn - 7S77YX5dQVW7vLKs7B7+kaLAYuHRNBiN53ODaSIZmoryzOOib0yZEzZrF7ES - KcUiMcfe7yZ1npveyEiKl7fm4onbVK9lLay8PrHwmFIF4Ql0o+oqGqPXX+7l - xd8iTVFok/M2WXvSGk8hZro9dLlslQtSpLXfsRApED6MzOUZqFW24EJiYDys - tCI1/jub7mtqE9jmTFp/vExwvYpGY1P6e8ID6B0Qibc3DjpwK+2gsQr2fF+Q - VEFl5XiyApLqFaYKtG47shrGMrIEr5BptNI6V/e+T5QCrW5iSRg3jW6JB3wi - uxvMHj8nuwy4/pGBXgn6IxVL4W8wS29yvnwPfMOk4AbwoAinsdhix2/2b56I - 6WTqISZ83brWkdZQ28Cn0Wg+H1XdfNro0BUpUie7a0EDkJATzKNPAnXV/7VO - FbFKJMvNJXenW1tBWqyBR+v1ePuMMSxXta7g7Gdhu1ZskxWPzHB4ymhKJ9NZ - cgvTeDS6HU8IHcNiMYvpLYmDEf5hizhm2uz9Bk1nAzwTnqLrI8nS6B0LiW6U - pXRo3vdArdiOTKILFZV6oGZEWoGLSTYbLBiV4/5QjqS/sYx7QteEbJQHUgrZ - xRxqeA3emXn9x50G7G/VnfOHdzuJcTesyggR/0JiixubohL86GEaaksS24xN - T1SYyOCwXkflmuZSJOjN/r0hlQkCUwyHtWd20MhgosccNRsT4WMIdxd0azFf - 0zvdZX4tU3Rll7I8izzP9MqcO8v2qvS9kvFZ6+tYX3mMC5ifBZ5jf2XQLmSA - 1dW8gl85vKZb4/2Xgkpzops2KXGQD7kBPzwK6mef401NuF4wovs25wd17c/L - eItzijPcrkL+jzOozqfjE7RCXEYyKvApYlZDXsy46mu7iO7W5zpDHSrY5USl - ceLlZLq5akGLxDby1qtW1im8I0X2Nu88b0NA7D6SqbWHGrJ/rzSafP8WBP98 - DD5++OtufzbYTEmYsv2uHDcmWSpJ5yYOPMFwmz5J6UqrLty7yY7AgsKqbcPB - TyD7b3S9jxwveMu5YPSdHXpnx921g+6qEXfBcDsz1i4caNd80Ljqc8aVHzNe - M2rf5F371QWNVLeNbbMAXLbJHL37DwAA//8DALI3YELzFQAA - http_version: - recorded_at: Tue, 14 Jul 2015 22:50:09 GMT -- request: - method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions - body: - encoding: UTF-8 - string: | - - - - - 50.00 - kk2xz2 - - - - - John - Doe - - Spree - sale - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Tue, 14 Jul 2015 22:50:10 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - '"33e7b845c3dce75dbba5b2d71ab840e1"' - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - ce49a34faeeaaf05890531e2ae4d4d22 - X-Runtime: - - '0.618023' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - H4sIACKSpVUAA7RXS3PbNhC+51dodIdJvWolQzP1JNNJ08aXxJ5OLhmQWImo - SIAFQFnKr++CIClSBJ300IPH4u4HYHexjw/R21ORz46gNJfibr64CeczEKlk - XOzv5o9ffiPb+dv4VWQUFZqmBlHxq9ks4ix+nbJkW0YB/rQSbaipdEwrk0nF - vwOLgkZkteZcQqxpDlFQ/7SytFIKzzoTriXBIyF+/Pw+CsZiC6aFrISJN+FN - GEZB82UVBag0o8IQmqZWSNAeXSrAk3wqu0QqBgo/ZoLnd3OjKpgHziIF1AAj - 1MyslXdzhp+GFzCPl+FiQ8Jbslh/WS7fbMI3i/Ar2totqNdXJftv6y8Lmoho - I9Fq++GCfLtevV6vt7+0YUbpjittiKAFxB9lJqKgJ3CInLbf7yWG4fLp1Kks - SirO196jBgrK83hPz78mtEqzG7soCpzUIZ4h0dyAZ22ZSeGT7+hpFOeg72iU - 8DzHdLs4vVX/g7vxO/cfD28ETq0N5gqmCGMKtI4X4exPeYT8PPtcK2wWDwBN - pE4GBLM314gfpDLZM2hcMNI1ZsqU5tyc4w+gBJPoSSdxAAV7W173OU1oQaOg - +W7CK7GaclcPq00YbqKgL2pdxSxXZ+f9o8CLYugGZpieyd3sHgPOU2oD0IMN - V9rNCM3LjC6xGi/QvnxqxQpX3PuWrHxLRFWbE2/X4dWaVlNnSi85MEC7SjBf - 4XYa3RQeVYqeB0q8j14T822iwZgcCsBGkVCTZl5Mxsuyn6y+jO8S1KPsstOj - my7MYQ76Kvcq53wnN9nmUblM8xX1JcW89l7y6AV1L3d+CrX6EapJkHFb6d9O - 00zJjkPOtAPQoyaglFQEY1RKocHrWo3ruT5Ex59w/rwIaLcY3pp/lxcxtRvH - 45X0d6yXkdBC91jpz/SMmr/BZTmOJz2+2KhUMsXTMA7tuKY1vN4pfPr04eEj - tpeXQMNdhqYsQjuip7QTKw1mcHxfouZoqcMUog4tY9xagsEfw0a+HiVP7QXt - 8OJxBeZOAmockcpSBTzFcYMJlKEn4qiHVwUnKMp29CdS5kDFPN7RXFva0wFa - qoFekJSqdtAZeQARHw7L0/clwusvp0m4iNfhYrnd2n4o+p1kHS+220Uz9NZt - seCmpKZZT1zbft99t82i5MpdZiGFyeLF0k6tK+EIewaqkMcswwG4ljbnNlOd - 2FZTU8V6hIykFyszmdfh9jcQXtA9kErlcWZMqd8EAdXYpPVNoigXtnCajL/B - zhmU9Gx797cCMFvZt1zuZXBE/29KsX8L4siVFBZwp6lgiTwhx+j2b7qdgpIi - 8XiQNgHdb6fJgOYmQ4vtWD0I+YzTuydzIAYJNxe9+2xUlcKLwyzcV7klfD3U - taYbBZa9cppfoD1ZYy89K5n3EK2gCZ/WFTZDHGbicMEMpMPmKnfEaqlIYTjK - +4o2VJJVac2oL6dfZA5UCf5PBU0xoRiDz7Edq3jNVutNegvrZLG4Xa4oW8Ju - t0nYLU3CBf4hMZ5a6nY+gigk0ewwUWydvqGbw2Jr3iok45iZ6jygDN3ArRGA - GzV3aCsUmTwqivIn2X2H73Z48ZFUI6beOS6gGiPACir2gJPDPXJqWWdhj+Fo - iT0NYlpytGQsd34G1452kiY4rjvm1M+YqkSnipeTjKqn73pZzedIiRNcMoKk - hdgweqr/ColmKePFoslX59gRQXAaeMgg47rOaq8O3C6yTbOJvjT11MFOMrZt - uClSLfu+Rb8mMrfTuymBz1cBefzZ3XX76diqOtrJtgOYmkn2ZPlM3IWOtBiJ - pFLaEV4GBh957VNlqPJfT48t+48fYkav+p+Ew8k6jW1a+c2w1B6TFTmeb8Mq - TT1kGC9lwnfreVnZ99I4O5r5QrhAzlbVP+uZ6prLN9tcomAKNGQ9PUeH5KhP - fCZBP96rpko/2qvjU4rrg71lenmBr74+heGH5V/vNqs/em9xBinX9RvVETWb - 3Y2kDutgp8hkmLQEK9emNGBIdnJ4E4O+FL/6FwAA//8DAPxXNTmMEgAA - http_version: - recorded_at: Tue, 14 Jul 2015 22:50:10 GMT -- request: - method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/9cdb8p/submit_for_settlement - body: - encoding: UTF-8 - string: | - - - 50.00 - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 200 - message: OK - headers: - Date: - - Tue, 14 Jul 2015 22:50:11 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - '"e0160f7b4dbcbb5f363f41f1c10a74aa"' - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 512127faf1cd22823db83003734cbd9b - X-Runtime: - - '0.271630' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - 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 - http_version: - recorded_at: Tue, 14 Jul 2015 22:50:11 GMT -recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Gateway_Braintree/Credit_Card/with_completed_payment/can_be_fully_credited.yml b/spec/cassettes/Spree_Gateway_Braintree/Credit_Card/with_completed_payment/can_be_fully_credited.yml deleted file mode 100644 index 09b09322..00000000 --- a/spec/cassettes/Spree_Gateway_Braintree/Credit_Card/with_completed_payment/can_be_fully_credited.yml +++ /dev/null @@ -1,389 +0,0 @@ ---- -http_interactions: -- request: - method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers - body: - encoding: UTF-8 - string: | - - - John - Doe - alexa.ferry@welch.co.uk - - - John - Doe - 10 Lovely Street - Northwest - Company - Herndon - Alabama - USA - 35005 - - fake-valid-nonce - - true - - - {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Tue, 14 Jul 2015 22:50:19 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - '"126c55b491a5ac37f1b2f068d26392d4"' - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - a1631e7198f730b416ee167ff7daa515 - X-Runtime: - - '3.102811' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - H4sIACuSpVUAA7RYyXLjNhC9z1eodKdJypIlu2g6riyVSiVzmXEOuUyBZMtE - TAIcANQyX58GuIGidjsHl4zu12ADvT0yeNrk2WgFQlLOHsf+jTceAYt5Qtnr - 4/jl62/OYvwUfgriUiqegwg/jUYBTUL/bnLn386ngYsLLUNdnBKmHFz/iNhs - ++P7vZqv8/VmOglcW6vRSyqkchjJIfyDpyxwLYHWZ6RZ/cIhcLulVsY8Lwjb - jhjNHsdKlDB2jRxyQrOQZLAhN0sQYvvTGrI4vYn5TfkWuJVaA4uUMxiYL8lm - IFtDJKkaYmMBREHiEDVS2wIexwkuFc1hHE48f+Z4c8effp1MHmbeg7/4J3A7 - A2NfFsn59vdo3xlUzzfhcJYUskS2LiVUOTERiaw3JUKQ7Vhr+/pKgrKIZhkG - 2iFJIkDKRl6FmKVNcGtZkwNOL/62tMOeCHCNOhbm5qFVsMOfq198Xi3oIFIJ - ANUewvdGf/IVZNvRF6MI3B1AZwkbBSzR11qrPnOh0jVINBroLLd5TDKqtuHv - IFjC8XStpAMJeMWSCp8zEpGcBG697gAFl4pkDtYahLczz5sFri2yr6BkSmyN - 2CFZkZJJ+PJF38RQfszqFq2e95ndHjJjJQaWxuFi6u3YNZqhoYnfC8OqSTAA - mLRyxJejZwMn3S67Yb6koO4HBVXv8s6yMnu4B4oCi4WFU8+fLBYa00Yy0BXl - 6MeFf1OpT9iubUTKswSLRB97t5s0ea6bJCUZXt4b42tmUr2RdbDq+vjSoVKW - hMXQj6qtaI3ef7nnF3+H1EWhdM6bZB1IG3wCEVXdoatlp1ySMmv8jjjPgLBx - qC9PQ42yA5cCA+NgpZWZ9t/adFfTmMCmoML44+ScqTT0J7r0d4R70FsgAm9v - 4vXgRtpDYxXs+L4kmYTayvIkBZKpFFMFOrctWQOjOXkFpxRZmCpVyAfXJVKC - kjeRIJTpRveKB1yTLY693C3INgemvuWgUp58y/grd1eYpTcFe30CtqKCMw14 - lIQlEd9gx2/3b5+I6aTrISLsrXOtJ22gpoFPQ3+x8OtuPm116IrgmZXdjaAF - CCgI5tFnjrr6/0Yny0jGghb6kvvTrasgxd+AhelU3c+jwK1Wja5k9HtpulZk - khWPTHF4inCa3E5n8Rymke/PJ7ckmcByOYuSOYk8H/+wRRwybff+gKazApZz - RyZvB5Kl1VsWAt2oSmnfvB+AOrEZmUSVMqz0kOgRaQQ2Jl6tsGBkgftDNZL+ - wjIeCG0TspIOEi8u+ph9Da/FWzNv+LjjgN2t+nN+/25HMfaGdRkh4l+ITXFj - U5ScHTxMy3FJbJqx7okSExks+mupbNNC8Bi92b03pDKep4thv/bEDgoZTPhc - oGalI3wIYe+Cbs1ZvpoWfebXMUVbdi7LM8jTTK/KuZNsr07fKxmfsb6O9VXH - OIP5GeAp9lcF7UwGWF/NO/iVxWv6NT58Kag1R7ppmxJ7+ZAd8P2joHn2Kd7U - huuCET20OT2oG38u4y3WKU5wuxr5P86gJp8OT9AacR7JqMHHiFkDuZhxNdd2 - Ft1tznWCOtSw84lK68TlZLq9ap6UsWnknVedrFd4B4rsMlp+d+Cd52MIiNlH - UPnmoIbs3mtyJKsTiKn+doRJp0a/rkhW6q11ttTy3lXseYQmN0OW0pfWbXhw - lT2BAQV134a930B2X+kGXzkueM05Y/adnHon5921k+6qGXfGdDsx186caNd8 - 0bjqe8aVXzPeM2s/5GX73RWNXLeLbbsAXHbJHH76DwAA//8DAAlAuWz9FQAA - http_version: - recorded_at: Tue, 14 Jul 2015 22:50:19 GMT -- request: - method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions - body: - encoding: UTF-8 - string: | - - - - - 50.00 - h4t97b - - - - - John - Doe - - Spree - sale - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Tue, 14 Jul 2015 22:50:20 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - '"ddb7912e90997a48c6fd6caf4bbe78e3"' - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - e77c978c5d83e1296ac227231f54dca9 - X-Runtime: - - '0.796334' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - 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 - rpUSAAA= - http_version: - recorded_at: Tue, 14 Jul 2015 22:50:20 GMT -- request: - method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/gc96rd/submit_for_settlement - body: - encoding: UTF-8 - string: | - - - 50.00 - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 200 - message: OK - headers: - Date: - - Tue, 14 Jul 2015 22:50:21 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - '"4b9b32b3ab147949b37cb3ec41ad06be"' - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - da22c0839bdaaaa61d6a59d89788b5a1 - X-Runtime: - - '0.364811' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - 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 - http_version: - recorded_at: Tue, 14 Jul 2015 22:50:21 GMT -- request: - method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/gc96rd/refund - body: - encoding: UTF-8 - string: | - - - 50.00 - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 422 - message: Unprocessable Entity - headers: - Date: - - Tue, 14 Jul 2015 22:50:21 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Cache-Control: - - no-cache - X-Request-Id: - - 7feca69de3cfdd80561f138a4c1741d0 - X-Runtime: - - '0.151570' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - H4sIAC2SpVUAA6xSQU7DMBC89xWW76lTRAuVXPeAxAvgAZtkKZYSO6w3tOnr - cZqkSVHFidvOzqx3Z2S9P1Wl+EYK1rudXC1TKdDlvrDusJPvb6/Js9ybhYba - JkjkKSEMtXcBzUIIfWmFrrwCwW2NOwlE0Eo1UEzgAuQcl/Sd+/KRG9kJx048 - Cs12tU43Wl3qOQnMZLOGcXgvtFXmS2kyCKjVlb2ZqTAEOKB5Aec8C8KPxhUC - xOxY0bgyqoRlYYMIyFxisdRqHJ3uVTcHD3BMRv3yP6d1DQRV+CMoqHzj2KzT - ZZpGLz26/3Cn7kHvJsrnXO4dky9LJDMbDF2eV2IxZEP5JzhObGHOmVu3568t - Px2r4+nxobM/sb0+Fod8u6G4se9pNfn6l6SjlTt/8AcAAP//AwDkh3L4wAIA - AA== - http_version: - recorded_at: Tue, 14 Jul 2015 22:50:21 GMT -recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Gateway_Braintree/Credit_Card/with_completed_payment/can_be_voided.yml b/spec/cassettes/Spree_Gateway_Braintree/Credit_Card/with_completed_payment/can_be_voided.yml deleted file mode 100644 index 78fdbb23..00000000 --- a/spec/cassettes/Spree_Gateway_Braintree/Credit_Card/with_completed_payment/can_be_voided.yml +++ /dev/null @@ -1,415 +0,0 @@ ---- -http_interactions: -- request: - method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers - body: - encoding: UTF-8 - string: | - - - John - Doe - sebastian.leannon@kris.com - - - John - Doe - 10 Lovely Street - Northwest - Company - Herndon - Alabama - USA - 35005 - - fake-valid-nonce - - true - - - {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Tue, 14 Jul 2015 22:50:23 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - '"f2343883c1fb360aa824e6378119cba6"' - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 8503338dc6ec945694d4ef4becf34a33 - X-Runtime: - - '0.710900' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - H4sIAC+SpVUAA7RYS2/bOBC+91cYviuSX7VdKOoGLRaLxW4vaXropaDEccxG - IlWScuL++h1SL0qyY8fJHgKHM9+MhvOWwo9PWTragVRM8Ovx5CoYj4AngjJ+ - fz2++/qntxp/jN6FSaG0yEBG70ajkNHo/WqxCtbrWejjwdCQl2wJ1x6ef8d8 - sf/9a62Xj9nj03wa+i7XoDdMKu1xkkH0t9jy0HcIhp+S+vRZQOi3R8NMRJYT - vh9xll6PtSxg7Fs6ZISlkYIY0YzwqxQI54L/8SCZukKh0C8RBptvBYeBhg15 - GtAeIVZMD7GJBKKBekSP9D6H6zHFo2YZjKNpMFl4wdKbzL9Opx8WwYfp9Hvo - twJWvsjpy+RbgfL5NiLehkFKVWMSZdpLiKSqUkqkJPux4Xb5JQVpMUtTjLVH - KJWgVE0vo5zTOr4VrU4Dr5MCLrXFnohxhXou0vVDy3hHn8pffF5FaCFKSwDd - XGISjP4RO0j3o1vLCP0eoJWEJw2cGrdWrC9C6u0jKBQa8ByzRUJSpvfRXyA5 - FXi7htKCJNxjVUU3KYlJRkK/OreAXChNUg/LDaLZIggWoe+SXBcUXMu9JXsk - zbdkGt3dGk8M6c9JzVDq5pDY7JgYLzCwLIlW86AnV3OGgjZ+dxyrhmIAMGnV - SGxGNxZOWi39ML+uoCotrywrq8M/UhRYLDyaB5PpamUwTSRDU1GeeVz0jSlz - w+bsIrYipVgk5tr9blLnuemTjKTovAcuHrlN9ZrWwkr3iY3HlCoIT6AbVZfR - CL3euecXf4s0RaFNzttkHVBrPIWY6fbS5bFlbkiR1nbHQpi+Po6M8wzUMltw - ITEwHlZakRr7HaV9Ti0CTzmT1h4vE1xvo8nUlH6PeAC9ByLRe9OgA7fUDhqr - oGf7hqQKKinHki2QVG8xVaA126HVMJaRe/AKmUZbrXP1wfeJUqDVVSwJ46bR - 3eMFH8neDD0/J/sMuP6Rgd4K+iMV98LfYZZe5fz+I/Adk4IbwLUinMbiCTt+ - o795IqaTqYeY8IfWtA61htoGPo8mq9Wk6ubzhoemSJE62V0TGoCEnGAefRHI - q/6veaqIVSJZbpzcnW5tBWnxADxarSXlceiXp5pXcParsF0rtsmKV2Y4PGU0 - p7P5IlnCPJ5MltMZoVPYbBYxXZI4mOAftohjoo3uN2g6O+CZ8BR9OJIsDd+R - kGhGWUqH5v0A1JLtyCS6UFHJB2pGpCW4mGS3w4JROeqHciT9i2U8ILoiZKc8 - kFLILuZQw2vwzswbPu55QF9Vd84f1vYsxlVYlREifkJiixubohL86GWaNZck - thmbnqgwkcHZgB2WK5pLkaA1fb/hKhMEphgOc09o0LjBRDc5cnYmwscQrhY0 - a/lzGb/vbX7tpujSzt3yLPL0plfm3Mltr0rfCzc+K33Z1lde44zNzwJPbX9l - 0M7cACvXvGK/cvaabo0PXwoqzjPdtEmJg/uQG/DDo6B+9qm9qQnXC0b0UOb0 - oK7tedne4tzixG5XIf/HGVTn0/EJWiHOWzIq8HOLWQ158cZVu+2sdbe+14nV - oYKdv6g0Rrx8mW5cLWiR2EbeWtXSOoV3pMje5p3nbRYQq0cy9eAhh/T9SqPZ - 929BcLv+/Onz93V/NthMSZiy/a4cNyZZKkrHEweeYHab4ZLSpVZdeODJDsGC - wqptw8FPIP03usFHjhe85Zwx+k4OvZPj7tJBd9GIO2O4nRhrZw60Sz5oXPQ5 - 48KPGa8ZtW/yrv3qgsZVt41tcwA8tskcvfsPAAD//wMA0ZiCjP8VAAA= - http_version: - recorded_at: Tue, 14 Jul 2015 22:50:23 GMT -- request: - method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions - body: - encoding: UTF-8 - string: | - - - - - 50.00 - 89rdnb - - - - - John - Doe - - Spree - sale - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Tue, 14 Jul 2015 22:50:24 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - '"4d34795a565bd326668d06ff8f4fdccb"' - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - c57c65f127dcd359e8ea31a445d337bf - X-Runtime: - - '0.867446' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - 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 - mBIAAA== - http_version: - recorded_at: Tue, 14 Jul 2015 22:50:24 GMT -- request: - method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/fcyx84/submit_for_settlement - body: - encoding: UTF-8 - string: | - - - 50.00 - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 200 - message: OK - headers: - Date: - - Tue, 14 Jul 2015 22:50:24 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - '"2a3f4fa2d8feddc55c3ecc8e6baf460c"' - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 795f748629345d91ee6694142aa238b1 - X-Runtime: - - '0.156611' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - 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 - http_version: - recorded_at: Tue, 14 Jul 2015 22:50:24 GMT -- request: - method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/fcyx84/void - body: - encoding: UTF-8 - string: '' - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 200 - message: OK - headers: - Date: - - Tue, 14 Jul 2015 22:50:25 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - '"3ba5fca93a203c00faf42e6e139608be"' - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 84fa2dc3f96d8e40791fd2e344a442f8 - X-Runtime: - - '0.261326' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - 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 - AA== - http_version: - recorded_at: Tue, 14 Jul 2015 22:50:25 GMT -recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Gateway_Braintree/PayPal/fails_capture_with_settlement_declined.yml b/spec/cassettes/Spree_Gateway_Braintree/PayPal/fails_capture_with_settlement_declined.yml deleted file mode 100644 index b1a848f3..00000000 --- a/spec/cassettes/Spree_Gateway_Braintree/PayPal/fails_capture_with_settlement_declined.yml +++ /dev/null @@ -1,302 +0,0 @@ ---- -http_interactions: -- request: - method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers - body: - encoding: UTF-8 - string: | - - - John - Doe - myrl_hickle@goyette.com - - - John - Doe - 10 Lovely Street - Northwest - Company - Herndon - Alabama - USA - 35005 - - fake-paypal-future-nonce - - true - - - {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Tue, 14 Jul 2015 22:50:29 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - '"fd3a8c35884f31e45a39ea131e040ed7"' - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - bf6b79fccf1173211293dd007634d769 - X-Runtime: - - '0.280967' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - H4sIADWSpVUAA6RTS3ObMBC+51cw3LFsGjeuR8Y5dHroOb304lnQAnL0oNIS - Q359BfiRhF46OX6v3dUu8H2nVfSCzktrdvFqsYwjNIUV0lS7+NfTj2QT77M7 - XrSerEaX3UURlyJbfdls0nT9lbMABi5oRQ2GkoBfc7PuX/98o4eTPnX3KWdv - 1cFdSucpMaAx+2lrw9kbYtAVXNB3i5zd4CAWVjdg+shItYvJtRizkUcNUmW6 - d+pQy+JZ4WNleyTCRUhwNsmDsamtwVm8hG7GnTD3kubewiEQigQoor7BXSwC - JKkxztLlap0sH5LV/VOabtfLbbr5zdktMObbRvxf/haY+o/nSEqJSvjrSEJS - UoAT/lwUnIP+PHEDfQMqgaKwraH3jsEws0xkoMk+o8nS47H0OWcTumjTTo9g - cCEsPmIHulEf9z06BZbQqstzc2sVgomzYaecncWrWWqoMGmdymqixm8ZA++R - /CJ3IA05xCps4wT90ImFuTUaOmik2oqDspVl01sWjan2aF6ks2aw7DwYkdsu - fLXXDpeenzzpWOOTZx1r+Db3hZMNhR/yH4cMDjY/1EfOjyQI4TAsblYmDH/9 - n/8CAAD//wMAp3RPLQIEAAA= - http_version: - recorded_at: Tue, 14 Jul 2015 22:50:29 GMT -- request: - method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions - body: - encoding: UTF-8 - string: | - - - - - 4001.00 - 2jjfsb - - - - - jane.doe@example.com - - - Spree - sale - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Tue, 14 Jul 2015 22:50:29 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - '"97819bc002f1dd5896a1af3ffc23ce65"' - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 48e864ac5572167cb1cea4d93fc0a256 - X-Runtime: - - '0.397278' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - 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 - bwAAAP//AwDiN4fQjRQAAA== - http_version: - recorded_at: Tue, 14 Jul 2015 22:50:29 GMT -- request: - method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/d5vkv8/submit_for_settlement - body: - encoding: UTF-8 - string: | - - - 4001.00 - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 422 - message: Unprocessable Entity - headers: - Date: - - Tue, 14 Jul 2015 22:50:30 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Cache-Control: - - no-cache - X-Request-Id: - - 3101940b31730a099bd2ed45ca8e8114 - X-Runtime: - - '0.304199' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - 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 - http_version: - recorded_at: Tue, 14 Jul 2015 22:50:30 GMT -recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Gateway_Braintree/PayPal/succeeds_authorization_and_capture.yml b/spec/cassettes/Spree_Gateway_Braintree/PayPal/succeeds_authorization_and_capture.yml deleted file mode 100644 index 7307843c..00000000 --- a/spec/cassettes/Spree_Gateway_Braintree/PayPal/succeeds_authorization_and_capture.yml +++ /dev/null @@ -1,302 +0,0 @@ ---- -http_interactions: -- request: - method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers - body: - encoding: UTF-8 - string: | - - - John - Doe - sigurd@kohlermuller.biz - - - John - Doe - 10 Lovely Street - Northwest - Company - Herndon - Alabama - USA - 35005 - - fake-paypal-future-nonce - - true - - - {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Tue, 14 Jul 2015 22:50:27 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - '"a688aaef8a6f2658a816021cb6638fdb"' - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 8020253a88171d58c9a6453223636ecb - X-Runtime: - - '0.257093' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - H4sIADOSpVUAA6RTy3KbMBTd5ysY9kKGsePGAziLThddp5tuMhd0DWr0iiRi - 8NdXgF8t3XSy0cw959yH7pHyfS9F9IHWca2KOE1WcYSq1oyrpoh/vHwjX+J9 - +ZDXnfNaoi0foijnrHxMn1bpNlvnNAQjFri6BeVJiE+V2gyn9ye/Pcpjv85y - es+O6gO3zhMFEsvvulU5vQNGXsAl+qoxp7dwJGstDaghUlwUsbcdxnTCUQIX - peNNZ9nzm24FWtmJcCYVP+V0pkehabXCRfoB+gV2xMpxv9TWFsEjI+AjPxgs - YhZCzyXGZbZKN2S1Jen6Jct2m9Uue/yZ01vClN8Z9n/5t4S5/2QHOXAUzF1H - YtyTGixz56JgLQzniQ0MBgSButad8n8qRsFCMoMB9voNVdls2tN7cHKOLty8 - 01+gMGEan7EHaQQmwaG7fU9KhgfoxOW6ldYCQcXluNOcnsmrmEtokHRWlK33 - xu0oBefQu6SywJW3iE3YxhGGsRMNc0tU/lWibzV7FbrRdL5LYlSzR/XBrVaj - pHCgWKX78GqvHS49P2npVOOTtk41XFe52nLjw4f8h5FBQZdG/Y25CQTGLIbF - LcqE4a//+TcAAAD//wMAdukpsgIEAAA= - http_version: - recorded_at: Tue, 14 Jul 2015 22:50:27 GMT -- request: - method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions - body: - encoding: UTF-8 - string: | - - - - - 50.00 - g5hzq2 - - - - - jane.doe@example.com - - - Spree - sale - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Tue, 14 Jul 2015 22:50:27 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - '"0a189bd35f7531f3cf518cd86a60a775"' - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - c896d1c1f1841af6c28882b5dd066008 - X-Runtime: - - '0.309252' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - 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 - FLTXYTBc43d/AwAA//8DAGeKpHGJFAAA - http_version: - recorded_at: Tue, 14 Jul 2015 22:50:27 GMT -- request: - method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/b792tp/submit_for_settlement - body: - encoding: UTF-8 - string: | - - - 50.00 - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 200 - message: OK - headers: - Date: - - Tue, 14 Jul 2015 22:50:28 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - '"5a84213d4ec639c4b39c7016ca7ca4b2"' - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 1acec5083f4b1c7ef9a09ef245c48df3 - X-Runtime: - - '0.210291' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - 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 - //8DADbiabXPFgAA - http_version: - recorded_at: Tue, 14 Jul 2015 22:50:28 GMT -recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Gateway_Braintree/on_a_payment/PayPal/failure/fails.yml b/spec/cassettes/Spree_Gateway_Braintree/on_a_payment/PayPal/failure/fails.yml deleted file mode 100644 index 6c3bda4b..00000000 --- a/spec/cassettes/Spree_Gateway_Braintree/on_a_payment/PayPal/failure/fails.yml +++ /dev/null @@ -1,303 +0,0 @@ ---- -http_interactions: -- request: - method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers - body: - encoding: UTF-8 - string: | - - - John - Doe - gerda_keeling@labadie.ca - - - John - Doe - 10 Lovely Street - Northwest - Company - Herndon - Alabama - USA - 35005 - - fake-paypal-future-nonce - - true - - - {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Tue, 14 Jul 2015 22:50:35 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - '"acbab2bd593d36b3f3b865d0d1f181b1"' - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 96d03c3e80cd40eb7a10fa1a9b4b65e4 - X-Runtime: - - '0.222756' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - H4sIADuSpVUAA6RTOXOcMBTu/SsYetCCYezsCNaFJ0Vqp0mz80BvQbEOLAmz - +NdHwF4OaTIuv+PdEt0dpQje0ViuVREm8SYMUNWacdUU4c+X79FjuCvvaN1b - pyWa8i4IKGflY57myX2SUOLBxHmtbkG5yOOPSuXjx9s39zDI4ZillNyqk/vA - jXWRAonlD90qSm6ISRdwRs8aKbnCSay17ECNgeKiCJ3pMSQzjxK4KBs0DPav - iMKP8CSgAsYxroGSRZ+cXasVruIPcFxxA1aWu7W3NggOWQQucGOHRcg8dFxi - WKabJI82D1GSvaTpNt9s77NflFwD5vi+Y/8Xfw1Y6s/3iA4cBbOXlhh3UQ2G - 2VNSMAbGU8cdjB2ICOpa98p9dkyGlWUhPe30K6oya7PRDpQs6KwtO/0NCmOm - 8QmPIDvh163lzb5nJ8MD9OI8bqW1QFBhOe2UkpN4MXMJDUa9EWXrXGe3hIC1 - 6GxcGeDKGcTGb2OAcapEfN8SldtLdK1me6EbTZZZ4k41O1Tv3Gg1WQoLilX6 - 6J/tpcK55hdPOuf44lnnHLavbG145/yP/MchvYOsD/U3Z2cSGDPoF7dK45u/ - fOg/AAAA//8DAB9t5z4DBAAA - http_version: - recorded_at: Tue, 14 Jul 2015 22:50:35 GMT -- request: - method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions - body: - encoding: UTF-8 - string: | - - - - 2 - gianni@koepp.info - jane.doe@example.com - - - R816662992 - - - 4001.00 - 4h4ysw - Spree - sale - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Tue, 14 Jul 2015 22:50:35 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - '"250493666f40a94d16a4e807650ada61"' - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 532919b72082519ef6ca1af2f4f9f8d6 - X-Runtime: - - '0.278264' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - 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 - http_version: - recorded_at: Tue, 14 Jul 2015 22:50:35 GMT -- request: - method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/5bsq98/submit_for_settlement - body: - encoding: UTF-8 - string: | - - - 4001.00 - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 422 - message: Unprocessable Entity - headers: - Date: - - Tue, 14 Jul 2015 22:50:36 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Cache-Control: - - no-cache - X-Request-Id: - - 4fd7d21b69f951c42758aef125a4a688 - X-Runtime: - - '0.283652' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - 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 - GgAA - http_version: - recorded_at: Tue, 14 Jul 2015 22:50:36 GMT -recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Gateway_Braintree/on_a_payment/PayPal/success/can_be_voided.yml b/spec/cassettes/Spree_Gateway_Braintree/on_a_payment/PayPal/success/can_be_voided.yml deleted file mode 100644 index 1e369239..00000000 --- a/spec/cassettes/Spree_Gateway_Braintree/on_a_payment/PayPal/success/can_be_voided.yml +++ /dev/null @@ -1,302 +0,0 @@ ---- -http_interactions: -- request: - method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers - body: - encoding: UTF-8 - string: | - - - John - Doe - blanca@bailey.com - - - John - Doe - 10 Lovely Street - Northwest - Company - Herndon - Alabama - USA - 35005 - - fake-paypal-future-nonce - - true - - - {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Tue, 14 Jul 2015 22:50:32 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - '"1e45a5954ce0900d9e2939e5ffe37e18"' - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - db3985ae0b44242c0d1b7609358f006d - X-Runtime: - - '0.189121' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - H4sIADiSpVUAA6RTS3ObMBC+51cw3LFsYjuuR8Y5dHroOb30klnQGtRKKyqJ - APn1FeBHEnrp5Mb32NVqP8SPnVbRC1onDR3i1WIZR0iFEZLKQ/zj6Vuyi4/Z - HS8a541Gm91FEZci22zT9Xa3XXEWwMAFraiAfBLwa06b/vXPF//Q6rZbp5y9 - VQf3SVrnEwKN2XdTEWdviEFXcEFfDXJ2g4NYGF0D9RFJdYi9bTBmI48apMpy - BVTAYx6+sV8EL2eTMFjqyhDOCk/QzbgWcyf93FtYBI8iAR/5vsZDLAL0UmOc - pcvVJlk+JKv1U5ruN8v9ffqTs1vBWN/U4v/qbwXT+WMQyUmiEu46kpA+KcAK - d24K1kJ/nriGvgaVQFGYhvx7x2CYWSYy0N78RsrK3T21lrMJXbRpp7+AcCEM - PmIHulb4Yd+jU+AJGnW5bm6MQqA4G3bK2Vm8mqWGEpPGqqzyvnZ7xsA59G6R - W5DkLWIZttHCmCwLc2sk/6zRV0Y8K1MaNt1lUVN5RHqR1tBgOTggkZsu/K/X - Ey5nfjLSsccnYx17uCZ3hZW1D0/xH0EGB5sH9ZFzIwlCWAyLm7UJw19f8l8A - AAD//wMABeFuvfwDAAA= - http_version: - recorded_at: Tue, 14 Jul 2015 22:50:32 GMT -- request: - method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions - body: - encoding: UTF-8 - string: | - - - - 2 - bradford.parisian@osinski.name - jane.doe@example.com - - - R685599308 - - - 50.00 - g83nwr - Spree - sale - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Tue, 14 Jul 2015 22:50:33 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - '"4586e0e2b8eb1131f14cbffbd4f1076c"' - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 73b8a4df2f24f6a04f8e1edd650037ff - X-Runtime: - - '0.426921' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - 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 - rcKguQ694Rq9+xsAAP//AwA8qTbcjBQAAA== - http_version: - recorded_at: Tue, 14 Jul 2015 22:50:33 GMT -- request: - method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/79d89t/submit_for_settlement - body: - encoding: UTF-8 - string: | - - - 50.00 - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 200 - message: OK - headers: - Date: - - Tue, 14 Jul 2015 22:50:34 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - '"97cf57d8ee4312aebb8d7ded68ac9a31"' - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - ac74b126821429b88dc72618b574fb51 - X-Runtime: - - '0.344684' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - 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 - AAD//wMA10mcj9IWAAA= - http_version: - recorded_at: Tue, 14 Jul 2015 22:50:34 GMT -recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Gateway_Braintree/on_a_payment/PayPal/success/succeeds.yml b/spec/cassettes/Spree_Gateway_Braintree/on_a_payment/PayPal/success/succeeds.yml deleted file mode 100644 index c15852d1..00000000 --- a/spec/cassettes/Spree_Gateway_Braintree/on_a_payment/PayPal/success/succeeds.yml +++ /dev/null @@ -1,302 +0,0 @@ ---- -http_interactions: -- request: - method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers - body: - encoding: UTF-8 - string: | - - - John - Doe - neoma@kiehn.us - - - John - Doe - 10 Lovely Street - Northwest - Company - Herndon - Alabama - USA - 35005 - - fake-paypal-future-nonce - - true - - - {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Tue, 14 Jul 2015 22:50:31 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - '"c1df133020d7f7da190a97e3308c0d72"' - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - cdf23a075eb2940f9266506963ae15e7 - X-Runtime: - - '0.245171' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - H4sIADeSpVUAA6RTS3ObMBC+51cw3EFgx3XqkXEOnR56Ti+9ZBa0BjXSikgi - Nvn1FeBXSi+dHL/HPrQf8N1Rq+gNrZOGtnGeZnGEVBkhqd7GP5++Jw/xrrjj - Vee80WiLuyjiUhQP63W+zPIlZwEMXNCqBsgnAb+XtOrfX7/69UEfjvcLzm7V - wb2X1vmEQGPxwzTE2Q0x6ArO6JtBzq5wECujW6A+Iqm2sbcdxmzkUYNUBaHR - 8PgisaG0c5xN7KC3jSGcVe3hOOMOWDrp597KIngUCfjI9y1uYxGglxrjYpHl - qyRbJ/n902KxWWWbZfaLs2vBWN+14v/qrwXT/DGFZC9RCXdZSUifVGCFOzUF - a6E/bdxC34JKoKpMR/6jYzDMLBMZaG9ekIov+9fG15xN6KxNN/0NhKkw+IhH - 0K3CNARzc+/RKXAPnTo/tzRGIVBcDDfl7CRezFJDjUlnVdF437oNY+AcepeW - FiR5i1iHaxygHyaxsLdG8s8afWPEszK1YdNb0pbqHdKbtIYGy9YBidIcw8d6 - mXCe+clIxx6fjHXs4brSVVa2PvyH/wgyONg8qL85N5IghMVwuFmbsPzlN/4D - AAD//wMA0dJlXfkDAAA= - http_version: - recorded_at: Tue, 14 Jul 2015 22:50:31 GMT -- request: - method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions - body: - encoding: UTF-8 - string: | - - - - 2 - tabitha_franecki@hansen.name - jane.doe@example.com - - - R000741104 - - - 50.00 - 6fqhtg - Spree - sale - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Tue, 14 Jul 2015 22:50:31 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - '"eb94ddb84e104d419a3f5f2a4cc5852d"' - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 1cedf1f9a23ae4e9c4fe070fe6baa242 - X-Runtime: - - '0.280241' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - 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 - Be11GAzX+N3fAAAA//8DAAd23qiJFAAA - http_version: - recorded_at: Tue, 14 Jul 2015 22:50:31 GMT -- request: - method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/3d768p/submit_for_settlement - body: - encoding: UTF-8 - string: | - - - 50.00 - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 200 - message: OK - headers: - Date: - - Tue, 14 Jul 2015 22:50:32 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - '"c4cd6658428ef2f022ec266cc6b85561"' - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - a9a6adbc5fb1529ea4b3184924b49b17 - X-Runtime: - - '0.311954' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - H4sIADiSpVUAA+xYTXPbNhC951d4dIdJfVl2RmbixG7HnRwySXxoLx6QXImo - SYABQFnqr+8CIClSBGPPtIfMtDdy9wHYXSx2H7B+ty/ysx1IxQS/nkzPw8kZ - 8ESkjG+vJw/ffiGXk3fRm7WWlCuaaERFb87O1iyN5unq4rJcB/hpJEpTXalI - gdY5Dl4HtcDo9KGESNEc1oH9NLKkkhJXOhCmBMEFIXr4ersOhmIDpoWouI6W - 4XkYroP6zygKkElGuSY0SYyQoDWqlIAr+VRmiJApSPPzJQzD1WI6DRfroBVa - 0yRQDSmh+syYez1J8VezAibRLJwuSbgi08W32eztMnw7n/6BRrcD7PiqTF8/ - fobjjwPq0Cgt0Hzz42J9uVpN5+F03kQbpRsmlSacFhD9JjK+DjoCh8hp838r - MB7HX6dORFFSfjjjLL+eaFnBJKg1UFCWRxxEQd8/Mcj4eaXWgZM6xDPEimnw - jC0zwX3yDd2fSs1mHx1dxyw3idM67ZukddGjbP3z6MZ9VRqTBXMkTSUo5QvG - XgNPzeaMQnKR0Jxp3/QStnhkfHESeD5ym+FeezFh5WHcHac2ownNy4zOXoWa - v4TiFe4GS4Y71dkc9GlT8ZQMd+ioUXXiUynpoafEQHZqiW8SW0GgADyxMdVJ - 5sVkrCz/T5afNFm6u1MXM7JhkKfKAehOEZBSSIIxKgVX4HXN4jqu99HRPTaC - HwKaKfq75p/lhxjrxm43HDkUGugWa/kzPaDmT3BZju1BDTd2XUqR4GoYB1rp - TEj2F7VwbzCO4P6K09C0xDHtyEiNiRrdlKjZQeodbRE2gmnKjFUY4yFsYOVO - sMTswwb3F0dgisQgh75UpjXjKq7tjqA03RPX6r0q2ENRNh02FiIHyifRhubK - 0IwW0HR09IIkVDbtU4sn4NHF5numkau4P6eJme8I2oKx8B0JnJMYI7zloGTS - 7WkhuM4i7KKnogHyAFT2gVZSr1Z3TGLKiPZXC2NRJnIbWX9JYAXdAqlkHmVa - l+ptEFCFZVedx5Iybo5CncPnWAuDkh5MNX4sAJM0fczFVgQVf+LimZ+XfPsO - +I5JwQ3mWlGexmKPPKVdoi5hEkqK5OXBDTQ55wROnQHNdYaWwxHRkTlQCjHT - R737rVWVxH3DxNtWuaFSHdSppi3yhiAymh+hHVltND1IkXcQjaAOo1IVljls - U/zpiOlJ+2VTbIjRUp5Ad9WhsomZSKvEEtdO2FqZA1Wcfa+gPkMoxl1gWGwH - x8kcTuCFICp9Gjk0rb5mZ/1DUzN8kjFMQXnodfi2P1oE4ET1xpiThsQXFUX5 - SjLd4tsZ6ptEUyRNxTpeLixi7H7gIqSQYaYF5VvAQu8uB1bWWtghJEpgbYKI - lgwtGcqdn8HQ0X/u++xHvqsqLpjG9H3cCPl4pEj/wUh4Lpg/heetpD4grtPl - 1E9yq1glkpWjJLijb/uSpeCkRNIlUoI8k5gges75CRLNktqLRZNP1jHtnmBn - 9/D3lClbqrw6cLOIpk+NNJ6x2yH2iaFt/UmRHZu3AfRrpHq1etfx8erPIY++ - ur1uft0FQ+4MS9kAjPELs7J4Jm5DB1qMRFxJ5e4oKWi8F6umD/VU/u3pXHD8 - y/cxgxeRV8Jhb5zGJiz9ZpjbGCYr0nLfhFWSeO4vuCkjvhvPy0qDLztqAkEY - R5pd2U/7DITykuaP9fvMOhjD9Ulsx9c+112cMOFR4MvzWfb7UXC8QxZ9gjyK - trQ0w2QjeOJMKgL6sRFD7mudfpGFIgzbuXtzsd/vYY/VMAdDyWyoWnU7wAUv - jT7f/E5WV1Mazi+XF1fLZEkv43hJN3R5texEuWEQ/csHir/efLojaRzHyfSC - XqV0BRcxDhzg/i0y6ULyei6JxK/aGgNu7z48/Eri+WqzjBd0s7iaWlbolMc4 - gguUjyp3Lqe+cmWj7CJ69+Xx/pYsruByPl3OIJ7Fq6WpLC2mO2TwODcQd9En - D3WnwuaI5zmKMRN1faus+9/dp/tf7z98usNiPgZp7gWltmmZRh9vPn97+HKH - HmFpPIqbZ4iR952TNnmsn1F4vgz7vbKj9I8cef99GWbLUHOKegOiN38DAAD/ - /wMA/hO/188WAAA= - http_version: - recorded_at: Tue, 14 Jul 2015 22:50:32 GMT -recorded_with: VCR 2.9.3 diff --git a/spec/spree/gateway/braintree_spec.rb b/spec/solidus/gateway/braintree_spec.rb similarity index 98% rename from spec/spree/gateway/braintree_spec.rb rename to spec/solidus/gateway/braintree_spec.rb index ec2510c5..2497f346 100644 --- a/spec/spree/gateway/braintree_spec.rb +++ b/spec/solidus/gateway/braintree_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe Spree::Gateway::Braintree, :vcr do +describe Solidus::Gateway::BraintreeGateway, :vcr do let(:payment_method){ @braintree_payment_method } let(:user){ FactoryGirl.create :user } let(:address){ FactoryGirl.create :address } @@ -8,7 +8,7 @@ let(:card){ payment_method.create_profile_from_nonce(user, address, nonce, { device_data: device_data }) } before do - @braintree_payment_method = Spree::Gateway::Braintree.create!( + @braintree_payment_method = Solidus::Gateway::BraintreeGateway.create!( name: 'Braintree Gateway', environment: 'sandbox', active: true From 2618120400bae5f7ba2ea43d1b5353a821c93d48 Mon Sep 17 00:00:00 2001 From: Jack Chu Date: Wed, 15 Jul 2015 13:14:02 -0400 Subject: [PATCH 005/163] remove old gateway file from before it was renamed --- app/models/spree/gateway/braintree_gateway.rb | 246 ------------------ 1 file changed, 246 deletions(-) delete mode 100644 app/models/spree/gateway/braintree_gateway.rb diff --git a/app/models/spree/gateway/braintree_gateway.rb b/app/models/spree/gateway/braintree_gateway.rb deleted file mode 100644 index 4f0c66d3..00000000 --- a/app/models/spree/gateway/braintree_gateway.rb +++ /dev/null @@ -1,246 +0,0 @@ -require "braintree" - -module Solidus - class Gateway::BraintreeGateway < ::Spree::Gateway - preference :environment, :string - preference :merchant_id, :string - preference :public_key, :string - preference :private_key, :string - - CARD_TYPE_MAPPING = { - 'American Express' => 'american_express', - 'Diners Club' => 'diners_club', - 'Discover' => 'discover', - 'JCB' => 'jcb', - 'Laser' => 'laser', - 'Maestro' => 'maestro', - 'MasterCard' => 'master', - 'Solo' => 'solo', - 'Switch' => 'switch', - 'Visa' => 'visa' - } - - ENVIRONMENTS = { - 'development' => :development, - 'qa' => :qa, - 'sandbox' => :sandbox, - 'production' => :production - } - - def gateway_options - { - environment: ENVIRONMENTS.fetch(preferred_environment), - merchant_id: preferred_merchant_id, - public_key: preferred_public_key, - private_key: preferred_private_key, - logger: ::Braintree::Configuration.logger.clone - } - end - - def braintree_gateway - @braintree_gateway ||= ::Braintree::Gateway.new(gateway_options) - end - - def payment_profiles_supported? - true - end - - def generate_client_token(options = {}) - braintree_gateway.client_token.generate(options) - end - - def create_profile_from_nonce(user, address, nonce, options = {}) - params = { - first_name: address.firstname, - last_name: address.lastname, - email: user.email, - credit_card: { - billing_address: map_address(address), - payment_method_nonce: nonce, - options: { - verify_card: true - }, - } - } - - params.merge!(options) - - result = braintree_gateway.customer.create(params) - - if result.success? - card = result.customer.payment_methods.last - - user.credit_cards.create! do |solidus_cc| - if card.is_a?(::Braintree::PayPalAccount) - solidus_cc.cc_type = 'paypal' - solidus_cc.name = card.email - else - solidus_cc.name = "#{address.firstname} #{address.lastname}" - solidus_cc.cc_type = card.card_type.downcase - solidus_cc.month = card.expiration_month - solidus_cc.year = card.expiration_year - solidus_cc.last_digits = card.last_4 - end - solidus_cc.payment_method = self - solidus_cc.gateway_customer_profile_id = customer_id(user) - solidus_cc.gateway_payment_profile_id = card.token - end - else - raise Core::GatewayError, result.message - end - end - - def supports?(payment) - true - end - - def provider_class - self - end - - def authorize(cents, creditcard, options) - result = braintree_gateway.transaction.sale(transaction_authorize_or_purchase_params(cents, creditcard, options)) - handle_result(result) - end - - def purchase(cents, creditcard, options) - params = transaction_authorize_or_purchase_params(cents, creditcard, options) - params[:options][:submit_for_settlement] = true - result = braintree_gateway.transaction.sale(params) - handle_result(result) - end - - def capture(money, authorization_code, options = {}) - result = braintree_gateway.transaction.submit_for_settlement(authorization_code, amount(money)) - handle_result(result) - end - - def void(authorization_code, source = {}, options = {}) - result = braintree_gateway.transaction.void(authorization_code) - - handle_result(result) - end - - def credit(cents, source, authorization_code, options = {}) - result = braintree_gateway.transaction.refund(authorization_code, amount(cents)) - handle_result(result) - end - - def voidable?(response_code) - transaction = braintree_gateway.transaction.find(response_code) - [ - ::Braintree::Transaction::Status::SubmittedForSettlement, - ::Braintree::Transaction::Status::Authorized, - ].include?(transaction.status) - end - - private - def customer_id(user) - "user_#{user.id}" - end - - def message_from_result(result) - if result.success? - "OK" - elsif result.errors.count == 0 && result.credit_card_verification - "Processor declined: #{result.credit_card_verification.processor_response_text} (#{result.credit_card_verification.processor_response_code})" - elsif result.errors.count == 0 && result.transaction - result.transaction.status - else - result.errors.map { |e| "#{e.message} (#{e.code})" }.join(" ") - end - end - - def handle_result(result) - ActiveMerchant::Billing::Response.new( - result.success?, - message_from_result(result), - {}, - { authorization: (result.transaction.id if result.success?) } - ) - end - - def map_address(addr) - { - first_name: addr.firstname, - last_name: addr.lastname, - street_address: addr.address1, - extended_address: addr.address2, - company: addr.company, - locality: addr.city, - region: addr.state ? addr.state.name : addr.state_name, - country_code_alpha3: addr.country.iso3, - postal_code: addr.zipcode - } - end - - def amount(cents) - sprintf("%.2f", cents.to_f / 100) - end - - def transaction_authorize_or_purchase_params(cents, creditcard, options = {}) - params = options.select {|k| %i[ - billing - billing_address_id - channel - custom_fields - customer - customer_id - descriptor - device_data - device_session_id - merchant_account_id - options - order_id - purchase_order_number - recurring - service_fee_amount - shipping - shipping_address_id - tax_amount - tax_exempt - ].include?(k)} - - params[:options] ||= {} - - params[:amount] = amount(cents) - - if params[:payment_method_nonce].nil? - params[:payment_method_token] = creditcard.gateway_payment_profile_id - params.delete(:billing_address) - end - - # if has profile, set the customer_id to the profile_id and delete the customer key - if creditcard.respond_to?(:gateway_customer_profile_id) && creditcard.gateway_customer_profile_id - params[:customer_id] = creditcard.gateway_customer_profile_id - params.delete(:customer) - # if no profile, define the customer key, delete the customer_id because they are - # mutually exclusive - else - params[:customer] = { - id: params[:customer_id], - email: options[:customer], - first_name: creditcard.first_name, - last_name: creditcard.last_name, - } - params.delete(:customer_id) - end - - # delete the shipping price in options - params.delete(:shipping) - - # if there's a shipping_address/billing_address, set it to the shipping/billing key - # and convert the address into a format Braintree understands - if params[:shipping_address] - params[:shipping] = map_address(params.delete(:shipping_address)) - end - if params[:billing_address] - params[:billing] = map_address(params.delete(:billing_address)) - end - - params[:channel] ||= "Solidus" - - params - end - end -end From 6634d54c5d38d67c8aa63e2d4817817e726f89d4 Mon Sep 17 00:00:00 2001 From: Jack Chu Date: Wed, 15 Jul 2015 13:49:28 -0400 Subject: [PATCH 006/163] move requiring the payment concern into a decorator --- app/models/concerns/payment_braintree_nonce_concern.rb | 2 -- app/models/payment_decorator.rb | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) create mode 100644 app/models/payment_decorator.rb diff --git a/app/models/concerns/payment_braintree_nonce_concern.rb b/app/models/concerns/payment_braintree_nonce_concern.rb index 15ba2a49..0803fb4f 100644 --- a/app/models/concerns/payment_braintree_nonce_concern.rb +++ b/app/models/concerns/payment_braintree_nonce_concern.rb @@ -18,5 +18,3 @@ def create_payment_profile end end end - -Spree::Payment.include SolidusBraintree::PaymentBraintreeNonceConcern diff --git a/app/models/payment_decorator.rb b/app/models/payment_decorator.rb new file mode 100644 index 00000000..b40be741 --- /dev/null +++ b/app/models/payment_decorator.rb @@ -0,0 +1 @@ +Spree::Payment.include SolidusBraintree::PaymentBraintreeNonceConcern From a4d21d345139db2469c9a8a0cc7c9a75f6988116 Mon Sep 17 00:00:00 2001 From: Allie Larson Date: Wed, 15 Jul 2015 13:55:50 -0400 Subject: [PATCH 007/163] decorators are loaded in engine --- .../payment_braintree_nonce_concern.rb | 26 +++++++++---------- lib/solidus_braintree/engine.rb | 8 ++++++ 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/app/models/concerns/payment_braintree_nonce_concern.rb b/app/models/concerns/payment_braintree_nonce_concern.rb index 0803fb4f..06e42a52 100644 --- a/app/models/concerns/payment_braintree_nonce_concern.rb +++ b/app/models/concerns/payment_braintree_nonce_concern.rb @@ -1,20 +1,18 @@ -module SolidusBraintree - module PaymentBraintreeNonceConcern - extend ActiveSupport::Concern - included do - attr_accessor :payment_method_nonce +module PaymentBraintreeNonceConcern + extend ActiveSupport::Concern + included do + attr_accessor :payment_method_nonce - prepend(InstanceMethods) - end + prepend(InstanceMethods) + end - module InstanceMethods - def create_payment_profile - return unless source.respond_to?(:has_payment_profile?) && !source.has_payment_profile? + module InstanceMethods + def create_payment_profile + return unless source.respond_to?(:has_payment_profile?) && !source.has_payment_profile? - payment_method.create_profile_from_nonce(self.order.user, self.order.bill_address, self.payment_method_nonce) - rescue ActiveMerchant::ConnectionError => e - gateway_error e - end + payment_method.create_profile_from_nonce(self.order.user, self.order.bill_address, self.payment_method_nonce) + rescue ActiveMerchant::ConnectionError => e + gateway_error e end end end diff --git a/lib/solidus_braintree/engine.rb b/lib/solidus_braintree/engine.rb index 56cb36b9..8f7d5300 100644 --- a/lib/solidus_braintree/engine.rb +++ b/lib/solidus_braintree/engine.rb @@ -7,5 +7,13 @@ class Engine < Rails::Engine initializer "spree.gateway.payment_methods", after: "spree.register.payment_methods" do |app| app.config.spree.payment_methods << Solidus::Gateway::BraintreeGateway end + + def self.activate + Dir.glob(File.join(File.dirname(__FILE__), "../../app/**/*_decorator*.rb")) do |c| + Rails.configuration.cache_classes ? require(c) : load(c) + end + end + + config.to_prepare &method(:activate).to_proc end end From 7abef51cf5253c1a0dccd762ab0212bbdc5f3f4d Mon Sep 17 00:00:00 2001 From: Jack Chu Date: Wed, 15 Jul 2015 14:30:21 -0400 Subject: [PATCH 008/163] fix specs with the new engine loading the decorators, add trailing commas --- .../solidus/gateway/braintree_gateway.rb | 36 +++++++++---------- spec/spec_helper.rb | 4 +-- 2 files changed, 19 insertions(+), 21 deletions(-) diff --git a/app/models/solidus/gateway/braintree_gateway.rb b/app/models/solidus/gateway/braintree_gateway.rb index bce15c5d..0de18161 100644 --- a/app/models/solidus/gateway/braintree_gateway.rb +++ b/app/models/solidus/gateway/braintree_gateway.rb @@ -17,14 +17,14 @@ class Gateway::BraintreeGateway < ::Spree::Gateway 'MasterCard' => 'master', 'Solo' => 'solo', 'Switch' => 'switch', - 'Visa' => 'visa' + 'Visa' => 'visa', } ENVIRONMENTS = { 'development' => :sandbox, 'qa' => :sandbox, 'sandbox' => :sandbox, - 'production' => :production + 'production' => :production, } def gateway_options @@ -33,7 +33,7 @@ def gateway_options merchant_id: preferred_merchant_id, public_key: preferred_public_key, private_key: preferred_private_key, - logger: ::Braintree::Configuration.logger.clone + logger: ::Braintree::Configuration.logger.clone, } end @@ -58,9 +58,9 @@ def create_profile_from_nonce(user, address, nonce, options = {}) billing_address: map_address(address), payment_method_nonce: nonce, options: { - verify_card: true + verify_card: true, }, - } + }, } params.merge!(options) @@ -70,20 +70,20 @@ def create_profile_from_nonce(user, address, nonce, options = {}) if result.success? card = result.customer.payment_methods.last - user.credit_cards.create! do |spree_cc| + user.credit_cards.create! do |solidus_cc| if card.is_a?(::Braintree::PayPalAccount) - spree_cc.cc_type = 'paypal' - spree_cc.name = card.email + solidus_cc.cc_type = 'paypal' + solidus_cc.name = card.email else - spree_cc.name = "#{address.firstname} #{address.lastname}" - spree_cc.cc_type = card.card_type.downcase - spree_cc.month = card.expiration_month - spree_cc.year = card.expiration_year - spree_cc.last_digits = card.last_4 + solidus_cc.name = "#{address.firstname} #{address.lastname}" + solidus_cc.cc_type = card.card_type.downcase + solidus_cc.month = card.expiration_month + solidus_cc.year = card.expiration_year + solidus_cc.last_digits = card.last_4 end - spree_cc.payment_method = self - spree_cc.gateway_customer_profile_id = customer_id(user) - spree_cc.gateway_payment_profile_id = card.token + solidus_cc.payment_method = self + solidus_cc.gateway_customer_profile_id = customer_id(user) + solidus_cc.gateway_payment_profile_id = card.token end else raise ::Spree::Core::GatewayError, result.message @@ -170,7 +170,7 @@ def map_address(addr) locality: addr.city, region: addr.state ? addr.state.name : addr.state_name, country_code_alpha3: addr.country.iso3, - postal_code: addr.zipcode + postal_code: addr.zipcode, } end @@ -238,7 +238,7 @@ def transaction_authorize_or_purchase_params(cents, creditcard, options = {}) params[:billing] = map_address(params.delete(:billing_address)) end - params[:channel] ||= "Spree" + params[:channel] ||= "Solidus" params end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index e0795b98..d461ed1a 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -3,7 +3,7 @@ ENV["RAILS_ENV"] = "test" -require File.expand_path("../dummy/config/environment.rb", __FILE__) +require_relative "dummy/config/environment.rb" require 'rspec/rails' require 'database_cleaner' @@ -15,8 +15,6 @@ require 'spree/testing_support/order_walkthrough' require 'spree/testing_support/preferences' -require_relative "../app/models/concerns/payment_braintree_nonce_concern" - FactoryGirl.find_definitions VCR.configure do |c| From 0ac6363021c43d2328e07a481e0719d54c81c404 Mon Sep 17 00:00:00 2001 From: Jack Chu Date: Wed, 15 Jul 2015 18:45:44 -0400 Subject: [PATCH 009/163] Rename create_profile_from_nonce to create_profile to avoid overriding it in a decorator Use customer.id as the gateway_customer_profile_id --- .../concerns/payment_braintree_nonce_concern.rb | 7 ------- app/models/solidus/gateway/braintree_gateway.rb | 17 ++++++++--------- 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/app/models/concerns/payment_braintree_nonce_concern.rb b/app/models/concerns/payment_braintree_nonce_concern.rb index 06e42a52..841c3c2e 100644 --- a/app/models/concerns/payment_braintree_nonce_concern.rb +++ b/app/models/concerns/payment_braintree_nonce_concern.rb @@ -7,12 +7,5 @@ module PaymentBraintreeNonceConcern end module InstanceMethods - def create_payment_profile - return unless source.respond_to?(:has_payment_profile?) && !source.has_payment_profile? - - payment_method.create_profile_from_nonce(self.order.user, self.order.bill_address, self.payment_method_nonce) - rescue ActiveMerchant::ConnectionError => e - gateway_error e - end end end diff --git a/app/models/solidus/gateway/braintree_gateway.rb b/app/models/solidus/gateway/braintree_gateway.rb index 0de18161..14ae27a0 100644 --- a/app/models/solidus/gateway/braintree_gateway.rb +++ b/app/models/solidus/gateway/braintree_gateway.rb @@ -49,22 +49,25 @@ def generate_client_token(options = {}) braintree_gateway.client_token.generate(options) end - def create_profile_from_nonce(user, address, nonce, options = {}) + def create_profile(payment) + return if payment.source.gateway_customer_profile_id.present? || payment.payment_method_nonce.nil? + + user = payment.order.user + address = payment.order.bill_address + params = { first_name: address.firstname, last_name: address.lastname, email: user.email, credit_card: { billing_address: map_address(address), - payment_method_nonce: nonce, + payment_method_nonce: payment.payment_method_nonce, options: { verify_card: true, }, }, } - params.merge!(options) - result = braintree_gateway.customer.create(params) if result.success? @@ -82,7 +85,7 @@ def create_profile_from_nonce(user, address, nonce, options = {}) solidus_cc.last_digits = card.last_4 end solidus_cc.payment_method = self - solidus_cc.gateway_customer_profile_id = customer_id(user) + solidus_cc.gateway_customer_profile_id = result.customer.id solidus_cc.gateway_payment_profile_id = card.token end else @@ -135,10 +138,6 @@ def voidable?(response_code) end private - def customer_id(user) - "user_#{user.id}" - end - def message_from_result(result) if result.success? "OK" From 7ab6b48b4c06677e9811ff47cfad10e0264423db Mon Sep 17 00:00:00 2001 From: Jack Chu Date: Thu, 16 Jul 2015 13:25:11 -0400 Subject: [PATCH 010/163] create_profile now updates the credit card instead of creating a new one it also checks for a nonce and customer profile id fixed specs --- .../solidus/gateway/braintree_gateway.rb | 11 +- .../Credit_Card/decline/fails.yml | 223 ---------- .../should_have_the_correct_attributes.yml | 116 ----- .../Credit_Card/successful/succeeds.yml | 320 -------------- .../can_be_fully_credited.yml | 389 ---------------- .../with_completed_payment/can_be_voided.yml | 415 ----------------- ...fails_capture_with_settlement_declined.yml | 204 ++++----- .../should_have_the_correct_attributes.yml | 36 +- .../succeeds_authorization_and_capture.yml | 202 ++++----- .../should_raise_exception.yml | 39 +- .../fails.yml | 36 +- .../decline/fails.yml | 225 ++++++++++ .../should_have_the_correct_attributes.yml | 116 +++++ .../successful/succeeds.yml | 322 ++++++++++++++ .../can_be_fully_credited.yml | 390 ++++++++++++++++ .../with_completed_payment/can_be_voided.yml | 416 ++++++++++++++++++ .../on_a_payment/PayPal/failure/fails.yml | 310 ++++++++----- .../PayPal/success/can_be_voided.yml | 309 ++++++++----- .../on_a_payment/PayPal/success/succeeds.yml | 308 ++++++++----- spec/solidus/gateway/braintree_spec.rb | 144 +++--- 20 files changed, 2416 insertions(+), 2115 deletions(-) delete mode 100644 spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/decline/fails.yml delete mode 100644 spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/should_have_the_correct_attributes.yml delete mode 100644 spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/successful/succeeds.yml delete mode 100644 spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/with_completed_payment/can_be_fully_credited.yml delete mode 100644 spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/with_completed_payment/can_be_voided.yml rename spec/cassettes/Solidus_Gateway_BraintreeGateway/{Credit_Card/invalid_email => a_customer_profile/with_a_user_with_an_invalid_email}/fails.yml (63%) create mode 100644 spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/decline/fails.yml create mode 100644 spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/should_have_the_correct_attributes.yml create mode 100644 spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/successful/succeeds.yml create mode 100644 spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_completed_payment/can_be_fully_credited.yml create mode 100644 spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_completed_payment/can_be_voided.yml diff --git a/app/models/solidus/gateway/braintree_gateway.rb b/app/models/solidus/gateway/braintree_gateway.rb index 14ae27a0..d9b11247 100644 --- a/app/models/solidus/gateway/braintree_gateway.rb +++ b/app/models/solidus/gateway/braintree_gateway.rb @@ -50,7 +50,9 @@ def generate_client_token(options = {}) end def create_profile(payment) - return if payment.source.gateway_customer_profile_id.present? || payment.payment_method_nonce.nil? + source = payment.source + + return if source.gateway_customer_profile_id.present? || payment.payment_method_nonce.nil? user = payment.order.user address = payment.order.bill_address @@ -60,6 +62,7 @@ def create_profile(payment) last_name: address.lastname, email: user.email, credit_card: { + cardholder_name: source.name, billing_address: map_address(address), payment_method_nonce: payment.payment_method_nonce, options: { @@ -72,13 +75,12 @@ def create_profile(payment) if result.success? card = result.customer.payment_methods.last - - user.credit_cards.create! do |solidus_cc| + source.tap do |solidus_cc| if card.is_a?(::Braintree::PayPalAccount) solidus_cc.cc_type = 'paypal' solidus_cc.name = card.email else - solidus_cc.name = "#{address.firstname} #{address.lastname}" + solidus_cc.name = card.cardholder_name solidus_cc.cc_type = card.card_type.downcase solidus_cc.month = card.expiration_month solidus_cc.year = card.expiration_year @@ -88,6 +90,7 @@ def create_profile(payment) solidus_cc.gateway_customer_profile_id = result.customer.id solidus_cc.gateway_payment_profile_id = card.token end + source.save! else raise ::Spree::Core::GatewayError, result.message end diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/decline/fails.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/decline/fails.yml deleted file mode 100644 index c859bb48..00000000 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/decline/fails.yml +++ /dev/null @@ -1,223 +0,0 @@ ---- -http_interactions: -- request: - method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers - body: - encoding: UTF-8 - string: | - - - John - Doe - amos@zulauf.info - - - John - Doe - 10 Lovely Street - Northwest - Company - Herndon - Alabama - USA - 35005 - - fake-valid-nonce - - true - - - {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Wed, 15 Jul 2015 16:03:13 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - '"8b6591be0967bc08bedda0f043f8fdcb"' - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 1cc37d590e85c8055c127c77aaf8897c - X-Runtime: - - '1.826309' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - H4sIAEGEplUAA7RYWW/jNhB+319h+F2R5GPjBIrSYIui6LHAYpMW3ZcFJY1t - NhKpJSknzq/vkLooy7fTh8DhzDfUkHN9UnD/mqWDFQhJObsb+lfecAAs5gll - i7vh0+Mvzmx4H34I4kIqnoEIPwwGAU3CsefPrv3pJHBxoWWoi5eEKQfXbxGb - rt9+3Kjrl+zldTIKXFur0XMqpHIYySD8jS9Z4FoCrU9JvfqZQ+C2S62MeZYT - th4wmt4NlShg6Bo5ZISmIcm4/OmtSEkxv6JszgO3lGtEvuQMenZz8tqTvUAk - qepjYwFEQeIQNVDrHO6GCS4VzWAYjjx/6njXjj999D/eeuNbf/QtcFsDY1/k - yWn2rUH5fBMHZ04hTWTjUkKVExORyGpTIgRZD7W2qy8lKItommKEHZIkAqSs - 5WVsV6s6qpWsDr7TCbwtbbEHIluh9sW3fmgZ5fBT+YvPqwQtRCoBoJpD+N7g - D76CdD34ahSBuwFoLeFVAUv0tVaqz1yo5QtINOrpLLd5TFKq1uGvIFjC8XSN - pAUJWGAthQ8piUhGArdat4CcS0VSB4sMwvHU86aBa4vsKyiYEmsjdkiaL8ko - fPqqb6Iv32c1RquHbWbjXWaswMDSOJxNvA27WtM3NPF7Ylg1CQYAk1YO+Hzw - YOCk3WUzzJcVVLXLhWVl9nB3FAUWCwsnnj+azTSmiWSgK8rRjwv/olKfsFnb - iCVPEywSfezNblLnue6OlKR4ec+MvzCT6rWshZXXx+cOlbIgLIZuVG1FY3T5 - 5R5f/C1SF4XSOW+StSet8QlEVLWHLpetck6KtPY74jwFwoahvjwNNcoWXAgM - jIOVhn0f/bc23dTUJvCaU2H8cTLO1DL0R7r0N4Rb0GsgAm9v5HXgRtpBYxVs - +D4nqYTKyvJkCSRVS0wVaN22ZDWMZmQBTiHScKlULm9dl0gJSl5FglCmG90C - D/hC1leYPW5O1hkw9T0DteTJ95QvuLvCLL3K2eIe2IoKzjTgThKWRPwVO36z - f/NETCddDxFhz61rHWkNNQ18EvqzmV9180mjQ1cET63srgUNQEBOMI8+46yu - /691sohkLGiuL7k73doKUvwZWHgzzhfzLHDLVa0rGP1RmK4VmWTFI1McniKc - JOPJNL6GSeT716MxSUYwn0+j5JpEno9/2CJ2mTZ7v0PTWQHLuCOT5x3J0ugt - C4FulKW0bd73QK3YjEyiChmWekj0iDQCGxOvVlgwMsf9oRxJf2IZ94S2CVlJ - B4TgoovZ1vAavDXz+o/bD9jcqjvnt++2F2NvWJURIv6F2BQ3NkXJ2c7DNOSW - xKYZ654oMZHB4r2WyjbNBY/Rm817QyrjeboYtmsP7KCQwYQPOWpWOsK7EPYu - 6Nbohk1Xsy7za5miLTuW5RnkYaZX5txBtlel75mMz1ifx/rKYxzB/AzwEPsr - g3YkA6yu5gJ+ZfGabo33XwoqzZ5u2qTEVj5kB3z7KKiffYg3NeE6YUT3bQ4P - 6tqf03iLdYoD3K5C/o8zqM6n3RO0QhxHMirwPmJWQ05mXPW1HUV363MdoA4V - 7Hii0jhxOplurponRWwaeetVK+sU3o4iO42W+zveed6HgJh9BJXPDmrI5r0i - 4//298T79PHL4z+/92aDyZSYStPvynGjk6WSdG5iyxM0t+mTlK606sK9m+wI - DCio2jZs/QSy+UbX+8hxwlvOEaPv4NA7OO7OHXRnjbgjhtuBsXbkQDvng8ZZ - nzPO/Jhxyah9l3ftiwsaqW4b22YBuGyTOfzwHwAAAP//AwA1BPVx9RUAAA== - http_version: - recorded_at: Wed, 15 Jul 2015 16:03:13 GMT -- request: - method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions - body: - encoding: UTF-8 - string: | - - - - - 2001.00 - 93pgfm - - - - John - Doe - - Spree - sale - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 422 - message: Unprocessable Entity - headers: - Date: - - Wed, 15 Jul 2015 16:03:14 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Cache-Control: - - no-cache - X-Request-Id: - - 66c852a1b69d796d08b6db292d6b0ccf - X-Runtime: - - '0.647884' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - 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 - http_version: - recorded_at: Wed, 15 Jul 2015 16:03:14 GMT -recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/should_have_the_correct_attributes.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/should_have_the_correct_attributes.yml deleted file mode 100644 index 96e3e0e3..00000000 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/should_have_the_correct_attributes.yml +++ /dev/null @@ -1,116 +0,0 @@ ---- -http_interactions: -- request: - method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers - body: - encoding: UTF-8 - string: | - - - John - Doe - marquis@bahringer.biz - - - John - Doe - 10 Lovely Street - Northwest - Company - Herndon - Alabama - USA - 35005 - - fake-valid-nonce - - true - - - {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Wed, 15 Jul 2015 16:03:02 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - '"6ad773bea56d93dce2975d257c664b30"' - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 7e690e1feee25a5ff21b404f20951f2c - X-Runtime: - - '1.635009' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - H4sIADaEplUAA7RYW2/bNhR+768w/K5I8qVxCkVdumEYhq3A0HYD+lJQ4nHM - RSJVkvIlv36H1I2y7PiS7iFweM53KPJcPyl6v82z0RqkYoLfj8ObYDwCngrK - +OP9+MvnX73F+H38JkpLpUUOMn4zGkWMxou7u7vJ5C6MfFwYGerSFeHaw/Vz - wue75+93+naTb7azSeS7WoNeMqm0x0kO8e9ixSPfERh9RprVLwIiv1saZSry - gvDdiLPsfqxlCWPfyiEnLItzIr+XTP2UkJXES4C8Sdhz5FdKAytWgsPAeEm2 - A9kGEsX0EJtKIBqoR/RI7wq4H1NcapbDOJ4E4dwLbr1w/jl8+y6YvgvCr5Hf - GVj7sqCX2XcG1fNtMLwlg4yq9kiUaS8lkqp6UyIl2Y2Ntq+vJChLWJahhzxC - qQSlGnkV4CfdhLaWNRng9aLvSjvsifDWqJeC3Dy0CnX8c/WLz6sFHURpCaDb - S4TB6A+xhmw3+mQVkb8H6Cxhq4FT49Za9VFIvdqAQqOBzjm2SEnG9C7+DSSn - Am/XSjqQhEcsqPghIwnJSeTX6w5QCKVJ5mGlQTydB8E88l2R64KSa7mzYo9k - xYpM4i+fjCeG8pespmj1cMhsesyMlxhYlsaLWbBn12iGhjZ+XzhWDcUAYNKq - kViOHiycdLvsh/l1BVXv8sqysnv4R4oCi4XHsyCcLBYG00YyMhXlmcfFfzNl - btiuXcRKZBSLxFx7v5s0eW5aJCMZOu+Jiw23qd7IOljlPrH0mFIl4Sn0o+oq - WqPXO/f84u+Qpii0yXmbrANpg6eQMN1dulp2yiUps+bciRAZED6OjfMM1Co7 - cCkxMB5WWpmZ8zub7msaE9gWTNrzeLngehWHE1P6e8ID6B0Qid6bBD24lfbQ - WAV7Z1+STEFt5ZxkBSTTK0wV6I7tyBoYy8kjeKXM4pXWhXrn+0Qp0OomkYRx - 0+ge8YIbsrvB7PELssuB62856JWg3zLxKPw1ZulNwR/fA18zKbgB3CvCaSK2 - 2PHb/dsnYjqZekgIf+qO1pM2UNvAZ3G4WIR1N5+1OjyKFJmT3Y2gBUgoCObR - R4G6+v9Gp8pEpZIVxsn96dZVkBZPwOPb+XS7xBhWq0ZXcva9tF0rscmKV2Y4 - PGU8o9PZPL2FWRKGt5MpoRNYLucJvSVJEOIftohjpu3eP6DprIHnwlP06Uiy - tHrHQuIxqlI6NO8HoE5sRybRpYorPVAzIq3AxaTrNRaMKnB/qEbSn1jGA6Fr - QtbKAymF7GMONbwW78y84eNeBuxv1Z/zh3d7EeNuWJcRIv6F1BY3NkUl+NHL - tAyXpLYZm56oMJHBIb+OyjUtpEjxNPt+QyoTBKYYDmtP7KCRwcQPBWrWJsLH - EO4ueCx6Rze66DO/jim6snNZnkWeZnpVzp1ke3X6Xsn4rPV1rK+6xhnMzwJP - sb8qaGcywNo1r+BXDq/p1/jwpaDWvNBN25Q4yIfcgB8eBc2zT/GmNlwXjOih - zelB3ZznMt7i3OIEt6uR/+MMavLp+AStEeeRjBr8EjFrIBczrsZtZ9Hd5l4n - qEMNO5+otIe4nEy3rha0TG0j707VyXqFd6TILqPlwZF3nh9DQOw+kqknDzVk - 3680nn79ZxbMP/319sOHt/uzwWZKypTtd9W4MclSS3qeOPAEw22GJKUvrbvw - wJM9gQVFdduGg59A9t/oBh85LnjLOWP0nRx6J8fdtYPuqhF3xnA7MdbOHGjX - fNC46nPGlR8zXjNqf8i79qsLGqluF9t2Abjskjl+8x8AAAD//wMAqp0Sr/oV - AAA= - http_version: - recorded_at: Wed, 15 Jul 2015 16:03:02 GMT -recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/successful/succeeds.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/successful/succeeds.yml deleted file mode 100644 index c19b048e..00000000 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/successful/succeeds.yml +++ /dev/null @@ -1,320 +0,0 @@ ---- -http_interactions: -- request: - method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers - body: - encoding: UTF-8 - string: | - - - John - Doe - anthony@olson.biz - - - John - Doe - 10 Lovely Street - Northwest - Company - Herndon - Alabama - USA - 35005 - - fake-valid-nonce - - true - - - {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Wed, 15 Jul 2015 16:03:04 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - '"0e2184b8b9437548237e19899f791fbf"' - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 8533a32bb9dab949e4c8bcd566804b68 - X-Runtime: - - '2.267814' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - H4sIADiEplUAA7RYS3PbNhC+51dodKdJSpStZmi6nmY6nU6bi5N2JpcMSK4k - xCRAA6As+dd3Ab5AUW+nh4yD3W+BBfb1UeHDJs9GaxCScnY/9m+88QhYwlPK - lvfjr19+d+bjh+hDmJRS8RxE9GE0CmkaTfzb2yCY34YuLrQMdcmKMOXg+i1m - s+3byy/q7jV/3QST0LW1Gr2gQiqHkRyiP/mKha4l0PqMNKtPHEK3W2plwvOC - sO2I0ex+rEQJY9fIISc0i/CUFWfbX3kmObuJ6VvoVgoNKVAFA8MF2QxkrxBL - qobYRABRkDpEjdS2gPtxiktFcxhHE8+fOd6d48+++LcfvelHL/gWup2BsS+L - 9DL7zqA63wTCWVDIUtm6lFLlJESkst6UCEG2Y63t6ysJymKaZRhih6SpACkb - eRXcl6AJay1rou/0Im9LO+yJ0NaoYwFuDq3CHP1W/cXzakEHkUoAqPYSvjf6 - i68h246ejCJ0dwCdJWwUsFQ/a636zIVavYJEo4HOcpsnJKNqG/0BgqUcb9dK - OpCAJRZT9JiRmOQkdOt1Byi4VCRzsMogms48bxa6tsh+gpIpsTVih2TFikyi - r0/6JYbyY1ZTtHrcZzY9ZMZKDCxNonng7dg1mqGhid9XhlWTYgAwaeWIL0aP - Bk66XXbD/L6Cqnd5Z1mZPdwDRYHFwqLA8yfzuca0kQx1RTn6uOgfKvUN27WN - WPEsxSLR197tJk2e6/ZISYaP98z4KzOp3sg6WPV8fOFQKUvCEuhH1Va0Ru9/ - 3POLv0PqolA6502yDqQNPoWYqu7S1bJTLkiZNX7HnGdA2DjSj6ehRtmBS4GB - cbDSykz7b226q2lMYFNQYfxxco4zI/InuvR3hHvQWyACX2/i9eBG2kNjFez4 - viCZhNrK8mQFJFMrTBXo3LZkDYzmZAlOKbJopVQhP7oukRKUvIkFoUw3uiVe - 8JVsbzB73IJsc2Dqew44DtPvGV9yd41ZelOw5QOwNRWcacC9JCyN+QY7frt/ - eyKmk66HmLDnzrWetIGaBh5E/nzu1908aHXoiuCZld2NoAUIKAjm0WeOuvr/ - jU6WsUwELfQj96dbV0GKPwOLlpvldBWHbrVqdCWjL6XpWrFJVrwyxeEpoiCd - BrPkDoLY9+8mU5JOYLGYxekdiT0f/2GLOGTa7v0Tms4aWM4dmT4fSJZWb1kI - dKMqpX3zfgDqxGZkElXKqNJDqkekEdiYZL3GgpEF7g/VSPoby3ggtE3IWjog - BBd9zL6G1+KtmTc87jhgd6v+nN+/21GMvWFdRoj4AYkpbmyKSCYPXqZltyQx - zVj3RImJDBbxtVS2aSF4gt7svhtSGc/TxbBfe2IHhQwmeixQs9YRPoSwd0G3 - ftw+b9eqz/w6pmjLzmV5Bnma6VU5d5Lt1el7JeMz1texvuoaZzA/AzzF/qqg - nckA66d5B7+yeE2/xocfBbXmSDdtU2IvH7IDvn8UNGef4k1tuC4Y0UOb04O6 - 8ecy3mLd4gS3q5H/4wxq8unwBK0R55GMGnyMmDWQixlX82xn0d3mXieoQw07 - n6i0TlxOptun5mmZmEbeedXJeoV3oMguo+WTA988P4eAmH0Elc8Oasjuu6bR - 9Nu/gfcUzGefbr/szgaTKQmVpt9V40YnSy3pvcSeEzS3GZKUvrTuwoOX7AkM - KKzbNuz9CWT3i27wI8cFXzlnjL6TQ+/kuLt20F014s4YbifG2pkD7ZofNK76 - OePKHzPeM2p/yrf2uwsaqW4X23YBuOySOfrwHwAAAP//AwCokZ2d9hUAAA== - http_version: - recorded_at: Wed, 15 Jul 2015 16:03:04 GMT -- request: - method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions - body: - encoding: UTF-8 - string: | - - - - - 50.00 - gxg3hb - - - - John - Doe - - Spree - sale - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Wed, 15 Jul 2015 16:03:07 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - '"edf146e8ad1874e9a16b91c6b3f94671"' - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 3826a6ece5b1f3d987cfa110d5a00cd4 - X-Runtime: - - '2.344103' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - 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 - EgAA - http_version: - recorded_at: Wed, 15 Jul 2015 16:03:07 GMT -- request: - method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/cb4nbd/submit_for_settlement - body: - encoding: UTF-8 - string: | - - - 50.00 - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 200 - message: OK - headers: - Date: - - Wed, 15 Jul 2015 16:03:09 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - '"7c8057be354a16ba03482bead3ca945c"' - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 2a82b7d197cd69eb3c1fcfde2a7ddcf4 - X-Runtime: - - '0.207693' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - H4sIAD2EplUAA8xY3W/bNhB/719h+J2R/JUYhaIuXTFsxVZga7tieQko8Wxz - kUiVpBy7f/2Ooj4tKg0wDNhDEPHud+Td8b7o6M0pz2ZHUJpLcTtfXIXzGYhU - Mi72t/PPn34i2/mb+FVkFBWapgZR8avZLOIsTpO1SFgU4KelaENNqWNdJjk3 - BtjDTqoHDcZkkIMwUVADLNacC4g1zSAKqk9LS0ul8OQz4VoSVADizx/fRcGY - bME0l6Uw8Sa8CsMoqFeWkYNKD1QYQtPUEglqpwsFeJKPZUWkYqBwMRM8u50b - VcI8cBopoGgIoWZmtbydM1wansM8XoaLDQlvyGLzaXH9Oly9Djf3qGsrUMmX - BXu5/BblO4HaI9pI1NounMuXi+vr9Xp73TgdqTuutCGC5hC/lwcRBT2CQ2S0 - Wb+T6IZu6dipzAsqzpfWIwdyyrMYPXaQ4vyDzLQUVwn/FgWO4UBPkGhuwCNe - oJiPvqOnkauDvq1RwrMM46+z++v6P7A4/tH9x8NrgmNrg+GCUcKYAq3jRTj7 - VR4hO88+VgwbyANA7ayTAcHs5dXkD1KZwxNoFBjxajVlSjNuzvHPoASTaElL - cQAFe5tvdxlNaE6joF7X7pWYUJlLidUmDDdR0Cc1pmKgq7Oz/rPAi2JoBgaZ - nsnd7A4dzlNqHdCDDSXtZoRmxYEuMSE7aJ8+JbFCiTufyMonIspKnXi7Di9k - Gk4VKb3gQAftSsF8udtydJ17VCl6HjDxPnpVzbdJV71IQk168GIOvCj6weqL - +DZAPcw2Oj286dwcxqAveS9izndyHW0elos0X1J3IebVt4ujZ9i92HkRavU9 - VB0g47LSv526npIdh4xpB6BHTUApqQj6qJBCg9e0CtczfYiOf8MW9Cyg2WJ4 - a/5dnsVUZhyPF9RfMF9GRAvdY6Y/0TNy/gYX5dih9Phio0LJFE9DP9ASy73i - 32gFr3Z6+8dv919WWF6eAw13GaqyCG2XnuJOSBqM4PiuQM4RmFe6QlSuZYxb - TdD5Y9jI1qPkqb2gHV48SmDsJKDGHinttICnuPFgAmXoibjpw8uCE+RF0/0T - KTOgYh7vaKbt5NMCmmkDrSApVU2jM/IRRLw/7VeHBOHVynESLuJ1uFhut7Ye - in4lWceL7XZRN711kyy4KakmrT+5tvW+XTfFouDKXWYusd/Hi6XtWhfEEfYM - VOEoswwH4Ipan1t3dWJLTTU7Vi1kRO20PMiscre/gPCc7oGUKosPxhT6dRBQ - jUVaXyWKcmETp474K6ycQUHPtnY/5IDRyh4yuZfBEe2/KsT+DYgjV1JYwK2m - giXyhDNGu39d7RQUFAePD9IGoPt2nAPQzBxQY9tWH4V8wu7dozkQg4Sbju+W - NatUeHEYhfsyszNfD3XJaVuBHWA5zTpoj1brS89KZj1EQ6jdp3WJxRCbmXjs - MAPqsLjKHbFcKlIYtvI+o3GVZGVaDdXd6R3NgUrBv5ZQJxOS0fkcy7GK12y1 - 3qQ3sE4Wi5vlirIl7HabhN3QJFzgH87GU6Ju5yOIXBLNHieSreXX4+Yw2erH - CzlwjEx1HowMbcOtEIAb1XdoMxSHeWTkxQsG/Bsc8Ft8u0P9KGoKqq103Tup - Qkw9dZxDNXqA5VTsATuHe+dUtFbD3oSjJdY0iGnBUZMx3dkZjA3997Zvn7P9 - JS/G/4UnWkodJq5PZNQ/O5aJThUvJmfLHr+t6tVkSwqcZSQjOL4R61RPHbxA - olrKeLGo8sU5tlkS7IuesZhxXeW3lwduF9kk3ESFnnr0YU0d6zbcFIdO+9hH - uyZyuOW7folveQFZ/NHddbN0c7s62h6/A5jqzvZk+UTchY646ImkVNqN/gwM - PnebR9uQ5b+e3rvBf/wQM/qJ44VwOFmjsWEpvxr2kYPBitOub8MyTT3PAryU - Cdut5UVpX47j6Kg7LeECp9ey+qymC1dmH2yZjYIp0HD+6xk6HBP7I+Ak6Pt7 - VUPj9/ZqJ0vF9aO9Zdr9FrG6/7IOv7z//f6vt297v0owSLmuXutuZLXRXVMq - tw52iswBg5Zg5tqQBnTJTg5vYlCX4lf/AAAA//8DAORjkk+nEwAA - http_version: - recorded_at: Wed, 15 Jul 2015 16:03:09 GMT -recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/with_completed_payment/can_be_fully_credited.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/with_completed_payment/can_be_fully_credited.yml deleted file mode 100644 index 54ee19fb..00000000 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/with_completed_payment/can_be_fully_credited.yml +++ /dev/null @@ -1,389 +0,0 @@ ---- -http_interactions: -- request: - method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers - body: - encoding: UTF-8 - string: | - - - John - Doe - malachi.hauck@jastbradtke.ca - - - John - Doe - 10 Lovely Street - Northwest - Company - Herndon - Alabama - USA - 35005 - - fake-valid-nonce - - true - - - {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Wed, 15 Jul 2015 16:03:15 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - '"72777199d7331425e789a98ee7880a11"' - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - ae8c699af915d2a8c04947757b0e63e4 - X-Runtime: - - '0.864874' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - H4sIAEOEplUAA7RYS2/jNhC+51cYviuS/Ei8gaI0aFEsinYvu9kCuSwocRxx - LZFaknLs/PoOqbdlx46THgKHM99Q5Dw/KbjbZOloDVIxwW/H/qU3HgGPBWX8 - 6Xb88O1PZzG+Cy+CuFBaZCDDi9EoYDS8+uRfTa4Xs8DFhZGhLk4I1w6uXyI+ - 3778+qSvn7PnzWwSuF2tQS+ZVNrhJIPwL5HwwO0IjD4l9eoPAYHbLo0yFllO - +HbEWXo71rKAsWvlkBGWhhlJSZywy4QU8eq3n2gZSUL1Ci5jErglxqDzRHAY - 7LEkm4HsGSLF9BAbSyAaqEP0SG9zuB1TXGqWwTiceP7c8a4df/7Nv7rxpjf+ - /DFwWwNrX+T0bfatQfl8GxNnySClqjkSZdqJiaSq2pRISbZjo+3rSwnKIpam - GG2HUCpBqVpexpm+1BGuZHUiOL0k6Epb7JEoV6jXYl0/tIx4+Hv5i8+rBC1E - aQmgm0v43uhvsYZ0O/pqFYG7A2gtYaOBU+PWSvVFSJ08g0Kjga5zbBGTlOlt - +BkkpwJv10hakIQnrKvwPiURyTD9qnULyIXSJHWw4CCczj1vHrhdUdcFBddy - a8UOSfOETMKHr8YTQ/lrVlO0ut9nNj1kxgsMLIvDxczbsas1Q0MbvweOVUMx - AJi0aiSWo3sLJ+0uu2F+X0FVu7yzrOwe7oGiwGLh4czzJ4uFwTSRDExFOeZx - 4XemzA2bdReRiJRikZhr73aTOs9Np2QkReetuHjmNtVrWQsr3SeWDlOqIDyG - flS7isbo/c49vfhbpCkKbXLeJutAWuMpREy3ly6XrXJJirQ+dyRECoSPQ+M8 - A7XKFlxIDIyDlVak5vydTXc1tQlscibteZxMcJ2E/sSU/o5wD3oLRKL3Jl4P - bqU9NFbBztmXJFVQWXVOkgBJdYKpAu2xO7IaxjLyBE4h0zDROlc3rkuUAq0u - cdQxbhrdE17wmWwvMXvcnGwz4PpHBjoR9EcqnoS7xiy9zPnTHfA1k4IbwK0i - nEZigx2/2b95IqaTqYeI8FV7tJ60htoGPgv9xcKvuvms0eFRpEg72V0LGoCE - nGAefRGoq/6vdaqIVCxZbpzcn25tBWmxAo6til5tosAtV7Wu4OxXYbtWZJMV - r8xweMpwRqezeXwNs8j3rydTQiewXM4jek0iz8c/bBGHTJu9P6DprIFnwlF0 - dSBZGn3HQuIxylLaN+8HoFZsRybRhQpLPVAzIq2gi4nXaywYleP+UI6kf7CM - B8KuCVkrB6QUso/Z1/AafGfmDR/3OmB3q/6c37/bq5juhlUZIeInxLa4sSkq - wQ9epiG6JLbN2PREhYkMHQ7cUXVNcyliPM2u35DKeJ4phv3aIztoZDDhfY6a - tYnwIUR3F8P6Jiu9nfWZX8sUu7JTWZ5FHmd6Zc4dZXtV+p7J+Kz1eayvvMYJ - zM8Cj7G/MmgnMsDKNe/gVx1e06/x4UtBpXmlmzYpsZcPdQO+fxTUzz7Gm5pw - vWFED22OD+r6PG/jLZ1bHOF2FfJ/nEF1Ph2eoBXiNJJRgV8jZjXkzYyrdttJ - dLe+1xHqUMFOJyrNId5OphtXC1rEtpG3p2plvcI7UGQf887zMQTE7iOZWjmo - Ibt+peH08d+ZN53PFo/fP+/OBpspMVO235XjxiRLJel5Ys8TDLcZkpS+tOrC - A0/2BBYUVG0b9n4C2X2jG3zkeMNbzgmj7+jQOzruzh10Z424E4bbkbF24kA7 - 54PGWZ8zzvyY8Z5R+yHv2u8uaKS6bWybBeCyTebw4j8AAAD//wMAn+Gc5AEW - AAA= - http_version: - recorded_at: Wed, 15 Jul 2015 16:03:15 GMT -- request: - method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions - body: - encoding: UTF-8 - string: | - - - - - 50.00 - 84d6xb - - - - John - Doe - - Spree - sale - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Wed, 15 Jul 2015 16:03:17 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - '"136e4d327a9d1b85893dcfd1a8feb4dc"' - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 1eefa7a981d218f057c4bf46cb22281d - X-Runtime: - - '0.725251' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - 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 - AwAQeu10mhIAAA== - http_version: - recorded_at: Wed, 15 Jul 2015 16:03:17 GMT -- request: - method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/gygngy/submit_for_settlement - body: - encoding: UTF-8 - string: | - - - 50.00 - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 200 - message: OK - headers: - Date: - - Wed, 15 Jul 2015 16:03:17 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - '"eccc41399615061a49aca3790aaccd34"' - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 177a15115580eee579570fee8b929a6a - X-Runtime: - - '0.349216' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - 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 - http_version: - recorded_at: Wed, 15 Jul 2015 16:03:17 GMT -- request: - method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/gygngy/refund - body: - encoding: UTF-8 - string: | - - - 50.00 - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 422 - message: Unprocessable Entity - headers: - Date: - - Wed, 15 Jul 2015 16:03:18 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Cache-Control: - - no-cache - X-Request-Id: - - d027d93e5da40ad4a6bf666673968b1a - X-Runtime: - - '0.143446' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - H4sIAEaEplUAA6xSy26DMBC85yss34lJ1fQhOc6hUr+g/YAFttQSrOnaNCFf - XxMgkCrqqbedndn1zsh6f6wr8Y3sraOd3KxTKZByV1gqd/L97TV5knuz0tDY - BJkdJ4y+ceTRrITQ55bvywsQoWtwJ4EZOqlGKjCQhzzER4bObfnETeyMYyce - heZ5s00ftDrXSxJCYJu1Acd9vqszV0mTgUetLuzVTI3eQ4nmBYhcEIwfLRUC - xOJY0VIVVcIGYb3wGEKFxVqraXS+V10dPMIpGfXL/5LWDTDU/o+goHYtBbNN - 12kavQzo9uJePYDBTZQvudxRYFdVyGYx6Ps8L8RqzIbzT6CQ2MKcMtp2p6/n - 8HioD8f7u97+zA76WJRdSWWn1dDTavb1L0lHKzf+4A8AAAD//wMAzP0nGMAC - AAA= - http_version: - recorded_at: Wed, 15 Jul 2015 16:03:18 GMT -recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/with_completed_payment/can_be_voided.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/with_completed_payment/can_be_voided.yml deleted file mode 100644 index f5973761..00000000 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/with_completed_payment/can_be_voided.yml +++ /dev/null @@ -1,415 +0,0 @@ ---- -http_interactions: -- request: - method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers - body: - encoding: UTF-8 - string: | - - - John - Doe - nikolas.shields@harvey.com - - - John - Doe - 10 Lovely Street - Northwest - Company - Herndon - Alabama - USA - 35005 - - fake-valid-nonce - - true - - - {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Wed, 15 Jul 2015 16:03:19 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - '"626d738e224b9ebc6e589d5e54578460"' - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 80ddce2c50db3689e28ffa3ef637437e - X-Runtime: - - '0.801615' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - H4sIAEeEplUAA7RYWY/bNhB+z68w/K6V5GPXG2iVLloURdMu0CZpgbwElDRe - MZZIhaR85Nd3SF2UZa+PTR8WXs58Qw051ycF77Z5NlqDkJSzh7F/441HwGKe - UPb8MP708VdnMX4XvgniUiqegwjfjEYBTcL54nZ6f+vdBi4utAx1cUqYcnD9 - PWLz3fdv9+puk2+2s0ng2lqNXlIhlcNIDuHvPGWBawm0PiPN6hcOgdsttTLm - eUHYbsRo9jBWooSxa+SQE5qFjK444m9kSiFL5E8pEWvY3aBR4FYIjS1SzmCw - w5JsB7INRJKqITYWQBQkDlEjtSvgYZzgUtEcxuHE8+eOd+f484/+7Vtv+ta/ - /xy4nYGxL4vkMvvOoHq+iYizNKdsXUqocmIiEllvSoQgu7HW9vWVBGURzTKM - tUOSRICUjbyKcv6tiW8ta9LA6aWALe2wJ2Jco16KdPPQKt7hz9UvPq8WdBCp - BIBqD+F7oz/4GrLd6INRBO4eoLOErQKW6GutVU9cqHQDEo0GOsttHpOMql34 - GwiWcDxdK+lAAp6xqsLHjEQkJ4FbrztAwaUimYPlBuF07nnzwLVF9hWUTImd - ETskK1IyCT990DcxlL9kNUWrx0Nm02NmrMTA0jhczLw9u0YzNDTx+8SwahIM - ACatHPHl6NHASbfLfphfV1D1Lq8sK7OHe6QosFhYOPP8yWKhMW0kA11Rjn5c - +A+V+oTt2kakPEuwSPSx97tJk+e6T1KS4eWtGN8wk+qNrINV18eXDpWyJCyG - flRtRWv0+ss9v/g7pC4KpXPeJOtA2uATiKjqDl0tO+WSlFnjd8R5BoSNQ315 - GmqUHbgUGBgHK63MtP/WpvuaxgS2BRXGHyfnTKWhP9Glvyc8gN4BEXh7E68H - N9IeGqtgz/clySTUVpYnKZBMpZgq0LltyRoYzckzOKXIwlSpQr51XSIlKHkT - CUKZbnTPeMANMUPPLcguB6a+5KBSnnzJ+DN315ilNwV7fgdsTQVnGvAgCUsi - vsWO3+7fPhHTSddDRNiqc60nbaCmgc9Cf7Hw624+a3XoiuCZld2NoAUIKAjm - 0RNHXf1/o5NlJGNBC33J/enWVZDiK2Dhah1tJpiZ1arRlYx+K03Xikyy4pEp - Dk8RzpLpbB7fwSzy/bvJlCQTWC7nUXJHIs/HP2wRx0zbvX9A01kDy7kjk9WR - ZGn1loVAN6pSOjTvB6BObEYmUaUMKz0kekQagY2J12ssGFng/lCNpD+xjAdC - 24SspQNCcNHHHGp4Ld6aecPHvQzY36o/5w/v9iLG3rAuI0R8hdgUNzZFydnR - w7Q0l8SmGeueKDGRwWLAlso2LQSP0Zv9e0Mq43m6GA5rT+ygkMGEjwVq1jrC - xxD2LujW1+30Nv3aZ34dU7Rl57I8gzzN9KqcO8n26vS9kvEZ6+tYX3WMM5if - AZ5if1XQzmSA9dW8gl9ZvKZf48OXglrzQjdtU+IgH7IDfngUNM8+xZvacF0w - ooc2pwd1489lvMU6xQluVyP/xxnU5NPxCVojziMZNfglYtZALmZczbWdRXeb - c52gDjXsfKLSOnE5mW6vmidlbBp551Un6xXekSK7jJYvjrzz/BgCYvYRVK4c - 1JD9e03C6ed/Z95776/3fz/d788GkykxlabfVeNGJ0st6d3EgSdobjMkKX1p - 3YUHN9kTGFBQt204+Alk/41u8JHjgrecM0bfyaF3ctxdO+iuGnFnDLcTY+3M - gXbNB42rPmdc+THjNaP2h7xrv7qgkep2sW0XgMsumcM3/wEAAP//AwAc/wAM - /xUAAA== - http_version: - recorded_at: Wed, 15 Jul 2015 16:03:19 GMT -- request: - method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions - body: - encoding: UTF-8 - string: | - - - - - 50.00 - kvbw26 - - - - John - Doe - - Spree - sale - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Wed, 15 Jul 2015 16:03:20 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - '"7ba2318b5704291a26edc226227688eb"' - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 47617052aec5ff34b5bc428b8c6e2e11 - X-Runtime: - - '0.692526' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - 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 - 0s2YEgAA - http_version: - recorded_at: Wed, 15 Jul 2015 16:03:20 GMT -- request: - method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/bknfpp/submit_for_settlement - body: - encoding: UTF-8 - string: | - - - 50.00 - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 200 - message: OK - headers: - Date: - - Wed, 15 Jul 2015 16:03:21 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - '"62884edc2f4bf4815d157dd411fbdd62"' - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 9f5bbdb4b6ee271478180333cd1dd668 - X-Runtime: - - '0.251309' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - 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 - http_version: - recorded_at: Wed, 15 Jul 2015 16:03:21 GMT -- request: - method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/bknfpp/void - body: - encoding: UTF-8 - string: '' - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 200 - message: OK - headers: - Date: - - Wed, 15 Jul 2015 16:03:22 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - '"a624e5bfb3f9046a3a5d9b0c8fb2026d"' - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - c4ae1c853e49cd7778cc9da8dc404057 - X-Runtime: - - '0.365905' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - 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 - dWOWFAAA - http_version: - recorded_at: Wed, 15 Jul 2015 16:03:22 GMT -recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/fails_capture_with_settlement_declined.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/fails_capture_with_settlement_declined.yml index 2233634b..6875b151 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/fails_capture_with_settlement_declined.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/fails_capture_with_settlement_declined.yml @@ -10,8 +10,9 @@ http_interactions: John Doe - brionna@casper.ca + kiara@frami.biz + Card Holder John Doe @@ -28,7 +29,6 @@ http_interactions: true - {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} headers: Accept-Encoding: @@ -47,7 +47,7 @@ http_interactions: message: Created headers: Date: - - Wed, 15 Jul 2015 16:03:25 GMT + - Thu, 16 Jul 2015 17:23:11 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -68,31 +68,31 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"31ac33060b74cf1f2b4e5a0064258e22"' + - '"3c89f18c124e27d56a8e5c9ed661e7ef"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 69c84acb308eacf4186c57d0e609eacd + - 291cc539c761885fa7e9ce740094829b X-Runtime: - - '0.256912' + - '0.251914' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAE2EplUAA6RTu3LbMBDs/RUc9iREKbIVDUW5yKRI7TRpPEfgJCHGK8BR - Iv31AUm9EqbJuLzdvecC5bbVKjmiD9KaTVrkszRBw62QZr9Jv798zVbptnoo - eRPIavTVQ5KUUlTFoijmi9VjyWLQY5HjBzCUxfi9Nsvu/ddnejrpU/tpXrJ7 - tlfvpA+UGdBYfbMHU7I7oOcVXKIvFkt2C3uSW+3AdImRapOSbzBlA44apKpq - Hzcx8MwhOPQ5h5KNRC9xB2twkriDdoKdsA6SplruEQhFBpRQ53CTihiS1JhW - 81mxzGZPWbF8KR7Xs8V6vvxRslvCkN848X/5t4Sx/2BEtpOoRLiOJCRlHLwI - 56LgPXTniR10DlQGnNvG0J+KXjCRjGCEyb6hqVZ0FG/RwzG6cONNf4LBXFh8 - xha0U5hHb+7uPSgF7qBRl3VraxWCSav+piU7k1ex1LDHrPGqOhC5sGYMQkAK - ee1BGvKI+3iNE3R9Jxbn1mjoVSMdrHhVdm/ZuEvuzH6L5ii9Nb1kE8CI2rbx - vV47XHp+0NKhxgdtHWqEpg7cS0fxAf/DyKhgU6P+xsIAghAe4+EmZeLw15/8 - GwAA//8DAB1ruEz8AwAA + H4sIAH/op1UAA6RTOZObMBTu91cw9CDj9RF7AG+RSZF606TZeaAHaK0rkliD + f30E+EpIk9nyO96h90F66AQPPtBYpmQWJvEiDFCWijJZZ+GP12/Rl/CQP6Vl + a50SaPKnIEgZzZPVZr3aLTYp8WDgvFY2IF3k8bmQ6/78a+e2J3HqVsuUPKqD + u2LGukiCwPy7amRKHohB53BFXxWm5A4HsVRCg+wDyXgWOtNiSEYeBTCeHxkY + eKkMCBYX7JySiR4MulESZ2UVdDPuhIVlbu4tDYJDGoELXK8xC6mHjgkM8+Ui + WUeLbZRsXpPtfvm8T5KfKbkXjPWtpv9Xfy+Y5o8xRBVDTu1tJcpcVIKh9tIU + jIH+srGGXgOPoCxVK92fjsEws0ykp506oszp+ljsfIITumrTTd9BYkwVvmAH + QnOMfTIP9x6dFCto+fW5hVIcQYb5cNOUXMSbmQmoMWoNzxvntN0TAtais3Fh + gElnEGt/jRP0wyTi9xYo3ZtA1yj6xlWtyPSWWMv6gPKDGSUHS2ZB0kJ1/mu9 + TbjO/GSkY49Pxjr2sG1hS8O08z/iP4L0DjIP6m/OjiRQatAfbtbGL3/7j38D + AAD//wMA0bjLOfoDAAA= http_version: - recorded_at: Wed, 15 Jul 2015 16:03:25 GMT + recorded_at: Thu, 16 Jul 2015 17:23:11 GMT - request: method: post uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions @@ -104,14 +104,14 @@ http_interactions: 4001.00 - 8tvdk2 + d5kb92 jane.doe@example.com - Spree + Solidus sale headers: @@ -131,7 +131,7 @@ http_interactions: message: Created headers: Date: - - Wed, 15 Jul 2015 16:03:26 GMT + - Thu, 16 Jul 2015 17:23:12 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -152,57 +152,57 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"1c4472f337dc23350bc41fccf6a38e55"' + - '"fca14d4ca2f1e1af97112c9322d6dc2b"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - bb63dd64b314d9a855fd3ca777fa87b5 + - cd43b8e37224d5c5ca4f8baad5d4c177 X-Runtime: - - '0.323021' + - '0.319555' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAE6EplUAA+xYS3PbNhC+51d4dIdJSbYlZ2jmMXYz7uTQqeNDe/FAxEpC - DAIMAMpSf30XBEmRIhi7Mz300Ju4+wHYF3Y/KPmwz8XZDrThSt5Mpufx5Axk - phiXm5vJ47dfyHLyIX2XWE2loZlFVPru7CzhLM2+739cHZIIfzqJsdSWJqWl - 3SrN/wKWRLXIae2hgNRQAUlU/XSyrNQazzoQbhTBIyF9fLhNoqHYgWmuSmnT - izhGG+Mkqr+dKgedbam0hGaZExK0yBQa8KyQyi1RmoHGjzPJxc3E6hImkbdJ - A7XACLVnzs6bCcNPy3OYpLN4ekniBZlefptevY/n72dXf6K17YJqfVmwf7b+ - uKCOibEKrXYfPszT+XQ6my+vmkCjdM21sUTSHNJf1VYmUUfgEYI237cKw3D8 - 9OpM5QWVh1PvUQM55SJdacyzpB8zagrQ5xlNIq/woBdYGW4hsLzYKhmSr+l+ - EOqo62uy4kJgzbV+hzZpvQwoWxcDunF3jcUywepgTIMxoXjsLUjm8jMKESqj - gtvQ9ho2GMhQnBTeDVFVd9BeLFV9GHfHq91qQkWxpbM3oeavoWSJ2eDZMFOd - 5KBP61Ky0N1pNaaufao1PfSUGMhOJwltYsBaATngXV1Rm22DmC0viv+L5T9a - LN3s1P2MrDkIZjyA7gwBrZUmGKNCSQNB1ypcx/U+Or3HEfBTQLNFP2vhXX6K - qdzY7YYrh0IH3WA7f6EH1HwHX+U4IcwwsUmhVYanYRyamUkreDAYR3D/xGns - huGYdmSlxUJNPxWo2bkxPYaoIsgYd1ZhjIewgZU7xTOXhzXmF1dgiaxAD30p - 3VDGU/wUHkFZuid+yAdVsIe8aIbsSikBVE7SNRXGUYwW0Ax19IJkVDcT1Kpn - kOnS7tjzDOHVl9eseOgKVg3jInQlcE/ijAi2g4Jrn9NcSbtNcYqeigbIA1Dd - B1aS+rR6YhLXRmy4WziLtkpUkQ23BJ7TDZBSi3RrbWHeRxE12HbN+UpTLt1V - qGv4HHthVNCD68ZPOWCRsiehNioq5bNUL/K8kJsPIHdcK+kwN4ZKtlJ7pCrt - EXUL01BQ5C+PfqGrOS/w6i1QYbdoORwRHZkHMVhxe9T7z1pVaswbFt6mFI5N - dVCnmrbJO2rIqThCO7LaaHrQSnQQjaAOozEltjkcU/L5iOlJ+21TrYnTUplB - 99ShsomZYmVWUdZO2FqZB5WS/yihvkMoxixwbLaD6+QuJ8hcEcOeRy5Nq6/Z - Wf/S1PyebDmWoD70Jnw7HysE4EZ1YtxNQ+6Lirx4Ix9u8e0OP31YVIjxt4GP - kUGOyXIqN4Ct3j8MKllrY4eSGIXdCVJacLRlKPeeRqeutpI6PL7PCRqmOOXK - ZJoXoxSoo2+7UkXACLJxrhhBlkFcIANZPkGiWdoGsWjyyTmu2RPs6wH2xrip - CjWoA7+LarrUSNsZextglxja1t8UuZF7FaJfI7Xb6n2/xyefBJE++Fw3n55e - 6p2bUWuAseniTlYvxCd0oMVIrEptPENlYPFVZJou1FOF09Oht+Hj+5jBW/iN - cNg7p7EF67AZjotjsSIpC21YZlmAvWJSRnx3nhelhVB11OODcIkkq6x+Vn8A - oLyg4ql+lyfRGK5PYTq+9plOl8WMgl7fq+I9r+3VkiO7xfoieMlc9QGavlZD - slP5+SrtQBj2b//Irn5/hD02QQFuBlfRadXtAh8vlv726Q9CYQkzehWz6cVq - tpxfX18ssut4Bp3ANiOjzzZR/PDp6x1hl9N4uojj2eJyHl/MXRc9xf1b7MGH - 5O3kASd9uXEG3N59fvxCltPpfL6YxfM5nVU0wCuPcQQfqBA36rxGQh2qirKP - 6N3vT/e35Hq5jNliCRdXMzqbL5ZNJnrnaTL4Q2Yg7qJP/pw5FTa3WggUYyXa - +hlRD727r/df7j9/vcP+PQZpiGBhq7IMuTr6ij8Zh+N9MgB8tVslUXMdesM1 - ffc3AAAA//8DALcjuQ2HFAAA + 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 + N17jd38DAAD//wMA9JoGnocUAAA= http_version: - recorded_at: Wed, 15 Jul 2015 16:03:26 GMT + recorded_at: Thu, 16 Jul 2015 17:23:12 GMT - request: method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/cjxq6y/submit_for_settlement + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/9dp3nj/submit_for_settlement body: encoding: UTF-8 string: | @@ -227,7 +227,7 @@ http_interactions: message: Unprocessable Entity headers: Date: - - Wed, 15 Jul 2015 16:03:27 GMT + - Thu, 16 Jul 2015 17:23:12 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -250,52 +250,52 @@ http_interactions: Cache-Control: - no-cache X-Request-Id: - - c86df1b650fc484690d9763558f1470c + - 6b53a003575b8e6e9d5238ee3454cb04 X-Runtime: - - '0.215953' + - '0.300656' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - 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 http_version: - recorded_at: Wed, 15 Jul 2015 16:03:27 GMT + recorded_at: Thu, 16 Jul 2015 17:23:12 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/should_have_the_correct_attributes.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/should_have_the_correct_attributes.yml index 9485233d..05553684 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/should_have_the_correct_attributes.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/should_have_the_correct_attributes.yml @@ -10,8 +10,9 @@ http_interactions: John Doe - friedrich.oreilly@jacobi.biz + mercedes@okuneva.ca + Card Holder John Doe @@ -28,7 +29,6 @@ http_interactions: true - {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} headers: Accept-Encoding: @@ -47,7 +47,7 @@ http_interactions: message: Created headers: Date: - - Wed, 15 Jul 2015 16:03:23 GMT + - Thu, 16 Jul 2015 17:23:08 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -68,29 +68,29 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"8a77fbec21e9d6a4889a46b42e176596"' + - '"ca8201276ee217bdbcff8c562d718515"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 48bd267ac68a882949ac5378dd18b44a + - 6d83b516072f5e70a41bc1cd6cd46717 X-Runtime: - - '0.221912' + - '0.250154' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAEuEplUAA6RTy3KbMBTd5ysY9iDbievEI+MsOl10nW66yVykCyjVq5KI - wV9fAX6ldNPJ8jzuQ/cA3XdKJu/ovDB6ly7zRZqgZoYLXe/SHy/fssd0X9xR - 1vpgFLriLkmo4MV68bTaPD4sKYlg4KLGGtAhi/hY6nV//P0UNgd16B5WlNyq - g7sSzodMg8Liu2k0JTfEoEs4o68GKbnCQWRGWdB9ooXcpcG1mJKRRwVCFpUT - yJ1gTW4cCin75zdgphR5KY6UTJ7BbRujcdajgm7GHbD0Isy9zCEE5BmEJPQW - dymPMAiFabFaLNfZYpMt1y/LL9vF/XZ1/5OSa8FY31r+f/XXgmn+mElWCZTc - X1biImQMHPenpuAc9KeNLfQWZAaMmVaHj47BMLNMZKSD+YW6qK06KkfJhM7a - dNM30Jhzg8/YgbIS8xjTzb1HJ8cKWnl+bmmMRNBpMdyUkpN4MQsFNWatk0UT - gvVbQsB7DD4vHQgdHGIdr3GAfphE4t4KdXhVGBrDX6WpDZnekltd71G/C2f0 - YNl50Lw0Xfx0LxPOMz8Z6djjk7GOPXxbeuaEDfGv/EeQ0UHmQf3N+ZEEzh3G - w83axOUvP/UfAAAA//8DAAFlxDgHBAAA + H4sIAHzop1UAA6RTuXLbMBDt/RUc9iQkOdY1EOUikyK106TxLImViBhYIAAo + if76gKQuh2kyLt+xB/aRfHvSKjmg89LQJp3mkzRBqoyQtN+kP16+Zct0Wzzw + qvHBaHTFQ5JwKYr5bDZ5XCxXnEXQcVGraqCQRfxe0lP7/nsVFkd9PH2ZcXav + du6ddD5kBBqL76Ymzu6ITldwQV8NcnaDnVgZbYHahKTapME1mLKeRw1SFd0o + FOifzVtDeIC8As4GqTPZ2hCOSndwGnFHLL0MY2/lEAKKDEISWoubVEQYpMa0 + mE2mT9lkkU3nL9PFeva4nix/cnYr6OsbK/6v/lYwzO+jyHYSlfDXlYQMWQVO + +HNTcA7a88YWWgsqg6oyDYWPjs4wsgxkpIN5QypWC1u7OWcDumjDTX8BYS4M + PuMJtFWYx3Tu7t07Be6gUZfnlsYoBEqL7qacncWrWWrYY9Y4VdQhWL9mDLzH + 4PPSgaTgEPfxGkdou0ks7q2RwqvGUBvxqszesOEtuaX9FukgnaHOsvFAojSn + +MVeJ1xmfjLSvscnY+17+Kb0lZM2xJ/xH0FGBxsH9TfnexKEcBgPN2oTl7/+ + y38AAAD//wMAGgKFn/4DAAA= http_version: - recorded_at: Wed, 15 Jul 2015 16:03:23 GMT + recorded_at: Thu, 16 Jul 2015 17:23:08 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/succeeds_authorization_and_capture.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/succeeds_authorization_and_capture.yml index 4bc7b109..1e783f48 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/succeeds_authorization_and_capture.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/succeeds_authorization_and_capture.yml @@ -10,8 +10,9 @@ http_interactions: John Doe - madilyn_predovic@quigley.com + keven.marvin@wintheiser.name + Card Holder John Doe @@ -28,7 +29,6 @@ http_interactions: true - {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} headers: Accept-Encoding: @@ -47,7 +47,7 @@ http_interactions: message: Created headers: Date: - - Wed, 15 Jul 2015 16:03:24 GMT + - Thu, 16 Jul 2015 17:23:09 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -68,31 +68,31 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"4e77e7542ff6fb462700c5d7af0a8e97"' + - '"7ac59927e6b73d96ffa81165ff3a3cbb"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 9c2fbfa54deed9b4c9164a859213b63c + - dc6caa46b1e82d4eb73b0076604dac6d X-Runtime: - - '0.262918' + - '0.260783' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAEyEplUAA6RTO3PbMAze8yt02mXKTuzUPlrO0OvQOV26+CARlpmSIENS - tpVfX0ryI4265DJ+D4AgPpJvTlolB3ReGlqn00meJkiVEZLqdfrr+Uf2Ld0U - d7xqfDAaXXGXJFyK4iFfLJbzfMlZBB0XtWoPFLKI30qat2+vy/B41MfTw4yz - 92rn3knnQ0agsfhp9sTZO6LTFVzQd4Oc3WAnVkZboDYhqdZpcA2mrOdRg1SF - BiFVS1vrUJiDrJ5eG1krbCexjLPB07nt3hCOeuzgNOKOWHoZxt7KIQQUGYQk - tBbXqYgwSI1pMcun8yx/zKbz5+lild+vZve/ObsV9PWNFZ+rvxUM5/eZZDuJ - SvjrSEKGrAIn/LkpOAfteWILrQWVQVWZhsK/js4wsgxkpIP5g1QIN6v1grMB - XbRhpy9AOBEGn/AE2ir8sO/eKXAHjbpctzRGIVBadDvl7CxezVJDjVnjVLEP - wfoVY+A9Bj8pHUgKDrGO2zhCnyyLc2uksNUY9kZslakNG+4ysVRvkA7SGeos - aw8kSnOKT/d6wuXML0ba9/hirH0P35S+ctKG+Cv/E2R0sHFQHznfkyCEw7i4 - UZs4/PVT/wUAAP//AwCgzbX0BwQAAA== + H4sIAH3op1UAA6RTPZebMBDs71fw6EHGd9g+PxlfkZci9aVJc29Ba6OctCKS + sM39+gjwV0KK5KWc2Znd1Q7w7Umr6IDWSUObOEtncYRUGSFpv4m/vn5OVvG2 + eOBV67zRaIuHKOJSFI9Zvsxn+YKzAHou1KoayCcBf5SUdx8/nv3yqI+npzln + 99VevZPW+YRAY/HF1MTZHdHXFVzQJ4Oc3WBfrIxugLqIpNrE3rYYs4FHDVIV + 73hASjXYg6SXoyRfo3Ro097O2ajp1U1tCCc9dnCacEcsnfRTbWURPIoEfOS7 + BjexCNBLjXExn2V5Mlsm2eI1W67nj+vZ6htnN8Pgbxvx9/7n4L8ZxvlDJslO + ohLuupKQPqnACnduCtZCd964ga4BlUBVmZb8r4peMJGMZKC9eUcqnqrlYmE5 + G9GlNt70OxCmwuALnkA3CtMQ0929B6XAHbTq8tzSGIVAcdHflLNz8SqWGvaY + tFYVtfeNWzMGzqF3aWkhxGoR9+EaR+j6SSzsrZH8m0ZfG/GmzN6w8S1pQ/st + 0kFaQ71k44BEaU7h071OuMz8z0iHHv8U62oS69DDtaWrrGx8+Cv/EGRQsGlQ + v3NuIEEIi+FwkzZh+etP/RMAAP//AwCndM5VBwQAAA== http_version: - recorded_at: Wed, 15 Jul 2015 16:03:24 GMT + recorded_at: Thu, 16 Jul 2015 17:23:09 GMT - request: method: post uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions @@ -104,14 +104,14 @@ http_interactions: 50.00 - dr2gm6 + 4c766r jane.doe@example.com - Spree + Solidus sale headers: @@ -131,7 +131,7 @@ http_interactions: message: Created headers: Date: - - Wed, 15 Jul 2015 16:03:24 GMT + - Thu, 16 Jul 2015 17:23:09 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -152,57 +152,57 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"61ccf2af2bafa4dfffcfaf4d175633ea"' + - '"b2e9ad624a873ae82a3dd25f384be505"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 50005c567de245694d773d512cf49b91 + - 92d7eab5ca1a99c70275a513b656a637 X-Runtime: - - '0.314515' + - '0.218080' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAEyEplUAA+xYS3OkNhC+769wzV1m3ra3MPsoOymn9pDKrg/JxSWgGRQL - iZXEeCa/Pi0EDAxi7VTlkENuQ/cnqV/q/jThh0PBL/agNJPidra4nM8uQCQy - ZWJ3O3v89hO5nn2I3oVGUaFpYhAVvbu4CFkaXYvlS7kOA/xpJdpQU+mIViaX - iv0FaRg0Iqs1xxIiTTmEQf3TypJKKTzrSJiWBI+E6PHrXRiMxRZMC1kJE23m - l/N5GDRfVlGASnIqDKFJYoUE7dGlAjzJp7JLpEpB4ceFYPx2ZlQFs8BZpIAa - SAk1F9bK21mKn4YVMIuW88WGzK/IYvNtsX0/X71frv9AW7sF9fqqTP/Z+tOC - JiLaSLTafrggr+fb7c1mftOGGaUZU9oQQQuIfpG5CIOewCE4bb/vJIbh9OnU - iSxKKo7n3qMGCsp4VNCU8aN4wiCmcs+Sj98rtuNwvMSFYeAwDv8CsWYGPDuV - uRQ+eUYPo6gHfbfDmHGOxdeFwLdJ57BH2Xnr0U17rg1WDBZKmirQ2heagwGR - 2lRNQrhMKGfGt72CHd4cX5wkXhJel7nXXqxadZx2x6ntakJ5mdPlm1Cr11Ci - wmywZJypXnLQp6wSqe8adRrdXAOqFD0OlBjIXkvxbaLBGA4F4LWNqUlyLyZn - Zfl/sfxHi6Wfnaa1kYwBT7UD0L0moJRUBGNUSqHB61qN67k+REcPOA1+CGi3 - GGbNv8sPMbUb+/145VhooTvs7C/0iJo/wVU5Dgs9TmxYKpngaRiHdnjSGu4N - xgk8PHExt3NxSjux0mChRp9K1OztvJ5C1BFMU2atwhiPYSMr95IlNg8Z5hdX - YInEoMa+VHY+4yluIE+gDD0QN++9KjhAUbbzNpaSAxWzKKNcW67RAdr5jl6Q - hKp2mBr5DCJK1XJXbBFefzlNzHxXsG4Ya9+VwD2JNcLbDkqmXE4LKUwe4RQ9 - F42QR6BqCKwlzWnNxCS2jRh/t7AW5ZLXkfW3BFbQHZBK8Sg3ptTvg4BqbLv6 - MlaUCXsVmhq2kz8o6dF246cCsEjTJy53MqjEs5Av4rIUuw8g9kxJYTG3moo0 - lgdkLd0RTQtTUFKkMo9uoa05J3DqHCg3OVoOJ0RP5kApxMyc9O6zUVUK84aF - t6u4JVY91Lmma/KWJTLKT9CerDGaHpXkPUQraMKodYVtDseUeD5hBtJh25QZ - sVoqEuifOla2MZNpldTstRe2TuZAlWDfK2juEIoxCwyb7eg62csJopBEp88T - l6bTN+xseGkaok9yhiWojoMJ383HGgG4UZMYe9OQBqOiKN9IjTt8t8MPXxg1 - YuqR4CKkkWGmBRU7wEbvXgi1rLOwR0i0xN4EES0ZWjKWOz+Dc0c7SRMc1+U4 - 9ROcKtaJYuUkAerpu55U0y9S4sCVKUGOQWwYPTk+Q6JZynixaPLZObbVE+zq - Hu6WMl2XqVcHbhfZ9qiJpjP1MsAeMbZtuCkyI/s4RL8mKrfTu26Pbz8BPPrq - ct1+OnKp9nZCZQBTs8WeLF+IS+hIi5GIK6UdP03B4JtItz1ooPKnp0du/ccP - MaMn8RvhcLBOYwNWfjMsE8diRUrm27BKEg93xaRM+G49LysDvupohgdhAilW - Vf+s/wdAeUn5U/NAD4Mp3JDA9Hwd8pw+h5kEvb5XzXpe26ujRibH+iJ4yWz1 - AZqeyTHVqf18lXQgDLu3e2LXvz/CAVsgB/f27qu7BS5eafTrp9/JzdXVap3Q - ZBGv0y3M18v1NUrm215g24Ex5Joo/vrpyz3ZzpfZKsvoapXcxKvVBrvoOe7f - 4g4uJG+nDjjnq5014O7+8+PPBOjN1eo63sJmEdckwClPcQQXKB8z6r1FfB2q - jrKL6P1vTw93ZJPdXF9lCVC6vophu2wzMThPkdE/MyNxH332L825sL3VnKMY - K9E0j4hm5N1/efj54fOXe+zfU5CWBpamLkufq5Nv+LNxON0nPcBXu1UYtNdh - MFyjd38DAAD//wMAZG0IJo4UAAA= + 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 + eoAvdqso6K7DaLzGb/4GAAD//wMARyWmwZAUAAA= http_version: - recorded_at: Wed, 15 Jul 2015 16:03:24 GMT + recorded_at: Thu, 16 Jul 2015 17:23:09 GMT - request: method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/8n2wp4/submit_for_settlement + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/f9v5pp/submit_for_settlement body: encoding: UTF-8 string: | @@ -227,7 +227,7 @@ http_interactions: message: OK headers: Date: - - Wed, 15 Jul 2015 16:03:25 GMT + - Thu, 16 Jul 2015 17:23:10 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -248,54 +248,54 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"dac596d6d04c98ade6f2ea3b41151633"' + - '"70948fb746a5481e7dba8f857b5d6fb8"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 3c7ca1b99ecd4bcc9fd1d8bdbc2b267b + - 0cf8f1bb4bcf4a2fe2201be08eddf6ae X-Runtime: - - '0.328642' + - '0.290902' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - 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 - AE8ZDmTUFgAA + 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 + QPTqbwAAAP//AwCIo8X71hYAAA== http_version: - recorded_at: Wed, 15 Jul 2015 16:03:25 GMT + recorded_at: Thu, 16 Jul 2015 17:23:10 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/Previously_consumed_nonce/should_raise_exception.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/Previously_consumed_nonce/should_raise_exception.yml index 3d8ed535..509f37b9 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/Previously_consumed_nonce/should_raise_exception.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/Previously_consumed_nonce/should_raise_exception.yml @@ -10,8 +10,9 @@ http_interactions: John Doe - lily.schmeler@daredach.name + virgil_dickens@heidenreich.com + Card Holder John Doe @@ -28,7 +29,6 @@ http_interactions: true - {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} headers: Accept-Encoding: @@ -47,7 +47,7 @@ http_interactions: message: Unprocessable Entity headers: Date: - - Wed, 15 Jul 2015 16:03:22 GMT + - Thu, 16 Jul 2015 17:23:07 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -70,27 +70,28 @@ http_interactions: Cache-Control: - no-cache X-Request-Id: - - a383a780b90c84f294ab41276a273480 + - 93fef420915c19430f695d9eaa847c59 X-Runtime: - - '0.113904' + - '0.041567' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAEqEplUAA9xVS4+bMBC+51dY3B0SRattJeLtaquqqqpetnteTfAkWPUD - 2SZd/n0HQgjk1ajtqSfw983j8zAzZA9vRrMt+qCcXSbz6SxhaHMnld0sk5fv - n/i75EFMMigVR++d5x5D6WxAMWEsa6HQvPYHFusSlwl4D3WSdlRehegM+t3x - qi2RJdQGbeQGY+HkHj7vdWD3/BBpUjuJ4v1iPrvP0vZ9TEOMXq2qiF3UUJuV - 04noNLzuNLxaZ3PM0t76KIrBEGCD4gmsdZFVARmwcyGYcZ5SFWBZc5xm6d51 - eI/06CIdEPoKpedLlOUepYo8B/9vyja/X8z/n7IRslJaU2tzkJIaOZyW4UJP - NsEu+FJ9jqtO0KDhhzKotz2YcGks1sqHyC0YFF9cYbN0AOxtNOyRj45qezj2 - s2VAaaGVrqchLwxq9B8kkEbIi2ljSYJak+tdc61UN+i8SWtrFKJHjH2e+Yx9 - dVvUNXtuiSw9Mhh9s7eIVqLsyW/Ox+InBnI74YaOuTMl2Fo87Z5Nk++AkXyX - g1axFp/RW+nonj0yNPO4oe0pHjWswECWdudxuspGX/NmlDjosoCFeHl+bNKe - EkPH0oUIuqXF4m42u6PZH0C/b8+TfcrbiRJr+IEUw4bKYIcdr5XO8hDIlZEu - Ni4k/TvUut41T/QVBRkiA30nzpnErcqRB1JLDFeSWaWXSRNlNHlrD5UkTT6n - BRAv2N0whofZ+/PNM/mbXUWb8Mx/9BcAAAD//wMAOKDE9IQHAAA= + H4sIAHvop1UAA9xVS2+bQBC+51esuBNsWVFaCW8apaqiquolzTkas2Ozyj7Q + 7OKGf98BY4xfqdX21BPM982bmSG/e7NGrJGC9m6eTK8niUBXeKXdap48//iS + fkju5FUOlU6RyFNKGCrvAsorIfIOCu3rIIjYVDhPgAiaJOupog7RW6SN+K4u + kxU0Fl1MLcbSqy182mrHbvkx0ob2CuXH2XRym2fd+z4NMZJe1BF7r6GxC28S + 2efwssnhxXlXYJ4N2gdeLIYAK5QP4JyPog4oQJxyIawnDlWCE614nWdb03Ed + 2UEhPRCGDmWnW5QXhErHtAD6N22b3s6m/0/bGFloY3i0U1CKBzkct+HMTLbO + zthyfw67ztBo4Mdp8GwT2HBuLZaaQkwdWJRffenybARsdQxskc+ee7sTh92y + oI1ca1pp86J08YoufCpRK3SEuiivC285p07r/cFpxdIbhbSJ8MCyeOwALvGA + vKzJF1R4UZWdUoiEGIc404n45tdoGvHUEXl2oLD3td8iOoVqIL97iuVPDGx2 + xI0NuXsVuEY+bJ7temyAvfR9AUbHRj4iOeW5zgEZqxGu+O7KewMLsJBnvbwf + rnaRmrRdwhRMVcJMPj/dt2GPibFh5UME09FydjOZ3PDVGEG/H+yjS5x2uyiX + 8Irsw4XaYo8dHqRec+fIV5EL228k/3X0stnMXKSanYyRUX5HxrnCtS4wDZwt + M6lWwmkzT1ovezu7JKgV50QFn454Ru+CBd5t7Z/frKu/uXJ8Q0/8gX8BAAD/ + /wMA8MqaFb4HAAA= http_version: - recorded_at: Wed, 15 Jul 2015 16:03:22 GMT + recorded_at: Thu, 16 Jul 2015 17:23:07 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/invalid_email/fails.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_user_with_an_invalid_email/fails.yml similarity index 63% rename from spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/invalid_email/fails.yml rename to spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_user_with_an_invalid_email/fails.yml index c58bfbef..67098447 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/Credit_Card/invalid_email/fails.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_user_with_an_invalid_email/fails.yml @@ -12,6 +12,7 @@ http_interactions: Doe quux@foo_bar.com + Card Holder John Doe @@ -28,7 +29,6 @@ http_interactions: true - {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} headers: Accept-Encoding: @@ -47,7 +47,7 @@ http_interactions: message: Unprocessable Entity headers: Date: - - Wed, 15 Jul 2015 16:03:10 GMT + - Thu, 16 Jul 2015 17:22:52 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -70,27 +70,27 @@ http_interactions: Cache-Control: - no-cache X-Request-Id: - - 6806499f8424ac7608644baeaf34d29b + - d1b2a4a25d1c9c1fd14224437778ac30 X-Runtime: - - '0.130275' + - '0.132499' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAD6EplUAA5RUS2/bMAy+91cIvitO0HXoQVFX7IFhGHbpeh4Yi06E6eFR - chb/+8lO4keSttnJ5veR1CdSpHjYWcO2SEF7t8wWs3nG0BVeabdeZs8/v/D7 - 7EHeCKg0RyJPnDBU3gWUN4yJDgrtb2+w2FS4zIAImiw/UEUdordIe/Oy75E7 - soPdJvAK5f3i/fydyLv/MQkxkl7VEQ/5QmNX3mQSLWgj8p6eBFkMAdYoP7dO - TAcGjmm3BaMVKz1ZiDORH50GaflE28EMvV1BY9FFbjFuvDq90sXitFkuh4mC - UOnIC6BrUyV6pY1J3eOgVOpVmFz6jdD8hdhU81MlCRr1dFyHVAMCG17qfKkp - RO7AovzmN07kI+DoY+CIfPIo8sHsn0/bNPmnrncfSu9/rYBmhbdJRYe/Xr7X - 6nOFuKsEdk4hEmLsz1nM2Xe/RdOwp44Q+YnDpFG7iE6h6skfnuLmL4YUdsZN - B8VW4Br5cf9tp2UPTOT7Ir3z2MivSE75dM8eGbsRrtNWkI8GVmBB5Ad7elzt - IjW8nUkOptrArXx+emyPPSfGgZUPEUxHy9u7+fwuDcEIevtNng0bd94VKEv4 - jbwb4z1wOlwHtyGLr2K61bSKaSHqstm/nEh1SjJGRuLOgoXCrS6QhyQ1MTxt - E6fNMmuzTGatJKhV0kTFBpK4y35XDN4wbf+50tJivLDU/wEAAP//AwAaGrb+ - EQYAAA== + H4sIAGzop1UAA5RVTW/bMAy991cIvitO0HXoQVFXdBuKYdil63lgLDoWpg+P + krP63092EsdO0jY7xXyPpPihp4i7F2vYBilo75bZYjbPGLrCK+3Wy+z551d+ + m93JKwG15kjkiROG2ruA8oox0UOh+xwMFtsalxkQQZvlO6poQvQWaWue991z + e/Zgdwm8Qnm7+Dj/IPL+e0xCjKRXTcRdvtDalTeZRAvaiHygJ0EWQ4A1yi+d + E9OBgWPabcBoxUpPFuJM5HunQ2n5pLadGQa7htaii9xirLw6bunscLos58NE + Qah05AXQpakSvdLGpO1xUCrtKkyafic0fyU2zfy4kgSNdjqeQ5oBgQ2vbb7U + FCJ3YFF+85UT+QjY+xjYI589ivxgDtenW5r80zQvn0rvf62AZoW3qYoef3t8 + nVl5o5C2OR+SzR57IDV1RF421gt6uqiv3ilEQozDOYs5++43aFr21BMiP3KY + 7PclolOoBvKHp1j9xZDCTripvmwNrpUP299OZFtgUr4vkjxiKx+RnPKpzwEZ + uxGu02Mi7w2swILId/b0uMZFanknZQ6mruBaPj/dd8eeEuPA2ocIpqfl9c18 + fpO0M4Lev8onGuXOuwJlCb+R9+rfAsea3Lkdsvg6pq6mU0zvqC7b7YWL1KQk + Y2RU3EmwULjRBfKQSk0MT4+Q02aZdVkmEi0JGpVqoqKCVNx5vwv0ehDpf76E + 6T0981/wDwAA//8DALZPALpIBgAA http_version: - recorded_at: Wed, 15 Jul 2015 16:03:10 GMT + recorded_at: Thu, 16 Jul 2015 17:22:52 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/decline/fails.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/decline/fails.yml new file mode 100644 index 00000000..90f42e64 --- /dev/null +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/decline/fails.yml @@ -0,0 +1,225 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + John + Doe + baron.terry@boehmrobel.com + + Card Holder + + John + Doe + 10 Lovely Street + Northwest + Company + Herndon + Alabama + USA + 35005 + + fake-valid-nonce + + true + + + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Thu, 16 Jul 2015 17:22:58 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"415f6da1b9c8317fc769d19f1dc7cc67"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - f071b09d8bbab5b56189e4362dbd0435 + X-Runtime: + - '0.760617' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAHLop1UAA7RYS2/bOBC+51cYviuSX7UbKOpmWyyKxW6xQJseeikoaWyx + kUiFpJw4v75D6kVZfid7CBzOfEMNOa9P8j88Z+lgDUJSzm6Ho2tvOAAW8Ziy + 1e3w/ttfzmL4Ibjyo0IqnoEIrgYDn8bBbOotJpPxO9/FhZahLkoIUw6uX0I2 + 27w8vlfzp+zpeTr2XVur0UsqpHIYySD4myfMdy2B1qekXn3i4LvtUisjnuWE + bQaMprdDJQoYukYOGaFpEBLB2bUCITZ/hBySTPAQ0ms08t0SobF5whn0dliS + 557sCUJJVR8bCSAKYoeogdrkcDuMcaloBsNg7I1mjjd3Ru++jeY34/HNbP7D + d1sDY1/k8Xn2rUH5fBMRZ0khjWXjUkyVExERy2pTIgTZDLW2qy8lKAtpmmKs + HRLHAqSs5WWUk5c6vpWsTgOnkwK2tMUeiXGFOhTp+qFlvIOP5S8+rxK0EKkE + gGoOMfIG//A1pJvBV6Pw3S1AawnPClisr7VSfeFCJU8g0ains9zmEUmp2gSf + QbCY4+kaSQsSsMKqCu5SEpKM+G61bgE5l4qkDpYbBJOZ58181xbZV1AwJTZG + 7JA0T8g4uP+qb6IvP2Q1Qau7XWaTfWaswMDSKFhMvS27WtM3NPG7Z1g1MQYA + k1YO+HJwZ+Ck3WU7zK8rqGqXV5aV2cPdUxRYLCyYeqPxYqExTSR9XVGOflzw + nUp9wmZtIxKexlgk5tgfcT34bAQl3FY2RjzTjZOSFG/zgfEnZnK/lrWw8j75 + 0qFSFoRF0A2zrWiMXn/bp3eDFqmrROkiMNnbk9b4GEKq2kOXy1a5JEVa+x1y + ngJhw0D3Zg01yhZcCIyUg6VXpNp/a9NtTW0CzzkVxh8n40wlwWise8GWcAd6 + A0Tg7Y29DtxIO2gsiy3flySVUFlZniRAUpVgekDrtiWrYTQjK3AKkQaJUrm8 + cV0iJSh5HQpCme58KzzgE9noKejmZJMBUz8zUAmPf6Z8xd01pu11zlYfgK0p + zk8NuJWExSF/xhHQ7N88EdNJF0hI2EPrWkdaQ01HnwajxWJUtfdpo0NXBE+t + 7K4FDUBATjCPvnDUVf/XOlmEMhI015fcHXdug1H8AViwzJLHXyvfLVe1rmD0 + sTBtLDTJikemOE1FMI0n01k0h2k4Gs3HExKPYbmchfGchN4I/7Bn7DNt9n6D + LrQGlnFHxg97kqXRWxYC3ShLaRcB6IFasZmhRBUyKPUQ65lpBDYmWq+xYGSO + +0M5o/7FMu4JbROylg6SMS66mG0+1cFbQ7D/uMOA7a26g3/3bgcx9oZVGSHi + F0SmuLEpSs72HqbhvSQyzVj3RImJDBYltlS2aS54hN5s3xtyG8/TxbBbe2QH + hZQmuMtRs9YR3oewd0G3JpNFqPIuFWypoy07lfYZ5HHqV+bcUfpXpe+FFNBY + X0YDy2OcQAUN8BgdLIN2IiWsruYVhMsiOt0a778lVJoD3bRJiZ0EyQ747lFQ + P/sYkWrCdcaI7tscH9S1P+fxFusU55K9yvR/HEp1gu0fqRXiNNZRgQ8xtRpy + NgWr7/Ek/luf6wiXqGCnM5fGifPZdXPVPC4i09lbr1pZpxL3VN3bvBW9DSMx + +wgqHxzUkO17xTHx49t7b/zfp49/fv+6PSxMpkRUmgZYzh+dLJWkcxM7nqDJ + Tp+1dKVVW+7dZEdgQH7Vx2HnR5Ltd77eZ5AzXntOmIVHp+DR+Xfp5Lto5p0w + 7Y7MuRMn3CWfPC764HHh547XzN43efl+dUEj921j2ywAl20yB1e/AQAA//8D + AP6NCH0hFgAA + http_version: + recorded_at: Thu, 16 Jul 2015 17:22:58 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + body: + encoding: UTF-8 + string: | + + + + + 2001.00 + fmhqjg + + + + Card + Holder + + Solidus + sale + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 422 + message: Unprocessable Entity + headers: + Date: + - Thu, 16 Jul 2015 17:22:59 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Cache-Control: + - no-cache + X-Request-Id: + - e70a3e9204960f2285b1f597da19fac6 + X-Runtime: + - '0.644818' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAHPop1UAA7RYS3PUOBC+51e45q54XiFDyjFLQVHALhwW2NrikpKt9ljE + lowkT2b49dvy2x55yGUPqdjdn3pa/dInB6+OeeYdQGkuxf1idb1ceCBiybjY + 3y++fX1HdotX4VVAC05AKamIAl1IoSG88rygEmn72L145lTA/YIqRU8Lv0L5 + PSwoqKJ5u8IoKjSNDf52LUGZLOyr9gTP7hdGlVAbqXQ0l6Uw4Xq5REeXgd+8 + t+qCnnIQhuRgUsmIkY8gwiRPf/7YB75T2a6MS21kDqoVoIgzlwt2mznl2Ywu + 4UobImgO4RuqWOAPBD0qo63svcwYqMDvJa1H/tSlIE6pEJCFX2TGWakR0Qha + gA18qGkGgV891jH2J0G2kWhTEOSgNd1D+EHoMkl4zDFC3rtSMDTf6q5cicLw + hNEh3z+dAh8fa5k21JQ6LJSMca1UDwzijAvAODSqqwuOxqVSWHonwrUkWIEQ + fvvy1sZhKr76bS3gvpSNjiE0jq2YoI+6UAB2W+eqepFUmAviynsQK6AGGKGm + KW+Gr4bnsEAHVjdkeUtWL76ubu/W67ub3Xf0ulvQWCgL9nwLL9FCv6CLz6Qg + 0PGb7XK32axf9EkYF+FHmQpXEQ5K8K0EV/3FMi+oODnbsOqAMKJKimuDvX36 + I5KQ5kpGkF3jQmz4CtHinyDS3IDTVpFK4dYk9OjIxKQvgohnWGL7YVDSX/9b + OMI39X90oxG0AG2wurCoGMMBqcPV0vtLHiA7eV8qhe2AEaCL5dGAYDbPjeKz + VCZ9Ao1LznSduzKmGTen8D0owSTuqZO0EAV726yvMxrRnAZ+896FXWJHZnU/ + bW6WyxscCwNRv23sEHWqY/FNYBIZbgjrUnsy8V5jGnhMbTAGsOlaa5DQrEjp + Gju6Bw/l82s2uOa1a9HGvUiUlVPhbrucrGo1TR2NCgfDleDUczd/p3OcbZ0a + szQYkm5DGozJoDqFImridAaV8qIYl7S7P7oydqq7GnZqL7X3uFLdE2BSmW4P + mpp0Kut6dI+EvhBnfO+r7SJgUGHPxG1+j2vKyDWaxplrBjZJOGRMtyB60BMi + NbPRCjkIxRgffsIT7yKgNzLOp9vORUyzncNhIv+AHXYmrMF7nBFP9IS6H1B3 + BB6I2pXwoKMLhJZIzRT/RasFM2Hp4ePftUQAh9iMdnatwVJ20p85bBNXxrj1 + EmN/Dqx88e48l9nLC2vjB8ljm84ECwVxWHERKFcoSktl0LGaucziDD2Smh7N + KOEIedESk0jKDKhYhAnNtKVoHaAnQ7gHEiPB7bnniGuPyXXERbhdrta7nZ26 + YjyhtuFqt1s1R+62bzk0Tipy+A/X9oTp3vsRVHBVV0ouhUnD1dqemBOhA30C + qjBD6+UIXkmn1wFiR1hFequD60w69DatqHzP/b2W20+V3VjPkV2TUmVhakyh + 73yfajwh9HWkKBe2H5smspSqvb481NeXh0zupX/A0FwXYv8KxIEjGbOAe00F + i+QRKVBnvxusCgqKzOiztOVdP7e6FGhmUvTVnvOPQj4hqRjIWhiDiJseUb92 + ylJhfrFw92VmuesAN9UMziFLyDnNevBANrjZKZkNMK2gC6bWJU5ePFfFY48a + SafTXCbE6qmIYcwxhoo+dJKVcXVZ6H3oZS2sFPxnCU0nogITwnH+q3DLNtub + +Ba20Wp1u95QtoYkuYnYLY2WK/xDvj+3tLV9AJFLotnjTJ92+o4pT/u0uaCR + lGMhq9OIzQxO/woDaK7LrG1wvKqgKi+eeX3p8AMbz7wf1gP24lXfhlpjbFhO + xR7w+KrvdpVs4POAkGmJwxJCWvDRjbiVd9fu8+13siZs7fDN6BzNKyMdK15c + IIIDxGBMVoSUFEgvJCPIr4gNspORTLDooDIzaHT/7Nfs8UXsRxYXn2VcV50w + o4XaluwLc5aHzd/tcCq5PJ0aR5Zor/+405ma7/Tt0XTxGwkScHWwR2sCMH8g + Wh/kE6mT7tBjfKJS6ZrHMzB40+1vZmPlXPoGF4E5N8aos48gz14ARxsCPAjU + nDP29oLFjSTVbbSMYyfDx3TNRsLGoSjtNdFVQ+2nOC6QdpbVY3W01wPrIa6+ + nM2BpkxusOkx5RtSuFnQc6xVtO931gbcUHH9aHNPhx8lNt+/vlz+vXr/79s/ + P44+T+AM5Lq6qhf4CwewXdBImjBP7AUmxWFHsOtt8QMGKJHT7Ey++uH4dHy/ + /Q8AAP//AwCI4DmF/BUAAA== + http_version: + recorded_at: Thu, 16 Jul 2015 17:22:59 GMT +recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/should_have_the_correct_attributes.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/should_have_the_correct_attributes.yml new file mode 100644 index 00000000..38a650d0 --- /dev/null +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/should_have_the_correct_attributes.yml @@ -0,0 +1,116 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + John + Doe + kennedi.graham@schowalter.info + + Card Holder + + John + Doe + 10 Lovely Street + Northwest + Company + Herndon + Alabama + USA + 35005 + + fake-valid-nonce + + true + + + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Thu, 16 Jul 2015 17:22:54 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"26cba87b4c3853d1c14e98f5c59e22b4"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 475cad7556a1b42aacde338430b47af4 + X-Runtime: + - '0.829404' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAG7op1UAA7RYyXLbOBC9+ytUutOkNm9F0+PK1CSVyuQSew65pECyJSIm + ARoAJctfnwa4gaJkLfYcXDK6X4MN9PZI/+4lSwdLEJJydjscnXvDAbCIx5Qt + boePD/84V8O74MyPCql4BiI4Gwx8GgeT68lkPPOmvosLLUNdlBCmHFy/hmy2 + fn2+VperbPUyHfuurdXoORVSOYxkEHzlCfNdS6D1KalXf3Pw3XaplRHPcsLW + A0bT26ESBQxdI4eM0DR4AsYgpucLQRKS/SWjhK9IqkCcUzbnvluiND5POIPe + LnPy0pOtIJRU9bGRAKIgdogaqHUOt8MYl4pmMAzG3mjmeJfO6OJhdHkzHt/M + Jj99tzUw9kUeH2ffGpTPN1Fx5hTSWDYuxVQ5ERGxrDYlQpD1UGu7+lKCspCm + KcbbIXEsQMpaXkb6Oa9jXMnqVHA6aWBLW+yeOFeot6JdP7SMefCp/MXnVYIW + IpUAUM0hRt7gG19Cuh78MArf3QC0lvCigMX6WivVdy5UsgKJRj2d5TaPSErV + OvgCgsUcT9dIWpCABVZWcJ+SkGTEd6t1C8i5VCR1sOQgmMw8b+a7tsi+goIp + sTZih6R5QsbB4w99E335W1YTtLrfZjbZZcYKDCyNgqupt2FXa/qGJn6PDKsm + xgBg0soBnw/uDZy0u2yG+X0FVe3yzrIye7g7igKLhQVTbzS+utKYJpK+rihH + Py74j0p9wmZtIxKexlgk5tifcD34YgQl3FY2RjzTzZOSFG/zifEVM7lfy1pY + eZ987lApC8Ii6IbZVjRG77/tw7tBi9RVonQRmOztSWt8DCFV7aHLZauckyKt + /Q45T4GwYaB7s4YaZQsuBEbKwdIrUu2/temmpjaBl5wK44+TcaaSYDTWvWBD + uAW9BiLw9sZeB26kHTSWxYbvc5JKqKwsTxLA6ZVgekDrtiWrYTQjC3AKkQaJ + Urm8cV0iJSh5HgpCme58CzzgiqzPMXvcnKwzYOpXBirh8a+UL7i7xLQ9z9ni + DtiSCs404FYSFof8BUdAs3/zREwnXSAhYU+tax1pDTUdfRqMrq5GVXufNjp0 + RfDUyu5a0AAE5ATz6DsO7/r/WieLUEaC5vqSu+PObTCKIyUIJsun8Tzz3XJV + 6wpGnwvTxkKTrHhkitNUBNN4Mp1FlzANR6PL8YTEY5jPZ2F8SUJvhH/YM3aZ + Nnt/QBdaAsu4I+OnHcnS6C0LgW6UpbSNAPRArdjMUKIKGZR6iPXMNAIbEy2X + WDAyx/2hnFH/Yhn3hLYJWUoHhOCii9nkUx28NQT7j3sbsLlVd/Bv3+1NjL1h + VUaI+A2RKW5sipKznYdpuC+JTDPWPVFiIoNFiy2VbZoLHqE3m/eG3MbzdDFs + 1+7ZQSGlCe5z1Cx1hHch7F3QrdnrbBb97lLBljraskNpn0Hup35lzu2lf1X6 + nkgBjfVpNLA8xgFU0AD30cEyaAdSwupq3kG4LKLTrfH+W0KleaObNimxlSDZ + Ad8+Cupn7yNSTbiOGNF9m/2DuvbnON5ineJYsleZ/o9DqU6w3SO1QhzGOirw + W0ythhxNwep7PIj/1ufawyUq2OHMpXHieHbdXDWPi8h09tarVtapxB1V9zFv + RR/DSMw+gsonBzVk817xFeDnw7V3Mfv89fPFt81hYTIlotI0wHL+6GSpJJ2b + 2PIETXb6rKUrrdpy7yY7AgPyqz4OWz+SbL7z9T6DHPHac8As3DsF986/Uyff + STPvgGm3Z84dOOFO+eRx0gePEz93vGf2fsjL97sLGrlvG9tmAbhskzk4+wMA + AP//AwCtp5NTJRYAAA== + http_version: + recorded_at: Thu, 16 Jul 2015 17:22:54 GMT +recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/successful/succeeds.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/successful/succeeds.yml new file mode 100644 index 00000000..59c80ae0 --- /dev/null +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/successful/succeeds.yml @@ -0,0 +1,322 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + John + Doe + audreanne@pfannerstill.com + + Card Holder + + John + Doe + 10 Lovely Street + Northwest + Company + Herndon + Alabama + USA + 35005 + + fake-valid-nonce + + true + + + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Thu, 16 Jul 2015 17:22:55 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"ecd50d284878868c33ac36895ccc6d31"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 05577e039c611b05ea5a62085c15ec56 + X-Runtime: + - '0.733125' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAG/op1UAA7RYWW/bOBB+768w/K5I8lE7gaJs0GJR7FEskGSx6EtBSZTF + tUSqJOWjv36H1EVZvp19CBzOfEORc36S97TJ0sEKc0EYfRy6d85wgGnIIkIX + j8O311+t+fDJ/+CFhZAsw9z/MBh4JPI/zsbO9H428WxYKBnowgRRacH6Z0Cn + 258/7uVsna03k5Fnm1qFjgkX0qIow/5vLKGebQiUPkX16jPDnt0ulTJkWY7o + dkBJ+jiUvMBDW8txhkjqoyLiGFGKf8lj9QP7kjS9AyPPLhEKmyeM4t4OMdr0 + ZGscCCL72BCeInFkITmQ2xw/DiNYSpLhoT9y3KnlzCz346s7exiNHqbTb57d + Gmj7Io8us28NyufriFgxwWkkmiNFRFoh4pGoNkWco+1Qabv6UgKyAJwDsbZQ + BG4TopaXUZ4u6/hWsjoNrE4KmNIWeyLGFepYpOuHlvH2P5W/8LxK0EKE5BjL + 5hKuM/iDrXC6HbxohWfvAFpLvJGYRsqtleor4zJZYwFGPZ1xbBailMit/wVz + GjG4XSNpQRwvoKr85xQFKEOeXa1bQM6ERKkF5Yb98dRxpp5tikwXFFTyrRZb + KM0TNPLfXpQn+vJjVmOwet5nNj5kRgsILAn9+cTZsas1fUMdvzcKVRNBACBp + xYDFg2cNR+0uu2G+raCqXW4sK72HfaAooFioP3Hc0XyuME0kPVVRlnqc/zcR + 6obN2kQkLI2gSPS1P8F68EULSripbIxYphonQSl4c0nZmurcr2UtrPQniy0i + RIFoiLthNhWN0e3ePr8btEhVJVIVgc7enrTGRzggsr10uWyVMSrS+twBYyn0 + +6GverOCamULLjhEyoLSK1J1fmPTXU1tgjc54fo8VsaoTHx3pHrBjnAPeosR + B++NnA5cSztoKIuds8coFbiyMk6SYJTKBNIDt8c2ZDWMZGiBrYKnfiJlLh5s + GwmBpbgLOCJUdb4FXHCNtmoK2jnaZpjK7xmWCYu+p2zB7BWk7V1OF0+Yrghn + VAEeBaJRwDYwApr9mydCOqkCCRBdtkfrSGuo7ugT353P3aq9TxodHIWz1Mju + WtAAOM4R5NFXBrrq/1onikCEnOTKyd1xZzcYyZaY+jPOJwuos3JV6wpKfhS6 + jQU6WeHKBKYp9yfReDINZ3gSuO5sNEbRCMfxNIhmKHBc+IOecci02fsdutAK + 04xZIloeSJZGb1hwOEZZSvsIQA/UivUMRbIQfqnHkZqZWmBiwtUKCkbksD8u + Z9SfUMY9oWmCVsLCnDPexezyqQ7eGIL9xx0H7G7VHfz7dzuKMTesyggQ/+JQ + Fzc0RcHowcs0vBeFuhmrniggkbFBiQ2VaZpzFsJpdv0G3MZxVDHs157YQQKl + 8Z9z0KxUhA8hzF3gWLFI7mPZpYItdTRl59I+jTxN/cqcO0n/qvS9kgJq6+to + YHmNM6igBp6ig2XQzqSElWtuIFwG0enWeP8todIc6aZNSuwlSGbA94+C+tmn + iFQTrgtGdN/m9KCuz3MZbzFucSnZq0z/x6FUJ9jhkVohzmMdFfgYU6shF1Ow + 2o9n8d/6Xie4RAU7n7k0h7icXTeuZlER6s7enqqVdSrxQNVdxtMnB96K3oeR + 6H04EUsLNGjXr5E//vZ677j/fP7r9xd3d1joTAmJ0A2wnD8qWSpJxxN7nqDI + Tp+1dKVVW+55siPQIK/q43jvR5Ldd77eZ5ALXnvOmIUnp+DJ+Xft5Ltq5p0x + 7U7MuTMn3DWfPK764HHl545bZu+7vHzfXNDAfdvYNgsMyzaZ/Q//AQAA//8D + AJjiUOAhFgAA + http_version: + recorded_at: Thu, 16 Jul 2015 17:22:55 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + body: + encoding: UTF-8 + string: | + + + + + 50.00 + 7rr4gr + + + + Card + Holder + + Solidus + sale + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Thu, 16 Jul 2015 17:22:56 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"b550040df6f3059de2612e50de0e8374"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 93f057a8b3696aff028171eb9a33db2d + X-Runtime: + - '0.698272' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + YtSZkjf/AQAA//8DADqjo5mrEgAA + http_version: + recorded_at: Thu, 16 Jul 2015 17:22:56 GMT +- request: + method: put + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/ctwrf8/submit_for_settlement + body: + encoding: UTF-8 + string: | + + + 50.00 + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 200 + message: OK + headers: + Date: + - Thu, 16 Jul 2015 17:22:56 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"a763ef0feee3742067d894e957137264"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 2a4fec0253e0bd0c67d3bbbc47b0b663 + X-Runtime: + - '0.238483' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + PMMTAAA= + http_version: + recorded_at: Thu, 16 Jul 2015 17:22:56 GMT +recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_completed_payment/can_be_fully_credited.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_completed_payment/can_be_fully_credited.yml new file mode 100644 index 00000000..9dfabc96 --- /dev/null +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_completed_payment/can_be_fully_credited.yml @@ -0,0 +1,390 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + John + Doe + lavon_okon@hermiston.ca + + Card Holder + + John + Doe + 10 Lovely Street + Northwest + Company + Herndon + Alabama + USA + 35005 + + fake-valid-nonce + + true + + + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Thu, 16 Jul 2015 17:23:00 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"5c572134bdc2a47c3e2730796a1fa675"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 2d65fa70f259dfb87789e6b5d4a78c87 + X-Runtime: + - '0.745067' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAHTop1UAA7RYS2/bOBC+51cYviuS/KjjQFE36GJRbHeDBdruoZeAksY2 + G4lUSMqO++t3SL0oy44fyR4ChzPfUEPO65OCjy9ZOliDkJSzu6F/7Q0HwGKe + ULa8G37/9odzM/wYXgVxIRXPQIRXg0FAk9D3R/588mEcuLjQMtTFK8KUg+tf + EZtufz3P1WyTbV4mo8C1tRq9oEIqh5EMwj/5igWuJdD6lNSr3zkEbrvUyphn + OWHbAaPp3VCJAoaukUNGaBqmZM3ZI3/i7LcViIyi3+w6JoFbqjUwX3EGPfMF + eenJNhBJqvrYWABRkDhEDdQ2h7thgktFMxiGI8+fOt7M8T9882e3o/Gt5/0I + 3NbA2Bd5cp59a1A+34TDWVBIE9m4lFDlxEQkstqUCEG2Q63t6ksJyiKaphho + hySJAClreRni+agObiWrc8DpxN+WttgjAa5Qr4W5fmgZ7PBT+YvPqwQtRCoB + oJpD+N7gL76GdDv4ahSBuwNoLeFFAUv0tVaqBy7UagMSjXo6y20ek5SqbfgZ + BEs4nq6RtCABSyyp8D4lEckw/ap1C8i5VCR1sNYgHE89bxq4tsi+goIpsTVi + h6T5iozC71/1TfTlr1mN0ep+n9n4kBkrMLA0Dm8m3o5drekbmvh9Z1g1CQYA + k1YO+GJwb+Ck3WU3zG8rqGqXN5aV2cM9UBRYLCyceP7o5kZjmkgGuqIc/bjw + Xyr1CZu1jVjxNMEiMcf+hOvBZyMo4bayMeKZ7pqUpHibT4xvmMn9WtbCyvvk + C4dKWRAWQzfMtqIxevttn94NWqSuEqWLwGRvT1rjE4ioag9dLlvlghRp7XfE + eQqEDUPdmzXUKFtwITBSDpZekWr/rU13NbUJvORUGH+cjDO1Cv2R7gU7wj3o + LRCBtzfyOnAj7aCxLHZ8X5BUQmVlebICkqoVpge0bluyGkYzsgSnEGm4UiqX + t65LpAQlryNBKNOdb4kH3JDtNWaPm5NtBkw9ZqBWPHlM+ZK7a0zb65wtPwJb + U8GZBtxJwpKIv+AIaPZvnojppAskIuypda0jraGmo09C/+bGr9r7pNGhK4Kn + VnbXggYgICeYRw8cddX/tU4WkYwFzfUld8ed22AUfwIWjuPNJl8GbrmqdQWj + z4VpY5FJVjwyxWkqwkkynkzjGUwi35+NxiQZwWIxjZIZiTwf/7BnHDJt9n6H + LrQGlnFHJk8HkqXRWxYC3ShLaR8B6IFasZmhRBUyLPWQ6JlpBDYmXq+xYGSO + +0M5o/7GMu4JbROylg4IwUUXs8unOnhrCPYf9zpgd6vu4N+/26sYe8OqjBDx + E2JT3NgUJWcHD9OQXhKbZqx7osREBosPWyrbNBc8Rm927w25jefpYtivPbKD + QkoT3ueoWesIH0LYu6BbP5+T8TbvUsGWOtqyU2mfQR6nfmXOHaV/VfpeSAGN + 9WU0sDzGCVTQAI/RwTJoJ1LC6mreQLgsotOt8f5bQqV5pZs2KbGXINkB3z8K + 6mcfI1JNuM4Y0X2b44O69uc83mKd4lyyV5n+j0OpTrDDI7VCnMY6KvBrTK2G + nE3B6ns8if/W5zrCJSrY6cylceJ8dt1cNU+K2HT21qtW1qnEA1V3Bk8f3U7n + B96K3oeRmH0ElU8OasjuvSbh+Me3ufcw//xl9uWf3WFhMiWm0jTAcv7oZKkk + nZvY8wRNdvqspSut2nLvJjsCAwqqPg57P5LsvvP1PoOc8dpzwiw8OgWPzr9L + J99FM++EaXdkzp044S755HHRB48LP3e8Zfa+y8v3mwsauW8b22YBuGyTObz6 + DwAA//8DABdb5MMeFgAA + http_version: + recorded_at: Thu, 16 Jul 2015 17:23:00 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + body: + encoding: UTF-8 + string: | + + + + + 50.00 + 3cwwpg + + + + Card + Holder + + Solidus + sale + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Thu, 16 Jul 2015 17:23:01 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"9d760de2d5ba34dc787fd2bd78e0cda5"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 50eae0597a32c67690faee8115393cbc + X-Runtime: + - '0.671692' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + UWdKX/0LAAD//wMAxpUpFqgSAAA= + http_version: + recorded_at: Thu, 16 Jul 2015 17:23:01 GMT +- request: + method: put + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/bcyc5t/submit_for_settlement + body: + encoding: UTF-8 + string: | + + + 50.00 + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 200 + message: OK + headers: + Date: + - Thu, 16 Jul 2015 17:23:02 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"244f9fb21b1c8cad77c47740c5d26518"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - f669513c294cc5e81bcce099ecc1babe + X-Runtime: + - '0.257519' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + AwAKSDhTwBMAAA== + http_version: + recorded_at: Thu, 16 Jul 2015 17:23:02 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/bcyc5t/refund + body: + encoding: UTF-8 + string: | + + + 50.00 + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 422 + message: Unprocessable Entity + headers: + Date: + - Thu, 16 Jul 2015 17:23:02 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Cache-Control: + - no-cache + X-Request-Id: + - 17dfaf464571cfab3df27552d31f0fbd + X-Runtime: + - '0.149577' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAHbop1UAA6xSy26DMBC85yss34lJVfqQHOdQqV/QfsAC29QS2HS9NCFf + XxMgkCrqqbedndn1zsh6d6wr8Y0UrHdbuVmnUqArfGndfivf316TJ7kzKw2N + TZDIU0IYGu8CmpUQ+twKfXkBgrsGtxKIoJNqpJjABSg4PjJ0bssnbmJnHDvx + KDTPmyx90OpcL0lgJpu3jOO+0NW5r6TJIaBWF/ZqpsYQYI/mBZzzLAg/WlcK + EItjReuqqBKWhQ0iIHOF5VqraXS+V10dPMIpGfXL/5LWDRDU4Y+goPatY5Ol + 6zSNXgZ0e3GvHsDgJsqXXOEdk68qJLMYDH2eF2I1ZkPFJzhObGlOucu609cz + Px7qw/H+rrc/s4M+FnnRFRlrNfS0mn39S9LRyo0/+AMAAP//AwDTAFifwAIA + AA== + http_version: + recorded_at: Thu, 16 Jul 2015 17:23:03 GMT +recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_completed_payment/can_be_voided.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_completed_payment/can_be_voided.yml new file mode 100644 index 00000000..efa7320b --- /dev/null +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_completed_payment/can_be_voided.yml @@ -0,0 +1,416 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + John + Doe + deja.murazik@beatty.us + + Card Holder + + John + Doe + 10 Lovely Street + Northwest + Company + Herndon + Alabama + USA + 35005 + + fake-valid-nonce + + true + + + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Thu, 16 Jul 2015 17:23:04 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"a1540f3b3baca626d35d77b2d3e85043"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 0dc40bc546daba228c7b003d44ab155b + X-Runtime: + - '0.769657' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAHjop1UAA7RYS2/bOBC+91cYviuS/KjTQlE36GK3WGyLBdrsoZeCEscx + E4lUScqO++t3SL0oy44fyR4ChzPfUEPO65OiD095NlqDVEzwm3F4FYxHwFNB + Gb+/Gd99+8O7Hn+I30RpqbTIQcZvRqOI0XgezGeTcBpGPi6MDHXpinDt4fpX + wufbXz/f6cUm3zzNJpHvag16yaTSHic5xH+JFY98R2D0GWlWvwuI/G5plKnI + C8K3I86ym7GWJYx9K4ecsCym8ECu8lKSX+zxtwSI1turUkV+pTW4YiU4DKyX + 5Gkg20CimB5iU4n7AvWIHultATdjikvNchjHkyCce8HCC99+CxfvJ9P3wex7 + 5HcG1r4s6Hn2nUH1fBsNb8kgo6p1iTLtpURSVW9KpCTbsdH29ZUEZQnLMoyz + RyiVoFQjryL8sGxiW8uaFPB64XelHfZIfGvUc1FuHlrFOv5Y/eLzakEHUVoC + 6PYQYTD6W6wh246+WkXk7wA6S3jSwKm51lr1RUi92oBCo4HOcVukJGN6G38C + yanA07WSDiThHisqvs1IQnIS+fW6AxRCaZJ5WGoQT+dBMI98V+ReQcm13Fqx + R7JiRSbx3VdzE0P5c1ZTtLrdZzY9ZMZLDCxL4+tZsGPXaIaGNn53HKuGYgAw + adVILEe3Fk66XXbD/LKCqnd5YVnZPfwDRYHFwuNZEE6urw2mjWRkKsozj4v/ + ZcqcsF27iJXIKBaJPfZHXI8+WUEFd5WtkchN02Qkw9t85GLDbe43sg5W3adY + ekypkvAU+mF2Fa3Ry2/79G7QIU2VaFMENnsH0gZPIWG6O3S17JRLUmaN34kQ + GRA+jk1vNlCr7MClxEh5WHplZvx3Nt3VNCbwVDBp/fFywfUqDiemF+wI96C3 + QCTe3iTowa20h8ay2PF9STIFtZXjyQpIpleYHtC57cgaGMvJPXilzOKV1oV6 + 7/tEKdDqKpGEcdP57vGAG7K9wuzxC7LNgesfOeiVoD8ycS/8NabtVcHvPwBf + Mym4AdwowmkinnAEtPu3T8R0MgWSEP7YudaTNlDb0WdxeH0d1u191urQFSky + J7sbQQuQUBDMoy8CdfX/jU6ViUolK8wl98ed32K0eAQeL95Ntz/zyK9Wja7k + 7Gdp21hikxWPzHCaynhGp7N5uoBZEoaLyZTQCSyX84QuSBKE+Ic945Bpu/cr + dKE18Fx4ij4eSJZW71hIdKMqpX0EYADqxHaGEl2quNIDNTPTClxMul5jwagC + 94dqRn3GMh4IXROyVh5IKWQfs8unenhnCA4f9zxgd6v+4N+/27MYd8O6jBDx + AKktbmyKSvCDh2k5L0ltMzY9UWEig0OHHZVrWkiRoje794bcJghMMezXHtlB + I6WJbwvUrE2EDyHcXdAtmjxs3tI+Feyooys7lfZZ5HHqV+XcUfpXp++FFNBa + X0YDq2OcQAUt8BgdrIJ2IiWsr+YFhMshOv0aH74l1JpnummbEnsJkhvw/aOg + efYxItWG64wRPbQ5Pqgbf87jLc4pziV7ten/OJSaBDs8UmvEaayjBj/H1BrI + 2RSsuceT+G9zriNcooadzlxaJ85n1+1VC1qmtrN3XnWyXiUeqLrzePr0wFvR + 6zASu49k6tFDDdm9VxpPv397F8ymn4OP//y5OyxspqRM2QZYzR+TLLWkdxN7 + nmDIzpC19KV1Wx7cZE9gQVHdx2HvR5Ldd77BZ5AzXntOmIVHp+DR+Xfp5Lto + 5p0w7Y7MuRMn3CWfPC764HHh546XzN5Xefl+cUEj9+1i2y4Al10yx2/+AwAA + //8DAOksVkgdFgAA + http_version: + recorded_at: Thu, 16 Jul 2015 17:23:04 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + body: + encoding: UTF-8 + string: | + + + + + 50.00 + 793yqm + + + + Card + Holder + + Solidus + sale + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Thu, 16 Jul 2015 17:23:05 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"6e98194afbd3b5be8ece94d0e163559b"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 35e1059a493c05515fdc0cfe8edee2d0 + X-Runtime: + - '0.594879' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + F+ObGHWm9Nl/AAAA//8DALFEonSnEgAA + http_version: + recorded_at: Thu, 16 Jul 2015 17:23:05 GMT +- request: + method: put + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/8fct58/submit_for_settlement + body: + encoding: UTF-8 + string: | + + + 50.00 + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 200 + message: OK + headers: + Date: + - Thu, 16 Jul 2015 17:23:06 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"efdc70a825137a87c46de962e413d4db"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 2ee8a84eb8aab02a06d147bbb890e484 + X-Runtime: + - '0.220252' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + r2UTi78TAAA= + http_version: + recorded_at: Thu, 16 Jul 2015 17:23:06 GMT +- request: + method: put + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/8fct58/void + body: + encoding: UTF-8 + string: '' + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 200 + message: OK + headers: + Date: + - Thu, 16 Jul 2015 17:23:07 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"b6eb7bd55b1963703b4ec7a0cdc936c7"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 97ddf2ccc259e691bd25ec078a784c1d + X-Runtime: + - '0.221250' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + mxhUpvjZvwAAAP//AwByJHaRpRQAAA== + http_version: + recorded_at: Thu, 16 Jul 2015 17:23:07 GMT +recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/failure/fails.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/failure/fails.yml index 738cca4d..c1fb80f3 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/failure/fails.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/failure/fails.yml @@ -10,8 +10,9 @@ http_interactions: John Doe - efrain.stark@nolan.info + carroll@lebsack.com + Card Holder John Doe @@ -28,7 +29,6 @@ http_interactions: true - {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} headers: Accept-Encoding: @@ -47,7 +47,7 @@ http_interactions: message: Created headers: Date: - - Wed, 15 Jul 2015 16:03:32 GMT + - Thu, 16 Jul 2015 17:23:19 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -68,31 +68,124 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"8dd5cab405431be9e436140cc7a232ac"' + - '"2a2aa20425ce590c3ab9772781bfb112"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - f04d03f6b720da337f7ff8735f8d0de1 + - ce98cd7c309574b462702c003476afb1 X-Runtime: - - '0.560592' + - '0.250963' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAFSEplUAA6RTS3ObMBC+51cw3EG2qZPYI+McOj30nF56ySxosdVIK1US - scmvrwC/Unrp5Pg99qH9gG+PWiVv6Lw0tEnn+SxNkGojJO026Y/nb9ljui3v - eN36YDS68i5JuBRlsXosVsXinrMIei5q9R4oZBG/V7Ts3n+vwsNBH45fFpzd - qr27kc6HjEBj+d3sibMbotcVnNFXg5xdYS/WRlugLiGpNmlwLaZs4FGDVCU2 - DiTlPoB7fSKjgHJJjeFslHuj3RvCSXkDxwl3wMrLMPXWDiGgyCAkobO4SUWE - QWpMy8VsvsxmD9l8+Ty/X8+KdbH4ydm1YKhvrfi/+mvBOH+II2skKuEvKwkZ - shqc8Kem4Bx0p40tdBZUBnVtWgofHb1hYhnJSAfzilSuwtIWFWcjOmvjTX8B - YS4MPuERtFWYx4Ru7j04BTbQqvNzK2MUAqVlf1POTuLFLDXsMGudKvchWL9m - DLzH4POqzzY4xF28xgG6fhKLe2uk8KIx7I14UWZn2PiW3NJui/QmnaHesvFA - ojLH+NVeJpxnfjLSoccnYx16+LbytZM2xB/yH0FGB5sG9TfnBxKEcBgPN2kT - l7/8z38AAAD//wMAM5q/OAIEAAA= + H4sIAIfop1UAA6RTy3KbMBTd5ysY9kLGdezEI3AWnS66TjfdZC7SNSjRg0oi + Nvn6CvAjCd10smHmnnPu8yC2O2qVvKLz0poizbNFmqDhVkhTF+mvxx/kLt2V + N4x3PliNrrxJEiZFub5br/L4YTQGAxY53oAJJMZvlbnt3/7ch81BH46rJaPv + 2UG9l84HYkBj+dM2htF3wMArOEffLTJ6DQeSW92C6RMjVZEG12FKRxw1SFVy + cM4q9aCw8sBfsqhmdKIGUdtYg7PUPRxn2CEWkGGu5Q4hoCAQktC3WKQihkFq + TMvlIr8liw3J14/5Zrv8ts3vfzN6TRjzu1b8X/41Yeo/WkH2EpXwl5GEDCSu + LvypaLwC9KeJW+hbUAQ4t50JHxWDYCaZwAgH+4KmXD1XtY5WT9GZm276DAYz + YfEBj6BbhZ/uPSoF7qFT53UraxWCScvhpoyeyItYaqiRdE6VTQit31IK3mPw + WeVAmuAQ63iNA/RDJxrn1mjCk8bQWPGkbG3ptEvWmnqH5lU6awZJ4cGIyh7j + H3vpcO75RUvHGl+0dazhu8pzJ9sQH+M/jIwKOjfqM+ZHEIRwGA83KxOHv7zl + vwAAAP//AwDqhgFk/gMAAA== http_version: - recorded_at: Wed, 15 Jul 2015 16:03:32 GMT + recorded_at: Thu, 16 Jul 2015 17:23:19 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + John + Doe + carroll@lebsack.com + + jane.doe@example.com + + John + Doe + 10 Lovely Street + Northwest + Company + Herndon + Alabama + USA + 35005 + + fake-paypal-future-nonce + + true + + + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Thu, 16 Jul 2015 17:23:20 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"e10335969c882971692afd69c9b1322b"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 72e5d74bdd6e5e0ea3ea140742781a0e + X-Runtime: + - '0.263899' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAIjop1UAA6RTuXLbMBDt/RUc9hR0xJKtASkXmRSpnSaNZwmsSNjAggFA + S/TXByR12GaajMt37A3w3dHo5BWdV5bydDGbpwmSsFJRlae/Hn9kd+muuOGi + 9cEadMVNknAli816vlzdr1ecRdBzURM1UMgifivptnv7cx82B3M4flty9l7t + 3XvlfMgIDBY/bU2cvSN6XcMZfbfI2RX2orCmAeoSUjpPg2sxZQOPBpQuBDhn + tX7QWHoQL7Po5myUelNTW8JJ6B6OE+4QE6gw9QqHEFBmEJLQNZinMsKgDKbF + cr64zeabbLF+XGy2y9V2Of/N2TVgiG8b+X/x14Cx/nCKbK9QS39pSaqQxdGl + PyWNW4Du1HEDXQM6AyFsS+GjozdMLCMZ6WBfkIq7ff1MJWcjOmvjTp+BcCYt + PuARTKPx074Hp8Q9tPo8bmmtRqC06HfK2Um8mJWBCrPW6aIOofFbxsB7DH5W + OlAUHGIVt3GArq/EYt8GKTwZDLWVT9pWlo2zzBqqdkivylnqLbkHkqU9xhd7 + qXCu+cWTDjm+eNYhh29LL5xqQvyM/zhkdLDpoT5zfiBBSodxcZM0sfnLX/4L + AAD//wMAsJXyK/4DAAA= + http_version: + recorded_at: Thu, 16 Jul 2015 17:23:20 GMT - request: method: post uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions @@ -101,18 +194,13 @@ http_interactions: string: | - - 2 - luella@binshudson.biz - jane.doe@example.com - - - R032156106-QZKEF46U + 76023963 + R855391436-FJRR9M9A - 4001.00 - 9t5p3b - Spree + 45.75 + 8fhjnb + Solidus sale headers: @@ -132,7 +220,7 @@ http_interactions: message: Created headers: Date: - - Wed, 15 Jul 2015 16:03:33 GMT + - Thu, 16 Jul 2015 17:23:20 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -153,57 +241,57 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"606a4c7154bf0773d82c85b0bdb27906"' + - '"20357bfc755285fae03dddd4b95d25cf"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 9f39d757ce33bf5f595e06de6aebf03e + - 603159c3dbf4f9d18fe205c981b8fd4c X-Runtime: - - '0.306843' + - '0.316882' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - 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 http_version: - recorded_at: Wed, 15 Jul 2015 16:03:33 GMT + recorded_at: Thu, 16 Jul 2015 17:23:20 GMT - request: method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/7zz7yp/submit_for_settlement + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/d3qt9t/submit_for_settlement body: encoding: UTF-8 string: | @@ -228,7 +316,7 @@ http_interactions: message: Unprocessable Entity headers: Date: - - Wed, 15 Jul 2015 16:03:33 GMT + - Thu, 16 Jul 2015 17:23:21 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -251,53 +339,53 @@ http_interactions: Cache-Control: - no-cache X-Request-Id: - - 4893d500900b7d0b1fca66c60ab61d40 + - 5b82979f46ec11f0369f46e7a82c8ce4 X-Runtime: - - '0.230048' + - '0.163403' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - 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 - /wMAiLIiHeoaAAA= + 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 + AAD//wMAzeRw3kkYAAA= http_version: - recorded_at: Wed, 15 Jul 2015 16:03:33 GMT + recorded_at: Thu, 16 Jul 2015 17:23:21 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/success/can_be_voided.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/success/can_be_voided.yml index bb2dd856..f061c4c6 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/success/can_be_voided.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/success/can_be_voided.yml @@ -10,8 +10,9 @@ http_interactions: John Doe - lillie_boyer@eichmann.ca + burnice_schiller@stiedemann.name + Card Holder John Doe @@ -28,7 +29,6 @@ http_interactions: true - {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} headers: Accept-Encoding: @@ -47,7 +47,7 @@ http_interactions: message: Created headers: Date: - - Wed, 15 Jul 2015 16:03:30 GMT + - Thu, 16 Jul 2015 17:23:16 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -68,31 +68,124 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"49e29202070b95d171fa5b887b023acc"' + - '"2bf27194b0419a895383f881ee65472f"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 2f601665d5ecd140b0133a5116d8b88b + - 28aee6a28e2032f1e64c353baf0a8335 X-Runtime: - - '0.256347' + - '0.377438' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAFKEplUAA6RTS3ObMBC+51cw3EHYKbHjwTiHTg89p5dePIu0NmqkFZWE - bfLrK8CvlF46OX6PfWg/KDYnraIDWicNreNZmsUREjdC0n4d/3j9lizjTflQ - 8NZ5o9GWD1FUSFHOl3m2fMqfCxZAzwWN10A+Cfi9orx7//3sF0d9PH2ZF+xe - 7d07aZ1PCDSW301NBbsjel3BBX01WLAb7EVudAPURSTVOva2xZgNPGqQqlRS - KYnbynRoX1DyWgNRyqFgo947m9oQTup3cJpwR6yc9FMvtwgeRQI+8l2D61gE - 6KXGuJxnszzJFsksf509rbLH1WP2s2C3gqG+bcT/1d8KxvlDHslOohLuupKQ - PuFghTs3BWuhO2/cQNeASoBz05L/6OgNE8tIBtqbN6RycXjL57ZgI7po401/ - AWEqDL7gCXSjMA0R3d17cArcQasuz62MUQgUl/1NC3YWr2apYY9Ja1VZe9+4 - FWPgHHqXVhYkeYu4D9c4QtdPYmFvjeS3Gn1txFaZvWHjW9KG9hukg7SGesva - AYnKnMJne51wmfnJSIcen4x16OHaynErGx/+yH8EGRxsGtTfnBtIEMJiONyk - TVj++kP/AQAA//8DAC5g1F0DBAAA + H4sIAITop1UAA6RTu3LbMBDs/RUc9iREyZZsDUS5yKRI7TRpNEfgJCIBDgwA + WqK/PiBpPRymybi83b29wy3Jtyejk1d0XlnapEU+SxMkYaWiwyb9/vI1e0y3 + 5R0XrQ/WoCvvkoQrWRbLRTF/nD1xFosei5yogUIW67eKHrq3309hdTTH0/2c + s1u2V++V8yEjMFh+szVxdgP0vIZz9cUiZ9eyJ4U1DVCXkNKbNLgWUzbgaEDp + smodKYE7L2qlNbpnHxTKyBHlvQVno67vaGpLOPHZw2mCHbHyKky1wiEElBmE + JHQNblIZy6AMpuV8Vjxks1VWLF+K1Xq+WBfLH5xdG4b+tpH/139tGOcPuWR7 + hVr6y0pShUyAk/7dFJyD7n3jBroGdAZC2JbCR0UvmEhGMMLB/kIqK3m/oCNn + Y3Xmxpv+BMJcWnzGE5hGYx6jurn3oJS4h1afn1tZqxEoLfubcvZOXsTKwAGz + 1umyDqHxa8bAeww+rxwoCg7xEK9xhK6fxOLeBinsDIbayp22B8vGt+QNHbZI + r8pZ6iUbDyQre4qf72XCeeYnIx08Phnr4OHbygunmhD/zH8EGRVsGtTfmB9A + kNJhPNzEJi5/+bH/AAAA//8DAC4zGWYLBAAA http_version: - recorded_at: Wed, 15 Jul 2015 16:03:30 GMT + recorded_at: Thu, 16 Jul 2015 17:23:17 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + John + Doe + burnice_schiller@stiedemann.name + + jane.doe@example.com + + John + Doe + 10 Lovely Street + Northwest + Company + Herndon + Alabama + USA + 35005 + + fake-paypal-future-nonce + + true + + + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Thu, 16 Jul 2015 17:23:17 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"90cac6f0da547b6bc8de9c0ef13633e6"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - ba39dda0f2916acbda2e44cbe8fb080f + X-Runtime: + - '0.211842' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAIXop1UAA6RTu3LbMBDs/RUc9iQk2bJsDUS5yKRI7TRpNEfgRCIBDgwA + WqK+PiBpPRymybi83b29wy3Jt0ejkzd0XlnapPN8liZIwkpF1Sb9/vo1e0q3 + xR0XrQ/WoCvukoQrWSyen1az++UDZ7HosciJGihksT6VtOxOv5/D6mAOx4cF + Z7dsr94r50NGYLD4Zmvi7AboeQ3n6otFzq5lTwprGqAuIaU3aXAtpmzA0YDS + Rdk6UgJ3XtRKa3QvPiiUkSPKewvORl3f0dSWcOKzh+MEO2DpVZhqhUMIKDMI + Sega3KQylkEZTIvFbL7MZqts/vg6X60X9+v56gdn14ahv23k//VfG8b5Qy7Z + XqGW/rKSVCET4KR/NwXnoHvfuIGuAZ2BELal8FHRCyaSEYxwsL+QisfqcDKO + s7E6c+NNfwJhLi2+4BFMozGPUd3ce1BK3EOrz88trdUIlBb9TTl7Jy9iZaDC + rHW6qENo/Jox8B6Dz0sHioJDrOI1DtD1k1jc2yCFncFQW7nTtrJsfEveULVF + elPOUi/ZeCBZ2mP8fC8TzjM/Geng8clYBw/fll441YT4Z/4jyKhg06D+xvwA + gpQO4+EmNnH5y4/9BwAA//8DAGLf/fQLBAAA + http_version: + recorded_at: Thu, 16 Jul 2015 17:23:17 GMT - request: method: post uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions @@ -101,18 +194,13 @@ http_interactions: string: | - - 2 - keshaun_batz@stantonveum.name - jane.doe@example.com - - - R617240243-DR6GQU86 + 29870354 + R368285154-H78ZUVBA - 50.00 - 7vk52r - Spree + 45.75 + 6gwzmr + Solidus sale headers: @@ -132,7 +220,7 @@ http_interactions: message: Created headers: Date: - - Wed, 15 Jul 2015 16:03:31 GMT + - Thu, 16 Jul 2015 17:23:18 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -153,63 +241,64 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"555cbc6e282101d61478e366bddf4631"' + - '"521da6b5b17247d7e961090f0b0ca42b"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 693c19e4b76ea4acb4d4d56379c2f424 + - 2fe0dbef6b55f9342caa6410f54c6bac X-Runtime: - - '0.461538' + - '0.358065' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAFOEplUAA+xYS3PbNhC+51d4dIcpyZaseGTmMXYz7uTQxvGhvXhAYiWi - BgEWAGWpv74LgqRIEYzdmR566E3c/QDsC7sftP6wz8XZDrThSt5MZufTyRnI - VDEutzeTx+8/kdXkQ/xubTWVhqYWUfG7s7M1Z/Fmp3dzto7wp5MYS21pYlra - TGn+F6CmFjmtPRQQGypgHVU/nSwttcazDoQbRfBIiB8fbtfRUOzANFeltPFi - ej6drqP6yyly0GlGpSU0TZ2QoD2m0IAnhVRuidIMtPv4tpxdzS+n88sLcvtt - +eXXx9VyHbXaykYN1AIj1J45u28mDD8tz2ESz6ezBZlekdni+2x5Pb24vpj+ - jta3C6r1ZcH+2frjgjpGxir0w334sM9Xi+lquXjfBB6lG66NJZLmEP+sMrmO - OgKPELT5vlUYmOOnV6cqL6g8nEkubiZWlzCJag3klItYcCE4PCXqAPoj8DTL - qZTnKV1HXu+xL5AYbiGwS5EpGZJv6P5U6vJ/dHmduJPltnU/tEnrbEDZehrQ - jXttLNYPlg1jGowJhWVvQTKXplGIUCkV3Ia217DFexSKk8IrI6qiD9qLNawP - 4+54tVtNqCgyOn8T6uI1lCwxGzwdZqqTHPRpU0pGhhk6akx9BajW9NBTYiA7 - DSa0iQFrBeSAlzihNs2CmIwXxf/F8h8tlm526rZGNhwEMx5Ad4aA1koTjFGh - pIGgaxWu43ofHd/jbPghoNmin7XwLj/EVG7sdsOVQ6GDbrGrv9ADav4AX+U4 - KMwwsetCqxRPwzg0o5RW8GAwjuD+ibOpm5Jj2pGVFgs1/lSgZuem9xiiiiBj - 3FmFMR7CBlbuFE9dHjaYX1yBJZKAHvpSummNp/gBPIKydE/89A+qYA950cza - RCkBVE7iDRXGMY8W0Mx29IKkVDeD1KpnkPHV7nkx1wivvrwm4aErWDWMy9CV - wD2JMyLYDgqufU5zJW0W4xQ9FQ2QB6C6D6wk9Wn1xCSujdhwt3AWZUpUkQ23 - BJ7TLZBSiziztjDXUUQNtl1znmjKpbsKdQ2fYy+MCnpw3fgpByxS9iTUVkWl - fJbqRZ4XcvsB5I5rJR3mxlDJErVHxtIeUbcwDQVFGvPoF7qa8wKvzoAKm6Hl - cER0ZB7EIOH2qPeftarUmDcsvG0pHKnqoE41bZN3nJFTcYR2ZLXR9KCV6CAa - QR1GY0psczim5PMR05P226baEKelMoXuqUNlEzPFyrTisp2wtTIPKiX/s4T6 - DqEYs8Cx2Q6uk7ucIHNFDHseuTStvmZn/UtT036ScSxBfehN+HY+VgjAjerE - uJuGFBgVefFGWtzi2x1++N6oEGNPBh8hgwyTIY/dAjZ6/16oZK2FHUJiFPYm - iGnB0ZKh3PsZnTraSurg+C4naJjglIlJNS9GCVBH3/akin6RAgeuYgQ5BnFh - DOT4BIlmaRvEoskn57hWT7CrB7gb46Yq06AO/C6q6VEjTWfsZYA9Ymhbf1Nk - Ru6piH6NVG6r990eX4ISRPzgc918enKpd25CbQDGZos7Wb0Qn9CBFiORlNp4 - fsrA4pvIND2opwqnp0Nuw8f3MYMH8hvhsHdOYwPWYTMcE8diRUoW2rBM0wB3 - xaSM+O48L0oLoeqohwfhEilWWf2s/hVAeUHFU/1cX0djuD6B6fja5zldDjMK - en2vivW8tldLjWyG9UXwkrnqAzR9o4ZUp/LzVdKBMOze/old/f4Ie2yBAtwE - rqLTqtsFPl4s/uXTb2RJLzdsBvOE0uV8Pl0mi4Qmq3nSCWwzMPpcE8UPn77e - kSm7nDF2mV5sNleLlK6wi57i/i3u4EPyduqAc77cOgNu7z4/fiGr5VU6vVqu - 0iWjFQnwymMcwQcqxIw6b5FQh6qi7CN69+3p/pZgNBisFrN09p6t3tfhbP8y - apcM/pUZiLvok39oToXNrRYCxViJtn5E1CPv7uv9l/vPX++wf49BGhpY2Kos - Q66OvuFPxuF4nwwAX+1W66i5Dr3hGr/7GwAA//8DAAVxfImcFAAA + H4sIAIbop1UAA+xYS3PbNhC+51d4dIept+QMzcQZu6k7OWSSuDPNxQMRKxE1 + CbAAKEv59V0QJEWKYOzO9NBDb+LuB2Bf2P2g8N0hSy/2oDSX4no0uRyPLkDE + knGxux49fPuFrEfvojehUVRoGhtERW8uLkLOouXquFrPwwB/Wok21BQ6ooVJ + pOI/gIVBJbJac8wh0jSFMCh/WllcKIVnHQnXkuCRED18vQ2DvtiCaSYLYaL5 + 4nK1CIPqyyoyUHFChSE0jq2QoD06V4An+VR2iVQMlP34Mluup+vFZDEnv67W + 3x9+/3ATBo22tFEBNcAINRfW7usRw0/DMxhF0/FkQcYrMll+m6zeTmdvJ+vv + aH2zoFxf5OyfrT8tqGKkjUQ/7IcL+/RqvRrPFk3gUbrlShsiaAbRbzIRYdAS + OERK6+9biYE5fTp1LLOciuOF4On1yKgCRkGlgYzyNNoUSvAYHnWc8DQF9V4b + Dgx1QlzabcLA4dyaZ9hobsCzW55I4ZNv6eFcauvg5Hq4wXOxJJsw+DZpnPYo + G489umHvtcE6wvJhTIHWvvAcDAhm0zUISWVMU2582yvY4X3yxUni1UnL4vfa + i7WsjsPuOLVdTWiaJ3T6KtTsJZQoMBs87meqlRz0aVsIRvoZOml0dRWoUvTY + UWIgW43Gt4kGY1LIAC/zhpo48WISnuf/F8t/tFja2anaG9lySJl2ALrXBJSS + imCMcik0eF0rcS3Xu+joHmfETwH1Ft2s+Xf5KaZ0Y7/vr+wLLXSH3f2ZHlHz + J7gqx4Gh+4kNcyVjPA3jUI9UWsK9wTiBuydOxuNxGAxpB1YaLNToJkfN3k7x + IUQZQca4tQpj3If1rNxLHCKo3mJ+cQWWyAZU35fCTm08xQ3iAZShB+JYgFcF + B8jyeuZupEyBilG0pam2DKQB1DMevSAxVfVANfIJRLTcPf/IFMLLL6fZcN8V + LBvG3HclcE9ijfC2g5wrl9NMCpNEOEXPRT3kEajqAktJdVo1MYltI8bfLaxF + iUzLyPpbAs/oDkih0igxJtdvg4BqbLv6cqMoF/YqVDV8ib0wyOnRduPHDLBI + 2WMqdzIoxJOQz+IyF7t3IPZcSWEx15oKtpEHZC7NEVULU5BTpDMPbqGtOSdw + 6gRoahK0HE6IlsyBGGy4OendZ6UqFOYNC29XpJZctVDnmqbJW+7IaXqCtmSV + 0fSoZNpC1IIqjFoX2OZwTImnE6Yj7bZNuSVWS0UM7VP7yjpmkhVxyWlbYWtk + DlQI/lcB1R1CMWaBY7PtXSd7OUFkkmj2NHBpGn3FzrqXpqL/JOFYgurYmfDN + fCwRgBtVibE3DakwKrL8lfS4wTc7/PTdUSKGng4uQhoZJkMmuwNs9O7dUMoa + C1uEREvsTRDRnKMlfbnzMzh3tJFUwXFdLqV+glNsdKx4PkiAWvqmJ5X0i+Q4 + cCUjyDGIDaMnx2dINEsZLxZNPjvHtnqCXd3D3RjXZZl6deB2kXWPGmg6Qy8D + 7BF927qbIjOyT0b0a6ByG73r9vgiFJBGX2XKWaGxkiuBo5dqb2fUFmBoutiz + 5TNxKe1pMRb4WNKOoTIw+CrSdRfqqPwJatFb//FdTO+p/Eo4HKzT2IKV3wzL + xbFckZT5Nizi2MNeMS0DvlvP88KArz6q8UG4QJJVlD/L/wdQntP0sXq4h8EQ + rkthWr52mU6bxQyCXt6r5D0v7dWQI5NgNyF4zWz9AZq+lX2yU/r5Iu1AGPZv + 98guf7+HAzbBFOwMLqPTqJsFLl4s+nzzB2ELCrP5ZD2dzeiYrhlMtsvJejVt + BbYeGV22ieKvN5/uSDy5Wq83s1W8WsBiQufYR89x/xZ7cCF5PXnASV/srAG3 + dx8ePpLZGLbr8dU03jBa0gCnPMURXKB83Kj1GvH1qDLKLqJ3Xx7vbwlbzleT + 8WZOr+iSTWBcZ6JzniK9/2d64jb67L+ac2F9q+3/MJZ0m+oZUQ29u0/3H+8/ + fLrDDj4EqYlgbsqy9Lk6+Io/G4jDfdIDfLFbhUF9HTrjNXrzNwAAAP//AwCr + h7OFphQAAA== http_version: - recorded_at: Wed, 15 Jul 2015 16:03:31 GMT + recorded_at: Thu, 16 Jul 2015 17:23:18 GMT - request: method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/fvrv2d/submit_for_settlement + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/67y784/submit_for_settlement body: encoding: UTF-8 string: | - 50.00 + 45.75 headers: Accept-Encoding: @@ -228,7 +317,7 @@ http_interactions: message: OK headers: Date: - - Wed, 15 Jul 2015 16:03:31 GMT + - Thu, 16 Jul 2015 17:23:19 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -249,54 +338,54 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"fae506a6e7cc40ffea4f22eb11cddc89"' + - '"630eee7e225f6e5afd54d3b2c3ebdb3d"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 1a815f6bf0d8562960cbf22256ad188e + - 4639182e2c6b9d49dd860790f58f4d38 X-Runtime: - - '0.260482' + - '0.305655' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAFOEplUAA+xYS3PbNhC+51d4dIdFyZasZGQmTu1m3MkhdeJDe/GAxEpE - TQIsAMpWf30XAEmRIhh7pj1kpr2Rux8e+8DuB6zfPxf5yQ6U5lJcTman0eQE - RCoZF9vLyf23n8lq8j5+szaKCk1Tg6j4zcnJmrN4s1O7OVtP8dNKtKGm0rEG - Y3IcvJ7WAqsz+xJiTXNYT92nlaWVUrjSnnAtCS4I8f3X6/V0KLZgWshKmHgR - nUbRelr/WUUBKs2oMISmqRUS3I0uFeBKIZUdIhUDZX/ulrOL+Xk0Pz8j13fL - T7/er5braat1e1RADTBCzYnd9+WE4a/hBUzieTRbkOiCzBbfZst30dm7s+h3 - 3H07wI2vSvb68TMcfxhQ+0gbiXbYH+/0+WoRrZaLt43bUbrhShsiaAHxLzIT - 62lH4BE5bf6vJTrm8OvVqSxKKvYngueXE6MqmExrDRSU53HO85zDQyL3oD4A - T7OCCnGa0vXU6z32CRLNDQRmKTMpQvINfT6W2vgfTF4ndmWxbc0PTdIaG1C2 - lgZ041Zrg/mDacOYAq1Dbnk2IJgN0ygklynNuQlNr2CLpyjkJ4lHJndJH9wv - 5rDaj5vj1XY0oXmZ0fmrUGcvoUSF0eDpMFKd4KBNm0owMozQQaPrI0CVovue - Eh3ZKS+hSVxRgQLwECfUpFkQk/Gy/D9ZftBk6UanLmtkwyFn2gPoThNQSiqC - Piql0BA0zeE6pvfR8S32hu8Cmin6UQvP8l2MM2O3G44cCi10i1X9ie5R8wf4 - LMdGoYeBXZdKprga+oFWJpOK/0UdPOiMA7i/4iyyXXJMOzLSYKLGVyVqdsCC - ox3CeZAxbneFPh7CBrvcSZ7aOGwwvjgCUyQBNbSlst0aV/ENeARl6DPx3T+o - gmcoyqbXJlLmQMUk3tBcW+bRAprejlaQlKqmkRr5CCK+2D0u5grh7s9rEh46 - gq5gnIeOBM5J7CaC5aDkyse0kMJkMXbRY9EAuQeq+kAnqVerOyaxZcSEq4Xd - USZz59lwSeAF3QKpVB5nxpT63XRKNZZdfZooyoU9CnUOn2ItnJZ0b6vxQwGY - pOwhl1s5rcSjkE/itBTb9yB2XElhMZeaCpbIZ2Qs7RJ1CVNQUqQx936gzTkv - 8OoMaG4y3DkcEB2ZBzFIuDno/W+tqhTGDRNvW+WWVHVQx5q2yFvOyGl+gHZk - 9abpXsm8g2gEtRu1rrDMYZsSjwdMT9ovm3JDrJaKFLqrDpWNzySrUsdlO25r - ZR5UCf5nBfUZQjFGgWOxHRwnezhBFJJo9jhyaFp9zc76h6Ym/STjmIJq3+vw - bX90CMCJ6sDYk4YUGBVF+Upa3eLbGerLRVMkbcU63DccYuzK4D2kkWEy5LFb - wELv7wtO1u6wQ0i0xNoEMS057mQo93ZOh4b+c9tn37NdV0nBDabvw0aqhwNF - +g96InDn/CEsbyX1AfGdLqdhklslOlW8HCXBHX3blxwFJyWSLskI8kxinRg4 - 50dI3JYyQSxu+Wgd2+4JdvYAf2dcu1IV1IGfRTZ9aqTxjN0OsU8M99afFNmx - fS5Au0aqV6v3HT/Deyvk8Vcf6+bXXzDUzrKUDcAYv7AryyfiAzrQoieSSml/ - R2Fg8F6smz7UU4XD07nghJfvYwaPJK+Ew7M1GpuwCm/D3sYwWZGWhyas0jRw - f8GgjNhuLS8rA6HsqAkE4QJpduU+3csQykuaP9RPNuvpGK5PYju29rnu+RET - HgW+PJ9jvz9JgXfIok+QR9GOlmaYbARPnE1FQDs2csh9ndEvslCEYTv3by7u - +wM8YzXMwVIy56pW3Q7wzmPxl6vfyJKeb9gM5gmly/k8WiaLhCaredLxcsMg - +pcPFH+9+nxDInY+Y+w8PdtsLhYpXWFJPcb9W2TSu+T1XBKJX7W1G7i++Xj/ - iayWF2l0sVylS0YdK/TKgx/BOypElTuX01C5cl72Hr25e7i9JugNBqvFLJ29 - Zau3tTvbN8R2yOCZbiDuoo+e7I6FzRHPcxRjJpr6Vln3v5vPt59uP36+wWI+ - BmnuBaVxacnin66+fLu/u0GLsDQexM0zxMj7zlGbPNTPODpdRP1e2VGGR448 - Cb8Mc2WoOUW9AfGbvwEAAP//AwBKXyDI4hYAAA== + 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 http_version: - recorded_at: Wed, 15 Jul 2015 16:03:31 GMT + recorded_at: Thu, 16 Jul 2015 17:23:19 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/success/succeeds.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/success/succeeds.yml index f9949912..71a590bd 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/success/succeeds.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/success/succeeds.yml @@ -10,8 +10,9 @@ http_interactions: John Doe - jalyn@reilly.us + melba@danielmohr.com + Card Holder John Doe @@ -28,7 +29,6 @@ http_interactions: true - {"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"} headers: Accept-Encoding: @@ -47,7 +47,7 @@ http_interactions: message: Created headers: Date: - - Wed, 15 Jul 2015 16:03:27 GMT + - Thu, 16 Jul 2015 17:23:13 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -68,31 +68,124 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"34c4b7bbf13dd4bf7bc283b569666dde"' + - '"2b8d7e0a729ae3967fb58768d5b91d4a"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 908bda2659cc01e208ab85bd0c5e9ef2 + - c10b4c612f00386749bb0ea68bd6f43a X-Runtime: - - '0.408364' + - '0.198819' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAE+EplUAA6RTuXLbMBDt/RUc9iB0RrYGolxkUqR2mjSeJbGiYAMLBgAt - UV8fkBIlJUyTcfmOPbCPFNuj0ckHOq8sbdJpNkkTpNJKRdUm/fHyjT2m2/xB - lI0P1qDLH5JEKJk/rp6Wq8ViLngEHRe1cg8UWMSngpbt6ddTWB3M4biYCX6v - du6dcj4wAoP5d7snwe+ITtcwoK8WBb/BTiytqYHahJTepME1mPKeRwNK52+g - W3p2qLRus8YLfqY7Q723hKOyHRxH3AELr8LYWzqEgJJBSEJb4yaVEQZlMM1n - k+mSTVZsunyZfllP5uvZ6qfgt4K+vqnl/9XfCs7z+xjYTqGW/rqSVIGV4KS/ - NAXnoL1sXENbg2ZQlrah8KejM4wsZzLSwb4j5fNWzk5G8DMatOHUhJm0+IxH - MLXGLCZzd+/eKXEHjR6eW1irESjNu5sKfhGvZmWgQtY4ne9DqP2ac/Aeg88K - B4qCQ6ziNQ7QdpN43NsghVeDYW/lq7aV5ee3ZDVVW6QP5Sx1lo0HkoU9xq/1 - OmGY+clI+x6fjLXv4ZvCl07VIf6I/wgyOvg4qL8535MgpcN4uFGbuPz1P/4N - AAD//wMAnr8PZPoDAAA= + H4sIAIHop1UAA6RTSXObMBS+51cw3LHAWZx6BM6h00PP6aWXzAM9gxrpiUoi + Bv/6CvCShl46OX7L2yW+67WK3tA6aSiPs1UaR0iVEZLqPP7x/C15jHfFDa86 + 541GW9xEEZeieEg36eNdlnEWwMgFrWqAfBLwsaT74fj7i98c9KG/W3P2Xh3d + e2mdTwg0Ft9NQ5y9I0ZdwRl9NcjZFY5iZXQLNEQkVR5722HMJh41SFVoVCU8 + CSCJSpvGroKds1kbXW1jCBexe+gX3AFLJ/3SW1kEjyIBH/mhxTwWAXqpMS7W + aXafpJske3jONtv17Ta7/cnZNWCK71rxf/HXgLn+dItkHwYU7tKSkD6pwAp3 + SgrWwnDquIWhBZVAVZmO/N+O0bCwzGSgvXlFKl6PZV9azmZ01uad/gLClTD4 + hD3oVuGHfU9OgXvo1Hnc0hiFQHEx7pSzk3gxSw01Jp1VReN967aMgXPo3aq0 + IMlbxDps4wDDWImFvjWSf9HoGyNelKkNm2dZtVTvkN6kNTRacgckStOHJ3up + cK75yZNOOT551imH60pXWdn68Bv/ccjgYMtDfeTcRIIQFsPiFmlC85fP/AcA + AP//AwCg+wF4/wMAAA== http_version: - recorded_at: Wed, 15 Jul 2015 16:03:27 GMT + recorded_at: Thu, 16 Jul 2015 17:23:13 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + John + Doe + melba@danielmohr.com + + jane.doe@example.com + + John + Doe + 10 Lovely Street + Northwest + Company + Herndon + Alabama + USA + 35005 + + fake-paypal-future-nonce + + true + + + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Thu, 16 Jul 2015 17:23:14 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"29fe4c79c0a6a96ef4630a150c8053f4"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 99486ff80ef039acadeba1f3ac9617ee + X-Runtime: + - '0.219678' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAILop1UAA6RTS3ObMBC+51cw3LEMjuvaAziHTg89p5deMgtag2JpRSQR + Q359BfiRhl4yOX6PfUvpvlMyeEVjhaYsjBfLMEAqNRdUZeHvx5/R93Cf36Vl + a51WaPK7IEgFz1erZLWN19uUeTBwXitrIBd5/FbQun972brNSZ26+yRl79XB + fRDGuohAYf5L15Syd8SgS7igHxpTdoODWGrVAPUBCZmFzrQYspFHBULmCmUB + DxxIoFS6NgtvT9mkDa6m1oSz2AN0M+6EhRVu7i0NgkMegQtc32AWcg+dUBjm + yTJeR8tNFH97jDe7ZLWL7/+k7BYwxrcN/1z8LWCqP94iOvgBub22xIWLSjDc + npOCMdCfO26gb0BGUJa6JfevYzDMLBPpaaePSHlyfOmOfosTumjTTp+BcME1 + PmAHqpH4Yd+jk+MBWnkZt9BaIlCYDztN2Vm8moWCCqPWyLx2rrE7xsBadHZR + GBDkDGLlt3GCfqjEfN8KyT0pdLXmT1JXmk2zLBqq9kivwmgaLJkF4oXu/JO9 + VrjU/OJJxxxfPOuYw7aFLY1onP+N/zmkd7D5oT5ydiSBc4N+cbM0vvnrZ/4L + AAD//wMAU+gVov8DAAA= + http_version: + recorded_at: Thu, 16 Jul 2015 17:23:14 GMT - request: method: post uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions @@ -101,18 +194,13 @@ http_interactions: string: | - - 2 - vernie@haley.us - jane.doe@example.com - - - R909600223-EALQVM7S + 33239159 + R685732329-VWRF2GTK - 50.00 - 3yd2zm - Spree + 45.75 + 2kqxkm + Solidus sale headers: @@ -132,7 +220,7 @@ http_interactions: message: Created headers: Date: - - Wed, 15 Jul 2015 16:03:28 GMT + - Thu, 16 Jul 2015 17:23:15 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -153,63 +241,63 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"e4a45c43b74a2d397c86611a7f855e13"' + - '"d75ca42ffef3bdf7c114141db97807eb"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 61b7a8f2013c62f398626836b06fbc7a + - c04b9af474887b4b5c80f8b55245a1ab X-Runtime: - - '0.329859' + - '0.312060' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - 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 http_version: - recorded_at: Wed, 15 Jul 2015 16:03:28 GMT + recorded_at: Thu, 16 Jul 2015 17:23:15 GMT - request: method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/9mc66d/submit_for_settlement + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/b55998/submit_for_settlement body: encoding: UTF-8 string: | - 50.00 + 45.75 headers: Accept-Encoding: @@ -228,7 +316,7 @@ http_interactions: message: OK headers: Date: - - Wed, 15 Jul 2015 16:03:29 GMT + - Thu, 16 Jul 2015 17:23:15 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -249,54 +337,54 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"074114aa45c809f447481c5233814356"' + - '"658de87a1a14846affcbd2baa3437f55"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - a5ddd2b037b8c2aa1ade3be5e8321c8b + - 4234d40c5e8ae93e082ec71c247c908b X-Runtime: - - '0.340920' + - '0.306529' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - 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 - yzBbhqpT1BoQvvkbAAD//wMA0x7my9kWAAA= + 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 + 8Muwqgw1p6g3IHzzNwAAAP//AwDIh+JX4BYAAA== http_version: - recorded_at: Wed, 15 Jul 2015 16:03:29 GMT + recorded_at: Thu, 16 Jul 2015 17:23:16 GMT recorded_with: VCR 2.9.3 diff --git a/spec/solidus/gateway/braintree_spec.rb b/spec/solidus/gateway/braintree_spec.rb index 2497f346..b9d90155 100644 --- a/spec/solidus/gateway/braintree_spec.rb +++ b/spec/solidus/gateway/braintree_spec.rb @@ -4,8 +4,24 @@ let(:payment_method){ @braintree_payment_method } let(:user){ FactoryGirl.create :user } let(:address){ FactoryGirl.create :address } - let(:device_data){'{"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"}'} - let(:card){ payment_method.create_profile_from_nonce(user, address, nonce, { device_data: device_data }) } + # let(:card){ payment_method.create_profile_from_nonce(user, address, nonce, { device_data: device_data }) } + # #create_profile doesn't support options, does it need to? + # let(:device_data){'{"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"}'} + + let(:payment) do + FactoryGirl.create(:payment, + order: FactoryGirl.create(:order, + user: user, + ), + source: FactoryGirl.create(:credit_card, + name: "Card Holder", + user: user, + ), + payment_method: payment_method, + payment_method_nonce: nonce, + ) + end + let(:card) { payment.source } before do @braintree_payment_method = Solidus::Gateway::BraintreeGateway.create!( @@ -20,77 +36,85 @@ @braintree_payment_method.save! end - context 'Credit Card' do + context 'a customer profile' do let(:nonce){ Braintree::Test::Nonce::Transactable } - it "should have the correct attributes" do - expect(card.user).to eq user - expect(card.payment_method).to eq payment_method - expect(card.cc_type).to eq 'visa' - expect(card.last_digits).to eq '1881' - expect(card.name).to eq "#{address.firstname} #{address.lastname}" - - expect(card.month).to eq '12' - expect(card.year).to eq '2020' - - expect(card.gateway_payment_profile_id).to be_present - expect(card.gateway_customer_profile_id).to be_present - end - context 'successful' do - it "succeeds" do - card.gateway_customer_profile_id = nil - auth = payment_method.authorize(5000, card, {}) - expect(auth).to be_success - expect(auth.authorization).to be_present - - capture = payment_method.capture(5000, auth.authorization, {}) - expect(capture).to be_success - expect(capture.authorization).to be_present - end - end - - context 'invalid_email' do + context 'with a user with an invalid_email' do before do user.email = "quux@foo_bar.com" user.save! end + it "fails" do expect{ - card + payment_method.create_profile(payment) }.to raise_error(Spree::Core::GatewayError, 'Email is an invalid format.') end end - context 'decline' do - it "fails" do - card.gateway_customer_profile_id = nil - auth = payment_method.authorize(200100, card, {}) - expect(auth).to_not be_success - expect(auth.message).to eq "processor_declined" - expect(Spree::CreditCard.count).to eql(1) - expect(Spree::CreditCard.first.gateway_payment_profile_id).to be_present + context "with a valid credit card" do + before do + payment_method.create_profile(payment) end - end - context 'with completed payment' do - let!(:auth) do - card.gateway_customer_profile_id = nil - payment_method.authorize(5000, card, {}) + it "should have the correct attributes" do + expect(card.user).to eq user + expect(card.payment_method).to eq payment_method + expect(card.cc_type).to eq 'visa' + expect(card.last_digits).to eq '1881' + expect(card.name).to eq "Card Holder" + + expect(card.month).to eq '12' + expect(card.year).to eq '2020' + + expect(card.gateway_payment_profile_id).to be_present + expect(card.gateway_customer_profile_id).to be_present end - let(:auth_code){ auth.authorization } - let!(:capture) do - payment_method.capture(5000, auth_code, {}) + + context 'successful' do + it "succeeds" do + card.gateway_customer_profile_id = nil + auth = payment_method.authorize(5000, card, {}) + expect(auth).to be_success + expect(auth.authorization).to be_present + + capture = payment_method.capture(5000, auth.authorization, {}) + expect(capture).to be_success + expect(capture.authorization).to be_present + end end - it "can be fully credited" do - credit = payment_method.credit(5000, card, auth_code, {}) - expect(credit).to_not be_success - expect(credit.message).to eq "Cannot refund a transaction unless it is settled. (91506)" + context 'decline' do + it "fails" do + card.gateway_customer_profile_id = nil + auth = payment_method.authorize(200100, card, {}) + expect(auth).to_not be_success + expect(auth.message).to eq "processor_declined" + expect(Spree::CreditCard.count).to eql(1) + expect(Spree::CreditCard.first.gateway_payment_profile_id).to be_present + end end - it "can be voided" do - void = payment_method.void(auth_code, card, {}) - expect(void).to be_success + context 'with completed payment' do + let!(:auth) do + card.gateway_customer_profile_id = nil + payment_method.authorize(5000, card, {}) + end + let(:auth_code){ auth.authorization } + let!(:capture) do + payment_method.capture(5000, auth_code, {}) + end + + it "can be fully credited" do + credit = payment_method.credit(5000, card, auth_code, {}) + expect(credit).to_not be_success + expect(credit.message).to eq "Cannot refund a transaction unless it is settled. (91506)" + end + + it "can be voided" do + void = payment_method.void(auth_code, card, {}) + expect(void).to be_success + end end end end @@ -158,18 +182,19 @@ context 'on a payment' do context 'PayPal' do let(:nonce){ Braintree::Test::Nonce::PayPalFuturePayment } - let!(:payment) do - card.gateway_customer_profile_id = nil - FactoryGirl.create(:payment, payment_method: payment_method, source: card, amount: amount) - end + before do + payment.source.gateway_customer_profile_id = nil + payment.source.save! payment.payment_method.environment = Rails.env payment.authorize! expect(payment).to be_pending expect(payment.response_code).to be_present end + context 'success' do let(:amount){ 50.00 } + it "succeeds" do payment.capture! expect(payment).to be_completed @@ -195,10 +220,11 @@ }.to raise_error(Spree::Core::GatewayError, 'Refund amount is too large. (91521)') end end + context 'failure', transaction_clean: false do - let(:amount){ 4001.00 } it "fails" do expect{ + payment.amount = 4001.00 payment.capture! }.to raise_error(Spree::Core::GatewayError) expect(payment).to be_failed From 8d39b7073e9f7631dabf3ca5778f7c59ee2eded9 Mon Sep 17 00:00:00 2001 From: Jack Chu Date: Thu, 16 Jul 2015 15:17:20 -0400 Subject: [PATCH 011/163] start of work to add braintree dropin in spree admin --- .../spree/api/braintree_client_token_controller.rb | 8 ++++++++ .../admin_payment_add_braintree_dropin.rb | 6 ++++++ .../admin_payment_remove_credit_card_fields.rb | 5 +++++ config/routes.rb | 5 +++++ .../javascripts/spree/backend/solidus_braintree.js | 14 ++++++++++++++ lib/assets/javascripts/vendor/braintree-2.9.0.js | 5 +++++ lib/solidus_braintree/engine.rb | 4 ++++ solidus_braintree.gemspec | 2 +- 8 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 app/controllers/spree/api/braintree_client_token_controller.rb create mode 100644 app/overrides/admin_payment_add_braintree_dropin.rb create mode 100644 app/overrides/admin_payment_remove_credit_card_fields.rb create mode 100644 config/routes.rb create mode 100644 lib/assets/javascripts/spree/backend/solidus_braintree.js create mode 100644 lib/assets/javascripts/vendor/braintree-2.9.0.js diff --git a/app/controllers/spree/api/braintree_client_token_controller.rb b/app/controllers/spree/api/braintree_client_token_controller.rb new file mode 100644 index 00000000..dbf997c2 --- /dev/null +++ b/app/controllers/spree/api/braintree_client_token_controller.rb @@ -0,0 +1,8 @@ +class Spree::Api::BraintreeClientTokenController < Spree::Api::BaseController + + def create + gateway = Solidus::Gateway::BraintreeGateway.find_by!(active: true, environment: Rails.env) + render json: { client_token: gateway.generate_client_token } + end + +end diff --git a/app/overrides/admin_payment_add_braintree_dropin.rb b/app/overrides/admin_payment_add_braintree_dropin.rb new file mode 100644 index 00000000..677ec090 --- /dev/null +++ b/app/overrides/admin_payment_add_braintree_dropin.rb @@ -0,0 +1,6 @@ +Deface::Override.new( + virtual_path: "spree/admin/payments/source_forms/_gateway", + name: "admin_payment_add_braintree_dropin", + insert_bottom: "[data-id=credit-card]", + text: %Q{<%= javascript_include_tag "spree/backend/solidus_braintree", "data-turbolinks-track" => true, "crossorigin" => "anonymous" %>
} +) diff --git a/app/overrides/admin_payment_remove_credit_card_fields.rb b/app/overrides/admin_payment_remove_credit_card_fields.rb new file mode 100644 index 00000000..02454057 --- /dev/null +++ b/app/overrides/admin_payment_remove_credit_card_fields.rb @@ -0,0 +1,5 @@ +Deface::Override.new( + virtual_path: "spree/admin/payments/source_forms/_gateway", + name: "admin_payment_remove_credit_card_fields", + remove: "[data-hook=card_number], [data-hook=card_expiration], [data-hook=card_code]" +) diff --git a/config/routes.rb b/config/routes.rb new file mode 100644 index 00000000..f27a354f --- /dev/null +++ b/config/routes.rb @@ -0,0 +1,5 @@ +Spree::Core::Engine.add_routes do + namespace :api, defaults: { format: 'json' } do + resource :payment_client_token, only: [:create], controller: 'braintree_client_token' + end +end diff --git a/lib/assets/javascripts/spree/backend/solidus_braintree.js b/lib/assets/javascripts/spree/backend/solidus_braintree.js new file mode 100644 index 00000000..140fe28e --- /dev/null +++ b/lib/assets/javascripts/spree/backend/solidus_braintree.js @@ -0,0 +1,14 @@ +//= require "vendor/braintree-2.9.0" + +Braintree.setup("", "dropin", { + container: "braintree-dropin", + form: "new_payment", + onReady: function() { + return console.log("braintree dropin is ready"); + }, + onPaymentMethodReceived: (function(_this) { + return function(obj) { + return console.log(obj.nonce); + }; + })(this) +}); diff --git a/lib/assets/javascripts/vendor/braintree-2.9.0.js b/lib/assets/javascripts/vendor/braintree-2.9.0.js new file mode 100644 index 00000000..c73d545c --- /dev/null +++ b/lib/assets/javascripts/vendor/braintree-2.9.0.js @@ -0,0 +1,5 @@ +!function(){function t(e,n){e instanceof t?(this.enc=e.enc,this.pos=e.pos):(this.enc=e,this.pos=n)}function e(t,e,n,i,r){this.stream=t,this.header=e,this.length=n,this.tag=i,this.sub=r}function n(t){var e,n,i="";for(e=0;e+3<=t.length;e+=3)n=parseInt(t.substring(e,e+3),16),i+=ee.charAt(n>>6)+ee.charAt(63&n);for(e+1==t.length?(n=parseInt(t.substring(e,e+1),16),i+=ee.charAt(n<<2)):e+2==t.length&&(n=parseInt(t.substring(e,e+2),16),i+=ee.charAt(n>>2)+ee.charAt((3&n)<<4));(3&i.length)>0;)i+=ne;return i}function i(t){var e,n,i,r="",o=0;for(e=0;ei||(0==o?(r+=l(i>>2),n=3&i,o=1):1==o?(r+=l(n<<2|i>>4),n=15&i,o=2):2==o?(r+=l(n),r+=l(i>>2),n=3&i,o=3):(r+=l(n<<2|i>>4),r+=l(15&i),o=0));return 1==o&&(r+=l(n<<2)),r}function r(t){var e,n=i(t),r=new Array;for(e=0;2*e=0;){var s=e*this[t++]+n[i]+r;r=Math.floor(s/67108864),n[i++]=67108863&s}return r}function u(t,e,n,i,r,o){for(var s=32767&e,a=e>>15;--o>=0;){var u=32767&this[t],c=this[t++]>>15,l=a*u+c*s;u=s*u+((32767&l)<<15)+n[i]+(1073741823&r),r=(u>>>30)+(l>>>15)+a*c+(r>>>30),n[i++]=1073741823&u}return r}function c(t,e,n,i,r,o){for(var s=16383&e,a=e>>14;--o>=0;){var u=16383&this[t],c=this[t++]>>14,l=a*u+c*s;u=s*u+((16383&l)<<14)+n[i]+r,r=(u>>28)+(l>>14)+a*c,n[i++]=268435455&u}return r}function l(t){return ue.charAt(t)}function p(t,e){var n=ce[t.charCodeAt(e)];return null==n?-1:n}function h(t){for(var e=this.t-1;e>=0;--e)t[e]=this[e];t.t=this.t,t.s=this.s}function d(t){this.t=1,this.s=0>t?-1:0,t>0?this[0]=t:-1>t?this[0]=t+this.DV:this.t=0}function f(t){var e=s();return e.fromInt(t),e}function m(t,e){var n;if(16==e)n=4;else if(8==e)n=3;else if(256==e)n=8;else if(2==e)n=1;else if(32==e)n=5;else{if(4!=e)return void this.fromRadix(t,e);n=2}this.t=0,this.s=0;for(var i=t.length,r=!1,s=0;--i>=0;){var a=8==n?255&t[i]:p(t,i);0>a?"-"==t.charAt(i)&&(r=!0):(r=!1,0==s?this[this.t++]=a:s+n>this.DB?(this[this.t-1]|=(a&(1<>this.DB-s):this[this.t-1]|=a<=this.DB&&(s-=this.DB))}8==n&&0!=(128&t[0])&&(this.s=-1,s>0&&(this[this.t-1]|=(1<0&&this[this.t-1]==t;)--this.t}function g(t){if(this.s<0)return"-"+this.negate().toString(t);var e;if(16==t)e=4;else if(8==t)e=3;else if(2==t)e=1;else if(32==t)e=5;else{if(4!=t)return this.toRadix(t);e=2}var n,i=(1<0)for(a>a)>0&&(r=!0,o=l(n));s>=0;)e>a?(n=(this[s]&(1<>(a+=this.DB-e)):(n=this[s]>>(a-=e)&i,0>=a&&(a+=this.DB,--s)),n>0&&(r=!0),r&&(o+=l(n));return r?o:"0"}function b(){var t=s();return o.ZERO.subTo(this,t),t}function v(){return this.s<0?this.negate():this}function _(t){var e=this.s-t.s;if(0!=e)return e;var n=this.t;if(e=n-t.t,0!=e)return this.s<0?-e:e;for(;--n>=0;)if(0!=(e=this[n]-t[n]))return e;return 0}function E(t){var e,n=1;return 0!=(e=t>>>16)&&(t=e,n+=16),0!=(e=t>>8)&&(t=e,n+=8),0!=(e=t>>4)&&(t=e,n+=4),0!=(e=t>>2)&&(t=e,n+=2),0!=(e=t>>1)&&(t=e,n+=1),n}function w(){return this.t<=0?0:this.DB*(this.t-1)+E(this[this.t-1]^this.s&this.DM)}function A(t,e){var n;for(n=this.t-1;n>=0;--n)e[n+t]=this[n];for(n=t-1;n>=0;--n)e[n]=0;e.t=this.t+t,e.s=this.s}function C(t,e){for(var n=t;n=0;--n)e[n+s+1]=this[n]>>r|a,a=(this[n]&o)<=0;--n)e[n]=0;e[s]=a,e.t=this.t+s+1,e.s=this.s,e.clamp()}function T(t,e){e.s=this.s;var n=Math.floor(t/this.DB);if(n>=this.t)return void(e.t=0);var i=t%this.DB,r=this.DB-i,o=(1<>i;for(var s=n+1;s>i;i>0&&(e[this.t-n-1]|=(this.s&o)<n;)i+=this[n]-t[n],e[n++]=i&this.DM,i>>=this.DB;if(t.t>=this.DB;i+=this.s}else{for(i+=this.s;n>=this.DB;i-=t.s}e.s=0>i?-1:0,-1>i?e[n++]=this.DV+i:i>0&&(e[n++]=i),e.t=n,e.clamp()}function P(t,e){var n=this.abs(),i=t.abs(),r=n.t;for(e.t=r+i.t;--r>=0;)e[r]=0;for(r=0;r=0;)t[n]=0;for(n=0;n=e.DV&&(t[n+e.t]-=e.DV,t[n+e.t+1]=1)}t.t>0&&(t[t.t-1]+=e.am(n,e[n],t,2*n,0,1)),t.s=0,t.clamp()}function I(t,e,n){var i=t.abs();if(!(i.t<=0)){var r=this.abs();if(r.t0?(i.lShiftTo(l,a),r.lShiftTo(l,n)):(i.copyTo(a),r.copyTo(n));var p=a.t,h=a[p-1];if(0!=h){var d=h*(1<1?a[p-2]>>this.F2:0),f=this.FV/d,m=(1<=0&&(n[n.t++]=1,n.subTo(v,n)),o.ONE.dlShiftTo(p,v),v.subTo(a,a);a.t=0;){var _=n[--g]==h?this.DM:Math.floor(n[g]*f+(n[g-1]+y)*m);if((n[g]+=a.am(0,_,n,b,0,p))<_)for(a.dlShiftTo(b,v),n.subTo(v,n);n[g]<--_;)n.subTo(v,n)}null!=e&&(n.drShiftTo(p,e),u!=c&&o.ZERO.subTo(e,e)),n.t=p,n.clamp(),l>0&&n.rShiftTo(l,n),0>u&&o.ZERO.subTo(n,n)}}}function N(t){var e=s();return this.abs().divRemTo(t,null,e),this.s<0&&e.compareTo(o.ZERO)>0&&t.subTo(e,e),e}function k(t){this.m=t}function R(t){return t.s<0||t.compareTo(this.m)>=0?t.mod(this.m):t}function U(t){return t}function D(t){t.divRemTo(this.m,null,t)}function M(t,e,n){t.multiplyTo(e,n),this.reduce(n)}function F(t,e){t.squareTo(e),this.reduce(e)}function L(){if(this.t<1)return 0;var t=this[0];if(0==(1&t))return 0;var e=3&t;return e=e*(2-(15&t)*e)&15,e=e*(2-(255&t)*e)&255,e=e*(2-((65535&t)*e&65535))&65535,e=e*(2-t*e%this.DV)%this.DV,e>0?this.DV-e:-e}function B(t){this.m=t,this.mp=t.invDigit(),this.mpl=32767&this.mp,this.mph=this.mp>>15,this.um=(1<0&&this.m.subTo(e,e),e}function z(t){var e=s();return t.copyTo(e),this.reduce(e),e}function V(t){for(;t.t<=this.mt2;)t[t.t++]=0;for(var e=0;e>15)*this.mpl&this.um)<<15)&t.DM;for(n=e+this.m.t,t[n]+=this.m.am(0,i,t,e,0,this.m.t);t[n]>=t.DV;)t[n]-=t.DV,t[++n]++}t.clamp(),t.drShiftTo(this.m.t,t),t.compareTo(this.m)>=0&&t.subTo(this.m,t)}function H(t,e){t.squareTo(e),this.reduce(e)}function Y(t,e,n){t.multiplyTo(e,n),this.reduce(n)}function q(){return 0==(this.t>0?1&this[0]:this.s)}function W(t,e){if(t>4294967295||1>t)return o.ONE;var n=s(),i=s(),r=e.convert(this),a=E(t)-1;for(r.copyTo(n);--a>=0;)if(e.sqrTo(n,i),(t&1<0)e.mulTo(i,r,n);else{var u=n;n=i,i=u}return e.revert(n)}function G(t,e){var n;return n=256>t||e.isEven()?new k(e):new B(e),this.exp(t,n)}function Q(t,e){return new o(t,e)}function K(t,e){if(e=0&&e>0;){var r=t.charCodeAt(i--);128>r?n[--e]=r:r>127&&2048>r?(n[--e]=63&r|128,n[--e]=r>>6|192):(n[--e]=63&r|128,n[--e]=r>>6&63|128,n[--e]=r>>12|224)}n[--e]=0;for(var s=0,a=0,u=0;e>2;)0==u&&(a=le.random.randomWords(1,0)[0]),s=a>>u&255,u=(u+8)%32,0!=s&&(n[--e]=s);return n[--e]=2,n[--e]=0,new o(n)}function Z(){this.n=null,this.e=0,this.d=null,this.p=null,this.q=null,this.dmp1=null,this.dmq1=null,this.coeff=null}function $(t,e){if(!(null!=t&&null!=e&&t.length>0&&e.length>0))throw new Error("Invalid RSA public key");this.n=Q(t,16),this.e=parseInt(e,16)}function X(t){return t.modPowInt(this.e,this.n)}function J(t){var e=K(t,this.n.bitLength()+7>>3);if(null==e)return null;var n=this.doPublic(e);if(null==n)return null;var i=n.toString(16);return 0==(1&i.length)?i:"0"+i}t.prototype.get=function(t){if(void 0==t&&(t=this.pos++),t>=this.enc.length)throw"Requesting byte offset "+t+" on a stream of length "+this.enc.length;return this.enc[t]},t.prototype.hexDigits="0123456789ABCDEF",t.prototype.hexByte=function(t){return this.hexDigits.charAt(t>>4&15)+this.hexDigits.charAt(15&t)},t.prototype.hexDump=function(t,e){for(var n="",i=t;e>i;++i)switch(n+=this.hexByte(this.get(i)),15&i){case 7:n+=" ";break;case 15:n+="\n";break;default:n+=" "}return n},t.prototype.parseStringISO=function(t,e){for(var n="",i=t;e>i;++i)n+=String.fromCharCode(this.get(i));return n},t.prototype.parseStringUTF=function(t,e){for(var n="",i=0,r=t;e>r;){var i=this.get(r++);n+=String.fromCharCode(128>i?i:i>191&&224>i?(31&i)<<6|63&this.get(r++):(15&i)<<12|(63&this.get(r++))<<6|63&this.get(r++))}return n},t.prototype.reTime=/^((?:1[89]|2\d)?\d\d)(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])([01]\d|2[0-3])(?:([0-5]\d)(?:([0-5]\d)(?:[.,](\d{1,3}))?)?)?(Z|[-+](?:[0]\d|1[0-2])([0-5]\d)?)?$/,t.prototype.parseTime=function(t,e){var n=this.parseStringISO(t,e),i=this.reTime.exec(n);return i?(n=i[1]+"-"+i[2]+"-"+i[3]+" "+i[4],i[5]&&(n+=":"+i[5],i[6]&&(n+=":"+i[6],i[7]&&(n+="."+i[7]))),i[8]&&(n+=" UTC","Z"!=i[8]&&(n+=i[8],i[9]&&(n+=":"+i[9]))),n):"Unrecognized time: "+n},t.prototype.parseInteger=function(t,e){var n=e-t;if(n>4){n<<=3;var i=this.get(t);if(0==i)n-=8;else for(;128>i;)i<<=1,--n;return"("+n+" bit)"}for(var r=0,o=t;e>o;++o)r=r<<8|this.get(o);return r},t.prototype.parseBitString=function(t,e){var n=this.get(t),i=(e-t-1<<3)-n,r="("+i+" bit)";if(20>=i){var o=n;r+=" ";for(var s=e-1;s>t;--s){for(var a=this.get(s),u=o;8>u;++u)r+=a>>u&1?"1":"0";o=0}}return r},t.prototype.parseOctetString=function(t,e){var n=e-t,i="("+n+" byte) ";n>20&&(e=t+20);for(var r=t;e>r;++r)i+=this.hexByte(this.get(r));return n>20&&(i+=String.fromCharCode(8230)),i},t.prototype.parseOID=function(t,e){for(var n,i=0,r=0,o=t;e>o;++o){var s=this.get(o);i=i<<7|127&s,r+=7,128&s||(void 0==n?n=parseInt(i/40)+"."+i%40:n+="."+(r>=31?"bigint":i),i=r=0),n+=String.fromCharCode()}return n},e.prototype.typeName=function(){if(void 0==this.tag)return"unknown";var t=this.tag>>6,e=(this.tag>>5&1,31&this.tag);switch(t){case 0:switch(e){case 0:return"EOC";case 1:return"BOOLEAN";case 2:return"INTEGER";case 3:return"BIT_STRING";case 4:return"OCTET_STRING";case 5:return"NULL";case 6:return"OBJECT_IDENTIFIER";case 7:return"ObjectDescriptor";case 8:return"EXTERNAL";case 9:return"REAL";case 10:return"ENUMERATED";case 11:return"EMBEDDED_PDV";case 12:return"UTF8String";case 16:return"SEQUENCE";case 17:return"SET";case 18:return"NumericString";case 19:return"PrintableString";case 20:return"TeletexString";case 21:return"VideotexString";case 22:return"IA5String";case 23:return"UTCTime";case 24:return"GeneralizedTime";case 25:return"GraphicString";case 26:return"VisibleString";case 27:return"GeneralString";case 28:return"UniversalString";case 30:return"BMPString";default:return"Universal_"+e.toString(16)}case 1:return"Application_"+e.toString(16);case 2:return"["+e+"]";case 3:return"Private_"+e.toString(16)}},e.prototype.content=function(){if(void 0==this.tag)return null;var t=this.tag>>6;if(0!=t)return null==this.sub?null:"("+this.sub.length+")";var e=31&this.tag,n=this.posContent(),i=Math.abs(this.length);switch(e){case 1:return 0==this.stream.get(n)?"false":"true";case 2:return this.stream.parseInteger(n,n+i);case 3:return this.sub?"("+this.sub.length+" elem)":this.stream.parseBitString(n,n+i);case 4:return this.sub?"("+this.sub.length+" elem)":this.stream.parseOctetString(n,n+i);case 6:return this.stream.parseOID(n,n+i);case 16:case 17:return"("+this.sub.length+" elem)";case 12:return this.stream.parseStringUTF(n,n+i);case 18:case 19:case 20:case 21:case 22:case 26:return this.stream.parseStringISO(n,n+i);case 23:case 24:return this.stream.parseTime(n,n+i)}return null},e.prototype.toString=function(){return this.typeName()+"@"+this.stream.pos+"[header:"+this.header+",length:"+this.length+",sub:"+(null==this.sub?"null":this.sub.length)+"]"},e.prototype.print=function(t){if(void 0==t&&(t=""),document.writeln(t+this),null!=this.sub){t+=" ";for(var e=0,n=this.sub.length;n>e;++e)this.sub[e].print(t)}},e.prototype.toPrettyString=function(t){void 0==t&&(t="");var e=t+this.typeName()+" @"+this.stream.pos;if(this.length>=0&&(e+="+"),e+=this.length,32&this.tag?e+=" (constructed)":3!=this.tag&&4!=this.tag||null==this.sub||(e+=" (encapsulates)"),e+="\n",null!=this.sub){t+=" ";for(var n=0,i=this.sub.length;i>n;++n)e+=this.sub[n].toPrettyString(t)}return e},e.prototype.posStart=function(){return this.stream.pos},e.prototype.posContent=function(){return this.stream.pos+this.header},e.prototype.posEnd=function(){return this.stream.pos+this.header+Math.abs(this.length)},e.decodeLength=function(t){var e=t.get(),n=127&e;if(n==e)return n;if(n>3)throw"Length over 24 bits not supported at position "+(t.pos-1);if(0==n)return-1;e=0;for(var i=0;n>i;++i)e=e<<8|t.get();return e},e.hasContent=function(n,i,r){if(32&n)return!0;if(3>n||n>4)return!1;var o=new t(r);3==n&&o.get();var s=o.get();if(s>>6&1)return!1;try{var a=e.decodeLength(o);return o.pos-r.pos+a==i}catch(u){return!1}},e.decode=function(n){n instanceof t||(n=new t(n,0));var i=new t(n),r=n.get(),o=e.decodeLength(n),s=n.pos-i.pos,a=null;if(e.hasContent(r,o,n)){var u=n.pos;if(3==r&&n.get(),a=[],o>=0){for(var c=u+o;n.pos=ae;++ae)ce[se++]=ae;for(se="a".charCodeAt(0),ae=10;36>ae;++ae)ce[se++]=ae;for(se="A".charCodeAt(0),ae=10;36>ae;++ae)ce[se++]=ae;k.prototype.convert=R,k.prototype.revert=U,k.prototype.reduce=D,k.prototype.mulTo=M,k.prototype.sqrTo=F,B.prototype.convert=j,B.prototype.revert=z,B.prototype.reduce=V,B.prototype.mulTo=Y,B.prototype.sqrTo=H,o.prototype.copyTo=h,o.prototype.fromInt=d,o.prototype.fromString=m,o.prototype.clamp=y,o.prototype.dlShiftTo=A,o.prototype.drShiftTo=C,o.prototype.lShiftTo=S,o.prototype.rShiftTo=T,o.prototype.subTo=x,o.prototype.multiplyTo=P,o.prototype.squareTo=O,o.prototype.divRemTo=I,o.prototype.invDigit=L,o.prototype.isEven=q,o.prototype.exp=W,o.prototype.toString=g,o.prototype.negate=b,o.prototype.abs=v,o.prototype.compareTo=_,o.prototype.bitLength=w,o.prototype.mod=N,o.prototype.modPowInt=G,o.ZERO=f(0),o.ONE=f(1),Z.prototype.doPublic=X,Z.prototype.setPublic=$,Z.prototype.encrypt=J;var le={cipher:{},hash:{},keyexchange:{},mode:{},misc:{},codec:{},exception:{corrupt:function(t){this.toString=function(){return"CORRUPT: "+this.message},this.message=t},invalid:function(t){this.toString=function(){return"INVALID: "+this.message},this.message=t},bug:function(t){this.toString=function(){return"BUG: "+this.message},this.message=t},notReady:function(t){this.toString=function(){return"NOT READY: "+this.message},this.message=t}}};"undefined"!=typeof module&&module.exports&&(module.exports=le),le.cipher.aes=function(t){this._tables[0][0][0]||this._precompute();var e,n,i,r,o,s=this._tables[0][4],a=this._tables[1],u=t.length,c=1;if(4!==u&&6!==u&&8!==u)throw new le.exception.invalid("invalid aes key size");for(this._key=[r=t.slice(0),o=[]],e=u;4*u+28>e;e++)i=r[e-1],(e%u===0||8===u&&e%u===4)&&(i=s[i>>>24]<<24^s[i>>16&255]<<16^s[i>>8&255]<<8^s[255&i],e%u===0&&(i=i<<8^i>>>24^c<<24,c=c<<1^283*(c>>7))),r[e]=r[e-u]^i;for(n=0;e;n++,e--)i=r[3&n?e:e-4],o[n]=4>=e||4>n?i:a[0][s[i>>>24]]^a[1][s[i>>16&255]]^a[2][s[i>>8&255]]^a[3][s[255&i]]},le.cipher.aes.prototype={encrypt:function(t){return this._crypt(t,0)},decrypt:function(t){return this._crypt(t,1)},_tables:[[[],[],[],[],[]],[[],[],[],[],[]]],_precompute:function(){var t,e,n,i,r,o,s,a,u,c=this._tables[0],l=this._tables[1],p=c[4],h=l[4],d=[],f=[];for(t=0;256>t;t++)f[(d[t]=t<<1^283*(t>>7))^t]=t;for(e=n=0;!p[e];e^=i||1,n=f[n]||1)for(s=n^n<<1^n<<2^n<<3^n<<4,s=s>>8^255&s^99,p[e]=s,h[s]=e,o=d[r=d[i=d[e]]],u=16843009*o^65537*r^257*i^16843008*e,a=257*d[s]^16843008*s,t=0;4>t;t++)c[t][e]=a=a<<24^a>>>8,l[t][s]=u=u<<24^u>>>8;for(t=0;5>t;t++)c[t]=c[t].slice(0),l[t]=l[t].slice(0)},_crypt:function(t,e){if(4!==t.length)throw new le.exception.invalid("invalid aes block size");var n,i,r,o,s=this._key[e],a=t[0]^s[0],u=t[e?3:1]^s[1],c=t[2]^s[2],l=t[e?1:3]^s[3],p=s.length/4-2,h=4,d=[0,0,0,0],f=this._tables[e],m=f[0],y=f[1],g=f[2],b=f[3],v=f[4];for(o=0;p>o;o++)n=m[a>>>24]^y[u>>16&255]^g[c>>8&255]^b[255&l]^s[h],i=m[u>>>24]^y[c>>16&255]^g[l>>8&255]^b[255&a]^s[h+1],r=m[c>>>24]^y[l>>16&255]^g[a>>8&255]^b[255&u]^s[h+2],l=m[l>>>24]^y[a>>16&255]^g[u>>8&255]^b[255&c]^s[h+3],h+=4,a=n,u=i,c=r;for(o=0;4>o;o++)d[e?3&-o:o]=v[a>>>24]<<24^v[u>>16&255]<<16^v[c>>8&255]<<8^v[255&l]^s[h++],n=a,a=u,u=c,c=l,l=n;return d}},le.bitArray={bitSlice:function(t,e,n){return t=le.bitArray._shiftRight(t.slice(e/32),32-(31&e)).slice(1),void 0===n?t:le.bitArray.clamp(t,n-e)},extract:function(t,e,n){var i,r=Math.floor(-e-n&31);return i=-32&(e+n-1^e)?t[e/32|0]<<32-r^t[e/32+1|0]>>>r:t[e/32|0]>>>r,i&(1<0&&e&&(t[n-1]=le.bitArray.partial(e,t[n-1]&2147483648>>e-1,1)),t},partial:function(t,e,n){return 32===t?e:(n?0|e:e<<32-t)+1099511627776*t},getPartial:function(t){return Math.round(t/1099511627776)||32},equal:function(t,e){if(le.bitArray.bitLength(t)!==le.bitArray.bitLength(e))return!1;var n,i=0;for(n=0;n=32;e-=32)i.push(n),n=0;if(0===e)return i.concat(t);for(r=0;r>>e),n=t[r]<<32-e;return s=t.length?t[t.length-1]:0,o=le.bitArray.getPartial(s),i.push(le.bitArray.partial(e+o&31,e+o>32?n:i.pop(),1)),i},_xor4:function(t,e){return[t[0]^e[0],t[1]^e[1],t[2]^e[2],t[3]^e[3]]}},le.codec.hex={fromBits:function(t){var e,n="";for(e=0;ee;e++)0===(3&e)&&(n=t[e/4]),i+=String.fromCharCode(n>>>24),n<<=8;return decodeURIComponent(escape(i))},toBits:function(t){t=unescape(encodeURIComponent(t));var e,n=[],i=0;for(e=0;e>>o)>>>26),6>o?(a=t[i]<<6-o,o+=26,i++):(a<<=6,o-=6);for(;3&r.length&&!e;)r+="=";return r},toBits:function(t,e){t=t.replace(/\s|=/g,"");var n,i,r=[],o=0,s=le.codec.base64._chars,a=0;for(e&&(s=s.substr(0,62)+"-_"),n=0;ni)throw new le.exception.invalid("this isn't base64!");o>26?(o-=26,r.push(a^i>>>o),a=i<<32-o):(o+=6,a^=i<<32-o)}return 56&o&&r.push(le.bitArray.partial(56&o,a,1)),r}},le.codec.base64url={fromBits:function(t){return le.codec.base64.fromBits(t,1,1)},toBits:function(t){return le.codec.base64.toBits(t,1)}},void 0===le.beware&&(le.beware={}),le.beware["CBC mode is dangerous because it doesn't protect message integrity."]=function(){le.mode.cbc={name:"cbc",encrypt:function(t,e,n,i){if(i&&i.length)throw new le.exception.invalid("cbc can't authenticate data");if(128!==le.bitArray.bitLength(n))throw new le.exception.invalid("cbc iv must be 128 bits");var r,o=le.bitArray,s=o._xor4,a=o.bitLength(e),u=0,c=[];if(7&a)throw new le.exception.invalid("pkcs#5 padding only works for multiples of a byte");for(r=0;a>=u+128;r+=4,u+=128)n=t.encrypt(s(n,e.slice(r,r+4))),c.splice(r,0,n[0],n[1],n[2],n[3]);return a=16843009*(16-(a>>3&15)),n=t.encrypt(s(n,o.concat(e,[a,a,a,a]).slice(r,r+4))),c.splice(r,0,n[0],n[1],n[2],n[3]),c},decrypt:function(t,e,n,i){if(i&&i.length)throw new le.exception.invalid("cbc can't authenticate data");if(128!==le.bitArray.bitLength(n))throw new le.exception.invalid("cbc iv must be 128 bits");if(127&le.bitArray.bitLength(e)||!e.length)throw new le.exception.corrupt("cbc ciphertext must be a positive multiple of the block size");var r,o,s,a=le.bitArray,u=a._xor4,c=[];for(i=i||[],r=0;r16)throw new le.exception.corrupt("pkcs#5 padding corrupt");if(s=16843009*o,!a.equal(a.bitSlice([s,s,s,s],0,8*o),a.bitSlice(c,32*c.length-8*o,32*c.length)))throw new le.exception.corrupt("pkcs#5 padding corrupt");return a.bitSlice(c,0,32*c.length-8*o)}}},le.misc.hmac=function(t,e){this._hash=e=e||le.hash.sha256;var n,i=[[],[]],r=e.prototype.blockSize/32;for(this._baseHash=[new e,new e],t.length>r&&(t=e.hash(t)),n=0;r>n;n++)i[0][n]=909522486^t[n],i[1][n]=1549556828^t[n];this._baseHash[0].update(i[0]),this._baseHash[1].update(i[1])},le.misc.hmac.prototype.encrypt=le.misc.hmac.prototype.mac=function(t,e){var n=new this._hash(this._baseHash[0]).update(t,e).finalize();return new this._hash(this._baseHash[1]).update(n).finalize()},le.hash.sha256=function(t){this._key[0]||this._precompute(),t?(this._h=t._h.slice(0),this._buffer=t._buffer.slice(0),this._length=t._length):this.reset()},le.hash.sha256.hash=function(t){return(new le.hash.sha256).update(t).finalize()},le.hash.sha256.prototype={blockSize:512,reset:function(){return this._h=this._init.slice(0),this._buffer=[],this._length=0,this},update:function(t){"string"==typeof t&&(t=le.codec.utf8String.toBits(t));var e,n=this._buffer=le.bitArray.concat(this._buffer,t),i=this._length,r=this._length=i+le.bitArray.bitLength(t);for(e=512+i&-512;r>=e;e+=512)this._block(n.splice(0,16));return this},finalize:function(){var t,e=this._buffer,n=this._h;for(e=le.bitArray.concat(e,[le.bitArray.partial(1,1)]),t=e.length+2;15&t;t++)e.push(0);for(e.push(Math.floor(this._length/4294967296)),e.push(0|this._length);e.length;)this._block(e.splice(0,16));return this.reset(),n},_init:[],_key:[],_precompute:function(){function t(t){return 4294967296*(t-Math.floor(t))|0}var e,n=0,i=2;t:for(;64>n;i++){for(e=2;i>=e*e;e++)if(i%e===0)continue t;8>n&&(this._init[n]=t(Math.pow(i,.5))),this._key[n]=t(Math.pow(i,1/3)),n++}},_block:function(t){var e,n,i,r,o=t.slice(0),s=this._h,a=this._key,u=s[0],c=s[1],l=s[2],p=s[3],h=s[4],d=s[5],f=s[6],m=s[7];for(e=0;64>e;e++)16>e?n=o[e]:(i=o[e+1&15],r=o[e+14&15],n=o[15&e]=(i>>>7^i>>>18^i>>>3^i<<25^i<<14)+(r>>>17^r>>>19^r>>>10^r<<15^r<<13)+o[15&e]+o[e+9&15]|0),n=n+m+(h>>>6^h>>>11^h>>>25^h<<26^h<<21^h<<7)+(f^h&(d^f))+a[e],m=f,f=d,d=h,h=p+n|0,p=l,l=c,c=u,u=n+(c&l^p&(c^l))+(c>>>2^c>>>13^c>>>22^c<<30^c<<19^c<<10)|0;s[0]=s[0]+u|0,s[1]=s[1]+c|0,s[2]=s[2]+l|0,s[3]=s[3]+p|0,s[4]=s[4]+h|0,s[5]=s[5]+d|0,s[6]=s[6]+f|0,s[7]=s[7]+m|0}},le.random={randomWords:function(t,e){var n,i,r=[],o=this.isReady(e);if(o===this._NOT_READY)throw new le.exception.notReady("generator isn't seeded");for(o&this._REQUIRES_RESEED&&this._reseedFromPools(!(o&this._READY)),n=0;t>n;n+=4)(n+1)%this._MAX_WORDS_PER_BURST===0&&this._gate(),i=this._gen4words(),r.push(i[0],i[1],i[2],i[3]);return this._gate(),r.slice(0,t)},setDefaultParanoia:function(t){this._defaultParanoia=t},addEntropy:function(t,e,n){n=n||"user";var i,r,o,s=(new Date).valueOf(),a=this._robins[n],u=this.isReady(),c=0;switch(i=this._collectorIds[n],void 0===i&&(i=this._collectorIds[n]=this._collectorIdNext++),void 0===a&&(a=this._robins[n]=0),this._robins[n]=(this._robins[n]+1)%this._pools.length,typeof t){case"number":void 0===e&&(e=1),this._pools[a].update([i,this._eventId++,1,e,s,1,0|t]);break;case"object":var l=Object.prototype.toString.call(t);if("[object Uint32Array]"===l){for(o=[],r=0;r0;)e++,o>>>=1;this._pools[a].update([i,this._eventId++,2,e,s,t.length].concat(t))}break;case"string":void 0===e&&(e=t.length),this._pools[a].update([i,this._eventId++,3,e,s,t.length]),this._pools[a].update(t);break;default:c=1}if(c)throw new le.exception.bug("random: addEntropy only supports number, array of numbers or string");this._poolEntropy[a]+=e,this._poolStrength+=e,u===this._NOT_READY&&(this.isReady()!==this._NOT_READY&&this._fireEvent("seeded",Math.max(this._strength,this._poolStrength)),this._fireEvent("progress",this.getProgress()))},isReady:function(t){var e=this._PARANOIA_LEVELS[void 0!==t?t:this._defaultParanoia];return this._strength&&this._strength>=e?this._poolEntropy[0]>this._BITS_PER_RESEED&&(new Date).valueOf()>this._nextReseed?this._REQUIRES_RESEED|this._READY:this._READY:this._poolStrength>=e?this._REQUIRES_RESEED|this._NOT_READY:this._NOT_READY},getProgress:function(t){var e=this._PARANOIA_LEVELS[t?t:this._defaultParanoia];return this._strength>=e?1:this._poolStrength>e?1:this._poolStrength/e},startCollectors:function(){if(!this._collectorsStarted){if(window.addEventListener)window.addEventListener("load",this._loadTimeCollector,!1),window.addEventListener("mousemove",this._mouseCollector,!1);else{if(!document.attachEvent)throw new le.exception.bug("can't attach event");document.attachEvent("onload",this._loadTimeCollector),document.attachEvent("onmousemove",this._mouseCollector)}this._collectorsStarted=!0}},stopCollectors:function(){this._collectorsStarted&&(window.removeEventListener?(window.removeEventListener("load",this._loadTimeCollector,!1),window.removeEventListener("mousemove",this._mouseCollector,!1)):window.detachEvent&&(window.detachEvent("onload",this._loadTimeCollector),window.detachEvent("onmousemove",this._mouseCollector)),this._collectorsStarted=!1)},addEventListener:function(t,e){this._callbacks[t][this._callbackI++]=e},removeEventListener:function(t,e){var n,i,r=this._callbacks[t],o=[];for(i in r)r.hasOwnProperty(i)&&r[i]===e&&o.push(i);for(n=0;nt&&(this._counter[t]=this._counter[t]+1|0,!this._counter[t]);t++);return this._cipher.encrypt(this._counter)},_gate:function(){this._key=this._gen4words().concat(this._gen4words()),this._cipher=new le.cipher.aes(this._key)},_reseed:function(t){this._key=le.hash.sha256.hash(this._key.concat(t)),this._cipher=new le.cipher.aes(this._key);for(var e=0;4>e&&(this._counter[e]=this._counter[e]+1|0,!this._counter[e]);e++);},_reseedFromPools:function(t){var e,n=[],i=0;for(this._nextReseed=n[0]=(new Date).valueOf()+this._MILLISECONDS_PER_RESEED,e=0;16>e;e++)n.push(4294967296*Math.random()|0);for(e=0;e=1<this._strength&&(this._strength=i),this._reseedCount++,this._reseed(n)},_mouseCollector:function(t){var e=t.x||t.clientX||t.offsetX||0,n=t.y||t.clientY||t.offsetY||0;le.random.addEntropy([e,n],2,"mouse")},_loadTimeCollector:function(){le.random.addEntropy((new Date).valueOf(),2,"loadtime")},_fireEvent:function(t,e){var n,i=le.random._callbacks[t],r=[];for(n in i)i.hasOwnProperty(n)&&r.push(i[n]);for(n=0;n0&&(i=i.concat(c(e)));return i},l=function(){var n,i,o,s,a,c;try{a=r(t),n=e.decode(a)}catch(l){throw"Invalid encryption key. Please use the key labeled 'Client-Side Encryption Key'"}if(o=u(n),2!==o.length)throw"Invalid encryption key. Please use the key labeled 'Client-Side Encryption Key'";return s=o[0],i=o[1],c=new Z,c.setPublic(s,i),c},p=function(){return{key:le.random.randomWords(8,0),sign:function(t){var e=new le.misc.hmac(this.key,le.hash.sha256),n=e.encrypt(t);return le.codec.base64.fromBits(n)}}};i.encrypt=function(t){var e=l(),r=pe.generateAesKey(),o=p(),s=r.encrypt(t),a=o.sign(le.codec.base64.toBits(s)),u=le.bitArray.concat(r.key,o.key),c=le.codec.base64.fromBits(u),h=e.encrypt(c),d="$bt4|javascript_"+i.version.replace(/\./g,"_")+"$",f=null;return h&&(f=n(h)),d+f+"$"+s+"$"+a},i.encryptForm=function(t){var e,n,r,u,l,p;for(t=a(t),p=c(t);o.length>0;){try{t.removeChild(o[0])}catch(h){}o.splice(0,1)}for(l=0;le;e++)i.push(new h(t.paymentMethods[e]));return i},t,this.requestTimeout)},r.prototype.tokenizeCoinbase=function(t,e){t.options={validate:!1},this.addCoinbase(t,function(t,n){t?e(t,null):n&&n.nonce?e(t,n):e("Unable to tokenize coinbase account.",null)})},r.prototype.tokenizePayPalAccount=function(t,e){t.options={validate:!1},this.addPayPalAccount(t,function(t,n){t?e(t,null):n&&n.nonce?e(null,n):e("Unable to tokenize paypal account.",null)})},r.prototype.tokenizeCard=function(t,e){t.options={validate:!1},this.addCreditCard(t,function(t,n){n&&n.nonce?e(t,n.nonce,{type:n.type,details:n.details}):e("Unable to tokenize card.",null)})},r.prototype.lookup3DS=function(t,e){var n=c.joinUrlFragments([this.clientApiUrl,"v1/payment_methods",t.nonce,"three_d_secure/lookup"]),i=c.mergeOptions(this.attrs,{amount:t.amount});this.driver.post(n,i,function(t){return t},e,this.requestTimeout)},r.prototype.createSEPAMandate=function(t,e){var n=c.mergeOptions(this.attrs,{sepaMandate:t});this.driver.post(c.joinUrlFragments([this.clientApiUrl,"v1","sepa_mandates.json"]),n,function(t){return{sepaMandate:new l(t.europeBankAccounts[0].sepaMandates[0]),sepaBankAccount:new p(t.europeBankAccounts[0])}},e,this.requestTimeout)},r.prototype.addCoinbase=function(t,e){var n;delete t.share,n=c.mergeOptions(this.attrs,{coinbaseAccount:t,_meta:{integration:this.integration||"custom",source:"coinbase"}}),this.driver.post(c.joinUrlFragments([this.clientApiUrl,"v1","payment_methods/coinbase_accounts"]),n,function(t){return new d(t.coinbaseAccounts[0])},e,this.requestTimeout)},r.prototype.addPayPalAccount=function(t,e){var n;delete t.share,n=c.mergeOptions(this.attrs,{paypalAccount:t,_meta:{integration:this.integration||"paypal",source:"paypal"}}),this.driver.post(c.joinUrlFragments([this.clientApiUrl,"v1","payment_methods","paypal_accounts"]),n,function(t){return new f(t.paypalAccounts[0])},e,this.requestTimeout)},r.prototype.addCreditCard=function(t,e){var n,i,r=t.share;delete t.share,i=m(t),n=c.mergeOptions(this.attrs,{share:r,creditCard:i,_meta:{integration:this.integration||"custom",source:"form"}}),this.driver.post(c.joinUrlFragments([this.clientApiUrl,"v1","payment_methods/credit_cards"]),n,function(t){return new h(t.creditCards[0])},e,this.requestTimeout)},r.prototype.unlockCreditCard=function(t,e,n){var i=c.mergeOptions(this.attrs,{challengeResponses:e});this.driver.put(c.joinUrlFragments([this.clientApiUrl,"v1","payment_methods/",t.nonce]),i,function(t){return new h(t.paymentMethods[0])},n,this.requestTimeout)},r.prototype.sendAnalyticsEvents=function(t,e){var i,r,o=this.analyticsUrl,s=[];if(t=c.isArray(t)?t:[t],!o)return void(e&&e.apply(null,[null,{}]));for(r in t)t.hasOwnProperty(r)&&s.push({kind:t[r]});i=c.mergeOptions(this.attrs,{braintree_library_version:this.sdkVersion,analytics:s,_meta:{merchantAppId:this.merchantAppId,platform:"web",platformVersion:n.navigator.userAgent,integrationType:this.integration,sdkVersion:this.sdkVersion}}),this.driver.post(o,i,function(t){return t},e,this.requestTimeout)},r.prototype.decryptBrowserswitchPayload=function(t,e){var n=c.mergeOptions(this.attrs,{asymmetric_encrypted_payload:t}),i=c.joinUrlFragments([this.clientApiUrl,"/v1/paypal_browser_switch/decrypt"]);this.driver.post(i,n,function(t){return t},e,this.requestTimeout)},r.prototype.encryptBrowserswitchReturnPayload=function(t,e,n){var i=c.mergeOptions(this.attrs,{payload:t,aesKey:e}),r=c.joinUrlFragments([this.clientApiUrl,"/v1/paypal_browser_switch/encrypt"]);this.driver.post(r,i,function(t){return t},n,this.requestTimeout)},r.prototype.exchangePaypalTokenForConsentCode=function(t,e){var n=c.mergeOptions(this.attrs,t);this.attrs.merchantAccountId&&(n.merchant_account_id=this.attrs.merchantAccountId);var i=c.joinUrlFragments([this.clientApiUrl,"/v1/paypal_account_service/merchant_consent"]);this.driver.post(i,n,function(t){return t},e,this.requestTimeout)},e.exports=r}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./coinbase-account":3,"./credit-card":4,"./europe-bank-account":5,"./normalize-api-fields":9,"./parse-client-token":10,"./paypal-account":11,"./request-driver":13,"./sepa-mandate":14,"./util":15,"braintree-3ds":24,"braintree-utilities":36}],3:[function(t,e){"use strict";function n(t){var e,n;for(e=0;e=400?[t,null]:[null,e(t)]}function i(){}function r(t,e,r,o,s,a){var u;s=s||i,null==a&&(a=6e4),u=o(t,e,function(t,e){c[e]&&(clearTimeout(c[e]),s.apply(null,n(t,function(t){return r(t)})))}),"number"==typeof a?c[u]=setTimeout(function(){c[u]=null,s.apply(null,[{errors:"Unknown error"},null])},a):s.apply(null,[{errors:"Timeout must be a number"},null])}function o(t,e,n,i,o){e._method="POST",r(t,e,n,u.get,i,o)}function s(t,e,n,i,o){r(t,e,n,u.get,i,o)}function a(t,e,n,i,o){e._method="PUT",r(t,e,n,u.get,i,o)}var u=t("./jsonp"),c=[];e.exports={get:s,post:o,put:a}},{"./jsonp":8}],8:[function(t,e){(function(n){"use strict";function i(t,e){var n=document.createElement("script"),i=!1;n.src=t,n.async=!0;var r=e||l.error;"function"==typeof r&&(n.onerror=function(e){r({url:t,event:e})}),n.onload=n.onreadystatechange=function(){i||this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState||(i=!0,n.onload=n.onreadystatechange=null,n&&n.parentNode&&n.parentNode.removeChild(n))},a||(a=document.getElementsByTagName("head")[0]),a.appendChild(n)}function r(t,e){var n,i,o,s=[];for(var o in t)t.hasOwnProperty(o)&&(i=t[o],n=e?u.isArray(t)?e+"[]":e+"["+o+"]":o,s.push("object"==typeof i?r(i,n):encodeURIComponent(n)+"="+encodeURIComponent(i)));return s.join("&")}function o(t,e,n,o){var s=-1===(t||"").indexOf("?")?"?":"&";o=o||l.callbackName||"callback";var a=o+"_json"+u.generateUUID();return s+=r(e),c[a]=function(t){n(t,a);try{delete c[a]}catch(e){}c[a]=null},i(t+s+"&"+o+"="+a),a}function s(t){l=t}var a,u=t("./util"),c=n,l={};e.exports={get:o,init:s,stringify:r}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./util":15}],9:[function(t,e){"use strict";function n(t){var e,n={billingAddress:t.billingAddress||{}};for(e in t)if(t.hasOwnProperty(e))switch(e.replace(/_/,"").toLowerCase()){case"postalcode":case"countryname":case"countrycodenumeric":case"countrycodealpha2":case"countrycodealpha3":case"region":case"extendedaddress":case"locality":case"firstname":case"lastname":case"company":case"streetaddress":n.billingAddress[e]=t[e];break;default:n[e]=t[e]}return n}e.exports={normalizeCreditCardFields:n}},{}],10:[function(t,e){"use strict";function n(t){var e;if(!t)throw new Error("Braintree API Client Misconfigured: clientToken required.");if("object"==typeof t&&null!==t)e=t;else{try{t=window.atob(t)}catch(n){}try{e=JSON.parse(t)}catch(r){throw new Error("Braintree API Client Misconfigured: clientToken is invalid.")}}if(!e.hasOwnProperty("clientApiUrl")||!i.isWhitelistedDomain(e.clientApiUrl))throw new Error("Braintree API Client Misconfigured: clientToken is invalid.");return e}var i=t("braintree-utilities");t("./polyfill"),e.exports=n},{"./polyfill":12,"braintree-utilities":36}],11:[function(t,e){"use strict";function n(t){var e,n;for(e=0;e>4&3,l=(15&s)<<4|a>>2&15,p=(3&a)<<6|63&u;i+=String.fromCharCode(c)+(l?String.fromCharCode(l):"")+(p?String.fromCharCode(p):"")}while(r-1&&(n=n.split("#")[0]),e=a.makeQueryString({acsUrl:t.acsUrl,pareq:t.pareq,termUrl:t.termUrl+"&three_d_secure_version="+c,md:t.md,parentUrl:n}),this.assetsUrl+"/3ds/"+c+"/html/style_frame?"+e},e.exports=r},{"../shared/receiver":29,"braintree-utilities":21}],23:[function(t,e){"use strict";function n(){}function i(t,e){e=e||{},this.clientToken=e.clientToken,this.container=e.container,this.api=t,this.nonce=null,this._loader=null,this._boundHandleUserClose=r.bind(this._handleUserClose,this)}var r=t("braintree-utilities"),o=t("./authorization_service"),s=t("./loader");i.prototype.verify=function(t,e){if(!r.isFunction(e))throw this.api.sendAnalyticsEvents("3ds.web.no_callback"),new Error("No suitable callback argument was given");r.isFunction(t.onUserClose)&&(this._onUserClose=t.onUserClose),r.isFunction(t.onLookupComplete)&&(this._onLookupComplete=t.onLookupComplete),(void 0===t.useDefaultLoader||t.useDefaultLoader===!0)&&this._createDefaultLoader();var n={nonce:"",amount:t.amount},i=t.creditCard;if("string"==typeof i)n.nonce=i,this.api.sendAnalyticsEvents("3ds.web.verify.nonce"),this.startVerification(n,e);else{var o=this,s=function(t,i){return t?(o._removeDefaultLoader(),e(t)):(n.nonce=i,void o.startVerification(n,e))};this.api.sendAnalyticsEvents("3ds.web.verify.credit_card"),this.api.tokenizeCard(i,s)}},i.prototype.startVerification=function(t,e){this.api.lookup3DS(t,r.bind(this.handleLookupResponse(e),this))},i.prototype.handleLookupResponse=function(t){var e=this;return function(n,i){var s;this._onLookupComplete(),n?t(n.error):i.lookup&&i.lookup.acsUrl&&i.lookup.acsUrl.length>0?(e.nonce=i.paymentMethod.nonce,s=new o(this.clientToken.assetsUrl,this.container),s.get(i.lookup,r.bind(this.handleAuthenticationResponse(t),this)),this._detachListeners(),this._attachListeners()):(e.nonce=i.paymentMethod.nonce,t(null,{nonce:e.nonce,verificationDetails:i.threeDSecureInfo}))}},i.prototype.handleAuthenticationResponse=function(t){return function(e){var n,i=r.decodeQueryString(e);i.user_closed||(n=JSON.parse(i.auth_response),n.success?t(null,{nonce:n.paymentMethod.nonce,verificationDetails:n.threeDSecureInfo}):n.threeDSecureInfo&&n.threeDSecureInfo.liabilityShiftPossible?t(null,{nonce:this.nonce,verificationDetails:n.threeDSecureInfo}):t(n.error))}},i.prototype._attachListeners=function(){r.addEventListener(window,"message",this._boundHandleUserClose)},i.prototype._detachListeners=function(){r.removeEventListener(window,"message",this._boundHandleUserClose)},i.prototype._createDefaultLoader=function(){this._loader=new s,document.body.appendChild(this._loader.getElement())},i.prototype._removeDefaultLoader=function(){if(this._loader){var t=this._loader.getElement(),e=t.parentNode;e&&e.removeChild(t),this._loader.dispose(),this._loader=null}},i.prototype._handleUserClose=function(t){"user_closed=true"===t.data&&this._onUserClose()},i.prototype._onUserClose=n,i.prototype._onLookupComplete=function(){this._removeDefaultLoader()},e.exports=i},{"./authorization_service":22,"./loader":25,"braintree-utilities":21}],24:[function(t,e){"use strict";var n=t("./client");e.exports={create:function(t,e){var i=new n(t,e);return i}}},{"./client":23}],25:[function(t,e){"use strict";function n(){this._element=document.createElement("div"),this._element.style.cssText=this._cssDeclarations,this._display=null,this._initialize()}var i=t("./loader_display"),r=t("./loader_message"),o=t("./loader_spinner");n.prototype._cssDeclarations=["filter:progid:DXImageTransform.Microsoft.Gradient(StartColorStr=#7F000000, EndColorStr=#7F000000)","background-color: rgba(0, 0, 0, 0.5)","display: table","height: 100%","left: 0","position: fixed","right: 0","top: 0","width: 100%","z-index: 99999"].join(";"),n.prototype.getElement=function(){return this._element},n.prototype.dispose=function(){this._display.dispose(),this._display=null,this._element=null},n.prototype._initialize=function(){var t=new o,e=window.SVGElement&&window.SVGAnimateElement&&window.SVGAnimateTransformElement;e||(t=new r("Loading...")),this._display=new i(t),this.getElement().appendChild(this._display.getElement())},e.exports=n},{"./loader_display":26,"./loader_message":27,"./loader_spinner":28}],26:[function(t,e){"use strict";function n(t){this._element=document.createElement("div"),this._element.style.cssText=this._cssDeclarations,this._displayObject=t,this._initialize()}n.prototype._cssDeclarations=["display: table-cell","vertical-align: middle"].join(";"),n.prototype.getElement=function(){return this._element},n.prototype.dispose=function(){this._displayObject.dispose(),this._displayObject=null,this._element=null},n.prototype._initialize=function(){this.getElement().appendChild(this._displayObject.getElement())},e.exports=n},{}],27:[function(t,e){"use strict";function n(t){this._element=document.createElement("div"),this._element.style.cssText=this._cssDeclarations,this._element.innerHTML=t}n.prototype._cssDeclarations=["color: #fff","font-family: Helvetica, sans-serif","font-size: 12px","text-align: center"].join(";"),n.prototype.getElement=function(){return this._element},n.prototype.dispose=function(){this._element=null},e.exports=n},{}],28:[function(t,e){"use strict";function n(){this._element=document.createElement("div"),this._element.style.cssText=this._cssDeclarations,this._element.innerHTML=this._markup}n.prototype._cssDeclarations=["height: 36px","margin-left: auto","margin-right: auto","width: 36px"].join(";"),n.prototype._markup=['',' ',' '," ",""].join(""),n.prototype.getElement=function(){return this._element},n.prototype.dispose=function(){this._element=null},e.exports=n},{}],29:[function(t,e){"use strict";function n(t){this.postMessageReceiver(t),this.hashChangeReceiver(t)}var i=t("braintree-utilities");n.prototype.postMessageReceiver=function(t){var e=this;this.wrappedCallback=function(n){var i=n.data;(/^(auth_response=)/.test(i)||"user_closed=true"===i)&&(t(i),e.stopListening())},i.addEventListener(window,"message",this.wrappedCallback)},n.prototype.hashChangeReceiver=function(t){var e,n=window.location.hash,i=this;this.poll=setInterval(function(){e=window.location.hash,e.length>0&&e!==n&&(i.stopListening(),e=e.substring(1,e.length),t(e),window.location.hash=n.length>0?n:"")},10)},n.prototype.stopListening=function(){clearTimeout(this.poll),i.removeEventListener(window,"message",this.wrappedCallback)},e.exports=n},{"braintree-utilities":21}],30:[function(t,e){"use strict";var n,i=Array.prototype.indexOf;n=i?function(t,e){return t.indexOf(e)}:function(t,e){for(var n=0,i=t.length;i>n;n++)if(t[n]===e)return n;return-1},e.exports={indexOf:n}},{}],31:[function(t,e,n){arguments[4][17][0].apply(n,arguments)},{dup:17}],32:[function(t,e,n){arguments[4][18][0].apply(n,arguments)},{dup:18}],33:[function(t,e,n){arguments[4][19][0].apply(n,arguments)},{dup:19}],34:[function(t,e){"use strict";function n(t){var e,n,i,r,o=[{min:0,max:180,chars:7},{min:181,max:620,chars:14},{min:621,max:960,chars:22}];for(r=o.length,t=t||window.innerWidth,n=0;r>n;n++)i=o[n],t>=i.min&&t<=i.max&&(e=i.chars);return e||60}function i(t,e){var n,i;return-1===t.indexOf("@")?t:(t=t.split("@"),n=t[0],i=t[1],n.length>e&&(n=n.slice(0,e)+"..."),i.length>e&&(i="..."+i.slice(-e)),n+"@"+i)}e.exports={truncateEmail:i,getMaxCharLength:n}},{}],35:[function(t,e){"use strict";function n(){return"https:"===window.location.protocol}function i(t){switch(t){case null:case void 0:return"";case!0:return"1";case!1:return"0";default:return encodeURIComponent(t)}}function r(t,e){var n,o,s=[];for(o in t)if(t.hasOwnProperty(o)){var a=t[o];n=e?e+"["+o+"]":o,"object"==typeof a?s.push(r(a,n)):void 0!==a&&null!==a&&s.push(i(n)+"="+i(a))}return s.join("&")}function o(t){for(var e={},n=t.split("&"),i=0;i=0;i--)r=g[i],r.closed===!0?g=g.slice(i,1):n!==r&&p(r.top,t,e)}function d(t,e){function n(r,o){t(r,o),y.target(e).unsubscribe(i,n)}var i=u();return y.target(e).subscribe(i,n),i}function f(t,e,n){return"string"!=typeof t?!0:"function"!=typeof e?!0:"string"!=typeof n?!0:!1}var m,y,g=[],b={},v="/*framebus*/";return a(),y={target:e,include:t,publish:n,pub:n,trigger:n,emit:n,subscribe:i,sub:i,on:i,unsubscribe:r,unsub:r,off:r}})},{}],40:[function(t,e){"use strict";function n(t,e){a.emit(a.events.ERROR,{type:e,message:t})}function i(t){t=t||{};var e=t.coinbase;if(null==t.apiClient)n("settings.apiClient is required for coinbase",u);else if(t.configuration.coinbaseEnabled)if(e&&(e.container||e.button))if(e.container&&e.button)n("options.coinbase.container and options.coinbase.button are mutually exclusive",u);else{if(s.isSupportedBrowser())return!0;n("Coinbase is not supported by your browser. Please consider upgrading","UNSUPPORTED_BROWSER") +}else n("Either options.coinbase.container or options.coinbase.button is required for Coinbase integrations",u);else n("Coinbase is not enabled for your merchant account",u);return!1}function r(t){return i(t)?new o(t):void 0}var o=t("./lib/coinbase"),s=t("./lib/detector"),a=t("braintree-bus"),u="CONFIGURATION";e.exports={create:r}},{"./lib/coinbase":43,"./lib/detector":45,"braintree-bus":51}],41:[function(t,e){(function(t){"use strict";function n(e){return e=e||t.navigator.userAgent,/AppleWebKit\//.test(e)&&/Mobile\//.test(e)?e.replace(/.* OS ([0-9_]+) like Mac OS X.*/,"$1").replace(/_/g,"."):null}function i(e){e=e||t.navigator.userAgent;var n=null,i=/MSIE.(\d+)/.exec(e);return/Trident/.test(e)&&(n=11),i&&(n=parseInt(i[1],10)),n}function r(e){return e=e||t.navigator.userAgent,/Android/.test(e)?e.replace(/^.* Android ([0-9\.]+).*$/,"$1"):null}e.exports={ieVersion:i,iOSSafariVersion:n,androidVersion:r}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],42:[function(t,e){"use strict";function n(t,e,n){return t?(i.emit(i.events.ERROR,t.error),void n._sendAnalyticsEvent("generate.nonce.failed")):(i.emit(i.events.PAYMENT_METHOD_GENERATED,e),void n._sendAnalyticsEvent("generate.nonce.succeeded"))}var i=t("braintree-bus");e.exports={tokenize:n}},{"braintree-bus":51}],43:[function(t,e){(function(n){"use strict";function i(t){return{clientId:t.configuration.coinbase.clientId,redirectUrl:t.configuration.coinbase.redirectUrl,scopes:t.configuration.coinbase.scopes||c.SCOPES,meta:{authorizations_merchant_account:t.configuration.coinbase.merchantAccount||""}}}function r(t){var e;this.buttonId=t.coinbase.button||c.BUTTON_ID,this.apiClient=t.apiClient,this.assetsUrl=t.configuration.assetsUrl,this.environment=t.configuration.coinbase.environment,this._onOAuthSuccess=o.bind(this._onOAuthSuccess,this),this._handleButtonClick=o.bind(this._handleButtonClick,this),this.popupParams=i(t),this.redirectDoneInterval=null,t.coinbase.container?(e=o.normalizeElement(t.coinbase.container),this._insertFrame(e)):(n.braintreeCoinbasePopupCallback=this._onOAuthSuccess,e=document.body,o.addEventListener(e,"click",this._handleButtonClick),this._sendAnalyticsEvent("initialized"))}var o=t("braintree-utilities"),s=t("./dom/composer"),a=t("./url-composer"),u=t("./callbacks"),c=t("./constants"),l=t("./detector"),p=t("braintree-bus");r.prototype._sendAnalyticsEvent=function(t){var e=this.apiClient.integration+".web.coinbase.";this.apiClient.sendAnalyticsEvents(e+t)},r.prototype._insertFrame=function(t){var e=s.createFrame({src:this.assetsUrl+"/coinbase/"+c.VERSION+"/coinbase-frame.html"});p.emit(p.events.ASYNC_DEPENDENCY_INITIALIZING),t.appendChild(e)},r.prototype._onOAuthSuccess=function(t){return t.code?(p.emit("coinbase:view:navigate","loading"),this._sendAnalyticsEvent("popup.authorized"),this.apiClient.tokenizeCoinbase({code:t.code,query:a.getQueryString()},o.bind(function(t,e){u.tokenize.apply(null,[t,e,this])},this)),void this._closePopup()):void this._sendAnalyticsEvent("popup.denied")},r.prototype._clearPollForRedirectDone=function(){this.redirectDoneInterval&&(clearInterval(this.redirectDoneInterval),this.redirectDoneInterval=null)},r.prototype._closePopup=function(t){t=t||this.popup,l.shouldCloseFromParent()&&t.close(),this._popupCleanup()},r.prototype._popupCleanup=function(){this._clearPollForRedirectDone(),p.emit(p.events.UI_POPUP_DID_CLOSE,{source:c.INTEGRATION_NAME})},r.prototype._pollForRedirectDone=function(t){var e=setInterval(o.bind(function(){var e;if(null==t||t.closed)return this._sendAnalyticsEvent("popup.aborted"),void this._popupCleanup();try{if("about:blank"===t.location.href)throw new Error("Not finished loading");e=o.decodeQueryString(t.location.search.replace(/^\?/,"")).code}catch(n){return}this._onOAuthSuccess({code:e})},this),100);return this.redirectDoneInterval=e,e},r.prototype._openPopup=function(){var t;this._sendAnalyticsEvent("popup.started"),t=s.createPopup(a.compose(this._getOAuthBaseUrl(),this.popupParams)),t.focus(),this._pollForRedirectDone(t),p.trigger(p.events.UI_POPUP_DID_OPEN,{source:c.INTEGRATION_NAME}),p.on(p.events.UI_POPUP_FORCE_CLOSE,function(e){e.target===c.INTEGRATION_NAME&&t.close()}),this.popup=t},r.prototype._getOAuthBaseUrl=function(){var t;return t="shared_sandbox"===this.environment?c.SANDBOX_OAUTH_BASE_URL:c.PRODUCTION_OAUTH_BASE_URL},r.prototype._handleButtonClick=function(t){for(var e=t.target||t.srcElement;;){if(null==e)return;if(e===t.currentTarget)return;if(e.id===this.buttonId)break;e=e.parentNode}t&&t.preventDefault?t.preventDefault():t.returnValue=!1,this._openPopup()},e.exports=r}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./callbacks":42,"./constants":44,"./detector":45,"./dom/composer":47,"./url-composer":50,"braintree-bus":51,"braintree-utilities":60}],44:[function(t,e){"use strict";e.exports={PRODUCTION_OAUTH_BASE_URL:"https://coinbase.com",SANDBOX_OAUTH_BASE_URL:"https://sandbox.coinbase.com",ORIGIN_URL:"https://www.coinbase.com",FRAME_NAME:"braintree-coinbase-frame",POPUP_NAME:"coinbase",BUTTON_ID:"bt-coinbase-button",SCOPES:"send",VERSION:"0.1.0",INTEGRATION_NAME:"Coinbase"}},{}],45:[function(t,e){"use strict";function n(){var t=s.ieVersion();return!t||t>8}function i(){var t=s.androidVersion();return null==t?!1:/^5/.test(t)}function r(){return!(i()||o())}function o(){var t=s.iOSSafariVersion();return null==t?!1:/^8\.0/.test(t)||/^8\.1$/.test(t)}var s=t("./browser");e.exports={isSupportedBrowser:n,shouldCloseFromParent:r,shouldDisplayIOSClose:o,shouldDisplayLollipopClose:i}},{"./browser":41}],46:[function(t,e){"use strict";function n(t){var e=document.createElement("button");return t=t||{},e.id=t.id||"coinbase-button",e.style.backgroundColor=t.backgroundColor||"#EEE",e.style.color=t.color||"#4597C3",e.style.border=t.border||"0",e.style.borderRadius=t.borderRadius||"6px",e.style.padding=t.padding||"12px",e.innerHTML=t.innerHTML||"coinbase",e}e.exports={create:n}},{}],47:[function(t,e){"use strict";var n=t("./popup"),i=t("./button"),r=t("./frame");e.exports={createButton:i.create,createPopup:n.create,createFrame:r.create}},{"./button":46,"./frame":48,"./popup":49}],48:[function(t,e){"use strict";function n(t){return r({src:t.src,name:i.FRAME_NAME,height:"70px",width:"100%",style:{padding:0,margin:0,border:0,outline:"none"}})}var i=t("../constants"),r=t("iframer");e.exports={create:n}},{"../constants":44,iframer:61}],49:[function(t,e){(function(n){"use strict";function i(t){var e=[];for(var n in t)t.hasOwnProperty(n)&&e.push([n,t[n]].join("="));return e.join(",")}function r(){var t=850,e=600;return i({width:t,height:e,left:(screen.width-t)/2,top:(screen.height-e)/4})}function o(t){return n.open(t,s.POPUP_NAME,r())}var s=t("../constants");e.exports={create:o}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../constants":44}],50:[function(t,e){"use strict";function n(){return"version="+r.VERSION}function i(t,e){var i=t+"/oauth/authorize?response_type=code",r=e.redirectUrl+"?"+n();if(i+="&redirect_uri="+encodeURIComponent(r),i+="&client_id="+e.clientId,e.scopes&&(i+="&scope="+encodeURIComponent(e.scopes)),e.meta)for(var o in e.meta)e.meta.hasOwnProperty(o)&&(i+="&meta["+encodeURIComponent(o)+"]="+encodeURIComponent(e.meta[o]));return i}var r=t("./constants");e.exports={compose:i,getQueryString:n}},{"./constants":44}],51:[function(t,e,n){arguments[4][37][0].apply(n,arguments)},{"./lib/events":52,dup:37,framebus:53}],52:[function(t,e,n){arguments[4][38][0].apply(n,arguments)},{dup:38}],53:[function(t,e,n){arguments[4][39][0].apply(n,arguments)},{dup:39}],54:[function(t,e,n){arguments[4][30][0].apply(n,arguments)},{dup:30}],55:[function(t,e,n){arguments[4][17][0].apply(n,arguments)},{dup:17}],56:[function(t,e,n){arguments[4][18][0].apply(n,arguments)},{dup:18}],57:[function(t,e,n){arguments[4][19][0].apply(n,arguments)},{dup:19}],58:[function(t,e,n){arguments[4][34][0].apply(n,arguments)},{dup:34}],59:[function(t,e,n){arguments[4][35][0].apply(n,arguments)},{"./array":54,dup:35}],60:[function(t,e,n){arguments[4][36][0].apply(n,arguments)},{"./lib/array":54,"./lib/dom":55,"./lib/events":56,"./lib/fn":57,"./lib/string":58,"./lib/url":59,dup:36}],61:[function(t,e){"use strict";var n=t("lodash.assign"),i=t("lodash.isstring"),r=t("./lib/default-attributes");e.exports=function(t){var e=document.createElement("iframe"),o=n({},r,t);o.style&&!i(o.style)&&(n(e.style,o.style),delete o.style);for(var s in o)o.hasOwnProperty(s)&&e.setAttribute(s,o[s]);return e.getAttribute("id")||(e.id=e.name),e}},{"./lib/default-attributes":62,"lodash.assign":63,"lodash.isstring":74}],62:[function(t,e){e.exports={frameBorder:0,allowtransparency:!0}},{}],63:[function(t,e){function n(t,e,n){for(var i=-1,r=o(e),s=r.length;++i2?n[s-2]:void 0,u=s>2?n[2]:void 0,c=s>1?n[s-1]:void 0;for("function"==typeof a?(a=i(a,c,5),s-=2):(a="function"==typeof c?c:void 0,s-=a?1:0),u&&r(n[0],n[1],u)&&(a=3>s?void 0:a,s=1);++o-1&&t%1==0&&e>t}function o(t,e,n){if(!a(n))return!1;var o=typeof e;if("number"==o?i(n)&&r(e,n.length):"string"==o&&e in n){var s=n[e];return t===t?t===s:s!==s}return!1}function s(t){return"number"==typeof t&&t>-1&&t%1==0&&c>=t}function a(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}var u=/^\d+$/,c=9007199254740991,l=n("length");e.exports=o},{}],69:[function(t,e){function n(t,e){if("function"!=typeof t)throw new TypeError(i);return e=r(void 0===e?t.length-1:+e||0,0),function(){for(var n=arguments,i=-1,o=r(n.length-e,0),s=Array(o);++i-1&&t%1==0&&e>t}function o(t){return"number"==typeof t&&t>-1&&t%1==0&&y>=t}function s(t){for(var e=u(t),n=e.length,i=n&&t.length,s=!!i&&o(i)&&(p(t)||l(t)),a=-1,c=[];++a0;++i-1&&t%1==0&&l>=t}function s(t){return n(t)&&r(t)&&u.call(t,"callee")&&!c.call(t,"callee")}var a=Object.prototype,u=a.hasOwnProperty,c=a.propertyIsEnumerable,l=9007199254740991,p=i("length");e.exports=s},{}],73:[function(t,e){function n(t){return!!t&&"object"==typeof t}function i(t,e){var n=null==t?void 0:t[e];return a(n)?n:void 0}function r(t){return"number"==typeof t&&t>-1&&t%1==0&&g>=t}function o(t){return s(t)&&f.call(t)==c}function s(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function a(t){return null==t?!1:o(t)?m.test(h.call(t)):n(t)&&l.test(t)}var u="[object Array]",c="[object Function]",l=/^\[object .+?Constructor\]$/,p=Object.prototype,h=Function.prototype.toString,d=p.hasOwnProperty,f=p.toString,m=RegExp("^"+h.call(d).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),y=i(Array,"isArray"),g=9007199254740991,b=y||function(t){return n(t)&&r(t.length)&&f.call(t)==u};e.exports=b},{}],74:[function(t,e){function n(t){return!!t&&"object"==typeof t}function i(t){return"string"==typeof t||n(t)&&s.call(t)==r}var r="[object String]",o=Object.prototype,s=o.toString;e.exports=i},{}],75:[function(t,e,n){arguments[4][2][0].apply(n,arguments)},{"./coinbase-account":76,"./credit-card":77,"./europe-bank-account":78,"./normalize-api-fields":82,"./parse-client-token":83,"./paypal-account":84,"./request-driver":86,"./sepa-mandate":87,"./util":88,"braintree-3ds":97,"braintree-utilities":109,dup:2}],76:[function(t,e,n){arguments[4][3][0].apply(n,arguments)},{dup:3}],77:[function(t,e,n){arguments[4][4][0].apply(n,arguments)},{dup:4}],78:[function(t,e,n){arguments[4][5][0].apply(n,arguments)},{dup:5}],79:[function(t,e,n){arguments[4][6][0].apply(n,arguments)},{"./parse-client-token":83,"./request-driver":86,"./util":88,dup:6}],80:[function(t,e,n){arguments[4][7][0].apply(n,arguments)},{"./jsonp":81,dup:7}],81:[function(t,e,n){arguments[4][8][0].apply(n,arguments)},{"./util":88,dup:8}],82:[function(t,e,n){arguments[4][9][0].apply(n,arguments)},{dup:9}],83:[function(t,e,n){arguments[4][10][0].apply(n,arguments)},{"./polyfill":85,"braintree-utilities":109,dup:10}],84:[function(t,e,n){arguments[4][11][0].apply(n,arguments)},{dup:11}],85:[function(t,e,n){arguments[4][12][0].apply(n,arguments)},{dup:12}],86:[function(t,e,n){arguments[4][13][0].apply(n,arguments)},{"./jsonp-driver":80,dup:13}],87:[function(t,e,n){arguments[4][14][0].apply(n,arguments)},{dup:14}],88:[function(t,e,n){arguments[4][15][0].apply(n,arguments)},{dup:15}],89:[function(t,e,n){arguments[4][16][0].apply(n,arguments)},{"./lib/client":75,"./lib/get-configuration":79,"./lib/jsonp":81,"./lib/jsonp-driver":80,"./lib/parse-client-token":83,"./lib/util":88,dup:16}],90:[function(t,e,n){arguments[4][17][0].apply(n,arguments)},{dup:17}],91:[function(t,e,n){arguments[4][18][0].apply(n,arguments)},{dup:18}],92:[function(t,e,n){arguments[4][19][0].apply(n,arguments)},{dup:19}],93:[function(t,e,n){arguments[4][20][0].apply(n,arguments)},{dup:20}],94:[function(t,e,n){arguments[4][21][0].apply(n,arguments)},{"./lib/dom":90,"./lib/events":91,"./lib/fn":92,"./lib/url":93,dup:21}],95:[function(t,e,n){arguments[4][22][0].apply(n,arguments)},{"../shared/receiver":102,"braintree-utilities":94,dup:22}],96:[function(t,e,n){arguments[4][23][0].apply(n,arguments)},{"./authorization_service":95,"./loader":98,"braintree-utilities":94,dup:23}],97:[function(t,e,n){arguments[4][24][0].apply(n,arguments)},{"./client":96,dup:24}],98:[function(t,e,n){arguments[4][25][0].apply(n,arguments)},{"./loader_display":99,"./loader_message":100,"./loader_spinner":101,dup:25}],99:[function(t,e,n){arguments[4][26][0].apply(n,arguments)},{dup:26}],100:[function(t,e,n){arguments[4][27][0].apply(n,arguments)},{dup:27}],101:[function(t,e,n){arguments[4][28][0].apply(n,arguments)},{dup:28}],102:[function(t,e,n){arguments[4][29][0].apply(n,arguments)},{"braintree-utilities":94,dup:29}],103:[function(t,e,n){arguments[4][30][0].apply(n,arguments)},{dup:30}],104:[function(t,e,n){arguments[4][17][0].apply(n,arguments)},{dup:17}],105:[function(t,e,n){arguments[4][18][0].apply(n,arguments)},{dup:18}],106:[function(t,e,n){arguments[4][19][0].apply(n,arguments)},{dup:19}],107:[function(t,e,n){arguments[4][34][0].apply(n,arguments)},{dup:34}],108:[function(t,e,n){arguments[4][35][0].apply(n,arguments)},{"./array":103,dup:35}],109:[function(t,e,n){arguments[4][36][0].apply(n,arguments)},{"./lib/array":103,"./lib/dom":104,"./lib/events":105,"./lib/fn":106,"./lib/string":107,"./lib/url":108,dup:36}],110:[function(t,e,n){arguments[4][37][0].apply(n,arguments)},{"./lib/events":111,dup:37,framebus:112}],111:[function(t,e,n){arguments[4][38][0].apply(n,arguments)},{dup:38}],112:[function(t,e,n){arguments[4][39][0].apply(n,arguments)},{dup:39}],113:[function(t,e){(function(n){"use strict";function i(t){var e=t.sdkVersion;return e||(e=n.braintree&&n.braintree.VERSION?"braintree/web/"+n.braintree.VERSION:""),e}function r(t){var e,r;this.attrs={},t.hasOwnProperty("sharedCustomerIdentifier")&&(this.attrs.sharedCustomerIdentifier=t.sharedCustomerIdentifier),e=a(t.clientToken),this.driver=t.driver||u,this.analyticsUrl=e.analytics?e.analytics.url:void 0,this.clientApiUrl=e.clientApiUrl,this.customerId=t.customerId,this.challenges=e.challenges,this.integration=t.integration||"",this.sdkVersion=i(e),this.merchantAppId=e.merchantAppId||n.location.host,r=s.create(this,{container:t.container,clientToken:e}),this.verify3DS=o.bind(r.verify,r),this.attrs.authorizationFingerprint=e.authorizationFingerprint,this.attrs.sharedCustomerIdentifierType=t.sharedCustomerIdentifierType,e.merchantAccountId&&(this.attrs.merchantAccountId=e.merchantAccountId),this.requestTimeout=t.hasOwnProperty("timeout")?t.timeout:6e4}var o=t("braintree-utilities"),s=t("braintree-3ds"),a=t("./parse-client-token"),u=t("./request-driver"),c=t("./util"),l=t("./sepa-mandate"),p=t("./europe-bank-account"),h=t("./credit-card"),d=t("./coinbase-account"),f=t("./paypal-account"),m=t("./normalize-api-fields").normalizeCreditCardFields;r.prototype.getCreditCards=function(t){this.driver.get(c.joinUrlFragments([this.clientApiUrl,"v1","payment_methods"]),this.attrs,function(t){var e=0,n=t.paymentMethods.length,i=[];for(e;n>e;e++)i.push(new h(t.paymentMethods[e]));return i},t,this.requestTimeout)},r.prototype.tokenizeCoinbase=function(t,e){t.options={validate:!1},this.addCoinbase(t,function(t,n){t?e(t,null):n&&n.nonce?e(t,n):e("Unable to tokenize coinbase account.",null)})},r.prototype.tokenizePayPalAccount=function(t,e){this.addPayPalAccount(t,function(t,n){t?e(t,null):n&&n.nonce?e(null,n):e("Unable to tokenize paypal account.",null)})},r.prototype.tokenizeCard=function(t,e){t.options={validate:!1},this.addCreditCard(t,function(t,n){n&&n.nonce?e(t,n.nonce,{type:n.type,details:n.details}):e("Unable to tokenize card.",null)})},r.prototype.lookup3DS=function(t,e){var n=c.joinUrlFragments([this.clientApiUrl,"v1/payment_methods",t.nonce,"three_d_secure/lookup"]),i=c.mergeOptions(this.attrs,{amount:t.amount});this.driver.post(n,i,function(t){return t},e,this.requestTimeout)},r.prototype.createSEPAMandate=function(t,e){var n=c.mergeOptions(this.attrs,{sepaMandate:t});this.driver.post(c.joinUrlFragments([this.clientApiUrl,"v1","sepa_mandates.json"]),n,function(t){return{sepaMandate:new l(t.europeBankAccounts[0].sepaMandates[0]),sepaBankAccount:new p(t.europeBankAccounts[0])}},e,this.requestTimeout)},r.prototype.addCoinbase=function(t,e){var n;delete t.share,n=c.mergeOptions(this.attrs,{coinbaseAccount:t,_meta:{integration:this.integration||"custom",source:"coinbase"}}),this.driver.post(c.joinUrlFragments([this.clientApiUrl,"v1","payment_methods/coinbase_accounts"]),n,function(t){return new d(t.coinbaseAccounts[0])},e,this.requestTimeout)},r.prototype.addPayPalAccount=function(t,e){var n;delete t.share,n=c.mergeOptions(this.attrs,{paypalAccount:t,_meta:{integration:this.integration||"paypal",source:"paypal"}}),this.driver.post(c.joinUrlFragments([this.clientApiUrl,"v1","payment_methods","paypal_accounts"]),n,function(t){return new f(t.paypalAccounts[0])},e,this.requestTimeout)},r.prototype.addCreditCard=function(t,e){var n,i,r=t.share;delete t.share,i=m(t),n=c.mergeOptions(this.attrs,{share:r,creditCard:i,_meta:{integration:this.integration||"custom",source:"form"}}),this.driver.post(c.joinUrlFragments([this.clientApiUrl,"v1","payment_methods/credit_cards"]),n,function(t){return new h(t.creditCards[0])},e,this.requestTimeout)},r.prototype.unlockCreditCard=function(t,e,n){var i=c.mergeOptions(this.attrs,{challengeResponses:e});this.driver.put(c.joinUrlFragments([this.clientApiUrl,"v1","payment_methods/",t.nonce]),i,function(t){return new h(t.paymentMethods[0])},n,this.requestTimeout)},r.prototype.sendAnalyticsEvents=function(t,e){var i,r,o=this.analyticsUrl,s=[];if(t=c.isArray(t)?t:[t],!o)return void(e&&e.apply(null,[null,{}]));for(r in t)t.hasOwnProperty(r)&&s.push({kind:t[r]});i=c.mergeOptions(this.attrs,{braintree_library_version:this.sdkVersion,analytics:s,_meta:{merchantAppId:this.merchantAppId,platform:"web",platformVersion:n.navigator.userAgent,integrationType:this.integration,sdkVersion:this.sdkVersion}}),this.driver.post(o,i,function(t){return t},e,this.requestTimeout)},r.prototype.decryptBrowserswitchPayload=function(t,e){var n=c.mergeOptions(this.attrs,{asymmetric_encrypted_payload:t}),i=c.joinUrlFragments([this.clientApiUrl,"/v1/paypal_browser_switch/decrypt"]);this.driver.post(i,n,function(t){return t},e,this.requestTimeout)},r.prototype.encryptBrowserswitchReturnPayload=function(t,e,n){var i=c.mergeOptions(this.attrs,{payload:t,aesKey:e}),r=c.joinUrlFragments([this.clientApiUrl,"/v1/paypal_browser_switch/encrypt"]);this.driver.post(r,i,function(t){return t},n,this.requestTimeout)},r.prototype.exchangePaypalTokenForConsentCode=function(t,e){var n=c.mergeOptions(this.attrs,t);this.attrs.merchantAccountId&&(n.merchant_account_id=this.attrs.merchantAccountId);var i=c.joinUrlFragments([this.clientApiUrl,"/v1/paypal_account_service/merchant_consent"]);this.driver.post(i,n,function(t){return t},e,this.requestTimeout)},e.exports=r}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./coinbase-account":114,"./credit-card":115,"./europe-bank-account":116,"./normalize-api-fields":120,"./parse-client-token":121,"./paypal-account":122,"./request-driver":124,"./sepa-mandate":125,"./util":126,"braintree-3ds":135,"braintree-utilities":147}],114:[function(t,e,n){arguments[4][3][0].apply(n,arguments)},{dup:3}],115:[function(t,e,n){arguments[4][4][0].apply(n,arguments)},{dup:4}],116:[function(t,e,n){arguments[4][5][0].apply(n,arguments)},{dup:5}],117:[function(t,e,n){arguments[4][6][0].apply(n,arguments)},{"./parse-client-token":121,"./request-driver":124,"./util":126,dup:6}],118:[function(t,e,n){arguments[4][7][0].apply(n,arguments)},{"./jsonp":119,dup:7}],119:[function(t,e,n){arguments[4][8][0].apply(n,arguments)},{"./util":126,dup:8}],120:[function(t,e,n){arguments[4][9][0].apply(n,arguments)},{dup:9}],121:[function(t,e,n){arguments[4][10][0].apply(n,arguments)},{"./polyfill":123,"braintree-utilities":147,dup:10}],122:[function(t,e,n){arguments[4][11][0].apply(n,arguments)},{dup:11}],123:[function(t,e,n){arguments[4][12][0].apply(n,arguments)},{dup:12}],124:[function(t,e,n){arguments[4][13][0].apply(n,arguments)},{"./jsonp-driver":118,dup:13}],125:[function(t,e,n){arguments[4][14][0].apply(n,arguments)},{dup:14}],126:[function(t,e,n){arguments[4][15][0].apply(n,arguments)},{dup:15}],127:[function(t,e,n){arguments[4][16][0].apply(n,arguments)},{"./lib/client":113,"./lib/get-configuration":117,"./lib/jsonp":119,"./lib/jsonp-driver":118,"./lib/parse-client-token":121,"./lib/util":126,dup:16}],128:[function(t,e,n){arguments[4][17][0].apply(n,arguments)},{dup:17}],129:[function(t,e,n){arguments[4][18][0].apply(n,arguments)},{dup:18}],130:[function(t,e,n){arguments[4][19][0].apply(n,arguments)},{dup:19}],131:[function(t,e,n){arguments[4][20][0].apply(n,arguments)},{dup:20}],132:[function(t,e,n){arguments[4][21][0].apply(n,arguments)},{"./lib/dom":128,"./lib/events":129,"./lib/fn":130,"./lib/url":131,dup:21}],133:[function(t,e,n){arguments[4][22][0].apply(n,arguments)},{"../shared/receiver":140,"braintree-utilities":132,dup:22}],134:[function(t,e,n){arguments[4][23][0].apply(n,arguments)},{"./authorization_service":133,"./loader":136,"braintree-utilities":132,dup:23}],135:[function(t,e,n){arguments[4][24][0].apply(n,arguments)},{"./client":134,dup:24}],136:[function(t,e,n){arguments[4][25][0].apply(n,arguments)},{"./loader_display":137,"./loader_message":138,"./loader_spinner":139,dup:25}],137:[function(t,e,n){arguments[4][26][0].apply(n,arguments)},{dup:26}],138:[function(t,e,n){arguments[4][27][0].apply(n,arguments)},{dup:27}],139:[function(t,e,n){arguments[4][28][0].apply(n,arguments)},{dup:28}],140:[function(t,e,n){arguments[4][29][0].apply(n,arguments)},{"braintree-utilities":132,dup:29}],141:[function(t,e,n){arguments[4][30][0].apply(n,arguments)},{dup:30}],142:[function(t,e,n){arguments[4][17][0].apply(n,arguments)},{dup:17}],143:[function(t,e,n){arguments[4][18][0].apply(n,arguments)},{dup:18}],144:[function(t,e,n){arguments[4][19][0].apply(n,arguments)},{dup:19}],145:[function(t,e,n){arguments[4][34][0].apply(n,arguments)},{dup:34}],146:[function(t,e,n){arguments[4][35][0].apply(n,arguments)},{"./array":141,dup:35}],147:[function(t,e,n){arguments[4][36][0].apply(n,arguments)},{"./lib/array":141,"./lib/dom":142,"./lib/events":143,"./lib/fn":144,"./lib/string":145,"./lib/url":146,dup:36}],148:[function(t,e,n){arguments[4][37][0].apply(n,arguments)},{"./lib/events":149,dup:37,framebus:150}],149:[function(t,e,n){arguments[4][38][0].apply(n,arguments)},{dup:38}],150:[function(t,e,n){arguments[4][39][0].apply(n,arguments)},{dup:39}],151:[function(t,e,n){arguments[4][30][0].apply(n,arguments)},{dup:30}],152:[function(t,e,n){arguments[4][17][0].apply(n,arguments)},{dup:17}],153:[function(t,e,n){arguments[4][18][0].apply(n,arguments)},{dup:18}],154:[function(t,e,n){arguments[4][19][0].apply(n,arguments)},{dup:19}],155:[function(t,e,n){arguments[4][34][0].apply(n,arguments)},{dup:34}],156:[function(t,e,n){arguments[4][35][0].apply(n,arguments)},{"./array":151,dup:35}],157:[function(t,e,n){arguments[4][36][0].apply(n,arguments)},{"./lib/array":151,"./lib/dom":152,"./lib/events":153,"./lib/fn":154,"./lib/string":155,"./lib/url":156,dup:36}],158:[function(t,e){function n(t){var e=window.getComputedStyle?getComputedStyle(t):t.currentStyle;return{overflow:e.overflow||"",height:t.style.height||""}}function i(){return{html:{node:document.documentElement,styles:n(document.documentElement)},body:{node:document.body,styles:n(document.body)}}}function r(t,e){if(!t)throw new Error('Parameter "clientToken" cannot be null');e=e||{},this._clientToken=o.parseClientToken(t),this._clientOptions=e,this.container=e.container,this.merchantPageDefaultStyles=null,this.paymentMethodNonceInputField=e.paymentMethodNonceInputField,this.frame=null,this.popup=null,this.insertFrameFunction=e.insertFrame,this.onSuccess=e.onSuccess,this.onCancelled=e.onCancelled,this.onUnsupported=e.onUnsupported,this.loggedInView=null,this.loggedOutView=null,this.insertUI=!0}var o=t("braintree-api"),s=t("braintree-bus"),a=t("braintree-utilities"),u=t("./logged-in-view"),c=t("./logged-out-view"),l=t("./overlay-view"),p=t("../shared/util/browser"),h=t("../shared/util/dom"),d=t("../shared/constants"),f=t("../shared/util/util"),m=t("../shared/get-locale");r.prototype.getViewerUrl=function(){var t=this._clientToken.paypal.assetsUrl;return t+"/pwpp/"+d.VERSION+"/html/braintree-frame.html"},r.prototype.getProxyUrl=function(){var t=this._clientToken.paypal.assetsUrl;return t+"/pwpp/"+d.VERSION+"/html/proxy-frame.html"},r.prototype.initialize=function(){if(!this._clientToken.paypalEnabled)return void("function"==typeof this.onUnsupported&&this.onUnsupported(new Error("PayPal is not enabled")));if(!this._isBrowserSecure())return void("function"==typeof this.onUnsupported&&this.onUnsupported(new Error("unsupported protocol detected")));if(this._isHermesCapable()){if(!this._isHermesSupportedCurrency())return void("function"==typeof this.onUnsupported&&this.onUnsupported(new Error("This PayPal integration does not support this currency")));if(!this._isHermesSupportedCountries())return void("function"==typeof this.onUnsupported&&this.onUnsupported(new Error("This PayPal integration does not support this locale")));if(!this._isValidAmount())return void("function"==typeof this.onUnsupported&&this.onUnsupported(new Error("Amount must be a number")))}return this._isMisconfiguredUnvettedMerchant()?void("function"==typeof this.onUnsupported&&this.onUnsupported(new Error("Unvetted merchants must provide a payeeEmail, amount, and currency"))):(this._overrideClientTokenProperties(),p.isProxyFrameRequired()&&this._insertProxyFrame(),this._setupDomElements(),this._setupPaymentMethodNonceInputField(),this._setupViews(),void this._createBusSubscribers())},r.prototype._isSupportedOption=function(t,e){for(var n=e.length,i=!1,r=0;n>r;r++)t.toLowerCase()===e[r].toLowerCase()&&(i=!0);return i},r.prototype._isHermesSupportedCurrency=function(){return this._isSupportedOption(this._clientOptions.currency,d.ARIES_SUPPORTED_CURRENCIES)},r.prototype._isHermesSupportedCountries=function(){return this._isSupportedOption(m(this._clientOptions.locale).split("_")[1],d.ARIES_SUPPORTED_COUNTRIES)},r.prototype._isValidAmount=function(){var t=parseFloat(this._clientOptions.amount);return"number"==typeof t&&!isNaN(t)&&t>=0},r.prototype._isMisconfiguredUnvettedMerchant=function(){return this._clientToken.paypal.unvettedMerchant&&(!this._isHermesCapable()||!this._clientToken.paypal.payeeEmail)},r.prototype._isBrowserSecure=function(){return a.isBrowserHttps()||p.isPopupSupported()||this._clientToken.paypal.allowHttp},r.prototype._overrideClientTokenProperties=function(){this._clientOptions.displayName&&(this._clientToken.paypal.displayName=this._clientOptions.displayName)},r.prototype._setupDomElements=function(){this.insertUI&&(this.container=a.normalizeElement(this.container))},r.prototype._setupPaymentMethodNonceInputField=function(){if(this.insertUI){var t=this.paymentMethodNonceInputField;a.isFunction(t)||(t=void 0!==t?a.normalizeElement(t):this._createPaymentMethodNonceInputField(),this.paymentMethodNonceInputField=t)}},r.prototype._setupViews=function(){var t=this._clientToken.paypal.assetsUrl;this.insertUI&&(this.loggedInView=new u({container:this.container,assetsUrl:t}),this.loggedOutView=new c({assetsUrl:t,container:this.container,isCheckout:this._isHermesCapable(),locale:this._clientOptions.locale,merchantId:"merchantId"}),a.addEventListener(this.loggedOutView.container,"click",a.bind(this._handleContainerClick,this)),a.addEventListener(this.loggedInView.logoutNode,"click",a.bind(this._handleLogout,this))) +},r.prototype._createBusSubscribers=function(){s.subscribe("getClientToken",a.bind(this._handleGetClientToken,this)),s.subscribe("getClientOptions",a.bind(this._handleGetClientOptions,this)),s.subscribe("closePayPalModal",a.bind(this._handleCloseMessage,this)),s.subscribe("receivePayPalData",a.bind(this._handleSuccessfulAuthentication,this))},r.prototype._createPaymentMethodNonceInputField=function(){var t=document.createElement("input");return t.name="payment_method_nonce",t.type="hidden",this.container.appendChild(t)},r.prototype._createFrame=function(){var t,e=document.createElement("iframe");return this._isHermesCapable()?(t=d.ARIES_FRAME_NAME,e.style.background="#FFFFFF"):t=d.FRAME_NAME,e.src=this.getViewerUrl(),e.id=t,e.name=t,e.allowTransparency=!0,e.height="100%",e.width="100%",e.frameBorder=0,e.style.position=p.isMobile()?"absolute":"fixed",e.style.top=0,e.style.left=0,e.style.bottom=0,e.style.zIndex=20001,e.style.padding=0,e.style.margin=0,e.style.border=0,e.style.outline="none",e},r.prototype._removeFrame=function(t){t=t||document.body,this.frame&&t.contains(this.frame)&&(t.removeChild(this.frame),this._unlockMerchantWindowSize())},r.prototype._insertFrame=function(){this.insertFrameFunction?this.insertFrameFunction(this.getViewerUrl()):(this.frame=this._createFrame(),document.body.appendChild(this.frame)),this._lockMerchantWindowSize()},r.prototype._handleContainerClick=function(t){function e(t){return t.className.match(/paypal-button(?!-widget)/)||"braintree-paypal-button"===t.id}var n=t.target||t.srcElement;(e(n)||e(n.parentNode))&&(t.preventDefault?t.preventDefault():t.returnValue=!1,this._open())},r.prototype._setMerchantPageDefaultStyles=function(){this.merchantPageDefaultStyles=i()},r.prototype._open=function(){this._isHermesCapable()&&this._addCorrelationIdToClientToken(),p.isPopupSupported()?this._openPopup():this._openModal()},r.prototype._close=function(){p.isPopupSupported()?this._closePopup():this._closeModal()},r.prototype._openModal=function(){this._removeFrame(),this._insertFrame()},r.prototype._isHermesCapable=function(){return!!this._clientOptions.singleUse&&!!this._clientOptions.amount&&!!this._clientOptions.currency},r.prototype._openPopup=function(){var t,e,n,i=[],r=window.outerWidth||document.documentElement.clientWidth,o=window.outerHeight||document.documentElement.clientHeight,s="undefined"==typeof window.screenY?window.screenTop:window.screenY,a="undefined"==typeof window.screenX?window.screenLeft:window.screenX;this._isHermesCapable()?(t=d.ARIES_POPUP_NAME,n=d.ARIES_POPUP_HEIGHT,e=d.ARIES_POPUP_WIDTH):(t=d.POPUP_NAME,n=d.POPUP_HEIGHT,e=d.POPUP_WIDTH);var u=(r-e)/2+a,c=(o-n)/2+s;return i.push("height="+n),i.push("width="+e),i.push("top="+c),i.push("left="+u),i.push(d.POPUP_OPTIONS),this.popup=window.open(this.getViewerUrl(),t,i.join(",")),p.isOverlaySupported()&&(this.overlayView=new l(this.popup,this._clientToken.paypal.assetsUrl),this.overlayView.render()),this.popup.focus(),this.popup},r.prototype._addCorrelationIdToClientToken=function(){this._clientToken.correlationId=f.generateUid()},r.prototype._createProxyFrame=function(){var t=document.createElement("iframe");return t.src=this.getProxyUrl(),t.id=d.BRIDGE_FRAME_NAME,t.name=d.BRIDGE_FRAME_NAME,t.allowTransparency=!0,t.height=0,t.width=0,t.frameBorder=0,t.style.position="static",t.style.padding=0,t.style.margin=0,t.style.border=0,t.style.outline="none",t},r.prototype._insertProxyFrame=function(){this.proxyFrame=this._createProxyFrame(),document.body.appendChild(this.proxyFrame)},r.prototype._closeModal=function(){this._removeFrame()},r.prototype._closePopup=function(){this.popup&&(this.popup.close(),this.popup=null),this.overlayView&&p.isOverlaySupported()&&this.overlayView.remove()},r.prototype._clientTokenData=function(){return{analyticsUrl:this._clientToken.analytics?this._clientToken.analytics.url:void 0,authorizationFingerprint:this._clientToken.authorizationFingerprint,clientApiUrl:this._clientToken.clientApiUrl,displayName:this._clientToken.paypal.displayName,paypalBaseUrl:this._clientToken.paypal.assetsUrl,paypalClientId:this._clientToken.paypal.clientId,paypalPrivacyUrl:this._clientToken.paypal.privacyUrl,paypalUserAgreementUrl:this._clientToken.paypal.userAgreementUrl,unvettedMerchant:this._clientToken.paypal.unvettedMerchant,payeeEmail:this._clientToken.paypal.payeeEmail,correlationId:this._clientToken.correlationId,offline:this._clientOptions.offline||this._clientToken.paypal.environmentNoNetwork,sdkVersion:this._clientToken.sdkVersion,merchantAppId:this._clientToken.merchantAppId}},r.prototype._handleGetClientToken=function(t){t(this._clientTokenData())},r.prototype._clientOptionsData=function(){return{locale:this._clientOptions.locale||"en_us",onetime:this._clientOptions.singleUse||!1,integration:this._clientOptions.integration||"paypal",enableShippingAddress:this._clientOptions.enableShippingAddress||!1,enableBillingAddress:this._clientOptions.enableBillingAddress||!1,enableHermes:this._isHermesCapable(),amount:this._clientOptions.amount||null,currency:this._clientOptions.currency||null,shippingAddressOverride:this._clientOptions.shippingAddressOverride||null}},r.prototype._handleGetClientOptions=function(t){t(this._clientOptionsData())},r.prototype._handleSuccessfulAuthentication=function(t){this._close(),t.type=d.NONCE_TYPE,a.isFunction(this.paymentMethodNonceInputField)?this.paymentMethodNonceInputField(t.nonce):(this._showLoggedInContent(t.details.email),this._setNonceInputValue(t.nonce)),a.isFunction(this.onSuccess)&&this.onSuccess(t)},r.prototype._lockMerchantWindowSize=function(){this._setMerchantPageDefaultStyles(),document.documentElement.style.height="100%",document.documentElement.style.overflow="hidden",document.body.style.height="100%",document.body.style.overflow="hidden"},r.prototype._unlockMerchantWindowSize=function(){this.merchantPageDefaultStyles&&(document.documentElement.style.height=this.merchantPageDefaultStyles.html.styles.height,document.documentElement.style.overflow=this.merchantPageDefaultStyles.html.styles.overflow,document.body.style.height=this.merchantPageDefaultStyles.body.styles.height,document.body.style.overflow=this.merchantPageDefaultStyles.body.styles.overflow)},r.prototype._handleCloseMessage=function(){this._removeFrame()},r.prototype._showLoggedInContent=function(t){this.loggedOutView.hide(),h.setTextContent(this.loggedInView.emailNode,t),this.loggedInView.show()},r.prototype._handleLogout=function(t){t.preventDefault?t.preventDefault():t.returnValue=!1,this.loggedInView.hide(),this.loggedOutView.show(),this._setNonceInputValue(""),a.isFunction(this.onCancelled)&&this.onCancelled()},r.prototype._setNonceInputValue=function(t){this.paymentMethodNonceInputField.value=t},e.exports=r},{"../shared/constants":162,"../shared/get-locale":164,"../shared/util/browser":169,"../shared/util/dom":170,"../shared/util/util":171,"./logged-in-view":159,"./logged-out-view":160,"./overlay-view":161,"braintree-api":127,"braintree-bus":148,"braintree-utilities":157}],159:[function(t,e){function n(t){this.options=t,this.container=this.createViewContainer(),this.createPayPalName(),this.emailNode=this.createEmailNode(),this.logoutNode=this.createLogoutNode()}var i=t("../shared/constants");n.prototype.createViewContainer=function(){var t=document.createElement("div");t.id="braintree-paypal-loggedin";var e=["display: none","max-width: 500px","overflow: hidden","padding: 16px","background-image: url("+this.options.assetsUrl+"/pwpp/"+i.VERSION+"/images/paypal-small.png)","background-image: url("+this.options.assetsUrl+"/pwpp/"+i.VERSION+"/images/paypal-small.svg), none","background-position: 20px 50%","background-repeat: no-repeat","background-size: 13px 15px","border-top: 1px solid #d1d4d6","border-bottom: 1px solid #d1d4d6"].join(";");return t.style.cssText=e,this.options.container.appendChild(t),t},n.prototype.createPayPalName=function(){var t=document.createElement("span");t.id="bt-pp-name",t.innerHTML="PayPal";var e=["color: #283036","font-size: 13px","font-weight: 800",'font-family: "Helvetica Neue", Helvetica, Arial, sans-serif',"margin-left: 36px","-webkit-font-smoothing: antialiased","-moz-font-smoothing: antialiased","-ms-font-smoothing: antialiased","font-smoothing: antialiased"].join(";");return t.style.cssText=e,this.container.appendChild(t)},n.prototype.createEmailNode=function(){var t=document.createElement("span");t.id="bt-pp-email";var e=["color: #6e787f","font-size: 13px",'font-family: "Helvetica Neue", Helvetica, Arial, sans-serif',"margin-left: 5px","-webkit-font-smoothing: antialiased","-moz-font-smoothing: antialiased","-ms-font-smoothing: antialiased","font-smoothing: antialiased"].join(";");return t.style.cssText=e,this.container.appendChild(t)},n.prototype.createLogoutNode=function(){var t=document.createElement("button");t.id="bt-pp-cancel",t.innerHTML="Cancel";var e=["color: #3d95ce","font-size: 11px",'font-family: "Helvetica Neue", Helvetica, Arial, sans-serif',"line-height: 20px","margin: 0 0 0 25px","padding: 0","background-color: transparent","border: 0","cursor: pointer","text-decoration: underline","float: right","-webkit-font-smoothing: antialiased","-moz-font-smoothing: antialiased","-ms-font-smoothing: antialiased","font-smoothing: antialiased"].join(";");return t.style.cssText=e,this.container.appendChild(t)},n.prototype.show=function(){this.container.style.display="block"},n.prototype.hide=function(){this.container.style.display="none"},e.exports=n},{"../shared/constants":162}],160:[function(t,e){function n(t){this.options=t,this.assetsUrl=this.options.assetsUrl,this.container=this.createViewContainer(),this.options.isCheckout?this.createCheckoutWithPayPalButton():this.createPayWithPayPalButton()}var i=(t("braintree-utilities"),t("../shared/constants")),r=t("../shared/get-locale");n.prototype.createViewContainer=function(){var t=document.createElement("div");return t.id="braintree-paypal-loggedout",this.options.container.appendChild(t),t},n.prototype.createPayWithPayPalButton=function(){var t=document.createElement("a");t.id="braintree-paypal-button",t.href="#";var e=["display: block","width: 115px","height: 44px","overflow: hidden"].join(";");t.style.cssText=e;var n=new Image;n.src=this.assetsUrl+"/pwpp/"+i.VERSION+"/images/pay-with-paypal.png",n.setAttribute("alt","Pay with PayPal");var r=["max-width: 100%","display: block","width: 100%","height: 100%","outline: none","border: 0"].join(";");n.style.cssText=r,t.appendChild(n),this.container.appendChild(t)},n.prototype.createCheckoutWithPayPalButton=function(){var t=document.createElement("script");t.src="//www.paypalobjects.com/api/button.js",t.async=!0,t.setAttribute("data-merchant",this.options.merchantId),t.setAttribute("data-button","checkout"),t.setAttribute("data-type","button"),t.setAttribute("data-width","150"),t.setAttribute("data-height","44"),t.setAttribute("data-lc",r(this.options.locale)),this.container.appendChild(t)},n.prototype.show=function(){this.container.style.display="block"},n.prototype.hide=function(){this.container.style.display="none"},e.exports=n},{"../shared/constants":162,"../shared/get-locale":164,"braintree-utilities":157}],161:[function(t,e){function n(t,e){this.popup=t,this.assetsUrl=e,this.spriteSrc=this.assetsUrl+"/pwpp/"+r.VERSION+"/images/pp_overlay_sprite.png",this._create(),this._setupEvents(),this._pollForPopup()}var i=t("braintree-utilities"),r=t("../shared/constants");n.prototype.render=function(){document.body.contains(this.el)||document.body.appendChild(this.el)},n.prototype.remove=function(){document.body.contains(this.el)&&document.body.removeChild(this.el)},n.prototype._create=function(){this.el=document.createElement("div"),this.el.className="bt-overlay",this._setStyles(this.el,["z-index: 20001","position: fixed","top: 0","left: 0","height: 100%","width: 100%","text-align: center","background: #000","background: rgba(0,0,0,0.7)",'-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=52)"']),this.el.appendChild(this._createCloseIcon()),this.el.appendChild(this._createMessage())},n.prototype._createCloseIcon=function(){return this.closeIcon=document.createElement("div"),this.closeIcon.className="bt-close-overlay",this._setStyles(this.closeIcon,["position: absolute","top: 10px","right: 10px","cursor: pointer","background: url("+this.spriteSrc+") no-repeat 0 -67px","height: 14px","width: 14px"]),this.closeIcon},n.prototype._createMessage=function(){var t=document.createElement("div");return this._setStyles(t,["position: relative","top: 50%","max-width: 350px",'font-family: "HelveticaNeue", "HelveticaNeue-Light", "Helvetica Neue Light", helvetica, arial, sans-serif',"font-size: 14px","line-height: 20px","margin: -70px auto 0"]),t.appendChild(this._createLogo()),t.appendChild(this._createExplanation()),t.appendChild(this._createFocusLink()),t},n.prototype._createExplanation=function(){var t=document.createElement("div");return this._setStyles(t,["color: #FFF","margin-bottom: 20px"]),t.innerHTML="Don't see the secure PayPal browser? We'll help you re-launch the window to complete your purchase.",t},n.prototype._createLogo=function(){var t=document.createElement("div");return this._setStyles(t,["background: url("+this.spriteSrc+") no-repeat 0 0","width: 94px","height: 25px","margin: 0 auto 26px auto"]),t},n.prototype._createFocusLink=function(){return this.focusLink=document.createElement("a"),this._setStyles(this.focusLink,["color: #009be1","cursor: pointer"]),this.focusLink.innerHTML="Continue",this.focusLink},n.prototype._setStyles=function(t,e){var n=e.join(";");t.style.cssText=n},n.prototype._setupEvents=function(){i.addEventListener(this.closeIcon,"click",i.bind(this._handleClose,this)),i.addEventListener(this.focusLink,"click",i.bind(this._handleFocus,this))},n.prototype._handleClose=function(t){t.preventDefault(),this.remove(),this.popup.close()},n.prototype._handleFocus=function(t){t.preventDefault(),this.popup.focus()},n.prototype._pollForPopup=function(){var t=setInterval(i.bind(function(){this.popup&&this.popup.closed&&(clearInterval(t),this.remove())},this),100)},e.exports=n},{"../shared/constants":162,"braintree-utilities":157}],162:[function(t,e,n){var i="1.4.0";n.VERSION=i,n.POPUP_NAME="braintree_paypal_popup",n.ARIES_POPUP_NAME="PPFrameRedirect",n.FRAME_NAME="braintree-paypal-frame",n.ARIES_FRAME_NAME="PPFrameRedirect",n.POPUP_PATH="/pwpp/"+i+"/html/braintree-frame.html",n.POPUP_OPTIONS="resizable,scrollbars",n.POPUP_HEIGHT=470,n.POPUP_WIDTH=410,n.ARIES_POPUP_HEIGHT=535,n.ARIES_POPUP_WIDTH=450,n.BRIDGE_FRAME_NAME="bt-proxy-frame",n.ARIES_SUPPORTED_CURRENCIES=["USD","GBP","EUR","AUD","CAD","DKK","NOK","PLN","SEK","CHF","TRY"],n.ARIES_SUPPORTED_COUNTRIES=["US","GB","AU","CA","ES","FR","DE","IT","NL","NO","PL","CH","TR","DK","BE","AT"],n.NONCE_TYPE="PayPalAccount",n.ILLEGAL_XHR_ERROR="Illegal XHR request attempted"},{}],163:[function(t,e){"use strict";e.exports={us:"en_us",gb:"en_uk",uk:"en_uk",de:"de_de",fr:"fr_fr",it:"it_it",es:"es_es",ca:"en_ca",au:"en_au",at:"de_de",be:"en_us",ch:"de_de",dk:"da_dk",nl:"nl_nl",no:"no_no",pl:"pl_pl",se:"sv_se",tr:"tr_tr",bg:"en_us",cy:"en_us",hr:"en_us",is:"en_us",kh:"en_us",mt:"en_us",my:"en_us",ru:"ru_ru"}},{}],164:[function(t,e){"use strict";function n(t){return-1!==t.indexOf("_")&&5===t.length}function i(t){var e;for(var n in o)o.hasOwnProperty(n)&&(n===t?e=o[n]:o[n]===t&&(e=o[n]));return e}function r(t){var e;if(t=t?t.toLowerCase():"us",t=t.replace(/-/g,"_"),e=n(t)?t:i(t)){var r=e.split("_");return[r[0],r[1].toUpperCase()].join("_")}return"en_US"}var o=t("../shared/data/country-code-lookup");e.exports=r},{"../shared/data/country-code-lookup":163}],165:[function(t,e){function n(){return p.matchUserAgent("Android")&&!i()}function i(){return p.matchUserAgent("Chrome")||p.matchUserAgent("CriOS")}function r(){return p.matchUserAgent("Firefox")}function o(){return p.matchUserAgent("Trident")||p.matchUserAgent("MSIE")}function s(){return p.matchUserAgent("Opera")||p.matchUserAgent("OPR")}function a(){return s()&&"[object OperaMini]"===d.call(window.operamini)}function u(){return p.matchUserAgent("Safari")&&!i()&&!n()}function c(){return h.isIos()&&!i()&&!u()}function l(){var t=/Version\/[\w\.]+ Chrome\/[\w\.]+ Mobile/;return h.isAndroid()&&p.matchUserAgent(t)}var p=t("./useragent"),h=t("./platform"),d=Object.prototype.toString;e.exports={isAndroid:n,isChrome:i,isFirefox:r,isIE:o,isOpera:s,isOperaMini:a,isSafari:u,isIosWebView:c,isAndroidWebView:l}},{"./platform":167,"./useragent":168}],166:[function(t,e){function n(){return!i()&&(s.isAndroid()||s.isIpod()||s.isIphone()||o.matchUserAgent("IEMobile"))}function i(){return s.isIpad()||s.isAndroid()&&!o.matchUserAgent("Mobile")}function r(){return!n()&&!i()}var o=t("./useragent"),s=t("./platform");e.exports={isMobile:n,isTablet:i,isDesktop:r}},{"./platform":167,"./useragent":168}],167:[function(t,e){function n(){return a.matchUserAgent("Android")}function i(){return a.matchUserAgent("iPad")}function r(){return a.matchUserAgent("iPod")}function o(){return a.matchUserAgent("iPhone")&&!r()}function s(){return i()||r()||o()}var a=t("./useragent");e.exports={isAndroid:n,isIpad:i,isIpod:r,isIphone:o,isIos:s}},{"./useragent":168}],168:[function(t,e,n){function i(){return o}function r(t){var e=n.getNativeUserAgent(),i=e.match(t);return i?!0:!1}var o=window.navigator.userAgent;n.getNativeUserAgent=i,n.matchUserAgent=r},{}],169:[function(t,e){function n(){return i()&&window.outerWidth<600}function i(){return f.test(d)}function r(){return!!window.postMessage}function o(){if(c.isOperaMini())return!1;if(l.isDesktop())return!0;if(l.isMobile()||l.isTablet()){if(c.isIE())return!1;if(p.isAndroid())return c.isAndroidWebView()?!1:!0;if(p.isIos())return c.isChrome()||c.isSafari()&&h.matchUserAgent(/OS (?:8_1|8_0|8)(?!_\d)/i)||c.isIosWebView()?!1:!0}return!1}function s(){if(c.isIE()&&h.matchUserAgent(/MSIE 8\.0/))return!1;try{return window.self===window.top}catch(t){return!1}}function a(){return c.isIE()&&!u()}function u(){var t=null,e="";try{new ActiveXObject("")}catch(n){e=n.name}try{t=!!new ActiveXObject("htmlfile")}catch(n){t=!1}return t="ReferenceError"!==e&&t===!1?!1:!0,!t}var c=t("../useragent/browser"),l=t("../useragent/device"),p=t("../useragent/platform"),h=t("../useragent/useragent"),d=window.navigator.userAgent,f=/[Mm]obi|tablet|iOS|Android|IEMobile|Windows\sPhone/;e.exports={isMobile:n,isMobileDevice:i,detectedPostMessage:r,isPopupSupported:o,isOverlaySupported:s,isProxyFrameRequired:a}},{"../useragent/browser":165,"../useragent/device":166,"../useragent/platform":167,"../useragent/useragent":168}],170:[function(t,e){function n(t,e){var n="innerText";document&&document.body&&"textContent"in document.body&&(n="textContent"),t[n]=e}e.exports={setTextContent:n}},{}],171:[function(t,e){function n(){for(var t="",e=0;32>e;e++){var n=Math.floor(16*Math.random());t+=n.toString(16)}return t}function i(t){return/^(true|1)$/i.test(t)}function r(t){return t.replace(/&/g,"&").replace(//g,">").replace(/\"/g,""").replace(/\'/g,"'")}function o(t){var e=t.indexOf("?"),n={};if(e>=0&&(t=t.substr(e+1)),0!==t.length){for(var i=t.split("&"),r=0,o=i.length;o>r;r++){var s=i[r],a=s.indexOf("="),u=s.substr(0,a),c=s.substr(a+1),l=decodeURIComponent(c);l=l.replace(//g,">"),"false"===l&&(l=!1),(void 0===l||"true"===l)&&(l=!0),n[u]=l}return n}}function s(t){return t&&"[object Function]"===Object.prototype.toString.call(t)}function a(t){t.preventDefault?t.preventDefault():t.returnValue=!1}var u="function"==typeof String.prototype.trim?function(t){return t.trim()}:function(t){return t.replace(/^\s+|\s+$/,"")},c="function"==typeof window.btoa?function(t){return window.btoa(t)}:function(t){for(var e,n,i,r,o,s,a,u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",c="",l=0;l>2,o=(3&e)<<4|n>>4,s=(15&n)<<2|i>>6,a=63&i,isNaN(n)?s=a=64:isNaN(i)&&(a=64),c=c+u.charAt(r)+u.charAt(o)+u.charAt(s)+u.charAt(a);return c};e.exports={trim:u,btoa:c,generateUid:n,castToBoolean:i,htmlEscape:r,parseUrlParams:o,isFunction:s,preventDefault:a}},{}],172:[function(t,e){"use strict";function n(t){this.host=t||window,this.handlers=[],i.addEventListener(this.host,"message",i.bind(this.receive,this))}var i=t("braintree-utilities");n.prototype.receive=function(t){var e,i,r,o;try{r=JSON.parse(t.data)}catch(s){return}for(o=r.type,i=new n.Message(this,t.source,r.data),e=0;e=0;n--)if(this.handlers[n].type===t&&this.handlers[n].handler===e)return this.handlers.splice(n,1)},n.Message=function(t,e,n){this.bus=t,this.source=e,this.content=n},n.Message.prototype.reply=function(t,e){this.bus.send(this.source,t,e)},e.exports=n},{"braintree-utilities":182}],173:[function(t,e){"use strict";function n(t,e){this.bus=t,this.target=e,this.handlers=[],this.bus.register("publish",i.bind(this._handleMessage,this))}var i=t("braintree-utilities");n.prototype._handleMessage=function(t){var e,n=t.content,i=this.handlers[n.channel];if("undefined"!=typeof i)for(e=0;er;r++)e(i[r])},e.exports=n},{}],206:[function(t,e){"use strict";function n(t,e){var n=window.getComputedStyle?getComputedStyle(t):t.currentStyle;return n[e]}function i(){return{html:{height:s.style.height||"",overflow:n(s,"overflow"),position:n(s,"position")},body:{height:a.style.height||"",overflow:n(a,"overflow")}}}function r(){var t=/Android|iPhone|iPod|iPad/i.test(window.navigator.userAgent);return t}function o(t){var e,n,i;this.encodedClientToken=t.clientToken,this.paypalOptions=t.paypal,this.container=null,this.merchantFormManager=null,this.root=t.root,this.configurationRequests=[],this.braintreeApiClient=u.configure({clientToken:t.clientToken,integration:"dropin"}),this.paymentMethodNonceReceivedCallback=t.paymentMethodNonceReceived,this.clientToken=u.parseClientToken(t.clientToken),this.bus=new l.MessageBus(this.root),this.rpcServer=new l.RPCServer(this.bus),this.apiProxyServer=new h(this.braintreeApiClient),this.apiProxyServer.attach(this.rpcServer),e=t.inlineFramePath||this.clientToken.assetsUrl+"/dropin/"+b+"/inline-frame.html",n=t.modalFramePath||this.clientToken.assetsUrl+"/dropin/"+b+"/modal-frame.html",s=document.documentElement,a=document.body,this.frames={inline:this._createFrame(e,y.INLINE_FRAME_NAME),modal:this._createFrame(n,y.MODAL_FRAME_NAME)},this.container=p.normalizeElement(t.container,"Unable to find valid container."),i=p.normalizeElement(t.form||this._findClosest(this.container,"form")),this.merchantFormManager=new d({form:i,frames:this.frames,onSubmit:this.paymentMethodNonceReceivedCallback,apiClient:this.braintreeApiClient}).initialize(),this.clientToken.paypalEnabled&&this.clientToken.paypal&&(p.isBrowserHttps()||this.clientToken.paypal.allowHttp)&&this._configurePayPal(),this.braintreeApiClient.sendAnalyticsEvents("dropin.web.initialized")}var s,a,u=t("braintree-api"),c=t("braintree-bus"),l=t("braintree-rpc"),p=t("braintree-utilities"),h=t("./api-proxy-server"),d=t("./merchant-form-manager"),f=t("./frame-container"),m=t("../shared/paypal-service"),y=t("../shared/constants"),g=t("braintree-paypal/src/shared/util/browser"),b="1.7.0";o.prototype.initialize=function(){var t,e=this;this._initializeModal(),c.emit(c.events.ASYNC_DEPENDENCY_INITIALIZING),this.container.appendChild(this.frames.inline.element),a.appendChild(this.frames.modal.element),this.rpcServer.define("receiveSharedCustomerIdentifier",function(n){for(e.braintreeApiClient.attrs.sharedCustomerIdentifier=n,e.braintreeApiClient.attrs.sharedCustomerIdentifierType="browser_session_cookie_store",t=0;t0&&n(r,e);return e}function i(t){try{t.attributes.removeNamedItem("name")}catch(e){}}function r(t){n(t)}function o(t){return t.nodeType===s&&t.attributes["data-braintree-name"]}var s=t.Node?t.Node.ELEMENT_NODE:1;e.exports={extractValues:n,scrubAllAttributes:r,scrubAttributes:i,isBraintreeNode:o}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],213:[function(t,e){"use strict";function n(t,e,n,i){this.client=t,this.htmlForm=e,this.isCreditCardForm=i===!1?!1:!0,this.paymentMethodNonceInput=n,this.model=new s,this.setEvents()}var i=t("braintree-utilities"),r=t("./fields"),o=t("braintree-bus"),s=t("./models/payment-method-model"),a={message:"Unable to process payments at this time",type:"IMMEDIATE"};n.prototype.setEvents=function(){this.onSubmitHandler=i.bind(this.handleSubmit,this),this.onExternalNonceReceived=i.bind(this.onExternalNonceReceived,this),this.clearExternalNonce=i.bind(this.clearExternalNonce,this),i.addEventListener(this.htmlForm,"submit",this.onSubmitHandler),o.on(o.events.PAYMENT_METHOD_GENERATED,this.onExternalNonceReceived),o.on(o.events.PAYMENT_METHOD_CANCELLED,this.clearExternalNonce)},n.prototype.handleSubmit=function(t){var e;return t.preventDefault?t.preventDefault():t.returnValue=!1,this.isCreditCardForm?(e=this.model.get("type"),e&&"CreditCard"!==e?(r.scrubAllAttributes(this.htmlForm),void this.onNonceReceived(null,this.model.attributes)):void this.client.tokenizeCard(r.extractValues(this.htmlForm),i.bind(function(t,e,n){t?this.onNonceReceived(a,null):(this.model.set({nonce:e,type:n.type,details:n.details}),this.onNonceReceived(null,this.model.attributes))},this))):void this.onNonceReceived(null,this.model.attributes)},n.prototype.writeNonceToDOM=function(){this.paymentMethodNonceInput.value=this.model.get("nonce")},n.prototype.onExternalNonceReceived=function(t){this.model.set(t),this.writeNonceToDOM()},n.prototype.clearExternalNonce=function(){this.model.reset()},n.prototype.onNonceReceived=function(t){var e=this.htmlForm;return t?void o.emit(o.events.ERROR,a):(i.removeEventListener(e,"submit",this.onSubmitHandler),this.writeNonceToDOM(),void(e.submit&&("function"==typeof e.submit||e.submit.call)?e.submit():setTimeout(function(){e.querySelector('[type="submit"]').click()},1)))},e.exports=n},{"./fields":212,"./models/payment-method-model":215,"braintree-bus":218,"braintree-utilities":225}],214:[function(t,e){"use strict";e.exports=function(t){var e;if("object"==typeof t)return t;e="payment_method_nonce","string"==typeof t&&(e=t);var n=document.createElement("input");return n.name=e,n.type="hidden",n}},{}],215:[function(t,e){"use strict";function n(){this.reset()}n.prototype.get=function(t){return this.attributes[t]},n.prototype.set=function(t){this.attributes=t||{}},n.prototype.reset=function(){this.attributes={}},e.exports=n},{}],216:[function(t,e){"use strict";e.exports=function(t){for(var e=t.getElementsByTagName("*"),n={},i=0;i= 1.0.0pre", "< 2"] - spec.add_dependency "braintree" + spec.add_dependency "braintree", "~> 2.46" spec.add_development_dependency "bundler", "~> 1.10" spec.add_development_dependency "rake", "~> 10.0" From 005f70b64990a6d1c8a54ba1540bfaf4c482207a Mon Sep 17 00:00:00 2001 From: Allie Larson Date: Thu, 16 Jul 2015 17:24:28 -0400 Subject: [PATCH 012/163] get client token and dropin ui in spree/admin --- .../admin_payment_add_braintree_dropin.rb | 4 +- .../spree/backend/solidus_braintree.js | 44 ++++++++++++++----- 2 files changed, 35 insertions(+), 13 deletions(-) diff --git a/app/overrides/admin_payment_add_braintree_dropin.rb b/app/overrides/admin_payment_add_braintree_dropin.rb index 677ec090..f7d787e6 100644 --- a/app/overrides/admin_payment_add_braintree_dropin.rb +++ b/app/overrides/admin_payment_add_braintree_dropin.rb @@ -1,6 +1,6 @@ Deface::Override.new( virtual_path: "spree/admin/payments/source_forms/_gateway", name: "admin_payment_add_braintree_dropin", - insert_bottom: "[data-id=credit-card]", - text: %Q{<%= javascript_include_tag "spree/backend/solidus_braintree", "data-turbolinks-track" => true, "crossorigin" => "anonymous" %>
} + insert_bottom: "[data-hook=card_name]", + text: %Q{<%= javascript_include_tag "spree/backend/solidus_braintree", "data-turbolinks-track" => true, "crossorigin" => "anonymous" %>
} ) diff --git a/lib/assets/javascripts/spree/backend/solidus_braintree.js b/lib/assets/javascripts/spree/backend/solidus_braintree.js index 140fe28e..2f5db18c 100644 --- a/lib/assets/javascripts/spree/backend/solidus_braintree.js +++ b/lib/assets/javascripts/spree/backend/solidus_braintree.js @@ -1,14 +1,36 @@ //= require "vendor/braintree-2.9.0" -Braintree.setup("", "dropin", { - container: "braintree-dropin", - form: "new_payment", - onReady: function() { - return console.log("braintree dropin is ready"); - }, - onPaymentMethodReceived: (function(_this) { - return function(obj) { - return console.log(obj.nonce); - }; - })(this) + var getClientToken = function(onSuccess){ + return Spree.ajax({ + url: "/api/payment_client_token", + type: "post", + error: function(serverResponse) { + alert("You done goof'd") + }, + success: function(data) { + onSuccess(data) + } + }); + } + + var attachDropIn = function(data) { + braintree.setup(data.client_token, "dropin", { + container: "braintree-dropin", + form: "new_payment", + onReady: function() { + return console.log("braintree dropin is ready"); + }, + onPaymentMethodReceived: (function(_this) { + return function(obj) { + return console.log(obj.nonce); + }; + })(this) + }); + } +// +// var clientToken = getClientToken().responseText + +$( document ).ready(function(){ + getClientToken(attachDropIn); }); + From 198821fbd799a21aee7c4efae82a80452f15f394 Mon Sep 17 00:00:00 2001 From: Jack Chu Date: Thu, 16 Jul 2015 17:56:40 -0400 Subject: [PATCH 013/163] make dropin success submit the form --- .../admin_payment_add_braintree_dropin.rb | 6 ++++- .../spree/backend/solidus_braintree.js | 22 +++++++++---------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/app/overrides/admin_payment_add_braintree_dropin.rb b/app/overrides/admin_payment_add_braintree_dropin.rb index f7d787e6..a2f80e9f 100644 --- a/app/overrides/admin_payment_add_braintree_dropin.rb +++ b/app/overrides/admin_payment_add_braintree_dropin.rb @@ -2,5 +2,9 @@ virtual_path: "spree/admin/payments/source_forms/_gateway", name: "admin_payment_add_braintree_dropin", insert_bottom: "[data-hook=card_name]", - text: %Q{<%= javascript_include_tag "spree/backend/solidus_braintree", "data-turbolinks-track" => true, "crossorigin" => "anonymous" %>
} + text: %Q{ + <%= javascript_include_tag "spree/backend/solidus_braintree", "data-turbolinks-track" => true, "crossorigin" => "anonymous" %> +
+ + } ) diff --git a/lib/assets/javascripts/spree/backend/solidus_braintree.js b/lib/assets/javascripts/spree/backend/solidus_braintree.js index 2f5db18c..5df9e393 100644 --- a/lib/assets/javascripts/spree/backend/solidus_braintree.js +++ b/lib/assets/javascripts/spree/backend/solidus_braintree.js @@ -5,10 +5,10 @@ url: "/api/payment_client_token", type: "post", error: function(serverResponse) { - alert("You done goof'd") + alert("You done goof'd! Go talk to allie!"); }, success: function(data) { - onSuccess(data) + onSuccess(data); } }); } @@ -20,17 +20,17 @@ onReady: function() { return console.log("braintree dropin is ready"); }, - onPaymentMethodReceived: (function(_this) { - return function(obj) { - return console.log(obj.nonce); - }; - })(this) + onError: function() { + return console.log("braintree f*cked up! Call allie!"); + }, + onPaymentMethodReceived: function(obj) { + $("#payment_method_nonce").val(obj.nonce); + $("#new_payment").submit(); + return; + } }); } -// -// var clientToken = getClientToken().responseText -$( document ).ready(function(){ +$(document).ready(function(){ getClientToken(attachDropIn); }); - From a3972706e73a13c4c4e3c05695b37017c4894ee9 Mon Sep 17 00:00:00 2001 From: Jack Chu Date: Fri, 17 Jul 2015 12:08:14 -0400 Subject: [PATCH 014/163] make options optional on authorize and purchase --- app/models/solidus/gateway/braintree_gateway.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/models/solidus/gateway/braintree_gateway.rb b/app/models/solidus/gateway/braintree_gateway.rb index d9b11247..7411839c 100644 --- a/app/models/solidus/gateway/braintree_gateway.rb +++ b/app/models/solidus/gateway/braintree_gateway.rb @@ -104,12 +104,12 @@ def provider_class self end - def authorize(cents, creditcard, options) + def authorize(cents, creditcard, options = {}) result = braintree_gateway.transaction.sale(transaction_authorize_or_purchase_params(cents, creditcard, options)) handle_result(result) end - def purchase(cents, creditcard, options) + def purchase(cents, creditcard, options = {}) params = transaction_authorize_or_purchase_params(cents, creditcard, options) params[:options][:submit_for_settlement] = true result = braintree_gateway.transaction.sale(params) From 4343db23cec6bdc5f4ec7ce09e4644406e568b53 Mon Sep 17 00:00:00 2001 From: Jack Chu Date: Fri, 17 Jul 2015 12:09:01 -0400 Subject: [PATCH 015/163] rename braintree_spec to braintree_gateway_spec fix settlement_pending spec and turn it back on --- ...succeeds_capture_on_pending_settlement.yml | 296 ++++++++++++++++++ ...tree_spec.rb => braintree_gateway_spec.rb} | 23 +- 2 files changed, 307 insertions(+), 12 deletions(-) create mode 100644 spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/succeeds_capture_on_pending_settlement.yml rename spec/solidus/gateway/{braintree_spec.rb => braintree_gateway_spec.rb} (97%) diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/succeeds_capture_on_pending_settlement.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/succeeds_capture_on_pending_settlement.yml new file mode 100644 index 00000000..272ee6cd --- /dev/null +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/succeeds_capture_on_pending_settlement.yml @@ -0,0 +1,296 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + John + Doe + pasquale_lynch@schmeler.us + + Card Holder + + John + Doe + 10 Lovely Street + Northwest + Company + Herndon + Alabama + USA + 35005 + + fake-paypal-future-nonce + + true + + + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Fri, 17 Jul 2015 16:06:51 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"8eec972106219ec38f4e5b80c495968c"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 559cf213fc070565cf1d6ecdce3043dc + X-Runtime: + - '0.256332' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIABsoqVUAA6RTuXLbMBDt/RUc9iQkWbIUDUi5yKRI7TRpNEtgJSLGZQC0 + SH99QFJXwjQZl+/YA/tIumuVTN7ReWF0kc7zWZqgZoYLfSzSHy/fsk26Kx8o + a3wwCl35kCRU8PJxs9gs18s5JRH0XNRYDTpkEX9UetV9vH0J65M6tcsFJfdq + 7z4I50OmQWH53dSakjui1yVc0FeDlNxgLzKjLOgu0UIWaXANpmTgUYGQpQX/ + 1oDEvew0q589qxVKdHnjKRkdvdfWRuOkwwHaCXfCyosw9TKHEJBnEJLQWSxS + HmEQCtNyMZuvstk6m69f5k/b2dN2NftJya1gqG8s/7/6W8E4f0gkOwiU3F9X + 4iJkDBz356bgHHTnjS10FmQGjJlGhz8dvWFiGclIB/OKuuQre/AVJSO6aONN + f4HGnBt8xhaUlZjHkO7uPTg5HqCRl+dWxkgEnZb9TSk5i1ezUHDErHGyrEOw + fksIeI/B55UDoYNDPMZrnKDrJ5G4t0Id9gpDbfhemqMh41tyq4871O/CGd1b + Cg+aV6aNH+51wmXmJyMdenwy1qGHbyrPnLAh/pP/CDI6yDSovzk/kMC5w3i4 + SZu4/PWX/g0AAP//AwD3/5t8BQQAAA== + http_version: + recorded_at: Fri, 17 Jul 2015 16:06:51 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + body: + encoding: UTF-8 + string: | + + + + + 4002.00 + d5pfsb + 38284741 + Solidus + sale + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Fri, 17 Jul 2015 16:06:52 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"be12fe01fd4433e847595df5b4b3c2cb"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 2c3a1c7b43cc086420aee73e71aa525c + X-Runtime: + - '0.346304' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + AL7YrTZRcx164zV+8zcAAAD//wMAFfIP/pIUAAA= + http_version: + recorded_at: Fri, 17 Jul 2015 16:06:52 GMT +- request: + method: put + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/7zvnqt/submit_for_settlement + body: + encoding: UTF-8 + string: | + + + 4002.00 + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 200 + message: OK + headers: + Date: + - Fri, 17 Jul 2015 16:06:53 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"24e539953d852f47bb3cec705c5e41b6"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - cad160d41c3a2cc7460f5707654372a4 + X-Runtime: + - '0.297681' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + Pw8r81F9izoLolf/AAAA//8DAPjUaR31FwAA + http_version: + recorded_at: Fri, 17 Jul 2015 16:06:54 GMT +recorded_with: VCR 2.9.3 diff --git a/spec/solidus/gateway/braintree_spec.rb b/spec/solidus/gateway/braintree_gateway_spec.rb similarity index 97% rename from spec/solidus/gateway/braintree_spec.rb rename to spec/solidus/gateway/braintree_gateway_spec.rb index b9d90155..006162b4 100644 --- a/spec/solidus/gateway/braintree_spec.rb +++ b/spec/solidus/gateway/braintree_gateway_spec.rb @@ -23,7 +23,7 @@ end let(:card) { payment.source } - before do + before(:all) do @braintree_payment_method = Solidus::Gateway::BraintreeGateway.create!( name: 'Braintree Gateway', environment: 'sandbox', @@ -151,28 +151,27 @@ expect(capture.authorization).to be_present end - it "fails capture with settlement declined" do - card.gateway_customer_profile_id = nil - auth = payment_method.authorize(400100, card, {}) + it "succeeds capture on pending settlement" do + auth = payment_method.authorize(400200, card, {}) expect(auth).to be_success expect(auth.authorization).to be_present - capture = payment_method.capture(400100, auth.authorization, {}) - expect(capture).to_not be_success - expect(capture.message).to eq 'settlement_declined' + capture = payment_method.capture(400200, auth.authorization, {}) + expect(capture).to be_success expect(Spree::CreditCard.count).to eql(1) expect(Spree::CreditCard.first.gateway_payment_profile_id).to be_present end - xit "fails capture on pending settlement" do - auth = payment_method.authorize(400200, card, {}) + it "fails capture with settlement declined" do + card.gateway_customer_profile_id = nil + auth = payment_method.authorize(400100, card, {}) expect(auth).to be_success expect(auth.authorization).to be_present - capture = payment_method.capture(400200, auth.authorization, {}) + capture = payment_method.capture(400100, auth.authorization, {}) expect(capture).to_not be_success - expect(capture.message).to eq 'settlement_pending' + expect(capture.message).to eq 'settlement_declined' expect(Spree::CreditCard.count).to eql(1) expect(Spree::CreditCard.first.gateway_payment_profile_id).to be_present @@ -209,7 +208,7 @@ xit "can be refunded" do payment.capture! refund = payment.credit!(50.00) - expect(refund.amount).to eq -50.00 + expect(refund.amount).to eq(-50.00) expect(refund).to be_completed end From db8023e267aac6053b5f0f84c60f724b8c7b40c9 Mon Sep 17 00:00:00 2001 From: Jack Chu Date: Fri, 17 Jul 2015 16:37:38 -0400 Subject: [PATCH 016/163] add payment_method_nonce to payment_attributes in permitted attributes decorator --- app/models/permitted_attributes_decorator.rb | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 app/models/permitted_attributes_decorator.rb diff --git a/app/models/permitted_attributes_decorator.rb b/app/models/permitted_attributes_decorator.rb new file mode 100644 index 00000000..910ef729 --- /dev/null +++ b/app/models/permitted_attributes_decorator.rb @@ -0,0 +1,7 @@ +module PermittedAttributesDecorator + def payment_attributes + super << :payment_method_nonce + end +end + +Spree::PermittedAttributes.singleton_class.prepend PermittedAttributesDecorator From 8380bb25e1838585bf3fb16bd95eb53cb2bcc07a Mon Sep 17 00:00:00 2001 From: Allie Larson Date: Fri, 17 Jul 2015 17:11:43 -0400 Subject: [PATCH 017/163] Add flag to credit card for vzero support --- .../concerns/payment_braintree_nonce_concern.rb | 5 ----- .../concerns/permitted_attributes_concern.rb | 9 +++++++++ app/models/concerns/v_zero_credit_card_concern.rb | 14 ++++++++++++++ app/models/credit_card_decorator.rb | 1 + app/models/permitted_attributes_decorator.rb | 1 + 5 files changed, 25 insertions(+), 5 deletions(-) create mode 100644 app/models/concerns/permitted_attributes_concern.rb create mode 100644 app/models/concerns/v_zero_credit_card_concern.rb create mode 100644 app/models/credit_card_decorator.rb create mode 100644 app/models/permitted_attributes_decorator.rb diff --git a/app/models/concerns/payment_braintree_nonce_concern.rb b/app/models/concerns/payment_braintree_nonce_concern.rb index 841c3c2e..792d2774 100644 --- a/app/models/concerns/payment_braintree_nonce_concern.rb +++ b/app/models/concerns/payment_braintree_nonce_concern.rb @@ -2,10 +2,5 @@ module PaymentBraintreeNonceConcern extend ActiveSupport::Concern included do attr_accessor :payment_method_nonce - - prepend(InstanceMethods) - end - - module InstanceMethods end end diff --git a/app/models/concerns/permitted_attributes_concern.rb b/app/models/concerns/permitted_attributes_concern.rb new file mode 100644 index 00000000..882031ad --- /dev/null +++ b/app/models/concerns/permitted_attributes_concern.rb @@ -0,0 +1,9 @@ +module PermittedAttributesConcern + def payment_attributes + super << :payment_method_nonce + end + + def source_attributes + super << :v_zero_supported + end +end diff --git a/app/models/concerns/v_zero_credit_card_concern.rb b/app/models/concerns/v_zero_credit_card_concern.rb new file mode 100644 index 00000000..ebd89143 --- /dev/null +++ b/app/models/concerns/v_zero_credit_card_concern.rb @@ -0,0 +1,14 @@ +module VZeroCreditCardConcern + extend ActiveSupport::Concern + included do + attr_accessor :v_zero_supported + + prepend(InstanceMethods) + end + + module InstanceMethods + def require_card_numbers? + super && !self.v_zero_supported + end + end +end diff --git a/app/models/credit_card_decorator.rb b/app/models/credit_card_decorator.rb new file mode 100644 index 00000000..ecca5903 --- /dev/null +++ b/app/models/credit_card_decorator.rb @@ -0,0 +1 @@ +Spree::CreditCard.include SolidusBraintree::VZeroCreditCardConcern diff --git a/app/models/permitted_attributes_decorator.rb b/app/models/permitted_attributes_decorator.rb new file mode 100644 index 00000000..e143a616 --- /dev/null +++ b/app/models/permitted_attributes_decorator.rb @@ -0,0 +1 @@ +Spree::PermittedAttributes.singleton_class.prepend SolidusBraintree::PermittedAttributesConcern From e6d10ae7fcc8819b25688ed9374554170124cf4a Mon Sep 17 00:00:00 2001 From: Jack Chu Date: Mon, 20 Jul 2015 12:01:44 -0400 Subject: [PATCH 018/163] change the v_zero_supported flag into instead, just checking the payment class --- app/models/concerns/permitted_attributes_concern.rb | 6 +----- ...card_concern.rb => skip_require_card_numbers_concern.rb} | 6 ++---- app/models/credit_card_decorator.rb | 2 +- app/models/solidus/gateway/braintree_gateway.rb | 1 + 4 files changed, 5 insertions(+), 10 deletions(-) rename app/models/concerns/{v_zero_credit_card_concern.rb => skip_require_card_numbers_concern.rb} (56%) diff --git a/app/models/concerns/permitted_attributes_concern.rb b/app/models/concerns/permitted_attributes_concern.rb index 882031ad..335cb479 100644 --- a/app/models/concerns/permitted_attributes_concern.rb +++ b/app/models/concerns/permitted_attributes_concern.rb @@ -1,9 +1,5 @@ module PermittedAttributesConcern def payment_attributes - super << :payment_method_nonce - end - - def source_attributes - super << :v_zero_supported + super | [:payment_method_nonce] end end diff --git a/app/models/concerns/v_zero_credit_card_concern.rb b/app/models/concerns/skip_require_card_numbers_concern.rb similarity index 56% rename from app/models/concerns/v_zero_credit_card_concern.rb rename to app/models/concerns/skip_require_card_numbers_concern.rb index ebd89143..3acd4e54 100644 --- a/app/models/concerns/v_zero_credit_card_concern.rb +++ b/app/models/concerns/skip_require_card_numbers_concern.rb @@ -1,14 +1,12 @@ -module VZeroCreditCardConcern +module SkipRequireCardNumbersConcern extend ActiveSupport::Concern included do - attr_accessor :v_zero_supported - prepend(InstanceMethods) end module InstanceMethods def require_card_numbers? - super && !self.v_zero_supported + super && !self.payment_method.kind_of?(Solidus::Gateway::BraintreeGateway) end end end diff --git a/app/models/credit_card_decorator.rb b/app/models/credit_card_decorator.rb index ecca5903..44ca2baa 100644 --- a/app/models/credit_card_decorator.rb +++ b/app/models/credit_card_decorator.rb @@ -1 +1 @@ -Spree::CreditCard.include SolidusBraintree::VZeroCreditCardConcern +Spree::CreditCard.include SolidusBraintree::SkipRequireCardNumbersConcern diff --git a/app/models/solidus/gateway/braintree_gateway.rb b/app/models/solidus/gateway/braintree_gateway.rb index 7411839c..68251f15 100644 --- a/app/models/solidus/gateway/braintree_gateway.rb +++ b/app/models/solidus/gateway/braintree_gateway.rb @@ -20,6 +20,7 @@ class Gateway::BraintreeGateway < ::Spree::Gateway 'Visa' => 'visa', } + # TODO: There's only 2 environments, so we should change this code ENVIRONMENTS = { 'development' => :sandbox, 'qa' => :sandbox, From 053138c68f82949c66329bf7b1d511979b5d7bd8 Mon Sep 17 00:00:00 2001 From: Jack Chu Date: Mon, 20 Jul 2015 12:02:18 -0400 Subject: [PATCH 019/163] nonce should go on payment, not the source attribute load the client token only if the new credit card radio is clicked --- .../admin_payment_add_braintree_dropin.rb | 2 +- .../spree/backend/solidus_braintree.js | 64 ++++++++++--------- 2 files changed, 34 insertions(+), 32 deletions(-) diff --git a/app/overrides/admin_payment_add_braintree_dropin.rb b/app/overrides/admin_payment_add_braintree_dropin.rb index a2f80e9f..a7600e56 100644 --- a/app/overrides/admin_payment_add_braintree_dropin.rb +++ b/app/overrides/admin_payment_add_braintree_dropin.rb @@ -5,6 +5,6 @@ text: %Q{ <%= javascript_include_tag "spree/backend/solidus_braintree", "data-turbolinks-track" => true, "crossorigin" => "anonymous" %>
- + } ) diff --git a/lib/assets/javascripts/spree/backend/solidus_braintree.js b/lib/assets/javascripts/spree/backend/solidus_braintree.js index 5df9e393..f7046a82 100644 --- a/lib/assets/javascripts/spree/backend/solidus_braintree.js +++ b/lib/assets/javascripts/spree/backend/solidus_braintree.js @@ -1,36 +1,38 @@ //= require "vendor/braintree-2.9.0" - var getClientToken = function(onSuccess){ - return Spree.ajax({ - url: "/api/payment_client_token", - type: "post", - error: function(serverResponse) { - alert("You done goof'd! Go talk to allie!"); - }, - success: function(data) { - onSuccess(data); - } - }); - } +var getClientToken = function(onSuccess) { + return Spree.ajax({ + url: "/api/payment_client_token", + type: "post", + error: function(serverResponse) { + alert("You done goof'd! Go talk to allie!"); + }, + success: function(data) { + onSuccess(data); + } + }); +}; - var attachDropIn = function(data) { - braintree.setup(data.client_token, "dropin", { - container: "braintree-dropin", - form: "new_payment", - onReady: function() { - return console.log("braintree dropin is ready"); - }, - onError: function() { - return console.log("braintree f*cked up! Call allie!"); - }, - onPaymentMethodReceived: function(obj) { - $("#payment_method_nonce").val(obj.nonce); - $("#new_payment").submit(); - return; - } - }); - } +var attachDropIn = function(data) { + braintree.setup(data.client_token, "dropin", { + container: "braintree-dropin", + form: "new_payment", + onReady: function() { + return console.log("braintree dropin is ready"); + }, + onError: function() { + return console.log("braintree f*cked up! Call allie!"); + }, + onPaymentMethodReceived: function(obj) { + $("#payment_method_nonce").val(obj.nonce); + $("#new_payment").submit(); + return; + } + }); +}; -$(document).ready(function(){ - getClientToken(attachDropIn); +$(document).ready(function() { + $(".new_payment [name=card][value=new]").click(function() { + getClientToken(attachDropIn); + }); }); From 90b02e51fec9935b89d47ee728b0dc5f3fa4821c Mon Sep 17 00:00:00 2001 From: Jack Chu Date: Mon, 20 Jul 2015 13:36:39 -0400 Subject: [PATCH 020/163] use show_flash helper to display errors --- .../javascripts/spree/backend/solidus_braintree.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/lib/assets/javascripts/spree/backend/solidus_braintree.js b/lib/assets/javascripts/spree/backend/solidus_braintree.js index f7046a82..92dd9172 100644 --- a/lib/assets/javascripts/spree/backend/solidus_braintree.js +++ b/lib/assets/javascripts/spree/backend/solidus_braintree.js @@ -1,11 +1,13 @@ //= require "vendor/braintree-2.9.0" +Spree.routes.payment_client_token_api = Spree.pathFor("api/payment_client_token") + var getClientToken = function(onSuccess) { return Spree.ajax({ - url: "/api/payment_client_token", - type: "post", - error: function(serverResponse) { - alert("You done goof'd! Go talk to allie!"); + url: Spree.routes.payment_client_token_api, + type: "POST", + error: function(xhr, status) { + show_flash("error", xhr.responseJSON.message); }, success: function(data) { onSuccess(data); @@ -20,8 +22,8 @@ var attachDropIn = function(data) { onReady: function() { return console.log("braintree dropin is ready"); }, - onError: function() { - return console.log("braintree f*cked up! Call allie!"); + onError: function(type, message) { + show_flash("error", message); }, onPaymentMethodReceived: function(obj) { $("#payment_method_nonce").val(obj.nonce); From 6c53bbe7b6a9d3d30f4d4770e968df2f55cf45de Mon Sep 17 00:00:00 2001 From: Jack Chu Date: Mon, 20 Jul 2015 14:32:05 -0400 Subject: [PATCH 021/163] add model specs --- spec/models/credit_card_spec.rb | 25 ++++++++++++++++++++++++ spec/models/payment_spec.rb | 9 +++++++++ spec/models/permitted_attributes_spec.rb | 7 +++++++ 3 files changed, 41 insertions(+) create mode 100644 spec/models/credit_card_spec.rb create mode 100644 spec/models/payment_spec.rb create mode 100644 spec/models/permitted_attributes_spec.rb diff --git a/spec/models/credit_card_spec.rb b/spec/models/credit_card_spec.rb new file mode 100644 index 00000000..a43fa20f --- /dev/null +++ b/spec/models/credit_card_spec.rb @@ -0,0 +1,25 @@ +require 'spec_helper' + +describe Spree::CreditCard do + context "payment is of type Solidus::Gateway::BraintreeGateway" do + let(:payment_method) do + Solidus::Gateway::BraintreeGateway.create!( + name: 'Braintree Gateway', + environment: 'sandbox', + active: true + ) + end + let(:credit_card) do + FactoryGirl.create(:credit_card, + payment_method: payment_method, + encrypted_data: nil, + gateway_customer_profile_id: nil, + gateway_payment_profile_id: nil + ) + end + + it "require_card_numbers? returns false" do + expect(credit_card.require_card_numbers?).not_to be + end + end +end diff --git a/spec/models/payment_spec.rb b/spec/models/payment_spec.rb new file mode 100644 index 00000000..ef62929d --- /dev/null +++ b/spec/models/payment_spec.rb @@ -0,0 +1,9 @@ +require 'spec_helper' + +describe Spree::Payment do + it "has a payment_method_nonce accessor" do + payment = Spree::Payment.new + expect { payment.payment_method_nonce = "abc123" }.not_to raise_error + expect(payment.payment_method_nonce).to eq("abc123") + end +end diff --git a/spec/models/permitted_attributes_spec.rb b/spec/models/permitted_attributes_spec.rb new file mode 100644 index 00000000..bfa4163c --- /dev/null +++ b/spec/models/permitted_attributes_spec.rb @@ -0,0 +1,7 @@ +require 'spec_helper' + +describe Spree::PermittedAttributes do + it "payment_attributes includes :payment_method_nonce" do + expect(Spree::PermittedAttributes.payment_attributes).to include(:payment_method_nonce) + end +end From ae8e0bc4f252f9c1a82d69164770e35adedc6c6f Mon Sep 17 00:00:00 2001 From: Jack Chu Date: Mon, 20 Jul 2015 16:06:18 -0400 Subject: [PATCH 022/163] add client token controller spec setting RAILS_ENV has issues, because solidus_gateway actually loads solidus_core, setting the env before that mean you have to manually require the gem dependencies --- .../api/braintree_client_token_controller.rb | 2 - .../solidus/gateway/braintree_gateway.rb | 1 + .../spree/backend/solidus_braintree.js | 5 +- .../POST_create/returns_a_client_token.yml | 79 +++++++++++++++++++ .../json.yml | 79 +++++++++++++++++++ .../POST_create/returns_an_http_success.yml | 79 +++++++++++++++++++ .../braintree_client_token_controller_spec.rb | 35 ++++++++ spec/models/{ => spree}/credit_card_spec.rb | 2 +- spec/models/{ => spree}/payment_spec.rb | 2 +- .../{ => spree}/permitted_attributes_spec.rb | 0 .../solidus/gateway/braintree_gateway_spec.rb | 4 +- spec/spec_helper.rb | 9 ++- 12 files changed, 285 insertions(+), 12 deletions(-) create mode 100644 spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/returns_a_client_token.yml create mode 100644 spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/returns_a_content_type_of_application/json.yml create mode 100644 spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/returns_an_http_success.yml create mode 100644 spec/controllers/spree/api/braintree_client_token_controller_spec.rb rename spec/models/{ => spree}/credit_card_spec.rb (93%) rename spec/models/{ => spree}/payment_spec.rb (85%) rename spec/models/{ => spree}/permitted_attributes_spec.rb (100%) diff --git a/app/controllers/spree/api/braintree_client_token_controller.rb b/app/controllers/spree/api/braintree_client_token_controller.rb index dbf997c2..96ea25ad 100644 --- a/app/controllers/spree/api/braintree_client_token_controller.rb +++ b/app/controllers/spree/api/braintree_client_token_controller.rb @@ -1,8 +1,6 @@ class Spree::Api::BraintreeClientTokenController < Spree::Api::BaseController - def create gateway = Solidus::Gateway::BraintreeGateway.find_by!(active: true, environment: Rails.env) render json: { client_token: gateway.generate_client_token } end - end diff --git a/app/models/solidus/gateway/braintree_gateway.rb b/app/models/solidus/gateway/braintree_gateway.rb index 68251f15..f55e25df 100644 --- a/app/models/solidus/gateway/braintree_gateway.rb +++ b/app/models/solidus/gateway/braintree_gateway.rb @@ -23,6 +23,7 @@ class Gateway::BraintreeGateway < ::Spree::Gateway # TODO: There's only 2 environments, so we should change this code ENVIRONMENTS = { 'development' => :sandbox, + 'test' => :sandbox, 'qa' => :sandbox, 'sandbox' => :sandbox, 'production' => :production, diff --git a/lib/assets/javascripts/spree/backend/solidus_braintree.js b/lib/assets/javascripts/spree/backend/solidus_braintree.js index 92dd9172..522fb7f6 100644 --- a/lib/assets/javascripts/spree/backend/solidus_braintree.js +++ b/lib/assets/javascripts/spree/backend/solidus_braintree.js @@ -20,7 +20,8 @@ var attachDropIn = function(data) { container: "braintree-dropin", form: "new_payment", onReady: function() { - return console.log("braintree dropin is ready"); + console.log("braintree dropin is ready"); + return; }, onError: function(type, message) { show_flash("error", message); @@ -34,7 +35,7 @@ var attachDropIn = function(data) { }; $(document).ready(function() { - $(".new_payment [name=card][value=new]").click(function() { + $("#new_payment [name=card][value=new]").click(function() { getClientToken(attachDropIn); }); }); diff --git a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/returns_a_client_token.yml b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/returns_a_client_token.yml new file mode 100644 index 00000000..71e1f885 --- /dev/null +++ b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/returns_a_client_token.yml @@ -0,0 +1,79 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token + body: + encoding: UTF-8 + string: | + + + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Mon, 20 Jul 2015 19:56:34 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"6c5aa704da18d6b53cb6d2b25555a5f3"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - b7a5e8d69916de4a528a7d9e8b940471 + X-Runtime: + - '0.205921' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAHJSrVUAA7RUy27bMBC85ysMXmtLlGVZD9gJ0qRBe2guSU5tYVDUymZN + kQpJyZbT/HspyXYbIw1QoNVxNTsznF3s7GJb8EENSjMp5shzMBqAoDJjYjlH + D/c3owhdnJ/NKGcgzMjINYjzs8FgVhNewfkT2reixBsiUpmVVGxHjK3cWAZQ + pWLCoARNoyiPKSYQpN6EBFEEXhyS8SSnPsHpOErDPIxyHFN/gkMK2A+mPgkg + xjGEYep7P6gCYiBbEDMfYy8Y4XA0xvdenATTxJ84QYynOAzG0Ttsv68VxuNp + AYquiDALls13qQia3WNswk2x2U7GPaKsUs7oYg3NvCni7PvmsVxv09rf7gwa + IipFzpYPilv/K2NKnbguKZmjichSuXVSRezjFMDSOtuQxqGySCYT3z0Ia/dU + 1u1zXFgat/bcXqFSXWCt4opwDjY3jZIv34YIRM2UFAV0Ge51W1zHclmy/2XO + ahCtwegTga72Kjfqx3+CtxWnBlHIN321vYLwxjBqH/6Eqhck+9U7It6meh4i + s7K16zuglYIPgqQcMpQYVcHLX60Sl3Jdlf82xU5jkS10p+L2Eq2vkjQl4SeO + +mLrJWO65KS5JYW1hu5Ky3Ic9SeLFxXnFq9YTWjzy7J1DFtSlBxac25Z2qZK + g7pcWoJ2c/4INVJbbEo0/NWUX9kLugK6lpVx+tfskRlTQM37A3/v3y643Hy0 + fYcAftvxW3kLZiPV+pV/Vk3mOWeiDaUSNRh7DT7vp4CSnHBtG46er46xoYJo + Y3FdwbfNh9FdUiqrPUYf0q6Usuev+aTllczaOTzcXbezo5KJNqnj9DrB55nb + 38GzmfvyQv4EAAD//wMAX2DAUVgFAAA= + http_version: + recorded_at: Mon, 20 Jul 2015 19:56:34 GMT +recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/returns_a_content_type_of_application/json.yml b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/returns_a_content_type_of_application/json.yml new file mode 100644 index 00000000..2f93f431 --- /dev/null +++ b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/returns_a_content_type_of_application/json.yml @@ -0,0 +1,79 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token + body: + encoding: UTF-8 + string: | + + + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Mon, 20 Jul 2015 20:03:59 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"14356956da46ac85c0a2b6d241ade05d"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - a981ffc5af55d5a02a5f066b3330f414 + X-Runtime: + - '0.121941' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAC9UrVUAA7RUwXLaMBC95ysYXQvYGLCxB5JJk2baQ3NJcmo7zFpaQEWW + HEk2mDT/XtkG2jBpZjrT+rh++97T252dXmwz0SlRG67kjAz6PumgpIpxuZyR + h/ub3oRcnJ9NqeAobc+qNcrzs05nWoIo8PyJ7FtJMugSKOxKab4D6yo3jgF1 + rrm0JCFBFAXIRpROAp+Gvh/AJI7HEDJMGUQBjSkbDxEYg3AECJMQhj6LYjb0 + F6k/GLAfVCNYZHOws8AfjHt+1Av8+8BP/GEyjvujMByHURxG73z3fS2cQpih + piuQds7ZbJfKcbV7jG20yTbbUdAi8iIVnM7XWM2qLGbfN4/5epuWw+3Oki6h + Si748kEL539lbW4Sz4Oc9w1IlqptP9XgHqcRl87ZBqo+VVkyGg29g7DxTmW9 + Nse5o/HKgdcqFLoJrFZcgRDocjMk+fKtS1CWXCuZYZPhXrfGNSyXOf9f5pwG + GIPWnAg0tVe5STv+E7yr9EuUmXrTV90rQVSWU/fwJ1K8INmv3hHxNtVzl9iV + q13fIS00fpCQCmQksbrAl79qJaHUusj/bYqNxpzNTaPitRK1rxyqHMSJo7ZY + e2Hc5AKqW8icNXKXO5bjqD85vCyEcHjNS6DVL8vOMW4hywXW5rw8d02FQX25 + dAT15vwRapVx2BQM/tWUX9kLukK6VoXtt6/ZIxnXSO37A3/r3y242nx0fYcA + ftvxW3WLdqP0+pV/Tk0tFoLLOpRClmjdNfi8nwJJFiCMazh6vjrGRjIw1uGa + wtA1H0Z3Sakq9hhzSLvQ2p2/6pNRV4rVc3i4u65nRxWXdVLH6TWCz1OvvYNn + U+/lhfwJAAD//wMAabnKE1gFAAA= + http_version: + recorded_at: Mon, 20 Jul 2015 20:03:59 GMT +recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/returns_an_http_success.yml b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/returns_an_http_success.yml new file mode 100644 index 00000000..7f19de0e --- /dev/null +++ b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/returns_an_http_success.yml @@ -0,0 +1,79 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token + body: + encoding: UTF-8 + string: | + + + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Mon, 20 Jul 2015 19:56:34 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"bdfa75bb1cee6571f969887b404074c4"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 6e45e3b90be385bec78a776acf511788 + X-Runtime: + - '0.122390' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAHJSrVUAA7RUy27bMBC85ysMXmvracmWYCdIkwbtobkkObWFQVErmzVF + KnzIltP8eynJdhsjDVCg1UXAcnZmOLvg7GJbskENUlHB58h3PDQATkRO+XKO + Hu5vRlN0cX42I4wC1yMt1sDPzwaDWY2ZgfMntG9FqT9E2OiVkHSHta3cWAaQ + laRcoxTFyaTAhAQQTUgRF4GXJ3EQRzCdRj7J4ixMCMl9D+fTbOzHfmT/yXRM + pgSCSTJJvB9EAtaQL7CeB54fjbzJKPDu/SSN4jQcO14SxkkcJeE7z35fjecF + cQmSrDDXC5rPdxmPmt1joiebcrMdBz2iMhmjZLGGZt6USf5981itt1kdbnca + DRERvKDLB8ms/5XWlUpdF1fUUZjnmdg6mcT2chJgaZ1tcOMQUabjcegehJV7 + Kuv2OS4sjVv7bq9gZBdYq7jCjIHNTaH0y7chAl5TKXgJXYZ73RbXsVxW9H+Z + sxpYKdDqRKCrvcqN+vGf4G3FqYGX4k1fbS/HrNGU2Is/IfOCZL96R8TbVM9D + pFe2dn0HxEj4wHHGIEeplgZeHrVKTIi1qf5tip3GIl+oTsXtJVpfFW4qzE4c + 9cXWS05VxXBzi0trDd1VluU46k8Wzw1jFi9pjUnzy7J1DFtcVgxac25V2Saj + QF4uLUG7OX+EaqEsNsMK/mrKr+wFWQFZC6Od/jZ7ZE4lEP3+wN/7twsuNh9t + 3yGA33b8VtyC3gi5fuXMqomiYJS3oRheg7avwef9FFBaYKZsw9Hz1TE2VGKl + La4rhLb5MLpLQoTZY9QhbSOlff6aT0pcibydw8PddTs7IihvkzpOrxN8nrn9 + O3g2c1++kD8BAAD//wMAZJkI5FgFAAA= + http_version: + recorded_at: Mon, 20 Jul 2015 19:56:34 GMT +recorded_with: VCR 2.9.3 diff --git a/spec/controllers/spree/api/braintree_client_token_controller_spec.rb b/spec/controllers/spree/api/braintree_client_token_controller_spec.rb new file mode 100644 index 00000000..b553f996 --- /dev/null +++ b/spec/controllers/spree/api/braintree_client_token_controller_spec.rb @@ -0,0 +1,35 @@ +require 'spec_helper' + +describe Spree::Api::BraintreeClientTokenController, :vcr, type: :controller do + before(:all) do + @braintree_payment_method = Solidus::Gateway::BraintreeGateway.create!( + name: 'Braintree Gateway', + environment: 'development', + active: true + ) + @braintree_payment_method.set_preference(:environment, 'development') + @braintree_payment_method.set_preference(:merchant_id, 'zbn5yzq9t7wmwx42') + @braintree_payment_method.set_preference(:public_key, 'ym9djwqpkxbv3xzt') + @braintree_payment_method.set_preference(:private_key, '4ghghkyp2yy6yqc8') + @braintree_payment_method.save! + end + + describe "POST create" do + before do + post :create + end + + it "returns an http success" do + expect(response).to have_http_status(:success) + end + + it "returns a content type of application/json" do + expect(response.content_type).to eq("application/json") + end + + it "returns a client_token" do + body = JSON.parse(response.body) + expect(body["client_token"]).to be_present + end + end +end diff --git a/spec/models/credit_card_spec.rb b/spec/models/spree/credit_card_spec.rb similarity index 93% rename from spec/models/credit_card_spec.rb rename to spec/models/spree/credit_card_spec.rb index a43fa20f..f23398d1 100644 --- a/spec/models/credit_card_spec.rb +++ b/spec/models/spree/credit_card_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe Spree::CreditCard do +describe Spree::CreditCard, type: :model do context "payment is of type Solidus::Gateway::BraintreeGateway" do let(:payment_method) do Solidus::Gateway::BraintreeGateway.create!( diff --git a/spec/models/payment_spec.rb b/spec/models/spree/payment_spec.rb similarity index 85% rename from spec/models/payment_spec.rb rename to spec/models/spree/payment_spec.rb index ef62929d..08f93261 100644 --- a/spec/models/payment_spec.rb +++ b/spec/models/spree/payment_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe Spree::Payment do +describe Spree::Payment, type: :model do it "has a payment_method_nonce accessor" do payment = Spree::Payment.new expect { payment.payment_method_nonce = "abc123" }.not_to raise_error diff --git a/spec/models/permitted_attributes_spec.rb b/spec/models/spree/permitted_attributes_spec.rb similarity index 100% rename from spec/models/permitted_attributes_spec.rb rename to spec/models/spree/permitted_attributes_spec.rb diff --git a/spec/solidus/gateway/braintree_gateway_spec.rb b/spec/solidus/gateway/braintree_gateway_spec.rb index 006162b4..e90e7bb0 100644 --- a/spec/solidus/gateway/braintree_gateway_spec.rb +++ b/spec/solidus/gateway/braintree_gateway_spec.rb @@ -26,10 +26,10 @@ before(:all) do @braintree_payment_method = Solidus::Gateway::BraintreeGateway.create!( name: 'Braintree Gateway', - environment: 'sandbox', + environment: 'development', active: true ) - @braintree_payment_method.set_preference(:environment, 'sandbox') + @braintree_payment_method.set_preference(:environment, 'development') @braintree_payment_method.set_preference(:merchant_id, 'zbn5yzq9t7wmwx42') @braintree_payment_method.set_preference(:public_key, 'ym9djwqpkxbv3xzt') @braintree_payment_method.set_preference(:private_key, '4ghghkyp2yy6yqc8') diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index d461ed1a..9e53f8ee 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,9 +1,7 @@ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__) require 'solidus_braintree' -ENV["RAILS_ENV"] = "test" - -require_relative "dummy/config/environment.rb" +require_relative "dummy/config/environment" require 'rspec/rails' require 'database_cleaner' @@ -14,6 +12,8 @@ require 'spree/testing_support/factories' require 'spree/testing_support/order_walkthrough' require 'spree/testing_support/preferences' +require 'spree/testing_support/controller_requests' +require 'spree/testing_support/url_helpers' FactoryGirl.find_definitions @@ -32,6 +32,8 @@ config.include FactoryGirl::Syntax::Methods config.include Spree::TestingSupport::Preferences + config.include Spree::TestingSupport::ControllerRequests, type: :controller + config.include Spree::TestingSupport::UrlHelpers, type: :controller config.before :suite do DatabaseCleaner.strategy = :transaction @@ -47,5 +49,4 @@ config.after do DatabaseCleaner.clean end - end From cb7398c3ccba08484cc66fa5adab31bee41c07a0 Mon Sep 17 00:00:00 2001 From: Jack Chu Date: Mon, 20 Jul 2015 16:25:12 -0400 Subject: [PATCH 023/163] move create_braintree_payment_method code into a helper --- .../braintree_client_token_controller_spec.rb | 14 +------------ .../solidus/gateway/braintree_gateway_spec.rb | 15 +------------ spec/spec_helper.rb | 21 +++++++++++++++++++ 3 files changed, 23 insertions(+), 27 deletions(-) diff --git a/spec/controllers/spree/api/braintree_client_token_controller_spec.rb b/spec/controllers/spree/api/braintree_client_token_controller_spec.rb index b553f996..41d911ba 100644 --- a/spec/controllers/spree/api/braintree_client_token_controller_spec.rb +++ b/spec/controllers/spree/api/braintree_client_token_controller_spec.rb @@ -1,21 +1,9 @@ require 'spec_helper' describe Spree::Api::BraintreeClientTokenController, :vcr, type: :controller do - before(:all) do - @braintree_payment_method = Solidus::Gateway::BraintreeGateway.create!( - name: 'Braintree Gateway', - environment: 'development', - active: true - ) - @braintree_payment_method.set_preference(:environment, 'development') - @braintree_payment_method.set_preference(:merchant_id, 'zbn5yzq9t7wmwx42') - @braintree_payment_method.set_preference(:public_key, 'ym9djwqpkxbv3xzt') - @braintree_payment_method.set_preference(:private_key, '4ghghkyp2yy6yqc8') - @braintree_payment_method.save! - end - describe "POST create" do before do + create_braintree_payment_method post :create end diff --git a/spec/solidus/gateway/braintree_gateway_spec.rb b/spec/solidus/gateway/braintree_gateway_spec.rb index e90e7bb0..e8d4edd8 100644 --- a/spec/solidus/gateway/braintree_gateway_spec.rb +++ b/spec/solidus/gateway/braintree_gateway_spec.rb @@ -1,7 +1,7 @@ require 'spec_helper' describe Solidus::Gateway::BraintreeGateway, :vcr do - let(:payment_method){ @braintree_payment_method } + let(:payment_method){ create_braintree_payment_method } let(:user){ FactoryGirl.create :user } let(:address){ FactoryGirl.create :address } # let(:card){ payment_method.create_profile_from_nonce(user, address, nonce, { device_data: device_data }) } @@ -23,19 +23,6 @@ end let(:card) { payment.source } - before(:all) do - @braintree_payment_method = Solidus::Gateway::BraintreeGateway.create!( - name: 'Braintree Gateway', - environment: 'development', - active: true - ) - @braintree_payment_method.set_preference(:environment, 'development') - @braintree_payment_method.set_preference(:merchant_id, 'zbn5yzq9t7wmwx42') - @braintree_payment_method.set_preference(:public_key, 'ym9djwqpkxbv3xzt') - @braintree_payment_method.set_preference(:private_key, '4ghghkyp2yy6yqc8') - @braintree_payment_method.save! - end - context 'a customer profile' do let(:nonce){ Braintree::Test::Nonce::Transactable } diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 9e53f8ee..6d3df44a 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -15,6 +15,26 @@ require 'spree/testing_support/controller_requests' require 'spree/testing_support/url_helpers' +module SolidusGateway + module Helpers + module BraintreeGateway + def create_braintree_payment_method + gateway = Solidus::Gateway::BraintreeGateway.create!( + name: 'Braintree Gateway', + environment: 'development', + active: true + ) + gateway.set_preference(:environment, 'development') + gateway.set_preference(:merchant_id, 'zbn5yzq9t7wmwx42') + gateway.set_preference(:public_key, 'ym9djwqpkxbv3xzt') + gateway.set_preference(:private_key, '4ghghkyp2yy6yqc8') + gateway.save! + gateway + end + end + end +end + FactoryGirl.find_definitions VCR.configure do |c| @@ -34,6 +54,7 @@ config.include Spree::TestingSupport::Preferences config.include Spree::TestingSupport::ControllerRequests, type: :controller config.include Spree::TestingSupport::UrlHelpers, type: :controller + config.include SolidusGateway::Helpers::BraintreeGateway config.before :suite do DatabaseCleaner.strategy = :transaction From adb118dd3f5436ecb895719ceeb82d2921ddd3c0 Mon Sep 17 00:00:00 2001 From: Jack Chu Date: Mon, 20 Jul 2015 16:29:00 -0400 Subject: [PATCH 024/163] remove specs related to Payment#credit! since that method is no longer supported --- spec/solidus/gateway/braintree_gateway_spec.rb | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/spec/solidus/gateway/braintree_gateway_spec.rb b/spec/solidus/gateway/braintree_gateway_spec.rb index e8d4edd8..7e73e382 100644 --- a/spec/solidus/gateway/braintree_gateway_spec.rb +++ b/spec/solidus/gateway/braintree_gateway_spec.rb @@ -4,7 +4,6 @@ let(:payment_method){ create_braintree_payment_method } let(:user){ FactoryGirl.create :user } let(:address){ FactoryGirl.create :address } - # let(:card){ payment_method.create_profile_from_nonce(user, address, nonce, { device_data: device_data }) } # #create_profile doesn't support options, does it need to? # let(:device_data){'{"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"}'} @@ -191,20 +190,6 @@ payment.void! expect(payment).to be_void end - - xit "can be refunded" do - payment.capture! - refund = payment.credit!(50.00) - expect(refund.amount).to eq(-50.00) - expect(refund).to be_completed - end - - xit "errors on bad refund" do - payment.capture! - expect{ - payment.credit!(51.00) - }.to raise_error(Spree::Core::GatewayError, 'Refund amount is too large. (91521)') - end end context 'failure', transaction_clean: false do From 6cefdc576615f494135f2b52c1d8af10a25cf458 Mon Sep 17 00:00:00 2001 From: Jack Chu Date: Mon, 20 Jul 2015 17:42:11 -0400 Subject: [PATCH 025/163] switch add_routes to routes.draw --- config/routes.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/routes.rb b/config/routes.rb index f27a354f..c9c92a9c 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,4 +1,4 @@ -Spree::Core::Engine.add_routes do +Spree::Core::Engine.routes.draw do namespace :api, defaults: { format: 'json' } do resource :payment_client_token, only: [:create], controller: 'braintree_client_token' end From f43014ad7c4517c8573be13e00ba03d4dbfd4678 Mon Sep 17 00:00:00 2001 From: Jack Chu Date: Thu, 23 Jul 2015 12:12:34 -0400 Subject: [PATCH 026/163] precompile solidus_braintree.js --- app/overrides/admin_payment_add_braintree_dropin.rb | 2 +- .../spree/backend/{ => braintree}/solidus_braintree.js | 0 lib/solidus_braintree/engine.rb | 1 + 3 files changed, 2 insertions(+), 1 deletion(-) rename lib/assets/javascripts/spree/backend/{ => braintree}/solidus_braintree.js (100%) diff --git a/app/overrides/admin_payment_add_braintree_dropin.rb b/app/overrides/admin_payment_add_braintree_dropin.rb index a7600e56..505a2a4e 100644 --- a/app/overrides/admin_payment_add_braintree_dropin.rb +++ b/app/overrides/admin_payment_add_braintree_dropin.rb @@ -3,7 +3,7 @@ name: "admin_payment_add_braintree_dropin", insert_bottom: "[data-hook=card_name]", text: %Q{ - <%= javascript_include_tag "spree/backend/solidus_braintree", "data-turbolinks-track" => true, "crossorigin" => "anonymous" %> + <%= javascript_include_tag "spree/backend/braintree/solidus_braintree", "data-turbolinks-track" => true, "crossorigin" => "anonymous" %>
} diff --git a/lib/assets/javascripts/spree/backend/solidus_braintree.js b/lib/assets/javascripts/spree/backend/braintree/solidus_braintree.js similarity index 100% rename from lib/assets/javascripts/spree/backend/solidus_braintree.js rename to lib/assets/javascripts/spree/backend/braintree/solidus_braintree.js diff --git a/lib/solidus_braintree/engine.rb b/lib/solidus_braintree/engine.rb index 3718b81e..c9c08d1e 100644 --- a/lib/solidus_braintree/engine.rb +++ b/lib/solidus_braintree/engine.rb @@ -3,6 +3,7 @@ class Engine < Rails::Engine engine_name 'solidus_braintree' config.autoload_paths += %W(#{config.root}/lib) + config.assets.precompile += %w( spree/backend/braintree/solidus_braintree.js ) initializer "spree.gateway.payment_methods", after: "spree.register.payment_methods" do |app| app.config.spree.payment_methods << Solidus::Gateway::BraintreeGateway From 38792a4115815fc5feed69f9862e8f0e4bc28e85 Mon Sep 17 00:00:00 2001 From: Allie Larson Date: Fri, 24 Jul 2015 10:20:38 -0400 Subject: [PATCH 027/163] Rake test_app command works --- Gemfile | 1 + Rakefile | 2 + out.json | 0 .../POST_create/returns_an_http_success.yml | 40 +++++++++---------- spec/spec_helper.rb | 10 +++-- 5 files changed, 30 insertions(+), 23 deletions(-) create mode 100644 out.json diff --git a/Gemfile b/Gemfile index 01ad9a5b..e3fe2ec1 100644 --- a/Gemfile +++ b/Gemfile @@ -1,4 +1,5 @@ source 'https://rubygems.org' # Specify your gem's dependencies in solidus_braintree.gemspec +#gem "solidus", github: "solidusio/solidus", branch: "master" gemspec diff --git a/Rakefile b/Rakefile index f92295bf..72b2b4bc 100644 --- a/Rakefile +++ b/Rakefile @@ -4,6 +4,8 @@ require 'spree/testing_support/common_rake' RSpec::Core::RakeTask.new(:spec) +Bundler::GemHelper.install_tasks + task default: :spec desc "Generates a dummy app for testing" diff --git a/out.json b/out.json new file mode 100644 index 00000000..e69de29b diff --git a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/returns_an_http_success.yml b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/returns_an_http_success.yml index 7f19de0e..245d7815 100644 --- a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/returns_an_http_success.yml +++ b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/returns_an_http_success.yml @@ -26,7 +26,7 @@ http_interactions: message: Created headers: Date: - - Mon, 20 Jul 2015 19:56:34 GMT + - Fri, 24 Jul 2015 14:16:33 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -47,33 +47,33 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"bdfa75bb1cee6571f969887b404074c4"' + - '"9541d7a8bd6472399d8625ca4e7e0cd1"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 6e45e3b90be385bec78a776acf511788 + - 866e76aeadb76ae81ed399e5b6b11f16 X-Runtime: - - '0.122390' + - '0.130796' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAHJSrVUAA7RUy27bMBC85ysMXmvracmWYCdIkwbtobkkObWFQVErmzVF - KnzIltP8eynJdhsjDVCg1UXAcnZmOLvg7GJbskENUlHB58h3PDQATkRO+XKO - Hu5vRlN0cX42I4wC1yMt1sDPzwaDWY2ZgfMntG9FqT9E2OiVkHSHta3cWAaQ - laRcoxTFyaTAhAQQTUgRF4GXJ3EQRzCdRj7J4ixMCMl9D+fTbOzHfmT/yXRM - pgSCSTJJvB9EAtaQL7CeB54fjbzJKPDu/SSN4jQcO14SxkkcJeE7z35fjecF - cQmSrDDXC5rPdxmPmt1joiebcrMdBz2iMhmjZLGGZt6USf5981itt1kdbnca - DRERvKDLB8ms/5XWlUpdF1fUUZjnmdg6mcT2chJgaZ1tcOMQUabjcegehJV7 - Kuv2OS4sjVv7bq9gZBdYq7jCjIHNTaH0y7chAl5TKXgJXYZ73RbXsVxW9H+Z - sxpYKdDqRKCrvcqN+vGf4G3FqYGX4k1fbS/HrNGU2Is/IfOCZL96R8TbVM9D - pFe2dn0HxEj4wHHGIEeplgZeHrVKTIi1qf5tip3GIl+oTsXtJVpfFW4qzE4c - 9cXWS05VxXBzi0trDd1VluU46k8Wzw1jFi9pjUnzy7J1DFtcVgxac25V2Saj - QF4uLUG7OX+EaqEsNsMK/mrKr+wFWQFZC6Od/jZ7ZE4lEP3+wN/7twsuNh9t - 3yGA33b8VtyC3gi5fuXMqomiYJS3oRheg7avwef9FFBaYKZsw9Hz1TE2VGKl - La4rhLb5MLpLQoTZY9QhbSOlff6aT0pcibydw8PddTs7IihvkzpOrxN8nrn9 - O3g2c1++kD8BAAD//wMAZJkI5FgFAAA= + H4sIAMFIslUAA7RUy27bMBC85ysMXmtbkvW0YCdIkwbtobkkObWFQVErmzVF + KnzIltP8eynJdhsjDVCg1XE1OzOcXezsYluyQQ1SUcHnyBu7aACciJzy5Rw9 + 3N+MEnRxfjYjjALXIy3WwM/PBoNZjZmB8ye0b0WpN0TY6JWQdIe1rdxYBpCV + pFyjFEVJEAZ+5haZm2SJT3ASxJNpHBX5NE4iyIsgDr24yAiJ4ymJIIyCIMvc + 0JvkmeuC/4NIwBryBdbzieuFIzceTYJ7L0i9KPX9cZgkfhInQfLOtd9X47qT + qARJVpjrBc3nu4yHze5xquNNudkGkx5RmYxRslhDM2/Kaf5981itt1ntb3ca + DRERvKDLB8ms/5XWlUodB1d0rDDPM7EdZxLbx0mApXW2wc2YiDINAt85CCvn + VNbpc1xYGqf2nF7ByC6wVnGFGQObm0Lpl29DBLymUvASugz3ui2uY7ms6P8y + ZzWwUqDViUBXe5Ub9eM/wdvKuAZeijd9tb0cs0ZTYh/+hMwLkv3qHRFvUz0P + kV7Z2vUdECPhA8cZgxylWhp4+atVYkKsTfVvU+w0FvlCdSpOL9H6qnBTYXbi + qC+2XnKqKoabW1xaa+iusizHUX+yeG4Ys3hJa0yaX5atY9jismLQmnOqyjYZ + BfJyaQnazfkjVAtlsRlW8FdTfmUvyArIWhg97l+zR+ZUAtHvD/y9f7vgYvPR + 9h0C+G3Hb8Ut6I2Q61f+WTVRFIzyNhTDa9D2GnzeTwGlBWbKNhw9Xx1jQyVW + 2uK6gm+bD6O7JESYPUYd0jZS2vPXfFLiSuTtHB7urtvZEUF5m9Rxep3g88zp + 7+DZzHl5IX8CAAD//wMAXi7tvVgFAAA= http_version: - recorded_at: Mon, 20 Jul 2015 19:56:34 GMT + recorded_at: Fri, 24 Jul 2015 14:16:33 GMT recorded_with: VCR 2.9.3 diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 6d3df44a..c5da1511 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,11 +1,15 @@ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__) +ENV["RAILS_ENV"] = "test" + require 'solidus_braintree' require_relative "dummy/config/environment" - require 'rspec/rails' require 'database_cleaner' require 'ffaker' +require 'vcr' +require 'webmock' +require 'pry-byebug' Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} @@ -21,10 +25,10 @@ module BraintreeGateway def create_braintree_payment_method gateway = Solidus::Gateway::BraintreeGateway.create!( name: 'Braintree Gateway', - environment: 'development', + environment: 'test', active: true ) - gateway.set_preference(:environment, 'development') + gateway.set_preference(:environment, 'test') gateway.set_preference(:merchant_id, 'zbn5yzq9t7wmwx42') gateway.set_preference(:public_key, 'ym9djwqpkxbv3xzt') gateway.set_preference(:private_key, '4ghghkyp2yy6yqc8') From 33d4affa2f65dc33e4d591c1d4d4d035b3fe246e Mon Sep 17 00:00:00 2001 From: Allie Larson Date: Tue, 28 Jul 2015 16:57:14 -0400 Subject: [PATCH 028/163] Add specs to test attributes sent to braintree --- .../solidus/gateway/braintree_gateway.rb | 54 +-- ...fails_capture_with_settlement_declined.yml | 214 ++++++----- .../should_have_the_correct_attributes.yml | 45 ++- .../succeeds_authorization_and_capture.yml | 211 ++++++----- ...succeeds_capture_on_pending_settlement.yml | 211 ++++++----- .../should_raise_exception.yml | 48 ++- .../fails.yml | 44 ++- .../decline/fails.yml | 172 +++++---- .../should_have_the_correct_attributes.yml | 85 +++-- .../successful/succeeds.yml | 253 +++++++------ .../can_be_fully_credited.yml | 279 ++++++++------- .../with_completed_payment/can_be_voided.yml | 335 +++++++++--------- .../on_a_payment/PayPal/failure/fails.yml | 275 +++++++------- .../PayPal/success/can_be_voided.yml | 273 +++++++------- .../on_a_payment/PayPal/success/succeeds.yml | 272 +++++++------- .../POST_create/returns_a_client_token.yml | 40 +-- .../json.yml | 40 +-- .../POST_create/returns_an_http_success.yml | 40 +-- .../solidus/gateway/braintree_gateway_spec.rb | 129 ++++++- 19 files changed, 1556 insertions(+), 1464 deletions(-) diff --git a/app/models/solidus/gateway/braintree_gateway.rb b/app/models/solidus/gateway/braintree_gateway.rb index f55e25df..116a2808 100644 --- a/app/models/solidus/gateway/braintree_gateway.rb +++ b/app/models/solidus/gateway/braintree_gateway.rb @@ -57,11 +57,11 @@ def create_profile(payment) return if source.gateway_customer_profile_id.present? || payment.payment_method_nonce.nil? user = payment.order.user - address = payment.order.bill_address + address = payment.order.bill_address.try(:active_merchant_hash) params = { - first_name: address.firstname, - last_name: address.lastname, + first_name: source.first_name, + last_name: source.last_name, email: user.email, credit_card: { cardholder_name: source.name, @@ -166,15 +166,12 @@ def handle_result(result) def map_address(addr) { - first_name: addr.firstname, - last_name: addr.lastname, - street_address: addr.address1, - extended_address: addr.address2, - company: addr.company, - locality: addr.city, - region: addr.state ? addr.state.name : addr.state_name, - country_code_alpha3: addr.country.iso3, - postal_code: addr.zipcode, + street_address: addr[:address1], + extended_address: addr[:address2], + locality: addr[:city], + region: addr[:state], + country_code_alpha2: addr[:country], + postal_code: addr[:zip], } end @@ -184,12 +181,9 @@ def amount(cents) def transaction_authorize_or_purchase_params(cents, creditcard, options = {}) params = options.select {|k| %i[ - billing billing_address_id channel custom_fields - customer - customer_id descriptor device_data device_session_id @@ -199,51 +193,37 @@ def transaction_authorize_or_purchase_params(cents, creditcard, options = {}) purchase_order_number recurring service_fee_amount - shipping shipping_address_id tax_amount tax_exempt ].include?(k)} params[:options] ||= {} - params[:amount] = amount(cents) + params[:channel] ||= "Solidus" + params[:shipping] = map_address(options[:shipping_address]) if options[:shipping_address] - if params[:payment_method_nonce].nil? + if options[:payment_method_nonce] + params[:payment_method_nonce] = options[:payment_method_nonce] + params[:billing] = map_address(options[:billing_address]) if options[:billing_address] + else params[:payment_method_token] = creditcard.gateway_payment_profile_id - params.delete(:billing_address) end # if has profile, set the customer_id to the profile_id and delete the customer key - if creditcard.respond_to?(:gateway_customer_profile_id) && creditcard.gateway_customer_profile_id + if creditcard.try(:gateway_customer_profile_id) params[:customer_id] = creditcard.gateway_customer_profile_id - params.delete(:customer) # if no profile, define the customer key, delete the customer_id because they are # mutually exclusive else params[:customer] = { - id: params[:customer_id], + id: options[:customer_id], email: options[:customer], first_name: creditcard.first_name, last_name: creditcard.last_name, } - params.delete(:customer_id) end - # delete the shipping price in options - params.delete(:shipping) - - # if there's a shipping_address/billing_address, set it to the shipping/billing key - # and convert the address into a format Braintree understands - if params[:shipping_address] - params[:shipping] = map_address(params.delete(:shipping_address)) - end - if params[:billing_address] - params[:billing] = map_address(params.delete(:billing_address)) - end - - params[:channel] ||= "Solidus" - params end end diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/fails_capture_with_settlement_declined.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/fails_capture_with_settlement_declined.yml index 6875b151..38b81378 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/fails_capture_with_settlement_declined.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/fails_capture_with_settlement_declined.yml @@ -8,20 +8,17 @@ http_interactions: string: | - John - Doe - kiara@frami.biz + Card + Holder + walter.wyman@mayert.name Card Holder - John - Doe 10 Lovely Street Northwest - Company Herndon - Alabama - USA + AL + US 35005 fake-paypal-future-nonce @@ -47,7 +44,7 @@ http_interactions: message: Created headers: Date: - - Thu, 16 Jul 2015 17:23:11 GMT + - Tue, 28 Jul 2015 20:51:14 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -68,31 +65,31 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"3c89f18c124e27d56a8e5c9ed661e7ef"' + - '"ec245e3982f773c3f0825093c03365e5"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 291cc539c761885fa7e9ce740094829b + - 27fb07ab65833f4ebd98747e2be67f24 X-Runtime: - - '0.251914' + - '0.363756' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAH/op1UAA6RTOZObMBTu91cw9CDj9RF7AG+RSZF606TZeaAHaK0rkliD - f30E+EpIk9nyO96h90F66AQPPtBYpmQWJvEiDFCWijJZZ+GP12/Rl/CQP6Vl - a50SaPKnIEgZzZPVZr3aLTYp8WDgvFY2IF3k8bmQ6/78a+e2J3HqVsuUPKqD - u2LGukiCwPy7amRKHohB53BFXxWm5A4HsVRCg+wDyXgWOtNiSEYeBTCeHxkY - eKkMCBYX7JySiR4MulESZ2UVdDPuhIVlbu4tDYJDGoELXK8xC6mHjgkM8+Ui - WUeLbZRsXpPtfvm8T5KfKbkXjPWtpv9Xfy+Y5o8xRBVDTu1tJcpcVIKh9tIU - jIH+srGGXgOPoCxVK92fjsEws0ykp506oszp+ljsfIITumrTTd9BYkwVvmAH - QnOMfTIP9x6dFCto+fW5hVIcQYb5cNOUXMSbmQmoMWoNzxvntN0TAtais3Fh - gElnEGt/jRP0wyTi9xYo3ZtA1yj6xlWtyPSWWMv6gPKDGSUHS2ZB0kJ1/mu9 - TbjO/GSkY49Pxjr2sG1hS8O08z/iP4L0DjIP6m/OjiRQatAfbtbGL3/7j38D - AAD//wMA0bjLOfoDAAA= + H4sIAELrt1UAA6RTS2+bQBC+51cg7rDGspvYWnCkSFV/QHrpJRrYsb3NPsju + ECC/vgv4ldJLleN8j5nZb4DvOq2id3ReWpPHWbqIIzSVFdIc8vjn8/fkId4V + d7xqPFmNrriLIi5FkW1Wi02WZZyFYsACVx3BUBLqj9Ks+4+3Dd23uu1WS85u + 2UG9l85TYkBj8QROcHYDDLyCc/XDKoGOsysy8JXVNZg+MlLlMbkGYzbiqEGq + ogVF6NK212AeNfToKB2snE38oKyP1uDMv4duhrVYeklzbeUQCEUCFFFfYx6L + UJLUGBfLRbZOFvfJ8uF5udius222+sXZ1TD6m1r8n/9qmOaPJ0n2EpXwl5WE + pKQKkfpTU3AO+tPGNfQ1qASqyjaGPisGwUwygQEm+4qmePWd1t84m6ozN2X6 + GwymwuIjdqBrhWk40U3eo1LgHhp1fm5prUIwcTFkytmJvIilhgMmjVPFkaj2 + W8bAeySflg6kIYd4CGm00A+TWNhbo6EXjXS04kXZg2XTW9LaHHZo3qWzZpDk + HowobRe+3MuE88wvnnTs8cWzjj18U/rKyZrCT/mPQwYFmx/qb8yPIAjhMAQ3 + axOWv/zTfwAAAP//AwBl8rmCBgQAAA== http_version: - recorded_at: Thu, 16 Jul 2015 17:23:11 GMT + recorded_at: Tue, 28 Jul 2015 20:51:16 GMT - request: method: post uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions @@ -104,14 +101,14 @@ http_interactions: 4001.00 - d5kb92 + Solidus + ksxmm6 jane.doe@example.com - Solidus sale headers: @@ -131,7 +128,7 @@ http_interactions: message: Created headers: Date: - - Thu, 16 Jul 2015 17:23:12 GMT + - Tue, 28 Jul 2015 20:51:15 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -152,57 +149,57 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"fca14d4ca2f1e1af97112c9322d6dc2b"' + - '"b2f064697ac9ec6871509d8c15585136"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - cd43b8e37224d5c5ca4f8baad5d4c177 + - e2b02d83c1767e65b969feba46778388 X-Runtime: - - '0.319555' + - '0.244573' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - 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 - N17jd38DAAD//wMA9JoGnocUAAA= + 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 http_version: - recorded_at: Thu, 16 Jul 2015 17:23:12 GMT + recorded_at: Tue, 28 Jul 2015 20:51:17 GMT - request: method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/9dp3nj/submit_for_settlement + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/97r6m8/submit_for_settlement body: encoding: UTF-8 string: | @@ -227,7 +224,7 @@ http_interactions: message: Unprocessable Entity headers: Date: - - Thu, 16 Jul 2015 17:23:12 GMT + - Tue, 28 Jul 2015 20:51:15 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -250,52 +247,53 @@ http_interactions: Cache-Control: - no-cache X-Request-Id: - - 6b53a003575b8e6e9d5238ee3454cb04 + - 9401e66b6b097d7c2a0a51f693b9b645 X-Runtime: - - '0.300656' + - '0.276751' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAIDop1UAA+xZS3PjNgy+51dkfGdkO3YS7zjaxyTtpLOHTrM5tJcMJUE2 - NxKpJSnHzq8vKOpBy5TXndlDO92bBXwEyQ8gCNDL99s8O9+AVEzw29HkYjw6 - Bx6LhPHV7ejpyy/kZvQ+PFvSghGQUkgiQRWCKwjPzs+XlUiZn+3Hud4VcDui - UtLdKKhVWlKuaKxxEis5Dg96+GXQTbQsqKS5OmKY5qLkujbMuIYVyFE4G48n - 4/EysNqBicxo+6HKKGf6ORXyWYHWGeTANY52obHgWoosAxk6dtQycBQWmYOM - 15RrwpLwLeLz3du3hb5+zV+3s+kycLUWjz8WSXHJvy4DK1sG3bbRmlJ0BeFj - u7DzO4gzxiExxqzyzMfOoWGUKU11qcJum89Ja63W1WQjo6GiGSBv5mfNQikl - hsyOMCUIRg6ET493yMGB+MzxTuWOiwN/tEzQODZiw4gqJIBDkqOyg4RMQOLn - OWfZ7UjLEtpAiiVQDQmhTTgk+KlZDqNwOp7MyfiaTK6+TK7fTS/fTSZ/4arb - AbWFskhOtzBFC92Alh+lRd6EgvXBZHY1ny3GV50XUJ4yqTThNIfwN7Hmy8AR - NJiMNpI7gaR0nw0gFnlB+e6QC3Picsqy8IVhJH1IMZrYRcTe8GxV4gb0CpFi - GrwGirXgfk1Ktx76g/29LyOWYVytHCb8xtp9e9Xtpr3aYwQojaGEEZQkmMWU - n6OtBp4Y/x0BZSKmGdP+SSSs8Lz5+RN4nrLqNAysHQNb7o5tzgKMBUKzYk2n - J+Iuv4/jJXqKxT4/7jkOd5iWPPGfuFbnz+xWjfQ6qclvqEtHJKI6Xg+g1qwo - fobUfzCk9j1XZ0mSMsgS1YDoRvWqjoGNVkiHin18+IDXzFFAZ2Tfn347RzH1 - djabw7GHQgte4YXxSneo+wr2ROAtpHwOXxZSxDgnMkJLvRaSvdFqwAAtHXx/ - XqyE8Ood0g6O1RjK4ccCNRtTHAwhajaThJm1IeOHQM9aN4LFxi8pehzHYOhE - IH17Kk0hgHPZe38Qp+mW1KWgXwlbyIvmWo+EyIDyUZjSTJkCpwV0pQTuh8RU - dje2Fi/Aw2T+Ei2wjLNfjS5i/gNbpZqZ/+igbWKWM5BGCiatt3OsL9ch3tx9 - kQe7Ayr3oZWknbO+oYlJQHooy5iVrUVW8T2USFiOZScpZRautS7UuyCgCpO4 - uogkxSocj0wd5xeYT7Gc3VWlZg4YxslzJlYiKPkLF6/8ouCr98A3TApuMLeK - 8iQSWyyW2ina9CehoFhDPdmhJiatoAGsgWZ6jeuHDuPIGlgCEdMdwn62ylKi - NzE0V2VmajsH19c4V4YpWBnNOrAja5dPd6ZPcJZfC1pSlSoxSeIVyF861J60 - n3hFSoye8hjcuQ+VHYciKeOqoHZobGUNrOTsWwn1eUMFeoZhuvYcPXOYgeeC - qORl4Hi1+rZS7B+vui0ha4YBKnd71YRz+1YYQHOtu8y5xPocVXlxYtXf4h0b - defTpNl+M2RT3JFexnKmsPZNcspXgNeGbWQqmbNWpxBSAnMbhNhs73WmjbzZ - deDb9o/gYnqcC9sTY5gftMX/e2YMF3gifzLx3VeEfxkprazOM02RkdGhvqSM - VCxZcaRzcRBOOVB1UKTAelgkBBsCYlj2Js8eFhco9QAal38wm6m8CBZZ3gYs - Yaq6Cwa0YG2JrkAYvO+HHwPwgvattG8c2xrzSIQ7HbgkWn1Tgq0p55CFjyJj - SWne2WpB0zHKjSkhU4Dhws+sQbwS63SPHvmJSqls45mApixrA7enHHKf07kO - LWMfdfBUdvIA2BoKsCaSQ4sx7TYGN3ZVfqNlHHtbUnTXIBOGh6LU4I+hurIj - jGOfVFY/q9dClBc0e66f75bBEK7ffTj73m9TTPZwm5BB4CkWq8bF+6B6wri6 - p1hjmiJ4Xk3YAu4rFb72paLhpBYCoVhp2ee56vcH2GLSzcBU0BWBrdoZYklN - wt8//knS6zS9gcVsfn09vYnmY7iJr8cpnTvsdwXefkeJisePn+9Jki5u4pvF - IpokML+BCJN1H/fjOgBLzj9pALBSL1dmEXf3n55+JbPZFKKEzuY35mG9VbqM - gqXM3+c4rxD+pFdxbtm9/+P54Y6M54urxSXQSQSLKJ3Qxi+9WSU5eN49EO/j - e0+9fWGXFsz/DKbF1vXjQX3b3n9++PXh0+d7vCKGIF17V+gqZP2bPvLe17uH - j6VeD/SExLcMugPT+7sGI9Hzr9TfAAAA//8DAELnwqnSGgAA + H4sIAEPrt1UAA+xZS3PjNgy+51dkfGdkO3Fi7zjaR5O26eyh02wO7SVDi7DN + RiK1JOXH/vqCoh60THmzM51OO92bBXwEyQ8gCNDzt7ssPd+A0lyK28HoYjg4 + B5FIxsXqdvD06UcyHbyNz+Y05wSUkooo0LkUGuKz8/N5KdL2Z/NxbvY53A6o + UnQ/iCqVUVRomhicxElOw6MOfh61E81zqmimTximmSyEqQxzYWAFahBfDYej + 4XAeOW3PRHa0+9DFIuPmeSnVswZjUshAGBztQxMpjJJpCir27Oh55CkcMgOV + rKkwhLP4y0JM9l8+z8zNNtvursbzyNc6PP6Y3ajrbDqPnGwetdtGa1rTFcSP + zcLO7yBJuQBmjTnlWYidY8Mo04aaQsftNp9ZY63SVWQjo7GmKSBv9mfFQqEU + hsyecC0JRg7ET493yMGR+MzzTumOiyN/NEzQJLFiy4jOFYBHkqdyg6RioPDz + XPD0dmBUAU0gJQqoAUZoHQ4MPw3PYBCPh6MJGd6Q8fTTePhmMnozmvyBq24G + VBaKnH2bhXZAw482MqtDwflgNLsazkajUesFlC+50oYImkH8A1VIvieoMSmt + JT/LFLc9j1pJjUlkllOxP6bDHrqM8jTe0tSAutjuMyreZXQPylxYE3jOSn2N + 3sJCcwNBS/lairBmSXcBV0SHPMwXPMUYW3mshI01HATVze6D2lNMaINhhdHE + GGY0HSZrZ0Aw68sToFQmNOUmPImCFZ69MH8Sz1ZanoyetWOQq/2pzTmAtUBo + mq/p+JW4y6/jRIGe4knIjweOwx0uC8HCp6/RhbO8UyO9XpoKG2pTE1lQk6x7 + UGue599D6j8YUoeeqzImWXJIma5BdKM7FUjPRkukR8UhPn7AK+ckoDVy6M+w + nZOYajubzfHYY6EDr/Dy2NI96v4EdyLwRtIhh89zJROcExmhhVlLxb/QckAP + LS38cF6sivAa7tP2jjUYyvH7HDUbWyj0ISo2GeN2bcj4MTCw1o3kifXLEj2O + YzB0FqBCeypsUYBzuRqgF2fojlRlYVgJO8jy+opfSJkCFYN4SVNti50G0JYV + uB+S4C3dxLqRLyDiF73LsmscUn7VugUPH9gy1VyFjw7aJnY5PWkk58p5O8Na + cx3jzd0VBbB7oOoQWkqaOasbmtgEZPqyjF3Zuiw++hMJz7AEJYVK47UxuX4T + RVRjEtcXC0WxIscjU8X5BeZTLG33ZdmZAYYxe07lSkaFeBFyKy5ysXoLYsOV + FBZzq6lgC7nDwqmZokl/CnKK9dSTG2pj0glqwBqw7lnj+qHFeLIaxmDBTYtw + n42yUOhNDM1Vkdo6z8N1Nd6VYYtXTtMW7Mma5dO97Rm85VeChlStC0ySeAWK + lxZ1IO0mXrkkVk9FAv7cx8qWQ8mKpCyuPRobWQ0rBP9cQHXeUIGe4ZiuA0fP + HmYQmSSavfQcr0bfVIrd41W1KGTNMUDV/qCa8G7fEgNornGXPZdYq6Mqy19Z + vzd4z0bVBdVpttsYuRR3oq9xnGmsfRlW3CvAa8M1NaXMW6tXCGmJuQ1ibLwP + utRaXu86Cm37H+DC9ccY5kct8v+eGcsFnsjvTHz1ReFfRkojq/JMXWSktK8v + KRY6UTw/0bl4CK8cKDsokmM9LBnBhoBYloPJs4PFBSrTg8blH81mKy+CRVaw + AWNcl3dBjxacLdkWCL33ff9jAF7QoZV2jWNbYx+McKc9l0Sjr0uwNRUC0vhR + ppwV9s2tEtQdo9rYEnIJ0F/42TXILXFOD+iRn0WhtGs8GRjK0yZwO8o+93md + a98yDlFHz2avHgA7SwHWRKpvMbbdxuDGripstEiSYEuK7uplwvKQFwbCMVRV + doQL7JOK8mf5cojynKbP1VPePOrDdbsPb9+HbYrNHn4T0gt8jcWycQk+rr5i + XNVTrDFNETyvNmwB97WUofalpOFVLURuX+mIe54rf7+DHSbdFGwFXRLYqL0h + jlQW//r+d8IY3CynU3Y1u5yMrul0ORvNLi8n1x77bYF32FGi4vH9x3syvoEZ + jBMYw3Q4SegCk3UX9/d1AI6cb2kAsFIvVnYRd/cfnn4iY0qvr4GNRssFLct4 + p/QZBUdZuM/xXiHCSa/k3LF7/9vzwx0ZJaNxMpleDsdXUzaZXdV+6cyqiPey + +4tcixoXePB1ivaR905CjT5++dVg/3OwLbapHg+q2/b+48NPDx8+3uMV0Qdp + 27vclCEb3vSJ977OPXwq9Qagr0t89b0RbE7nUXugOn/tYKQG/sH6CwAA//8D + ABMy6zn+GgAA http_version: - recorded_at: Thu, 16 Jul 2015 17:23:12 GMT + recorded_at: Tue, 28 Jul 2015 20:51:17 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/should_have_the_correct_attributes.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/should_have_the_correct_attributes.yml index 05553684..f3241c24 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/should_have_the_correct_attributes.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/should_have_the_correct_attributes.yml @@ -8,20 +8,17 @@ http_interactions: string: | - John - Doe - mercedes@okuneva.ca + Card + Holder + delta@nolan.biz Card Holder - John - Doe 10 Lovely Street Northwest - Company Herndon - Alabama - USA + AL + US 35005 fake-paypal-future-nonce @@ -47,7 +44,7 @@ http_interactions: message: Created headers: Date: - - Thu, 16 Jul 2015 17:23:08 GMT + - Tue, 28 Jul 2015 20:51:10 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -68,29 +65,29 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"ca8201276ee217bdbcff8c562d718515"' + - '"e8807c1f07857a2085c549179f3788b4"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 6d83b516072f5e70a41bc1cd6cd46717 + - d95b3cc5f6b7bd7b8124ce11e0a7d816 X-Runtime: - - '0.250154' + - '0.282431' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAHzop1UAA6RTuXLbMBDt/RUc9iQkOdY1EOUikyK106TxLImViBhYIAAo - if76gKQuh2kyLt+xB/aRfHvSKjmg89LQJp3mkzRBqoyQtN+kP16+Zct0Wzzw - qvHBaHTFQ5JwKYr5bDZ5XCxXnEXQcVGraqCQRfxe0lP7/nsVFkd9PH2ZcXav - du6ddD5kBBqL76Ymzu6ITldwQV8NcnaDnVgZbYHahKTapME1mLKeRw1SFd0o - FOifzVtDeIC8As4GqTPZ2hCOSndwGnFHLL0MY2/lEAKKDEISWoubVEQYpMa0 - mE2mT9lkkU3nL9PFeva4nix/cnYr6OsbK/6v/lYwzO+jyHYSlfDXlYQMWQVO - +HNTcA7a88YWWgsqg6oyDYWPjs4wsgxkpIN5QypWC1u7OWcDumjDTX8BYS4M - PuMJtFWYx3Tu7t07Be6gUZfnlsYoBEqL7qacncWrWWrYY9Y4VdQhWL9mDLzH - 4PPSgaTgEPfxGkdou0ks7q2RwqvGUBvxqszesOEtuaX9FukgnaHOsvFAojSn - +MVeJ1xmfjLSvscnY+17+Kb0lZM2xJ/xH0FGBxsH9TfnexKEcBgPN2oTl7/+ - y38AAAD//wMAGgKFn/4DAAA= + H4sIAD7rt1UAA6RTy27bMBC85ysE3SXKTlynBi0HKFD0A9JLL8FKXNtMyaVK + rmLLX19Kih+teily3JnZB2ckuTlak7yhD9rROp3lRZog1U5p2q3T789fs8d0 + U97Jug3sLPryLkmkVuWn+2I5mxcPUsSixyJX74E4i/WpokV3+vWZlwd7OD7M + pbhle/VW+8AZgcXyC3glxQ3Q8wbO1TdnFHoprkjP1842QF1C2qxT9i2mYsDR + gjalQsPwRM4A5ZU+STHCvaDZO8JJ2xaOE+yAVdA81dYegVFlwAl3Da5TFUvW + FtNyXswWWbHM5o/P82K1mK1mxQ8prg1Df9uo/+u/Noz7hySyrUajwuUkpTmr + o5PhfSh4D937xQ10DZgM6tq1xH8qesFEMoIRZvcTqXxlqu8PUozVmRs9fQXC + XDl8wiPYxmAek7nxe1Aq3EJrzs+tnDMIlJa9p1K8kxextrDDrPWm3DM3YSUE + hIAc8sqDJvaIu+jGAbp+k4h3WyR+sch7p16M2zkxviVvaLdBetPeUS9ZByBV + uWP8YC8bzjs/GOkw44OxDjNCW4Xa64bjv/iPIKNCTIP6GwsDCEp5jMZNxsTj + L7/ybwAAAP//AwDtfSRQ/QMAAA== http_version: - recorded_at: Thu, 16 Jul 2015 17:23:08 GMT + recorded_at: Tue, 28 Jul 2015 20:51:12 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/succeeds_authorization_and_capture.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/succeeds_authorization_and_capture.yml index 1e783f48..42054b25 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/succeeds_authorization_and_capture.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/succeeds_authorization_and_capture.yml @@ -8,20 +8,17 @@ http_interactions: string: | - John - Doe - keven.marvin@wintheiser.name + Card + Holder + leon.upton@lemke.info Card Holder - John - Doe 10 Lovely Street Northwest - Company Herndon - Alabama - USA + AL + US 35005 fake-paypal-future-nonce @@ -47,7 +44,7 @@ http_interactions: message: Created headers: Date: - - Thu, 16 Jul 2015 17:23:09 GMT + - Tue, 28 Jul 2015 20:51:10 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -68,31 +65,31 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"7ac59927e6b73d96ffa81165ff3a3cbb"' + - '"5759ad1f3ed480e51e92010b0f1903b8"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - dc6caa46b1e82d4eb73b0076604dac6d + - f48800a40ce95567ee6249ffa26dd693 X-Runtime: - - '0.260783' + - '0.383089' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAH3op1UAA6RTPZebMBDs71fw6EHGd9g+PxlfkZci9aVJc29Ba6OctCKS - sM39+gjwV0KK5KWc2Znd1Q7w7Umr6IDWSUObOEtncYRUGSFpv4m/vn5OVvG2 - eOBV67zRaIuHKOJSFI9Zvsxn+YKzAHou1KoayCcBf5SUdx8/nv3yqI+npzln - 99VevZPW+YRAY/HF1MTZHdHXFVzQJ4Oc3WBfrIxugLqIpNrE3rYYs4FHDVIV - 73hASjXYg6SXoyRfo3Ro097O2ajp1U1tCCc9dnCacEcsnfRTbWURPIoEfOS7 - BjexCNBLjXExn2V5Mlsm2eI1W67nj+vZ6htnN8Pgbxvx9/7n4L8ZxvlDJslO - ohLuupKQPqnACnduCtZCd964ga4BlUBVmZb8r4peMJGMZKC9eUcqnqrlYmE5 - G9GlNt70OxCmwuALnkA3CtMQ0929B6XAHbTq8tzSGIVAcdHflLNz8SqWGvaY - tFYVtfeNWzMGzqF3aWkhxGoR9+EaR+j6SSzsrZH8m0ZfG/GmzN6w8S1pQ/st - 0kFaQ71k44BEaU7h071OuMz8z0iHHv8U62oS69DDtaWrrGx8+Cv/EGRQsGlQ - v3NuIEEIi+FwkzZh+etP/RMAAP//AwCndM5VBwQAAA== + H4sIAD7rt1UAA6RTy5KbMBC871dQ3EHYZWLHBXirUpXKB2wuuWwNaIyVlUaK + JGyzXx8BfiXkktrjdPc81A3F7qxkdETrhKYyXqRZHCE1mgtqy/j7y9dkE++q + p6LpnNcKbfUURYXgVb7aZMt8/algoRiwwDUHIJ+E+r2mvH//9dmvT+p0Xi0L + 9sgO6r2wzicECqsvYHnBHoCBl3CtvmnJ0Rbsjgx8o5UB6iMSsoy97TBmI44K + hKwkako74zU9S1RvmAra64JN5CAzB004a97DeYadsHbCz7WNRfDIE/CR7w2W + MQ+lFwrjapkt8iRbJ8vNyzLb5ovtIvtRsHvD2N8Z/n/994Zp/5hHshcoubud + xIVPmuCnuwwFa6G/XGygNyATaBrdkf9TMQhmkgkMsNdvSNUqd8c25D1VV27y + 9CcQplzjM55BGYlpyOfB71HJcQ+dvD631loiUFwNnhbsQt7EQkGLSWdldfDe + uC1j4Bx6l9YWBHmL2AY3TtAPm1i4WyH5V4X+oPmr1K1m01tSQ+0O6SispkFS + OiBe63P4bG8brjs/GOk444OxjjNcV7vGCuPDH/mPIIOCzYP6G3MjCJxbDMbN + xoTjbz/0bwAAAP//AwC/zJHXAwQAAA== http_version: - recorded_at: Thu, 16 Jul 2015 17:23:09 GMT + recorded_at: Tue, 28 Jul 2015 20:51:12 GMT - request: method: post uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions @@ -104,14 +101,14 @@ http_interactions: 50.00 - 4c766r + Solidus + 45svg6 jane.doe@example.com - Solidus sale headers: @@ -131,7 +128,7 @@ http_interactions: message: Created headers: Date: - - Thu, 16 Jul 2015 17:23:09 GMT + - Tue, 28 Jul 2015 20:51:11 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -152,57 +149,57 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"b2e9ad624a873ae82a3dd25f384be505"' + - '"3ba466d886cc8333c4beb46c538d9eb1"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 92d7eab5ca1a99c70275a513b656a637 + - 17fd197185778a34e96214794af92265 X-Runtime: - - '0.218080' + - '0.279134' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - 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 - eoAvdqso6K7DaLzGb/4GAAD//wMARyWmwZAUAAA= + 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 http_version: - recorded_at: Thu, 16 Jul 2015 17:23:09 GMT + recorded_at: Tue, 28 Jul 2015 20:51:13 GMT - request: method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/f9v5pp/submit_for_settlement + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/2dpb28/submit_for_settlement body: encoding: UTF-8 string: | @@ -227,7 +224,7 @@ http_interactions: message: OK headers: Date: - - Thu, 16 Jul 2015 17:23:10 GMT + - Tue, 28 Jul 2015 20:51:12 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -248,54 +245,54 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"70948fb746a5481e7dba8f857b5d6fb8"' + - '"b5b76a4dd4b8fe14a3bf3ee76ab3b06e"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 0cf8f1bb4bcf4a2fe2201be08eddf6ae + - 70c724bf71ab2a0ecd3c725a680a42a0 X-Runtime: - - '0.290902' + - '0.290911' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - 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 - QPTqbwAAAP//AwCIo8X71hYAAA== + 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 + i1RzxnrTxa/+AgAA//8DANGARo/wFgAA http_version: - recorded_at: Thu, 16 Jul 2015 17:23:10 GMT + recorded_at: Tue, 28 Jul 2015 20:51:14 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/succeeds_capture_on_pending_settlement.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/succeeds_capture_on_pending_settlement.yml index 272ee6cd..4da25fb6 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/succeeds_capture_on_pending_settlement.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/succeeds_capture_on_pending_settlement.yml @@ -8,20 +8,17 @@ http_interactions: string: | - John - Doe - pasquale_lynch@schmeler.us + Card + Holder + mariane@bins.ca Card Holder - John - Doe 10 Lovely Street Northwest - Company Herndon - Alabama - USA + AL + US 35005 fake-paypal-future-nonce @@ -47,7 +44,7 @@ http_interactions: message: Created headers: Date: - - Fri, 17 Jul 2015 16:06:51 GMT + - Tue, 28 Jul 2015 20:51:12 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -68,31 +65,31 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"8eec972106219ec38f4e5b80c495968c"' + - '"233e85692640d1907061f1bc0f7fb7ca"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 559cf213fc070565cf1d6ecdce3043dc + - 91155dee88029c54953794d8581c1bd7 X-Runtime: - - '0.256332' + - '0.228209' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIABsoqVUAA6RTuXLbMBDt/RUc9iQkWbIUDUi5yKRI7TRpNEtgJSLGZQC0 - SH99QFJXwjQZl+/YA/tIumuVTN7ReWF0kc7zWZqgZoYLfSzSHy/fsk26Kx8o - a3wwCl35kCRU8PJxs9gs18s5JRH0XNRYDTpkEX9UetV9vH0J65M6tcsFJfdq - 7z4I50OmQWH53dSakjui1yVc0FeDlNxgLzKjLOgu0UIWaXANpmTgUYGQpQX/ - 1oDEvew0q589qxVKdHnjKRkdvdfWRuOkwwHaCXfCyosw9TKHEJBnEJLQWSxS - HmEQCtNyMZuvstk6m69f5k/b2dN2NftJya1gqG8s/7/6W8E4f0gkOwiU3F9X - 4iJkDBz356bgHHTnjS10FmQGjJlGhz8dvWFiGclIB/OKuuQre/AVJSO6aONN - f4HGnBt8xhaUlZjHkO7uPTg5HqCRl+dWxkgEnZb9TSk5i1ezUHDErHGyrEOw - fksIeI/B55UDoYNDPMZrnKDrJ5G4t0Id9gpDbfhemqMh41tyq4871O/CGd1b - Cg+aV6aNH+51wmXmJyMdenwy1qGHbyrPnLAh/pP/CDI6yDSovzk/kMC5w3i4 - SZu4/PWX/g0AAP//AwD3/5t8BQQAAA== + H4sIAEDrt1UAA6RTy26cMBTd5ysQezBDOspkZJhIkap+QLrpJrrYd8CNH8Q2 + M5Cvr4F5pXRTZXnPOffhc4DueiWjA1onjC7iVZrFEWpmuNB1Ef98+Z5s4l15 + R1nnvFFoy7soooKXeb6+32yyR0pCMWKBYw1on4T6o9Lr4eP90T8c1bH/llNy + y47qvbDOJxoUls9gOSU3wMhLOFc/jORoKbkiI8+MakEPkRayiL3tMCYTjgqE + LBVYARqfKqFdyoCSGR4FbWM0Ltr20C+wI1ZO+KWWWQSPPAEf+aHFIuah9EJh + XObZap1kD0m+ecmz7Xq1XeW/KLk2TP1dy/+v/9ow75+SSPYCJXeXk7jwCQtO + utNQsBaG08UtDC3IBBgznfafFaNgIZnBAHvzhrpsDuz+TVEyV2du9vR38Dnl + Bp+wB9VKTEMyN35PSo576OT5uZUxEkHH5egpJSfyIhYKakw6K8vG+9ZtCQHn + 0Lu0siC0t4h1cOMIw7iJhLsVav+q0DeGv0pTGzK/JW11vUN9ENboUVI40Lwy + ffhgLxvOO78Y6TTji7FOM1xXOWZF68O/+I8gg4Isg/obcxMInFsMxi3GhOMv + v/IfAAAA//8DAOpctL39AwAA http_version: - recorded_at: Fri, 17 Jul 2015 16:06:51 GMT + recorded_at: Tue, 28 Jul 2015 20:51:14 GMT - request: method: post uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions @@ -104,9 +101,9 @@ http_interactions: 4002.00 - d5pfsb - 38284741 Solidus + hvc3km + 22538809 sale headers: @@ -126,7 +123,7 @@ http_interactions: message: Created headers: Date: - - Fri, 17 Jul 2015 16:06:52 GMT + - Tue, 28 Jul 2015 20:51:13 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -147,57 +144,57 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"be12fe01fd4433e847595df5b4b3c2cb"' + - '"4eb1590ad1fc59237b7f84d922fd8f4d"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 2c3a1c7b43cc086420aee73e71aa525c + - 9d1623c2fb50446d362fb112d1da253c X-Runtime: - - '0.346304' + - '0.435357' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - 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 - AL7YrTZRcx164zV+8zcAAAD//wMAFfIP/pIUAAA= + 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 http_version: - recorded_at: Fri, 17 Jul 2015 16:06:52 GMT + recorded_at: Tue, 28 Jul 2015 20:51:15 GMT - request: method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/7zvnqt/submit_for_settlement + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/3cykjj/submit_for_settlement body: encoding: UTF-8 string: | @@ -222,7 +219,7 @@ http_interactions: message: OK headers: Date: - - Fri, 17 Jul 2015 16:06:53 GMT + - Tue, 28 Jul 2015 20:51:14 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -243,54 +240,54 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"24e539953d852f47bb3cec705c5e41b6"' + - '"b20f10a084f6ddf782c49ef64462f4b0"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - cad160d41c3a2cc7460f5707654372a4 + - 1c53d551520e48b63d062c96ba259685 X-Runtime: - - '0.297681' + - '0.238789' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - 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 - Pw8r81F9izoLolf/AAAA//8DAPjUaR31FwAA + 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 + BpoS1s9W9R3rbBe9+hsAAP//AwBIeKWuCxgAAA== http_version: - recorded_at: Fri, 17 Jul 2015 16:06:54 GMT + recorded_at: Tue, 28 Jul 2015 20:51:15 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/Previously_consumed_nonce/should_raise_exception.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/Previously_consumed_nonce/should_raise_exception.yml index 509f37b9..a3a168f3 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/Previously_consumed_nonce/should_raise_exception.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/Previously_consumed_nonce/should_raise_exception.yml @@ -8,20 +8,17 @@ http_interactions: string: | - John - Doe - virgil_dickens@heidenreich.com + Card + Holder + shaniya_quitzon@jacobs.us Card Holder - John - Doe 10 Lovely Street Northwest - Company Herndon - Alabama - USA + AL + US 35005 fake-consumed-nonce @@ -47,7 +44,7 @@ http_interactions: message: Unprocessable Entity headers: Date: - - Thu, 16 Jul 2015 17:23:07 GMT + - Tue, 28 Jul 2015 20:51:09 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -70,28 +67,27 @@ http_interactions: Cache-Control: - no-cache X-Request-Id: - - 93fef420915c19430f695d9eaa847c59 + - d80da1450e7e7ae0c6651d3badd9fe8e X-Runtime: - - '0.041567' + - '0.067464' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAHvop1UAA9xVS2+bQBC+51esuBNsWVFaCW8apaqiquolzTkas2Ozyj7Q - 7OKGf98BY4xfqdX21BPM982bmSG/e7NGrJGC9m6eTK8niUBXeKXdap48//iS - fkju5FUOlU6RyFNKGCrvAsorIfIOCu3rIIjYVDhPgAiaJOupog7RW6SN+K4u - kxU0Fl1MLcbSqy182mrHbvkx0ob2CuXH2XRym2fd+z4NMZJe1BF7r6GxC28S - 2efwssnhxXlXYJ4N2gdeLIYAK5QP4JyPog4oQJxyIawnDlWCE614nWdb03Ed - 2UEhPRCGDmWnW5QXhErHtAD6N22b3s6m/0/bGFloY3i0U1CKBzkct+HMTLbO - zthyfw67ztBo4Mdp8GwT2HBuLZaaQkwdWJRffenybARsdQxskc+ee7sTh92y - oI1ca1pp86J08YoufCpRK3SEuiivC285p07r/cFpxdIbhbSJ8MCyeOwALvGA - vKzJF1R4UZWdUoiEGIc404n45tdoGvHUEXl2oLD3td8iOoVqIL97iuVPDGx2 - xI0NuXsVuEY+bJ7temyAvfR9AUbHRj4iOeW5zgEZqxGu+O7KewMLsJBnvbwf - rnaRmrRdwhRMVcJMPj/dt2GPibFh5UME09FydjOZ3PDVGEG/H+yjS5x2uyiX - 8Irsw4XaYo8dHqRec+fIV5EL228k/3X0stnMXKSanYyRUX5HxrnCtS4wDZwt - M6lWwmkzT1ovezu7JKgV50QFn454Ru+CBd5t7Z/frKu/uXJ8Q0/8gX8BAAD/ - /wMA8MqaFb4HAAA= + H4sIAD3rt1UAA9xVTY/TMBC991dYubtpqVYLkpsFIaE9rLgse67ceNoaHDuM + nbLh1zNJk9RN22UFnLjZ782XX2Ym4u65MGwP6LWzy2Q+nSUMbO6Utttl8vTl + E3+b3GUTIUvNAdEhR/Clsx6yCWOihXxzHC4s1CUsE4ko6yTtqLzywRWAh+uL + tkSWsi7ABl5A2DnVw5e9jmzPx0iT2inI3i3ms1uRtudTWoaAel0F6KL6ulg7 + k2RdDatDDSvrbA4iHaxHUQrwXm4h+yitdYFVHphkl0KwwiGl2knLmutUpL1r + /I509JAO8INC6WWJRI6gdOC5xH8j2/x2Mf9/ZCNkrY2h1uZSKWpkfy7DlZ5s + gl3xJX3GqhMUNXxcBvU2ysJfG4uNRh+4lUWjCSqRRkBvY2SP3DujAEV6RIbx + KqQ2mSe9dC1X3ysdfjr7/qvM3dpPK08VtQYvt01z3bUpjhWxPueYfJ3EPiBA + GKj5jD24PZiaPbaESEcGJ5/nOYBVoAbys8Ow+wGe3M642NG4XBod6uwe0Cpn + SbAeic0QtrQDsw8PIu2OMZu7ygaseTMLXJpyJ99kT4/NbJzjsV/pfJCmpbPF + zWx2Q7MbQb9vr7N9yNuJyDbyG1AM66sCOmy8FjrLYyBXBnrXqTq0+/WmPnz7 + gBUFiZGovjNnoWCvc+CeqiWGa8WsNsukiXIyORuUlaKaMKeGDFfsXjFGx9n5 + 880x+ZtdQ5vswn/wFwAAAP//AwCJ7vRuRAcAAA== http_version: - recorded_at: Thu, 16 Jul 2015 17:23:07 GMT + recorded_at: Tue, 28 Jul 2015 20:51:11 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_user_with_an_invalid_email/fails.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_user_with_an_invalid_email/fails.yml index 67098447..71e13042 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_user_with_an_invalid_email/fails.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_user_with_an_invalid_email/fails.yml @@ -8,20 +8,17 @@ http_interactions: string: | - John - Doe + Card + Holder quux@foo_bar.com Card Holder - John - Doe 10 Lovely Street Northwest - Company Herndon - Alabama - USA + AL + US 35005 fake-valid-nonce @@ -47,7 +44,7 @@ http_interactions: message: Unprocessable Entity headers: Date: - - Thu, 16 Jul 2015 17:22:52 GMT + - Tue, 28 Jul 2015 20:50:44 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -70,27 +67,26 @@ http_interactions: Cache-Control: - no-cache X-Request-Id: - - d1b2a4a25d1c9c1fd14224437778ac30 + - afc56437112eb4fd6ccb136fd0de1915 X-Runtime: - - '0.132499' + - '0.095276' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAGzop1UAA5RVTW/bMAy991cIvitO0HXoQVFXdBuKYdil63lgLDoWpg+P - krP63092EsdO0jY7xXyPpPihp4i7F2vYBilo75bZYjbPGLrCK+3Wy+z551d+ - m93JKwG15kjkiROG2ruA8oox0UOh+xwMFtsalxkQQZvlO6poQvQWaWue991z - e/Zgdwm8Qnm7+Dj/IPL+e0xCjKRXTcRdvtDalTeZRAvaiHygJ0EWQ4A1yi+d - E9OBgWPabcBoxUpPFuJM5HunQ2n5pLadGQa7htaii9xirLw6bunscLos58NE - Qah05AXQpakSvdLGpO1xUCrtKkyafic0fyU2zfy4kgSNdjqeQ5oBgQ2vbb7U - FCJ3YFF+85UT+QjY+xjYI589ivxgDtenW5r80zQvn0rvf62AZoW3qYoef3t8 - nVl5o5C2OR+SzR57IDV1RF421gt6uqiv3ilEQozDOYs5++43aFr21BMiP3KY - 7PclolOoBvKHp1j9xZDCTripvmwNrpUP299OZFtgUr4vkjxiKx+RnPKpzwEZ - uxGu02Mi7w2swILId/b0uMZFanknZQ6mruBaPj/dd8eeEuPA2ocIpqfl9c18 - fpO0M4Lev8onGuXOuwJlCb+R9+rfAsea3Lkdsvg6pq6mU0zvqC7b7YWL1KQk - Y2RU3EmwULjRBfKQSk0MT4+Q02aZdVkmEi0JGpVqoqKCVNx5vwv0ehDpf76E - 6T0981/wDwAA//8DALZPALpIBgAA + H4sIACTrt1UAA5RUTW/bMAy991cIvitOtnXoQVE3DBt6KHbpeh4Ui06E6cOj + 5Cz+96Pd+CtJ1+wmvkdSFKlHcX9wlu0Bowl+na0Wy4yBL4I2frvOnn9843fZ + vbwRqjIcEANyhFgFH0HeMCY6KLbHwWCpqWCdKUTVZPmRKuqYggN8MS/79lzP + jnabIGiQd6uPyw8i785TUqWEZlMnOOaLjdsEm0lwyliRD/QsyEGMagvya+vE + TGTKM+P3yhrNyoBOpYXIe6extHxW29GMg12pxoFP3EHaBX36pIvNabNcDhMF + gjaJFwqvTUX0xlhL0+NKa5pVnD36jdD8lVjq+WklBE1mOu0D9QCVi69NvjQY + E/fKgfxC2UQ+AXofq3rkIVgNKPIRGX5QOzf5u64Pn8oQfm4ULorgqJAO/3cH + W3PXZR4LYf1Vp+R1nY0JAdJArZbsMezBNuypI0R+4jCbyiGB16AH8nvAtPsD + kcLOuGmgDQX919TIB0Cvg6c+9cjUDWFL6pafH0V+PM6lVfuEDW9lxZWtduqd + fH5qZXaOT+OqEJOyHS3f3y6Xt/SNJ9Dbv+pMLtwHX4As1S/gnRBfgFN5HN3G + LKFK9Kh5a2ilmbJ5GXzCmpJMkUlxZ8FCw94UwCOVSgynfeCNXWdtlplaSlS1 + ppqw2Ckq7rLfFdIZ9fKfS4lW24W1/BcAAP//AwDqfmK70wUAAA== http_version: - recorded_at: Thu, 16 Jul 2015 17:22:52 GMT + recorded_at: Tue, 28 Jul 2015 20:50:46 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/decline/fails.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/decline/fails.yml index 90f42e64..92440540 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/decline/fails.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/decline/fails.yml @@ -8,20 +8,17 @@ http_interactions: string: | - John - Doe - baron.terry@boehmrobel.com + Card + Holder + jude_brekke@bradtkekshlerin.co.uk Card Holder - John - Doe 10 Lovely Street Northwest - Company Herndon - Alabama - USA + AL + US 35005 fake-valid-nonce @@ -47,7 +44,7 @@ http_interactions: message: Created headers: Date: - - Thu, 16 Jul 2015 17:22:58 GMT + - Tue, 28 Jul 2015 20:50:55 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -68,51 +65,51 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"415f6da1b9c8317fc769d19f1dc7cc67"' + - '"c225bcb8cbe400ddc3847ca05754a39b"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - f071b09d8bbab5b56189e4362dbd0435 + - 0c6fb0c7d05ec71412a5c02bf46935f8 X-Runtime: - - '0.760617' + - '2.729469' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAHLop1UAA7RYS2/bOBC+51cYviuSX7UbKOpmWyyKxW6xQJseeikoaWyx - kUiFpJw4v75D6kVZfid7CBzOfEMNOa9P8j88Z+lgDUJSzm6Ho2tvOAAW8Ziy - 1e3w/ttfzmL4Ibjyo0IqnoEIrgYDn8bBbOotJpPxO9/FhZahLkoIUw6uX0I2 - 27w8vlfzp+zpeTr2XVur0UsqpHIYySD4myfMdy2B1qekXn3i4LvtUisjnuWE - bQaMprdDJQoYukYOGaFpEBLB2bUCITZ/hBySTPAQ0ms08t0SobF5whn0dliS - 557sCUJJVR8bCSAKYoeogdrkcDuMcaloBsNg7I1mjjd3Ru++jeY34/HNbP7D - d1sDY1/k8Xn2rUH5fBMRZ0khjWXjUkyVExERy2pTIgTZDLW2qy8lKAtpmmKs - HRLHAqSs5WWUk5c6vpWsTgOnkwK2tMUeiXGFOhTp+qFlvIOP5S8+rxK0EKkE - gGoOMfIG//A1pJvBV6Pw3S1AawnPClisr7VSfeFCJU8g0ains9zmEUmp2gSf - QbCY4+kaSQsSsMKqCu5SEpKM+G61bgE5l4qkDpYbBJOZ58181xbZV1AwJTZG - 7JA0T8g4uP+qb6IvP2Q1Qau7XWaTfWaswMDSKFhMvS27WtM3NPG7Z1g1MQYA - k1YO+HJwZ+Ck3WU7zK8rqGqXV5aV2cPdUxRYLCyYeqPxYqExTSR9XVGOflzw - nUp9wmZtIxKexlgk5tgfcT34bAQl3FY2RjzTjZOSFG/zgfEnZnK/lrWw8j75 - 0qFSFoRF0A2zrWiMXn/bp3eDFqmrROkiMNnbk9b4GEKq2kOXy1a5JEVa+x1y - ngJhw0D3Zg01yhZcCIyUg6VXpNp/a9NtTW0CzzkVxh8n40wlwWise8GWcAd6 - A0Tg7Y29DtxIO2gsiy3flySVUFlZniRAUpVgekDrtiWrYTQjK3AKkQaJUrm8 - cV0iJSh5HQpCme58KzzgE9noKejmZJMBUz8zUAmPf6Z8xd01pu11zlYfgK0p - zk8NuJWExSF/xhHQ7N88EdNJF0hI2EPrWkdaQ01HnwajxWJUtfdpo0NXBE+t - 7K4FDUBATjCPvnDUVf/XOlmEMhI015fcHXdug1H8AViwzJLHXyvfLVe1rmD0 - sTBtLDTJikemOE1FMI0n01k0h2k4Gs3HExKPYbmchfGchN4I/7Bn7DNt9n6D - LrQGlnFHxg97kqXRWxYC3ShLaRcB6IFasZmhRBUyKPUQ65lpBDYmWq+xYGSO - +0M5o/7FMu4JbROylg6SMS66mG0+1cFbQ7D/uMOA7a26g3/3bgcx9oZVGSHi - F0SmuLEpSs72HqbhvSQyzVj3RImJDBYltlS2aS54hN5s3xtyG8/TxbBbe2QH - hZQmuMtRs9YR3oewd0G3JpNFqPIuFWypoy07lfYZ5HHqV+bcUfpXpe+FFNBY - X0YDy2OcQAUN8BgdLIN2IiWsruYVhMsiOt0a778lVJoD3bRJiZ0EyQ747lFQ - P/sYkWrCdcaI7tscH9S1P+fxFusU55K9yvR/HEp1gu0fqRXiNNZRgQ8xtRpy - NgWr7/Ek/luf6wiXqGCnM5fGifPZdXPVPC4i09lbr1pZpxL3VN3bvBW9DSMx - +wgqHxzUkO17xTHx49t7b/zfp49/fv+6PSxMpkRUmgZYzh+dLJWkcxM7nqDJ - Tp+1dKVVW+7dZEdgQH7Vx2HnR5Ltd77eZ5AzXntOmIVHp+DR+Xfp5Lto5p0w - 7Y7MuRMn3CWfPC764HHh547XzN43efl+dUEj921j2ywAl20yB1e/AQAA//8D - AP6NCH0hFgAA + H4sIAC/rt1UAA7RYW4/aOhB+769AvGcTboWtsulZHemoDz3VkXqT+lI58QAu + iZ3aDgv99R07N4cAC2yPtCvhmW+c8XguXxK+3WXpYAtSMcEfhqO7YDgAngjK + +Oph+PnTP95i+DZ6FSaF0iIDGb0aDEJGo/Fsfn8/m70OfVwYGeqSNeHaw/Wv + mM/2v37e6/lT9rSbjkPf1Rr0kkmlPU4yiP4mkoa+IzD6lNSrdyKlIEO/lRh9 + IrKc8P2As/RhqGUBQ9/KISMsjX4UFL7HEjYb+CuWhOoNbNQ6Bcn4XSLuik3o + l0Bjkq8Fh95GS7LryZ4gVkz3sYkEooF6RA/0PoeHIcWlZhkMo3EwmnnB3Bsv + Po2DNzP8m30L/dbA2hc5vc6+NSifb+/GWzJIqWpcokx7CcZWVZsSKcl+aLRd + fSlBWczSFG/dI5RKUKqWl/edb+qbrmR1QnidZHClLba93MPYVYDmck/oT1x3 + pVVaAujG71EweC+2kO4HH60i9A8ArSXsNHBqIlmpPgip10+g0Kinc9wVCUmZ + 3kfvQHIqOGZnLWlBElZYUtHj+9Cvfra6XChNUg/LDKLJLAhmoe+K3IMXXMu9 + FXskzddkHH3+iHE+Ij9nNUGrx2Nmk1NmvMBrZEm0mAYHdrWmb2jL8zPHGqEY + e0xRNRDLwaOFk3aXuopr65eVT7XLC4vI7uGfKAEsDR5Ng9F4sTCY5iZDUz+e + eVz0hSlzwmbtIta2hbXdblD3tENlYyQy0zAZSTGaGy6euAleI2thZTzF0mNK + FYQn0L1mV9EYvTzal9d+izQFok0R2OztSWs8hZjp9tDlslUuSZHWfsdCpED4 + MDL9wECtsgUXEm/Kw9IrUuO/s+mhpjaBXc6k9cfLBNfraDQ2beBAeAS9ByIx + euOgA7fSDhrL4sD3JUkVVFaOJ2sgqV5jekDrtiOrYSwjK/AKmUZrrXP1xveJ + UqDVHQ49xk3TW+EBn8gep17m52SfAdffM9BrQb+nYiX8LabtXc5Xb4FvmRTc + AB4U4TQWO2z4zf7NEzGdTIHEhG9a1zrSGmp7+jQaLRajanpPGx26IkXqZHct + aAAScoJ59EGgrvpd61QRq0Sy3AS5O9yaoRBqsQEs2fs5pavQL1e1ruDsZ2Hb + WGyTFY/McHbKaEon01kyh2k8Gs3HE0LHsFzOYjoncTDCf+wZp0ybvf9AF9oC + z4Sn6OZEsjR6x0KiG2UpHRv3PVArtuOT6EJFpR6oGZdW4GKS7RYLRuW4P5Qz + 6l8s457QNSFb5YGUQnYxx2d4hXeGYP9x5wGHW3Vn/vHdzmLcDasyQsQPSGxx + Y1NUgp88TMN3SWKbsemJChMZHCrsqFzTXIoEvTmMG9KaIDDFcFz7zA4a2Uz0 + mKNma274FMLdBd2KJ9nu9aJL/Fqi6MouIHkW9AzRK3PtHNmrMvZGwmetbyN9 + pfsXED8LPEP+yiu6kABWAXkBvXJoTbei+28AleZM72wS4Cgdcu/4eOOvn/0c + bWpu6oqB3Ld5fizX/lzHUpxTXEvtKtP/cQTVCXZ6gFaIyzhGBT7Hy2rI1YSr + juNFbLc+1zPMoYJdzlMaJ67n0k2oBS0S28dbr1pZpxJPVN11rHx84h3oz/AP + u49kauOhhhzGlUaTb/OvwfTrx9f/fflyOBpspiRM2d5XThuTLJWkE4kjTzDU + ps9RutKqI/ci2RFYUFi1cDj6AeTwDa/3ieOKl5zzk+/8zDs37W6dczdNuAtm + 2+mpduE8u+Vzxk0fM278lPGSSftHXqxfXL7Ia9trbRaAyzZ1o1e/AQAA//8D + AHYdQ3v1FQAA http_version: - recorded_at: Thu, 16 Jul 2015 17:22:58 GMT + recorded_at: Tue, 28 Jul 2015 20:50:57 GMT - request: method: post uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions @@ -124,14 +121,14 @@ http_interactions: 2001.00 - fmhqjg + Solidus + 497ddg Card Holder - Solidus sale headers: @@ -151,7 +148,7 @@ http_interactions: message: Unprocessable Entity headers: Date: - - Thu, 16 Jul 2015 17:22:59 GMT + - Tue, 28 Jul 2015 20:50:56 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -174,52 +171,51 @@ http_interactions: Cache-Control: - no-cache X-Request-Id: - - e70a3e9204960f2285b1f597da19fac6 + - d57e42c19374b43afd2269898b8ddcda X-Runtime: - - '0.644818' + - '1.179163' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - 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 - /Q8AAP//AwCI4DmF/BUAAA== + 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 http_version: - recorded_at: Thu, 16 Jul 2015 17:22:59 GMT + recorded_at: Tue, 28 Jul 2015 20:50:58 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/should_have_the_correct_attributes.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/should_have_the_correct_attributes.yml index 38a650d0..54698f2d 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/should_have_the_correct_attributes.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/should_have_the_correct_attributes.yml @@ -8,20 +8,17 @@ http_interactions: string: | - John - Doe - kennedi.graham@schowalter.info + Card + Holder + brianne@jaskolski.info Card Holder - John - Doe 10 Lovely Street Northwest - Company Herndon - Alabama - USA + AL + US 35005 fake-valid-nonce @@ -47,7 +44,7 @@ http_interactions: message: Created headers: Date: - - Thu, 16 Jul 2015 17:22:54 GMT + - Tue, 28 Jul 2015 20:50:47 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -68,49 +65,49 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"26cba87b4c3853d1c14e98f5c59e22b4"' + - '"cff443a95121b9ebc373b9f18dccd7f6"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 475cad7556a1b42aacde338430b47af4 + - f4a371f4612583b90d7ec7a349d0227e X-Runtime: - - '0.829404' + - '2.046298' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAG7op1UAA7RYyXLbOBC9+ytUutOkNm9F0+PK1CSVyuQSew65pECyJSIm - ARoAJctfnwa4gaJkLfYcXDK6X4MN9PZI/+4lSwdLEJJydjscnXvDAbCIx5Qt - boePD/84V8O74MyPCql4BiI4Gwx8GgeT68lkPPOmvosLLUNdlBCmHFy/hmy2 - fn2+VperbPUyHfuurdXoORVSOYxkEHzlCfNdS6D1KalXf3Pw3XaplRHPcsLW - A0bT26ESBQxdI4eM0DR4AsYgpucLQRKS/SWjhK9IqkCcUzbnvluiND5POIPe - LnPy0pOtIJRU9bGRAKIgdogaqHUOt8MYl4pmMAzG3mjmeJfO6OJhdHkzHt/M - Jj99tzUw9kUeH2ffGpTPN1Fx5hTSWDYuxVQ5ERGxrDYlQpD1UGu7+lKCspCm - KcbbIXEsQMpaXkb6Oa9jXMnqVHA6aWBLW+yeOFeot6JdP7SMefCp/MXnVYIW - IpUAUM0hRt7gG19Cuh78MArf3QC0lvCigMX6WivVdy5UsgKJRj2d5TaPSErV - OvgCgsUcT9dIWpCABVZWcJ+SkGTEd6t1C8i5VCR1sOQgmMw8b+a7tsi+goIp - sTZih6R5QsbB4w99E335W1YTtLrfZjbZZcYKDCyNgqupt2FXa/qGJn6PDKsm - xgBg0soBnw/uDZy0u2yG+X0FVe3yzrIye7g7igKLhQVTbzS+utKYJpK+rihH - Py74j0p9wmZtIxKexlgk5tifcD34YgQl3FY2RjzTzZOSFG/zifEVM7lfy1pY - eZ987lApC8Ii6IbZVjRG77/tw7tBi9RVonQRmOztSWt8DCFV7aHLZauckyKt - /Q45T4GwYaB7s4YaZQsuBEbKwdIrUu2/temmpjaBl5wK44+TcaaSYDTWvWBD - uAW9BiLw9sZeB26kHTSWxYbvc5JKqKwsTxLA6ZVgekDrtiWrYTQjC3AKkQaJ - Urm8cV0iJSh5HgpCme58CzzgiqzPMXvcnKwzYOpXBirh8a+UL7i7xLQ9z9ni - DtiSCs404FYSFof8BUdAs3/zREwnXSAhYU+tax1pDTUdfRqMrq5GVXufNjp0 - RfDUyu5a0AAE5ATz6DsO7/r/WieLUEaC5vqSu+PObTCKIyUIJsun8Tzz3XJV - 6wpGnwvTxkKTrHhkitNUBNN4Mp1FlzANR6PL8YTEY5jPZ2F8SUJvhH/YM3aZ - Nnt/QBdaAsu4I+OnHcnS6C0LgW6UpbSNAPRArdjMUKIKGZR6iPXMNAIbEy2X - WDAyx/2hnFH/Yhn3hLYJWUoHhOCii9nkUx28NQT7j3sbsLlVd/Bv3+1NjL1h - VUaI+A2RKW5sipKznYdpuC+JTDPWPVFiIoNFiy2VbZoLHqE3m/eG3MbzdDFs - 1+7ZQSGlCe5z1Cx1hHch7F3QrdnrbBb97lLBljraskNpn0Hup35lzu2lf1X6 - nkgBjfVpNLA8xgFU0AD30cEyaAdSwupq3kG4LKLTrfH+W0KleaObNimxlSDZ - Ad8+Cupn7yNSTbiOGNF9m/2DuvbnON5ineJYsleZ/o9DqU6w3SO1QhzGOirw - W0ythhxNwep7PIj/1ufawyUq2OHMpXHieHbdXDWPi8h09tarVtapxB1V9zFv - RR/DSMw+gsonBzVk817xFeDnw7V3Mfv89fPFt81hYTIlotI0wHL+6GSpJJ2b - 2PIETXb6rKUrrdpy7yY7AgPyqz4OWz+SbL7z9T6DHPHac8As3DsF986/Uyff - STPvgGm3Z84dOOFO+eRx0gePEz93vGf2fsjL97sLGrlvG9tmAbhskzk4+wMA - AP//AwCtp5NTJRYAAA== + H4sIACfrt1UAA7RYS5PTOBC+8ytSuXvsvEiG8pidomqXA8sFWLa4ULLVmYjY + kpHkPPj125Jfcpxkkgx7SFXU/bXcavXjs8O3uywdbEAqJvjDcHQXDAfAE0EZ + f3oYfvn8p7cYvo1ehUmhtMhARq8Gg5DRaPY6WMyCyST0cWFkqEtWhGsP179i + Ptv/+nmv59tsu5uOQ9/VGvSSSaU9TjKI3hFJQ98RGH1K6tV7kVKQod9KjD4R + WU74fsBZ+jDUsoChb+WQEZZGsWSEc/jjB1Frkao1u2N8KUK/1BpcvhIcetZL + suvJthArpvvYRALRQD2iB3qfw8OQ4lKzDIbROBjNvGDujRefx8GbWfBm+vpb + 6LcG1r7I6XX2rUH5fHsh3pJBSlXjEmXaSzCgqtqUSEn2Q6Pt6ksJymKWpnjV + HqFUglK1vLzkxby+3kpWZ4HXyQBX2mLbGz2MXQVobvSE/sQdV1qlJYBu/B4F + gw9iA+l+8MkqQv8A0FrCTgOnJpKV6qOQerUFhUY9neOuSEjK9D56D5JTwTEl + a0kLkvCEdRQ9fgj96m+ry4XSJPWwtiCazIJgFvquyD14wbXcW7FH0nxFxtGX + TxjnI/JzVhO0ejxmNjllxgu8RpZEi2lwYFdr+oa2Jr9wrBGKsccUVQOxHDxa + OGl3qUu3tn5Z+VS7vLCI7B7+iRLA0uDRNBiNFwuDaW4yNPXjmcdF/zBlTtis + XcTK9q22xQ3qRnaobIxEZrokIylGc83FlpvgNbIWVsZTLD2mVEF4At1rdhWN + 0cujfXntt0hTINoUgc3enrTGU4iZbg9dLlvlkhRp7XcsRAqEDyPTDwzUKltw + IfGmPCy9IjX+O5seamoT2OVMWn+8THC9ikZj0wYOhEfQeyASozcOOnAr7aCx + LA58X5JUQWXleLICkuoVpge0bjuyGsYy8gReIdNopXWu3vg+UQq0uoslYdw0 + vSc84Jbs7zB7/JzsM+D6ewZ6Jej3VDwJf4Npe5fzp7fAN0wKbgAPinAaix02 + /Gb/5omYTqZAYsLXrWsdaQ21PX0ajRaLUTWyp40OXZEidbK7FjQACTnBPPqI + o7r+X+tUEatEstwEuTvcmqEQarEGHiXrHf2ZhX65qnUFZz8L28Zim6x4ZIaz + U0ZTOpnOkjlM49FoPp4QOoblchbTOYmDEf6wZ5wybfb+DV1oAzwTnqLrE8nS + 6B0LiW6UpXRs3PdArdiOT6ILFZV6oGZcWoGLSTYbLBiV4/5Qzqi/sYx7QteE + bJQHUgrZxRyf4RXeGYL9x50HHG7VnfnHdzuLcTesyggRPyCxxY1NUQl+8jAN + ySWJbcamJypMZHD4r6NyTXMpEvTmMG5Ia4LAFMNx7TM7aGQz0WOOmo254VMI + dxd0a76dx/fTLvFriaIru4DkWdAzRK/MtXNkr8rYGwmftb6N9JXuX0D8LPAM + +Suv6EICWAXkBfTKoTXdiu6/AVSaM72zSYCjdMi94+ONv372c7SpuakrBnLf + 5vmxXPtzHUtxTnEttatM/8cRVCfY6QFaIS7jGBX4HC+rIVcTrjqOF7Hd+lzP + MIcKdjlPaZy4nks3oRa0SGwfb71qZZ1KPFF117Hy2Yl3oN/DP+w+kqm1hxpy + GFcaTb7NvwbvRl//fffX/eFosJmSMGV7XzltTLJUkk4kjjzBUJs+R+lKq47c + i2RHYEFh1cLh6AeQwze83ieOK15yzk++8zPv3LS7dc7dNOEumG2np9qF8+yW + zxk3fcy48VPGSybtb3mxfnH5Iq9tr7VZAC7b1I1e/QcAAP//AwCFwPeP6hUA + AA== http_version: - recorded_at: Thu, 16 Jul 2015 17:22:54 GMT + recorded_at: Tue, 28 Jul 2015 20:50:49 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/successful/succeeds.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/successful/succeeds.yml index 59c80ae0..de040654 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/successful/succeeds.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/successful/succeeds.yml @@ -8,20 +8,17 @@ http_interactions: string: | - John - Doe - audreanne@pfannerstill.com + Card + Holder + kane_spencer@morissettenienow.info Card Holder - John - Doe 10 Lovely Street Northwest - Company Herndon - Alabama - USA + AL + US 35005 fake-valid-nonce @@ -47,7 +44,7 @@ http_interactions: message: Created headers: Date: - - Thu, 16 Jul 2015 17:22:55 GMT + - Tue, 28 Jul 2015 20:50:49 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -68,51 +65,51 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"ecd50d284878868c33ac36895ccc6d31"' + - '"fd9a942ac92027a8e7cb16dd0602c4c7"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 05577e039c611b05ea5a62085c15ec56 + - 7ded0a617301ac38274664219259df6a X-Runtime: - - '0.733125' + - '1.775046' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAG/op1UAA7RYWW/bOBB+768w/K5I8lE7gaJs0GJR7FEskGSx6EtBSZTF - tUSqJOWjv36H1EVZvp19CBzOfEORc36S97TJ0sEKc0EYfRy6d85wgGnIIkIX - j8O311+t+fDJ/+CFhZAsw9z/MBh4JPI/zsbO9H428WxYKBnowgRRacH6Z0Cn - 258/7uVsna03k5Fnm1qFjgkX0qIow/5vLKGebQiUPkX16jPDnt0ulTJkWY7o - dkBJ+jiUvMBDW8txhkjqoyLiGFGKf8lj9QP7kjS9AyPPLhEKmyeM4t4OMdr0 - ZGscCCL72BCeInFkITmQ2xw/DiNYSpLhoT9y3KnlzCz346s7exiNHqbTb57d - Gmj7Io8us28NyufriFgxwWkkmiNFRFoh4pGoNkWco+1Qabv6UgKyAJwDsbZQ - BG4TopaXUZ4u6/hWsjoNrE4KmNIWeyLGFepYpOuHlvH2P5W/8LxK0EKE5BjL - 5hKuM/iDrXC6HbxohWfvAFpLvJGYRsqtleor4zJZYwFGPZ1xbBailMit/wVz - GjG4XSNpQRwvoKr85xQFKEOeXa1bQM6ERKkF5Yb98dRxpp5tikwXFFTyrRZb - KM0TNPLfXpQn+vJjVmOwet5nNj5kRgsILAn9+cTZsas1fUMdvzcKVRNBACBp - xYDFg2cNR+0uu2G+raCqXW4sK72HfaAooFioP3Hc0XyuME0kPVVRlnqc/zcR - 6obN2kQkLI2gSPS1P8F68EULSripbIxYphonQSl4c0nZmurcr2UtrPQniy0i - RIFoiLthNhWN0e3ePr8btEhVJVIVgc7enrTGRzggsr10uWyVMSrS+twBYyn0 - +6GverOCamULLjhEyoLSK1J1fmPTXU1tgjc54fo8VsaoTHx3pHrBjnAPeosR - B++NnA5cSztoKIuds8coFbiyMk6SYJTKBNIDt8c2ZDWMZGiBrYKnfiJlLh5s - GwmBpbgLOCJUdb4FXHCNtmoK2jnaZpjK7xmWCYu+p2zB7BWk7V1OF0+Yrghn - VAEeBaJRwDYwApr9mydCOqkCCRBdtkfrSGuo7ugT353P3aq9TxodHIWz1Mju - WtAAOM4R5NFXBrrq/1onikCEnOTKyd1xZzcYyZaY+jPOJwuos3JV6wpKfhS6 - jQU6WeHKBKYp9yfReDINZ3gSuO5sNEbRCMfxNIhmKHBc+IOecci02fsdutAK - 04xZIloeSJZGb1hwOEZZSvsIQA/UivUMRbIQfqnHkZqZWmBiwtUKCkbksD8u - Z9SfUMY9oWmCVsLCnDPexezyqQ7eGIL9xx0H7G7VHfz7dzuKMTesyggQ/+JQ - Fzc0RcHowcs0vBeFuhmrniggkbFBiQ2VaZpzFsJpdv0G3MZxVDHs157YQQKl - 8Z9z0KxUhA8hzF3gWLFI7mPZpYItdTRl59I+jTxN/cqcO0n/qvS9kgJq6+to - YHmNM6igBp6ig2XQzqSElWtuIFwG0enWeP8todIc6aZNSuwlSGbA94+C+tmn - iFQTrgtGdN/m9KCuz3MZbzFucSnZq0z/x6FUJ9jhkVohzmMdFfgYU6shF1Ow - 2o9n8d/6Xie4RAU7n7k0h7icXTeuZlER6s7enqqVdSrxQNVdxtMnB96K3oeR - 6H04EUsLNGjXr5E//vZ677j/fP7r9xd3d1joTAmJ0A2wnD8qWSpJxxN7nqDI - Tp+1dKVVW+55siPQIK/q43jvR5Ldd77eZ5ALXnvOmIUnp+DJ+Xft5Ltq5p0x - 7U7MuTMn3DWfPK764HHl545bZu+7vHzfXNDAfdvYNgsMyzaZ/Q//AQAA//8D - AJjiUOAhFgAA + H4sIACnrt1UAA7RYS5PaOBC+51dQ3D02BgKkPM7Opmo3hySXZHarcknJdgPa + sSWPJDNDfn1a8ku2gQEme6AKdX/dbvXbDt4/Z+loB0JSzm7HkxtvPAIW84Sy + ze34/ttfznL8PnwTxIVUPAMRvhmNApqEvr9a+W9X08DFg6YhL94Sphw8/4zY + fP/zcaUWT9nT88wPXJur0WsqpHIYySD8QEQSuBZB81NSnz7yNAERuC1F82Oe + 5YTtR4ymt2MlChi7hg4ZoWn4QBj8kDneA8QfGRdUSlAKGAXGn24oW/PALZFa + Jt9yBgNNa/I8oD1BJKkaYmMBREHiEDVS+xxuxwkeFc1gHPreZO54C8dffvO9 + d3Pv3Wz1PXBbASNf5Mll8q1A+XwTHGdNIU1kY1JClROjc2WllAhB9mPN7fJL + CtIimqYYdockiQApa3oZ8MWsDnVFqzPC6WSDTW2xbXT7vqsATXSP8I/Eu+JK + JQBUY/fEG33iO0j3o6+GEbg9QCsJz5gWifZkxfrChdo+gUShAc8yl8ckpWof + fgTBEs4wPWtKCxKwwZoK7z4FbvW35eVcKpI6WGcQTueeNw9cm2RfvGBK7A3Z + IWm+JX54/xX9fIB+SmqKUneHxKbHxFiBYaRxuJx5PbmaMxQ09XnPsEYS9D2m + qBzx9ejOwEmrpS7jWvp15VNpeWURGR3ukRLA0mDhzJv4y6XGNJEMdP04+nHh + P1TqGzZnG7E1Paxtd6O6qfWZjRDPdMekJEVvPmDTYtp5Da2Flf7kawdbXEGw + 33XDbDMaodd7+/zab5G6QJQuApO9A2qNTyCiqr10eWyZa1Kktd0R5ykQNg51 + P9BQw2zBhcBIOVh6Rartt5T2ObUIPOdUGHucjDO1DSe+bgM94gH0HohA7/le + B26oHTSWRc/2NUklVFKWJVsgqdpiekBrtkWrYTQjG3AKkYZbpXL5znWJHnXy + JhKEMt30NnjBJ7K/wexxc7LPgKkfGagtT36kfMPdHabtTc4274HtqOBMA24l + YUnEn7HhN/qbJ2I66QKJCHtoTetQa6jp6bNwslxOqvE9a3hoiuCpld01oQEI + yAnm0Rcc1fX/mieLSMaC5trJ3eHWDIVA8Qdg4YpFu0eMYXmqeQWjj4VpY5FJ + Vrwyxdkpwlkync3jBcyiyWThT0niw3o9j5IFibwJ/rBnHBNtdP+GLrQDlnFH + Jg9HkqXhWxICzShL6dC4H4BashmfRBUyLPmQ6HFpCDYm3u2wYGSO+qGcUZ+x + jAdEW4TspANCcNHFHJ7hFd4agsPHnQb0VXVn/mFtJzG2wqqMEPEfxKa4sSlK + zo5epll4SWyase6JEhMZrF3YYtmiueAxWtP3G641nqeL4TD3BQ0Kt5nwLkfO + Tkf4GMLWgmZtHldvd73Fr10UbdoZS54BvbDolbl2atmrMvbKhc9IX7f0leaf + sfgZ4InlrwzRmQtg5ZBXrFfWWtOt6OEbQMU50TubBDi4DtkxPtz462e/tDY1 + kbpgIA9lXh7LtT2XbSnWLS5d7SrR/3EE1Ql2fIBWiPN2jAp8ai+rIRcvXLUf + z9p263u9sDlUsPP3lMaIy3fpxtU8KWLTx1urWlqnEo9U3WVb+eLIO9Dv2T+M + HkHlg4Mc0vdrEk6/L/71/lxO//784Ut/NJhMiak0va+cNjpZKkrHEweeoFeb + 4Y7SpVYdeeDJDsGAgqqFw8EPIP03vMEnjgteck5PvtMz79S0u3bOXTXhzpht + x6famfPsms8ZV33MuPJTxmsm7W95sX51+eJe24a1OQAe29QN3/wCAAD//wMA + 7HNf1fYVAAA= http_version: - recorded_at: Thu, 16 Jul 2015 17:22:55 GMT + recorded_at: Tue, 28 Jul 2015 20:50:51 GMT - request: method: post uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions @@ -124,14 +121,14 @@ http_interactions: 50.00 - 7rr4gr + Solidus + 9nbvq2 Card Holder - Solidus sale headers: @@ -151,7 +148,7 @@ http_interactions: message: Created headers: Date: - - Thu, 16 Jul 2015 17:22:56 GMT + - Tue, 28 Jul 2015 20:50:51 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -172,58 +169,58 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"b550040df6f3059de2612e50de0e8374"' + - '"88a7059ee55d32fd8b18c50c88872eef"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 93f057a8b3696aff028171eb9a33db2d + - ad4b45d6b4e7bb3f2b54594615bd9971 X-Runtime: - - '0.698272' + - '1.822217' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - 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 - YtSZkjf/AQAA//8DADqjo5mrEgAA + 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 + AP//AwAXIF3+pBIAAA== http_version: - recorded_at: Thu, 16 Jul 2015 17:22:56 GMT + recorded_at: Tue, 28 Jul 2015 20:50:53 GMT - request: method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/ctwrf8/submit_for_settlement + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/3hd4gt/submit_for_settlement body: encoding: UTF-8 string: | @@ -248,7 +245,7 @@ http_interactions: message: OK headers: Date: - - Thu, 16 Jul 2015 17:22:56 GMT + - Tue, 28 Jul 2015 20:50:52 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -269,54 +266,54 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"a763ef0feee3742067d894e957137264"' + - '"91caca85a12c410b3a3c1740a3110104"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 2a4fec0253e0bd0c67d3bbbc47b0b663 + - 8b2ac5431da26f2cfc74568cf4c5805d X-Runtime: - - '0.238483' + - '0.380162' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - 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 - PMMTAAA= + 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 + vBMAAA== http_version: - recorded_at: Thu, 16 Jul 2015 17:22:56 GMT + recorded_at: Tue, 28 Jul 2015 20:50:54 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_completed_payment/can_be_fully_credited.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_completed_payment/can_be_fully_credited.yml index 9dfabc96..ccf7c0a1 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_completed_payment/can_be_fully_credited.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_completed_payment/can_be_fully_credited.yml @@ -8,20 +8,17 @@ http_interactions: string: | - John - Doe - lavon_okon@hermiston.ca + Card + Holder + megane.abshire@pfefferborer.info Card Holder - John - Doe 10 Lovely Street Northwest - Company Herndon - Alabama - USA + AL + US 35005 fake-valid-nonce @@ -47,7 +44,7 @@ http_interactions: message: Created headers: Date: - - Thu, 16 Jul 2015 17:23:00 GMT + - Tue, 28 Jul 2015 20:50:59 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -68,51 +65,51 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"5c572134bdc2a47c3e2730796a1fa675"' + - '"b57b5b4c0a0d74e2e8040d7261ffce25"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 2d65fa70f259dfb87789e6b5d4a78c87 + - fcdb6c1e164475b6548144d53081d5d4 X-Runtime: - - '0.745067' + - '2.372235' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAHTop1UAA7RYS2/bOBC+51cYviuS/KjjQFE36GJRbHeDBdruoZeAksY2 - G4lUSMqO++t3SL0oy44fyR4ChzPfUEPO65OCjy9ZOliDkJSzu6F/7Q0HwGKe - ULa8G37/9odzM/wYXgVxIRXPQIRXg0FAk9D3R/588mEcuLjQMtTFK8KUg+tf - EZtufz3P1WyTbV4mo8C1tRq9oEIqh5EMwj/5igWuJdD6lNSr3zkEbrvUyphn - OWHbAaPp3VCJAoaukUNGaBqmZM3ZI3/i7LcViIyi3+w6JoFbqjUwX3EGPfMF - eenJNhBJqvrYWABRkDhEDdQ2h7thgktFMxiGI8+fOt7M8T9882e3o/Gt5/0I - 3NbA2Bd5cp59a1A+34TDWVBIE9m4lFDlxEQkstqUCEG2Q63t6ksJyiKaphho - hySJAClreRni+agObiWrc8DpxN+WttgjAa5Qr4W5fmgZ7PBT+YvPqwQtRCoB - oJpD+N7gL76GdDv4ahSBuwNoLeFFAUv0tVaqBy7UagMSjXo6y20ek5SqbfgZ - BEs4nq6RtCABSyyp8D4lEckw/ap1C8i5VCR1sNYgHE89bxq4tsi+goIpsTVi - h6T5iozC71/1TfTlr1mN0ep+n9n4kBkrMLA0Dm8m3o5drekbmvh9Z1g1CQYA - k1YO+GJwb+Ck3WU3zG8rqGqXN5aV2cM9UBRYLCyceP7o5kZjmkgGuqIc/bjw - Xyr1CZu1jVjxNMEiMcf+hOvBZyMo4bayMeKZ7pqUpHibT4xvmMn9WtbCyvvk - C4dKWRAWQzfMtqIxevttn94NWqSuEqWLwGRvT1rjE4ioag9dLlvlghRp7XfE - eQqEDUPdmzXUKFtwITBSDpZekWr/rU13NbUJvORUGH+cjDO1Cv2R7gU7wj3o - LRCBtzfyOnAj7aCxLHZ8X5BUQmVlebICkqoVpge0bluyGkYzsgSnEGm4UiqX - t65LpAQlryNBKNOdb4kH3JDtNWaPm5NtBkw9ZqBWPHlM+ZK7a0zb65wtPwJb - U8GZBtxJwpKIv+AIaPZvnojppAskIuypda0jraGmo09C/+bGr9r7pNGhK4Kn - VnbXggYgICeYRw8cddX/tU4WkYwFzfUld8ed22AUfwIWjuPNJl8GbrmqdQWj - z4VpY5FJVjwyxWkqwkkynkzjGUwi35+NxiQZwWIxjZIZiTwf/7BnHDJt9n6H - LrQGlnFHJk8HkqXRWxYC3ShLaR8B6IFasZmhRBUyLPWQ6JlpBDYmXq+xYGSO - +0M5o/7GMu4JbROylg4IwUUXs8unOnhrCPYf9zpgd6vu4N+/26sYe8OqjBDx - E2JT3NgUJWcHD9OQXhKbZqx7osREBosPWyrbNBc8Rm927w25jefpYtivPbKD - QkoT3ueoWesIH0LYu6BbP5+T8TbvUsGWOtqyU2mfQR6nfmXOHaV/VfpeSAGN - 9WU0sDzGCVTQAI/RwTJoJ1LC6mreQLgsotOt8f5bQqV5pZs2KbGXINkB3z8K - 6mcfI1JNuM4Y0X2b44O69uc83mKd4lyyV5n+j0OpTrDDI7VCnMY6KvBrTK2G - nE3B6ns8if/W5zrCJSrY6cylceJ8dt1cNU+K2HT21qtW1qnEA1V3Bk8f3U7n - B96K3oeRmH0ElU8OasjuvSbh+Me3ufcw//xl9uWf3WFhMiWm0jTAcv7oZKkk - nZvY8wRNdvqspSut2nLvJjsCAwqqPg57P5LsvvP1PoOc8dpzwiw8OgWPzr9L - J99FM++EaXdkzp044S755HHRB48LP3e8Zfa+y8v3mwsauW8b22YBuGyTObz6 - DwAA//8DABdb5MMeFgAA + H4sIADPrt1UAA7RYWY/bNhB+319h+F2WfMXeQKvtokURoGkQINkWzUtASWOb + XYlUSMpHfn2H1EVZttfHFtgFzJlvqOFwjk/yH7dp0luDkJSzh/5w4PV7wCIe + U7Z86D9//d2Z9x+DOz/KpeIpiOCu1/NpHIzH09l8+G7su7jQMtRFK8KUg+uf + IZvufv64V7NNutlORr5razV6QYVUDiMpBL8SEfuuJdD6hFSrDzyJQfhuI9H6 + iKcZYbseo8lDX4kc+q6RQ0poEqSwJAwGJJQrKuCXbAGLBYiQCxADyhbcdwuc + tshWnEFnnwXZdmQbCCVVXWwkgCiIHaJ6apfBQz/GpaIp9IORN5w63swZzb+O + vPdT/Lv/5ruNgbHPs/gy+8ageL65GmdBIYll7VJMlRNhaGW5KRGC7Ppa29YX + EpSFNEnw0h0SxwKkrOTFdYdRddGlrMoHp5ULtrTBNne7H7sSUN/tEf2R2y61 + UgkAVfs99Hof+RqSXe+LUfjuHqCxhK0CFutIlqpPXKjVBiQadXSWuzwiCVW7 + 4AMIFnOGyVlJGpCAJVZU8PTRd8ufjS7jUpHEwSqDYDz1vKnv2iL74DlTYmfE + DkmyFRkFz18wzgfkp6zGaPV0yGx8zIzleI00CuYTb8+u0nQNTXU+M6yRGGOP + KSp7fNF7MnDS7FIVcWV9W/mUu9xYRGYP90gJYGmwYOINR/O5xtQ36ev6cfTj + gr+o1Ces1zZiZTpY0+x6VUvbV9ZGPNX9kpIEo/nC+Ibp4NWyBlbEky8cKmVO + WATta7YVtdHt0T6/9hukLhCli8Bkb0da4WMIqWoOXSwb5YLkSeV3yHkChPUD + 3Q801CgbcC7wphwsvTzR/lub7msqE9hmVBh/nJQztQqGI90G9oQH0DsgAqM3 + 8lpwI22hsSz2fF+QREJpZXmyApKoFaYHNG5bsgpGU7IEJxdJsFIqk+9dl0gJ + Sg5CQSjTTW+JB9yQ3QCzx83ILgWmvqegVjz+nvAld9eYtoOMLR+BrangTAMe + JGFxyLfY8Ov96ydiOukCCQl7aVxrSSuo6emTYDifD8vhPal16IrgiZXdlaAG + CMgI5tEnHNXV70on81BGgmY6yO3hVg8FX/EXYEG4mqX3eIfFqtLljP7ITRsL + TbLikSnOThFM4vFkGs1gEg6Hs9GYxCOkDdMwnpHQG+I/9oxjpvXeb9CF1sBS + 7sj45Uiy1HrLQqAbRSkdGvcdUCM245OoXAaFHmI9Lo3AxkTrNRaMzHB/KGbU + n1jGHaFtQtbSASG4aGMOz/ASbw3B7uNOA/a3as/8w7udxNgblmWEiH8hMsWN + TVFydvQwNd0lkWnGuidKTGSwmLClsk0zwSP0Zj9uSGs8TxfDYe0rOyhkM8FT + hpq1vuFjCHsXdGskNpv1pE38GqJoy84geQb0CtErcu0U2Ssz9krCZ6yvI32F + +2cQPwM8Qf6KKzqTAJYBuYFeWbSmXdHdN4BSc6J31glwkA7Zd3y48VfPfo02 + 1Td1wUDu2rw+lit/LmMp1ikupXal6f84gqoEOz5AS8R5HKMEn+JlFeRiwlXF + 8Sy2W53rFeZQws7nKbUTl3PpOtQ8ziPTxxuvGlmrEo9U3WWsfHbkHeht+IfZ + R1D54qCG7McVCf+32d/e9PO7P8a//bM/GkymRFSa3ldMG50spaQViQNP0NSm + y1Ha0rIjdyLZEhiQX7ZwOPgBZP8Nr/OJ44KXnNOT7/TMOzXtrp1zV024M2bb + 8al25jy75nPGVR8zrvyUccukfZMX65vLF3ltc631AnDZpG5w9x8AAAD//wMA + f8dAqvQVAAA= http_version: - recorded_at: Thu, 16 Jul 2015 17:23:00 GMT + recorded_at: Tue, 28 Jul 2015 20:51:01 GMT - request: method: post uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions @@ -124,14 +121,14 @@ http_interactions: 50.00 - 3cwwpg + Solidus + bh7m92 Card Holder - Solidus sale headers: @@ -151,7 +148,7 @@ http_interactions: message: Created headers: Date: - - Thu, 16 Jul 2015 17:23:01 GMT + - Tue, 28 Jul 2015 20:51:01 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -172,58 +169,58 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"9d760de2d5ba34dc787fd2bd78e0cda5"' + - '"6bd293a8a1d60de354f13884c978684e"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 50eae0597a32c67690faee8115393cbc + - 6e27ee45f82ff21e3020257962afc551 X-Runtime: - - '0.671692' + - '1.878317' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - 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 - UWdKX/0LAAD//wMAxpUpFqgSAAA= + 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 + //8DAP/I+q+iEgAA http_version: - recorded_at: Thu, 16 Jul 2015 17:23:01 GMT + recorded_at: Tue, 28 Jul 2015 20:51:03 GMT - request: method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/bcyc5t/submit_for_settlement + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/cjkbfp/submit_for_settlement body: encoding: UTF-8 string: | @@ -248,7 +245,7 @@ http_interactions: message: OK headers: Date: - - Thu, 16 Jul 2015 17:23:02 GMT + - Tue, 28 Jul 2015 20:51:02 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -269,59 +266,59 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"244f9fb21b1c8cad77c47740c5d26518"' + - '"27395f0a5d610f42fc50957d3ff88182"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - f669513c294cc5e81bcce099ecc1babe + - 3f3beea7426051fcbf17108bbb3a29f5 X-Runtime: - - '0.257519' + - '0.237940' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - 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 - AwAKSDhTwBMAAA== + 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 + AAA= http_version: - recorded_at: Thu, 16 Jul 2015 17:23:02 GMT + recorded_at: Tue, 28 Jul 2015 20:51:04 GMT - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/bcyc5t/refund + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/cjkbfp/refund body: encoding: UTF-8 string: | @@ -346,7 +343,7 @@ http_interactions: message: Unprocessable Entity headers: Date: - - Thu, 16 Jul 2015 17:23:02 GMT + - Tue, 28 Jul 2015 20:51:02 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -369,22 +366,22 @@ http_interactions: Cache-Control: - no-cache X-Request-Id: - - 17dfaf464571cfab3df27552d31f0fbd + - 699ce3bd69e65642ce3eb1cf5562ef87 X-Runtime: - - '0.149577' + - '0.091660' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAHbop1UAA6xSy26DMBC85yss34lJVfqQHOdQqV/QfsAC29QS2HS9NCFf - XxMgkCrqqbedndn1zsh6d6wr8Y0UrHdbuVmnUqArfGndfivf316TJ7kzKw2N - TZDIU0IYGu8CmpUQ+twKfXkBgrsGtxKIoJNqpJjABSg4PjJ0bssnbmJnHDvx - KDTPmyx90OpcL0lgJpu3jOO+0NW5r6TJIaBWF/ZqpsYQYI/mBZzzLAg/WlcK - EItjReuqqBKWhQ0iIHOF5VqraXS+V10dPMIpGfXL/5LWDRDU4Y+goPatY5Ol - 6zSNXgZ0e3GvHsDgJsqXXOEdk68qJLMYDH2eF2I1ZkPFJzhObGlOucu609cz - Px7qw/H+rrc/s4M+FnnRFRlrNfS0mn39S9LRyo0/+AMAAP//AwDTAFifwAIA - AA== + H4sIADbrt1UAA6xSQU7DMBC89xVW7qlTRIFKjntA4gXwgE2yLYbEDusNbfp6 + nCZpUlRx4razM7veGVltj1UpvpG8cTaNVsskEmhzVxi7T6O315f4KdrqhYLa + xEjkKCb0tbMe9UIIdW75rrwAwW2NaQRE0EZyoJjAesg5PNJ3bstHbmQnHDrh + KNSb1Tp5UPJcz0lgJpM1jMM+31aZKyOdgUclL+zVTIXewx71M1jrWBDuGlsI + ELNjRWPLoBKGhfHCI3OJxVLJcXS6V14dPMAxGfnL/5xWNRBU/o+goHKNZb1O + lkkSvPTo9uJO3YPeTZDPudxZJleWSHo26Ls8L8RiyIbyd7Acm0KfMrtuT18b + fjxUh+P9XWd/Ynt9KPKPz2xXK9n3lJx8/UvSwcqNP/gDAAD//wMAIaNywcAC + AAA= http_version: - recorded_at: Thu, 16 Jul 2015 17:23:03 GMT + recorded_at: Tue, 28 Jul 2015 20:51:04 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_completed_payment/can_be_voided.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_completed_payment/can_be_voided.yml index efa7320b..47066038 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_completed_payment/can_be_voided.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_completed_payment/can_be_voided.yml @@ -8,20 +8,17 @@ http_interactions: string: | - John - Doe - deja.murazik@beatty.us + Card + Holder + wyatt@lebsack.co.uk Card Holder - John - Doe 10 Lovely Street Northwest - Company Herndon - Alabama - USA + AL + US 35005 fake-valid-nonce @@ -47,7 +44,7 @@ http_interactions: message: Created headers: Date: - - Thu, 16 Jul 2015 17:23:04 GMT + - Tue, 28 Jul 2015 20:51:05 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -68,51 +65,50 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"a1540f3b3baca626d35d77b2d3e85043"' + - '"a4b176ab92260a44184213f25638a5c7"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 0dc40bc546daba228c7b003d44ab155b + - f87f4b01d9a0ee4188fcdbc373c96edc X-Runtime: - - '0.769657' + - '1.912919' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAHjop1UAA7RYS2/bOBC+91cYviuS/KjTQlE36GK3WGyLBdrsoZeCEscx - E4lUScqO++t3SL0oy44fyR4ChzPfUEPO65OiD095NlqDVEzwm3F4FYxHwFNB - Gb+/Gd99+8O7Hn+I30RpqbTIQcZvRqOI0XgezGeTcBpGPi6MDHXpinDt4fpX - wufbXz/f6cUm3zzNJpHvag16yaTSHic5xH+JFY98R2D0GWlWvwuI/G5plKnI - C8K3I86ym7GWJYx9K4ecsCym8ECu8lKSX+zxtwSI1turUkV+pTW4YiU4DKyX - 5Gkg20CimB5iU4n7AvWIHultATdjikvNchjHkyCce8HCC99+CxfvJ9P3wex7 - 5HcG1r4s6Hn2nUH1fBsNb8kgo6p1iTLtpURSVW9KpCTbsdH29ZUEZQnLMoyz - RyiVoFQjryL8sGxiW8uaFPB64XelHfZIfGvUc1FuHlrFOv5Y/eLzakEHUVoC - 6PYQYTD6W6wh246+WkXk7wA6S3jSwKm51lr1RUi92oBCo4HOcVukJGN6G38C - yanA07WSDiThHisqvs1IQnIS+fW6AxRCaZJ5WGoQT+dBMI98V+ReQcm13Fqx - R7JiRSbx3VdzE0P5c1ZTtLrdZzY9ZMZLDCxL4+tZsGPXaIaGNn53HKuGYgAw - adVILEe3Fk66XXbD/LKCqnd5YVnZPfwDRYHFwuNZEE6urw2mjWRkKsozj4v/ - ZcqcsF27iJXIKBaJPfZHXI8+WUEFd5WtkchN02Qkw9t85GLDbe43sg5W3adY - ekypkvAU+mF2Fa3Ry2/79G7QIU2VaFMENnsH0gZPIWG6O3S17JRLUmaN34kQ - GRA+jk1vNlCr7MClxEh5WHplZvx3Nt3VNCbwVDBp/fFywfUqDiemF+wI96C3 - QCTe3iTowa20h8ay2PF9STIFtZXjyQpIpleYHtC57cgaGMvJPXilzOKV1oV6 - 7/tEKdDqKpGEcdP57vGAG7K9wuzxC7LNgesfOeiVoD8ycS/8NabtVcHvPwBf - Mym4AdwowmkinnAEtPu3T8R0MgWSEP7YudaTNlDb0WdxeH0d1u191urQFSky - J7sbQQuQUBDMoy8CdfX/jU6ViUolK8wl98ed32K0eAQeL95Ntz/zyK9Wja7k - 7Gdp21hikxWPzHCaynhGp7N5uoBZEoaLyZTQCSyX84QuSBKE+Ic945Bpu/cr - dKE18Fx4ij4eSJZW71hIdKMqpX0EYADqxHaGEl2quNIDNTPTClxMul5jwagC - 94dqRn3GMh4IXROyVh5IKWQfs8unenhnCA4f9zxgd6v+4N+/27MYd8O6jBDx - AKktbmyKSvCDh2k5L0ltMzY9UWEig0OHHZVrWkiRoje794bcJghMMezXHtlB - I6WJbwvUrE2EDyHcXdAtmjxs3tI+Feyooys7lfZZ5HHqV+XcUfpXp++FFNBa - X0YDq2OcQAUt8BgdrIJ2IiWsr+YFhMshOv0aH74l1JpnummbEnsJkhvw/aOg - efYxItWG64wRPbQ5Pqgbf87jLc4pziV7ten/OJSaBDs8UmvEaayjBj/H1BrI - 2RSsuceT+G9zriNcooadzlxaJ85n1+1VC1qmtrN3XnWyXiUeqLrzePr0wFvR - 6zASu49k6tFDDdm9VxpPv397F8ymn4OP//y5OyxspqRM2QZYzR+TLLWkdxN7 - nmDIzpC19KV1Wx7cZE9gQVHdx2HvR5Ldd77BZ5AzXntOmIVHp+DR+Xfp5Lto - 5p0w7Y7MuRMn3CWfPC764HHh546XzN5Xefl+cUEj9+1i2y4Al10yx2/+AwAA - //8DAOksVkgdFgAA + H4sIADnrt1UAA7RYS2/bOBC+91cYviuS/Ii9gaJsdoFFsej20qYFeikoaWxz + LZEKSdlxf/0OqRdl2Y7tZA8BwplvqNE8Pzl4eMnSwQaEpJzdD/0bbzgAFvOE + suX98OnrX858+BB+COJCKp6BCD8MBgFNwvlsPPdvx37g4kHLUBevCFMOnn9F + bLr79fybmm2z7ctkFLi2VqMXVEjlMJJB+CcRSeBaAq1PSX36yNMEROC2Eq2P + eZYTthswmt4PlShg6Bo5ZISm4XZHlPo9hUiSeH0T85tiHbilSoPyFWfQM12Q + l55si1dQ1cfGAoiCxCFqoHY53A8TPCqawTAcef7U8WbOaP515N1N/Ttv8iNw + WwNjX+TJZfatQfl8kw1nQSFNZONSQpUTYzRldSkRguyGWtvVlxKURTRNMc8O + SRIBUtbyMsNiWee2ktUl4HTSb0tbbJvO/dhVgCadR/RHElxppRIAqvHb9waf + +AbS3eCLUQTuHqC1hBcFLNGRrFSfuVCrLUg06uksd3lMUqp24UcQLOEM67GW + tCABS2yi8PFT4Fb/trqcS0VSBxsLwvHU86aBa4vsFy+YEjsjdkiar8gofPqC + cT4gP2U1RqvHQ2bjY2aswDTSOJxPvD27WtM3NA35xLBHEow9lqgc8MXg0cBJ + e0vdt7X129qnuuWNTWTucI+0ALYGCyeeP5rPNabJZKD7x9GPC79Rqd+wOduI + lRla7Xwb1FNsX9kY8UyPSEpSjOaa8S3TwWtkLayMJ184VMqCsBi6abYVjdHb + o31+77dI3SBKN4Gp3p60xicQUdW+dHlslQtSpLXfEecpEDYM9TzQUKNswYXA + TDnYekWq/bcu3dfUJvCSU2H8cTLO1Cr0R3oM7AkPoHdABEZv5HXgRtpBY1vs + +b4gqYTKyvJkBSRVKywPaN22ZDWMZmQJTiHScKVULu9cl0gJSt5EglCmh94S + X3BLdrj1MjcnuwyY+pmBWvHkZ8qX3N1g2d7kbPkAbEMFZxpwLwlLIv6CA7+5 + v3kilpNukIiwdetaR1pDzUyfhP587lf7etLo0BXBU6u6a0EDEJATrKPPHHXV + /7VOFpGMBc11kLvLrVkKgeJrYOE4nz4/Yw7LU60rGH0uzBiLTLHiK1PcnSKc + JOPJNJ7BJPL92WhMkhEsFtMomZHI8/EPZ8Yx0+bud5hCG2AZd2SyPlIsjd6y + EOhG2UqH1n0P1IrN+iSqkGGph0SvSyOwMfFmgw0jc7wfyh31D7ZxT2ibkI10 + QAguupjDO7zCW0uw/7jTgP2rujv/8G0nMfaFVRsh4l+ITXPjUJScHX2ZhuGS + 2AxjPRMlFjJY5NdS2aa54DF6sx83pDWep5vhsPaVGxSymfAxR81GZ/gYwr4F + 3bodj6Jb1SV+LVG0ZWeQPAN6heiVtXaK7FUVeyXhM9bXkb7S/TOInwGeIH9l + is4kgFVA3kCvLFrT7ej+F0ClOTE7mwI4SIfsHB8e/PWzX6NNTaYuWMh9m9fX + cu3PZSzFeotLqV1l+j+uoLrAji/QCnEex6jAp3hZDbmYcNVxPIvt1u/1CnOo + YOfzlMaJy7l0E2qeFLGZ461XrazTiUe67jJWPj7yDfQ+/MPcI6hcO6gh+3FN + wvGP2Xfv+x+T8bf53/urwVRKTKWZfeW20cVSSTqROPAETW36HKUrrSZyL5Id + gQEF1QiHgz+A7H/h9X7iuOAj5/TmO73zTm27a/fcVRvujN12fKuduc+u+Tnj + qh8zrvwp4y2b9l0+rN/cvshr27Q2B8BjW7rhh/8AAAD//wMAX1Hy8OcVAAA= http_version: - recorded_at: Thu, 16 Jul 2015 17:23:04 GMT + recorded_at: Tue, 28 Jul 2015 20:51:07 GMT - request: method: post uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions @@ -124,14 +120,14 @@ http_interactions: 50.00 - 793yqm + Solidus + 3p5qq2 Card Holder - Solidus sale headers: @@ -151,7 +147,7 @@ http_interactions: message: Created headers: Date: - - Thu, 16 Jul 2015 17:23:05 GMT + - Tue, 28 Jul 2015 20:51:07 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -172,58 +168,58 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"6e98194afbd3b5be8ece94d0e163559b"' + - '"1dbb3ce89b1bd99e69a658d868d41c18"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 35e1059a493c05515fdc0cfe8edee2d0 + - eed53715a1334d2e620f3d06dcb15137 X-Runtime: - - '0.594879' + - '2.315415' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAHnop1UAA7RXS2/bOBC+91cYviuS/Ni4haJu0KLbXbQFFm23i14KShxb - bCRSJSkn7q/foUjJkkWluewhiDXzkZwZzuNj8vKhKhdHkIoJfrOMr6LlAngu - KOOHm+XnT2+C3fJl+izRknBFco2o9NlikTCa7va53u6SEH8aidJENyoljS6E - ZD+BJqETGa0+1ZAqUkIStj+NLG+kxLNOAVMiwCMh/fzxdRJOxQZMKtFwnW6j - qyhKQvdlFBXIvCBcByTPjTBAe1QtAU/yqcwSISlI/FhwVt4stWxgGVqLJBAN - NCB6Yay8WVL81KyCZbqK4m0QXQfxb5/i6xer9Yto8xVt7Re065uaPn39Ftef - F7iIKC3QavNhg7yNtptVvI67MKN0z6TSAScVpH+JgifhQGARJem+XwsMw/nT - qnNR1YSfLr1HDVSElSmF7+SqaiT5ye5+z9BBfbpqVBJarUXeQ6aYBs8edSG4 - T74nD5N4h0OHk4yVJabd2fnv+//B7fSV/Y+HO4FVK405g6lCqQSl0jhavBNH - KE+Lj63CZPMI4CL2oIFTc4NO/EFIXdyDwgUTnTNT5KRk+pS+BcmpQE96iQVI - OJgyuy1JRiqShO7bhVdgVZW2LtbbKNom4VDUuYrZLk/W+88cL4qiG5hpaiH2 - i1sMOMuJCcAANl5pNgtIWRdkhVV5hg7lcyvWuOLWt2TtW8Kb1px0t4ku1nSa - NlMGyYEB2jec+gq41yhXgERKchop8T4Gzcy3iQKtS6gAG0ZGdF54MQWr62Gy - +jK+T1CPss9Oj26+QMc56Kvgi5zzneyyzaOymeYr6nOKee0959Ej6kHuPAm1 - /hXKJci0rQxvxzXVYM+gpMoCyFEFIKWQAcaoFlyB17UWN3B9jE7f4xx6FNBt - Mb41/y6PYlo3jscL6Z9YLxOhgR6w0u/JCTXfwWY5jik1vdikliLH0zAO3dgm - Lbzd6d9Xb969/4Dt5THQeJexKXFkRvWcdmalxgxOb2vUHA2FmEO0oaWUGUsw - +FPYxNejYLm5oD1ePK7A3MlATiPSGMqAp1iOMIPS5CGwFMSrggeo6o4CZEKU - QPgy3ZNSGfrTAzrKgV4EOZHdoNPiDnh6/Xx9+lEhvP2ymozxdBPFq93O9EM+ - 7CSbNN7tYjf0Nl2x4KZBS7f+Ycr0+/67axY1k/YyK8F1kcYrM7UuhBPsCYhE - PrOKRuBW6s51Uz0wraaljO0ImUjPVhaibMNtBtEr/F68bQXW5KHStduKHCBo - ZJkWWtfqRRgShV1bXWWSMG4qyZXAFbbSsCYn08y/VYDpS7+V4iDCIwbkquaH - l8CPTApuADeKcJqJByQd/f6u/UmoCTKRD8JkpP1tNQWQUhdopZmzd1zc4zgf - yCyIQsb0WW8/naqReJOYloemNExwgLrU9LPB0FpGyjN0IHP2kpMU5QDRCVz4 - lGqwO+J043dnzEg67rZiHxgt4TmMZ/tQ0YVK0CZvqfb59LPMghrOfjTgqgvF - GHyG/VmmG7rebPNr2GRxfL1aE7qC/X6b0WuSRTH+IWOeW2p3PgKvRKDo3Uz1 - 9XrHP8fV5x4xQcEwVeVpxCH6CdwiADdyd2hKFik+Kqr6ibS/x/c7PPp6ahFz - DyAbUIURoBXhB8BRYl8/ray3cEB5lMAmBympGVoylVs/w0tHe4kLjm2XJfFT - qCZTuWT1LMUa6Pvm1hK8oMaRLmiALCYwYfRwgAskmiW1F4smX5xjZkaA48HD - DilTbVZ7dWB3EV2azTCdubcPdpKpbeNNkXuZhy/6NZO5vd6ODXzXcijTj6Jk - 1DzOOoElsPJoht0eYG5MmbPFfWCvdKLFWGSNVJYDU9D47uteL2OV/4IGBNp/ - /BgzefA/EQ4Pxmls1NJvhmH7mK5I+3wbNnnu4cd4LTO+G8/rxjyhpvnhJkzA - ONK4pv3ZjlnbXr6Z9pKEc6AxERo4OuZLQy40C/r1Xi17+tVePcWSTN2ZWybn - R/n666fn0Xb3+o8vX/4ePM8p5Ey1z1bL3Ux+O0kb1tFOiS6wRQVYuyapAUOy - F+ObGHWm9Nl/AAAA//8DALFEonSnEgAA + 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 + AAA= http_version: - recorded_at: Thu, 16 Jul 2015 17:23:05 GMT + recorded_at: Tue, 28 Jul 2015 20:51:09 GMT - request: method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/8fct58/submit_for_settlement + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/hsyz9p/submit_for_settlement body: encoding: UTF-8 string: | @@ -248,7 +244,7 @@ http_interactions: message: OK headers: Date: - - Thu, 16 Jul 2015 17:23:06 GMT + - Tue, 28 Jul 2015 20:51:08 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -269,59 +265,58 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"efdc70a825137a87c46de962e413d4db"' + - '"79448435adbf11a36a53833cbdf77314"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 2ee8a84eb8aab02a06d147bbb890e484 + - f463a22fb2a5a7f51ca54b3d6a4f4645 X-Runtime: - - '0.220252' + - '0.513823' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAHrop1UAA8xYS2/cNhC+51cs9i5L2ke9CWSlRoI0LZIARZKmyMWgRGrF - WCIVklqv8us7FKnXinJ8CdCD4eXMx+HMcF5U9PJcFqsTEZJydrMOr4L1irCU - Y8qON+vPn954h/XL+FmkBGISpQpQ8bPVKqI4PmSp2h8iH35qilRI1TKWdVJS - pQi+y7i4k0SpgpSEqci3AI1VTUViiQoS+e1PTUtrIeDkxqOSe6AAiT9/fB35 - c7IGo5LXTMX74CoIIt+uNKMkIs0RUx5KU030QDtZCQInuVh6CxeYCFisGC1u - 1krUZO0bjQRBYIiH1EprebPGsFS0JOt4E4R7L7j2wt8+hdcvNtsXwe4r6Npv - aPfXFX76/j3sHzZYj0jFQWu9MC7fB/vdJtyGndOBmlEhlcdQSeK/eM4if0Qw - iAJ169cc3DAsDTvlZYVYc2k9cEiJaBFj8g1dlbVAP+j97wkYqJqrWka+4Rrk - A0kkVcQho8o5c9EzdJ752x8bHCW0KCAIB+O/Zb/A7PiV+Q+HW4JhSwUxA6GC - sSBSxmGwesdPpGhWH1uGjuYJwHrsrAjD+gYt+QMXKn8gEjbMeFZNnqKCqiZ+ - SwTDHCzpKQYgyFEn3W2BElSiyLdr614OWVWYvNjug2Af+WNSZypEu2iM9Z8Z - XBQGMyDS5Ipnq1twOE2RdsAINt2phXmoqHK0gawcoGP60o4t7Lh1bdm6trC6 - VSc+7IKLPR2njZRRcICDspphVwL3HGkTEAmBmgkT7mNU2lxChhLmJUiluROT - 06oaB6sr4vsAdTD76HTwlhN0GoOuDL6IOdfJNtocLBNprqQeQsyp7xBHj7BH - sfMk1PZnKBsg87Iyvh1bVL2MkgJLA0An6REhuPDARxVnkjhNa3Ej06fo+D30 - oUcBnYjprbmlPIppzTidLqh/Qr7MiBp6hEx/QA1wvhET5dCm5Pxio0rwFE4D - P6Ba5VzQH6iFt5L+ffXm3fsPUF4eA02lTFUJA92ql7gLOxVEcHxbAedEsHN3 - i2hdizHVmoDz57CZrSdOU31BGVw87IDYSYiYe6TWIwOcYmaEBZRCZ8+MIE4W - OZOy6kaAhPOCILaOM1RIPf70gG7kACu8FImu0Sl+T1h8/XzbfC8B3q4MJ6Es - 3gXh5nDQ9ZCNK8kuDg+H0Da9XZcsINRrx61/qNT1vl93xaKiwlxmyZnK43Cj - u9YFcYZtCBIwz2yCCbil2nNtV/d0qWkHyLaFzKiDljkvWnfrRvQK1qu3LcGo - PGbacluiI/FqUcS5UpV84ftIQtWWV4lAlOlMsilwBaXUr1Cji/ldSSB88V3B - j9w/gUOuKnZ8SdiJCs404EYihhN+hqGjl2/LnyAVgknkA9cRaX4bTk5QoXLQ - UvfZe8YfoJ2PaAaESULVwDdLy6oF3CSE5bEu9CQ4Ql1y+t6gx1qKigE6oll9 - USN4MUJ0BOs+KWuojtDd2P2AmVCn1ZZnnuYilpJpbx8zOldxXKftqD2cPtAM - qGb0e01sdgEZnE+hPot4h7e7fXpNdkkYXm+2CG9Ilu0TfI2SIIQ/mJiXthrJ - J8JK7kl8v5B9Pd/On9Pss08aL6cQqqKZzBB9B24RBATZO9QpCyM+MMrqiWN/ - j+8l2KdSV2F16RteTy1i6QFkHCrBA7hE7EiglZjXT0vrNRyNPJJDkSMxqiho - MqcbO/25ob/Y9qe8I/8XnugpNkxM4yiQe5isE5kKWi0OmyN+X+bbUderYLjh - 2IN5ztNOdUxDF0hQSygnFlS+OEd3Tw8apWNOxlS2+e3kESOFdwm3MPMtvQKh - ps51mwqFKVR/AgC7FnK455sGCi98Ror4Iy8o1s/UjmBGeXHSbT8jZKlh67P5 - g2eudMYFXyS1kOY1gImCF3D3jpuy3Bc0ekq4j59iZp8+nggnZ200tCzhVkO/ - eyBcYQB2CazT1PFSgGtZsF1bXtX6MTmPD9trPcpgoK3bn+3AYQrtnS60kb8E - mo6EI0Onk+N4KlwE/VxWO0f+TFY/bAoq7/Uto+HzxPbrp+fB/vD6jy9f/h59 - qMAkpbJ9wJspVse3pbRunUiKVA4lyoPc1UFNwCUZn97EpDLFz/4DAAD//wMA - r2UTi78TAAA= + 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 http_version: - recorded_at: Thu, 16 Jul 2015 17:23:06 GMT + recorded_at: Tue, 28 Jul 2015 20:51:10 GMT - request: method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/8fct58/void + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/hsyz9p/void body: encoding: UTF-8 string: '' @@ -342,7 +337,7 @@ http_interactions: message: OK headers: Date: - - Thu, 16 Jul 2015 17:23:07 GMT + - Tue, 28 Jul 2015 20:51:09 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -363,54 +358,54 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"b6eb7bd55b1963703b4ec7a0cdc936c7"' + - '"967ef30f1f032a97b7d483bb373bca53"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 97ddf2ccc259e691bd25ec078a784c1d + - 1c793098a8e5be98f42ac2ede6620455 X-Runtime: - - '0.221250' + - '0.205131' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - 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 - mxhUpvjZvwAAAP//AwByJHaRpRQAAA== + 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 + OvCTFAAA http_version: - recorded_at: Thu, 16 Jul 2015 17:23:07 GMT + recorded_at: Tue, 28 Jul 2015 20:51:11 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/failure/fails.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/failure/fails.yml index c1fb80f3..6600c501 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/failure/fails.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/failure/fails.yml @@ -8,20 +8,17 @@ http_interactions: string: | - John - Doe - carroll@lebsack.com + Card + Holder + brandon@lockman.name Card Holder - John - Doe 10 Lovely Street Northwest - Company Herndon - Alabama - USA + AL + US 35005 fake-paypal-future-nonce @@ -47,7 +44,7 @@ http_interactions: message: Created headers: Date: - - Thu, 16 Jul 2015 17:23:19 GMT + - Tue, 28 Jul 2015 20:51:21 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -68,31 +65,31 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"2a2aa20425ce590c3ab9772781bfb112"' + - '"37b0e15ea44c840fd0905acce5aa3a68"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - ce98cd7c309574b462702c003476afb1 + - 70537fc0697226bfb0b8ec988391eee6 X-Runtime: - - '0.250963' + - '0.270350' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAIfop1UAA6RTy3KbMBTd5ysY9kLGdezEI3AWnS66TjfdZC7SNSjRg0oi - Nvn6CvAjCd10smHmnnPu8yC2O2qVvKLz0poizbNFmqDhVkhTF+mvxx/kLt2V - N4x3PliNrrxJEiZFub5br/L4YTQGAxY53oAJJMZvlbnt3/7ch81BH46rJaPv - 2UG9l84HYkBj+dM2htF3wMArOEffLTJ6DQeSW92C6RMjVZEG12FKRxw1SFVy - cM4q9aCw8sBfsqhmdKIGUdtYg7PUPRxn2CEWkGGu5Q4hoCAQktC3WKQihkFq - TMvlIr8liw3J14/5Zrv8ts3vfzN6TRjzu1b8X/41Yeo/WkH2EpXwl5GEDCSu - LvypaLwC9KeJW+hbUAQ4t50JHxWDYCaZwAgH+4KmXD1XtY5WT9GZm276DAYz - YfEBj6BbhZ/uPSoF7qFT53UraxWCScvhpoyeyItYaqiRdE6VTQit31IK3mPw - WeVAmuAQ63iNA/RDJxrn1mjCk8bQWPGkbG3ptEvWmnqH5lU6awZJ4cGIyh7j - H3vpcO75RUvHGl+0dazhu8pzJ9sQH+M/jIwKOjfqM+ZHEIRwGA83KxOHv7zl - vwAAAP//AwDqhgFk/gMAAA== + H4sIAEnrt1UAA6RTy27bMBC85ysE3SVKhoU4Bi0HKFD0A9JLL8FKXNuMyaVC + UrGUry8l+dWqlyLHnZl9Dsm3nVbRB1onDW3iPM3iCKk2QtJ+E/98+Z6s4m35 + wOvWeaPRlg9RxKUo8yJbFtnqibMQDFjg6gOQT0L8WVHRf74/+ceTPnXLBWf3 + 7KDeSet8QqCx/AZWcHYHDLyCS/TDKIGWsxsy8LXRDVAfkVSb2NsWYzbiqEGq + srJAwtCzMvVRA6VDGmcTN6iagyGc5e6gm2EnrJz0c21tETyKBHzk+wY3sQih + lxrjcpHlRZI9JovVyyJbF/l6kf/i7JYw5reN+L/8W8LUf7Qj2UlUwl1HEtIn + dTinOxcFa6E/T9xA34BKoK5NS/5PxSCYSSYwwN4ckcrjcfn2rjmbogs33fQN + CFNh8Bk70I3CNNhzd+9RKXAHrbqsWxmjECguh5tydiavYqlhj0lrVXnwvnFr + xsA59C4NzkryFnEfrnGCfujEwtwayb9q9AcjXpXZGzbtkja03yJ9SGtokGxc + eBiV6cKrvXa49PyipWONL9o61nBt5WorGx8+5D+MDAo2N+pvzI0gCGExHG5W + Jgx//c+/AQAA//8DADg1+YgCBAAA http_version: - recorded_at: Thu, 16 Jul 2015 17:23:19 GMT + recorded_at: Tue, 28 Jul 2015 20:51:23 GMT - request: method: post uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers @@ -101,20 +98,17 @@ http_interactions: string: | - John - Doe - carroll@lebsack.com + jane.doe@example.com + + brandon@lockman.name jane.doe@example.com - John - Doe 10 Lovely Street Northwest - Company Herndon - Alabama - USA + AL + US 35005 fake-paypal-future-nonce @@ -140,7 +134,7 @@ http_interactions: message: Created headers: Date: - - Thu, 16 Jul 2015 17:23:20 GMT + - Tue, 28 Jul 2015 20:51:21 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -161,31 +155,31 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"e10335969c882971692afd69c9b1322b"' + - '"367b9a7d93046c3ede9dc0d5d3a6cad6"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 72e5d74bdd6e5e0ea3ea140742781a0e + - c7ff8e63d7645f8b03ab95f64a9e63e9 X-Runtime: - - '0.263899' + - '0.187618' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAIjop1UAA6RTuXLbMBDt/RUc9hR0xJKtASkXmRSpnSaNZwmsSNjAggFA - S/TXByR12GaajMt37A3w3dHo5BWdV5bydDGbpwmSsFJRlae/Hn9kd+muuOGi - 9cEadMVNknAli816vlzdr1ecRdBzURM1UMgifivptnv7cx82B3M4flty9l7t - 3XvlfMgIDBY/bU2cvSN6XcMZfbfI2RX2orCmAeoSUjpPg2sxZQOPBpQuBDhn - tX7QWHoQL7Po5myUelNTW8JJ6B6OE+4QE6gw9QqHEFBmEJLQNZinMsKgDKbF - cr64zeabbLF+XGy2y9V2Of/N2TVgiG8b+X/x14Cx/nCKbK9QS39pSaqQxdGl - PyWNW4Du1HEDXQM6AyFsS+GjozdMLCMZ6WBfkIq7ff1MJWcjOmvjTp+BcCYt - PuARTKPx074Hp8Q9tPo8bmmtRqC06HfK2Um8mJWBCrPW6aIOofFbxsB7DH5W - OlAUHGIVt3GArq/EYt8GKTwZDLWVT9pWlo2zzBqqdkivylnqLbkHkqU9xhd7 - qXCu+cWTDjm+eNYhh29LL5xqQvyM/zhkdLDpoT5zfiBBSodxcZM0sfnLX/4L - AAD//wMAsJXyK/4DAAA= + H4sIAEnrt1UAA6RTy3abMBDd5ys47EGGxHXqAzirfkG66SZnQGNQI42oJAzk + 6yvAdpLiTU+Wc++d55Wyw6BkcEJjhaY8TOJNGCBVmguq8/Dn84/oMTwUd1nV + WacVmuIuCDLBi923ZJum9/cZ88GEea5qgFzk47eStuPbn+9u16t+eEgz9pGd + 1EdhrIsIFBa/gTDmGp9wANVKjCutMvZBMOklnKOAhMxDZzoM2cx4dQs0rnBU + IGRRGiCu6Unq6lUBxVOJjC3cpGobTeuaRxhWWI+lFe5Gf4PgkEfgAje2mIfc + h04oDIt0k2yjzS5KH5/TzX6b7NPkV8beE+b8ruX/l/+esPSfjYmOAiW315G4 + cFEFhttzUTAGxvPELYwtyAiqSnfkPismwUqygB52+hWpaB5Op6HP2BJduOWm + t8283ntWcjxCJy/rllpLBAqL6aYZO5NXsVBQY9QZWTTOtXbPGFiLzsbeWUHO + INb+Gj2MUyfm51ZI7kWhazR/kbrWbNklbqk+IJ2E0TRJcusfRqkH/36vHS49 + v2jpXOOLts41bFfayojW+a95w0ivYGuj/sXsDALnBv3hVmX88Nef/RcAAP// + AwB3O9cRDAQAAA== http_version: - recorded_at: Thu, 16 Jul 2015 17:23:20 GMT + recorded_at: Tue, 28 Jul 2015 20:51:23 GMT - request: method: post uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions @@ -194,13 +188,21 @@ http_interactions: string: | - 76023963 - R855391436-FJRR9M9A + R419414138-3CYE5CL7 45.75 - 8fhjnb Solidus + + 10 Lovely Street + Northwest + Herndon + AL + US + 35005 + + h4vvxw + 76152233 sale headers: @@ -220,7 +222,7 @@ http_interactions: message: Created headers: Date: - - Thu, 16 Jul 2015 17:23:20 GMT + - Tue, 28 Jul 2015 20:51:22 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -241,57 +243,60 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"20357bfc755285fae03dddd4b95d25cf"' + - '"23bb9d70b280d45358d14585db07de53"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 603159c3dbf4f9d18fe205c981b8fd4c + - 07e574a2d9f58b7accf4d2e656cc52b9 X-Runtime: - - '0.316882' + - '0.304335' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAIjop1UAA+xYS2/bOBC+91cEvjPyI3HiQlGbImmRogsskuawewloaWSx - oUiVpBx7f/0ORUmWLKrJAnvYw96smY/kvDjz0eGHXc5PtqA0k+JqMjudTk5A - xDJhYnM1efz+mVxOPkTvQqOo0DQ2iIrenZyELImSxU+zMmGAP61EG2pKHdHS - ZFKxvyAJg1pktWZfQKQphzCoflpZXCqFZ+0J05LgkRA9PtyEwVBswTSXpTDR - 2fnpxXkY1F9WkYOKMyoMoXFshQTt0YUCPMmnskukSkDZj/vL8/PFana2WJLP - X+/vV7+trsOg1VY2KqAGEkLNibX7apLgp2E5TKL5dHZOphdktvw+u3g/X7yf - T/9E69sF1fqySP7Z+sOCOkbaSPTDfriwXyyn88VquWgCj9KUKW2IoDlEX2Um - wqAjcAhOm+8biYE5fDp1LPOCiv2JYPxqYlQJk6DWQE4Zj2KqlOT8I4c1FsHz - KeLDwKkc7AUVzIBngyKTwidP6e5YalN/8DZcM86xClvPfZu0fnqUrZMe3bjD - 2mDpYMUkiQKtfRHZGRCJzdAohMuYcmZ82yvY4BXyxUnibeFVvXvtxfJV+3F3 - nNquJpQXGZ2/CbV4DSVKzAaLh5nqJAd9SkuRkGGGDhpdVz/WEd33lBjITm/x - baLBGA454P1dUxNnXkzGiuL/YvmPFks3O3VHIykDnmgHoFtNADuMIhijQgoN - XtcqXMf1Pjq6w7HwS0CzRT9r/l1+ianc2G6HK4dCC91gQ3+he9T8AFflOCP0 - MLFhoWSMp2EcmilKK7g3GAdw/8TZdDoNgzHtyEqDhRpdF6jZ2sE9hqgimCTM - WoUxHsIGVm4li20eUswvrsASWYMa+lLaQY2nuNk7gjJ0R9zg96pgB3nRjNm1 - lByomEQp5dqSjhbQjHX0guBca2aokc8goss0+yHWCK++nGbNfFewahhnviuB - exJrhLcdFEy5nOZSmCzCKXosGiD3QFUfWEnq0+qJSWwbMf5uYS3KJK8i628J - LKcbIKXiUWZMod8HAdXYdvXpWlEm7FWoa9hO/qCge9uNn3LAIk2euNzIoBTP - Qr6I00JsPoDYMiWFxVxpKpK13CFZaY+oW5iCgiKDeXQLbc05gVNnQLnJ0HI4 - IDoyB0pgzcxB7z5rVakwb1h4m5JbPtVBHWvaJm/pIqP8AO3IaqPp3vKgjtG1 - oA6j1iW2ORxT4vmA6Un7bVOmxGqpiKF76lDZxEwmZVzR2E7YWpkDlYL9LKG+ - QyjGLDBstoPrZC8niFwSnTyPXJpWX7Oz/qWpGT/JGJag2vcmfDsfKwTgRnVi - 7E1D9ouKvHgjI27x7Q6/fGpUiLHXgouQRoaZ5FRsABu9eypUstbCDiHREnsT - RLRgaMlQ7vwMjh1tJXVwXJfj1E9wyrWOFStGCVBH3/akin6RAgeuTAhyDGLD - 6MnxERLNUsaLRZOPzrGtnmBX93C3hOmqTL06cLvIpkeNNJ2xlwH2iKFt/U2R - GdlXIvo1Urmt3nV7fAQK4NGD5CwpNVZyLXD0Um3tjEoBxqaLPVu+EJfSgRZj - sS6Vdgw1AYOvIt10oZ7Kn6AOvfUf38cMXsdvhMPOOo0tWPnNsFwcyxVJmW/D - Mo497BXTMuK79bwoDfjqox4fhAkkWWX1s/pLAOUF5U/1Wz0MxnB9CtPxtc90 - uixmFPT6XhXveW2vlhyZDLsJwWtm6w/Q9FQOyU7l56u0A2HYv90ju/r9EXbY - BDm413dX3S5w8Uqi36//IPP5+ZrO5ovFbEljmqY0PZvD5SrtBLYZGX22ieKH - 62+3ZBbPFvPlxfriIo1XU4rmDXD/FntwIXk7ecBJX26sATe3nx6/kBUs02Q5 - TVdpclbRAKc8xBFcoHzcqPMa8fWoKsouorf3T3c3JJ6vFun8bDWdJ+fr6WXc - ZKJ3niKDv2QG4i766O+ZY2FzqzlHMVaiqZ8R9dC7/Xb35e7Tt1vs4GOQhggW - pipLn6ujr/ijgTjeJz3AV7tVGDTXoTdeo3d/AwAA//8DABkD7DiZFAAA + H4sIAErrt1UAA8RYS3PbNhC+51dodIeppy1laCZO7KbOeDqdOD6kFw9ELkXE + JMACoCz113dBkBQpgrbb6Uxv4u4HYHexjw/yP+yzdLQDqZjgl+Pp2WQ8Ah6K + iPHt5fjh+y9kNf4QvPO1pFzRUCMqeDca+SwK5vNYnmvfw59GojTVhQpooRMh + 2V8Q+V4lMlp9yCFQNAXfK38aWVhIiWcdCFOC4JEQPNxf+15fbMA0EwXXwWJ5 + drH0verLKDKQYUK5JjQMjZCgPSqXgCe5VGaJkBFI8/FtMV0vpovpfEXmn3/c + LD/fXfheoy1tlEA1RITqkbH7chzhp2YZjIPZZLokkwsyW32fTd4vp+9nsz/Q + +mZBub7Io3+2/rigipHSAv0wHzbsF+fT5Ww2n9eBR2nMpNKE0wyCn5TDWSTg + I+xplqdwForM91oAuyKl1feIs/RyrGUBY6/S4Yqc8oNDAxllabDBVIgE/5iK + 8Cmj/Mxs43tWZ3HPsFFMu/bOE8Fd8pjuT6UmEY6++xuWppiTTRxcmzReOpT/ + zmOlMZEwf6JIglKukOw18Mjc1yAE40RTpl3bS9hiQbniJLB20jL7nfZiMsvD + sDtWbVYTmuYJnb0JNX8NxQu8DRb2b6p1OehTXPCI9G/oqFFVLVAp6aGjxEC2 + Oo1rEwVap5ABVvOG6jBxYhKW5/93sgTTyehO7CA9jO5LhemHHYA7g4LfhNTJ + Myhc0NN1Myr4FaQpRd9rJO28Cq7ufK/62UurYL6cTLCTtkX97AoeOBZyhB5g + U1IjEY+uyhSgWJ1t2GDiYUs/QtvywSTEFVeuJfMXMjJYLSYna2pNmZ/thKha + KokZpJGyCUN3ioCUQhKMci64AmfplbhWwLro4Bbn0ouAeotuHrh3eRFTurHb + 9Vf2hQa6xct7pgfU/ARbWDikVL/x+LkUIZ6GcajHOC3hzmAcwd0Tp5MJXsaQ + dmClxlQPrnLU7AxzGEKUEYwiZqzCGPdhPSt3goXmHmK8X1yBabEB2felMEwB + T7HDfwCl6Z5Y5uFUwR6yvJ7zGyFSoHwcxDRVhvU0gJpXoBckpLIe4lo8AQ+S + xW63f0Z4+WU1G+YaEWWPWrgaFO5JjBHOcZUzae80E1wngekxJ6Ie8gBUdoGl + pDqtGtLEtCDtnmbGokSkZWTdTZVldAukkGmQaJ2r955HFXZ6dYZkg3FTClUO + Gz7j5fRgBsBjBpik0WMqtsIr+BMXz/ws59sPwHdMCm4wlwrJykbskS01R1S9 + UEJOkUI92IUm56zAqhOgqU7QcjgiWjILimDD9FFvPytVIfHeMPG2RWoIXQt1 + qmnmiuGrjKZHaEtWGU0PUqQtRC2owqhUgW0OJyN/OmI60m4TFTExWspDaJ/a + V9YxE1ERljy6FbZGZkEFZ38WUNUQivEWGDbbXjmZ4gSeCaKip4GiafQVIewW + TfXkIAnDFJSHDqloRnKJANyouhhTaUi/UZHlb6TkDb7Z4cW3TokYeq7YCCkk + tRFy5y1go7dvlVLWWNjiQEpgb4KA5gwt6cutn96po42kCo7tcil1c6pio0LJ + 8kHO1dI3PalkfCTHISsigiyFmDA67vgEiWZJ7cSiySfnmFZPsKs76GLEVJmm + Th3YXUTdowaaztBjBHtE37bupsiwzDMV/RrI3EZvuz2+Qjmkwb1IWVQozORK + YBmt3JkZFQMMTRdztngm9kp7WozFppDKkuIIND7EaqbYVbkvqMWo3cd3Mb3n + +RvhsDdOYwuWbjMM/cd0RVLm2rAIQ8frCq9lwHfjeV4YztrPj2p8EMaRZBXl + z/I/CZTnNH2s/izwvSFcl8K0fO0ynTaLGQS9vlfJe17bqyFHOsFuQrDMTP4B + mh6LPtkp/XyVdiAM+7d915e/u/8ptNXNAhuvKPj96gfZzKbr2fI8Wm8m55Nl + DLP1erWZr6AV2HpkdNkmiu+v7m5IvFxAON1MZzG9WK/PF9hHT3H/FXuwIXk7 + ecBJX2yNAdc3nx6+kOlsHYXn6OvFbF7SAKs8xhFsoFzcqPUacfWoMso2ojff + Hm+vyXw+iWFN6eRiNY9Wy7i+ic55krT+8vkqEl6jev8EWXHz4A2uBdTYo7Cu + 6jRFMWairp4R1dC7ubv9cvvp7gY7+BCkJoK5LtPS5ergHwcnA3G4TzqAb+lW + dWt3kFffq4ulM3yDd38DAAD//wMAi6VxETgVAAA= http_version: - recorded_at: Thu, 16 Jul 2015 17:23:20 GMT + recorded_at: Tue, 28 Jul 2015 20:51:24 GMT - request: method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/d3qt9t/submit_for_settlement + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/33fr6t/submit_for_settlement body: encoding: UTF-8 string: | @@ -316,7 +321,7 @@ http_interactions: message: Unprocessable Entity headers: Date: - - Thu, 16 Jul 2015 17:23:21 GMT + - Tue, 28 Jul 2015 20:51:22 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -339,53 +344,55 @@ http_interactions: Cache-Control: - no-cache X-Request-Id: - - 5b82979f46ec11f0369f46e7a82c8ce4 + - d1b0a3f00ad8aa4c48e72ddf1f416d8e X-Runtime: - - '0.163403' + - '0.147591' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - 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 - AAD//wMAzeRw3kkYAAA= + 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 http_version: - recorded_at: Thu, 16 Jul 2015 17:23:21 GMT + recorded_at: Tue, 28 Jul 2015 20:51:24 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/success/can_be_voided.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/success/can_be_voided.yml index f061c4c6..e7e9d137 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/success/can_be_voided.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/success/can_be_voided.yml @@ -8,20 +8,17 @@ http_interactions: string: | - John - Doe - burnice_schiller@stiedemann.name + Card + Holder + berta.hamill@strosin.co.uk Card Holder - John - Doe 10 Lovely Street Northwest - Company Herndon - Alabama - USA + AL + US 35005 fake-paypal-future-nonce @@ -47,7 +44,7 @@ http_interactions: message: Created headers: Date: - - Thu, 16 Jul 2015 17:23:16 GMT + - Tue, 28 Jul 2015 20:51:18 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -68,31 +65,31 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"2bf27194b0419a895383f881ee65472f"' + - '"f53d3fd4b5440e3ea0c0587d79ea69ac"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 28aee6a28e2032f1e64c353baf0a8335 + - d54a32ddb72c87cca6eaa6220c000c54 X-Runtime: - - '0.377438' + - '0.214763' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAITop1UAA6RTu3LbMBDs/RUc9iREyZZsDUS5yKRI7TRpNEfgJCIBDgwA - WqK/PiBpPRymybi83b29wy3Jtyejk1d0XlnapEU+SxMkYaWiwyb9/vI1e0y3 - 5R0XrQ/WoCvvkoQrWRbLRTF/nD1xFosei5yogUIW67eKHrq3309hdTTH0/2c - s1u2V++V8yEjMFh+szVxdgP0vIZz9cUiZ9eyJ4U1DVCXkNKbNLgWUzbgaEDp - smodKYE7L2qlNbpnHxTKyBHlvQVno67vaGpLOPHZw2mCHbHyKky1wiEElBmE - JHQNblIZy6AMpuV8Vjxks1VWLF+K1Xq+WBfLH5xdG4b+tpH/139tGOcPuWR7 - hVr6y0pShUyAk/7dFJyD7n3jBroGdAZC2JbCR0UvmEhGMMLB/kIqK3m/oCNn - Y3Xmxpv+BMJcWnzGE5hGYx6jurn3oJS4h1afn1tZqxEoLfubcvZOXsTKwAGz - 1umyDqHxa8bAeww+rxwoCg7xEK9xhK6fxOLeBinsDIbayp22B8vGt+QNHbZI - r8pZ6iUbDyQre4qf72XCeeYnIx08Phnr4OHbygunmhD/zH8EGRVsGtTfmB9A - kNJhPNzEJi5/+bH/AAAA//8DAC4zGWYLBAAA + H4sIAEbrt1UAA6RTy27bMBC85ysE3SXaQoyoBi0HKBDkA9JLL8GKXNts+FDI + VSzl60tJfrXqpchxZ2ZfsyTfdkYnH+iDcnaTLvNFmqAVTiq736Q/Xp6yMt1W + d1y0gZxBX90lCVeyKouiLFblPWcxGLDIiQNYymL8WdtV//n+jR6O5tjdF5zd + soN6p3ygzILB6jt4ydkNMPAaztGz0xI9Z1dk4IUzDdg+sUpvUvItpmzE0YDS + VY2eID+AUVo/BvIuKJsLl7dvnE2KQdscnMVZhR10M+yIdVA01wqPQCgzoIT6 + BjepjCEpg2lVLJarbPGQFeVLsVivlutl+ZOza8KY3zby//KvCVP/8SjZTqGW + 4TKSVJSJaGo4FQXvoT9N3EDfgM5ACNda+lMxCGaSCYwwuTe0lXivO3vkbIrO + 3OTpL7CYS4eP2IFpNEbHzY3fo1LiDlp9Xrd2TiPYtBo85exEXsTKwB6z1uvq + QNSENWMQAlLIaw/KkkfcRzeO0A+dWJzboKVXg3Rw8lW7vWPTLnlj91u0H8o7 + O0g2AaysXRff7qXDuecXTzrW+OJZxxqhrYPwqqH4Lf9xyKhg80P9jYURBCk9 + RuNmZeLwl1/9GwAA//8DAMAZ41QIBAAA http_version: - recorded_at: Thu, 16 Jul 2015 17:23:17 GMT + recorded_at: Tue, 28 Jul 2015 20:51:20 GMT - request: method: post uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers @@ -101,20 +98,17 @@ http_interactions: string: | - John - Doe - burnice_schiller@stiedemann.name + jane.doe@example.com + + berta.hamill@strosin.co.uk jane.doe@example.com - John - Doe 10 Lovely Street Northwest - Company Herndon - Alabama - USA + AL + US 35005 fake-paypal-future-nonce @@ -140,7 +134,7 @@ http_interactions: message: Created headers: Date: - - Thu, 16 Jul 2015 17:23:17 GMT + - Tue, 28 Jul 2015 20:51:19 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -161,31 +155,31 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"90cac6f0da547b6bc8de9c0ef13633e6"' + - '"331ffa072e8e0fde60daae50d83c8227"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - ba39dda0f2916acbda2e44cbe8fb080f + - 3b47a5cdf5cb6a985df0d24a776706ea X-Runtime: - - '0.211842' + - '0.251727' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAIXop1UAA6RTu3LbMBDs/RUc9iQk2bJsDUS5yKRI7TRpNEfgRCIBDgwA - WqK+PiBpPRymybi83b29wy3Jt0ejkzd0XlnapPN8liZIwkpF1Sb9/vo1e0q3 - xR0XrQ/WoCvukoQrWSyen1az++UDZ7HosciJGihksT6VtOxOv5/D6mAOx4cF - Z7dsr94r50NGYLD4Zmvi7AboeQ3n6otFzq5lTwprGqAuIaU3aXAtpmzA0YDS - Rdk6UgJ3XtRKa3QvPiiUkSPKewvORl3f0dSWcOKzh+MEO2DpVZhqhUMIKDMI - Sega3KQylkEZTIvFbL7MZqts/vg6X60X9+v56gdn14ahv23k//VfG8b5Qy7Z - XqGW/rKSVCET4KR/NwXnoHvfuIGuAZ2BELal8FHRCyaSEYxwsL+QisfqcDKO - s7E6c+NNfwJhLi2+4BFMozGPUd3ce1BK3EOrz88trdUIlBb9TTl7Jy9iZaDC - rHW6qENo/Jox8B6Dz0sHioJDrOI1DtD1k1jc2yCFncFQW7nTtrJsfEveULVF - elPOUi/ZeCBZ2mP8fC8TzjM/Geng8clYBw/fll441YT4Z/4jyKhg06D+xvwA - gpQO4+EmNnH5y4/9BwAA//8DAGLf/fQLBAAA + H4sIAEfrt1UAA6STy3abMBCG93kKDnsQOKVJfABn1SdIN93kDGiMVetCpMGG + PH0F2CQt3vRkOf98c9H8kO96JYMTWieMLsI0TsIAdW240E0R/nz5ET2Gu/Iu + rztHRqEt74IgF7zM0jRJN+l9znwwaj5XH0BT5OP3SmfD+9sTPZzVuf+2ydnn + 7EjvhXUUaVBY/gaNMTf4jD2oVmJcG5WzT8DIS7hEgRayCMl2GLIp4+kW9LDS + UYGQZYWWID6AElI+O7LGCe0HxN0xZzMxsu3B6HXnPfQr7YyVE3RjC4tAyCOg + gIYWi5D7kITCsNwkaRYlD9Hm8WWTbLN0mz79ytlHwVTftfz/6j8K5vmTPdFe + oORuWYkLimqw3F2agrUwXDZuYWhBRlDXptP0NzECK2QWvUzmiLrMTsdKfc/Z + HF1z801vW7rceyI57qGT1+dWxkgEHZbjTXN2SS6wUNBg1FlZHohat2UMnENy + cWVBaLKIjb/GGYZxEvN7K9T0qpAOhr9K0xg2vyVudbNDfRLW6BEpHGhemd5/ + xcuE68wvWjr1+KKtUw/XVa62oiX/g94w0hNsbdS/mptE4NyiP9yqjV9++b// + AAAA//8DAGYadC4SBAAA http_version: - recorded_at: Thu, 16 Jul 2015 17:23:17 GMT + recorded_at: Tue, 28 Jul 2015 20:51:21 GMT - request: method: post uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions @@ -194,13 +188,21 @@ http_interactions: string: | - 29870354 - R368285154-H78ZUVBA + R229128108-SJJUFCMY 45.75 - 6gwzmr Solidus + + 10 Lovely Street + Northwest + Herndon + AL + US + 35005 + + 5vkbm6 + 51101213 sale headers: @@ -220,7 +222,7 @@ http_interactions: message: Created headers: Date: - - Thu, 16 Jul 2015 17:23:18 GMT + - Tue, 28 Jul 2015 20:51:20 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -241,58 +243,60 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"521da6b5b17247d7e961090f0b0ca42b"' + - '"a981bf31b8b3c95ac65c1e8ac45fb8da"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 2fe0dbef6b55f9342caa6410f54c6bac + - a871ea0878568158ab2d6afdadf3f935 X-Runtime: - - '0.358065' + - '0.301365' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - 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 - h7OFphQAAA== + H4sIAEjrt1UAA8RYTXPbNhC951dodIdJyZZlZ2gmTu2kzridThwf0osHJFYS + YhJgAVC2+uu7IEiKFEHb0+lMb+LuA7C72I8HRR+e82yyBaW5FBfT2VE4nYBI + JeNifTG9//6ZnE0/xO8io6jQNDWIit9NJhFn8Sp/ZOxnFOBPK9GGmlLHtDQb + qfjfwKKgFlmt2RUQa5pBFFQ/rSwtlcKzdoRrSfBIiO/vrqJgKLZgmstSmPhk + cbRcREH9ZRU5qHRDhSE0Ta2QoD26UIAn+VR2iVQMlP34Np+fz+Zns/CM3H39 + ev/5l99+REGrrWxUQA0wQs3E2n0xZfhpeA7TeB7OFiRckvnZ93n4fjF7Pzv/ + E61vF1Try4K9ef08xPX7BXWMtJHoh/1wYV/MZuFsPjtuAo/SFVfaEEFziH9S + AUdMwkd4pnmRwVEq8yjoANyKjNbfE8Gzi6lRJUyDWocrCip2Hg3klGdxAsrQ + ow3NeZZ91EZJzQUec1Q+RoFDOPQTJJob3wnFRgqffEWfD6U2HfYRiBI8EzOz + jYZvk9ZXj/Lf+Y1OAmAWMaZAa19gng0IZm9tFJLJlGbc+LZXsMay8sVJYgVl + VQ147cWUVrtxd5zariY0KzZ0/ibU8WsoUeJt8HR4U53LQZ9WpWBkeEN7ja4r + gipFdz0lBrLTb3ybaDAmgxywphNq0o0Xs+FF8X8nSzwLJ7dyC9luclcpbFfs + AfwZFP8uldk8gcYFA10/o+JfQQkmRRS0km5exZe3UVD/HKRVfLwIQ+ynXdEw + u+J7gYXM0ANsTXoiV5PLKgUoVmcXNpp42Nj30K58NAlxxaVvyfELGRmfnYQH + axpNlZ/dhKgbK1lxyJh2CUO3moBSUhGMciGFBm/pVbhOwPro+Aan04uAZot+ + Hvh3eRFTubHdDlcOhRa6xst7ojvU/ARXWDiq9LDxRIWSKZ6GcWiGOa3g3mDs + wf0TZ2GIlzGmHVlpMNXjywI1W8sfxhBVBBnj1iqM8RA2sHIreWrvYYX3iysw + LXCKDX0pLV/AUxwFGEEZ+kwc//Cq4Bnyopn2iZQZUDGNVzTTlvu0gIZdoBck + paoZ5UY+gogX28ckP0V49eU0CfeNiKpHnfgaFO5JrBHecVVw5e40l8JsYttj + DkQD5A6o6gMrSX1aPaSJbUHGP82sRRuZVZH1N1We0zWQUmXxxphCvw8CqrHT + 66NEUS5sKdQ5bFlNUNCdHQAPOWCSsodMrmVQikchn8RRIdYfQGy5ksJiLjQV + LJHPyJnaI+peqKCgSKTu3UKbc07g1Bugmdmg5bBHdGQOxCDhZq93n7WqVHhv + mHjrMrO0roM61LRzxbJWTrM9tCOrjaY7JbMOohHUYdS6xDaHk1E87jE9ab+J + yhWxWipS6J46VDYxk6xMKzbdCVsrc6BS8L9KqGsIxXgLHJvtoJxscYLIJdHs + caRoWn1NCPtFUz88yIZjCqpdj1S0I7lCAG5UX4ytNCThqMiLNxLzFt/u8OKL + p0KMPVpchDSSWpZTsQZs9O7FUslaCzscSEvsTRDTgqMlQ7nzMzh0tJXUwXFd + LqN+TlUmOlW8GOVcHX3bkyrGRwocspIRZCnEhtFzxwdINEsZLxZNPjjHtnqC + Xd1DFxnXVZp6deB2kU2PGmk6Y48R7BFD2/qbIsOyj1X0ayRzW73r9vgWFZDF + dzLjrNSYybXAMVq1tTNqBTA2XezZ8om4Kx1oMRZJqbQjxQwMPsQapthX+S+o + w6j9x/cxg0f6G+HwbJ3GFqz8Zlj6j+mKpMy3YZmmntcVXsuI79bzorScdZgf + 9fggXCDJKquf1T8TKC9o9lD/ZRAFY7g+hen42mc6XRYzCnp9r4r3vLZXS47M + BrsJwTKz+Qdo+koOyU7l56u0A2HYv927vvrd/2ehq24XuHix+I/LHyRZ0EV4 + TufJ+ZIes9MlTU4pW6TnncA2I6PPNlF8d3l7TRaLVRim7DyZzcI5ZfjmGOD+ + K/bgQvJ28oCTvlxbA66uP91/Iew0WS6O4Wx+vJhXNMAp93EEFygfN+q8Rnw9 + qoqyi+j1t4ebK7JcnoQnlC3PMZyz2fy0uYneeYp0/vj5KjeiQQ3+D3Li9sEb + X0losHthU9VZhmLMRFM/I+qhd3178+Xm0+01dvAxSEMEC1Olpc/V0T8ODgbi + eJ/0AN/SrZrW7iGvUdAUS2/4xu/+AQAA//8DABQvrk4+FQAA http_version: - recorded_at: Thu, 16 Jul 2015 17:23:18 GMT + recorded_at: Tue, 28 Jul 2015 20:51:22 GMT - request: method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/67y784/submit_for_settlement + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/fmkddj/submit_for_settlement body: encoding: UTF-8 string: | @@ -317,7 +321,7 @@ http_interactions: message: OK headers: Date: - - Thu, 16 Jul 2015 17:23:19 GMT + - Tue, 28 Jul 2015 20:51:20 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -338,54 +342,57 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"630eee7e225f6e5afd54d3b2c3ebdb3d"' + - '"128ad7fee128bc8ea9753c4dc98fbd2a"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 4639182e2c6b9d49dd860790f58f4d38 + - 38475f06fd1f93d58bf1ded5c2fdd8a4 X-Runtime: - - '0.305655' + - '0.234556' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - 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 + 4ld/AgAA//8DANYEaVyEFwAA http_version: - recorded_at: Thu, 16 Jul 2015 17:23:19 GMT + recorded_at: Tue, 28 Jul 2015 20:51:22 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/success/succeeds.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/success/succeeds.yml index 71a590bd..f9a339d9 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/success/succeeds.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/success/succeeds.yml @@ -8,20 +8,17 @@ http_interactions: string: | - John - Doe - melba@danielmohr.com + Card + Holder + camila@steuber.info Card Holder - John - Doe 10 Lovely Street Northwest - Company Herndon - Alabama - USA + AL + US 35005 fake-paypal-future-nonce @@ -47,7 +44,7 @@ http_interactions: message: Created headers: Date: - - Thu, 16 Jul 2015 17:23:13 GMT + - Tue, 28 Jul 2015 20:51:16 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -68,31 +65,31 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"2b8d7e0a729ae3967fb58768d5b91d4a"' + - '"672433a0e7e62a6a90d9feed2cdd0bdd"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - c10b4c612f00386749bb0ea68bd6f43a + - 1289af59630195fb7458b72bf9fc9a6c X-Runtime: - - '0.198819' + - '0.214091' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAIHop1UAA6RTSXObMBS+51cw3LHAWZx6BM6h00PP6aWXzAM9gxrpiUoi - Bv/6CvCShl46OX7L2yW+67WK3tA6aSiPs1UaR0iVEZLqPP7x/C15jHfFDa86 - 541GW9xEEZeieEg36eNdlnEWwMgFrWqAfBLwsaT74fj7i98c9KG/W3P2Xh3d - e2mdTwg0Ft9NQ5y9I0ZdwRl9NcjZFY5iZXQLNEQkVR5722HMJh41SFVoVCU8 - CSCJSpvGroKds1kbXW1jCBexe+gX3AFLJ/3SW1kEjyIBH/mhxTwWAXqpMS7W - aXafpJske3jONtv17Ta7/cnZNWCK71rxf/HXgLn+dItkHwYU7tKSkD6pwAp3 - SgrWwnDquIWhBZVAVZmO/N+O0bCwzGSgvXlFKl6PZV9azmZ01uad/gLClTD4 - hD3oVuGHfU9OgXvo1Hnc0hiFQHEx7pSzk3gxSw01Jp1VReN967aMgXPo3aq0 - IMlbxDps4wDDWImFvjWSf9HoGyNelKkNm2dZtVTvkN6kNTRacgckStOHJ3up - cK75yZNOOT551imH60pXWdn68Bv/ccjgYMtDfeTcRIIQFsPiFmlC85fP/AcA - AP//AwCg+wF4/wMAAA== + H4sIAETrt1UAA6RTy3KbQBC8+yso7rDoZcmqFXJVqlL5AOeSi2tgR2iTfZDd + wQh/fRbQyyGXlI/T3fPYbuD7k1bRGzovrdnFszSLIzSlFdJUu/j7y9dkE+/z + B142nqxGlz9EEZci32TrZbbYPHIWih4LXHkEQ0mo3wuz6t5/P9G61e1pOefs + nu3VB+k8JQY05l/ACc7ugJ5XcKm+WSXQcXZDer60ugbTRUaqXUyuwZgNOGqQ + Ki9BSwXPnrAp0KXSHCxnI9WL6qM1OGk9wGmCtVh4SVNt6RAIRQIUUVfjLhah + JKkxzufZbJVk62S+eZln29VsO3v8wdmtYehvavF//beGcf+QRnKQqIS/niQk + JWVw05+HgnPQnS+uoatBJVCWtjH0UdELJpIRDDDZX2jyZfu0WLScjdWFGz39 + CQZTYfEZT6BrhWlI587vQSnwAI26PLewViGYOO895exMXsVSQ4VJ41R+JKr9 + ljHwHsmnhQNpyCFWwY0Wun4TC3drNPSqkY5WvCpbWTa+Ja1NtUfzJp01vWTn + wYjCnsJHe91w2fnJSIcZn4x1mOGbwpdO1hT+x38EGRRsGtTfmB9AEMJhMG4y + Jhx//Z3/AAAA//8DALVm5K8BBAAA http_version: - recorded_at: Thu, 16 Jul 2015 17:23:13 GMT + recorded_at: Tue, 28 Jul 2015 20:51:18 GMT - request: method: post uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers @@ -101,20 +98,17 @@ http_interactions: string: | - John - Doe - melba@danielmohr.com + jane.doe@example.com + + camila@steuber.info jane.doe@example.com - John - Doe 10 Lovely Street Northwest - Company Herndon - Alabama - USA + AL + US 35005 fake-paypal-future-nonce @@ -140,7 +134,7 @@ http_interactions: message: Created headers: Date: - - Thu, 16 Jul 2015 17:23:14 GMT + - Tue, 28 Jul 2015 20:51:17 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -161,31 +155,31 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"29fe4c79c0a6a96ef4630a150c8053f4"' + - '"5455ae74d342664e29a81deaee3e289b"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 99486ff80ef039acadeba1f3ac9617ee + - 756d98c456ec27a7d57687d7bfb49d5a X-Runtime: - - '0.219678' + - '0.182270' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAILop1UAA6RTS3ObMBC+51cw3LEMjuvaAziHTg89p5deMgtag2JpRSQR - Q359BfiRhl4yOX6PfUvpvlMyeEVjhaYsjBfLMEAqNRdUZeHvx5/R93Cf36Vl - a51WaPK7IEgFz1erZLWN19uUeTBwXitrIBd5/FbQun972brNSZ26+yRl79XB - fRDGuohAYf5L15Syd8SgS7igHxpTdoODWGrVAPUBCZmFzrQYspFHBULmCmUB - DxxIoFS6NgtvT9mkDa6m1oSz2AN0M+6EhRVu7i0NgkMegQtc32AWcg+dUBjm - yTJeR8tNFH97jDe7ZLWL7/+k7BYwxrcN/1z8LWCqP94iOvgBub22xIWLSjDc - npOCMdCfO26gb0BGUJa6JfevYzDMLBPpaaePSHlyfOmOfosTumjTTp+BcME1 - PmAHqpH4Yd+jk+MBWnkZt9BaIlCYDztN2Vm8moWCCqPWyLx2rrE7xsBadHZR - GBDkDGLlt3GCfqjEfN8KyT0pdLXmT1JXmk2zLBqq9kivwmgaLJkF4oXu/JO9 - VrjU/OJJxxxfPOuYw7aFLY1onP+N/zmkd7D5oT5ydiSBc4N+cbM0vvnrZ/4L - AAD//wMAU+gVov8DAAA= + H4sIAEXrt1UAA6STzXbiMAyF932KnOwTAy1QOCF0NU/Q2cymR4kFeGrLrq0U + 0qcfJwHambCZ06Xu/fRjKSm2J6OTd/RBWdqk03ySJki1lYr2m/Tn84/sMd2W + d0XdBLYGfXmXJIWS5fx+sbpfzR8KEYNOi159AOIsxh8VzduPtxUvj+Z4epgV + 4qvb0TvlA2cEBsvfQJhLi094AuM05rU1hfgCdLyGc5SQ0puUfYOp6J1IO6B2 + pKMBpcsajNLwFBibCn2uaGcLMVgd5A6WxiV3cBppR6yC4hvtPQKjzIATbh1u + UhlDVgbTcjaZzrPJMps9Ps8m6/l0PV38KsRnQp/fOPl/+Z8JQ//+LtlOoZbh + OpJUnNXgZTgXBe+hPU/soHWgM6hr2xD/TXTACBnEKLN9RSqlo+ViUYghunjD + Tm/f8rrvnpS4g0ZfnltZqxEoLbudFuJsXmFlYI9Z43V5YHZhLQSEgBzyyoMi + 9oj7uI0jtF0nEec2SPxikA9Wvmi7t2J4S+5ov0V6V95Sh2wCkKzsKX6+1w6X + nt88aV/jm2fta4SmCrVXjuOfeeOQkRDjQ/2rhV4EKT3GxY3KxOGvP/YfAAAA + //8DAH3AOCELBAAA http_version: - recorded_at: Thu, 16 Jul 2015 17:23:14 GMT + recorded_at: Tue, 28 Jul 2015 20:51:18 GMT - request: method: post uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions @@ -194,13 +188,21 @@ http_interactions: string: | - 33239159 - R685732329-VWRF2GTK + R398841647-JHUKE3CE 45.75 - 2kqxkm Solidus + + 10 Lovely Street + Northwest + Herndon + AL + US + 35005 + + dpn766 + 53693954 sale headers: @@ -220,7 +222,7 @@ http_interactions: message: Created headers: Date: - - Thu, 16 Jul 2015 17:23:15 GMT + - Tue, 28 Jul 2015 20:51:17 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -241,57 +243,60 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"d75ca42ffef3bdf7c114141db97807eb"' + - '"e0c0b43c86a849e4b8335d4cc0d1d1db"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - c04b9af474887b4b5c80f8b55245a1ab + - 6228a9b107f2fe507e611b1bc0681cd1 X-Runtime: - - '0.312060' + - '0.335533' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAIPop1UAA+xYS3PbNhC+51d4dIcpyZIlZWjmMXYybnPoJHE77cUDkisR - NQiwAChL/fVdECRFimDsQw899CbufgD2hd0PCt8dcn6xB6WZFDeT2eV0cgEi - kSkTu5vJw/dPZD15F70JjaJC08QgKnpzcRGyNIqXy81mHQb400q0oabUES1N - JhX7G9IwqEVWa44FRJpyCIPqp5UlpVJ41pEwLQkeCdHDt9swGIotmOayFCZa - LC9XyzCov6wiB5VkVBhCk8QKCdqjCwV4kk9ll0iVgrIfX6/Xy9XV/Gq+Ib/+ - 9vXT/PP3n8Og1VY2KqAGUkLNhbX7ZpLip2E5TKL5dLYk0xWZXX+frd7Or97O - Fn+g9e2Can1ZpK9fv8T1pwV1jLSR6If9cGG/Qns3s+WmCTxKt0xpQwTNIfpJ - ZiIMOgKH4LT5vpUYmNOnUycyL6g4XgjGbyZGlTAJag3klPEoBx7T9ykVDHgu - M3WJC8LA6RzuGWLNDHh2KDIpfPItPZxLbe5P7oYx4xzLsHXdt0nrqEfZeunR - jXusDdYOlkyaKtDaF5KDAZHaFI1CuEwoZ8a3vYId3iFfnCReF14VvNderF91 - HHfHqe1qQnmR0fmrUFcvoUSJ2WDJMFOd5KBP21KkZJihk0bX5U+VoseeEgPZ - aS6+TTQYwyEHvMAxNUnmxWSsKP4vlv9osXSzU7c0ssVekmoHoHtNQCmpCMao - kEKD17UK13G9j47ucS78ENBs0c+af5cfYio39vvhyqHQQnfY0Z/pETV/gqty - HBJ6mNiwUDLB0zAOzRilFdwbjBO4f+JsOp2GwZh2ZKXBQo0+FKjZ28k9hqgi - mKbMWoUxHsIGVu4lS2wetphfXIElEoMa+lLaSY2nuOE7gjL0QNzk96rgAHnR - zNlYSg5UTKIt5dqyjhbQzHX0giRUNUPUyCcQ0fzpr8MTzjb35TQx813BqmEs - fFcC9yTWCG87KJhyOc2lMFmEU/RcNEAegao+sJLUp9UTk9g2YvzdwlqUSV5F - 1t8SWE53QErFo8yYQr8NAqqx7erLWFEm7FWoa9hO/qCgR9uNH3PAIk0fudzJ - oBRPQj6Ly0Ls3oHYMyWFxdxoKtJYHpCttEfULUxBQZHCPLiFtuacwKkzoNxk - aDmcEB2ZA6UQM3PSu89aVSrMGxberuSWUHVQ55q2yVu+yCg/QTuy2mh6VJJ3 - EI2gDqPWJbY5HFPi6YTpSfttU26J1VKRQPfUobKJmUzLpOKxnbC1MgcqBfur - hPoOoRizwLDZDq6TvZwgckl0+jRyaVp9zc76l6am/CRjWILq2Jvw7XysEIAb - 1YmxNw3pLyry4pWUuMW3O/zwrVEhxp4LLkIaGWaaU7EDbPTurVDJWgs7hERL - 7E0Q0YKhJUO58zM4d7SV1MFxXY5TP8EpY50oVowSoI6+7UkV/SIFDlyZEuQY - xIbRk+MzJJqljBeLJp+dY1s9wa7u4W4p01WZenXgdpFNjxppOmMvA+wRQ9v6 - myIzss9E9Gukclu96/b4ChTAo2+Ss7TUWMm1wNFLtbczagswNl3s2fKZuJQO - tBiLuFTaMdQUDL6KdNOFeip/gjr01n98HzN4Hr8SDgfrNLZg5TfDcnEsVyRl - vg3LJPGwV0zLiO/W86I04KuPenwQJpBkldXP6j8BlBeUP9aP9TAYw/UpTMfX - PtPpsphR0Mt7Vbznpb1acmQy7CYEr5mtP0DTt3JIdio/X6QdCMP+7R7Z1e/3 - cMAmyMG9vrvqdoGLVxr98uF3MqNTSGZLSrez1XIxW8fTFKbxfNUJbDMy+mwT - xd8+fLkjUzpfzpfT+HqdLpbzTYJ99Bz3b7EHF5LXkwec9OXOGnB79/HhM7ma - bpI1vZ5tZ8u4ogFOeYojuED5uFHnNeLrUVWUXUTvvj7e35L1ZjEHPG6VUFgt - trMmE73zFBn8JzMQd9Fn/8+cC5tbzTmKsRJN/Yyoh97dl/vP9x+/3GEHH4M0 - RLAwVVn6XB19xZ8NxPE+6QG+2K3CoLkOvfEavfkHAAD//wMA0oY/nZoUAAA= + H4sIAEXrt1UAA8RYS3PbNhC+51dodIept+UMzcSp3cSpp9OJ40N78UDESkJM + AiwAylJ/fRcESZEiaLudzvRG7H547GIfHxh+2KfJYAdKcykuh+Oz0XAAIpaM + i83l8OH7z2Q5/BC9C42iQtPYICp6NxiEnEVMXMyel2GAn1aiDTW5jmhutlLx + v4CFQSmyWnPIINI0gTAoPq0szpXCvQ6Ea0lwS4ge7q/DoCu2YJrKXJhoNj87 + n4dBObKKFFS8pcIQGsdWSPA8OlOAO/lUdopUDJQdfJteLJez8WJ2Tr5+efjl + ZvrTTRjU2uKMCqgBRqgZ2HNfDhkODU9hGE1G4zkZnZPJ8vtk9H4+fj8+/wNP + X08o5ucZ+2fzjxNKH2kj0Q47cG6fTxcX04v5rHI8StdcaUMETSH6QQWcMQkf + YU/TLIGzWKZh0AC4GQktxwPBk8uhUTkMg1KHMzIqDh4NpJQnUUxTntCP2kC+ + AnXGxVqGgVM52DOsNDe+pbOtFD75mu5PpTYOjqaHK54kGJK1G3yL1EZ6lP/O + YG0wjjB8GFOgtc8jewOC2evqhSQypgk3vuUVbDCffH6SmDpJEfze82Isq0O/ + OU5tZxOaZFs6eRNq+hpK5HgbPO7eVONy0KZ1Lhjp3tBRo8tUoErRQ0uJjmwU + Gt8iGoxJIAVM5hU18daL2fIs+7+DJRqPBndyB8lhcF8obDlsAfwRFP0qldk+ + g8YJHV07oqIvoASTIgxqSTOuoqu7MCg/O2EVTeejERbSpqgbXdGDwERmaAHW + JD2Q68FVEQIUs7MJ6w08rOhHaFPeG4Q448o3ZfpCREbL2ehkTqUp4rMZEGVF + JWsOCdMuYOhOE1BKKoJezqTQ4E29AtdwWBsd3WJbehFQLdGOA/8qL2IKM3a7 + 7syu0EI3eHnP9ICaH+ASC3uU7haeMFMyxt3QD1UXpwXc64wjuL3jeDTCy+jT + 9sw0GOrRVYaanSUOfYjCg4xxeyr0cRfWOeVO8tjewxrvF2dgWGDP6tqSW6KA + u7je34MydE8c8fCqYA9pVrX5lZQJUDGM1jTRlvTUgIpWoBUkpqrq4UY+gYhY + Js4XC4QXI6dZcV+LKGrUzFegcE1iD+FtVxlX7k5TKcw2sjXmRNRBHoCqNrCQ + lLuVTZrYEmT83cyeaCuTwrP+ospTugGSqyTaGpPp90FANVZ6fbZSlAubCmUM + WzoTZPRgG8BjChik7DGRGxnk4knIZ3GWic0HEDuupLCYS00FW8k9kqV6i7IW + KsgoMqgHN9HGnBM49RZoYrZ4cjgiGjIHYrDi5qh3w1KVK7w3DLxNnlg+10Cd + auq+Yukqp8kR2pCVh6YHJZMGohKUbtQ6xzKHnVE8HTEtabuIyjWxWipiaO7a + VVY+kyyPCxrdcFstc6Bc8D9zKHMIxXgLHIttJ51scoJIJdHsqSdpan1JCNtJ + U744yJZjCKpDi1TULblAAC5UXozNNGTfqEizNzLyGl+v8OJTp0D0vVachzSS + WpZSsQEs9O6pUsjqEzY4kJZYmyCiGceTdOXOzuDU0FpSOsdVuYT6OVW+0rHi + WS/naujrmlQwPpJhk5WMIEsh1o2eOz5B4rGU8WLxyCf72FJPsKp76CLjughT + rw7cKrKqUT1Fp+8xgjWie7b2osiw7CsV7eqJ3Frvqj0+QgUk0b1MOMs1RnIp + cIxW7WyPWgP0dRe7t3wm7ko7WvTFKlfakWIGBh9iFVNsq/wX1GDU/u3bmM7r + /I1w2FujsQQr/zEs/cdwRVLmWzCPY8/rCq+lx3ZreZZbztqNj7J9EC6QZOXF + Z/FLAuUZTR7LfwVh0IdrU5iGrW2m02QxvaDX1yp4z2tr1eTIbLGaEEwzG39A + 7Nu8S3YKO1+lHQjD+u3e9cV3+5dCU11PcP5i0W9Xv5P1fA3rxWJBKVszoPPx + KF5N4tW84diqZbTZJorvr+5uyGLBIF6cr+j0nC7GFLOqg/uv2INzydvJA3b6 + fGMPcH3z6eEzgSWdTs+BTmfTaUEDnPLoR3CO8nGjxmvEV6MKLzuP3nx7vL0m + q3gCbDJfLEeT5ZwuLqqbaO2nSOOPz1e5FRWq8yPIiesHb3QtocIehVVWJwmK + MRJN+Ywom97N3e3n2093N1jB+yAVEcxMEZY+U3t/HJw0xP466QG+pVpVpd1D + XsOgSpZW843e/Q0AAP//AwAiHAz6NxUAAA== http_version: - recorded_at: Thu, 16 Jul 2015 17:23:15 GMT + recorded_at: Tue, 28 Jul 2015 20:51:19 GMT - request: method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/b55998/submit_for_settlement + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/dn94w8/submit_for_settlement body: encoding: UTF-8 string: | @@ -316,7 +321,7 @@ http_interactions: message: OK headers: Date: - - Thu, 16 Jul 2015 17:23:15 GMT + - Tue, 28 Jul 2015 20:51:18 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -337,54 +342,57 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"658de87a1a14846affcbd2baa3437f55"' + - '"2d8cad3f7df2b798b2f08ac76e29fe42"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 4234d40c5e8ae93e082ec71c247c908b + - c865ecc6a14cfc2e70febf48a15fe43d X-Runtime: - - '0.306529' + - '0.207284' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAIPop1UAA+xYwXLbNhC95ys8usOUZNGyMjQTJ3YybnPIOHY77cUDkisR - NQmwAChL/fouCJIiRTD2oZ3JTHsjdx+A3cVi9wHBu12enWxBKib45WR2Op2c - AI9FwvjmcvJw/4lcTN6FbwItKVc01ogK35ycBCwJI99frS4CDz+NRGmqSxUq - 0DrDwYFXC4xO7wsIFc0g8KpPI4tLKXGlPWFKEFwQwodv14E3FBswzUXJdbjw - T5d+4NV/RpGDjFPKNaFxbIQErVGFBFzJpTJDhExAmp+78wt/eTY/m6/IL7/e - fZp/vv858FptZaMEqiEhVJ8Yuy8nCf5qlsMknE9nPpkuyez8frZ8Oz97O1v8 - jta3A6rxZZG8fryP4w8D6hgpLdAP82ODfob2rmb+qgk7StdMKk04zSH8SaQ8 - 8DoCi8ho838tMDCHX6uORV5Qvj/hLLucaFnCxKs1kFOWhTlkEX2fUM4gy0Uq - T3FA4FmdxT1DpJgGxwxFKrhLvqa7Y6nZ+4O7QcQyk0et665JWkcdytZLh27c - Y6UxdzBlkkSCUq6Q7DTwxGzRKCQTMc2Ydk0vYYMnyBUngcclqxLeaS/mr9yP - u2PVZjShWZHS+atQZy+heIm7weLhTnU2B31alzwhwx06aFSd/lRKuu8pMZCd - 0uKapCookAMe4IjqOHViUlYU/yfLD5os3d2pSxpZYy1JlAXQrSIgpZAEY1QI - rsDpWoXruN5Hh7fYF74LaKbo75p7lu9iKje22+HIodBAN1jRn+keNX+AzXJs - Emq4sUEhRYyrYRxoqVMh2V+0gjuDcQD3V5xNp9PAG9OOjNSYqOFVgZotJM7R - FaKKYJIwYxXGeAgbWLkVLDb7sMb9xRGYIhHIoS+l6dS4im2+IyhNd8R2fqcK - dpAXTZ+NhMiA8km4ppkyrKMFNH0dvSAxlU0T1eIJeDh/+nP3hL3N/llNxFxH - sCoYC9eRwDmJMcJZDgom7Z7mgus0xC56LBog90BlH1hJ6tXqjklMGdHuamEs - SkVWRdZdElhON0BKmYWp1oV663lUYdlVp5GkjJujUOew6fxeQfemGj/mgEma - PGZiI7ySP3HxzE8LvnkHfMuk4AZzqShPIrFDttIuUZcwCQVFCvNgB5qcswKr - ToFmOkXL4YDoyCwogYjpg97+1qpS4r5h4m3KzBCqDupY0xZ5wxcZzQ7Qjqw2 - mu6lyDqIRlCHUakSyxy2Kf50wPSk/bIp1sRoKY+hu+pQ2cRMJGVc8dhO2FqZ - BZWc/VlCfYZQjLvAsNgOjpM5nMBzQVTyNHJoWn3NzvqHpib8JGWYgnLf6/Bt - f6wQgBPVG2NOGtJfVOTFKylxi29nqC8WTZE0Fetw16gQY9cFGyGFDDPJKd8A - Fnp7V6hkrYUdQqIE1iYIacHQkqHc+ukNHf2XfVdllDON6fu4FvLxQJH+g5Fw - 3Dd/CM9bSX1AbKfLqJvklpGKJStGSXBH3/alioKTAkmXSAjyTGKC6DjnR0g0 - S2onFk0+Wse0e4Kd3cHfE6aqUuXUgZ1FNH1qpPGM3Q6xTwxt60+K7Ng8FaBf - I9Wr1duOn1LOIQu/iYwlpcJqVgvsFUNuDU9ZA4wxDLO2eCZ2SwdajEVUSmVv - KQlovBmrphP1VO4N6lxx3Mv3MYMnklfCYWecxjYs3WaY+ximKxJz14RlHDtu - MLgtI74bz4tSgys/agpBGEeiXVaf1bsQyguaPdYPNoE3huvT2I6vfba7OOLC - o8CX56v470fB8RaZ9ynyKLoipimWFoJnziQjoB9rMWS/ldMv8lCEYUO3ry7V - 93vYYT3MwD7HdNXtABu8JPx69RuZ0SnEM5/S9WzpL2YX0TSBaTRfdqLccIj+ - 9QPF366+3JApnftzfxqdXyQLf76Ksage4/4pOmlD8no2idSv3BgDrm8+PHwm - Z9NVfEHPZ+uZH1W80CoPcQQbKBdZ7lxPXQWrirKN6M3d4+01uVgt5oDLLWMK - y8V61uxEbz1JBo90A3EXffRgdyxsjniWoRgzUdf3yroD3ny5/Xz74csNlvMx - SHMzKHSVlkn48err/cPdDXqEpfEgbh4iRl54jhrloX6G01N/2u+WHaV75MiD - 8Muwqgw1p6g3IHzzNwAAAP//AwDIh+JX4BYAAA== + H4sIAEbrt1UAA+RY3W/bNhB/719h+J2Rv+MUitq0ydp0wVA0zcP2EtDi2WYj + kRpJOfb++h1FSZYiKgm2ARuwN+nudyTveJ8M3+3TZLADpbkU58PxyWg4ABFL + xsXmfHj3/SeyHL6L3oRGUaFpbBAVvRkMQs4iJs5mj8swwE9L0YaaXEcajElQ + OAxKguWZQwaRpgmEQfFpaXGuFO50IFxLghtCdHd7GQZdsgXTVObCRLP5yek8 + DMo/y0hBxVsqDKFxbIkET6MzBbiTj2VFpGKg7M+36dlyORsvZqfky+e7n6+m + H6/CoOYWZ1RADTBCzcCe+3zI8NfwFIbRZDSek9EpmSy/T0Zv5+O349Pf8PS1 + QCGfZ+z18kuUPwqUNtJGoh72xxl9Pl2cTc/ms8rsSF1zpQ0RNIXoBxVwwiS8 + hz1NswROYpmGQQPgJBJa/g8ET86HRuUwDEoeSmRUHDwcSClPopimPKHvtYF8 + BeqEi7UMA8dysEdYaW58S2dbKXz0Nd0/pVo/OKoernhifao2g2+RWkkP868p + rA36EboPYwq09llkb0Awe129kETGNOHGt7yCDUaTz04SQycpnN97XvRldehX + x7GtNKFJtqWTV6GmL6FEjrfB4+5NNS4HdVrngpHuDR05ugwFqhQ9tJhoyEaa + 8S1SJBdIAYN5RU289WK2PMv+bWeJxqPBjdxBchjcFgybDlsAvwdFv0hlto+g + UaDDa3tU9BmUYFKEQU1p+lV0cRMG5WfHraLpfDTCRNokdb0ruhMYyAw1wJyk + B3I9uChcgGJ0NmG9jocZ/Qht0nudECUufCLTZzwyWs5GT2QqTuGfTYcoMypZ + c0iYdg5Dd5qAUlIRtHImhQZv6BW4hsHa6Ogay9KzgGqJth/4V3kWU6ix23Ul + u0QL3eDlPdIDcn6ACyysUbqbeMJMyRh3QzvQ3Gyl4n/QAu41xhHc3nE8GuFl + 9HF7JA26enSRIWcHzCtdIAoLMsbtqdDGXVjnlDvJY3sPa7xflEC3wJrV1SW3 + jQLu4mp/D8rQPXGNh5cFe0izqsyvpEyAimG0pom2TU8NqNoK1ILEVFU13MgH + EBHLxOligfDiz3FW3Fciihw18yUoXJPYQ3jLVcaVu9NUCrONbI55QuogD0BV + G1hQyt3KIk1sCjL+amZPtJVJYVl/UuUp3QDJVRJtjcn02yCgGjO9PlkpyoUN + hdKHbTsTZPRgC8B9Cuik7D6RGxnk4kHIR3GSic07EDuupLCYc00FW8k9Nkv1 + FmUuVJBR7KDunKD1OUdw7C3QxGzx5HBENGgOxGDFzZHvfktWrvDe0PE2eWL7 + uQbqKaeuK7Zd5TQ5Qhu08tD0oGTSQFSE0oxa55jmsDKKhyOmRW0nUbkmlktF + DM1du8zKZpLlcdFGN8xW0xwoF/z3HMoYQjLeAsdk2wknG5wgUkk0e+gJmppf + NoTtoCnnDbLl6ILq0Goq6pJcIAAXKi/GRhp238hIs1d29DW+XqGca6okaTPW + cdQpEH3TirOQxqaWpVRsABO9G1UKWn3CRg+kJeYmiGjG8SRdutMz6Cr693Vf + Pqe7zlcpN+i+92up7o9d2f/QEp5x9z+heU0pA8RVuoT6++p8pWPFs96+u8Gv + 61LR9ZMMGy3JCHaqxBrRE+dPkHgsZbxYPPKTfWy5J1jZPSMD47pIVV4euFVk + Vad6Ck/fQIp1onu29qLYZduXCtSrJ3vVfFfxt1QISKJbmXCWa8xmJcFNNWpn + +5Q1QF+HYfeWj8RdaYeLtljlSrvBiIHBYbyaFtos/wU1pir/9m1M54XmlXDY + W6WxDCv/MewIiO6KjblvwTyOPRM2XkuP7lbzLLdzS9c/yhaCcIGNdl58Fs9S + SM9ocl++F4VBH67dxjZ0bXe7sye9cC/w5fWK/vejFDi4pu0WuRddNKZbTC0E + Y846IxD7WNPtfgulX+xDEYYF3T30FN/tN6YmuxZwxmPR14tfyXq+hvVisaCU + rRnQ+XgUrybxat6wctVDtMcPJN9e3FyRxYJBvDhd0ekpXYwphlgH90+1k84k + r+8msfXLN/YAl1cf7j4RWNLp9BTodDadFn2hYx7tCM5Qvma5MZ76ElZhZWfR + q2/315dkFU+ATeaL5WiynNPFWXUTrf0UaTwBfpFbUaE6L4OOXL+ARJcSKuyR + WIV4kiAZPdGUc2VZAa9urj9df7i5wnTeB6kmg8wUbsmijxdfv999u0KNMDUe + ydWDRs+j0pNCecyf0ehkNG5XywbTL9nzHv0yrPKBunJ1k1QVY63lojd/AgAA + //8DANMkpt19FwAA http_version: - recorded_at: Thu, 16 Jul 2015 17:23:16 GMT + recorded_at: Tue, 28 Jul 2015 20:51:20 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/returns_a_client_token.yml b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/returns_a_client_token.yml index 71e1f885..0396e1d3 100644 --- a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/returns_a_client_token.yml +++ b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/returns_a_client_token.yml @@ -26,7 +26,7 @@ http_interactions: message: Created headers: Date: - - Mon, 20 Jul 2015 19:56:34 GMT + - Tue, 28 Jul 2015 20:50:44 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -47,33 +47,33 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"6c5aa704da18d6b53cb6d2b25555a5f3"' + - '"fc4f6c796b06b8c6f6709aa201c70171"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - b7a5e8d69916de4a528a7d9e8b940471 + - 7b3e9548b19ab1894bf7c0c4636264d7 X-Runtime: - - '0.205921' + - '0.101200' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAHJSrVUAA7RUy27bMBC85ysMXmtLlGVZD9gJ0qRBe2guSU5tYVDUymZN - kQpJyZbT/HspyXYbIw1QoNVxNTsznF3s7GJb8EENSjMp5shzMBqAoDJjYjlH - D/c3owhdnJ/NKGcgzMjINYjzs8FgVhNewfkT2reixBsiUpmVVGxHjK3cWAZQ - pWLCoARNoyiPKSYQpN6EBFEEXhyS8SSnPsHpOErDPIxyHFN/gkMK2A+mPgkg - xjGEYep7P6gCYiBbEDMfYy8Y4XA0xvdenATTxJ84QYynOAzG0Ttsv68VxuNp - AYquiDALls13qQia3WNswk2x2U7GPaKsUs7oYg3NvCni7PvmsVxv09rf7gwa - IipFzpYPilv/K2NKnbguKZmjichSuXVSRezjFMDSOtuQxqGySCYT3z0Ia/dU - 1u1zXFgat/bcXqFSXWCt4opwDjY3jZIv34YIRM2UFAV0Ge51W1zHclmy/2XO - ahCtwegTga72Kjfqx3+CtxWnBlHIN321vYLwxjBqH/6Eqhck+9U7It6meh4i - s7K16zuglYIPgqQcMpQYVcHLX60Sl3Jdlf82xU5jkS10p+L2Eq2vkjQl4SeO - +mLrJWO65KS5JYW1hu5Ky3Ic9SeLFxXnFq9YTWjzy7J1DFtSlBxac25Z2qZK - g7pcWoJ2c/4INVJbbEo0/NWUX9kLugK6lpVx+tfskRlTQM37A3/v3y643Hy0 - fYcAftvxW3kLZiPV+pV/Vk3mOWeiDaUSNRh7DT7vp4CSnHBtG46er46xoYJo - Y3FdwbfNh9FdUiqrPUYf0q6Usuev+aTllczaOTzcXbezo5KJNqnj9DrB55nb - 38GzmfvyQv4EAAD//wMAX2DAUVgFAAA= + H4sIACTrt1UAA7RUTW/aQBC951egvRbwBzYfFiRKk0btobkkObUVGq8H2LLe + dfbDYNL8965toA1KI1VqfRy/ee/tm9FML7Y575SoNJNiRoK+TzooqMyYWM7I + w/1Nb0wuzs+mlDMUpmfkGsX5WaczLYFbPH8i+1aSBF0C1qykYjswrnLjGFAV + iglDEjLABQ4z8AcBUIQgC0bxOED0YQzxeBjQBaQphjiM4iiGiKZDP3Lw4WQS + xlEwgskPqhAMZnMws9AP4p4/6oXj+9BPYj+Jor4/Hk2Gg9iP3vnu+2p9Pxzm + qOgKhJmzbLZLRVztHidmtMk32yhsEYVNOaPzNVazKp9k3zePxXqbloPtzpAu + oVIs2PJBced/ZUyhE8+DgvU1iCyV236qwD1OIS6dsw1UfSpz52XgHYS1dyrr + tTnOHY1XBl6rYFUTWK24As7R5aZJ8uVbl6AomZIixybDvW6Na1guC/a/zDkN + 0BqNPhFoaq9yk3b8J3hX6Zcocvmmr7pXAK8Mo+7hT8S+INmv3hHxNtVzl5iV + q13fIbUKPwhIOWYkMcriy1+1EpdybYt/m2KjMc/mulHxWonaVwFVAfzEUVus + vWRMFxyqW8idNXJXOJbjqD85vLCcO7xiJdDql2XnGLeQFxxrc15RuCarUV0u + HUG9OX+EGqkdNgWNfzXlV/aCrpCupTX99jV7ZMYUUvP+wN/6dwsuNx9d3yGA + 33b8Vt6i2Ui1fuWfU5OLBWeiDsWKEo27Bp/3UyDJArh2DUfPV8fYSA7aOFxT + GLjmw+guKZV2j9GHtK1S7vxVn7S8klk9h4e763p2VDJRJ3WcXiP4PPXaO3g2 + 9V5eyJ8AAAD//wMAm3G+xlgFAAA= http_version: - recorded_at: Mon, 20 Jul 2015 19:56:34 GMT + recorded_at: Tue, 28 Jul 2015 20:50:46 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/returns_a_content_type_of_application/json.yml b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/returns_a_content_type_of_application/json.yml index 2f93f431..d115b8a7 100644 --- a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/returns_a_content_type_of_application/json.yml +++ b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/returns_a_content_type_of_application/json.yml @@ -26,7 +26,7 @@ http_interactions: message: Created headers: Date: - - Mon, 20 Jul 2015 20:03:59 GMT + - Tue, 28 Jul 2015 20:50:43 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -47,33 +47,33 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"14356956da46ac85c0a2b6d241ade05d"' + - '"3b37d2f4128366e910c8f32fb53ad33c"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - a981ffc5af55d5a02a5f066b3330f414 + - 1ea60596fe295b9f44128c7d18357dc0 X-Runtime: - - '0.121941' + - '0.178202' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAC9UrVUAA7RUwXLaMBC95ysYXQvYGLCxB5JJk2baQ3NJcmo7zFpaQEWW - HEk2mDT/XtkG2jBpZjrT+rh++97T252dXmwz0SlRG67kjAz6PumgpIpxuZyR - h/ub3oRcnJ9NqeAobc+qNcrzs05nWoIo8PyJ7FtJMugSKOxKab4D6yo3jgF1 - rrm0JCFBFAXIRpROAp+Gvh/AJI7HEDJMGUQBjSkbDxEYg3AECJMQhj6LYjb0 - F6k/GLAfVCNYZHOws8AfjHt+1Av8+8BP/GEyjvujMByHURxG73z3fS2cQpih - piuQds7ZbJfKcbV7jG20yTbbUdAi8iIVnM7XWM2qLGbfN4/5epuWw+3Oki6h - Si748kEL539lbW4Sz4Oc9w1IlqptP9XgHqcRl87ZBqo+VVkyGg29g7DxTmW9 - Nse5o/HKgdcqFLoJrFZcgRDocjMk+fKtS1CWXCuZYZPhXrfGNSyXOf9f5pwG - GIPWnAg0tVe5STv+E7yr9EuUmXrTV90rQVSWU/fwJ1K8INmv3hHxNtVzl9iV - q13fIS00fpCQCmQksbrAl79qJaHUusj/bYqNxpzNTaPitRK1rxyqHMSJo7ZY - e2Hc5AKqW8icNXKXO5bjqD85vCyEcHjNS6DVL8vOMW4hywXW5rw8d02FQX25 - dAT15vwRapVx2BQM/tWUX9kLukK6VoXtt6/ZIxnXSO37A3/r3y242nx0fYcA - ftvxW3WLdqP0+pV/Tk0tFoLLOpRClmjdNfi8nwJJFiCMazh6vjrGRjIw1uGa - wtA1H0Z3Sakq9hhzSLvQ2p2/6pNRV4rVc3i4u65nRxWXdVLH6TWCz1OvvYNn - U+/lhfwJAAD//wMAabnKE1gFAAA= + H4sIACPrt1UAA7RUTW/aQBC951egvRawscEGCxKlSaP20FySnNoKrdcDbFnv + OvthMGn+e8c20AalkSq19m32zXtv34x2erHNRacEbbiSMzLo+6QDkqmMy+WM + PNzf9Mbk4vxsygQHaXtWrUGen3U605IKB+dPZN9KkkGXUGdXSvMdtVi5QQbQ + hebSkoRkNI0HIfOzmPqD8TikIQBN/QCyER0v0nEc4D/wsygaRws/DBEcjIZB + lsbDeETDyQ+mgVrI5tTOAn8w6vlxLxjfB34y8pNh2I9GQTSMgmjyzsfvq/P9 + IMpBsxWVds6z2S6Vo2r3OLHxJt9sh0GLKFwqOJuvoZpV+ST7vnks1tu0DLc7 + S7qEKbngywct0P/K2sIknkcL3jdUZqna9lNN8XIaYInONrTqM5Unw2HoHYSN + dyrrtTnOkcYrB16r4HQTWK24okIA5mZI8uVbl4AsuVYyhybDvW6Na1guC/6/ + zKEGNQasORFoaq9yk3b8J3is9EuQuXrTV90rqagsZ3jxJ+JekOxX74h4m+q5 + S+wKa9d3wJyGD5KmAjKSWO3g5VGtJJRau+LfpthozLO5aVS8VqL2VdCqoOLE + UVusvWTcFIJWtzRHa+SuQJbjqD8hXjohEK95SVn1yzI6hi3NCwG1Oa8osMkZ + 0JdLJKg3549QqwxiU2rgr6b8yl6wFbC1crbf3maPzLgGZt8f+Fv/uOBq8xH7 + DgH8tuO36hbsRun1K2eophYLwWUdipMlWHwNPu+nQJIFFQYbjp6vjrGRnBqL + uKYQYvNhdJeMKbfHmEPaTmt8/qpPRl2prJ7Dw911PTumuKyTOk6vEXyeeu07 + eDb1Xr6QPwEAAP//AwCKmDtWWAUAAA== http_version: - recorded_at: Mon, 20 Jul 2015 20:03:59 GMT + recorded_at: Tue, 28 Jul 2015 20:50:45 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/returns_an_http_success.yml b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/returns_an_http_success.yml index 245d7815..1a7de27b 100644 --- a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/returns_an_http_success.yml +++ b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/returns_an_http_success.yml @@ -26,7 +26,7 @@ http_interactions: message: Created headers: Date: - - Fri, 24 Jul 2015 14:16:33 GMT + - Tue, 28 Jul 2015 20:50:43 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -47,33 +47,33 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"9541d7a8bd6472399d8625ca4e7e0cd1"' + - '"a98a3c7839959c97577aff8f089f3d4a"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 866e76aeadb76ae81ed399e5b6b11f16 + - 20fc03cbf8a0ea4fc7180c1c7c9de94c X-Runtime: - - '0.130796' + - '0.157002' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAMFIslUAA7RUy27bMBC85ysMXmtbkvW0YCdIkwbtobkkObWFQVErmzVF - KnzIltP8eynJdhsjDVCg1XE1OzOcXezsYluyQQ1SUcHnyBu7aACciJzy5Rw9 - 3N+MEnRxfjYjjALXIy3WwM/PBoNZjZmB8ye0b0WpN0TY6JWQdIe1rdxYBpCV - pFyjFEVJEAZ+5haZm2SJT3ASxJNpHBX5NE4iyIsgDr24yAiJ4ymJIIyCIMvc - 0JvkmeuC/4NIwBryBdbzieuFIzceTYJ7L0i9KPX9cZgkfhInQfLOtd9X47qT - qARJVpjrBc3nu4yHze5xquNNudkGkx5RmYxRslhDM2/Kaf5981itt1ntb3ca - DRERvKDLB8ms/5XWlUodB1d0rDDPM7EdZxLbx0mApXW2wc2YiDINAt85CCvn - VNbpc1xYGqf2nF7ByC6wVnGFGQObm0Lpl29DBLymUvASugz3ui2uY7ms6P8y - ZzWwUqDViUBXe5Ub9eM/wdvKuAZeijd9tb0cs0ZTYh/+hMwLkv3qHRFvUz0P - kV7Z2vUdECPhA8cZgxylWhp4+atVYkKsTfVvU+w0FvlCdSpOL9H6qnBTYXbi - qC+2XnKqKoabW1xaa+iusizHUX+yeG4Ys3hJa0yaX5atY9jismLQmnOqyjYZ - BfJyaQnazfkjVAtlsRlW8FdTfmUvyArIWhg97l+zR+ZUAtHvD/y9f7vgYvPR - 9h0C+G3Hb8Ut6I2Q61f+WTVRFIzyNhTDa9D2GnzeTwGlBWbKNhw9Xx1jQyVW - 2uK6gm+bD6O7JESYPUYd0jZS2vPXfFLiSuTtHB7urtvZEUF5m9Rxep3g88zp - 7+DZzHl5IX8CAAD//wMAXi7tvVgFAAA= + H4sIACPrt1UAA7RUTW/aQBC951egvRbwJwYsSJQmjdpDc0lyaiu03h3DlvWu + sx8Gk+a/d20DbVAaqVLr4/jNe2/fjGZ2sS14rwKlmRRzFAx91ANBJGViOUcP + 9zeDCbo4P5sRzkCYgZFrEOdnvd6swtzC+RPat6I06CNszUoqtsPGVW4cA6hS + MWFQiqLEn45pEo4xSeJoOsqD0YTmhGSTIMpomFAaYxz5EMbJCIIc4zjJkiCe + TCCEaRjBD6IAG6ALbOahH4wG/ngQTu5DPx35aRwNg3g6CpMk8N/57vtqfT9M + ClBkhYVZMDrfZWJU7x6nZrwpNts47BClzTgjizXU87qY0u+bx3K9zapouzOo + j4gUOVs+KO78r4wpdep5uGRDjQXN5HaYKewepwCWztkG10MiizSOI+8grL1T + Wa/LceFovCrwOgWr2sAaxRXmHFxuGqVfvvURiIopKQpoM9zrNriW5bJk/8uc + 08Bag9EnAm3tVW7Ujf8E7yrDCkQh3/TV9ArMa8OIe/gTsi9I9qt3RLxN9dxH + ZuVq13dArIIPAmccKEqNsvDyV6PEpVzb8t+m2Gos6EK3Kl4n0fgqcV1ifuKo + KzZeKNMlx/UtLpw1dFc6luOoPzm8sJw7vGIVJvUvy84xbHFRcmjMeWXpmqwG + dbl0BM3m/BFqpHbYDGv4qym/shdkBWQtrRl2r9kjKVNAzPsDf+ffLbjcfHR9 + hwB+2/FbeQtmI9X6lX9OTeY5Z6IJxYoKjLsGn/dTQGmOuXYNR89Xx9hQgbVx + uLYQuebD6C4JkXaP0Ye0rVLu/NWftLyStJnDw911MzsimWiSOk6vFXyeed0d + PJt5Ly/kTwAAAP//AwChrQ7tWAUAAA== http_version: - recorded_at: Fri, 24 Jul 2015 14:16:33 GMT + recorded_at: Tue, 28 Jul 2015 20:50:45 GMT recorded_with: VCR 2.9.3 diff --git a/spec/solidus/gateway/braintree_gateway_spec.rb b/spec/solidus/gateway/braintree_gateway_spec.rb index 7e73e382..87b11a94 100644 --- a/spec/solidus/gateway/braintree_gateway_spec.rb +++ b/spec/solidus/gateway/braintree_gateway_spec.rb @@ -3,7 +3,6 @@ describe Solidus::Gateway::BraintreeGateway, :vcr do let(:payment_method){ create_braintree_payment_method } let(:user){ FactoryGirl.create :user } - let(:address){ FactoryGirl.create :address } # #create_profile doesn't support options, does it need to? # let(:device_data){'{"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"}'} @@ -57,6 +56,7 @@ expect(card.gateway_customer_profile_id).to be_present end + context 'successful' do it "succeeds" do card.gateway_customer_profile_id = nil @@ -206,4 +206,131 @@ end end end + + context "braintree attributes" do + let(:nonce) { Braintree::Test::Nonce::Transactable } + let(:creditcard) { FactoryGirl.create(:credit_card)} + let(:address) { FactoryGirl.create(:address) } + + context "with a credit card" do + let(:options) { { + customer_id: user.id, + shipping: "20.00", + customer: user.email + } } + + it "should send payment method token" do + expected_params = { + customer: { + id: user.id, + email: user.email, + first_name: creditcard.first_name, + last_name: creditcard.last_name + }, + options: {}, + amount: "5.00", + payment_method_token: creditcard.gateway_payment_profile_id, + channel: "Solidus" + } + + expect(payment_method).to receive(:handle_result) + expect_any_instance_of(::Braintree::TransactionGateway).to receive(:sale).with(expected_params) + payment_method.authorize(500, creditcard, options) + end + + context "with a payment method nonce" do + let(:options) { { + customer_id: user.id, + payment_method_nonce: nonce, + shipping: "20.00", + customer: user.email + } } + + it "should send a nonce" do + expected_params = { + customer: { + id: user.id, + email: user.email, + first_name: creditcard.first_name, + last_name: creditcard.last_name + }, + options: {}, + amount: "5.00", + payment_method_nonce: nonce, + channel: "Solidus" + } + + expect(payment_method).to receive(:handle_result) + expect_any_instance_of(::Braintree::TransactionGateway).to receive(:sale).with(expected_params) + payment_method.authorize(500, creditcard, options) + end + end + + context "with existing customer" do + before { creditcard.update_attributes(gateway_customer_profile_id: 5) } + let(:options) { { + customer_id: user.id, + payment_method_nonce: nonce, + shipping: "20.00", + customer: user.email + } } + + it "should only send customer id" do + expected_params = { + customer_id: creditcard.gateway_customer_profile_id, + options: {}, + amount: "5.00", + payment_method_nonce: nonce, + channel: "Solidus" + } + + expect(payment_method).to receive(:handle_result) + expect_any_instance_of(::Braintree::TransactionGateway).to receive(:sale).with(expected_params) + payment_method.authorize(500, creditcard, options) + end + end + + context "with billing or shipping address" do + before { creditcard.update_attributes(gateway_customer_profile_id: 5) } + let(:options) { { + customer_id: user.id, + payment_method_nonce: nonce, + shipping_address: address.active_merchant_hash, + billing_address: address.active_merchant_hash, + shipping: "20.00", + customer: user.email + } } + + it "should send billing and shipping address" do + expected_params = { + customer_id: creditcard.gateway_customer_profile_id, + options: {}, + amount: "5.00", + shipping: { + street_address: address.address1, + extended_address: address.address2, + locality: address.city, + region: address.state_text, + country_code_alpha2: address.country.iso, + postal_code: address.zipcode, + }, + billing: { + street_address: address.address1, + extended_address: address.address2, + locality: address.city, + region: address.state_text, + country_code_alpha2: address.country.iso, + postal_code: address.zipcode, + }, + payment_method_nonce: nonce, + channel: "Solidus" + } + + expect(payment_method).to receive(:handle_result) + expect_any_instance_of(::Braintree::TransactionGateway).to receive(:sale).with(expected_params) + payment_method.authorize(500, creditcard, options) + end + end + end + end end From c3764f80eeabec23d53edf94e4e908cdd6b02953 Mon Sep 17 00:00:00 2001 From: Jordan Brough Date: Mon, 3 Aug 2015 13:10:58 -0600 Subject: [PATCH 029/163] Send Braintree logs to Rails log Less noisy in specs --- spec/spec_helper.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index c5da1511..702cc499 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -39,6 +39,8 @@ def create_braintree_payment_method end end +Braintree::Configuration.logger = Rails.logger + FactoryGirl.find_definitions VCR.configure do |c| From c381fee8cc9c6216a69a5cb99018df78b2573336 Mon Sep 17 00:00:00 2001 From: Jordan Brough Date: Mon, 3 Aug 2015 13:32:06 -0600 Subject: [PATCH 030/163] Fix credit card profile id in spec This was defaulting to nil --- spec/solidus/gateway/braintree_gateway_spec.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/spec/solidus/gateway/braintree_gateway_spec.rb b/spec/solidus/gateway/braintree_gateway_spec.rb index 87b11a94..e5e6793c 100644 --- a/spec/solidus/gateway/braintree_gateway_spec.rb +++ b/spec/solidus/gateway/braintree_gateway_spec.rb @@ -209,7 +209,9 @@ context "braintree attributes" do let(:nonce) { Braintree::Test::Nonce::Transactable } - let(:creditcard) { FactoryGirl.create(:credit_card)} + let(:creditcard) do + FactoryGirl.create(:credit_card, gateway_payment_profile_id: 'abc123') + end let(:address) { FactoryGirl.create(:address) } context "with a credit card" do @@ -229,7 +231,7 @@ }, options: {}, amount: "5.00", - payment_method_token: creditcard.gateway_payment_profile_id, + payment_method_token: 'abc123', channel: "Solidus" } From 495afc344a6b6828b259a5b9a2972581c0bad2e3 Mon Sep 17 00:00:00 2001 From: Jordan Brough Date: Mon, 3 Aug 2015 13:32:26 -0600 Subject: [PATCH 031/163] Provide an option for always sending the bill address As a configurable option. This is used when performing an auth (or an auth+capture) on an existing profile. --- .../solidus/gateway/braintree_gateway.rb | 8 ++- .../solidus/gateway/braintree_gateway_spec.rb | 62 +++++++++++++++++++ 2 files changed, 69 insertions(+), 1 deletion(-) diff --git a/app/models/solidus/gateway/braintree_gateway.rb b/app/models/solidus/gateway/braintree_gateway.rb index 116a2808..0bcee1b7 100644 --- a/app/models/solidus/gateway/braintree_gateway.rb +++ b/app/models/solidus/gateway/braintree_gateway.rb @@ -6,6 +6,7 @@ class Gateway::BraintreeGateway < ::Spree::Gateway preference :merchant_id, :string preference :public_key, :string preference :private_key, :string + preference :always_send_bill_address, :boolean, default: false CARD_TYPE_MAPPING = { 'American Express' => 'american_express', @@ -205,11 +206,16 @@ def transaction_authorize_or_purchase_params(cents, creditcard, options = {}) if options[:payment_method_nonce] params[:payment_method_nonce] = options[:payment_method_nonce] - params[:billing] = map_address(options[:billing_address]) if options[:billing_address] else params[:payment_method_token] = creditcard.gateway_payment_profile_id end + # Send the bill address if we're using a nonce (i.e. doing a one-time + # payment) or if we're configured to always send the bill address + if options[:payment_method_nonce] || preferred_always_send_bill_address + params[:billing] = map_address(options[:billing_address]) if options[:billing_address] + end + # if has profile, set the customer_id to the profile_id and delete the customer key if creditcard.try(:gateway_customer_profile_id) params[:customer_id] = creditcard.gateway_customer_profile_id diff --git a/spec/solidus/gateway/braintree_gateway_spec.rb b/spec/solidus/gateway/braintree_gateway_spec.rb index e5e6793c..9b1447fd 100644 --- a/spec/solidus/gateway/braintree_gateway_spec.rb +++ b/spec/solidus/gateway/braintree_gateway_spec.rb @@ -290,6 +290,68 @@ expect_any_instance_of(::Braintree::TransactionGateway).to receive(:sale).with(expected_params) payment_method.authorize(500, creditcard, options) end + + context 'when a billing address is provided' do + let(:bill_address) do + create(:address, address1: '1234 bill address') + end + + let(:options) do + { + customer_id: user.id, + billing_address: bill_address.active_merchant_hash, + } + end + + context 'when preferred_always_send_bill_address is true' do + before do + payment_method.update!(preferred_always_send_bill_address: true) + end + + it 'sends a bill address' do + expected_params = { + billing: { + street_address: "1234 bill address", + extended_address: address.address2, + locality: address.city, + region: address.state_text, + country_code_alpha2: address.country.iso, + postal_code: address.zipcode, + }, + customer_id: creditcard.gateway_customer_profile_id, + payment_method_token: 'abc123', + options: {}, + amount: "5.00", + channel: "Solidus" + } + + allow(payment_method).to receive(:handle_result) + expect_any_instance_of(::Braintree::TransactionGateway).to receive(:sale).with(expected_params) + payment_method.authorize(500, creditcard, options) + end + end + + context 'when preferred_always_send_bill_address is true' do + before do + payment_method.update!(preferred_always_send_bill_address: false) + end + + it 'does not send a bill address' do + expected_params = { + customer_id: creditcard.gateway_customer_profile_id, + payment_method_token: 'abc123', + options: {}, + amount: "5.00", + channel: "Solidus" + } + + allow(payment_method).to receive(:handle_result) + expect_any_instance_of(::Braintree::TransactionGateway).to receive(:sale).with(expected_params) + payment_method.authorize(500, creditcard, options) + end + end + + end end context "with billing or shipping address" do From a51216ee91fd4c01f97b44c802f525c660f233a3 Mon Sep 17 00:00:00 2001 From: Allie Larson Date: Tue, 4 Aug 2015 15:06:35 -0400 Subject: [PATCH 032/163] Send payment_method_id with Client Token --- app/controllers/spree/api/braintree_client_token_controller.rb | 2 +- .../spree/api/braintree_client_token_controller_spec.rb | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/controllers/spree/api/braintree_client_token_controller.rb b/app/controllers/spree/api/braintree_client_token_controller.rb index 96ea25ad..50693d7d 100644 --- a/app/controllers/spree/api/braintree_client_token_controller.rb +++ b/app/controllers/spree/api/braintree_client_token_controller.rb @@ -1,6 +1,6 @@ class Spree::Api::BraintreeClientTokenController < Spree::Api::BaseController def create gateway = Solidus::Gateway::BraintreeGateway.find_by!(active: true, environment: Rails.env) - render json: { client_token: gateway.generate_client_token } + render json: { client_token: gateway.generate_client_token, payment_method_id: gateway.id } end end diff --git a/spec/controllers/spree/api/braintree_client_token_controller_spec.rb b/spec/controllers/spree/api/braintree_client_token_controller_spec.rb index 41d911ba..19fbd86d 100644 --- a/spec/controllers/spree/api/braintree_client_token_controller_spec.rb +++ b/spec/controllers/spree/api/braintree_client_token_controller_spec.rb @@ -18,6 +18,7 @@ it "returns a client_token" do body = JSON.parse(response.body) expect(body["client_token"]).to be_present + expect(body["payment_method_id"]).to be_present end end end From c88ec89dba6105bbc5d1bc00618378ad902ce2f4 Mon Sep 17 00:00:00 2001 From: Allie Larson Date: Tue, 4 Aug 2015 16:36:59 -0400 Subject: [PATCH 033/163] ClientToken endpoint uses payment method id params When requesting a braintree client token in admin, will send the payment method id as params to find the gateway by. ClientTokenController will look up BraintreeGateway based on payment method id, if there is one. Otherwise will find the active gateway that matches the env. --- .../api/braintree_client_token_controller.rb | 7 +- .../backend/braintree/solidus_braintree.js | 3 + .../returns_a_client_token.yml | 79 +++++++++++++++++++ .../json.yml | 79 +++++++++++++++++++ .../returns_an_http_success.yml | 79 +++++++++++++++++++ .../returns_a_client_token.yml | 79 +++++++++++++++++++ .../json.yml | 79 +++++++++++++++++++ .../returns_an_http_success.yml | 79 +++++++++++++++++++ .../braintree_client_token_controller_spec.rb | 49 +++++++++--- 9 files changed, 519 insertions(+), 14 deletions(-) create mode 100644 spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/with_a_payment_method_id/returns_a_client_token.yml create mode 100644 spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/with_a_payment_method_id/returns_a_content_type_of_application/json.yml create mode 100644 spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/with_a_payment_method_id/returns_an_http_success.yml create mode 100644 spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/without_a_payment_method_id/returns_a_client_token.yml create mode 100644 spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/without_a_payment_method_id/returns_a_content_type_of_application/json.yml create mode 100644 spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/without_a_payment_method_id/returns_an_http_success.yml diff --git a/app/controllers/spree/api/braintree_client_token_controller.rb b/app/controllers/spree/api/braintree_client_token_controller.rb index 50693d7d..86201f9c 100644 --- a/app/controllers/spree/api/braintree_client_token_controller.rb +++ b/app/controllers/spree/api/braintree_client_token_controller.rb @@ -1,6 +1,11 @@ class Spree::Api::BraintreeClientTokenController < Spree::Api::BaseController def create - gateway = Solidus::Gateway::BraintreeGateway.find_by!(active: true, environment: Rails.env) + if params[:payment_method_id] + gateway = Solidus::Gateway::BraintreeGateway.find!(params[:payment_method_id]) + else + gateway = Solidus::Gateway::BraintreeGateway.find_by!(active: true, environment: Rails.env) + end + render json: { client_token: gateway.generate_client_token, payment_method_id: gateway.id } end end diff --git a/lib/assets/javascripts/spree/backend/braintree/solidus_braintree.js b/lib/assets/javascripts/spree/backend/braintree/solidus_braintree.js index 522fb7f6..ab628393 100644 --- a/lib/assets/javascripts/spree/backend/braintree/solidus_braintree.js +++ b/lib/assets/javascripts/spree/backend/braintree/solidus_braintree.js @@ -6,6 +6,9 @@ var getClientToken = function(onSuccess) { return Spree.ajax({ url: Spree.routes.payment_client_token_api, type: "POST", + data: { + payment_method_id: $('form input[type=radio]:checked').val() + }, error: function(xhr, status) { show_flash("error", xhr.responseJSON.message); }, diff --git a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/with_a_payment_method_id/returns_a_client_token.yml b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/with_a_payment_method_id/returns_a_client_token.yml new file mode 100644 index 00000000..1d000401 --- /dev/null +++ b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/with_a_payment_method_id/returns_a_client_token.yml @@ -0,0 +1,79 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token + body: + encoding: UTF-8 + string: | + + + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Tue, 04 Aug 2015 20:51:48 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"e6c775d2994ffce32850ca4edb36b180"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 83db7e27d41ec30dece923aab021086f + X-Runtime: + - '0.165173' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAOQlwVUAA7RUTW/aQBC951egvZbgTwhYkChNGrWH5pLk1FZovB7DlvWu + sx8Gk+a/d20DbVAaqVLr4/jNe2/fjGZ6sSl4r0KlmRQzEgx80kNBZcbEYkYe + 7m9Ox+Ti/GRKOUNhTo1coTg/6fWmFXCL509k10qSoE/AmqVUbAvGVW4cA6pS + MWFIQoJxmvoQRoBZFKcU83AEaU6RjoI8C2ESRJOzKI9TiIM0ysMIY4jH+QhT + OsIsGIU/qEIwmM3BzEI/GJ7641M/vg/9ZBgk8XgwHI/CYRj643e++75a3w9H + BSq6BGHmLJttUzGst48Tc7Yu1ps47BClTTmj8xXWs7qYZN/Xj+Vqk1bRZmtI + n1ApcrZ4UNz5XxpT6sTzoGQDDSJL5WaQKnCPU4gL52wN9YDKIonjyNsLa+9Y + 1utynDsarwq8TsGqNrBGcQmco8tNk+TLtz5BUTElRYFthjvdBteyXJbsf5lz + GqA1Gn0k0NZe5Sbd+I/wrjKoUBTyTV9NrwBeG0bdw5+IfUGyW70D4m2q5z4x + S1e7vkNqFX4QkHLMSGKUxZe/GiUu5cqW/zbFVmOezXWr4nUSja8S6hL4kaOu + 2HjJmC451LdQOGvkrnQsh1F/cnhhOXd4xSqg9S/LzjFuoCg5Nua8snRNVqO6 + XDiCZnP+CDVSO2wKGv9qyq/sBV0iXUlrBt1rdsiMKaTm/Z6/8+8WXK4/ur59 + AL/t+K28RbOWavXKP6cm85wz0YRiRYXGXYPPuymQJAeuXcPB89UhNlKANg7X + FiLXvB/dJaXS7jB6n7ZVyp2/+pOWVzJr5vBwd93MjkommqQO02sFn6dedwdP + pt7LC/kTAAD//wMA/rlv2lgFAAA= + http_version: + recorded_at: Tue, 04 Aug 2015 20:52:04 GMT +recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/with_a_payment_method_id/returns_a_content_type_of_application/json.yml b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/with_a_payment_method_id/returns_a_content_type_of_application/json.yml new file mode 100644 index 00000000..30e79bcd --- /dev/null +++ b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/with_a_payment_method_id/returns_a_content_type_of_application/json.yml @@ -0,0 +1,79 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token + body: + encoding: UTF-8 + string: | + + + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Tue, 04 Aug 2015 20:51:48 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"781cd592bff63ec41d5cd7c1ae631c1a"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - ab3e2e109fb5ebea46909b73ed7bbf0d + X-Runtime: + - '0.130490' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAOQlwVUAA7RUTW/aQBC951egvRbwJ2AsSJQmjdpDc0lyaiu03h3DlvWu + sx8Gk+a/d20DbVAaqVLr4/jNe2/fjGZ2sS14rwKlmRRzFAx91ANBJGViOUcP + 9zeDBF2cn80IZyDMwMg1iPOzXm9WYW7h/AntW1Ea9BG2ZiUV22HjKjeOAVSp + mDAoRTQJo/GExDEZ+ROIsiwPojwi1I9pnozHOYQBpWOaj0gUQEKTjEzDqT+Z + jMa5n5Bw9IMowAboApt56AejgZ8M/Pg+9NNRkMbJ0A+iOPanYfDOd99X6/vh + uABFVliYBaPzXSZG9e5xaiabYrONww5R2owzslhDPa+LKf2+eSzX26yKtjuD + +ohIkbPlg+LO/8qYUqeeh0s21FjQTG6HmcLucQpg6ZxtcD0kskjjOPIOwto7 + lfW6HBeOxqsCr1Owqg2sUVxhzsHlplH65VsfgaiYkqKANsO9boNrWS5L9r/M + OQ2sNRh9ItDWXuVG3fhP8K4yrEAU8k1fTa/AvDaMuIc/IfuCZL96R8TbVM99 + ZFaudn0HxCr4IHDGgaLUKAsvfzVKXMq1Lf9tiq3Ggi50q+J1Eo2vEtcl5ieO + umLjhTJdclzf4sJZQ3elYzmO+pPDC8u5wytWYVL/suwcwxYXJYfGnFeWrslq + UJdLR9Bszh+hRmqHzbCGv5ryK3tBVkDW0pph95o9kjIFxLw/8Hf+3YLLzUfX + dwjgtx2/lbdgNlKtX/nn1GSecyaaUKyowLhr8Hk/BZTmmGvXcPR8dYwNFVgb + h2sLkWs+jO6SEGn3GH1I2yrlzl/9ScsrSZs5PNxdN7MjkokmqeP0WsHnmdfd + wbOZ9/JC/gQAAP//AwCLkjm+WAUAAA== + http_version: + recorded_at: Tue, 04 Aug 2015 20:52:04 GMT +recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/with_a_payment_method_id/returns_an_http_success.yml b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/with_a_payment_method_id/returns_an_http_success.yml new file mode 100644 index 00000000..e4543e99 --- /dev/null +++ b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/with_a_payment_method_id/returns_an_http_success.yml @@ -0,0 +1,79 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token + body: + encoding: UTF-8 + string: | + + + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Tue, 04 Aug 2015 20:51:47 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"40665863bc7c39f60d0f540c7a2f4751"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 05078dc6b32e5278afbfd1e1830a2181 + X-Runtime: + - '0.207337' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAOMlwVUAA7RUXW/aMBR9769Afh0QBxISImjVtau2h/Wl7dM2Ice5AQ/H + Tv0RCF3/+5wE2Iq6SpM2P16fe87xuVeeXWwL3qtAaSbFHPlDjHogqMyYWM7R + w/3NIEYX52czyhkIMzByDeL8rNebVYRbOH9C+1aU+H1ErFlJxXbEuMqNYwBV + KiYMShCe4CzPgzhOKc4hDvJpFvs4CidhHkY4y8bjFKfTmKQ4H5EomEzDyJ+Q + MHRXmJKY/qAKiIFsQcx8hP1wgOMBDu5HOAn9JIiGoR9EU3+Mx++wO18txqNJ + AYquiDALls13qQjr3ePURJtisw1GHaK0KWd0sYZ6XhfT7PvmsVxv02q83RnU + R1SKnC0fFHf+V8aUOvE8UrKhJiJL5XaYKuIepwCWztmG1EMqiyQIxt5BWHun + sl6X48LReJXvdQpWtYE1iivCObjcNEq+fOsjEBVTUhTQZrjXbXAty2XJ/pc5 + p0G0BqNPBNraq9yoG/8J3lWGFYhCvumr6RWE14ZR9/AnZF+Q7FfviHib6rmP + zMrVru+AWgUfBEk5ZCgxysLLq0aJS7m25b9NsdVYZAvdqnidROOrJHVJ+Imj + rth4yZguOalvSeGsobvSsRxH/cnhheXc4RWrCK1/WXaOYUuKkkNjzitL12Q1 + qMulI2g2549QI7XDpkTDX035lb2gK6Brac2we80emTEF1Lw/8Hf+3YLLzUfX + dwjgtx2/lbdgNlKtX7lzajLPORNNKFZUYNxv8Hk/BZTkhGvXcPR8dYwNFUQb + h2sLY9d8GN0lpdLuMfqQtlXKfX/1Jy2vZNbM4eHuupkdlUw0SR2n1wo+z7zu + HzybeS9/yJ8AAAD//wMASkF0fFgFAAA= + http_version: + recorded_at: Tue, 04 Aug 2015 20:52:03 GMT +recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/without_a_payment_method_id/returns_a_client_token.yml b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/without_a_payment_method_id/returns_a_client_token.yml new file mode 100644 index 00000000..03b90047 --- /dev/null +++ b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/without_a_payment_method_id/returns_a_client_token.yml @@ -0,0 +1,79 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token + body: + encoding: UTF-8 + string: | + + + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Tue, 04 Aug 2015 20:58:40 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"f659ccdce4af1ce619cec00dd6ffa0cf"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - e9936da618db03bf8dc0fd91327d46a4 + X-Runtime: + - '0.213516' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAIAnwVUAA7RUy27bMBC85ysMXmvrZcmWBDtBmjRoD80lyaktDIpa2awp + UuFDtpzm30tJttsYaYACrY6r2Znh7GJnF9uSDWqQigo+R77joQFwInLKl3P0 + cH8zitHF+dmMMApcj7RYAz8/GwxmNWYGzp/QvhWl/hBho1dC0h3WtnJjGUBW + knKNUjRJAh+Pg2gCGEdF6OVZ6E3zPIy9IE68JIzCYgyT2CNZFEBU+EWQR2FS + +HEWxhOcT34QCVhDvsB6Hnh+NPLikRfeB14axWnoOf40mYZxEsfvPPt9NZ4X + TEqQZIW5XtB8vst41OweEz3dlJttGPSIymSMksUamnlTJvn3zWO13mb1eLvT + aIiI4AVdPkhm/a+0rlTquriijsI8z8TWySS2j5MAS+tsgxuHiDINw7F7EFbu + qazb57iwNG7tu72CkV1greIKMwY2N4XSL9+GCHhNpeAldBnudVtcx3JZ0f9l + zmpgpUCrE4Gu9io36sd/grcVpwZeijd9tb0cs0ZTYh/+hMwLkv3qHRFvUz0P + kV7Z2vUdECPhA8cZgxylWhp4+atVYkKsTfVvU+w0FvlCdSpuL9H6qnBTYXbi + qC+2XnKqKoabW1xaa+iusizHUX+yeG4Ys3hJa0yaX5atY9jismLQmnOryjYZ + BfJyaQnazfkjVAtlsRlW8FdTfmUvyArIWhjt9K/ZI3Mqgej3B/7ev11wsflo + +w4B/Lbjt+IW9EbI9Sv/rJooCkZ5G4rhNWh7DT7vp4DSAjNlG46er46xoRIr + bXFdYWybD6O7JESYPUYd0jZS2vPXfFLiSuTtHB7urtvZEUF5m9Rxep3g88zt + 7+DZzH15IX8CAAD//wMAEIiXelgFAAA= + http_version: + recorded_at: Tue, 04 Aug 2015 20:58:56 GMT +recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/without_a_payment_method_id/returns_a_content_type_of_application/json.yml b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/without_a_payment_method_id/returns_a_content_type_of_application/json.yml new file mode 100644 index 00000000..97c1fecb --- /dev/null +++ b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/without_a_payment_method_id/returns_a_content_type_of_application/json.yml @@ -0,0 +1,79 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token + body: + encoding: UTF-8 + string: | + + + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Tue, 04 Aug 2015 20:58:39 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"8f2b4a58eb0c81d800024e9c517d8f24"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 02b023fc6f21ecc38663fde88f3cb2e9 + X-Runtime: + - '0.205694' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAH8nwVUAA7RUTW/aQBC951egvRawwSbYFiRKk0bNIbkkObUVWq8H2LLe + dfbDYNL8945toA1KI1VqfRy/ee/tm9FMzje56JSgDVdySgZ9n3RAMpVxuZiS + x4frXkTOz04mTHCQtmfVCuTZSaczKalwcPZMdq0kGXQJdXapNN9Si5VrZABd + aC4tSQgNxzSiIxoBDDOIM3rKwsEcwoyNIYpDPxyMxtQP0kEYQ5oyBKYRG0c+ + zIP0dJgFP5gGaiGbUTsd+oNRz496fvgw9JNRlARxfxTH4WgYj4MPPn5fne8P + T3PQbEmlnfFsuk3lqNo+xXa8ztebcNgiCpcKzmYrqKZVHmff10/FapOWwWZr + SZcwJed88agF+l9aW5jE82jB+4bKLFWbfqopPk4DLNDZmlZ9pvIkDANvL2y8 + Y1mvzXGGNF458FoFp5vAasUlFQIwN0OSL9+6BGTJtZI5NBnudGtcw3JR8P9l + DjWoMWDNkUBTe5ObtOM/wmOlX4LM1bu+6l5JRWU5w4c/E/eKZLd6B8T7VC9d + YpdYu7oH5jR8kjQVkJHEagevf9VKQqmVK/5tio3GLJuZRsVrJWpfBa0KKo4c + tcXaS8ZNIWh1R3O0Ru4LZDmM+gbx0gmBeM1LyqpfltExbGheCKjNeUWBTc6A + vlggQb05f4RaZRCbUgN/NeU39oItga2Us/32NTtkxjUw+3HP3/rHBVfrz9i3 + D+C3Hb9Td2DXSq/e+Idqaj4XXNahOFmCxWtwu5sCSeZUGGw4eL48xEZyaizi + mkKAzfvRXTCm3A5j9mk7rfH8VTdGXaqsnsPj/VU9O6a4rJM6TK8RfJl47R08 + mXivL+RPAAAA//8DAGgqKxdYBQAA + http_version: + recorded_at: Tue, 04 Aug 2015 20:58:55 GMT +recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/without_a_payment_method_id/returns_an_http_success.yml b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/without_a_payment_method_id/returns_an_http_success.yml new file mode 100644 index 00000000..05b2fb2c --- /dev/null +++ b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/without_a_payment_method_id/returns_an_http_success.yml @@ -0,0 +1,79 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token + body: + encoding: UTF-8 + string: | + + + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.46.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Tue, 04 Aug 2015 20:58:39 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"17ce018de2e497a544bbafe6603ec3a2"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 3854d6329ccd304a536b4d20062fba04 + X-Runtime: + - '0.130774' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAH8nwVUAA7RUXU/bMBR951dUfl3bOElTmqgFMRgaD/ACPG1T5Tg3rVfH + Dv5ImzL++5yk7UbFkCZtUZ6uzz3n+NwrT883Be9VoDSTYob8IUY9EFRmTCxm + 6PHhejBB52cnU8oZCDMwcgXi7KTXm1aEWzh7RrtWlPh9RKxZSsW2xLjKtWMA + VSomDEoQ9TGZhGmc0TgMoijEo/w0g0kEYX4aYDLC49QP4jgeT1I/TX3IQ0pS + wO4Pojwg9AdVQAxkc2JmAfajAZ4M8OghwEk0ScJ46ONxHI2jCH/A7vtqMQ7G + BSi6JMLMWTbbpiKqt0+xOV0X680o6BClTTmj8xXUs7qIs+/rp3K1SatwszWo + j6gUOVs8Ku78L40pdeJ5pGRDTUSWys0wVcRdTgEsnLM1qYdUFsloFHp7Ye0d + y3pdjnNH41W+1ylY1QbWKC4J5+By0yj58q2PQFRMSVFAm+FOt8G1LBcl+1/m + nAbRGow+Emhrb3KjbvxHeFcZViAK+a6vplcQXhtG3cWfkX1Fslu9A+J9qpc+ + MktXu7oHahV8EiTlkKHEKAuvjxolLuXKlv82xVZjns11q+J1Eo2vktQl4UeO + umLjJWO65KS+I4Wzhu5Lx3IY9Y3DC8u5wytWEVr/suwcw4YUJYfGnFeWrslq + UBcLR9Bszh+hRmqHTYmGv5ryG3tBl0BX0pphd5sdMmMKqPm45+/8uwWX68+u + bx/Abzt+J+/ArKVavXHm1GSecyaaUKyowLjX4HY3BZTkhGvXcPB8eYgNFUQb + h2sLoWvej+6CUml3GL1P2yrlnr/6RstLmTVzeLy/amZHJRNNUofptYIvU697 + B0+m3usX8icAAAD//wMAVmoKI1gFAAA= + http_version: + recorded_at: Tue, 04 Aug 2015 20:58:55 GMT +recorded_with: VCR 2.9.3 diff --git a/spec/controllers/spree/api/braintree_client_token_controller_spec.rb b/spec/controllers/spree/api/braintree_client_token_controller_spec.rb index 19fbd86d..40083ea0 100644 --- a/spec/controllers/spree/api/braintree_client_token_controller_spec.rb +++ b/spec/controllers/spree/api/braintree_client_token_controller_spec.rb @@ -2,23 +2,46 @@ describe Spree::Api::BraintreeClientTokenController, :vcr, type: :controller do describe "POST create" do - before do - create_braintree_payment_method - post :create - end + context "with a payment method id" do + before do + gateway = create_braintree_payment_method + post :create, id: gateway.id + end - it "returns an http success" do - expect(response).to have_http_status(:success) - end + it "returns an http success" do + expect(response).to have_http_status(:success) + end + + it "returns a content type of application/json" do + expect(response.content_type).to eq("application/json") + end - it "returns a content type of application/json" do - expect(response.content_type).to eq("application/json") + it "returns a client_token" do + body = JSON.parse(response.body) + expect(body["client_token"]).to be_present + expect(body["payment_method_id"]).to be_present + end end - it "returns a client_token" do - body = JSON.parse(response.body) - expect(body["client_token"]).to be_present - expect(body["payment_method_id"]).to be_present + context "without a payment method id" do + before do + create_braintree_payment_method + post :create + end + + it "returns an http success" do + expect(response).to have_http_status(:success) + end + + it "returns a content type of application/json" do + expect(response.content_type).to eq("application/json") + end + + it "returns a client_token" do + body = JSON.parse(response.body) + expect(body["client_token"]).to be_present + expect(body["payment_method_id"]).to be_present + end end end end From b5bb20eb5a7c5eb01a520657dfedcc20d47493c8 Mon Sep 17 00:00:00 2001 From: Allie Larson Date: Thu, 6 Aug 2015 15:43:46 -0400 Subject: [PATCH 034/163] Throw exception if Gateway is not found --- app/controllers/spree/api/braintree_client_token_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/spree/api/braintree_client_token_controller.rb b/app/controllers/spree/api/braintree_client_token_controller.rb index 86201f9c..a0974954 100644 --- a/app/controllers/spree/api/braintree_client_token_controller.rb +++ b/app/controllers/spree/api/braintree_client_token_controller.rb @@ -1,7 +1,7 @@ class Spree::Api::BraintreeClientTokenController < Spree::Api::BaseController def create if params[:payment_method_id] - gateway = Solidus::Gateway::BraintreeGateway.find!(params[:payment_method_id]) + gateway = Solidus::Gateway::BraintreeGateway.find_by!(id: params[:payment_method_id]) else gateway = Solidus::Gateway::BraintreeGateway.find_by!(active: true, environment: Rails.env) end From cd58cda353c6222d27785c9b48e0af56894c9dae Mon Sep 17 00:00:00 2001 From: Allie Larson Date: Tue, 18 Aug 2015 18:10:05 -0400 Subject: [PATCH 035/163] Use payment.source.address as billing address Use payment source address for billing address, falls back on the order.bill_address. * Updates solidus dependency to 1.0.0 --- app/models/solidus/gateway/braintree_gateway.rb | 2 +- solidus_braintree.gemspec | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/models/solidus/gateway/braintree_gateway.rb b/app/models/solidus/gateway/braintree_gateway.rb index 0bcee1b7..34e7836a 100644 --- a/app/models/solidus/gateway/braintree_gateway.rb +++ b/app/models/solidus/gateway/braintree_gateway.rb @@ -58,7 +58,7 @@ def create_profile(payment) return if source.gateway_customer_profile_id.present? || payment.payment_method_nonce.nil? user = payment.order.user - address = payment.order.bill_address.try(:active_merchant_hash) + address = (payment.source.address || payment.order.bill_address).try(:active_merchant_hash) params = { first_name: source.first_name, diff --git a/solidus_braintree.gemspec b/solidus_braintree.gemspec index c0cdd0cb..17a90b3f 100644 --- a/solidus_braintree.gemspec +++ b/solidus_braintree.gemspec @@ -27,7 +27,7 @@ Gem::Specification.new do |spec| spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) } spec.require_paths = ["lib"] - spec.add_dependency "solidus_core", [">= 1.0.0pre", "< 2"] + spec.add_dependency "solidus_core", [">= 1.0.0", "< 2"] spec.add_dependency "braintree", "~> 2.46" spec.add_development_dependency "bundler", "~> 1.10" From ca80ccdb3cbc4746e58eeb00b21ce7fd162e727f Mon Sep 17 00:00:00 2001 From: Allie Larson Date: Wed, 26 Aug 2015 13:40:34 -0400 Subject: [PATCH 036/163] Use environment passed in from gateways config --- .../spree/api/braintree_client_token_controller.rb | 2 +- app/models/solidus/gateway/braintree_gateway.rb | 11 +---------- spec/spec_helper.rb | 3 +-- 3 files changed, 3 insertions(+), 13 deletions(-) diff --git a/app/controllers/spree/api/braintree_client_token_controller.rb b/app/controllers/spree/api/braintree_client_token_controller.rb index a0974954..935f7ad9 100644 --- a/app/controllers/spree/api/braintree_client_token_controller.rb +++ b/app/controllers/spree/api/braintree_client_token_controller.rb @@ -3,7 +3,7 @@ def create if params[:payment_method_id] gateway = Solidus::Gateway::BraintreeGateway.find_by!(id: params[:payment_method_id]) else - gateway = Solidus::Gateway::BraintreeGateway.find_by!(active: true, environment: Rails.env) + gateway = Solidus::Gateway::BraintreeGateway.find_by!(active: true) end render json: { client_token: gateway.generate_client_token, payment_method_id: gateway.id } diff --git a/app/models/solidus/gateway/braintree_gateway.rb b/app/models/solidus/gateway/braintree_gateway.rb index 34e7836a..e5ca8361 100644 --- a/app/models/solidus/gateway/braintree_gateway.rb +++ b/app/models/solidus/gateway/braintree_gateway.rb @@ -21,18 +21,9 @@ class Gateway::BraintreeGateway < ::Spree::Gateway 'Visa' => 'visa', } - # TODO: There's only 2 environments, so we should change this code - ENVIRONMENTS = { - 'development' => :sandbox, - 'test' => :sandbox, - 'qa' => :sandbox, - 'sandbox' => :sandbox, - 'production' => :production, - } - def gateway_options { - environment: ENVIRONMENTS.fetch(preferred_environment), + environment: preferred_environment.to_sym, merchant_id: preferred_merchant_id, public_key: preferred_public_key, private_key: preferred_private_key, diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 702cc499..9b931662 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -25,10 +25,9 @@ module BraintreeGateway def create_braintree_payment_method gateway = Solidus::Gateway::BraintreeGateway.create!( name: 'Braintree Gateway', - environment: 'test', active: true ) - gateway.set_preference(:environment, 'test') + gateway.set_preference(:environment, 'sandbox') gateway.set_preference(:merchant_id, 'zbn5yzq9t7wmwx42') gateway.set_preference(:public_key, 'ym9djwqpkxbv3xzt') gateway.set_preference(:private_key, '4ghghkyp2yy6yqc8') From 69a2d9aa87c469ec626893c9b4cbb1c87f924c50 Mon Sep 17 00:00:00 2001 From: Jack Chu Date: Wed, 2 Sep 2015 10:33:47 -0400 Subject: [PATCH 037/163] update gem with solidus team info --- solidus_braintree.gemspec | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/solidus_braintree.gemspec b/solidus_braintree.gemspec index 17a90b3f..58d4f37b 100644 --- a/solidus_braintree.gemspec +++ b/solidus_braintree.gemspec @@ -6,12 +6,12 @@ require 'solidus_braintree/version' Gem::Specification.new do |spec| spec.name = "solidus_braintree" spec.version = SolidusBraintree::VERSION - spec.authors = ["Bonobos"] - spec.email = ["engineering@bonobos.com"] + spec.authors = ["Solidus Team"] + spec.email = ["contact@solidus.io"] spec.summary = %q{Adds Solidus support for Braintree v.zero Gateway.} spec.description = %q{Adds Solidus support for Braintree v.zero Gateway.} - spec.homepage = "https://bonobos.com" + spec.homepage = "https://solidus.io" spec.license = "MIT" # Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or From 44e3d256096df157cf8ce734c86f8e6d4e7d3826 Mon Sep 17 00:00:00 2001 From: Jack Chu Date: Wed, 2 Sep 2015 10:37:09 -0400 Subject: [PATCH 038/163] allow push to rubygems --- solidus_braintree.gemspec | 8 -------- 1 file changed, 8 deletions(-) diff --git a/solidus_braintree.gemspec b/solidus_braintree.gemspec index 58d4f37b..d3542325 100644 --- a/solidus_braintree.gemspec +++ b/solidus_braintree.gemspec @@ -14,14 +14,6 @@ Gem::Specification.new do |spec| spec.homepage = "https://solidus.io" spec.license = "MIT" - # Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or - # delete this section to allow pushing this gem to any host. - if spec.respond_to?(:metadata) - spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'" - else - raise "RubyGems 2.0 or newer is required to protect against public gem pushes." - end - spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) } spec.bindir = "exe" spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) } From 4ff93d113adb2d009877ff128cc10c72abc9c069 Mon Sep 17 00:00:00 2001 From: Gregor MacDougall Date: Wed, 2 Sep 2015 13:36:47 -0400 Subject: [PATCH 039/163] Update README.md Fix the URL for bug requests --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a933e08b..9052b950 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To ## Contributing -Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/solidus_braintree. +Bug reports and pull requests are welcome on GitHub at https://github.com/solidusio/solidus_braintree. ## License From dda65ca1dbd265c85c5fa56b35d3a671df9c2ce7 Mon Sep 17 00:00:00 2001 From: Jack Chu Date: Wed, 2 Sep 2015 13:37:43 -0400 Subject: [PATCH 040/163] get the client token and attach the dropin on page load to support the create order flow in admin, also fixes clicking the new credit card radio quickly and attaching multiple dropins --- .../javascripts/spree/backend/braintree/solidus_braintree.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/assets/javascripts/spree/backend/braintree/solidus_braintree.js b/lib/assets/javascripts/spree/backend/braintree/solidus_braintree.js index ab628393..0afab975 100644 --- a/lib/assets/javascripts/spree/backend/braintree/solidus_braintree.js +++ b/lib/assets/javascripts/spree/backend/braintree/solidus_braintree.js @@ -38,7 +38,5 @@ var attachDropIn = function(data) { }; $(document).ready(function() { - $("#new_payment [name=card][value=new]").click(function() { - getClientToken(attachDropIn); - }); + getClientToken(attachDropIn); }); From c80df231463d6f50aa80429ff45ba7ac4377d939 Mon Sep 17 00:00:00 2001 From: Jack Chu Date: Wed, 2 Sep 2015 13:44:41 -0400 Subject: [PATCH 041/163] add changelog, bump the version --- CHANGELOG.md | 11 +++++++++++ lib/solidus_braintree/version.rb | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..f431dfd8 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,11 @@ +## HEAD + +## 0.1.1 + +* Get the client token and attach the dropin on page load to support the create +order flow in admin, also fixes clicking the new credit card radio quickly and +it attaching multiple dropins. + +## 0.1.0 + +* First release. diff --git a/lib/solidus_braintree/version.rb b/lib/solidus_braintree/version.rb index 77ba3ced..767da1ca 100644 --- a/lib/solidus_braintree/version.rb +++ b/lib/solidus_braintree/version.rb @@ -1,3 +1,3 @@ module SolidusBraintree - VERSION = "0.1.0" + VERSION = "0.1.1" end From bfff943022d1c7fa0d5924bcb23d36158f144480 Mon Sep 17 00:00:00 2001 From: Jack Chu Date: Wed, 2 Sep 2015 21:05:47 -0400 Subject: [PATCH 042/163] update readme --- README.md | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 9052b950..44863ad4 100644 --- a/README.md +++ b/README.md @@ -1,28 +1,24 @@ -# SolidusBraintree +# solidus_braintree -Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/solidus_braintree`. To experiment with that code, run `bin/console` for an interactive prompt. - -TODO: Delete this and the text above, and describe your gem +`solidus_braintree` is a gem that adds [Braintree v.zero](https://www.braintreepayments.com/v.zero) support to the [solidus](http://solidus.io/) E-commerce platform. ## Installation -Add this line to your application's Gemfile: +Add this line to your solidus application's Gemfile: ```ruby -gem 'solidus_braintree' +gem "solidus_braintree" ``` And then execute: $ bundle -Or install it yourself as: - - $ gem install solidus_braintree - ## Usage -TODO: Write usage instructions here +This gem extends your solidus application by adding a `POST /api/payment_client_token` endpoint to you application to generate Braintree payment client token. This endpoint requires an authentication token in your request header. + +It also creates a new `PaymentMethod` class called `Solidus::Gateway::BraintreeGateway`. You can configure this payment method in the admin and add your Braintree public/private keys and merchant id. The admin will render a Braintree dropin container when prompting you to create an order payment. ## Development @@ -34,8 +30,6 @@ To install this gem onto your local machine, run `bundle exec rake install`. To Bug reports and pull requests are welcome on GitHub at https://github.com/solidusio/solidus_braintree. - ## License The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT). - From 11778a5c9cfed619f356fdcade2770848484e551 Mon Sep 17 00:00:00 2001 From: Jack Chu Date: Fri, 4 Sep 2015 13:22:50 -0400 Subject: [PATCH 043/163] Upgrade to braintree 2.13.0-beta for the ability to destroy the dropin and rerun braintree.setup with a new client token The ability to teardown is necessary to fix a bug where the braintree dropin hijack the form while using an existing credit card in payments --- .../backend/braintree/solidus_braintree.js | 24 +- .../vendor/braintree-2.13.0-beta.js | 12152 ++++++++++++++++ .../javascripts/vendor/braintree-2.9.0.js | 5 - 3 files changed, 12171 insertions(+), 10 deletions(-) create mode 100644 lib/assets/javascripts/vendor/braintree-2.13.0-beta.js delete mode 100644 lib/assets/javascripts/vendor/braintree-2.9.0.js diff --git a/lib/assets/javascripts/spree/backend/braintree/solidus_braintree.js b/lib/assets/javascripts/spree/backend/braintree/solidus_braintree.js index 0afab975..01010ca5 100644 --- a/lib/assets/javascripts/spree/backend/braintree/solidus_braintree.js +++ b/lib/assets/javascripts/spree/backend/braintree/solidus_braintree.js @@ -1,7 +1,10 @@ -//= require "vendor/braintree-2.9.0" +//= require "vendor/braintree-2.13.0-beta" Spree.routes.payment_client_token_api = Spree.pathFor("api/payment_client_token") +var braintreeDropinIntegration; +var cardSelector = "#new_payment [name=card]"; + var getClientToken = function(onSuccess) { return Spree.ajax({ url: Spree.routes.payment_client_token_api, @@ -22,9 +25,8 @@ var attachDropIn = function(data) { braintree.setup(data.client_token, "dropin", { container: "braintree-dropin", form: "new_payment", - onReady: function() { - console.log("braintree dropin is ready"); - return; + onReady: function (integration) { + braintreeDropinIntegration = integration; }, onError: function(type, message) { show_flash("error", message); @@ -38,5 +40,17 @@ var attachDropIn = function(data) { }; $(document).ready(function() { - getClientToken(attachDropIn); + if ($(cardSelector).length) { + $(cardSelector).on("change", function() { + if ($(cardSelector + ":checked").val() === "new") { + getClientToken(attachDropIn); + } else { + if (braintreeDropinIntegration) { + braintreeDropinIntegration.teardown(); + } + } + }); + } else { + getClientToken(attachDropIn); + } }); diff --git a/lib/assets/javascripts/vendor/braintree-2.13.0-beta.js b/lib/assets/javascripts/vendor/braintree-2.13.0-beta.js new file mode 100644 index 00000000..562c08eb --- /dev/null +++ b/lib/assets/javascripts/vendor/braintree-2.13.0-beta.js @@ -0,0 +1,12152 @@ +/*! + * Braintree End-to-End Encryption Library + * https://www.braintreepayments.com + * Copyright (c) 2009-2014 Braintree, a division of PayPal, Inc. + * + * JSBN + * Copyright (c) 2005 Tom Wu + * + * Both Licensed under the MIT License. + * http://opensource.org/licenses/MIT + * + * ASN.1 JavaScript decoder + * Copyright (c) 2008-2009 Lapo Luchini + * Licensed under the ISC License. + * http://opensource.org/licenses/ISC + */ + +(function () { + +// ASN.1 JavaScript decoder +// Copyright (c) 2008-2009 Lapo Luchini + +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +function Stream(enc, pos) { + if (enc instanceof Stream) { + this.enc = enc.enc; + this.pos = enc.pos; + } else { + this.enc = enc; + this.pos = pos; + } +} +Stream.prototype.get = function(pos) { + if (pos == undefined) + pos = this.pos++; + if (pos >= this.enc.length) + throw 'Requesting byte offset ' + pos + ' on a stream of length ' + this.enc.length; + return this.enc[pos]; +} +Stream.prototype.hexDigits = "0123456789ABCDEF"; +Stream.prototype.hexByte = function(b) { + return this.hexDigits.charAt((b >> 4) & 0xF) + this.hexDigits.charAt(b & 0xF); +} +Stream.prototype.hexDump = function(start, end) { + var s = ""; + for (var i = start; i < end; ++i) { + s += this.hexByte(this.get(i)); + switch (i & 0xF) { + case 0x7: s += " "; break; + case 0xF: s += "\n"; break; + default: s += " "; + } + } + return s; +} +Stream.prototype.parseStringISO = function(start, end) { + var s = ""; + for (var i = start; i < end; ++i) + s += String.fromCharCode(this.get(i)); + return s; +} +Stream.prototype.parseStringUTF = function(start, end) { + var s = "", c = 0; + for (var i = start; i < end; ) { + var c = this.get(i++); + if (c < 128) + s += String.fromCharCode(c); + else if ((c > 191) && (c < 224)) + s += String.fromCharCode(((c & 0x1F) << 6) | (this.get(i++) & 0x3F)); + else + s += String.fromCharCode(((c & 0x0F) << 12) | ((this.get(i++) & 0x3F) << 6) | (this.get(i++) & 0x3F)); + //TODO: this doesn't check properly 'end', some char could begin before and end after + } + return s; +} +Stream.prototype.reTime = /^((?:1[89]|2\d)?\d\d)(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])([01]\d|2[0-3])(?:([0-5]\d)(?:([0-5]\d)(?:[.,](\d{1,3}))?)?)?(Z|[-+](?:[0]\d|1[0-2])([0-5]\d)?)?$/; +Stream.prototype.parseTime = function(start, end) { + var s = this.parseStringISO(start, end); + var m = this.reTime.exec(s); + if (!m) + return "Unrecognized time: " + s; + s = m[1] + "-" + m[2] + "-" + m[3] + " " + m[4]; + if (m[5]) { + s += ":" + m[5]; + if (m[6]) { + s += ":" + m[6]; + if (m[7]) + s += "." + m[7]; + } + } + if (m[8]) { + s += " UTC"; + if (m[8] != 'Z') { + s += m[8]; + if (m[9]) + s += ":" + m[9]; + } + } + return s; +} +Stream.prototype.parseInteger = function(start, end) { + //TODO support negative numbers + var len = end - start; + if (len > 4) { + len <<= 3; + var s = this.get(start); + if (s == 0) + len -= 8; + else + while (s < 128) { + s <<= 1; + --len; + } + return "(" + len + " bit)"; + } + var n = 0; + for (var i = start; i < end; ++i) + n = (n << 8) | this.get(i); + return n; +} +Stream.prototype.parseBitString = function(start, end) { + var unusedBit = this.get(start); + var lenBit = ((end - start - 1) << 3) - unusedBit; + var s = "(" + lenBit + " bit)"; + if (lenBit <= 20) { + var skip = unusedBit; + s += " "; + for (var i = end - 1; i > start; --i) { + var b = this.get(i); + for (var j = skip; j < 8; ++j) + s += (b >> j) & 1 ? "1" : "0"; + skip = 0; + } + } + return s; +} +Stream.prototype.parseOctetString = function(start, end) { + var len = end - start; + var s = "(" + len + " byte) "; + if (len > 20) + end = start + 20; + for (var i = start; i < end; ++i) + s += this.hexByte(this.get(i)); + if (len > 20) + s += String.fromCharCode(8230); // ellipsis + return s; +} +Stream.prototype.parseOID = function(start, end) { + var s, n = 0, bits = 0; + for (var i = start; i < end; ++i) { + var v = this.get(i); + n = (n << 7) | (v & 0x7F); + bits += 7; + if (!(v & 0x80)) { // finished + if (s == undefined) + s = parseInt(n / 40) + "." + (n % 40); + else + s += "." + ((bits >= 31) ? "bigint" : n); + n = bits = 0; + } + s += String.fromCharCode(); + } + return s; +} + +function ASN1(stream, header, length, tag, sub) { + this.stream = stream; + this.header = header; + this.length = length; + this.tag = tag; + this.sub = sub; +} +ASN1.prototype.typeName = function() { + if (this.tag == undefined) + return "unknown"; + var tagClass = this.tag >> 6; + var tagConstructed = (this.tag >> 5) & 1; + var tagNumber = this.tag & 0x1F; + switch (tagClass) { + case 0: // universal + switch (tagNumber) { + case 0x00: return "EOC"; + case 0x01: return "BOOLEAN"; + case 0x02: return "INTEGER"; + case 0x03: return "BIT_STRING"; + case 0x04: return "OCTET_STRING"; + case 0x05: return "NULL"; + case 0x06: return "OBJECT_IDENTIFIER"; + case 0x07: return "ObjectDescriptor"; + case 0x08: return "EXTERNAL"; + case 0x09: return "REAL"; + case 0x0A: return "ENUMERATED"; + case 0x0B: return "EMBEDDED_PDV"; + case 0x0C: return "UTF8String"; + case 0x10: return "SEQUENCE"; + case 0x11: return "SET"; + case 0x12: return "NumericString"; + case 0x13: return "PrintableString"; // ASCII subset + case 0x14: return "TeletexString"; // aka T61String + case 0x15: return "VideotexString"; + case 0x16: return "IA5String"; // ASCII + case 0x17: return "UTCTime"; + case 0x18: return "GeneralizedTime"; + case 0x19: return "GraphicString"; + case 0x1A: return "VisibleString"; // ASCII subset + case 0x1B: return "GeneralString"; + case 0x1C: return "UniversalString"; + case 0x1E: return "BMPString"; + default: return "Universal_" + tagNumber.toString(16); + } + case 1: return "Application_" + tagNumber.toString(16); + case 2: return "[" + tagNumber + "]"; // Context + case 3: return "Private_" + tagNumber.toString(16); + } +} +ASN1.prototype.content = function() { + if (this.tag == undefined) + return null; + var tagClass = this.tag >> 6; + if (tagClass != 0) // universal + return (this.sub == null) ? null : "(" + this.sub.length + ")"; + var tagNumber = this.tag & 0x1F; + var content = this.posContent(); + var len = Math.abs(this.length); + switch (tagNumber) { + case 0x01: // BOOLEAN + return (this.stream.get(content) == 0) ? "false" : "true"; + case 0x02: // INTEGER + return this.stream.parseInteger(content, content + len); + case 0x03: // BIT_STRING + return this.sub ? "(" + this.sub.length + " elem)" : + this.stream.parseBitString(content, content + len) + case 0x04: // OCTET_STRING + return this.sub ? "(" + this.sub.length + " elem)" : + this.stream.parseOctetString(content, content + len) + //case 0x05: // NULL + case 0x06: // OBJECT_IDENTIFIER + return this.stream.parseOID(content, content + len); + //case 0x07: // ObjectDescriptor + //case 0x08: // EXTERNAL + //case 0x09: // REAL + //case 0x0A: // ENUMERATED + //case 0x0B: // EMBEDDED_PDV + case 0x10: // SEQUENCE + case 0x11: // SET + return "(" + this.sub.length + " elem)"; + case 0x0C: // UTF8String + return this.stream.parseStringUTF(content, content + len); + case 0x12: // NumericString + case 0x13: // PrintableString + case 0x14: // TeletexString + case 0x15: // VideotexString + case 0x16: // IA5String + //case 0x19: // GraphicString + case 0x1A: // VisibleString + //case 0x1B: // GeneralString + //case 0x1C: // UniversalString + //case 0x1E: // BMPString + return this.stream.parseStringISO(content, content + len); + case 0x17: // UTCTime + case 0x18: // GeneralizedTime + return this.stream.parseTime(content, content + len); + } + return null; +} +ASN1.prototype.toString = function() { + return this.typeName() + "@" + this.stream.pos + "[header:" + this.header + ",length:" + this.length + ",sub:" + ((this.sub == null) ? 'null' : this.sub.length) + "]"; +} +ASN1.prototype.print = function(indent) { + if (indent == undefined) indent = ''; + document.writeln(indent + this); + if (this.sub != null) { + indent += ' '; + for (var i = 0, max = this.sub.length; i < max; ++i) + this.sub[i].print(indent); + } +} +ASN1.prototype.toPrettyString = function(indent) { + if (indent == undefined) indent = ''; + var s = indent + this.typeName() + " @" + this.stream.pos; + if (this.length >= 0) + s += "+"; + s += this.length; + if (this.tag & 0x20) + s += " (constructed)"; + else if (((this.tag == 0x03) || (this.tag == 0x04)) && (this.sub != null)) + s += " (encapsulates)"; + s += "\n"; + if (this.sub != null) { + indent += ' '; + for (var i = 0, max = this.sub.length; i < max; ++i) + s += this.sub[i].toPrettyString(indent); + } + return s; +} +ASN1.prototype.posStart = function() { + return this.stream.pos; +} +ASN1.prototype.posContent = function() { + return this.stream.pos + this.header; +} +ASN1.prototype.posEnd = function() { + return this.stream.pos + this.header + Math.abs(this.length); +} +ASN1.decodeLength = function(stream) { + var buf = stream.get(); + var len = buf & 0x7F; + if (len == buf) + return len; + if (len > 3) + throw "Length over 24 bits not supported at position " + (stream.pos - 1); + if (len == 0) + return -1; // undefined + buf = 0; + for (var i = 0; i < len; ++i) + buf = (buf << 8) | stream.get(); + return buf; +} +ASN1.hasContent = function(tag, len, stream) { + if (tag & 0x20) // constructed + return true; + if ((tag < 0x03) || (tag > 0x04)) + return false; + var p = new Stream(stream); + if (tag == 0x03) p.get(); // BitString unused bits, must be in [0, 7] + var subTag = p.get(); + if ((subTag >> 6) & 0x01) // not (universal or context) + return false; + try { + var subLength = ASN1.decodeLength(p); + return ((p.pos - stream.pos) + subLength == len); + } catch (exception) { + return false; + } +} +ASN1.decode = function(stream) { + if (!(stream instanceof Stream)) + stream = new Stream(stream, 0); + var streamStart = new Stream(stream); + var tag = stream.get(); + var len = ASN1.decodeLength(stream); + var header = stream.pos - streamStart.pos; + var sub = null; + if (ASN1.hasContent(tag, len, stream)) { + // it has content, so we decode it + var start = stream.pos; + if (tag == 0x03) stream.get(); // skip BitString unused bits, must be in [0, 7] + sub = []; + if (len >= 0) { + // definite length + var end = start + len; + while (stream.pos < end) + sub[sub.length] = ASN1.decode(stream); + if (stream.pos != end) + throw "Content size is not correct for container starting at offset " + start; + } else { + // undefined length + try { + for (;;) { + var s = ASN1.decode(stream); + if (s.tag == 0) + break; + sub[sub.length] = s; + } + len = start - stream.pos; + } catch (e) { + throw "Exception while decoding undefined length content: " + e; + } + } + } else + stream.pos += len; // skip content + return new ASN1(streamStart, header, len, tag, sub); +} + +var b64map="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; +var b64padchar="="; + +function hex2b64(h) { + var i; + var c; + var ret = ""; + for(i = 0; i+3 <= h.length; i+=3) { + c = parseInt(h.substring(i,i+3),16); + ret += b64map.charAt(c >> 6) + b64map.charAt(c & 63); + } + if(i+1 == h.length) { + c = parseInt(h.substring(i,i+1),16); + ret += b64map.charAt(c << 2); + } + else if(i+2 == h.length) { + c = parseInt(h.substring(i,i+2),16); + ret += b64map.charAt(c >> 2) + b64map.charAt((c & 3) << 4); + } + while((ret.length & 3) > 0) ret += b64padchar; + return ret; +} + +// convert a base64 string to hex +function b64tohex(s) { + var ret = ""; + var i; + var k = 0; // b64 state, 0-3 + var slop; + var v; + for(i = 0; i < s.length; ++i) { + if(s.charAt(i) == b64padchar) break; + v = b64map.indexOf(s.charAt(i)); + if(v < 0) continue; + if(k == 0) { + ret += int2char(v >> 2); + slop = v & 3; + k = 1; + } + else if(k == 1) { + ret += int2char((slop << 2) | (v >> 4)); + slop = v & 0xf; + k = 2; + } + else if(k == 2) { + ret += int2char(slop); + ret += int2char(v >> 2); + slop = v & 3; + k = 3; + } + else { + ret += int2char((slop << 2) | (v >> 4)); + ret += int2char(v & 0xf); + k = 0; + } + } + if(k == 1) + ret += int2char(slop << 2); + return ret; +} + +// convert a base64 string to a byte/number array +function b64toBA(s) { + //piggyback on b64tohex for now, optimize later + var h = b64tohex(s); + var i; + var a = new Array(); + for(i = 0; 2*i < h.length; ++i) { + a[i] = parseInt(h.substring(2*i,2*i+2),16); + } + return a; +} + +// Copyright (c) 2005 Tom Wu +// All Rights Reserved. +// See "LICENSE" for details. + +// Basic JavaScript BN library - subset useful for RSA encryption. + +// Bits per digit +var dbits; + +// JavaScript engine analysis +var canary = 0xdeadbeefcafe; +var j_lm = ((canary&0xffffff)==0xefcafe); + +// (public) Constructor +function BigInteger(a,b,c) { + if(a != null) + if("number" == typeof a) this.fromNumber(a,b,c); + else if(b == null && "string" != typeof a) this.fromString(a,256); + else this.fromString(a,b); +} + +// return new, unset BigInteger +function nbi() { return new BigInteger(null); } + +// am: Compute w_j += (x*this_i), propagate carries, +// c is initial carry, returns final carry. +// c < 3*dvalue, x < 2*dvalue, this_i < dvalue +// We need to select the fastest one that works in this environment. + +// am1: use a single mult and divide to get the high bits, +// max digit bits should be 26 because +// max internal value = 2*dvalue^2-2*dvalue (< 2^53) +function am1(i,x,w,j,c,n) { + while(--n >= 0) { + var v = x*this[i++]+w[j]+c; + c = Math.floor(v/0x4000000); + w[j++] = v&0x3ffffff; + } + return c; +} +// am2 avoids a big mult-and-extract completely. +// Max digit bits should be <= 30 because we do bitwise ops +// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31) +function am2(i,x,w,j,c,n) { + var xl = x&0x7fff, xh = x>>15; + while(--n >= 0) { + var l = this[i]&0x7fff; + var h = this[i++]>>15; + var m = xh*l+h*xl; + l = xl*l+((m&0x7fff)<<15)+w[j]+(c&0x3fffffff); + c = (l>>>30)+(m>>>15)+xh*h+(c>>>30); + w[j++] = l&0x3fffffff; + } + return c; +} +// Alternately, set max digit bits to 28 since some +// browsers slow down when dealing with 32-bit numbers. +function am3(i,x,w,j,c,n) { + var xl = x&0x3fff, xh = x>>14; + while(--n >= 0) { + var l = this[i]&0x3fff; + var h = this[i++]>>14; + var m = xh*l+h*xl; + l = xl*l+((m&0x3fff)<<14)+w[j]+c; + c = (l>>28)+(m>>14)+xh*h; + w[j++] = l&0xfffffff; + } + return c; +} +if(j_lm && (navigator.appName == "Microsoft Internet Explorer")) { + BigInteger.prototype.am = am2; + dbits = 30; +} +else if(j_lm && (navigator.appName != "Netscape")) { + BigInteger.prototype.am = am1; + dbits = 26; +} +else { // Mozilla/Netscape seems to prefer am3 + BigInteger.prototype.am = am3; + dbits = 28; +} + +BigInteger.prototype.DB = dbits; +BigInteger.prototype.DM = ((1<= 0; --i) r[i] = this[i]; + r.t = this.t; + r.s = this.s; +} + +// (protected) set from integer value x, -DV <= x < DV +function bnpFromInt(x) { + this.t = 1; + this.s = (x<0)?-1:0; + if(x > 0) this[0] = x; + else if(x < -1) this[0] = x+this.DV; + else this.t = 0; +} + +// return bigint initialized to value +function nbv(i) { var r = nbi(); r.fromInt(i); return r; } + +// (protected) set from string and radix +function bnpFromString(s,b) { + var k; + if(b == 16) k = 4; + else if(b == 8) k = 3; + else if(b == 256) k = 8; // byte array + else if(b == 2) k = 1; + else if(b == 32) k = 5; + else if(b == 4) k = 2; + else { this.fromRadix(s,b); return; } + this.t = 0; + this.s = 0; + var i = s.length, mi = false, sh = 0; + while(--i >= 0) { + var x = (k==8)?s[i]&0xff:intAt(s,i); + if(x < 0) { + if(s.charAt(i) == "-") mi = true; + continue; + } + mi = false; + if(sh == 0) + this[this.t++] = x; + else if(sh+k > this.DB) { + this[this.t-1] |= (x&((1<<(this.DB-sh))-1))<>(this.DB-sh)); + } + else + this[this.t-1] |= x<= this.DB) sh -= this.DB; + } + if(k == 8 && (s[0]&0x80) != 0) { + this.s = -1; + if(sh > 0) this[this.t-1] |= ((1<<(this.DB-sh))-1)< 0 && this[this.t-1] == c) --this.t; +} + +// (public) return string representation in given radix +function bnToString(b) { + if(this.s < 0) return "-"+this.negate().toString(b); + var k; + if(b == 16) k = 4; + else if(b == 8) k = 3; + else if(b == 2) k = 1; + else if(b == 32) k = 5; + else if(b == 4) k = 2; + else return this.toRadix(b); + var km = (1< 0) { + if(p < this.DB && (d = this[i]>>p) > 0) { m = true; r = int2char(d); } + while(i >= 0) { + if(p < k) { + d = (this[i]&((1<>(p+=this.DB-k); + } + else { + d = (this[i]>>(p-=k))&km; + if(p <= 0) { p += this.DB; --i; } + } + if(d > 0) m = true; + if(m) r += int2char(d); + } + } + return m?r:"0"; +} + +// (public) -this +function bnNegate() { var r = nbi(); BigInteger.ZERO.subTo(this,r); return r; } + +// (public) |this| +function bnAbs() { return (this.s<0)?this.negate():this; } + +// (public) return + if this > a, - if this < a, 0 if equal +function bnCompareTo(a) { + var r = this.s-a.s; + if(r != 0) return r; + var i = this.t; + r = i-a.t; + if(r != 0) return (this.s<0)?-r:r; + while(--i >= 0) if((r=this[i]-a[i]) != 0) return r; + return 0; +} + +// returns bit length of the integer x +function nbits(x) { + var r = 1, t; + if((t=x>>>16) != 0) { x = t; r += 16; } + if((t=x>>8) != 0) { x = t; r += 8; } + if((t=x>>4) != 0) { x = t; r += 4; } + if((t=x>>2) != 0) { x = t; r += 2; } + if((t=x>>1) != 0) { x = t; r += 1; } + return r; +} + +// (public) return the number of bits in "this" +function bnBitLength() { + if(this.t <= 0) return 0; + return this.DB*(this.t-1)+nbits(this[this.t-1]^(this.s&this.DM)); +} + +// (protected) r = this << n*DB +function bnpDLShiftTo(n,r) { + var i; + for(i = this.t-1; i >= 0; --i) r[i+n] = this[i]; + for(i = n-1; i >= 0; --i) r[i] = 0; + r.t = this.t+n; + r.s = this.s; +} + +// (protected) r = this >> n*DB +function bnpDRShiftTo(n,r) { + for(var i = n; i < this.t; ++i) r[i-n] = this[i]; + r.t = Math.max(this.t-n,0); + r.s = this.s; +} + +// (protected) r = this << n +function bnpLShiftTo(n,r) { + var bs = n%this.DB; + var cbs = this.DB-bs; + var bm = (1<= 0; --i) { + r[i+ds+1] = (this[i]>>cbs)|c; + c = (this[i]&bm)<= 0; --i) r[i] = 0; + r[ds] = c; + r.t = this.t+ds+1; + r.s = this.s; + r.clamp(); +} + +// (protected) r = this >> n +function bnpRShiftTo(n,r) { + r.s = this.s; + var ds = Math.floor(n/this.DB); + if(ds >= this.t) { r.t = 0; return; } + var bs = n%this.DB; + var cbs = this.DB-bs; + var bm = (1<>bs; + for(var i = ds+1; i < this.t; ++i) { + r[i-ds-1] |= (this[i]&bm)<>bs; + } + if(bs > 0) r[this.t-ds-1] |= (this.s&bm)<>= this.DB; + } + if(a.t < this.t) { + c -= a.s; + while(i < this.t) { + c += this[i]; + r[i++] = c&this.DM; + c >>= this.DB; + } + c += this.s; + } + else { + c += this.s; + while(i < a.t) { + c -= a[i]; + r[i++] = c&this.DM; + c >>= this.DB; + } + c -= a.s; + } + r.s = (c<0)?-1:0; + if(c < -1) r[i++] = this.DV+c; + else if(c > 0) r[i++] = c; + r.t = i; + r.clamp(); +} + +// (protected) r = this * a, r != this,a (HAC 14.12) +// "this" should be the larger one if appropriate. +function bnpMultiplyTo(a,r) { + var x = this.abs(), y = a.abs(); + var i = x.t; + r.t = i+y.t; + while(--i >= 0) r[i] = 0; + for(i = 0; i < y.t; ++i) r[i+x.t] = x.am(0,y[i],r,i,0,x.t); + r.s = 0; + r.clamp(); + if(this.s != a.s) BigInteger.ZERO.subTo(r,r); +} + +// (protected) r = this^2, r != this (HAC 14.16) +function bnpSquareTo(r) { + var x = this.abs(); + var i = r.t = 2*x.t; + while(--i >= 0) r[i] = 0; + for(i = 0; i < x.t-1; ++i) { + var c = x.am(i,x[i],r,2*i,0,1); + if((r[i+x.t]+=x.am(i+1,2*x[i],r,2*i+1,c,x.t-i-1)) >= x.DV) { + r[i+x.t] -= x.DV; + r[i+x.t+1] = 1; + } + } + if(r.t > 0) r[r.t-1] += x.am(i,x[i],r,2*i,0,1); + r.s = 0; + r.clamp(); +} + +// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20) +// r != q, this != m. q or r may be null. +function bnpDivRemTo(m,q,r) { + var pm = m.abs(); + if(pm.t <= 0) return; + var pt = this.abs(); + if(pt.t < pm.t) { + if(q != null) q.fromInt(0); + if(r != null) this.copyTo(r); + return; + } + if(r == null) r = nbi(); + var y = nbi(), ts = this.s, ms = m.s; + var nsh = this.DB-nbits(pm[pm.t-1]); // normalize modulus + if(nsh > 0) { pm.lShiftTo(nsh,y); pt.lShiftTo(nsh,r); } + else { pm.copyTo(y); pt.copyTo(r); } + var ys = y.t; + var y0 = y[ys-1]; + if(y0 == 0) return; + var yt = y0*(1<1)?y[ys-2]>>this.F2:0); + var d1 = this.FV/yt, d2 = (1<= 0) { + r[r.t++] = 1; + r.subTo(t,r); + } + BigInteger.ONE.dlShiftTo(ys,t); + t.subTo(y,y); // "negative" y so we can replace sub with am later + while(y.t < ys) y[y.t++] = 0; + while(--j >= 0) { + // Estimate quotient digit + var qd = (r[--i]==y0)?this.DM:Math.floor(r[i]*d1+(r[i-1]+e)*d2); + if((r[i]+=y.am(0,qd,r,j,0,ys)) < qd) { // Try it out + y.dlShiftTo(j,t); + r.subTo(t,r); + while(r[i] < --qd) r.subTo(t,r); + } + } + if(q != null) { + r.drShiftTo(ys,q); + if(ts != ms) BigInteger.ZERO.subTo(q,q); + } + r.t = ys; + r.clamp(); + if(nsh > 0) r.rShiftTo(nsh,r); // Denormalize remainder + if(ts < 0) BigInteger.ZERO.subTo(r,r); +} + +// (public) this mod a +function bnMod(a) { + var r = nbi(); + this.abs().divRemTo(a,null,r); + if(this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r,r); + return r; +} + +// Modular reduction using "classic" algorithm +function Classic(m) { this.m = m; } +function cConvert(x) { + if(x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m); + else return x; +} +function cRevert(x) { return x; } +function cReduce(x) { x.divRemTo(this.m,null,x); } +function cMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); } +function cSqrTo(x,r) { x.squareTo(r); this.reduce(r); } + +Classic.prototype.convert = cConvert; +Classic.prototype.revert = cRevert; +Classic.prototype.reduce = cReduce; +Classic.prototype.mulTo = cMulTo; +Classic.prototype.sqrTo = cSqrTo; + +// (protected) return "-1/this % 2^DB"; useful for Mont. reduction +// justification: +// xy == 1 (mod m) +// xy = 1+km +// xy(2-xy) = (1+km)(1-km) +// x[y(2-xy)] = 1-k^2m^2 +// x[y(2-xy)] == 1 (mod m^2) +// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2 +// should reduce x and y(2-xy) by m^2 at each step to keep size bounded. +// JS multiply "overflows" differently from C/C++, so care is needed here. +function bnpInvDigit() { + if(this.t < 1) return 0; + var x = this[0]; + if((x&1) == 0) return 0; + var y = x&3; // y == 1/x mod 2^2 + y = (y*(2-(x&0xf)*y))&0xf; // y == 1/x mod 2^4 + y = (y*(2-(x&0xff)*y))&0xff; // y == 1/x mod 2^8 + y = (y*(2-(((x&0xffff)*y)&0xffff)))&0xffff; // y == 1/x mod 2^16 + // last step - calculate inverse mod DV directly; + // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints + y = (y*(2-x*y%this.DV))%this.DV; // y == 1/x mod 2^dbits + // we really want the negative inverse, and -DV < y < DV + return (y>0)?this.DV-y:-y; +} + +// Montgomery reduction +function Montgomery(m) { + this.m = m; + this.mp = m.invDigit(); + this.mpl = this.mp&0x7fff; + this.mph = this.mp>>15; + this.um = (1<<(m.DB-15))-1; + this.mt2 = 2*m.t; +} + +// xR mod m +function montConvert(x) { + var r = nbi(); + x.abs().dlShiftTo(this.m.t,r); + r.divRemTo(this.m,null,r); + if(x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r,r); + return r; +} + +// x/R mod m +function montRevert(x) { + var r = nbi(); + x.copyTo(r); + this.reduce(r); + return r; +} + +// x = x/R mod m (HAC 14.32) +function montReduce(x) { + while(x.t <= this.mt2) // pad x so am has enough room later + x[x.t++] = 0; + for(var i = 0; i < this.m.t; ++i) { + // faster way of calculating u0 = x[i]*mp mod DV + var j = x[i]&0x7fff; + var u0 = (j*this.mpl+(((j*this.mph+(x[i]>>15)*this.mpl)&this.um)<<15))&x.DM; + // use am to combine the multiply-shift-add into one call + j = i+this.m.t; + x[j] += this.m.am(0,u0,x,i,0,this.m.t); + // propagate carry + while(x[j] >= x.DV) { x[j] -= x.DV; x[++j]++; } + } + x.clamp(); + x.drShiftTo(this.m.t,x); + if(x.compareTo(this.m) >= 0) x.subTo(this.m,x); +} + +// r = "x^2/R mod m"; x != r +function montSqrTo(x,r) { x.squareTo(r); this.reduce(r); } + +// r = "xy/R mod m"; x,y != r +function montMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); } + +Montgomery.prototype.convert = montConvert; +Montgomery.prototype.revert = montRevert; +Montgomery.prototype.reduce = montReduce; +Montgomery.prototype.mulTo = montMulTo; +Montgomery.prototype.sqrTo = montSqrTo; + +// (protected) true iff this is even +function bnpIsEven() { return ((this.t>0)?(this[0]&1):this.s) == 0; } + +// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79) +function bnpExp(e,z) { + if(e > 0xffffffff || e < 1) return BigInteger.ONE; + var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e)-1; + g.copyTo(r); + while(--i >= 0) { + z.sqrTo(r,r2); + if((e&(1< 0) z.mulTo(r2,g,r); + else { var t = r; r = r2; r2 = t; } + } + return z.revert(r); +} + +// (public) this^e % m, 0 <= e < 2^32 +function bnModPowInt(e,m) { + var z; + if(e < 256 || m.isEven()) z = new Classic(m); else z = new Montgomery(m); + return this.exp(e,z); +} + +// protected +BigInteger.prototype.copyTo = bnpCopyTo; +BigInteger.prototype.fromInt = bnpFromInt; +BigInteger.prototype.fromString = bnpFromString; +BigInteger.prototype.clamp = bnpClamp; +BigInteger.prototype.dlShiftTo = bnpDLShiftTo; +BigInteger.prototype.drShiftTo = bnpDRShiftTo; +BigInteger.prototype.lShiftTo = bnpLShiftTo; +BigInteger.prototype.rShiftTo = bnpRShiftTo; +BigInteger.prototype.subTo = bnpSubTo; +BigInteger.prototype.multiplyTo = bnpMultiplyTo; +BigInteger.prototype.squareTo = bnpSquareTo; +BigInteger.prototype.divRemTo = bnpDivRemTo; +BigInteger.prototype.invDigit = bnpInvDigit; +BigInteger.prototype.isEven = bnpIsEven; +BigInteger.prototype.exp = bnpExp; + +// public +BigInteger.prototype.toString = bnToString; +BigInteger.prototype.negate = bnNegate; +BigInteger.prototype.abs = bnAbs; +BigInteger.prototype.compareTo = bnCompareTo; +BigInteger.prototype.bitLength = bnBitLength; +BigInteger.prototype.mod = bnMod; +BigInteger.prototype.modPowInt = bnModPowInt; + +// "constants" +BigInteger.ZERO = nbv(0); +BigInteger.ONE = nbv(1); + +// Depends on jsbn.js and rng.js + +// Version 1.1: support utf-8 encoding in pkcs1pad2 + +// convert a (hex) string to a bignum object +function parseBigInt(str,r) { + return new BigInteger(str,r); +} + +function linebrk(s,n) { + var ret = ""; + var i = 0; + while(i + n < s.length) { + ret += s.substring(i,i+n) + "\n"; + i += n; + } + return ret + s.substring(i,s.length); +} + +function byte2Hex(b) { + if(b < 0x10) + return "0" + b.toString(16); + else + return b.toString(16); +} + +// PKCS#1 (type 2, random) pad input string s to n bytes, and return a bigint +function pkcs1pad2(s,n) { + if(n < s.length + 11) { // TODO: fix for utf-8 + throw new Error("Message too long for RSA"); + } + var ba = new Array(); + var i = s.length - 1; + while(i >= 0 && n > 0) { + var c = s.charCodeAt(i--); + if(c < 128) { // encode using utf-8 + ba[--n] = c; + } + else if((c > 127) && (c < 2048)) { + ba[--n] = (c & 63) | 128; + ba[--n] = (c >> 6) | 192; + } + else { + ba[--n] = (c & 63) | 128; + ba[--n] = ((c >> 6) & 63) | 128; + ba[--n] = (c >> 12) | 224; + } + } + ba[--n] = 0; + var randomByte = 0; + var random = 0; + var shift = 0; + while(n > 2) { // random non-zero pad + if (shift == 0) { + random = sjcl.random.randomWords(1, 0)[0]; + } + + randomByte = (random >> shift) & 0xff; + shift = (shift + 8) % 32; + if (randomByte != 0) { + ba[--n] = randomByte; + } + } + ba[--n] = 2; + ba[--n] = 0; + return new BigInteger(ba); +} + +// "empty" RSA key constructor +function RSAKey() { + this.n = null; + this.e = 0; + this.d = null; + this.p = null; + this.q = null; + this.dmp1 = null; + this.dmq1 = null; + this.coeff = null; +} + +// Set the public key fields N and e from hex strings +function RSASetPublic(N,E) { + if(N != null && E != null && N.length > 0 && E.length > 0) { + this.n = parseBigInt(N,16); + this.e = parseInt(E,16); + } + else + throw new Error("Invalid RSA public key"); +} + +// Perform raw public operation on "x": return x^e (mod n) +function RSADoPublic(x) { + return x.modPowInt(this.e, this.n); +} + +// Return the PKCS#1 RSA encryption of "text" as an even-length hex string +function RSAEncrypt(text) { + var m = pkcs1pad2(text,(this.n.bitLength()+7)>>3); + if(m == null) return null; + var c = this.doPublic(m); + if(c == null) return null; + var h = c.toString(16); + if((h.length & 1) == 0) return h; else return "0" + h; +} + +// Return the PKCS#1 RSA encryption of "text" as a Base64-encoded string +//function RSAEncryptB64(text) { +// var h = this.encrypt(text); +// if(h) return hex2b64(h); else return null; +//} + +// protected +RSAKey.prototype.doPublic = RSADoPublic; + +// public +RSAKey.prototype.setPublic = RSASetPublic; +RSAKey.prototype.encrypt = RSAEncrypt; +//RSAKey.prototype.encrypt_b64 = RSAEncryptB64; + +/** @fileOverview Javascript cryptography implementation. + * + * Crush to remove comments, shorten variable names and + * generally reduce transmission size. + * + * @author Emily Stark + * @author Mike Hamburg + * @author Dan Boneh + */ + +"use strict"; +/*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */ +/*global document, window, escape, unescape */ + +/** @namespace The Stanford Javascript Crypto Library, top-level namespace. */ +var sjcl = { + /** @namespace Symmetric ciphers. */ + cipher: {}, + + /** @namespace Hash functions. Right now only SHA256 is implemented. */ + hash: {}, + + /** @namespace Key exchange functions. Right now only SRP is implemented. */ + keyexchange: {}, + + /** @namespace Block cipher modes of operation. */ + mode: {}, + + /** @namespace Miscellaneous. HMAC and PBKDF2. */ + misc: {}, + + /** + * @namespace Bit array encoders and decoders. + * + * @description + * The members of this namespace are functions which translate between + * SJCL's bitArrays and other objects (usually strings). Because it + * isn't always clear which direction is encoding and which is decoding, + * the method names are "fromBits" and "toBits". + */ + codec: {}, + + /** @namespace Exceptions. */ + exception: { + /** @class Ciphertext is corrupt. */ + corrupt: function(message) { + this.toString = function() { return "CORRUPT: "+this.message; }; + this.message = message; + }, + + /** @class Invalid parameter. */ + invalid: function(message) { + this.toString = function() { return "INVALID: "+this.message; }; + this.message = message; + }, + + /** @class Bug or missing feature in SJCL. */ + bug: function(message) { + this.toString = function() { return "BUG: "+this.message; }; + this.message = message; + }, + + /** @class Something isn't ready. */ + notReady: function(message) { + this.toString = function() { return "NOT READY: "+this.message; }; + this.message = message; + } + } +}; + +if(typeof module != 'undefined' && module.exports){ + module.exports = sjcl; +} + +/** @fileOverview Low-level AES implementation. + * + * This file contains a low-level implementation of AES, optimized for + * size and for efficiency on several browsers. It is based on + * OpenSSL's aes_core.c, a public-domain implementation by Vincent + * Rijmen, Antoon Bosselaers and Paulo Barreto. + * + * An older version of this implementation is available in the public + * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh, + * Stanford University 2008-2010 and BSD-licensed for liability + * reasons. + * + * @author Emily Stark + * @author Mike Hamburg + * @author Dan Boneh + */ + +/** + * Schedule out an AES key for both encryption and decryption. This + * is a low-level class. Use a cipher mode to do bulk encryption. + * + * @constructor + * @param {Array} key The key as an array of 4, 6 or 8 words. + * + * @class Advanced Encryption Standard (low-level interface) + */ +sjcl.cipher.aes = function (key) { + if (!this._tables[0][0][0]) { + this._precompute(); + } + + var i, j, tmp, + encKey, decKey, + sbox = this._tables[0][4], decTable = this._tables[1], + keyLen = key.length, rcon = 1; + + if (keyLen !== 4 && keyLen !== 6 && keyLen !== 8) { + throw new sjcl.exception.invalid("invalid aes key size"); + } + + this._key = [encKey = key.slice(0), decKey = []]; + + // schedule encryption keys + for (i = keyLen; i < 4 * keyLen + 28; i++) { + tmp = encKey[i-1]; + + // apply sbox + if (i%keyLen === 0 || (keyLen === 8 && i%keyLen === 4)) { + tmp = sbox[tmp>>>24]<<24 ^ sbox[tmp>>16&255]<<16 ^ sbox[tmp>>8&255]<<8 ^ sbox[tmp&255]; + + // shift rows and add rcon + if (i%keyLen === 0) { + tmp = tmp<<8 ^ tmp>>>24 ^ rcon<<24; + rcon = rcon<<1 ^ (rcon>>7)*283; + } + } + + encKey[i] = encKey[i-keyLen] ^ tmp; + } + + // schedule decryption keys + for (j = 0; i; j++, i--) { + tmp = encKey[j&3 ? i : i - 4]; + if (i<=4 || j<4) { + decKey[j] = tmp; + } else { + decKey[j] = decTable[0][sbox[tmp>>>24 ]] ^ + decTable[1][sbox[tmp>>16 & 255]] ^ + decTable[2][sbox[tmp>>8 & 255]] ^ + decTable[3][sbox[tmp & 255]]; + } + } +}; + +sjcl.cipher.aes.prototype = { + // public + /* Something like this might appear here eventually + name: "AES", + blockSize: 4, + keySizes: [4,6,8], + */ + + /** + * Encrypt an array of 4 big-endian words. + * @param {Array} data The plaintext. + * @return {Array} The ciphertext. + */ + encrypt:function (data) { return this._crypt(data,0); }, + + /** + * Decrypt an array of 4 big-endian words. + * @param {Array} data The ciphertext. + * @return {Array} The plaintext. + */ + decrypt:function (data) { return this._crypt(data,1); }, + + /** + * The expanded S-box and inverse S-box tables. These will be computed + * on the client so that we don't have to send them down the wire. + * + * There are two tables, _tables[0] is for encryption and + * _tables[1] is for decryption. + * + * The first 4 sub-tables are the expanded S-box with MixColumns. The + * last (_tables[01][4]) is the S-box itself. + * + * @private + */ + _tables: [[[],[],[],[],[]],[[],[],[],[],[]]], + + /** + * Expand the S-box tables. + * + * @private + */ + _precompute: function () { + var encTable = this._tables[0], decTable = this._tables[1], + sbox = encTable[4], sboxInv = decTable[4], + i, x, xInv, d=[], th=[], x2, x4, x8, s, tEnc, tDec; + + // Compute double and third tables + for (i = 0; i < 256; i++) { + th[( d[i] = i<<1 ^ (i>>7)*283 )^i]=i; + } + + for (x = xInv = 0; !sbox[x]; x ^= x2 || 1, xInv = th[xInv] || 1) { + // Compute sbox + s = xInv ^ xInv<<1 ^ xInv<<2 ^ xInv<<3 ^ xInv<<4; + s = s>>8 ^ s&255 ^ 99; + sbox[x] = s; + sboxInv[s] = x; + + // Compute MixColumns + x8 = d[x4 = d[x2 = d[x]]]; + tDec = x8*0x1010101 ^ x4*0x10001 ^ x2*0x101 ^ x*0x1010100; + tEnc = d[s]*0x101 ^ s*0x1010100; + + for (i = 0; i < 4; i++) { + encTable[i][x] = tEnc = tEnc<<24 ^ tEnc>>>8; + decTable[i][s] = tDec = tDec<<24 ^ tDec>>>8; + } + } + + // Compactify. Considerable speedup on Firefox. + for (i = 0; i < 5; i++) { + encTable[i] = encTable[i].slice(0); + decTable[i] = decTable[i].slice(0); + } + }, + + /** + * Encryption and decryption core. + * @param {Array} input Four words to be encrypted or decrypted. + * @param dir The direction, 0 for encrypt and 1 for decrypt. + * @return {Array} The four encrypted or decrypted words. + * @private + */ + _crypt:function (input, dir) { + if (input.length !== 4) { + throw new sjcl.exception.invalid("invalid aes block size"); + } + + var key = this._key[dir], + // state variables a,b,c,d are loaded with pre-whitened data + a = input[0] ^ key[0], + b = input[dir ? 3 : 1] ^ key[1], + c = input[2] ^ key[2], + d = input[dir ? 1 : 3] ^ key[3], + a2, b2, c2, + + nInnerRounds = key.length/4 - 2, + i, + kIndex = 4, + out = [0,0,0,0], + table = this._tables[dir], + + // load up the tables + t0 = table[0], + t1 = table[1], + t2 = table[2], + t3 = table[3], + sbox = table[4]; + + // Inner rounds. Cribbed from OpenSSL. + for (i = 0; i < nInnerRounds; i++) { + a2 = t0[a>>>24] ^ t1[b>>16 & 255] ^ t2[c>>8 & 255] ^ t3[d & 255] ^ key[kIndex]; + b2 = t0[b>>>24] ^ t1[c>>16 & 255] ^ t2[d>>8 & 255] ^ t3[a & 255] ^ key[kIndex + 1]; + c2 = t0[c>>>24] ^ t1[d>>16 & 255] ^ t2[a>>8 & 255] ^ t3[b & 255] ^ key[kIndex + 2]; + d = t0[d>>>24] ^ t1[a>>16 & 255] ^ t2[b>>8 & 255] ^ t3[c & 255] ^ key[kIndex + 3]; + kIndex += 4; + a=a2; b=b2; c=c2; + } + + // Last round. + for (i = 0; i < 4; i++) { + out[dir ? 3&-i : i] = + sbox[a>>>24 ]<<24 ^ + sbox[b>>16 & 255]<<16 ^ + sbox[c>>8 & 255]<<8 ^ + sbox[d & 255] ^ + key[kIndex++]; + a2=a; a=b; b=c; c=d; d=a2; + } + + return out; + } +}; + + +/** @fileOverview Arrays of bits, encoded as arrays of Numbers. + * + * @author Emily Stark + * @author Mike Hamburg + * @author Dan Boneh + */ + +/** @namespace Arrays of bits, encoded as arrays of Numbers. + * + * @description + *

+ * These objects are the currency accepted by SJCL's crypto functions. + *

+ * + *

+ * Most of our crypto primitives operate on arrays of 4-byte words internally, + * but many of them can take arguments that are not a multiple of 4 bytes. + * This library encodes arrays of bits (whose size need not be a multiple of 8 + * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an + * array of words, 32 bits at a time. Since the words are double-precision + * floating point numbers, they fit some extra data. We use this (in a private, + * possibly-changing manner) to encode the number of bits actually present + * in the last word of the array. + *

+ * + *

+ * Because bitwise ops clear this out-of-band data, these arrays can be passed + * to ciphers like AES which want arrays of words. + *

+ */ +sjcl.bitArray = { + /** + * Array slices in units of bits. + * @param {bitArray} a The array to slice. + * @param {Number} bstart The offset to the start of the slice, in bits. + * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined, + * slice until the end of the array. + * @return {bitArray} The requested slice. + */ + bitSlice: function (a, bstart, bend) { + a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1); + return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart); + }, + + /** + * Extract a number packed into a bit array. + * @param {bitArray} a The array to slice. + * @param {Number} bstart The offset to the start of the slice, in bits. + * @param {Number} length The length of the number to extract. + * @return {Number} The requested slice. + */ + extract: function(a, bstart, blength) { + // FIXME: this Math.floor is not necessary at all, but for some reason + // seems to suppress a bug in the Chromium JIT. + var x, sh = Math.floor((-bstart-blength) & 31); + if ((bstart + blength - 1 ^ bstart) & -32) { + // it crosses a boundary + x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh); + } else { + // within a single word + x = a[bstart/32|0] >>> sh; + } + return x & ((1< 0 && len) { + a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1); + } + return a; + }, + + /** + * Make a partial word for a bit array. + * @param {Number} len The number of bits in the word. + * @param {Number} x The bits. + * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side. + * @return {Number} The partial word. + */ + partial: function (len, x, _end) { + if (len === 32) { return x; } + return (_end ? x|0 : x << (32-len)) + len * 0x10000000000; + }, + + /** + * Get the number of bits used by a partial word. + * @param {Number} x The partial word. + * @return {Number} The number of bits used by the partial word. + */ + getPartial: function (x) { + return Math.round(x/0x10000000000) || 32; + }, + + /** + * Compare two arrays for equality in a predictable amount of time. + * @param {bitArray} a The first array. + * @param {bitArray} b The second array. + * @return {boolean} true if a == b; false otherwise. + */ + equal: function (a, b) { + if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) { + return false; + } + var x = 0, i; + for (i=0; i= 32; shift -= 32) { + out.push(carry); + carry = 0; + } + if (shift === 0) { + return out.concat(a); + } + + for (i=0; i>>shift); + carry = a[i] << (32-shift); + } + last2 = a.length ? a[a.length-1] : 0; + shift2 = sjcl.bitArray.getPartial(last2); + out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1)); + return out; + }, + + /** xor a block of 4 words together. + * @private + */ + _xor4: function(x,y) { + return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]]; + } +}; + +/** @fileOverview Bit array codec implementations. + * + * @author Emily Stark + * @author Mike Hamburg + * @author Dan Boneh + */ + +/** @namespace Hexadecimal */ +sjcl.codec.hex = { + /** Convert from a bitArray to a hex string. */ + fromBits: function (arr) { + var out = "", i, x; + for (i=0; i>> 24); + tmp <<= 8; + } + return decodeURIComponent(escape(out)); + }, + + /** Convert from a UTF-8 string to a bitArray. */ + toBits: function (str) { + str = unescape(encodeURIComponent(str)); + var out = [], i, tmp=0; + for (i=0; i>>bits) >>> 26); + if (bits < 6) { + ta = arr[i] << (6-bits); + bits += 26; + i++; + } else { + ta <<= 6; + bits -= 6; + } + } + while ((out.length & 3) && !_noEquals) { out += "="; } + return out; + }, + + /** Convert from a base64 string to a bitArray */ + toBits: function(str, _url) { + str = str.replace(/\s|=/g,''); + var out = [], i, bits=0, c = sjcl.codec.base64._chars, ta=0, x; + if (_url) c = c.substr(0,62) + '-_'; + for (i=0; i 26) { + bits -= 26; + out.push(ta ^ x>>>bits); + ta = x << (32-bits); + } else { + bits += 6; + ta ^= x << (32-bits); + } + } + if (bits&56) { + out.push(sjcl.bitArray.partial(bits&56, ta, 1)); + } + return out; + } +}; + +sjcl.codec.base64url = { + fromBits: function (arr) { return sjcl.codec.base64.fromBits(arr,1,1); }, + toBits: function (str) { return sjcl.codec.base64.toBits(str,1); } +}; + +/** @fileOverview CBC mode implementation + * + * @author Emily Stark + * @author Mike Hamburg + * @author Dan Boneh + */ + +/** @namespace + * Dangerous: CBC mode with PKCS#5 padding. + * + * @author Emily Stark + * @author Mike Hamburg + * @author Dan Boneh + */ +if (sjcl.beware === undefined) { + sjcl.beware = {}; +} +sjcl.beware["CBC mode is dangerous because it doesn't protect message integrity." +] = function() { + sjcl.mode.cbc = { + /** The name of the mode. + * @constant + */ + name: "cbc", + + /** Encrypt in CBC mode with PKCS#5 padding. + * @param {Object} prp The block cipher. It must have a block size of 16 bytes. + * @param {bitArray} plaintext The plaintext data. + * @param {bitArray} iv The initialization value. + * @param {bitArray} [adata=[]] The authenticated data. Must be empty. + * @return The encrypted data, an array of bytes. + * @throws {sjcl.exception.invalid} if the IV isn't exactly 128 bits, or if any adata is specified. + */ + encrypt: function(prp, plaintext, iv, adata) { + if (adata && adata.length) { + throw new sjcl.exception.invalid("cbc can't authenticate data"); + } + if (sjcl.bitArray.bitLength(iv) !== 128) { + throw new sjcl.exception.invalid("cbc iv must be 128 bits"); + } + var i, + w = sjcl.bitArray, + xor = w._xor4, + bl = w.bitLength(plaintext), + bp = 0, + output = []; + + if (bl&7) { + throw new sjcl.exception.invalid("pkcs#5 padding only works for multiples of a byte"); + } + + for (i=0; bp+128 <= bl; i+=4, bp+=128) { + /* Encrypt a non-final block */ + iv = prp.encrypt(xor(iv, plaintext.slice(i,i+4))); + output.splice(i,0,iv[0],iv[1],iv[2],iv[3]); + } + + /* Construct the pad. */ + bl = (16 - ((bl >> 3) & 15)) * 0x1010101; + + /* Pad and encrypt. */ + iv = prp.encrypt(xor(iv,w.concat(plaintext,[bl,bl,bl,bl]).slice(i,i+4))); + output.splice(i,0,iv[0],iv[1],iv[2],iv[3]); + return output; + }, + + /** Decrypt in CBC mode. + * @param {Object} prp The block cipher. It must have a block size of 16 bytes. + * @param {bitArray} ciphertext The ciphertext data. + * @param {bitArray} iv The initialization value. + * @param {bitArray} [adata=[]] The authenticated data. It must be empty. + * @return The decrypted data, an array of bytes. + * @throws {sjcl.exception.invalid} if the IV isn't exactly 128 bits, or if any adata is specified. + * @throws {sjcl.exception.corrupt} if if the message is corrupt. + */ + decrypt: function(prp, ciphertext, iv, adata) { + if (adata && adata.length) { + throw new sjcl.exception.invalid("cbc can't authenticate data"); + } + if (sjcl.bitArray.bitLength(iv) !== 128) { + throw new sjcl.exception.invalid("cbc iv must be 128 bits"); + } + if ((sjcl.bitArray.bitLength(ciphertext) & 127) || !ciphertext.length) { + throw new sjcl.exception.corrupt("cbc ciphertext must be a positive multiple of the block size"); + } + var i, + w = sjcl.bitArray, + xor = w._xor4, + bi, bo, + output = []; + + adata = adata || []; + + for (i=0; i 16) { + throw new sjcl.exception.corrupt("pkcs#5 padding corrupt"); + } + bo = bi * 0x1010101; + if (!w.equal(w.bitSlice([bo,bo,bo,bo], 0, bi*8), + w.bitSlice(output, output.length*32 - bi*8, output.length*32))) { + throw new sjcl.exception.corrupt("pkcs#5 padding corrupt"); + } + + return w.bitSlice(output, 0, output.length*32 - bi*8); + } + }; +}; + +/** @fileOverview HMAC implementation. + * + * @author Emily Stark + * @author Mike Hamburg + * @author Dan Boneh + */ + +/** HMAC with the specified hash function. + * @constructor + * @param {bitArray} key the key for HMAC. + * @param {Object} [hash=sjcl.hash.sha256] The hash function to use. + */ +sjcl.misc.hmac = function (key, Hash) { + this._hash = Hash = Hash || sjcl.hash.sha256; + var exKey = [[],[]], i, + bs = Hash.prototype.blockSize / 32; + this._baseHash = [new Hash(), new Hash()]; + + if (key.length > bs) { + key = Hash.hash(key); + } + + for (i=0; i>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) + + (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) + + w[i&15] + w[(i+9) & 15]) | 0; + } + + tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0; + + // shift register + h7 = h6; h6 = h5; h5 = h4; + h4 = h3 + tmp | 0; + h3 = h2; h2 = h1; h1 = h0; + + h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0; + } + + h[0] = h[0]+h0 | 0; + h[1] = h[1]+h1 | 0; + h[2] = h[2]+h2 | 0; + h[3] = h[3]+h3 | 0; + h[4] = h[4]+h4 | 0; + h[5] = h[5]+h5 | 0; + h[6] = h[6]+h6 | 0; + h[7] = h[7]+h7 | 0; + } +}; + + + +/** @fileOverview Random number generator. + * + * @author Emily Stark + * @author Mike Hamburg + * @author Dan Boneh + */ + +/** @namespace Random number generator + * + * @description + *

+ * This random number generator is a derivative of Ferguson and Schneier's + * generator Fortuna. It collects entropy from various events into several + * pools, implemented by streaming SHA-256 instances. It differs from + * ordinary Fortuna in a few ways, though. + *

+ * + *

+ * Most importantly, it has an entropy estimator. This is present because + * there is a strong conflict here between making the generator available + * as soon as possible, and making sure that it doesn't "run on empty". + * In Fortuna, there is a saved state file, and the system is likely to have + * time to warm up. + *

+ * + *

+ * Second, because users are unlikely to stay on the page for very long, + * and to speed startup time, the number of pools increases logarithmically: + * a new pool is created when the previous one is actually used for a reseed. + * This gives the same asymptotic guarantees as Fortuna, but gives more + * entropy to early reseeds. + *

+ * + *

+ * The entire mechanism here feels pretty klunky. Furthermore, there are + * several improvements that should be made, including support for + * dedicated cryptographic functions that may be present in some browsers; + * state files in local storage; cookies containing randomness; etc. So + * look for improvements in future versions. + *

+ */ +sjcl.random = { + /** Generate several random words, and return them in an array + * @param {Number} nwords The number of words to generate. + */ + randomWords: function (nwords, paranoia) { + var out = [], i, readiness = this.isReady(paranoia), g; + + if (readiness === this._NOT_READY) { + throw new sjcl.exception.notReady("generator isn't seeded"); + } else if (readiness & this._REQUIRES_RESEED) { + this._reseedFromPools(!(readiness & this._READY)); + } + + for (i=0; i0) { + estimatedEntropy++; + tmp = tmp >>> 1; + } + } + } + this._pools[robin].update([id,this._eventId++,2,estimatedEntropy,t,data.length].concat(data)); + } + break; + + case "string": + if (estimatedEntropy === undefined) { + /* English text has just over 1 bit per character of entropy. + * But this might be HTML or something, and have far less + * entropy than English... Oh well, let's just say one bit. + */ + estimatedEntropy = data.length; + } + this._pools[robin].update([id,this._eventId++,3,estimatedEntropy,t,data.length]); + this._pools[robin].update(data); + break; + + default: + err=1; + } + if (err) { + throw new sjcl.exception.bug("random: addEntropy only supports number, array of numbers or string"); + } + + /* record the new strength */ + this._poolEntropy[robin] += estimatedEntropy; + this._poolStrength += estimatedEntropy; + + /* fire off events */ + if (oldReady === this._NOT_READY) { + if (this.isReady() !== this._NOT_READY) { + this._fireEvent("seeded", Math.max(this._strength, this._poolStrength)); + } + this._fireEvent("progress", this.getProgress()); + } + }, + + /** Is the generator ready? */ + isReady: function (paranoia) { + var entropyRequired = this._PARANOIA_LEVELS[ (paranoia !== undefined) ? paranoia : this._defaultParanoia ]; + + if (this._strength && this._strength >= entropyRequired) { + return (this._poolEntropy[0] > this._BITS_PER_RESEED && (new Date()).valueOf() > this._nextReseed) ? + this._REQUIRES_RESEED | this._READY : + this._READY; + } else { + return (this._poolStrength >= entropyRequired) ? + this._REQUIRES_RESEED | this._NOT_READY : + this._NOT_READY; + } + }, + + /** Get the generator's progress toward readiness, as a fraction */ + getProgress: function (paranoia) { + var entropyRequired = this._PARANOIA_LEVELS[ paranoia ? paranoia : this._defaultParanoia ]; + + if (this._strength >= entropyRequired) { + return 1.0; + } else { + return (this._poolStrength > entropyRequired) ? + 1.0 : + this._poolStrength / entropyRequired; + } + }, + + /** start the built-in entropy collectors */ + startCollectors: function () { + if (this._collectorsStarted) { return; } + + if (window.addEventListener) { + window.addEventListener("load", this._loadTimeCollector, false); + window.addEventListener("mousemove", this._mouseCollector, false); + } else if (document.attachEvent) { + document.attachEvent("onload", this._loadTimeCollector); + document.attachEvent("onmousemove", this._mouseCollector); + } + else { + throw new sjcl.exception.bug("can't attach event"); + } + + this._collectorsStarted = true; + }, + + /** stop the built-in entropy collectors */ + stopCollectors: function () { + if (!this._collectorsStarted) { return; } + + if (window.removeEventListener) { + window.removeEventListener("load", this._loadTimeCollector, false); + window.removeEventListener("mousemove", this._mouseCollector, false); + } else if (window.detachEvent) { + window.detachEvent("onload", this._loadTimeCollector); + window.detachEvent("onmousemove", this._mouseCollector); + } + this._collectorsStarted = false; + }, + + /* use a cookie to store entropy. + useCookie: function (all_cookies) { + throw new sjcl.exception.bug("random: useCookie is unimplemented"); + },*/ + + /** add an event listener for progress or seeded-ness. */ + addEventListener: function (name, callback) { + this._callbacks[name][this._callbackI++] = callback; + }, + + /** remove an event listener for progress or seeded-ness */ + removeEventListener: function (name, cb) { + var i, j, cbs=this._callbacks[name], jsTemp=[]; + + /* I'm not sure if this is necessary; in C++, iterating over a + * collection and modifying it at the same time is a no-no. + */ + + for (j in cbs) { + if (cbs.hasOwnProperty(j) && cbs[j] === cb) { + jsTemp.push(j); + } + } + + for (i=0; i= 1 << this._pools.length) { + this._pools.push(new sjcl.hash.sha256()); + this._poolEntropy.push(0); + } + + /* how strong was this reseed? */ + this._poolStrength -= strength; + if (strength > this._strength) { + this._strength = strength; + } + + this._reseedCount ++; + this._reseed(reseedData); + }, + + _mouseCollector: function (ev) { + var x = ev.x || ev.clientX || ev.offsetX || 0, y = ev.y || ev.clientY || ev.offsetY || 0; + sjcl.random.addEntropy([x,y], 2, "mouse"); + }, + + _loadTimeCollector: function (ev) { + sjcl.random.addEntropy((new Date()).valueOf(), 2, "loadtime"); + }, + + _fireEvent: function (name, arg) { + var j, cbs=sjcl.random._callbacks[name], cbsTemp=[]; + /* TODO: there is a race condition between removing collectors and firing them */ + + /* I'm not sure if this is necessary; in C++, iterating over a + * collection and modifying it at the same time is a no-no. + */ + + for (j in cbs) { + if (cbs.hasOwnProperty(j)) { + cbsTemp.push(cbs[j]); + } + } + + for (j=0; j 0) { + found = found.concat(findInputs(child)); + } + } + + return found; + }; + + var generateRsaKey = function () { + var asn1, exponent, parts, modulus, rawKey, rsa; + + try { + rawKey = b64toBA(publicKey); + asn1 = ASN1.decode(rawKey); + } catch (e) { + throw "Invalid encryption key. Please use the key labeled 'Client-Side Encryption Key'"; + } + + parts = extractIntegers(asn1); + + if (parts.length !== 2) { + throw "Invalid encryption key. Please use the key labeled 'Client-Side Encryption Key'"; + } + + modulus = parts[0]; + exponent = parts[1]; + + rsa = new RSAKey(); + rsa.setPublic(modulus, exponent); + + return rsa; + }; + + var generateHmacKey = function () { + return { + key: sjcl.random.randomWords(8, 0), + sign: function (message) { + var hmac = new sjcl.misc.hmac(this.key, sjcl.hash.sha256), + signature = hmac.encrypt(message); + + return sjcl.codec.base64.fromBits(signature); + } + }; + }; + + self.encrypt = function (plaintext) { + var rsa = generateRsaKey(), + aes = Braintree.generateAesKey(), + hmac = generateHmacKey(), + ciphertext = aes.encrypt(plaintext), + signature = hmac.sign(sjcl.codec.base64.toBits(ciphertext)), + combinedKey = sjcl.bitArray.concat(aes.key, hmac.key), + encodedKey = sjcl.codec.base64.fromBits(combinedKey), + hexEncryptedKey = rsa.encrypt(encodedKey), + prefix = "$bt4|javascript_" + self.version.replace(/\./g, "_") + "$", + encryptedKey = null; + + if(hexEncryptedKey) { + encryptedKey = hex2b64(hexEncryptedKey); + } + + return prefix + encryptedKey + "$" + ciphertext + "$" + signature; + }; + + self.encryptForm = function (form) { + var element, encryptedValue, + fieldName, hiddenField, + i, inputs; + + form = extractForm(form); + inputs = findInputs(form); + + while (hiddenFields.length > 0) { + try { + form.removeChild(hiddenFields[0]); + } catch (err) {} + hiddenFields.splice(0, 1); + } + + for (i = 0; i < inputs.length; i++) { + element = inputs[i]; + fieldName = element.getAttribute("data-encrypted-name"); + encryptedValue = self.encrypt(element.value); + element.removeAttribute("name"); + hiddenField = createElement("input", { + value: encryptedValue, + type: "hidden", + name: fieldName + }); + hiddenFields.push(hiddenField); + form.appendChild(hiddenField); + } + }; + + self.onSubmitEncryptForm = function (form, callback) { + var wrappedCallback; + + form = extractForm(form); + + wrappedCallback = function (e) { + self.encryptForm(form); + return (!!callback) ? callback(e) : e; + }; + + if (window.jQuery) { + window.jQuery(form).submit(wrappedCallback); + } else if (form.addEventListener) { + form.addEventListener("submit", wrappedCallback, false); + } else if (form.attachEvent) { + form.attachEvent("onsubmit", wrappedCallback); + } + }; + + // backwards compatibility + self.formEncrypter = { + encryptForm: self.encryptForm, + extractForm: extractForm, + onSubmitEncryptForm: self.onSubmitEncryptForm + }; + + sjcl.random.startCollectors(); +}; + +window.Braintree = Braintree; + +})(); + +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.braintree=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o> 4 ) & 0x3 ); + var b = ( ( b2 & 0xF ) << 4 ) | ( ( b3 >> 2 ) & 0xF ); + var c = ( ( b3 & 0x3 ) << 6 ) | ( b4 & 0x3F ); + + result += String.fromCharCode(a) + (b?String.fromCharCode(b):"") + (c?String.fromCharCode(c):""); + + } while( i < base64String.length ); + + return result; +}; + +global.atob = global.atob || atobPolyfill; + +module.exports = { + atobPolyfill: atobPolyfill +}; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],12:[function(require,module,exports){ +(function (global){ +'use strict'; + +var util = require('../util'); +var prepBody = require('./prep-body'); +var parseBody = require('./parse-body'); +var constants = require('../constants'); +var isXHRAvailable = global.XMLHttpRequest && 'withCredentials' in new global.XMLHttpRequest(); + +function getRequestObject() { + return isXHRAvailable ? new XMLHttpRequest() : new XDomainRequest(); +} + +function get(url, attrs, deserializer, callback, timeout) { + var urlParams = util.createURLParams(url, attrs); + makeRequest('GET', urlParams, null, deserializer, callback, timeout); +} + +function post(url, attrs, deserializer, callback, timeout) { + makeRequest('POST', url, attrs, deserializer, callback, timeout); +} + +function makeRequest(method, url, body, deserializer, callback, timeout) { + var status, resBody; + var req = getRequestObject(); + + callback = callback || function () {}; + + if (isXHRAvailable) { + req.onreadystatechange = function () { + if (req.readyState !== 4) { return; } + + status = req.status; + resBody = parseBody(req.responseText); + + if (status >= 400 || status === 0) { + callback.call(null, resBody || {errors: constants.errors.UNKNOWN_ERROR}, null); + } else if (status > 0) { + callback.call(null, null, deserializer(resBody)); + } + }; + } else { + req.onload = function () { + callback.call(null, null, deserializer(parseBody(req.responseText))); + }; + + req.onerror = function () { + callback.call(null, req.responseText, null); + }; + + // This must remain for IE9 to work + req.onprogress = function() {}; + + req.ontimeout = function () { + callback.call(null, {errors: constants.errors.UNKNOWN_ERROR}, null); + }; + } + + req.open(method, url, true); + req.timeout = timeout == null ? 60000 : timeout; + + if (isXHRAvailable && method === 'POST') { + req.setRequestHeader('Content-Type', 'application/json'); + } + + setTimeout(function () { + req.send(prepBody(method, body)); + }, 0); +} + +module.exports = { + get: get, + post: post +}; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"../constants":4,"../util":20,"./parse-body":16,"./prep-body":17}],13:[function(require,module,exports){ +'use strict'; + +var JSONPDriver = require('./jsonp-driver'); +var AJAXDriver = require('./ajax-driver'); +var util = require('../util'); + +function chooseRequestDriver(options) { + var ua = util.getUserAgent(); + var isAJAXAvailable = !(util.isHTTP() && /(MSIE\s(8|9))|(Phantom)/.test(ua)); + + options = options || {}; + + if (options.enableCORS && isAJAXAvailable) { + return AJAXDriver; + } else { + return JSONPDriver; + } +} + +module.exports = chooseRequestDriver; + +},{"../util":20,"./ajax-driver":12,"./jsonp-driver":14}],14:[function(require,module,exports){ +'use strict'; + +var JSONP = require('./jsonp'); +var constants = require('../constants'); +var timeoutWatchers = []; + +function deserialize(response, mapper) { + if (response.status >= 400) { + return [response, null]; + } else { + return [null, mapper(response)]; + } +} + +function noop() {} + +function requestWithTimeout(url, attrs, deserializer, method, callback, timeout) { + var uniqueName; + + callback = callback || noop; + + if (timeout == null) { + timeout = 60000; + } + + uniqueName = method(url, attrs, function (data, name) { + if (timeoutWatchers[name]) { + clearTimeout(timeoutWatchers[name]); + callback.apply(null, deserialize(data, function (d) { return deserializer(d); })); + } + }); + + if (typeof timeout === 'number') { + timeoutWatchers[uniqueName] = setTimeout(function () { + timeoutWatchers[uniqueName] = null; + callback.apply(null, [{errors: constants.errors.UNKNOWN_ERROR}, null]); + }, timeout); + } else { + callback.apply(null, [{errors: constants.errors.INVALID_TIMEOUT}, null]); + } +} + +function post(url, attrs, deserializer, callback, timeout) { + attrs._method = 'POST'; + requestWithTimeout(url, attrs, deserializer, JSONP.get, callback, timeout); +} + +function get(url, attrs, deserializer, callback, timeout) { + requestWithTimeout(url, attrs, deserializer, JSONP.get, callback, timeout); +} + +module.exports = { + get: get, + post: post +}; + +},{"../constants":4,"./jsonp":15}],15:[function(require,module,exports){ +(function (global){ +'use strict'; + +var util = require('../util'); + +/* +* Lightweight JSONP fetcher +* Copyright 2010-2012 Erik Karlsson. All rights reserved. +* BSD licensed +*/ +var head, + window = global, + config = {}; + +function load(url, pfnError) { + var script = document.createElement('script'), + done = false; + script.src = url; + script.async = true; + + var errorHandler = pfnError || config.error; + if ( typeof errorHandler === 'function' ) { + script.onerror = function (ex){ + errorHandler({url: url, event: ex}); + }; + } + + script.onload = script.onreadystatechange = function () { + if ( !done && (!this.readyState || this.readyState === "loaded" || this.readyState === "complete") ) { + done = true; + script.onload = script.onreadystatechange = null; + if ( script && script.parentNode ) { + script.parentNode.removeChild( script ); + } + } + }; + + if ( !head ) { + head = document.getElementsByTagName('head')[0]; + } + head.appendChild( script ); +} + +function jsonp(url, params, callback, callbackName) { + var urlParams, key, uniqueName; + + callbackName = (callbackName||config['callbackName']||'callback'); + uniqueName = callbackName + "_json" + util.generateUUID(); + params[callbackName] = uniqueName; + urlParams = util.createURLParams(url, params) + + window[ uniqueName ] = function (data){ + callback(data, uniqueName); + try { + delete window[ uniqueName ]; + } catch (e) {} + window[ uniqueName ] = null; + }; + + load(urlParams); + return uniqueName; +} + +function setDefaults(obj){ + config = obj; +} + +module.exports = { + get: jsonp, + init: setDefaults +}; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"../util":20}],16:[function(require,module,exports){ +'use strict'; + +module.exports = function (body) { + try { + body = JSON.parse(body); + } catch (e) {} + + return body; +}; + +},{}],17:[function(require,module,exports){ +'use strict'; + +var isString = require('lodash.isstring'); + +module.exports = function (method, body) { + if (!isString(method)) { + throw new Error('Method must be a string'); + } + + if (method.toLowerCase() !== 'get' && body != null) { + body = isString(body) ? body : JSON.stringify(body); + } + + return body; +}; + +},{"lodash.isstring":51}],18:[function(require,module,exports){ +'use strict'; + +function SEPAMandate(attributes) { + var i = 0; + var attribute; + var allAttributes = [ + 'accountHolderName', + 'bic', + 'longFormURL', + 'mandateReferenceNumber', + 'maskedIBAN', + 'shortForm' + ]; + + for (i = 0; i < allAttributes.length; i++) { + attribute = allAttributes[i]; + this[attribute] = attributes[attribute]; + } +} + +module.exports = SEPAMandate; + +},{}],19:[function(require,module,exports){ +'use strict'; + +module.exports = function (options) { + if (options.enableCORS != null) { + return options.enableCORS; + } + + if (options.merchantConfiguration) { + return options.merchantConfiguration.enableCORS; + } + + return false; +}; + +},{}],20:[function(require,module,exports){ +(function (global){ +'use strict'; + +var isEmpty = require('lodash.isempty'); +var isObject = require('lodash.isobject'); + +function joinUrlFragments(fragments) { + var strippedFragments = [], + strippedFragment, + i; + + for (i = 0; i < fragments.length; i++) { + strippedFragment = fragments[i]; + if (strippedFragment.charAt(strippedFragment.length - 1) === '/') { + strippedFragment = strippedFragment.substring(0, strippedFragment.length - 1); + } + if (strippedFragment.charAt(0) === '/') { + strippedFragment = strippedFragment.substring(1); + } + + strippedFragments.push(strippedFragment); + } + + return strippedFragments.join('/'); +} + +function isArray(value) { + return value && typeof value === 'object' && typeof value.length === 'number' && + Object.prototype.toString.call(value) === '[object Array]' || false; +} + +function generateUUID() { // RFC 4122 v4 (pseudo-random) UUID without hyphens + return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function (xORy) { + var randomHex = Math.floor(Math.random() * 16); + var uuidHex = xORy === 'x' ? randomHex : randomHex & 0x3 | 0x8; // jshint ignore:line + return uuidHex.toString(16); + }); +} + +function mergeOptions(obj1, obj2) { + var obj3 = {}; + var attrname; + for (attrname in obj1) { + if (obj1.hasOwnProperty(attrname)) { + obj3[attrname] = obj1[attrname]; + } + } + for (attrname in obj2) { + if (obj2.hasOwnProperty(attrname)) { + obj3[attrname] = obj2[attrname]; + } + } + return obj3; +} + +function stringify(params, namespace) { + var query = [], k, v, p; + + for (p in params) { + if (!params.hasOwnProperty(p)) { + continue; + } + + v = params[p]; + + if (namespace) { + if (isArray(params)) { + k = namespace + '[]'; + } else { + k = namespace + '[' + p + ']'; + } + } else { + k = p; + } + if (typeof v === 'object') { + query.push(stringify(v, k)); + } else { + query.push(encodeURIComponent(k) + '=' + encodeURIComponent(v)); + } + } + + return query.join('&'); +} + +function createURLParams(url, params) { + url = url || ''; + + if (!isEmpty(params) && isObject(params)) { + url += url.indexOf('?') === -1 ? '?' : ''; + url += url.indexOf('=') !== -1 ? '&' : ''; + url += stringify(params); + } + + return url; +} + +function getUserAgent() { + return global.navigator.userAgent; +} + +function isHTTP() { + return global.location.protocol === 'http:'; +} + +module.exports = { + joinUrlFragments: joinUrlFragments, + isArray: isArray, + generateUUID: generateUUID, + mergeOptions: mergeOptions, + stringify: stringify, + createURLParams: createURLParams, + getUserAgent: getUserAgent, + isHTTP: isHTTP +}; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"lodash.isempty":44,"lodash.isobject":50}],21:[function(require,module,exports){ +'use strict'; + +var Client = require('./lib/client'); +var util = require('./lib/util'); +var parseClientToken = require('./lib/parse-client-token'); +var getConfiguration = require('./lib/get-configuration'); + +function configure(options) { + return new Client(options); +} + +module.exports = { + Client: Client, + configure: configure, + util: util, + parseClientToken: parseClientToken, + _getConfiguration: getConfiguration +}; + +},{"./lib/client":2,"./lib/get-configuration":7,"./lib/parse-client-token":9,"./lib/util":20}],22:[function(require,module,exports){ +'use strict'; + +function normalizeElement (element, errorMessage) { + errorMessage = errorMessage || '[' + element + '] is not a valid DOM Element'; + + if (element && element.nodeType && element.nodeType === 1) { + return element; + } + if (element && window.jQuery && (element instanceof jQuery || 'jquery' in Object(element)) && element.length !== 0) { + return element[0]; + } + + if (typeof element === 'string' && document.getElementById(element)) { + return document.getElementById(element); + } + + throw new Error(errorMessage); +} + +module.exports = { + normalizeElement: normalizeElement +}; + +},{}],23:[function(require,module,exports){ +'use strict'; + +function addEventListener(element, type, listener, useCapture) { + if (element.addEventListener) { + element.addEventListener(type, listener, useCapture); + } else if (element.attachEvent) { + element.attachEvent('on' + type, listener); + } +} + +function removeEventListener(element, type, listener, useCapture) { + if (element.removeEventListener) { + element.removeEventListener(type, listener, useCapture); + } else if (element.detachEvent) { + element.detachEvent('on' + type, listener); + } +} + +module.exports = { + addEventListener: addEventListener, + removeEventListener: removeEventListener +}; + +},{}],24:[function(require,module,exports){ +'use strict'; + +var toString = Object.prototype.toString; + +function isFunction(func) { + return toString.call(func) === '[object Function]'; +} + +function bind(func, context) { + return function () { + func.apply(context, arguments); + }; +} + +module.exports = { + bind: bind, + isFunction: isFunction +}; + +},{}],25:[function(require,module,exports){ +'use strict'; + +function isBrowserHttps() { + return window.location.protocol === 'https:'; +} + +function encode(str) { + switch (str) { + case null: + case undefined: + return ''; + case true: + return '1'; + case false: + return '0'; + default: + return encodeURIComponent(str); + } +} + +function makeQueryString(params, namespace) { + var query = [], k, p; + for (p in params) { + if (params.hasOwnProperty(p)) { + var v = params[p]; + if (namespace) { + k = namespace + '[' + p + ']'; + } else { + k = p; + } + if (typeof v === 'object') { + query.push(makeQueryString(v, k)); + } else if (v !== undefined && v !== null) { + query.push(encode(k) + '=' + encode(v)); + } + } + } + return query.join('&'); +} + +function decodeQueryString(queryString) { + var params = {}, + paramPairs = queryString.split('&'); + + for (var i = 0; i < paramPairs.length; i++) { + var paramPair = paramPairs[i].split('='); + var key = paramPair[0]; + var value = decodeURIComponent(paramPair[1]); + params[key] = value; + } + + return params; +} + +function getParams(url) { + var urlSegments = url.split('?'); + + if (urlSegments.length !== 2) { + return {}; + } + + return decodeQueryString(urlSegments[1]); +} + +module.exports = { + isBrowserHttps: isBrowserHttps, + makeQueryString: makeQueryString, + decodeQueryString: decodeQueryString, + getParams: getParams +}; + +},{}],26:[function(require,module,exports){ +var dom = require('./lib/dom'); +var url = require('./lib/url'); +var fn = require('./lib/fn'); +var events = require('./lib/events'); + +module.exports = { + normalizeElement: dom.normalizeElement, + isBrowserHttps: url.isBrowserHttps, + makeQueryString: url.makeQueryString, + decodeQueryString: url.decodeQueryString, + getParams: url.getParams, + removeEventListener: events.removeEventListener, + addEventListener: events.addEventListener, + bind: fn.bind, + isFunction: fn.isFunction +}; + +},{"./lib/dom":22,"./lib/events":23,"./lib/fn":24,"./lib/url":25}],27:[function(require,module,exports){ +'use strict'; + +var utils = require('braintree-utilities'); +var Receiver = require('../shared/receiver'); +var version = "1.3.0"; + +var htmlNode, bodyNode; + +function getElementStyle(element, style) { + var computedStyle = window.getComputedStyle ? getComputedStyle(element) : element.currentStyle; + + return computedStyle[style]; +} + +function getMerchantPageDefaultStyles() { + return { + html: { + height: htmlNode.style.height || '', + overflow: getElementStyle(htmlNode, 'overflow'), + position: getElementStyle(htmlNode, 'position') + }, + body: { + height: bodyNode.style.height || '', + overflow: getElementStyle(bodyNode, 'overflow') + } + }; +} + +function AuthenticationService (assetsUrl, container) { + this.assetsUrl = assetsUrl; + this.container = container || document.body; + this.iframe = null; + + htmlNode = document.documentElement; + bodyNode = document.body; + this.merchantPageDefaultStyles = getMerchantPageDefaultStyles(); +} + +AuthenticationService.prototype.get = function (response, callback) { + var self = this, + url = this.constructAuthorizationURL(response); + + if (this.container && utils.isFunction(this.container)) { + this.container(url + '&no_style=1'); + } else { + this.insertIframe(url); + } + + new Receiver(function (response) { + if (!utils.isFunction(self.container)) { + self.removeIframe(); + } + callback(response); + }); +}; + +AuthenticationService.prototype.removeIframe = function () { + if (this.container && this.container.nodeType && this.container.nodeType === 1) { + this.container.removeChild(this.iframe); + } else if (this.container && window.jQuery && this.container instanceof jQuery) { + $(this.iframe, this.container).remove(); + } else if (typeof this.container === 'string') { + document.getElementById(this.container).removeChild(this.iframe); + } + + this.unlockMerchantWindowSize(); +}; + +AuthenticationService.prototype.insertIframe = function (url) { + // TODO: Security - This takes a url and makes an iframe. Doesn't seem like this would be a problem. + var iframe = document.createElement('iframe'); + iframe.src = url; + this.applyStyles(iframe); + this.lockMerchantWindowSize(); + + if (this.container && this.container.nodeType && this.container.nodeType === 1) { + this.container.appendChild(iframe); + } else if (this.container && window.jQuery && this.container instanceof jQuery && this.container.length !== 0) { + this.container.append(iframe); + } else if (typeof this.container === 'string' && document.getElementById(this.container)) { + document.getElementById(this.container).appendChild(iframe); + } else { + throw new Error('Unable to find valid container for iframe.'); + } + this.iframe = iframe; +}; + +AuthenticationService.prototype.applyStyles = function (iframe) { + iframe.style.position = 'fixed'; + iframe.style.top = '0'; + iframe.style.left = '0'; + iframe.style.height = '100%'; + iframe.style.width = '100%'; + iframe.setAttribute('frameborder', '0'); + iframe.setAttribute('allowTransparency', 'true'); + iframe.style.border = '0'; + iframe.style.zIndex = '99999'; +}; + +AuthenticationService.prototype.lockMerchantWindowSize = function () { + htmlNode.style.overflow = 'hidden'; + bodyNode.style.overflow = 'hidden'; + bodyNode.style.height = '100%'; +}; + +AuthenticationService.prototype.unlockMerchantWindowSize = function () { + var defaultStyles = this.merchantPageDefaultStyles; + + bodyNode.style.height = defaultStyles.body.height; + bodyNode.style.overflow = defaultStyles.body.overflow; + + htmlNode.style.overflow = defaultStyles.html.overflow; +}; + +AuthenticationService.prototype.constructAuthorizationURL = function (response) { + var queryString, + parentURL = window.location.href; + + if (parentURL.indexOf('#') > -1) { + parentURL = parentURL.split('#')[0]; + } + + queryString = utils.makeQueryString({ + acsUrl: response.acsUrl, + pareq: response.pareq, + termUrl: response.termUrl + '&three_d_secure_version=' + version, + md: response.md, + parentUrl: parentURL + }); + return this.assetsUrl + '/3ds/' + version + '/html/style_frame?' + queryString; +}; + +module.exports = AuthenticationService; + +},{"../shared/receiver":34,"braintree-utilities":26}],28:[function(require,module,exports){ +'use strict'; + +var utils = require('braintree-utilities'); +var AuthenticationService = require('./authorization_service'); +var Loader = require('./loader'); + +function noop() {} + +function Client(api, options) { + options = options || {}; + this.clientToken = options.clientToken; + this.container = options.container; + this.api = api; + this.nonce = null; + + this._loader = null; + this._boundHandleUserClose = utils.bind(this._handleUserClose, this); +} + +Client.prototype.verify = function (data, callback) { + if (!utils.isFunction(callback)) { + this.api.sendAnalyticsEvents('3ds.web.no_callback'); + throw new Error('No suitable callback argument was given'); + } + if (utils.isFunction(data.onUserClose)) { + this._onUserClose = data.onUserClose; + } + if (utils.isFunction(data.onLookupComplete)) { + this._onLookupComplete = data.onLookupComplete; + } + if (data.useDefaultLoader === undefined || data.useDefaultLoader === true) { + this._createDefaultLoader(); + } + + var dataRecord = {nonce: '', amount: data.amount}; + var creditCardMetaData = data.creditCard; + + if (typeof creditCardMetaData === 'string') { + dataRecord.nonce = creditCardMetaData; + this.api.sendAnalyticsEvents('3ds.web.verify.nonce'); + this.startVerification(dataRecord, callback); + } else { + var self = this; + var boundHandleTokenizeCard = function (err, nonce) { + if (err) { + self._removeDefaultLoader(); + + return callback(err); + } + dataRecord.nonce = nonce; + self.startVerification(dataRecord, callback); + }; + this.api.sendAnalyticsEvents('3ds.web.verify.credit_card'); + this.api.tokenizeCard(creditCardMetaData, boundHandleTokenizeCard); + } +}; + +Client.prototype.startVerification = function (data, merchantCallback) { + this.api.lookup3DS(data, utils.bind(this.handleLookupResponse(merchantCallback), this)); +}; + +Client.prototype.handleLookupResponse = function (merchantCallback) { + var self = this; + return function (errorResponse, lookupResponse) { + var authenticationService; + + this._onLookupComplete(); + + if (errorResponse) { + merchantCallback(errorResponse.error); + } else if (lookupResponse.lookup && lookupResponse.lookup.acsUrl && lookupResponse.lookup.acsUrl.length > 0) { + self.nonce = lookupResponse.paymentMethod.nonce; + authenticationService = new AuthenticationService(this.clientToken.assetsUrl, this.container); + authenticationService.get(lookupResponse.lookup, utils.bind(this.handleAuthenticationResponse(merchantCallback), this)); + + this._detachListeners(); + this._attachListeners(); + } else { + self.nonce = lookupResponse.paymentMethod.nonce; + merchantCallback(null, { + nonce: self.nonce, + verificationDetails: lookupResponse.threeDSecureInfo + }); + } + }; +}; + +Client.prototype.handleAuthenticationResponse = function (merchantCallback) { + return function (authResponseQueryString) { + var authResponse, + queryParams = utils.decodeQueryString(authResponseQueryString); + + if (queryParams.user_closed) { + return; + } + + authResponse = JSON.parse(queryParams.auth_response); + + if (authResponse.success) { + merchantCallback(null, { + nonce: authResponse.paymentMethod.nonce, + verificationDetails: authResponse.threeDSecureInfo + }); + } else if (authResponse.threeDSecureInfo && authResponse.threeDSecureInfo.liabilityShiftPossible) { + merchantCallback(null, { + nonce: this.nonce, + verificationDetails: authResponse.threeDSecureInfo + }); + } else { + merchantCallback(authResponse.error); + } + }; +}; + +Client.prototype._attachListeners = function () { + utils.addEventListener(window, 'message', this._boundHandleUserClose); +}; + +Client.prototype._detachListeners = function () { + utils.removeEventListener(window, 'message', this._boundHandleUserClose); +}; + +Client.prototype._createDefaultLoader = function () { + this._loader = new Loader(); + + document.body.appendChild(this._loader.getElement()); +}; + +Client.prototype._removeDefaultLoader = function () { + if (!this._loader) { + return; + } + + var loaderElement = this._loader.getElement(); + var parentElement = loaderElement.parentNode; + + if (parentElement) { + parentElement.removeChild(loaderElement); + } + + this._loader.dispose(); + this._loader = null; +}; + +Client.prototype._handleUserClose = function (event) { + if (event.data === 'user_closed=true') { + this._onUserClose(); + } +}; + +Client.prototype._onUserClose = noop; + +Client.prototype._onLookupComplete = function () { + this._removeDefaultLoader(); +}; + +module.exports = Client; + +},{"./authorization_service":27,"./loader":30,"braintree-utilities":26}],29:[function(require,module,exports){ +'use strict'; + +var Client = require('./client'); + +module.exports = { + create: function (clientToken, options) { + var client = new Client(clientToken, options); + return client; + } +}; + +},{"./client":28}],30:[function(require,module,exports){ +'use strict'; + +var LoaderDisplay = require('./loader_display'); +var LoaderMessage = require('./loader_message'); +var LoaderSpinner = require('./loader_spinner'); + +function Loader() { + this._element = document.createElement('div'); + this._element.style.cssText = this._cssDeclarations; + + this._display = null; + + this._initialize(); +} + +Loader.prototype._cssDeclarations = [ + 'filter:progid:DXImageTransform.Microsoft.Gradient(StartColorStr=#7F000000, EndColorStr=#7F000000)', + 'background-color: rgba(0, 0, 0, 0.5)', + 'display: table', + 'height: 100%', + 'left: 0', + 'position: fixed', + 'right: 0', + 'top: 0', + 'width: 100%', + 'z-index: 99999' +].join(';'); + +Loader.prototype.getElement = function () { + return this._element; +}; + +Loader.prototype.dispose = function () { + this._display.dispose(); + this._display = null; + + this._element = null; +}; + +Loader.prototype._initialize = function () { + var displayObject = new LoaderSpinner(); + var supportsSvgAnimations = (window.SVGElement && window.SVGAnimateElement && + window.SVGAnimateTransformElement); + + if (!(supportsSvgAnimations)) { + displayObject = new LoaderMessage('Loading...'); + } + + this._display = new LoaderDisplay(displayObject); + this.getElement().appendChild(this._display.getElement()); +}; + +module.exports = Loader; + +},{"./loader_display":31,"./loader_message":32,"./loader_spinner":33}],31:[function(require,module,exports){ +'use strict'; + +function LoaderDisplay(displayObject) { + this._element = document.createElement('div'); + this._element.style.cssText = this._cssDeclarations; + + this._displayObject = displayObject; + + this._initialize(); +} + +LoaderDisplay.prototype._cssDeclarations = [ + 'display: table-cell', + 'vertical-align: middle' +].join(';'); + +LoaderDisplay.prototype.getElement = function () { + return this._element; +}; + +LoaderDisplay.prototype.dispose = function () { + this._displayObject.dispose(); + this._displayObject = null; + + this._element = null; +}; + +LoaderDisplay.prototype._initialize = function () { + this.getElement().appendChild(this._displayObject.getElement()); +}; + +module.exports = LoaderDisplay; + +},{}],32:[function(require,module,exports){ +'use strict'; + +function LoaderMessage(text) { + this._element = document.createElement('div'); + this._element.style.cssText = this._cssDeclarations; + this._element.innerHTML = text; +} + +LoaderMessage.prototype._cssDeclarations = [ + 'color: #fff', + 'font-family: Helvetica, sans-serif', + 'font-size: 12px', + 'text-align: center' +].join(';'); + +LoaderMessage.prototype.getElement = function () { + return this._element; +}; + +LoaderMessage.prototype.dispose = function () { + this._element = null; +}; + +module.exports = LoaderMessage; + +},{}],33:[function(require,module,exports){ +'use strict'; + +function LoaderSpinner() { + this._element = document.createElement('div'); + this._element.style.cssText = this._cssDeclarations; + this._element.innerHTML = this._markup; +} + +LoaderSpinner.prototype._cssDeclarations = [ + 'height: 36px', + 'margin-left: auto', + 'margin-right: auto', + 'width: 36px' +].join(';'); + +LoaderSpinner.prototype._markup = [ + '', + ' ', + ' ', + ' ', + '' +].join(''); + +LoaderSpinner.prototype.getElement = function () { + return this._element; +}; + +LoaderSpinner.prototype.dispose = function () { + this._element = null; +}; + +module.exports = LoaderSpinner; + +},{}],34:[function(require,module,exports){ +'use strict'; + +var utils = require('braintree-utilities'); + +function Receiver (callback) { + this.postMessageReceiver(callback); + this.hashChangeReceiver(callback); +} + +Receiver.prototype.postMessageReceiver = function (callback) { + var self = this; + + this.wrappedCallback = function (event) { + var data = event.data; + + if (/^(auth_response=)/.test(data) || data === 'user_closed=true') { + callback(data); + self.stopListening(); + } + }; + + utils.addEventListener(window, 'message', this.wrappedCallback); +}; + +Receiver.prototype.hashChangeReceiver = function (callback) { + var hash, + originalHash = window.location.hash, + self = this; + + this.poll = setInterval(function () { + hash = window.location.hash; + + if (hash.length > 0 && (hash !== originalHash)) { + self.stopListening(); + + hash = hash.substring(1, hash.length); + callback(hash); + + if (originalHash.length > 0) { + window.location.hash = originalHash; + } else { + window.location.hash = ''; + } + } + }, 10); +}; + +Receiver.prototype.stopListening = function () { + clearTimeout(this.poll); + + utils.removeEventListener(window, 'message', this.wrappedCallback); +}; + +module.exports = Receiver; + +},{"braintree-utilities":26}],35:[function(require,module,exports){ +'use strict'; + +var nativeIndexOf = Array.prototype.indexOf; + +var indexOf; +if (nativeIndexOf) { + indexOf = function (haystack, needle) { + return haystack.indexOf(needle); + }; +} else { + indexOf = function indexOf(haystack, needle) { + for (var i = 0, len = haystack.length; i < len; i++) { + if (haystack[i] === needle) { + return i; + } + } + return -1; + }; +} + +module.exports = { + indexOf: indexOf +}; + +},{}],36:[function(require,module,exports){ +'use strict'; + +function _escape(string) { + var i, hex; + var escaped = ''; + + for (i = 0; i < string.length; i++) { + escaped += '%'; + hex = string[i].charCodeAt(0).toString(16).toUpperCase(); + + if (hex.length < 2) { + escaped += '0'; + } + + escaped += hex; + } + + return escaped; +} + +function decodeUtf8(b64) { + return decodeURIComponent(_escape(atob(b64))); +} + +module.exports = { + decodeUtf8: decodeUtf8 +}; + +},{}],37:[function(require,module,exports){ +arguments[4][22][0].apply(exports,arguments) +},{"dup":22}],38:[function(require,module,exports){ +'use strict'; + +function addEventListener(element, type, listener, useCapture) { + if (element.addEventListener) { + element.addEventListener(type, listener, useCapture || false); + } else if (element.attachEvent) { + element.attachEvent('on' + type, listener); + } +} + +function removeEventListener(element, type, listener, useCapture) { + if (element.removeEventListener) { + element.removeEventListener(type, listener, useCapture || false); + } else if (element.detachEvent) { + element.detachEvent('on' + type, listener); + } +} + +function preventDefault(event) { + if (event.preventDefault) { + event.preventDefault(); + } else { + event.returnValue = false; + } +} + +module.exports = { + addEventListener: addEventListener, + removeEventListener: removeEventListener, + preventDefault: preventDefault +}; + +},{}],39:[function(require,module,exports){ +'use strict'; + +var toString = Object.prototype.toString; + +function isFunction(func) { + return toString.call(func) === '[object Function]'; +} + +function bind(func, context) { + return function () { + return func.apply(context, arguments); + }; +} + +module.exports = { + bind: bind, + isFunction: isFunction +}; + +},{}],40:[function(require,module,exports){ +'use strict'; + +function getMaxCharLength(width) { + var max, i, range, len; + var ranges = [ + { min: 0, max: 180, chars: 7 }, + { min: 181, max: 620, chars: 14 }, + { min: 621, max: 960, chars: 22 } + ]; + + len = ranges.length; + + width = width || window.innerWidth; + + for (i = 0; i < len; i++) { + range = ranges[i]; + + if (width >= range.min && width <= range.max) { + max = range.chars; + } + } + + return max || 60; +} + +function truncateEmail(email, maxLength) { + var address, domain; + + if (email.indexOf('@') === -1) { + return email; + } + + email = email.split('@'); + address = email[0]; + domain = email[1]; + + if (address.length > maxLength) { + address = address.slice(0, maxLength) + '...'; + } + + if (domain.length > maxLength) { + domain = '...' + domain.slice(-maxLength); + } + + return address + '@' + domain; +} + +module.exports = { + truncateEmail: truncateEmail, + getMaxCharLength: getMaxCharLength +}; + +},{}],41:[function(require,module,exports){ +'use strict'; + +var array = require('./array'); + +function isBrowserHttps() { + return window.location.protocol === 'https:'; +} + +function encode(str) { + switch (str) { + case null: + case undefined: + return ''; + case true: + return '1'; + case false: + return '0'; + default: + return encodeURIComponent(str); + } +} + +function makeQueryString(params, namespace) { + var query = [], k, p; + for (p in params) { + if (params.hasOwnProperty(p)) { + var v = params[p]; + if (namespace) { + k = namespace + '[' + p + ']'; + } else { + k = p; + } + if (typeof v === 'object') { + query.push(makeQueryString(v, k)); + } else if (v !== undefined && v !== null) { + query.push(encode(k) + '=' + encode(v)); + } + } + } + return query.join('&'); +} + +function decodeQueryString(queryString) { + var params = {}, + paramPairs = queryString.split('&'); + + for (var i = 0; i < paramPairs.length; i++) { + var paramPair = paramPairs[i].split('='); + var key = paramPair[0]; + var value = decodeURIComponent(paramPair[1]); + params[key] = value; + } + + return params; +} + +function getParams(url) { + var urlSegments = url.split('?'); + + if (urlSegments.length !== 2) { + return {}; + } + + return decodeQueryString(urlSegments[1]); +} + +var parser = document.createElement('a'); +var legalHosts = [ + 'paypal.com', + 'braintreepayments.com', + 'braintreegateway.com', + 'localhost' +]; + +function isWhitelistedDomain(url) { + url = url.toLowerCase(); + + if (!/^http/.test(url)) { + return false; + } + + parser.href = url; + + var pieces = parser.hostname.split('.'); + var topLevelDomain = pieces.slice(-2).join('.'); + + if (array.indexOf(legalHosts, topLevelDomain) === -1) { + return false; + } + + return true; +} + +module.exports = { + isBrowserHttps: isBrowserHttps, + makeQueryString: makeQueryString, + decodeQueryString: decodeQueryString, + getParams: getParams, + isWhitelistedDomain: isWhitelistedDomain +}; + +},{"./array":35}],42:[function(require,module,exports){ +'use strict'; + +// RFC 4122 v4 (pseudo-random) UUID +function generate() { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { + var r = Math.random() * 16 | 0; + var v = c === 'x' ? r : r & 0x3 | 0x8; + return v.toString(16); + }); +} + +module.exports = generate; + +},{}],43:[function(require,module,exports){ +var dom = require('./lib/dom'); +var url = require('./lib/url'); +var fn = require('./lib/fn'); +var events = require('./lib/events'); +var string = require('./lib/string'); +var array = require('./lib/array'); +var base64 = require('./lib/base64'); +var uuid = require('./lib/uuid'); + +module.exports = { + string: string, + array: array, + normalizeElement: dom.normalizeElement, + isBrowserHttps: url.isBrowserHttps, + makeQueryString: url.makeQueryString, + decodeQueryString: url.decodeQueryString, + getParams: url.getParams, + isWhitelistedDomain: url.isWhitelistedDomain, + removeEventListener: events.removeEventListener, + addEventListener: events.addEventListener, + preventDefault: events.preventDefault, + bind: fn.bind, + isFunction: fn.isFunction, + base64ToUtf8: base64.decodeUtf8, + uuid: uuid +}; + +},{"./lib/array":35,"./lib/base64":36,"./lib/dom":37,"./lib/events":38,"./lib/fn":39,"./lib/string":40,"./lib/url":41,"./lib/uuid":42}],44:[function(require,module,exports){ +/** + * lodash 3.0.4 (Custom Build) + * Build: `lodash modern modularize exports="npm" -o ./` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ +var isArguments = require('lodash.isarguments'), + isArray = require('lodash.isarray'), + isFunction = require('lodash.isfunction'), + isString = require('lodash.isstring'), + keys = require('lodash.keys'); + +/** + * Checks if `value` is object-like. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +/** + * Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer) + * of an array-like value. + */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +/** + * Gets the "length" property value of `object`. + * + * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792) + * that affects Safari on at least iOS 8.1-8.3 ARM64. + * + * @private + * @param {Object} object The object to query. + * @returns {*} Returns the "length" value. + */ +var getLength = baseProperty('length'); + +/** + * Checks if `value` is array-like. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + */ +function isArrayLike(value) { + return value != null && isLength(getLength(value)); +} + +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength). + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + */ +function isLength(value) { + return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +} + +/** + * Checks if `value` is empty. A value is considered empty unless it is an + * `arguments` object, array, string, or jQuery-like collection with a length + * greater than `0` or an object with own enumerable properties. + * + * @static + * @memberOf _ + * @category Lang + * @param {Array|Object|string} value The value to inspect. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false + */ +function isEmpty(value) { + if (value == null) { + return true; + } + if (isArrayLike(value) && (isArray(value) || isString(value) || isArguments(value) || + (isObjectLike(value) && isFunction(value.splice)))) { + return !value.length; + } + return !keys(value).length; +} + +module.exports = isEmpty; + +},{"lodash.isarguments":45,"lodash.isarray":46,"lodash.isfunction":47,"lodash.isstring":51,"lodash.keys":48}],45:[function(require,module,exports){ +/** + * lodash 3.0.4 (Custom Build) + * Build: `lodash modern modularize exports="npm" -o ./` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ + +/** + * Checks if `value` is object-like. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Native method references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/** + * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer) + * of an array-like value. + */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +/** + * Gets the "length" property value of `object`. + * + * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792) + * that affects Safari on at least iOS 8.1-8.3 ARM64. + * + * @private + * @param {Object} object The object to query. + * @returns {*} Returns the "length" value. + */ +var getLength = baseProperty('length'); + +/** + * Checks if `value` is array-like. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + */ +function isArrayLike(value) { + return value != null && isLength(getLength(value)); +} + +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength). + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + */ +function isLength(value) { + return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +} + +/** + * Checks if `value` is classified as an `arguments` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ +function isArguments(value) { + return isObjectLike(value) && isArrayLike(value) && + hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee'); +} + +module.exports = isArguments; + +},{}],46:[function(require,module,exports){ +/** + * lodash 3.0.4 (Custom Build) + * Build: `lodash modern modularize exports="npm" -o ./` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ + +/** `Object#toString` result references. */ +var arrayTag = '[object Array]', + funcTag = '[object Function]'; + +/** Used to detect host constructors (Safari > 5). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** + * Checks if `value` is object-like. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var fnToString = Function.prototype.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objToString = objectProto.toString; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + fnToString.call(hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeIsArray = getNative(Array, 'isArray'); + +/** + * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer) + * of an array-like value. + */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = object == null ? undefined : object[key]; + return isNative(value) ? value : undefined; +} + +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength). + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + */ +function isLength(value) { + return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +} + +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(function() { return arguments; }()); + * // => false + */ +var isArray = nativeIsArray || function(value) { + return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag; +}; + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in older versions of Chrome and Safari which return 'function' for regexes + // and Safari 8 equivalents which return 'object' for typed array constructors. + return isObject(value) && objToString.call(value) == funcTag; +} + +/** + * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. + * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(1); + * // => false + */ +function isObject(value) { + // Avoid a V8 JIT bug in Chrome 19-20. + // See https://code.google.com/p/v8/issues/detail?id=2291 for more details. + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} + +/** + * Checks if `value` is a native function. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, else `false`. + * @example + * + * _.isNative(Array.prototype.push); + * // => true + * + * _.isNative(_); + * // => false + */ +function isNative(value) { + if (value == null) { + return false; + } + if (isFunction(value)) { + return reIsNative.test(fnToString.call(value)); + } + return isObjectLike(value) && reIsHostCtor.test(value); +} + +module.exports = isArray; + +},{}],47:[function(require,module,exports){ +/** + * lodash 3.0.6 (Custom Build) + * Build: `lodash modern modularize exports="npm" -o ./` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ + +/** `Object#toString` result references. */ +var funcTag = '[object Function]'; + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objToString = objectProto.toString; + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in older versions of Chrome and Safari which return 'function' for regexes + // and Safari 8 equivalents which return 'object' for typed array constructors. + return isObject(value) && objToString.call(value) == funcTag; +} + +/** + * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. + * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(1); + * // => false + */ +function isObject(value) { + // Avoid a V8 JIT bug in Chrome 19-20. + // See https://code.google.com/p/v8/issues/detail?id=2291 for more details. + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} + +module.exports = isFunction; + +},{}],48:[function(require,module,exports){ +/** + * lodash 3.1.2 (Custom Build) + * Build: `lodash modern modularize exports="npm" -o ./` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ +var getNative = require('lodash._getnative'), + isArguments = require('lodash.isarguments'), + isArray = require('lodash.isarray'); + +/** Used to detect unsigned integer values. */ +var reIsUint = /^\d+$/; + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeKeys = getNative(Object, 'keys'); + +/** + * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer) + * of an array-like value. + */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +/** + * Gets the "length" property value of `object`. + * + * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792) + * that affects Safari on at least iOS 8.1-8.3 ARM64. + * + * @private + * @param {Object} object The object to query. + * @returns {*} Returns the "length" value. + */ +var getLength = baseProperty('length'); + +/** + * Checks if `value` is array-like. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + */ +function isArrayLike(value) { + return value != null && isLength(getLength(value)); +} + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1; + length = length == null ? MAX_SAFE_INTEGER : length; + return value > -1 && value % 1 == 0 && value < length; +} + +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength). + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + */ +function isLength(value) { + return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +} + +/** + * A fallback implementation of `Object.keys` which creates an array of the + * own enumerable property names of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function shimKeys(object) { + var props = keysIn(object), + propsLength = props.length, + length = propsLength && object.length; + + var allowIndexes = !!length && isLength(length) && + (isArray(object) || isArguments(object)); + + var index = -1, + result = []; + + while (++index < propsLength) { + var key = props[index]; + if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) { + result.push(key); + } + } + return result; +} + +/** + * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. + * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(1); + * // => false + */ +function isObject(value) { + // Avoid a V8 JIT bug in Chrome 19-20. + // See https://code.google.com/p/v8/issues/detail?id=2291 for more details. + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys) + * for more details. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +var keys = !nativeKeys ? shimKeys : function(object) { + var Ctor = object == null ? undefined : object.constructor; + if ((typeof Ctor == 'function' && Ctor.prototype === object) || + (typeof object != 'function' && isArrayLike(object))) { + return shimKeys(object); + } + return isObject(object) ? nativeKeys(object) : []; +}; + +/** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ +function keysIn(object) { + if (object == null) { + return []; + } + if (!isObject(object)) { + object = Object(object); + } + var length = object.length; + length = (length && isLength(length) && + (isArray(object) || isArguments(object)) && length) || 0; + + var Ctor = object.constructor, + index = -1, + isProto = typeof Ctor == 'function' && Ctor.prototype === object, + result = Array(length), + skipIndexes = length > 0; + + while (++index < length) { + result[index] = (index + ''); + } + for (var key in object) { + if (!(skipIndexes && isIndex(key, length)) && + !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; +} + +module.exports = keys; + +},{"lodash._getnative":49,"lodash.isarguments":45,"lodash.isarray":46}],49:[function(require,module,exports){ +/** + * lodash 3.9.1 (Custom Build) + * Build: `lodash modern modularize exports="npm" -o ./` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ + +/** `Object#toString` result references. */ +var funcTag = '[object Function]'; + +/** Used to detect host constructors (Safari > 5). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** + * Checks if `value` is object-like. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var fnToString = Function.prototype.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objToString = objectProto.toString; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + fnToString.call(hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = object == null ? undefined : object[key]; + return isNative(value) ? value : undefined; +} + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in older versions of Chrome and Safari which return 'function' for regexes + // and Safari 8 equivalents which return 'object' for typed array constructors. + return isObject(value) && objToString.call(value) == funcTag; +} + +/** + * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. + * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(1); + * // => false + */ +function isObject(value) { + // Avoid a V8 JIT bug in Chrome 19-20. + // See https://code.google.com/p/v8/issues/detail?id=2291 for more details. + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} + +/** + * Checks if `value` is a native function. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, else `false`. + * @example + * + * _.isNative(Array.prototype.push); + * // => true + * + * _.isNative(_); + * // => false + */ +function isNative(value) { + if (value == null) { + return false; + } + if (isFunction(value)) { + return reIsNative.test(fnToString.call(value)); + } + return isObjectLike(value) && reIsHostCtor.test(value); +} + +module.exports = getNative; + +},{}],50:[function(require,module,exports){ +/** + * lodash 3.0.2 (Custom Build) + * Build: `lodash modern modularize exports="npm" -o ./` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ + +/** + * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. + * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(1); + * // => false + */ +function isObject(value) { + // Avoid a V8 JIT bug in Chrome 19-20. + // See https://code.google.com/p/v8/issues/detail?id=2291 for more details. + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} + +module.exports = isObject; + +},{}],51:[function(require,module,exports){ +/** + * lodash 3.0.1 (Custom Build) + * Build: `lodash modern modularize exports="npm" -o ./` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.8.2 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** + * Checks if `value` is object-like. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.prototype.tostring) + * of values. + */ +var objToString = objectProto.toString; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag); +} + +module.exports = isString; + +},{}],52:[function(require,module,exports){ +'use strict'; + +var bus = require('framebus'); +var events = require('./lib/events'); +var checkOrigin = require('./lib/check-origin').checkOrigin; + +function BraintreeBus(options) { + options = options || {}; + + this.channel = options.channel; + if (!this.channel) { + throw new Error('Channel ID must be specified'); + } + + this.merchantUrl = options.merchantUrl; + + this._isDestroyed = false; + this._isVerbose = false; + + this._listeners = []; + + this._log('new bus on channel ' + this.channel, [location.href]); +} + +BraintreeBus.prototype.on = function (eventName, originalHandler) { + var namespacedEvent, args; + var handler = originalHandler; + var self = this; + + if (this._isDestroyed) { return; } + + if (this.merchantUrl) { + handler = function () { + if (checkOrigin(this.origin, self.merchantUrl)) { + originalHandler.apply(this, arguments); + } + }; + } + + namespacedEvent = this._namespaceEvent(eventName); + args = Array.prototype.slice.call(arguments); + args[0] = namespacedEvent; + args[1] = handler; + + this._log('on', args); + bus.on.apply(bus, args); + + this._listeners.push({ + eventName: eventName, + handler: handler, + originalHandler: originalHandler + }); +}; + +BraintreeBus.prototype.emit = function (eventName, payload, reply) { + var args; + + if (this._isDestroyed) { return; } + + args = Array.prototype.slice.call(arguments); + args[0] = this._namespaceEvent(eventName); + + this._log('emit', args); + bus.emit.apply(bus, args); +}; + +BraintreeBus.prototype._offDirect = function (eventName, handler) { + var args = Array.prototype.slice.call(arguments); + + if (this._isDestroyed) { return; } + + args[0] = this._namespaceEvent(eventName); + + this._log('off', args); + bus.off.apply(bus, args); +}; + +BraintreeBus.prototype.off = function (eventName, originalHandler) { + var i, listener; + var handler = originalHandler; + + if (this._isDestroyed) { return; } + + if (this.merchantUrl) { + for (i = 0; i < this._listeners.length; i++) { + listener = this._listeners[i]; + + if (listener.originalHandler === originalHandler) { + handler = listener.handler; + } + } + } + + this._offDirect.call(this, eventName, handler); +}; + +BraintreeBus.prototype._namespaceEvent = function (eventName) { + return ['braintree', this.channel, eventName].join(':'); +}; + +BraintreeBus.prototype.teardown = function () { + var listener, i; + + for (i = 0; i < this._listeners.length; i++) { + listener = this._listeners[i]; + this._offDirect(listener.eventName, listener.handler); + } + + this._listeners.length = 0; + + this._isDestroyed = true; +}; + +BraintreeBus.prototype._log = function (functionName, args) { + if (this._isVerbose) { + console.log(functionName, args); + } +}; + +BraintreeBus.events = events; + +module.exports = BraintreeBus; + +},{"./lib/check-origin":53,"./lib/events":54,"framebus":55}],53:[function(require,module,exports){ +'use strict'; + +var BT_ORIGIN_REGEX = /^https:\/\/([a-zA-Z0-9-]+\.)*(braintreepayments|braintreegateway|paypal)\.com(:\d{1,5})?$/; + +function checkOrigin(postMessageOrigin, merchantUrl) { + var merchantOrigin; + var merchantHost; + var a = document.createElement('a'); + + a.href = merchantUrl; + + if (a.protocol === 'https:') { + merchantHost = a.host.replace(/:443$/, ''); + } else if (a.protocol === 'http:') { + merchantHost = a.host.replace(/:80$/, ''); + } else { + merchantHost = a.host; + } + + merchantOrigin = a.protocol + '//' + merchantHost; + + return merchantOrigin === postMessageOrigin || BT_ORIGIN_REGEX.test(postMessageOrigin); +} + +module.exports = { + checkOrigin: checkOrigin +}; + +},{}],54:[function(require,module,exports){ +'use strict'; + +var eventList = [ + 'PAYMENT_METHOD_REQUEST', + 'PAYMENT_METHOD_RECEIVED', + 'PAYMENT_METHOD_GENERATED', + 'PAYMENT_METHOD_NOT_GENERATED', + 'PAYMENT_METHOD_CANCELLED', + 'PAYMENT_METHOD_ERROR', + 'CONFIGURATION_REQUEST', + 'ROOT_METADATA_REQUEST', + 'ERROR', + 'WARNING', + 'UI_POPUP_DID_OPEN', + 'UI_POPUP_DID_CLOSE', + 'UI_POPUP_FORCE_CLOSE', + 'ASYNC_DEPENDENCY_INITIALIZING', + 'ASYNC_DEPENDENCY_READY', + 'USER_FORM_SUBMIT_REQUEST', + 'SEND_ANALYTICS_EVENTS' +]; +var eventEnum = {}; + +for (var i = 0; i < eventList.length; i++) { + var evnt = eventList[i]; + eventEnum[evnt] = evnt; +} + +module.exports = eventEnum; + +},{}],55:[function(require,module,exports){ +'use strict'; +(function (root, factory) { + if (typeof exports === 'object' && typeof module !== 'undefined') { + module.exports = factory(); + } else if (typeof define === 'function' && define.amd) { + define([], factory); + } else { + root.framebus = factory(); + } +})(this, function () { + var win, framebus; + var popups = []; + var subscribers = {}; + var prefix = '/*framebus*/'; + + function include(popup) { + if (popup == null) { return false; } + if (popup.Window == null) { return false; } + if (popup.constructor !== popup.Window) { return false; } + + popups.push(popup); + return true; + } + + function target(origin) { + var key; + var targetedFramebus = {}; + + for (key in framebus) { + if (!framebus.hasOwnProperty(key)) { continue; } + + targetedFramebus[key] = framebus[key]; + } + + targetedFramebus._origin = origin || '*'; + + return targetedFramebus; + } + + function publish(event) { + var payload, args; + var origin = _getOrigin(this); + + if (_isntString(event)) { return false; } + if (_isntString(origin)) { return false; } + + args = Array.prototype.slice.call(arguments, 1); + + payload = _packagePayload(event, args, origin); + if (payload === false) { return false; } + + _broadcast(win.top, payload, origin); + + return true; + } + + function subscribe(event, fn) { + var origin = _getOrigin(this); + + if (_subscriptionArgsInvalid(event, fn, origin)) { return false; } + + subscribers[origin] = subscribers[origin] || {}; + subscribers[origin][event] = subscribers[origin][event] || []; + subscribers[origin][event].push(fn); + + return true; + } + + function unsubscribe(event, fn) { + var i, subscriberList; + var origin = _getOrigin(this); + + if (_subscriptionArgsInvalid(event, fn, origin)) { return false; } + + subscriberList = subscribers[origin] && subscribers[origin][event]; + if (!subscriberList) { return false; } + + for (i = 0; i < subscriberList.length; i++) { + if (subscriberList[i] === fn) { + subscriberList.splice(i, 1); + return true; + } + } + + return false; + } + + function _getOrigin(scope) { + return scope && scope._origin || '*'; + } + + function _isntString(string) { + return typeof string !== 'string'; + } + + function _packagePayload(event, args, origin) { + var packaged = false; + var payload = { + event: event, + origin: origin + }; + var reply = args[args.length - 1]; + + if (typeof reply === 'function') { + payload.reply = _subscribeReplier(reply, origin); + args = args.slice(0, -1); + } + + payload.args = args; + + try { + packaged = prefix + JSON.stringify(payload); + } catch (e) { + throw new Error('Could not stringify event: ' + e.message); + } + return packaged; + } + + function _unpackPayload(e) { + var payload, replyOrigin, replySource, replyEvent; + + if (e.data.slice(0, prefix.length) !== prefix) { return false; } + + try { + payload = JSON.parse(e.data.slice(prefix.length)); + } catch (err) { + return false; + } + + if (payload.reply != null) { + replyOrigin = e.origin; + replySource = e.source; + replyEvent = payload.reply; + + payload.reply = function reply(data) { + var replyPayload = _packagePayload(replyEvent, [data], replyOrigin); + if (replyPayload === false) { return false; } + + replySource.postMessage(replyPayload, replyOrigin); + }; + + payload.args.push(payload.reply); + } + + return payload; + } + + function _attach(w) { + if (win) { return; } + win = w || window; + + if (win.addEventListener) { + win.addEventListener('message', _onmessage, false); + } else if (win.attachEvent) { + win.attachEvent('onmessage', _onmessage); + } else if (win.onmessage === null) { + win.onmessage = _onmessage; + } else { + win = null; + } + } + + function _uuid() { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { + var r = Math.random() * 16 | 0; + var v = c === 'x' ? r : r & 0x3 | 0x8; + return v.toString(16); + }); + } + + function _onmessage(e) { + var payload; + if (_isntString(e.data)) { return; } + + payload = _unpackPayload(e); + if (!payload) { return; } + + _dispatch('*', payload.event, payload.args, e); + _dispatch(e.origin, payload.event, payload.args, e); + _broadcastPopups(e.data, payload.origin, e.source); + } + + function _dispatch(origin, event, args, e) { + var i; + if (!subscribers[origin]) { return; } + if (!subscribers[origin][event]) { return; } + + for (i = 0; i < subscribers[origin][event].length; i++) { + subscribers[origin][event][i].apply(e, args); + } + } + + function _broadcast(frame, payload, origin) { + var i; + + try { + frame.postMessage(payload, origin); + } catch (_) { return; } + + if (frame.opener && !frame.opener.closed && frame.opener !== win) { + _broadcast(frame.opener.top, payload, origin); + } + + for (i = 0; i < frame.frames.length; i++) { + _broadcast(frame.frames[i], payload, origin); + } + } + + function _broadcastPopups(payload, origin, source) { + var i, popup; + + for (i = popups.length - 1; i >= 0; i--) { + popup = popups[i]; + + if (popup.closed === true) { + popups = popups.slice(i, 1); + } else if (source !== popup) { + _broadcast(popup.top, payload, origin); + } + } + } + + function _subscribeReplier(fn, origin) { + var uuid = _uuid(); + + function replier(d, o) { + fn(d, o); + framebus.target(origin).unsubscribe(uuid, replier); + } + + framebus.target(origin).subscribe(uuid, replier); + return uuid; + } + + function _subscriptionArgsInvalid(event, fn, origin) { + if (_isntString(event)) { return true; } + if (typeof fn !== 'function') { return true; } + if (_isntString(origin)) { return true; } + + return false; + } + + _attach(); + + framebus = { + target: target, + include: include, + publish: publish, + pub: publish, + trigger: publish, + emit: publish, + subscribe: subscribe, + sub: subscribe, + on: subscribe, + unsubscribe: unsubscribe, + unsub: unsubscribe, + off: unsubscribe + }; + + return framebus; +}); + +},{}],56:[function(require,module,exports){ +'use strict'; + +var Coinbase = require('./lib/coinbase'); + +function create(options) { + return new Coinbase(options); +} + +module.exports = {create: create}; + +},{"./lib/coinbase":59}],57:[function(require,module,exports){ +(function (global){ +'use strict'; + +function iOSSafariVersion(userAgent) { + userAgent = userAgent || global.navigator.userAgent; + if (!/AppleWebKit\//.test(userAgent)) { + return null; + } + if (!/Mobile\//.test(userAgent)) { + return null; + } + + return userAgent.replace(/.* OS ([0-9_]+) like Mac OS X.*/, '$1').replace(/_/g, '.'); +} + +function ieVersion(userAgent) { + userAgent = userAgent || global.navigator.userAgent; + var result = null; + var match = /MSIE.(\d+)/.exec(userAgent); + + if (/Trident/.test(userAgent)) { + result = 11; + } + + if (match) { + result = parseInt(match[1], 10); + } + + return result; +} + +function androidVersion(UA) { + UA = UA || global.navigator.userAgent; + if (!/Android/.test(UA)) { return null; } + + return UA.replace(/^.* Android ([0-9\.]+).*$/,'$1'); +} + +module.exports = { + ieVersion: ieVersion, + iOSSafariVersion: iOSSafariVersion, + androidVersion: androidVersion +}; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],58:[function(require,module,exports){ +'use strict'; + +var busEvents = require('braintree-bus').events; + +function tokenize(err, payload, coinbase) { + if (err) { + // TODO: make payload in line with onError() + coinbase.bus.emit(busEvents.ERROR, err.error); + coinbase._sendAnalyticsEvent('generate.nonce.failed'); + return; + } + + coinbase.bus.emit(busEvents.PAYMENT_METHOD_GENERATED, payload); + coinbase._sendAnalyticsEvent('generate.nonce.succeeded'); +} + +module.exports = {tokenize: tokenize}; + +},{"braintree-bus":67}],59:[function(require,module,exports){ +(function (global){ +'use strict'; + +var utils = require('braintree-utilities'); +var Destructor = require('destructor'); +var DOMComposer = require('./dom/composer'); +var urlComposer = require('./url-composer'); +var callbacks = require('./callbacks'); +var constants = require('./constants'); +var detector = require('./detector'); +var Bus = require('braintree-bus'); + +function _getPopupParams(options) { + return { + clientId: options.configuration.coinbase.clientId, + redirectUrl: options.configuration.coinbase.redirectUrl, + scopes: options.configuration.coinbase.scopes || constants.SCOPES, + meta: { + authorizations_merchant_account: options.configuration.coinbase.merchantAccount || '' + } + }; +} + +function _error(bus) { + return function (message, type) { + bus.emit(Bus.events.ERROR, {type: type, message: message}); + } +} + +function _optionsAreValid(options, bus) { + var cbOptions = (options || {}).coinbase; + var busError = _error(bus); + + if (options.apiClient == null) { + busError('settings.apiClient is required for coinbase', constants.CONFIGURATION_ERROR); + } else if (!options.configuration.coinbaseEnabled) { + busError('Coinbase is not enabled for your merchant account', constants.CONFIGURATION_ERROR); + } else if (!cbOptions || (!cbOptions.container && !cbOptions.button)) { + busError('Either options.coinbase.container or options.coinbase.button is required for Coinbase integrations', constants.CONFIGURATION_ERROR); + } else if (cbOptions.container && cbOptions.button) { + busError('options.coinbase.container and options.coinbase.button are mutually exclusive', constants.CONFIGURATION_ERROR); + } else if (!detector.isSupportedBrowser()) { + busError('Coinbase is not supported by your browser. Please consider upgrading', constants.UNSUPPORTED_BROWSER_ERROR); + } else { + return true; + } + + return false; +} + +function Coinbase(options) { + var context, busOptions; + + this.destructor = new Destructor(); + + this.channel = options.channel; + + busOptions = {channel: this.channel}; + + try { + if (options.coinbase.container) { + busOptions.merchantUrl = global.location.href; + } + } catch (e) {} + + this.bus = options.bus || new Bus(busOptions); + + this.canCreateIntegration = _optionsAreValid(options, this.bus); + if (!this.canCreateIntegration) { + return; + } + + this.buttonId = options.coinbase.button || constants.BUTTON_ID; + this.apiClient = options.apiClient; + this.assetsUrl = options.configuration.assetsUrl; + this.environment = options.configuration.coinbase.environment; + this._onOAuthSuccess = utils.bind(this._onOAuthSuccess, this); + this._handleButtonClick = utils.bind(this._handleButtonClick, this); + this.popupParams = _getPopupParams(options); + this.redirectDoneInterval = null; + + if (options.coinbase.container) { + context = utils.normalizeElement(options.coinbase.container); + this._insertFrame(context); + } else { + global.braintreeCoinbasePopupCallback = this._onOAuthSuccess; + + context = document.body; + utils.addEventListener(context, 'click', this._handleButtonClick); + + this._sendAnalyticsEvent('initialized'); + + this.destructor.registerFunctionForTeardown(utils.bind(function () { + this._closePopup(); + }, this)); + + this.bus.on(constants.TEARDOWN_EVENT, utils.bind(this.destructor.teardown, this.destructor)); + } +} + +Coinbase.prototype._sendAnalyticsEvent = function (eventName) { + var namespace = this.apiClient.integration + '.web.coinbase.'; + this.apiClient.sendAnalyticsEvents(namespace + eventName); +}; + +Coinbase.prototype._insertFrame = function (container) { + var frame = DOMComposer.createFrame({channel: this.channel}); + + this.bus.emit(Bus.events.ASYNC_DEPENDENCY_INITIALIZING); + + container.appendChild(frame); + this.destructor.registerFunctionForTeardown(function () { + container.removeChild(frame); + }); + + // Delayed to make sure browser caches are busted. + setTimeout(utils.bind(function () { + frame.src = this.assetsUrl + '/coinbase/' + constants.VERSION + '/coinbase-frame.html#' + this.channel; + }, this), 0); +}; + +Coinbase.prototype._onOAuthSuccess = function (data) { + if (!data.code) { + this._sendAnalyticsEvent('popup.denied'); + this._closePopup(); + return; + } + + this.bus.emit('coinbase:view:navigate', 'loading'); + this._sendAnalyticsEvent('popup.authorized'); + + this.apiClient.tokenizeCoinbase({ code: data.code, query: urlComposer.getQueryString() }, utils.bind(function (err, payload) { + callbacks.tokenize.apply(null, [err, payload, this]); + }, this)); + + this._closePopup(); +}; + +Coinbase.prototype._clearPollForRedirectDone = function () { + if (this.redirectDoneInterval) { + clearInterval(this.redirectDoneInterval); + this.redirectDoneInterval = null; + } +}; + +Coinbase.prototype._closePopup = function (popup) { + popup = popup || this.popup; + + if (popup == null) { return; } + + if (detector.shouldCloseFromParent()) { + popup.close(); + } + + this._popupCleanup(); +}; + +Coinbase.prototype._popupCleanup = function () { + this._clearPollForRedirectDone(); + this.bus.emit(Bus.events.UI_POPUP_DID_CLOSE, {source: constants.INTEGRATION_NAME}); +}; + +Coinbase.prototype._pollForRedirectDone = function (popup) { + var interval = setInterval(utils.bind(function () { + var code; + + if (popup == null || popup.closed) { + this._sendAnalyticsEvent('popup.aborted'); + this._popupCleanup(); + return; + } + + try { + if (popup.location.href === 'about:blank') { throw new Error('Not finished loading'); } + code = utils.decodeQueryString(popup.location.search.replace(/^\?/, '')).code; + } catch (e) { + return; + } + + this._onOAuthSuccess({ code: code }); + }, this), 100); + + this.redirectDoneInterval = interval; + return interval; +}; + +Coinbase.prototype._openPopup = function () { + var popup; + + this._sendAnalyticsEvent('popup.started'); + + popup = DOMComposer.createPopup(urlComposer.compose(this._getOAuthBaseUrl(), this.popupParams)); + popup.focus(); + + this._pollForRedirectDone(popup); + + this.bus.emit(Bus.events.UI_POPUP_DID_OPEN, {source: constants.INTEGRATION_NAME}); + this.bus.on(Bus.events.UI_POPUP_FORCE_CLOSE, function (payload) { + if (payload.target === constants.INTEGRATION_NAME) { + popup.close(); + } + }); + + this.popup = popup; +}; + +Coinbase.prototype._getOAuthBaseUrl = function () { + var baseUrl; + + if (this.environment === 'shared_sandbox') { + baseUrl = constants.SANDBOX_OAUTH_BASE_URL; + } else { + baseUrl = constants.PRODUCTION_OAUTH_BASE_URL; + } + + return baseUrl; +}; + +Coinbase.prototype._handleButtonClick = function (event) { + var target = event.target || event.srcElement; + + while (true) { + if (target == null) { return; } + if (target === event.currentTarget) { return; } + if (target.id === this.buttonId) { break; } + + target = target.parentNode; + } + + if (event && event.preventDefault) { + event.preventDefault(); + } else { + event.returnValue = false; + } + + this._openPopup(); +}; + +Coinbase.prototype.teardown = function (done) { + var self = this; + + if (!this.canCreateIntegration) { + done(null); + return; + } + + this.bus.emit(constants.TEARDOWN_EVENT, function () { + self.destructor.teardown(function (err) { + if (err) { return done(err); } + + self.bus.teardown(); + done(null); + }); + }); +}; + +module.exports = Coinbase; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"./callbacks":58,"./constants":60,"./detector":61,"./dom/composer":63,"./url-composer":66,"braintree-bus":67,"braintree-utilities":79,"destructor":80}],60:[function(require,module,exports){ +'use strict'; + +module.exports = { + PRODUCTION_OAUTH_BASE_URL: 'https://coinbase.com', + SANDBOX_OAUTH_BASE_URL: 'https://sandbox.coinbase.com', + ORIGIN_URL: 'https://www.coinbase.com', + FRAME_NAME: 'braintree-coinbase-frame', + POPUP_NAME: 'coinbase', + BUTTON_ID: 'bt-coinbase-button', + SCOPES: 'send', + VERSION: "0.3.0", + INTEGRATION_NAME: 'Coinbase', + CONFIGURATION_ERROR: 'CONFIGURATION', + UNSUPPORTED_BROWSER_ERROR: 'UNSUPPORTED_BROWSER', + TEARDOWN_EVENT: 'coinbase:TEARDOWN' +}; + +},{}],61:[function(require,module,exports){ +'use strict'; + +var browser = require('./browser'); + +function isSupportedBrowser() { + var version = browser.ieVersion(); + return !version || (version > 8); +} + +function shouldDisplayLollipopClose() { + var version = browser.androidVersion(); + if (version == null) { return false; } + + return /^5/.test(version); +} + +function shouldCloseFromParent() { + return !(shouldDisplayLollipopClose() || shouldDisplayIOSClose()); +} + +function shouldDisplayIOSClose() { + var version = browser.iOSSafariVersion(); + if (version == null) { return false; } + + return /^8\.0/.test(version) || /^8\.1$/.test(version); +} + +module.exports = { + isSupportedBrowser: isSupportedBrowser, + shouldCloseFromParent: shouldCloseFromParent, + shouldDisplayIOSClose: shouldDisplayIOSClose, + shouldDisplayLollipopClose: shouldDisplayLollipopClose +}; + +},{"./browser":57}],62:[function(require,module,exports){ +'use strict'; + +function createButton(config) { + var button = document.createElement('button'); + + config = config || {}; + + button.id = config.id || 'coinbase-button'; + button.style.backgroundColor = config.backgroundColor || '#EEE'; + button.style.color = config.color || '#4597C3'; + button.style.border = config.border || '0'; + button.style.borderRadius = config.borderRadius || '6px'; + button.style.padding = config.padding || '12px'; + button.innerHTML = config.innerHTML || 'coinbase'; + + return button; +} + +module.exports = { create: createButton }; + +},{}],63:[function(require,module,exports){ +'use strict'; + +var popup = require('./popup'); +var button = require('./button'); +var frame = require('./frame'); + +module.exports = { + createButton: button.create, + createPopup: popup.create, + createFrame: frame.create +}; + +},{"./button":62,"./frame":64,"./popup":65}],64:[function(require,module,exports){ +'use strict'; + +var constants = require('../constants'); +var iframer = require('iframer'); + +function createFrame(config) { + return iframer({ + name: constants.FRAME_NAME, + height: '70px', + width: '100%', + style: { + padding: 0, + margin: 0, + border: 0, + outline: 'none' + } + }); +} + +module.exports = { create: createFrame }; + +},{"../constants":60,"iframer":83}],65:[function(require,module,exports){ +(function (global){ +'use strict'; + +var constants = require('../constants'); + +function _stringifyParams(payload) { + var params = []; + + for (var param in payload) { + if (payload.hasOwnProperty(param)) { + params.push([param, payload[param]].join('=')); + } + } + + return params.join(','); +} + +function _getParams() { + var baseWidth = 850; + var baseHeight = 600; + + return _stringifyParams({ + width: baseWidth, + height: baseHeight, + left: (screen.width - baseWidth) / 2, + top: (screen.height - baseHeight) / 4 + }); +} + +function createPopup(url) { + return global.open(url, constants.POPUP_NAME, _getParams()); +} + +module.exports = { create: createPopup }; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"../constants":60}],66:[function(require,module,exports){ +'use strict'; + +var constants = require('./constants'); + +function getQueryString() { + return 'version=' + constants.VERSION; +} + +function compose(baseUrl, params) { + var url = baseUrl + '/oauth/authorize?response_type=code'; + var redirectUri = params.redirectUrl + '?' + getQueryString(); + + url += '&redirect_uri=' + encodeURIComponent(redirectUri); + url += '&client_id=' + params.clientId; + + if (params.scopes) { + url += '&scope=' + encodeURIComponent(params.scopes); + } + + if (params.meta) { + for (var key in params.meta) { + if (params.meta.hasOwnProperty(key)) { + url += '&meta[' + encodeURIComponent(key) + ']=' + encodeURIComponent(params.meta[key]); + } + } + } + + return url; +} + +module.exports = { + compose: compose, + getQueryString: getQueryString +}; + +},{"./constants":60}],67:[function(require,module,exports){ +arguments[4][52][0].apply(exports,arguments) +},{"./lib/check-origin":68,"./lib/events":69,"dup":52,"framebus":70}],68:[function(require,module,exports){ +arguments[4][53][0].apply(exports,arguments) +},{"dup":53}],69:[function(require,module,exports){ +arguments[4][54][0].apply(exports,arguments) +},{"dup":54}],70:[function(require,module,exports){ +arguments[4][55][0].apply(exports,arguments) +},{"dup":55}],71:[function(require,module,exports){ +arguments[4][35][0].apply(exports,arguments) +},{"dup":35}],72:[function(require,module,exports){ +arguments[4][36][0].apply(exports,arguments) +},{"dup":36}],73:[function(require,module,exports){ +arguments[4][22][0].apply(exports,arguments) +},{"dup":22}],74:[function(require,module,exports){ +arguments[4][38][0].apply(exports,arguments) +},{"dup":38}],75:[function(require,module,exports){ +arguments[4][39][0].apply(exports,arguments) +},{"dup":39}],76:[function(require,module,exports){ +arguments[4][40][0].apply(exports,arguments) +},{"dup":40}],77:[function(require,module,exports){ +arguments[4][41][0].apply(exports,arguments) +},{"./array":71,"dup":41}],78:[function(require,module,exports){ +arguments[4][42][0].apply(exports,arguments) +},{"dup":42}],79:[function(require,module,exports){ +arguments[4][43][0].apply(exports,arguments) +},{"./lib/array":71,"./lib/base64":72,"./lib/dom":73,"./lib/events":74,"./lib/fn":75,"./lib/string":76,"./lib/url":77,"./lib/uuid":78,"dup":43}],80:[function(require,module,exports){ +'use strict'; + +var batchExecuteFunctions = require('batch-execute-functions'); +// Reach into lib for isFunction. This lib requires a DOM and cannot be +// tested otherwise +var fnUtil = require('braintree-utilities/lib/fn'); + +function Destructor() { + this._teardownRegistry = []; +} + +Destructor.prototype.registerFunctionForTeardown = function (fn) { + if (fnUtil.isFunction(fn)) { + this._teardownRegistry.push(fn); + } +}; + +Destructor.prototype.teardown = function (callback) { + batchExecuteFunctions(this._teardownRegistry, fnUtil.bind(function (err) { + this._teardownRegistry = []; + + if (fnUtil.isFunction(callback)) { + callback(err); + } + }, this)); +}; + +module.exports = Destructor; + +},{"batch-execute-functions":81,"braintree-utilities/lib/fn":82}],81:[function(require,module,exports){ +'use strict'; + +function call(fn, callback) { + var isSync = fn.length === 0; + var wrappedCallback; + + if (isSync) { + fn(); + callback(null); + } else { + wrappedCallback = once(callback); + fn(wrappedCallback); + } +} + +function once(fn) { + var called = false; + return function () { + if (!called) { + called = true; + fn.apply(this, arguments); + } + }; +} + +module.exports = function (functions, callback) { + var length = functions.length; + var remaining = length; + + if (length === 0) { + callback(null); + return; + } + + for (var i = 0; i < length; i++) { + call(functions[i], function (err) { + if (err) { + callback(err); + return; + } + + remaining -= 1; + if (remaining === 0) { + callback(null); + } + }); + } +}; + +},{}],82:[function(require,module,exports){ +arguments[4][39][0].apply(exports,arguments) +},{"dup":39}],83:[function(require,module,exports){ +'use strict'; + +var assign = require('lodash.assign'); +var isString = require('lodash.isstring'); +var setAttributes = require('setattributes'); +var defaultAttributes = require('./lib/default-attributes'); + +module.exports = function createFrame(options) { + var iframe = document.createElement('iframe'); + var config = assign({}, defaultAttributes, options); + + if (config.style && !isString(config.style)) { + assign(iframe.style, config.style); + delete config.style; + } + + setAttributes(iframe, config); + + if (!iframe.getAttribute('id')) { + iframe.id = iframe.name; + } + + return iframe; +}; + +},{"./lib/default-attributes":84,"lodash.assign":85,"lodash.isstring":96,"setattributes":97}],84:[function(require,module,exports){ +module.exports={ + "src": "about:blank", + "frameBorder": 0, + "allowtransparency": true, + "scrolling": "no" +} + +},{}],85:[function(require,module,exports){ +/** + * lodash 3.2.0 (Custom Build) + * Build: `lodash modern modularize exports="npm" -o ./` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ +var baseAssign = require('lodash._baseassign'), + createAssigner = require('lodash._createassigner'), + keys = require('lodash.keys'); + +/** + * A specialized version of `_.assign` for customizing assigned values without + * support for argument juggling, multiple sources, and `this` binding `customizer` + * functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {Function} customizer The function to customize assigned values. + * @returns {Object} Returns `object`. + */ +function assignWith(object, source, customizer) { + var index = -1, + props = keys(source), + length = props.length; + + while (++index < length) { + var key = props[index], + value = object[key], + result = customizer(value, source[key], key, object, source); + + if ((result === result ? (result !== value) : (value === value)) || + (value === undefined && !(key in object))) { + object[key] = result; + } + } + return object; +} + +/** + * Assigns own enumerable properties of source object(s) to the destination + * object. Subsequent sources overwrite property assignments of previous sources. + * If `customizer` is provided it is invoked to produce the assigned values. + * The `customizer` is bound to `thisArg` and invoked with five arguments: + * (objectValue, sourceValue, key, object, source). + * + * **Note:** This method mutates `object` and is based on + * [`Object.assign`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign). + * + * @static + * @memberOf _ + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @param {*} [thisArg] The `this` binding of `customizer`. + * @returns {Object} Returns `object`. + * @example + * + * _.assign({ 'user': 'barney' }, { 'age': 40 }, { 'user': 'fred' }); + * // => { 'user': 'fred', 'age': 40 } + * + * // using a customizer callback + * var defaults = _.partialRight(_.assign, function(value, other) { + * return _.isUndefined(value) ? other : value; + * }); + * + * defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' }); + * // => { 'user': 'barney', 'age': 36 } + */ +var assign = createAssigner(function(object, source, customizer) { + return customizer + ? assignWith(object, source, customizer) + : baseAssign(object, source); +}); + +module.exports = assign; + +},{"lodash._baseassign":86,"lodash._createassigner":88,"lodash.keys":92}],86:[function(require,module,exports){ +/** + * lodash 3.2.0 (Custom Build) + * Build: `lodash modern modularize exports="npm" -o ./` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ +var baseCopy = require('lodash._basecopy'), + keys = require('lodash.keys'); + +/** + * The base implementation of `_.assign` without support for argument juggling, + * multiple sources, and `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return source == null + ? object + : baseCopy(source, keys(source), object); +} + +module.exports = baseAssign; + +},{"lodash._basecopy":87,"lodash.keys":92}],87:[function(require,module,exports){ +/** + * lodash 3.0.1 (Custom Build) + * Build: `lodash modern modularize exports="npm" -o ./` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ + +/** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property names to copy. + * @param {Object} [object={}] The object to copy properties to. + * @returns {Object} Returns `object`. + */ +function baseCopy(source, props, object) { + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + object[key] = source[key]; + } + return object; +} + +module.exports = baseCopy; + +},{}],88:[function(require,module,exports){ +/** + * lodash 3.1.1 (Custom Build) + * Build: `lodash modern modularize exports="npm" -o ./` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ +var bindCallback = require('lodash._bindcallback'), + isIterateeCall = require('lodash._isiterateecall'), + restParam = require('lodash.restparam'); + +/** + * Creates a function that assigns properties of source object(s) to a given + * destination object. + * + * **Note:** This function is used to create `_.assign`, `_.defaults`, and `_.merge`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ +function createAssigner(assigner) { + return restParam(function(object, sources) { + var index = -1, + length = object == null ? 0 : sources.length, + customizer = length > 2 ? sources[length - 2] : undefined, + guard = length > 2 ? sources[2] : undefined, + thisArg = length > 1 ? sources[length - 1] : undefined; + + if (typeof customizer == 'function') { + customizer = bindCallback(customizer, thisArg, 5); + length -= 2; + } else { + customizer = typeof thisArg == 'function' ? thisArg : undefined; + length -= (customizer ? 1 : 0); + } + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, customizer); + } + } + return object; + }); +} + +module.exports = createAssigner; + +},{"lodash._bindcallback":89,"lodash._isiterateecall":90,"lodash.restparam":91}],89:[function(require,module,exports){ +/** + * lodash 3.0.1 (Custom Build) + * Build: `lodash modern modularize exports="npm" -o ./` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ + +/** + * A specialized version of `baseCallback` which only supports `this` binding + * and specifying the number of arguments to provide to `func`. + * + * @private + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {number} [argCount] The number of arguments to provide to `func`. + * @returns {Function} Returns the callback. + */ +function bindCallback(func, thisArg, argCount) { + if (typeof func != 'function') { + return identity; + } + if (thisArg === undefined) { + return func; + } + switch (argCount) { + case 1: return function(value) { + return func.call(thisArg, value); + }; + case 3: return function(value, index, collection) { + return func.call(thisArg, value, index, collection); + }; + case 4: return function(accumulator, value, index, collection) { + return func.call(thisArg, accumulator, value, index, collection); + }; + case 5: return function(value, other, key, object, source) { + return func.call(thisArg, value, other, key, object, source); + }; + } + return function() { + return func.apply(thisArg, arguments); + }; +} + +/** + * This method returns the first argument provided to it. + * + * @static + * @memberOf _ + * @category Utility + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'user': 'fred' }; + * + * _.identity(object) === object; + * // => true + */ +function identity(value) { + return value; +} + +module.exports = bindCallback; + +},{}],90:[function(require,module,exports){ +/** + * lodash 3.0.9 (Custom Build) + * Build: `lodash modern modularize exports="npm" -o ./` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ + +/** Used to detect unsigned integer values. */ +var reIsUint = /^\d+$/; + +/** + * Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer) + * of an array-like value. + */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +/** + * Gets the "length" property value of `object`. + * + * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792) + * that affects Safari on at least iOS 8.1-8.3 ARM64. + * + * @private + * @param {Object} object The object to query. + * @returns {*} Returns the "length" value. + */ +var getLength = baseProperty('length'); + +/** + * Checks if `value` is array-like. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + */ +function isArrayLike(value) { + return value != null && isLength(getLength(value)); +} + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1; + length = length == null ? MAX_SAFE_INTEGER : length; + return value > -1 && value % 1 == 0 && value < length; +} + +/** + * Checks if the provided arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`. + */ +function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object)) { + var other = object[index]; + return value === value ? (value === other) : (other !== other); + } + return false; +} + +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength). + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + */ +function isLength(value) { + return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +} + +/** + * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. + * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(1); + * // => false + */ +function isObject(value) { + // Avoid a V8 JIT bug in Chrome 19-20. + // See https://code.google.com/p/v8/issues/detail?id=2291 for more details. + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} + +module.exports = isIterateeCall; + +},{}],91:[function(require,module,exports){ +/** + * lodash 3.6.1 (Custom Build) + * Build: `lodash modern modularize exports="npm" -o ./` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ + +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Creates a function that invokes `func` with the `this` binding of the + * created function and arguments from `start` and beyond provided as an array. + * + * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters). + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.restParam(function(what, names) { + * return what + ' ' + _.initial(names).join(', ') + + * (_.size(names) > 1 ? ', & ' : '') + _.last(names); + * }); + * + * say('hello', 'fred', 'barney', 'pebbles'); + * // => 'hello fred, barney, & pebbles' + */ +function restParam(func, start) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + rest = Array(length); + + while (++index < length) { + rest[index] = args[start + index]; + } + switch (start) { + case 0: return func.call(this, rest); + case 1: return func.call(this, args[0], rest); + case 2: return func.call(this, args[0], args[1], rest); + } + var otherArgs = Array(start + 1); + index = -1; + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = rest; + return func.apply(this, otherArgs); + }; +} + +module.exports = restParam; + +},{}],92:[function(require,module,exports){ +arguments[4][48][0].apply(exports,arguments) +},{"dup":48,"lodash._getnative":93,"lodash.isarguments":94,"lodash.isarray":95}],93:[function(require,module,exports){ +arguments[4][49][0].apply(exports,arguments) +},{"dup":49}],94:[function(require,module,exports){ +arguments[4][45][0].apply(exports,arguments) +},{"dup":45}],95:[function(require,module,exports){ +arguments[4][46][0].apply(exports,arguments) +},{"dup":46}],96:[function(require,module,exports){ +arguments[4][51][0].apply(exports,arguments) +},{"dup":51}],97:[function(require,module,exports){ +module.exports = function setAttributes(element, attributes) { + var value; + + for (var key in attributes) { + if (attributes.hasOwnProperty(key)) { + value = attributes[key]; + + if (value == null) { + element.removeAttribute(key); + } else { + element.setAttribute(key, value); + } + } + } +}; + +},{}],98:[function(require,module,exports){ +arguments[4][2][0].apply(exports,arguments) +},{"./coinbase-account":99,"./constants":100,"./credit-card":101,"./europe-bank-account":102,"./normalize-api-fields":104,"./parse-client-token":105,"./paypal-account":106,"./request/choose-driver":109,"./sepa-mandate":114,"./should-enable-cors":115,"./util":116,"braintree-3ds":125,"braintree-utilities":139,"dup":2}],99:[function(require,module,exports){ +arguments[4][3][0].apply(exports,arguments) +},{"dup":3}],100:[function(require,module,exports){ +arguments[4][4][0].apply(exports,arguments) +},{"dup":4}],101:[function(require,module,exports){ +arguments[4][5][0].apply(exports,arguments) +},{"dup":5}],102:[function(require,module,exports){ +arguments[4][6][0].apply(exports,arguments) +},{"dup":6}],103:[function(require,module,exports){ +arguments[4][7][0].apply(exports,arguments) +},{"./constants":100,"./parse-client-token":105,"./request/choose-driver":109,"./should-enable-cors":115,"./util":116,"dup":7}],104:[function(require,module,exports){ +arguments[4][8][0].apply(exports,arguments) +},{"dup":8}],105:[function(require,module,exports){ +arguments[4][9][0].apply(exports,arguments) +},{"./polyfill":107,"braintree-utilities":139,"dup":9}],106:[function(require,module,exports){ +arguments[4][10][0].apply(exports,arguments) +},{"dup":10}],107:[function(require,module,exports){ +arguments[4][11][0].apply(exports,arguments) +},{"dup":11}],108:[function(require,module,exports){ +arguments[4][12][0].apply(exports,arguments) +},{"../constants":100,"../util":116,"./parse-body":112,"./prep-body":113,"dup":12}],109:[function(require,module,exports){ +arguments[4][13][0].apply(exports,arguments) +},{"../util":116,"./ajax-driver":108,"./jsonp-driver":110,"dup":13}],110:[function(require,module,exports){ +arguments[4][14][0].apply(exports,arguments) +},{"../constants":100,"./jsonp":111,"dup":14}],111:[function(require,module,exports){ +arguments[4][15][0].apply(exports,arguments) +},{"../util":116,"dup":15}],112:[function(require,module,exports){ +arguments[4][16][0].apply(exports,arguments) +},{"dup":16}],113:[function(require,module,exports){ +arguments[4][17][0].apply(exports,arguments) +},{"dup":17,"lodash.isstring":147}],114:[function(require,module,exports){ +arguments[4][18][0].apply(exports,arguments) +},{"dup":18}],115:[function(require,module,exports){ +arguments[4][19][0].apply(exports,arguments) +},{"dup":19}],116:[function(require,module,exports){ +arguments[4][20][0].apply(exports,arguments) +},{"dup":20,"lodash.isempty":140,"lodash.isobject":146}],117:[function(require,module,exports){ +arguments[4][21][0].apply(exports,arguments) +},{"./lib/client":98,"./lib/get-configuration":103,"./lib/parse-client-token":105,"./lib/util":116,"dup":21}],118:[function(require,module,exports){ +arguments[4][22][0].apply(exports,arguments) +},{"dup":22}],119:[function(require,module,exports){ +arguments[4][23][0].apply(exports,arguments) +},{"dup":23}],120:[function(require,module,exports){ +arguments[4][24][0].apply(exports,arguments) +},{"dup":24}],121:[function(require,module,exports){ +arguments[4][25][0].apply(exports,arguments) +},{"dup":25}],122:[function(require,module,exports){ +arguments[4][26][0].apply(exports,arguments) +},{"./lib/dom":118,"./lib/events":119,"./lib/fn":120,"./lib/url":121,"dup":26}],123:[function(require,module,exports){ +arguments[4][27][0].apply(exports,arguments) +},{"../shared/receiver":130,"braintree-utilities":122,"dup":27}],124:[function(require,module,exports){ +arguments[4][28][0].apply(exports,arguments) +},{"./authorization_service":123,"./loader":126,"braintree-utilities":122,"dup":28}],125:[function(require,module,exports){ +arguments[4][29][0].apply(exports,arguments) +},{"./client":124,"dup":29}],126:[function(require,module,exports){ +arguments[4][30][0].apply(exports,arguments) +},{"./loader_display":127,"./loader_message":128,"./loader_spinner":129,"dup":30}],127:[function(require,module,exports){ +arguments[4][31][0].apply(exports,arguments) +},{"dup":31}],128:[function(require,module,exports){ +arguments[4][32][0].apply(exports,arguments) +},{"dup":32}],129:[function(require,module,exports){ +arguments[4][33][0].apply(exports,arguments) +},{"dup":33}],130:[function(require,module,exports){ +arguments[4][34][0].apply(exports,arguments) +},{"braintree-utilities":122,"dup":34}],131:[function(require,module,exports){ +arguments[4][35][0].apply(exports,arguments) +},{"dup":35}],132:[function(require,module,exports){ +arguments[4][36][0].apply(exports,arguments) +},{"dup":36}],133:[function(require,module,exports){ +arguments[4][22][0].apply(exports,arguments) +},{"dup":22}],134:[function(require,module,exports){ +arguments[4][38][0].apply(exports,arguments) +},{"dup":38}],135:[function(require,module,exports){ +arguments[4][39][0].apply(exports,arguments) +},{"dup":39}],136:[function(require,module,exports){ +arguments[4][40][0].apply(exports,arguments) +},{"dup":40}],137:[function(require,module,exports){ +arguments[4][41][0].apply(exports,arguments) +},{"./array":131,"dup":41}],138:[function(require,module,exports){ +arguments[4][42][0].apply(exports,arguments) +},{"dup":42}],139:[function(require,module,exports){ +arguments[4][43][0].apply(exports,arguments) +},{"./lib/array":131,"./lib/base64":132,"./lib/dom":133,"./lib/events":134,"./lib/fn":135,"./lib/string":136,"./lib/url":137,"./lib/uuid":138,"dup":43}],140:[function(require,module,exports){ +arguments[4][44][0].apply(exports,arguments) +},{"dup":44,"lodash.isarguments":141,"lodash.isarray":142,"lodash.isfunction":143,"lodash.isstring":147,"lodash.keys":144}],141:[function(require,module,exports){ +arguments[4][45][0].apply(exports,arguments) +},{"dup":45}],142:[function(require,module,exports){ +arguments[4][46][0].apply(exports,arguments) +},{"dup":46}],143:[function(require,module,exports){ +arguments[4][47][0].apply(exports,arguments) +},{"dup":47}],144:[function(require,module,exports){ +arguments[4][48][0].apply(exports,arguments) +},{"dup":48,"lodash._getnative":145,"lodash.isarguments":141,"lodash.isarray":142}],145:[function(require,module,exports){ +arguments[4][49][0].apply(exports,arguments) +},{"dup":49}],146:[function(require,module,exports){ +arguments[4][50][0].apply(exports,arguments) +},{"dup":50}],147:[function(require,module,exports){ +arguments[4][51][0].apply(exports,arguments) +},{"dup":51}],148:[function(require,module,exports){ +arguments[4][52][0].apply(exports,arguments) +},{"./lib/check-origin":149,"./lib/events":150,"dup":52,"framebus":151}],149:[function(require,module,exports){ +arguments[4][53][0].apply(exports,arguments) +},{"dup":53}],150:[function(require,module,exports){ +arguments[4][54][0].apply(exports,arguments) +},{"dup":54}],151:[function(require,module,exports){ +arguments[4][55][0].apply(exports,arguments) +},{"dup":55}],152:[function(require,module,exports){ +arguments[4][52][0].apply(exports,arguments) +},{"./lib/check-origin":153,"./lib/events":154,"dup":52,"framebus":155}],153:[function(require,module,exports){ +arguments[4][53][0].apply(exports,arguments) +},{"dup":53}],154:[function(require,module,exports){ +arguments[4][54][0].apply(exports,arguments) +},{"dup":54}],155:[function(require,module,exports){ +arguments[4][55][0].apply(exports,arguments) +},{"dup":55}],156:[function(require,module,exports){ +arguments[4][35][0].apply(exports,arguments) +},{"dup":35}],157:[function(require,module,exports){ +arguments[4][36][0].apply(exports,arguments) +},{"dup":36}],158:[function(require,module,exports){ +arguments[4][22][0].apply(exports,arguments) +},{"dup":22}],159:[function(require,module,exports){ +arguments[4][38][0].apply(exports,arguments) +},{"dup":38}],160:[function(require,module,exports){ +arguments[4][39][0].apply(exports,arguments) +},{"dup":39}],161:[function(require,module,exports){ +arguments[4][40][0].apply(exports,arguments) +},{"dup":40}],162:[function(require,module,exports){ +arguments[4][41][0].apply(exports,arguments) +},{"./array":156,"dup":41}],163:[function(require,module,exports){ +arguments[4][42][0].apply(exports,arguments) +},{"dup":42}],164:[function(require,module,exports){ +arguments[4][43][0].apply(exports,arguments) +},{"./lib/array":156,"./lib/base64":157,"./lib/dom":158,"./lib/events":159,"./lib/fn":160,"./lib/string":161,"./lib/url":162,"./lib/uuid":163,"dup":43}],165:[function(require,module,exports){ +arguments[4][80][0].apply(exports,arguments) +},{"batch-execute-functions":166,"braintree-utilities/lib/fn":167,"dup":80}],166:[function(require,module,exports){ +arguments[4][81][0].apply(exports,arguments) +},{"dup":81}],167:[function(require,module,exports){ +arguments[4][39][0].apply(exports,arguments) +},{"dup":39}],168:[function(require,module,exports){ +arguments[4][83][0].apply(exports,arguments) +},{"./lib/default-attributes":169,"dup":83,"lodash.assign":170,"lodash.isstring":181,"setattributes":182}],169:[function(require,module,exports){ +arguments[4][84][0].apply(exports,arguments) +},{"dup":84}],170:[function(require,module,exports){ +arguments[4][85][0].apply(exports,arguments) +},{"dup":85,"lodash._baseassign":171,"lodash._createassigner":173,"lodash.keys":177}],171:[function(require,module,exports){ +arguments[4][86][0].apply(exports,arguments) +},{"dup":86,"lodash._basecopy":172,"lodash.keys":177}],172:[function(require,module,exports){ +arguments[4][87][0].apply(exports,arguments) +},{"dup":87}],173:[function(require,module,exports){ +arguments[4][88][0].apply(exports,arguments) +},{"dup":88,"lodash._bindcallback":174,"lodash._isiterateecall":175,"lodash.restparam":176}],174:[function(require,module,exports){ +arguments[4][89][0].apply(exports,arguments) +},{"dup":89}],175:[function(require,module,exports){ +arguments[4][90][0].apply(exports,arguments) +},{"dup":90}],176:[function(require,module,exports){ +arguments[4][91][0].apply(exports,arguments) +},{"dup":91}],177:[function(require,module,exports){ +arguments[4][48][0].apply(exports,arguments) +},{"dup":48,"lodash._getnative":178,"lodash.isarguments":179,"lodash.isarray":180}],178:[function(require,module,exports){ +arguments[4][49][0].apply(exports,arguments) +},{"dup":49}],179:[function(require,module,exports){ +arguments[4][45][0].apply(exports,arguments) +},{"dup":45}],180:[function(require,module,exports){ +arguments[4][46][0].apply(exports,arguments) +},{"dup":46}],181:[function(require,module,exports){ +arguments[4][51][0].apply(exports,arguments) +},{"dup":51}],182:[function(require,module,exports){ +arguments[4][97][0].apply(exports,arguments) +},{"dup":97}],183:[function(require,module,exports){ +(function (global){ +'use strict'; + +var braintreeUtil = require('braintree-utilities'); +var browser = require('../../shared/util/browser'); +var Destructor = require('destructor'); +var Bus = require('braintree-bus'); +var constants = require('../../shared/constants'); +var PopupView = require('./popup-view'); +var ModalView = require('./modal-view'); + +function AppView(options) { + this.options = options || {}; + + this.destructor = new Destructor(); + + this.bus = new Bus({ + merchantUrl: global.location.href, + channel: this.options.channel + }); + + this.destructor.registerFunctionForTeardown(braintreeUtil.bind(function () { + this.bus.teardown(); + }, this)); + + this._initialize(); +} + +AppView.prototype._initialize = function () { + if (browser.isPopupSupported()) { + this.app = new PopupView({ + src: this._buildUrl(), + isHermes: this.options.isHermes, + channel: this.options.channel + }); + } else { + this.app = new ModalView({ + src: this._buildUrl(), + headless: this.options.headless, + isHermes: this.options.isHermes, + insertFrameFunction: this.options.insertFrameFunction, + channel: this.options.channel + }); + } + + this.destructor.registerFunctionForTeardown(braintreeUtil.bind(function () { + this.app.teardown(); + }, this)); + + this.bus.on(constants.events.CLOSE_APP, braintreeUtil.bind(this.close, this)); + this.bus.on(constants.events.FOCUS_APP, braintreeUtil.bind(this.focus, this)); + this.bus.on(Bus.events.PAYMENT_METHOD_GENERATED, braintreeUtil.bind(this._handlePaymentMethodGenerated, this)); + this.bus.on(Bus.events.UI_POPUP_FORCE_CLOSE, braintreeUtil.bind(this._handleForceClose, this)); +}; + +AppView.prototype._buildUrl = function () { + var url = this.options.paypalAssetsUrl; + url += '/pwpp/'; + url += constants.VERSION; + url += '/html/braintree-frame.html'; + url += '#' + this.options.channel; + + return url; +}; + +AppView.prototype.open = function () { + this.focus(); + this.app.open(); + this.poll(); +}; + +AppView.prototype._handleForceClose = function (event) { + if (event.target === constants.PAYPAL_INTEGRATION_NAME) { + this.close(); + } +}; + +AppView.prototype.close = function () { + this.app.close(); +}; + +AppView.prototype.focus = function () { + if (braintreeUtil.isFunction(this.app.focus)) { + this.app.focus(); + } +}; + +AppView.prototype.isClosed = function () { + return this.app.isClosed(); +}; + +AppView.prototype.stopPolling = function () { + clearInterval(this.pollId); +}; + +AppView.prototype.poll = function () { + this.pollId = setInterval(braintreeUtil.bind(function () { + if (this.isClosed()) { + this._handleClosed(); + } + }, this), 100); +}; + +AppView.prototype._handlePaymentMethodGenerated = function (bundle) { + if (bundle.type === constants.NONCE_TYPE) { + this.close(); + } +}; + +AppView.prototype._handleClosed = function () { + this.stopPolling(); + + this.close(); + + if (browser.isPopupSupported()) { + this.app.el = null; + } +}; + +AppView.prototype.teardown = function () { + this.destructor.teardown(); +}; + +module.exports = AppView; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"../../shared/constants":186,"../../shared/util/browser":191,"./modal-view":184,"./popup-view":185,"braintree-bus":152,"braintree-utilities":164,"destructor":165}],184:[function(require,module,exports){ +(function (global){ +'use strict'; + +var braintreeUtil = require('braintree-utilities'); +var browser = require('../../shared/util/browser'); +var constants = require('../../shared/constants'); +var Bus = require('braintree-bus'); +var iframer = require('iframer'); + +function ModalView(options) { + this.options = options || {}; + this.container = document.body; + + this.bus = new Bus({ + merchantUrl: global.location.href, + channel: options.channel + }); + + if (this.options.headless) { + this._open = this._openHeadless; + } else { + this._attachBusEvents(); + } + + this._initialize(); +} + +ModalView.prototype._attachBusEvents = function () { + this.bus.on(constants.events.OPEN_MODAL, braintreeUtil.bind(this.open, this)); +}; + +ModalView.prototype._initialize = function () { + var name = this.options.isHermes ? constants.HERMES_FRAME_NAME : constants.FRAME_NAME; + + this.el = iframer({ + src: this.options.src, + name: name, + height: this.options.height || '100%', + width: this.options.width || '100%', + style: { + position: browser.isMobile() ? 'absolute' : 'fixed', + top: 0, + left: 0, + bottom: 0, + padding: 0, + margin: 0, + border: 0, + outline: 'none', + zIndex: 20001, + background: '#FFFFFF' + } + }); +}; + +ModalView.prototype.isClosed = function () { + return !this.container.contains(this.el); +}; + +ModalView.prototype._openHeadless = function () { + this.bus.emit(constants.events.OPEN_MODAL); +}; + +ModalView.prototype._open = function () { + if (braintreeUtil.isFunction(this.options.insertFrameFunction)) { + this.options.insertFrameFunction(this.el.src); + } else { + this.container.appendChild(this.el); + } + + this.bus.emit(constants.events.UI_MODAL_DID_OPEN, {source: constants.PAYPAL_INTEGRATION_NAME}); +}; + +ModalView.prototype.open = function () { + if (this.isClosed()) { + this._open(); + } +}; + +ModalView.prototype.close = function () { + if (!this.isClosed()) { + this.container.removeChild(this.el); + + this.bus.emit(constants.events.UI_MODAL_DID_CLOSE, {source: constants.PAYPAL_INTEGRATION_NAME}); + } +}; + +ModalView.prototype.teardown = function () { + this.close(); + this.bus.teardown(); +}; + +module.exports = ModalView; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"../../shared/constants":186,"../../shared/util/browser":191,"braintree-bus":152,"braintree-utilities":164,"iframer":168}],185:[function(require,module,exports){ +(function (global){ +'use strict'; + +var constants = require('../../shared/constants'); +var Bus = require('braintree-bus'); +var browser = require('../../shared/useragent/browser'); + +function PopupView(options) { + this.options = options; + + this.bus = new Bus({ + merchantUrl: global.location.href, + channel: this.options.channel + }); + + if (options.isHermes) { + this.name = constants.HERMES_POPUP_NAME; + this.popupHeight = constants.HERMES_POPUP_HEIGHT; + this.popupWidth = constants.HERMES_POPUP_WIDTH; + } else { + this.name = constants.POPUP_NAME; + this.popupHeight = constants.POPUP_HEIGHT; + this.popupWidth = constants.POPUP_WIDTH; + } +} + +PopupView.prototype._getPopupOptions = function () { + return [ + 'height=' + this.popupHeight, + 'width=' + this.popupWidth, + 'top=' + this._getTopPosition(), + 'left=' + this._getLeftPosition(), + constants.POPUP_OPTIONS + ].join(','); +}; + +PopupView.prototype._centerPosition = function (windowMetric, popupMetric, offset) { + return (windowMetric - popupMetric) / 2 + offset; +}; + +PopupView.prototype._getTopPosition = function () { + var windowHeight = window.outerHeight || document.documentElement.clientHeight; + var windowTop = typeof window.screenY === 'undefined' ? window.screenTop : window.screenY; + + return this._centerPosition(windowHeight, this.popupHeight, windowTop); +}; + +PopupView.prototype._getLeftPosition = function () { + var windowWidth = window.outerWidth || document.documentElement.clientWidth; + var windowLeft = typeof window.screenX === 'undefined' ? window.screenLeft : window.screenX; + + return this._centerPosition(windowWidth, this.popupWidth, windowLeft); +}; + +PopupView.prototype.isClosed = function () { + if (this.el) { + return this.el.closed; + } +}; + +PopupView.prototype.open = function () { + if (!this.el) { + this.el = window.open(this.options.src, this.name, this._getPopupOptions()); + this.focus(); + + this.bus.emit(Bus.events.UI_POPUP_DID_OPEN, {source: constants.PAYPAL_INTEGRATION_NAME}); + } +}; + +PopupView.prototype.close = function () { + if (this.el) { + if (browser.isIE8() && !this.isClosed() || !browser.isIE8()) { + this.el.close(); + } + + this.bus.emit(Bus.events.UI_POPUP_DID_CLOSE, {source: constants.PAYPAL_INTEGRATION_NAME}); + } +}; + +PopupView.prototype.focus = function () { + if (this.el) { + this.el.focus(); + } +}; + +PopupView.prototype.teardown = function () { + this.close(); + this.bus.teardown(); +}; + +module.exports = PopupView; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"../../shared/constants":186,"../../shared/useragent/browser":187,"braintree-bus":152}],186:[function(require,module,exports){ +'use strict'; + +var i; +var version = "1.6.0"; +var events = [ + 'GET_CLIENT_TOKEN', + 'GET_CLIENT_OPTIONS', + 'OPEN_MODAL', + 'CLOSE_APP', + 'FOCUS_APP', + 'UI_MODAL_DID_OPEN', + 'UI_MODAL_DID_CLOSE' +]; + +exports.VERSION = version; +exports.POPUP_NAME = 'braintree_paypal_popup'; +exports.HERMES_POPUP_NAME = 'PPFrameRedirect'; +exports.FRAME_NAME = 'braintree-paypal-frame'; +exports.HERMES_FRAME_NAME = 'PPFrameRedirect'; +exports.POPUP_PATH = '/pwpp/' + version + '/html/braintree-frame.html'; +exports.POPUP_OPTIONS = 'resizable,scrollbars'; +exports.POPUP_HEIGHT = 470; +exports.POPUP_WIDTH = 410; +exports.HERMES_POPUP_HEIGHT = 535; +exports.HERMES_POPUP_WIDTH = 450; +exports.BRIDGE_FRAME_NAME = 'bt-proxy-frame'; +exports.HERMES_SUPPORTED_CURRENCIES = ['USD', 'GBP', 'EUR', 'AUD', 'CAD', 'DKK', 'NOK', 'PLN', 'SEK', 'CHF', 'TRY']; +exports.HERMES_SUPPORTED_COUNTRIES = ['US', 'GB', 'AU', 'CA', 'ES', 'FR', 'DE', 'IT', 'NL', 'NO', 'PL', 'CH', 'TR', 'DK', 'BE', 'AT']; +exports.NONCE_TYPE = 'PayPalAccount'; +exports.PAYPAL_INTEGRATION_NAME = 'PayPal'; +exports.ILLEGAL_XHR_ERROR = 'Illegal XHR request attempted'; +exports.events = {}; + +for (i = 0; i < events.length; i++) { + exports.events[events[i]] = 'paypal:' + events[i]; +} + +},{}],187:[function(require,module,exports){ +'use strict'; + +var userAgent = require('./useragent'); +var platform = require('./platform'); + +function isAndroid() { + return userAgent.matchUserAgent('Android') && !isChrome(); +} + +function isChrome() { + return userAgent.matchUserAgent('Chrome') || userAgent.matchUserAgent('CriOS'); +} + +function isFirefox() { + return userAgent.matchUserAgent('Firefox'); +} + +function isIE() { + return userAgent.matchUserAgent('Trident') || userAgent.matchUserAgent('MSIE'); +} + +function isIE8() { + return userAgent.matchUserAgent(/MSIE 8\.0/); +} + +function isOpera() { + return userAgent.matchUserAgent('Opera') || userAgent.matchUserAgent('OPR'); +} + +function isOperaMini() { + return isOpera() && Object.prototype.toString.call(window.operamini) === '[object OperaMini]'; +} + +function isSafari() { + return userAgent.matchUserAgent('Safari') && !isChrome() && !isAndroid(); +} + +function isIosWebView() { + return platform.isIos() && !isChrome() && !isSafari(); +} + +function isAndroidWebView() { + var androidWebviewRegExp = /Version\/[\w\.]+ Chrome\/[\w\.]+ Mobile/; + return platform.isAndroid() && userAgent.matchUserAgent(androidWebviewRegExp); +} + +module.exports = { + isAndroid: isAndroid, + isChrome: isChrome, + isFirefox: isFirefox, + isIE: isIE, + isIE8: isIE8, + isOpera: isOpera, + isOperaMini: isOperaMini, + isSafari: isSafari, + isIosWebView: isIosWebView, + isAndroidWebView: isAndroidWebView +}; + +},{"./platform":189,"./useragent":190}],188:[function(require,module,exports){ +'use strict'; + +var userAgent = require('./useragent'); +var platform = require('./platform'); + +function isMobile() { + return !isTablet() && + (platform.isAndroid() || platform.isIpod() || platform.isIphone() || + userAgent.matchUserAgent('IEMobile')); +} + +function isTablet() { + return platform.isIpad() || platform.isAndroid() && + !userAgent.matchUserAgent('Mobile'); +} + +function isDesktop() { + return !isMobile() && !isTablet(); +} + +module.exports = { + isMobile: isMobile, + isTablet: isTablet, + isDesktop: isDesktop +}; + +},{"./platform":189,"./useragent":190}],189:[function(require,module,exports){ +'use strict'; + +var userAgent = require('./useragent'); + +function isAndroid() { + return userAgent.matchUserAgent('Android'); +} + +function isIpad() { + return userAgent.matchUserAgent('iPad'); +} + +function isIpod() { + return userAgent.matchUserAgent('iPod'); +} + +function isIphone() { + return userAgent.matchUserAgent('iPhone') && !isIpod(); +} + +function isIos() { + return isIpad() || isIpod() || isIphone(); +} + +module.exports = { + isAndroid: isAndroid, + isIpad: isIpad, + isIpod: isIpod, + isIphone: isIphone, + isIos: isIos +}; + +},{"./useragent":190}],190:[function(require,module,exports){ +'use strict'; + +var nativeUserAgent = window.navigator.userAgent; + +function getNativeUserAgent() { + return nativeUserAgent; +} + +function matchUserAgent(pattern) { + var userAgent = exports.getNativeUserAgent(); + var matches = userAgent.match(pattern); + if (matches) { + return true; + } + return false; +} + +exports.getNativeUserAgent = getNativeUserAgent; +exports.matchUserAgent = matchUserAgent; + +},{}],191:[function(require,module,exports){ +'use strict'; + +var browser = require('../useragent/browser'); +var device = require('../useragent/device'); +var platform = require('../useragent/platform'); +var userAgent = require('../useragent/useragent'); + +var uaString = window.navigator.userAgent; +var mobileRe = /[Mm]obi|tablet|iOS|Android|IEMobile|Windows\sPhone/; + +function isMobile() { + return isMobileDevice() && window.outerWidth < 600; +} + +function isMobileDevice() { + return mobileRe.test(uaString); +} + +function detectedPostMessage() { + return !!window.postMessage; +} + +function isPopupSupported() { + if (browser.isOperaMini()) { + return false; + } + + if (device.isDesktop()) { + return true; + } + + if (device.isMobile() || device.isTablet()) { + if (browser.isIE()) { + return false; + } + + if (platform.isAndroid()) { + if (browser.isAndroidWebView()) { + return false; + } + + return true; + } + + if (platform.isIos()) { + // Chrome, Safari Versions 8.0-8.1, or WebViews + if (browser.isChrome()) { + return false; + } + + if (browser.isSafari() && userAgent.matchUserAgent(/OS (?:8_1|8_0|8)(?!_\d)/i)) { + return false; + } + + if (browser.isIosWebView()) { + return false; + } + + return true; + } + } + + return false; +} + +function isOverlaySupported() { + if (browser.isIE8()) { + return false; + } + + try { + return window.self === window.top; + } catch (e) { + return false; + } +} + +function isBridgeIframeRequired() { + return browser.isIE(); +} + +function isMetroBrowser() { + var supported = null; + var errorName = ''; + + try { + new ActiveXObject(''); // eslint-disable-line + } catch (e) { + errorName = e.name; + } + + try { + supported = !!new ActiveXObject('htmlfile'); + } catch (e) { + supported = false; + } + + if (errorName !== 'ReferenceError' && supported === false) { + supported = false; + } else { + supported = true; + } + return !supported; +} + +module.exports = { + isMobile: isMobile, + isMobileDevice: isMobileDevice, + detectedPostMessage: detectedPostMessage, + isPopupSupported: isPopupSupported, + isOverlaySupported: isOverlaySupported, + isBridgeIframeRequired: isBridgeIframeRequired, + isMetroBrowser: isMetroBrowser +}; + +},{"../useragent/browser":187,"../useragent/device":188,"../useragent/platform":189,"../useragent/useragent":190}],192:[function(require,module,exports){ +'use strict'; + +var utils = require('braintree-utilities'); + +function MessageBus(host, channel) { + this.host = host || window; + this.channel = channel || null; + this.handlers = []; + + utils.addEventListener(this.host, 'message', utils.bind(this.receive, this)); +} + +MessageBus.prototype.receive = function (event) { + var i, message, parsed, type; + + try { + parsed = JSON.parse(event.data); + } catch (e) { + return; + } + + type = parsed.type; + message = new MessageBus.Message(this, event.source, parsed.data); + + for (i = 0; i < this.handlers.length; i++) { + if (this.handlers[i].type === type) { + this.handlers[i].handler(message); + } + } +}; + +MessageBus.prototype.send = function (source, type, data) { + source.postMessage(JSON.stringify({ + type: this._namespaceEvent(type), + data: data + }), '*'); +}; + +MessageBus.prototype.register = function (type, handler) { + this.handlers.push({ + type: this._namespaceEvent(type), + handler: handler + }); +}; + +MessageBus.prototype.unregister = function (type, handler) { + for (var i = this.handlers.length - 1; i >= 0; i--) { + if (this.handlers[i].type === type && this.handlers[i].handler === handler) { + return this.handlers.splice(i, 1); + } + } +}; + +MessageBus.prototype._namespaceEvent = function (eventName) { + return this.channel ? ['braintree', this.channel, eventName].join(':') : eventName; +}; + +MessageBus.Message = function (bus, source, content) { + this.bus = bus; + this.source = source; + this.content = content; +}; + +MessageBus.Message.prototype.reply = function (type, data) { + this.bus.send(this.source, type, data); +}; + +module.exports = MessageBus; + +},{"braintree-utilities":206}],193:[function(require,module,exports){ +'use strict'; + +var utils = require('braintree-utilities'); + +function PubsubClient(bus, target) { + this.bus = bus; + this.target = target; + this.handlers = []; + + this.bus.register('publish', utils.bind(this._handleMessage, this)); +} + +PubsubClient.prototype._handleMessage = function (message) { + var i, + content = message.content, + handlers = this.handlers[content.channel]; + + if (typeof handlers !== 'undefined') { + for (i = 0; i < handlers.length; i++) { + handlers[i](content.data); + } + } +}; + +PubsubClient.prototype.publish = function (channel, data) { + this.bus.send(this.target, 'publish', { channel: channel, data: data }); +}; + +PubsubClient.prototype.subscribe = function (channel, handler) { + this.handlers[channel] = this.handlers[channel] || []; + this.handlers[channel].push(handler); +}; + +PubsubClient.prototype.unsubscribe = function (channel, handler) { + var i, + handlers = this.handlers[channel]; + + if (typeof handlers !== 'undefined') { + for (i = 0; i < handlers.length; i++) { + if (handlers[i] === handler) { + handlers.splice(i, 1); + } + } + } +}; + +module.exports = PubsubClient; + +},{"braintree-utilities":206}],194:[function(require,module,exports){ +'use strict'; + +function PubsubServer(bus) { + this.bus = bus; + this.frames = []; + this.handlers = []; +} + +PubsubServer.prototype.subscribe = function (channel, handler) { + this.handlers[channel] = this.handlers[channel] || []; + this.handlers[channel].push(handler); +}; + +PubsubServer.prototype.registerFrame = function (frame) { + this.frames.push(frame); +}; + +PubsubServer.prototype.unregisterFrame = function (frame) { + for (var i = 0; i < this.frames.length; i++) { + if (this.frames[i] === frame) { + this.frames.splice(i, 1); + } + } +}; + +PubsubServer.prototype.publish = function (channel, data) { + var i, + handlers = this.handlers[channel]; + + if (typeof handlers !== 'undefined') { + for (i = 0; i < handlers.length; i++) { + handlers[i](data); + } + } + + for (i = 0; i < this.frames.length; i++) { + this.bus.send(this.frames[i], 'publish', { + channel: channel, + data: data + }); + } +}; + +PubsubServer.prototype.unsubscribe = function (channel, handler) { + var i, + handlers = this.handlers[channel]; + + if (typeof handlers !== 'undefined') { + for (i = 0; i < handlers.length; i++) { + if (handlers[i] === handler) { + handlers.splice(i, 1); + } + } + } +}; + +module.exports = PubsubServer; + +},{}],195:[function(require,module,exports){ +'use strict'; + +var utils = require('braintree-utilities'); + +function RPCClient(bus, target) { + this.bus = bus; + this.target = target || window.parent; + this.counter = 0; + this.callbacks = {}; + + this.bus.register('rpc_response', utils.bind(this._handleResponse, this)); +} + +RPCClient.prototype._handleResponse = function (message) { + var content = message.content, + thisCallback = this.callbacks[content.id]; + + if (typeof thisCallback === 'function') { + thisCallback.apply(null, content.response); + delete this.callbacks[content.id]; + } +}; + +RPCClient.prototype.invoke = function (method, args, callback) { + var counter = this.counter++; + + this.callbacks[counter] = callback; + this.bus.send(this.target, 'rpc_request', { id: counter, method: method, args: args }); +}; + +module.exports = RPCClient; + +},{"braintree-utilities":206}],196:[function(require,module,exports){ +'use strict'; + +var utils = require('braintree-utilities'); + +function RPCServer(bus) { + this.bus = bus; + this.methods = {}; + + this.bus.register('rpc_request', utils.bind(this._handleRequest, this)); +} + +RPCServer.prototype._handleRequest = function (message) { + var reply, + content = message.content, + args = content.args || [], + thisMethod = this.methods[content.method]; + + if (typeof thisMethod === 'function') { + reply = function () { + message.reply('rpc_response', { + id: content.id, + response: Array.prototype.slice.call(arguments) + }); + }; + + args.push(reply); + + thisMethod.apply(null, args); + } +}; + +RPCServer.prototype.reset = function () { + this.methods = {}; +}; + +RPCServer.prototype.define = function (method, handler) { + this.methods[method] = handler; +}; + +module.exports = RPCServer; + +},{"braintree-utilities":206}],197:[function(require,module,exports){ +var MessageBus = require('./lib/message-bus'); +var PubsubClient = require('./lib/pubsub-client'); +var PubsubServer = require('./lib/pubsub-server'); +var RPCClient = require('./lib/rpc-client'); +var RPCServer = require('./lib/rpc-server'); + +module.exports = { + MessageBus: MessageBus, + PubsubClient: PubsubClient, + PubsubServer: PubsubServer, + RPCClient: RPCClient, + RPCServer: RPCServer +}; + +},{"./lib/message-bus":192,"./lib/pubsub-client":193,"./lib/pubsub-server":194,"./lib/rpc-client":195,"./lib/rpc-server":196}],198:[function(require,module,exports){ +arguments[4][35][0].apply(exports,arguments) +},{"dup":35}],199:[function(require,module,exports){ +arguments[4][36][0].apply(exports,arguments) +},{"dup":36}],200:[function(require,module,exports){ +arguments[4][22][0].apply(exports,arguments) +},{"dup":22}],201:[function(require,module,exports){ +arguments[4][38][0].apply(exports,arguments) +},{"dup":38}],202:[function(require,module,exports){ +arguments[4][39][0].apply(exports,arguments) +},{"dup":39}],203:[function(require,module,exports){ +arguments[4][40][0].apply(exports,arguments) +},{"dup":40}],204:[function(require,module,exports){ +arguments[4][41][0].apply(exports,arguments) +},{"./array":198,"dup":41}],205:[function(require,module,exports){ +arguments[4][42][0].apply(exports,arguments) +},{"dup":42}],206:[function(require,module,exports){ +arguments[4][43][0].apply(exports,arguments) +},{"./lib/array":198,"./lib/base64":199,"./lib/dom":200,"./lib/events":201,"./lib/fn":202,"./lib/string":203,"./lib/url":204,"./lib/uuid":205,"dup":43}],207:[function(require,module,exports){ +arguments[4][35][0].apply(exports,arguments) +},{"dup":35}],208:[function(require,module,exports){ +arguments[4][36][0].apply(exports,arguments) +},{"dup":36}],209:[function(require,module,exports){ +arguments[4][22][0].apply(exports,arguments) +},{"dup":22}],210:[function(require,module,exports){ +arguments[4][38][0].apply(exports,arguments) +},{"dup":38}],211:[function(require,module,exports){ +arguments[4][39][0].apply(exports,arguments) +},{"dup":39}],212:[function(require,module,exports){ +arguments[4][40][0].apply(exports,arguments) +},{"dup":40}],213:[function(require,module,exports){ +arguments[4][41][0].apply(exports,arguments) +},{"./array":207,"dup":41}],214:[function(require,module,exports){ +arguments[4][42][0].apply(exports,arguments) +},{"dup":42}],215:[function(require,module,exports){ +arguments[4][43][0].apply(exports,arguments) +},{"./lib/array":207,"./lib/base64":208,"./lib/dom":209,"./lib/events":210,"./lib/fn":211,"./lib/string":212,"./lib/url":213,"./lib/uuid":214,"dup":43}],216:[function(require,module,exports){ +arguments[4][80][0].apply(exports,arguments) +},{"batch-execute-functions":217,"braintree-utilities/lib/fn":218,"dup":80}],217:[function(require,module,exports){ +arguments[4][81][0].apply(exports,arguments) +},{"dup":81}],218:[function(require,module,exports){ +arguments[4][39][0].apply(exports,arguments) +},{"dup":39}],219:[function(require,module,exports){ +(function (global){ +'use strict'; + +function FormNapper(form) { + if (typeof form === 'string' || form instanceof String) { + form = document.getElementById(form); + } + + if (form instanceof HTMLFormElement) { + this.htmlForm = form; + } else { + throw new TypeError('FormNapper requires an HTMLFormElement element or the id string of one.'); + } +} + +FormNapper.prototype.hijack = function (onsubmit) { + if (this.submitHandler) { return; } + + this.submitHandler = function (event) { + if (event.preventDefault) { + event.preventDefault(); + } else { + event.returnValue = false; + } + + onsubmit(event); + }; + + if (global.addEventListener != null) { + this.htmlForm.addEventListener('submit', this.submitHandler, false); + } else if (global.attachEvent != null) { + this.htmlForm.attachEvent('onsubmit', this.submitHandler); + } else { + this.htmlForm.onsubmit = this.submitHandler; + } +}; + +FormNapper.prototype.inject = function (name, value) { + var input = this.htmlForm.querySelector('input[name="' + name + '"]'); + + if (input == null) { + input = document.createElement('input'); + input.type = 'hidden'; + input.name = name; + this.htmlForm.appendChild(input); + } + + input.value = value; + + return input; +}; + +FormNapper.prototype.submit = function () { + HTMLFormElement.prototype.submit.call(this.htmlForm); +}; + +FormNapper.prototype.detach = function () { + if (!this.submitHandler) { return; } + + if (global.removeEventListener != null) { + this.htmlForm.removeEventListener('submit', this.submitHandler, false); + } else if (global.detachEvent != null) { + this.htmlForm.detachEvent('onsubmit', this.submitHandler); + } else { + this.htmlForm.onsubmit = null; + } + + delete this.submitHandler; +}; + +module.exports = FormNapper; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],220:[function(require,module,exports){ +arguments[4][83][0].apply(exports,arguments) +},{"./lib/default-attributes":221,"dup":83,"lodash.assign":222,"lodash.isstring":233,"setattributes":234}],221:[function(require,module,exports){ +arguments[4][84][0].apply(exports,arguments) +},{"dup":84}],222:[function(require,module,exports){ +arguments[4][85][0].apply(exports,arguments) +},{"dup":85,"lodash._baseassign":223,"lodash._createassigner":225,"lodash.keys":229}],223:[function(require,module,exports){ +arguments[4][86][0].apply(exports,arguments) +},{"dup":86,"lodash._basecopy":224,"lodash.keys":229}],224:[function(require,module,exports){ +arguments[4][87][0].apply(exports,arguments) +},{"dup":87}],225:[function(require,module,exports){ +arguments[4][88][0].apply(exports,arguments) +},{"dup":88,"lodash._bindcallback":226,"lodash._isiterateecall":227,"lodash.restparam":228}],226:[function(require,module,exports){ +arguments[4][89][0].apply(exports,arguments) +},{"dup":89}],227:[function(require,module,exports){ +arguments[4][90][0].apply(exports,arguments) +},{"dup":90}],228:[function(require,module,exports){ +arguments[4][91][0].apply(exports,arguments) +},{"dup":91}],229:[function(require,module,exports){ +arguments[4][48][0].apply(exports,arguments) +},{"dup":48,"lodash._getnative":230,"lodash.isarguments":231,"lodash.isarray":232}],230:[function(require,module,exports){ +arguments[4][49][0].apply(exports,arguments) +},{"dup":49}],231:[function(require,module,exports){ +arguments[4][45][0].apply(exports,arguments) +},{"dup":45}],232:[function(require,module,exports){ +arguments[4][46][0].apply(exports,arguments) +},{"dup":46}],233:[function(require,module,exports){ +arguments[4][51][0].apply(exports,arguments) +},{"dup":51}],234:[function(require,module,exports){ +arguments[4][97][0].apply(exports,arguments) +},{"dup":97}],235:[function(require,module,exports){ +'use strict'; + +var RPC_METHOD_NAMES = ['getCreditCards', 'unlockCreditCard', 'sendAnalyticsEvents']; + +function APIProxyServer(apiClient) { + this.apiClient = apiClient; +} + +APIProxyServer.prototype.attach = function (rpcServer) { + var self = this; + var i = 0; + var len = RPC_METHOD_NAMES.length; + + function attachDefine(name) { + rpcServer.define(name, function () { + self.apiClient[name].apply(self.apiClient, arguments); + }); + } + + for (i; i < len; i++) { + attachDefine(RPC_METHOD_NAMES[i]); + } +}; + +module.exports = APIProxyServer; + +},{}],236:[function(require,module,exports){ +(function (global){ +'use strict'; + +var htmlNode, bodyNode; +var api = require('braintree-api'); +var BraintreeBus = require('braintree-bus'); +var Destructor = require('destructor'); +var rpc = require('braintree-rpc'); +var utils = require('braintree-utilities'); +var normalizeElement = utils.normalizeElement; +var bind = utils.bind; +var isBrowserHttps = utils.isBrowserHttps; +var APIProxyServer = require('./api-proxy-server'); +var MerchantFormManager = require('./merchant-form-manager'); +var FrameContainer = require('./frame-container'); +var constants = require('../shared/constants'); +var version = "1.9.0"; +var PayPalModalView = require('braintree-paypal/src/external/views/app-view'); + +function getElementStyle(element, style) { + var computedStyle = window.getComputedStyle ? getComputedStyle(element) : element.currentStyle; + + return computedStyle[style]; +} + +function getMerchantPageDefaultStyles() { + return { + html: { + height: htmlNode.style.height || '', + overflow: getElementStyle(htmlNode, 'overflow'), + position: getElementStyle(htmlNode, 'position') + }, + body: { + height: bodyNode.style.height || '', + overflow: getElementStyle(bodyNode, 'overflow') + } + }; +} + +function isMobile() { + var isMobileUserAgent = /Android|iPhone|iPod|iPad/i.test(window.navigator.userAgent); + return isMobileUserAgent; +} + +function Client(settings) { + var inlineFramePath, modalFramePath, formElement; + + this.channel = settings.channel; + this.destructor = new Destructor(); + this.merchantConfiguration = settings.merchantConfiguration; + this.encodedClientToken = settings.gatewayConfiguration; + this.analyticsConfiguration = settings.analyticsConfiguration; + this.paypalOptions = settings.merchantConfiguration.paypal || {}; + this.container = null; + this.merchantFormManager = null; + this.root = settings.root; + this.configurationRequests = []; + this.braintreeApiClient = api.configure({ + clientToken: settings.gatewayConfiguration, + analyticsConfiguration: this.analyticsConfiguration, + integration: 'dropin', + enableCORS: this.merchantConfiguration.enableCORS + }); + + this.paymentMethodNonceReceivedCallback = settings.merchantConfiguration.paymentMethodNonceReceived; + this.clientToken = api.parseClientToken(settings.gatewayConfiguration); + + this.braintreeBus = new BraintreeBus({ + merchantUrl: global.location.href, + channel: settings.channel + }); + + this.bus = new rpc.MessageBus(this.root, this.channel); + this.rpcServer = new rpc.RPCServer(this.bus); + this.apiProxyServer = new APIProxyServer(this.braintreeApiClient); + + this.apiProxyServer.attach(this.rpcServer); + + inlineFramePath = settings.inlineFramePath || this.clientToken.assetsUrl + '/dropin/' + version + '/inline-frame.html'; + modalFramePath = settings.modalFramePath || this.clientToken.assetsUrl + '/dropin/' + version + '/modal-frame.html'; + htmlNode = document.documentElement; + bodyNode = document.body; + + this.frames = { + inline: this._createFrame(inlineFramePath, constants.INLINE_FRAME_NAME), + modal: this._createFrame(modalFramePath, constants.MODAL_FRAME_NAME) + }; + + this.container = normalizeElement(settings.merchantConfiguration.container, 'Unable to find valid container.'); + + formElement = normalizeElement(settings.merchantConfiguration.form || this._findClosest(this.container, 'form')); + + this.merchantFormManager = new MerchantFormManager({ + form: formElement, + frames: this.frames, + onSubmit: this.paymentMethodNonceReceivedCallback, + apiClient: this.braintreeApiClient + }).initialize(); + + this.destructor.registerFunctionForTeardown(bind(function () { + this.merchantFormManager.teardown(); + }, this)); + + if (settings.gatewayConfiguration.paypalEnabled) { + this._configurePayPal(); + } + + this.braintreeApiClient.sendAnalyticsEvents('dropin.web.initialized'); +} + +Client.prototype.initialize = function () { + var i; + var self = this; + + this._initializeModal(); + + this.braintreeBus.emit(BraintreeBus.events.ASYNC_DEPENDENCY_INITIALIZING); + this.container.appendChild(this.frames.inline.element); + bodyNode.appendChild(this.frames.modal.element); + + this.destructor.registerFunctionForTeardown(function (done) { + self._hideModal(function () { + self.container.removeChild(self.frames.inline.element); + bodyNode.removeChild(self.frames.modal.element); + + done(); + }); + }); + + this.rpcServer.define('receiveSharedCustomerIdentifier', function (sharedCustomerIdentifier) { + self.braintreeApiClient.attrs.sharedCustomerIdentifier = sharedCustomerIdentifier; + self.braintreeApiClient.attrs.sharedCustomerIdentifierType = 'browser_session_cookie_store'; + + for (i = 0; i < self.configurationRequests.length; i++) { + self.configurationRequests[i](self.encodedClientToken); + } + + self.configurationRequests = []; + }); + + this.braintreeBus.on(BraintreeBus.events.PAYMENT_METHOD_GENERATED, bind(this._handleAltPayData, this)); + + this.rpcServer.define('getConfiguration', function (reply) { + reply({ + enableCORS: self.merchantConfiguration.enableCORS, + clientToken: self.encodedClientToken, + paypalOptions: self.paypalOptions, + analyticsConfiguration: self.analyticsConfiguration, + merchantHttps: isBrowserHttps() + }); + }); + + this.rpcServer.define('selectPaymentMethod', function (paymentMethods) { + self.frames.modal.rpcClient.invoke('selectPaymentMethod', [paymentMethods]); + self._showModal(); + }); + + this.rpcServer.define('sendAddedPaymentMethod', function (paymentMethod) { + self.merchantFormManager.setNoncePayload(paymentMethod); + + self.frames.inline.rpcClient.invoke('receiveNewPaymentMethod', [paymentMethod]); + }); + + this.rpcServer.define('sendUsedPaymentMethod', function (paymentMethod) { + self.frames.inline.rpcClient.invoke('selectPaymentMethod', [paymentMethod]); + }); + + this.rpcServer.define('sendUnlockedNonce', function (paymentMethod) { + self.merchantFormManager.setNoncePayload(paymentMethod); + }); + + this.rpcServer.define('clearNonce', function () { + self.merchantFormManager.clearNoncePayload(); + }); + + this.rpcServer.define('closeDropInModal', function () { + self._hideModal(); + }); + + this.rpcServer.define('setInlineFrameHeight', function (height) { + self.frames.inline.element.style.height = height + 'px'; + }); + + this.bus.register('ready', function (message) { + if (message.source === self.frames.inline.element.contentWindow) { + self.frames.inline.rpcClient = new rpc.RPCClient(self.bus, message.source); + } else if (message.source === self.frames.modal.element.contentWindow) { + self.frames.modal.rpcClient = new rpc.RPCClient(self.bus, message.source); + } + }); +}; + +Client.prototype._createFrame = function (endpoint, name) { + return new FrameContainer(endpoint, name, this.braintreeBus); +}; + +Client.prototype._initializeModal = function () { + this.frames.modal.element.style.display = 'none'; + this.frames.modal.element.style.position = isMobile() ? 'absolute' : 'fixed'; + this.frames.modal.element.style.top = '0'; + this.frames.modal.element.style.left = '0'; + this.frames.modal.element.style.height = '100%'; + this.frames.modal.element.style.width = '100%'; +}; + +Client.prototype._lockMerchantWindowSize = function () { + setTimeout(function () { + htmlNode.style.overflow = 'hidden'; + bodyNode.style.overflow = 'hidden'; + bodyNode.style.height = '100%'; + + if (isMobile()) { + htmlNode.style.position = 'relative'; + htmlNode.style.height = window.innerHeight + 'px'; + } + }, 160); +}; + +Client.prototype._unlockMerchantWindowSize = function () { + var defaultStyles = this.merchantPageDefaultStyles; + + if (!defaultStyles) { return; } + + bodyNode.style.height = defaultStyles.body.height; + bodyNode.style.overflow = defaultStyles.body.overflow; + + htmlNode.style.overflow = defaultStyles.html.overflow; + + if (isMobile()) { + htmlNode.style.height = defaultStyles.html.height; + htmlNode.style.position = defaultStyles.html.position; + } + + delete this.merchantPageDefaultStyles; +}; + +Client.prototype._showModal = function () { + var self = this; + var el = this.frames.modal.element; + + this.merchantPageDefaultStyles = getMerchantPageDefaultStyles(); + + el.style.display = 'block'; + + this.frames.modal.rpcClient.invoke('open', [], function () { + setTimeout(function () { + self._lockMerchantWindowSize(); + el.contentWindow.focus(); + }, 200); + }); +}; + +Client.prototype._hideModal = function (done) { + this._unlockMerchantWindowSize(); + this.frames.modal.element.style.display = 'none'; + + if (done) { + done(); + } +}; + +Client.prototype._configurePayPal = function () { + this.paypalModalView = new PayPalModalView({ + channel: this.channel, + insertFrameFunction: this.paypalOptions.insertFrame, + paypalAssetsUrl: this.clientToken.paypal.assetsUrl, + isHermes: !!this.paypalOptions.singleUse && !!this.paypalOptions.amount && !!this.paypalOptions.currency + }); +}; + +Client.prototype._handleAltPayData = function (payload) { + this.merchantFormManager.setNoncePayload(payload); + this.frames.inline.rpcClient.invoke('receiveNewPaymentMethod', [payload]); + this.frames.modal.rpcClient.invoke('modalViewClose'); +}; + +Client.prototype._findClosest = function (node, tagName) { + tagName = tagName.toUpperCase(); + + do { + if (node.nodeName === tagName) { + return node; + } + } while (node = node.parentNode); + + throw 'Unable to find a valid ' + tagName; +}; + +Client.prototype.teardown = function (done) { + if (this.paypalModalView) { + this.paypalModalView.teardown(); + } + + this.braintreeBus.emit(constants.MODAL_FRAME_TEARDOWN_EVENT, bind(function () { + this.braintreeBus.emit(constants.INLINE_FRAME_TEARDOWN_EVENT, bind(function () { + this.destructor.teardown(bind(function (err) { + if (err) { return done(err); } + + this.braintreeBus.teardown(); + done(); + }, this)); + }, this)); + }, this)); +}; + +module.exports = Client; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"../shared/constants":240,"./api-proxy-server":235,"./frame-container":238,"./merchant-form-manager":239,"braintree-api":117,"braintree-bus":148,"braintree-paypal/src/external/views/app-view":183,"braintree-rpc":197,"braintree-utilities":215,"destructor":216}],237:[function(require,module,exports){ +'use strict'; + +var Client = require('./client'); +var VERSION = "1.9.0"; + +function create(options) { + var client = new Client(options); + client.initialize(); + + return client; +} + +module.exports = { + create: create, + VERSION: VERSION +}; + +},{"./client":236}],238:[function(require,module,exports){ +'use strict'; + +var BraintreeBus = require('braintree-bus'); +var constants = require('../shared/constants'); +var iFramer = require('iframer'); + +// TODO: move to shared and deduplicate from src/internal/util/dropin-util.js +var TRANSITION_END_EVENT_NAMES = { + transition: 'transitionend', + '-o-transition': 'otransitionEnd', + '-moz-transition': 'transitionend', + '-webkit-transition': 'webkitTransitionEnd' +}; + +function getTransitionEndEventName() { + var eventName; + var fakeEl = document.createElement('fakeelement'); + + for (eventName in TRANSITION_END_EVENT_NAMES) { + if (typeof fakeEl.style[eventName] !== 'undefined') { + return TRANSITION_END_EVENT_NAMES[eventName]; + } + } + return null; +} + +function listenForReady(el, braintreeBus) { + var transitionEndEvent = getTransitionEndEventName(); + + function handler(event) { + if (event.target === el && event.propertyName === 'height') { + braintreeBus.emit(BraintreeBus.events.ASYNC_DEPENDENCY_READY); + el.removeEventListener(transitionEndEvent, handler); + } + } + + if (transitionEndEvent) { + el.addEventListener(transitionEndEvent, handler); + } else { + setTimeout(function () { + braintreeBus.emit(BraintreeBus.events.ASYNC_DEPENDENCY_READY); + }, 500); + } +} + +function FrameContainer(endpoint, name, braintreeBus) { + var transition = 'height 210ms cubic-bezier(0.390, 0.575, 0.565, 1.000)'; + var element = iFramer({ + name: name, + width: '100%', + height: '68', + style: { + transition: transition, + WebkitTransition: transition, + MozTransition: transition, + msTransition: transition, + OTransition: transition, + border: '0', + zIndex: '9999' + } + }); + + this.element = element; + + // Delayed so that browsers won't cache iframe URLs. + setTimeout(function () { + element.src = endpoint + '#' + braintreeBus.channel; + }, 0); + + if (name === constants.INLINE_FRAME_NAME) { + listenForReady(element, braintreeBus); + } +} + +module.exports = FrameContainer; + +},{"../shared/constants":240,"braintree-bus":148,"iframer":220}],239:[function(require,module,exports){ +'use strict'; + +var utils = require('braintree-utilities'); +var FormNapper = require('form-napper'); + +function MerchantFormManager(options) { + this.formNapper = new FormNapper(options.form); + this.frames = options.frames; + this.onSubmit = options.onSubmit; + this.apiClient = options.apiClient; +} + +MerchantFormManager.prototype.initialize = function () { + if (this._isSubmitBased()) { + this._setElements(); + } + + this._setEvents(); + + return this; +}; + +MerchantFormManager.prototype.setNoncePayload = function (payload) { + this.noncePayload = payload; +}; + +MerchantFormManager.prototype.clearNoncePayload = function () { + this.noncePayload = null; +}; + +MerchantFormManager.prototype._isSubmitBased = function () { + return !this.onSubmit; +}; + +MerchantFormManager.prototype._isCallbackBased = function () { + return !!this.onSubmit; +}; + +MerchantFormManager.prototype._setElements = function () { + this.nonceInput = this.formNapper.inject('payment_method_nonce', ''); +}; + +MerchantFormManager.prototype._setEvents = function () { + this.formNapper.hijack(utils.bind(this._handleFormSubmit, this)); +}; + +MerchantFormManager.prototype._handleFormSubmit = function (event) { + if (this.noncePayload && this.noncePayload.nonce) { + this._handleNonceReply(event); + } else { + this.frames.inline.rpcClient.invoke('requestNonce', [], utils.bind(function (payload) { + this.setNoncePayload(payload); + this._handleNonceReply(event); + }, this)); + } +}; + +MerchantFormManager.prototype._handleNonceReply = function (event) { + if (this._isCallbackBased()) { + this.apiClient.sendAnalyticsEvents('dropin.web.end.callback', utils.bind(function () { + var payload = this.noncePayload; + + payload.originalEvent = event; + + this.onSubmit(payload); + + setTimeout(utils.bind(function () { + delete payload.originalEvent; + + this.frames.inline.rpcClient.invoke('clearLoadingState'); + this.frames.inline.rpcClient.invoke('receiveNewPaymentMethod', [payload]); + }, this), 200); + }, this)); + } else { + this._triggerFormSubmission(); + } +}; + +MerchantFormManager.prototype._triggerFormSubmission = function () { + this.nonceInput = this.formNapper.inject('payment_method_nonce', this.noncePayload.nonce); + + this.apiClient.sendAnalyticsEvents('dropin.web.end.auto-submit', utils.bind(function () { + this.formNapper.submit(); + }, this)); +}; + +MerchantFormManager.prototype.teardown = function () { + var form; + + if (this.nonceInput) { + form = this.formNapper.htmlForm; + form.removeChild(this.nonceInput); + } + + this.formNapper.detach(); +}; + +module.exports = MerchantFormManager; + +},{"braintree-utilities":215,"form-napper":219}],240:[function(require,module,exports){ +module.exports={ + "PAYPAL_INTEGRATION_NAME": "PayPal", + "INLINE_FRAME_NAME": "braintree-dropin-frame", + "MODAL_FRAME_NAME": "braintree-dropin-modal-frame", + "PAYMENT_METHOD_TYPES": ["CoinbaseAccount", "PayPalAccount", "CreditCard"], + "cssClassMap": { + "American Express": "american-express", + "Diners Club": "diners-club", + "DinersClub": "diners-club", + "Discover": "discover", + "JCB": "jcb", + "Maestro": "maestro", + "MasterCard": "master-card", + "Solo": "solo", + "Switch": "switch", + "UKMaestro": "maestro", + "UnionPay": "unionpay", + "Visa": "visa" + }, + "INLINE_FRAME_TEARDOWN_EVENT": "dropin:TEARDOWN_INLINE_FRAME", + "MODAL_FRAME_TEARDOWN_EVENT": "dropin:TEARDOWN_MODAL_FRAME" +} + +},{}],241:[function(require,module,exports){ +(function (global){ +'use strict'; +var ELEMENT_NODE = global.Node ? global.Node.ELEMENT_NODE : 1; + +function extractValues(node, results) { + results = results || {}; + + var child, i; + var children = node.children; + + for (i = 0; i < children.length; i++) { + child = children[i]; + + if (isBraintreeNode(child)) { + var dataAttr = child.getAttribute('data-braintree-name'); + + if (dataAttr === 'postal_code') { + results.billingAddress = { + postalCode: child.value + }; + } else { + results[dataAttr] = child.value; + } + + scrubAttributes(child); + } else if (child.children && child.children.length > 0) { + extractValues(child, results); + } + } + + return results; +} + +function scrubAttributes(node) { + try { + node.attributes.removeNamedItem('name'); + } catch (e) {} +} + +function scrubAllAttributes(node) { + extractValues(node); +} + +function isBraintreeNode(node) { + return node.nodeType === ELEMENT_NODE && node.attributes['data-braintree-name']; +} + +module.exports = { + extractValues: extractValues, + scrubAllAttributes: scrubAllAttributes, + scrubAttributes: scrubAttributes, + isBraintreeNode: isBraintreeNode +}; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],242:[function(require,module,exports){ +(function (global){ +'use strict'; + +var util = require('braintree-utilities'); +var fields = require('./fields'); +var Destructor = require('destructor'); +var Bus = require('braintree-bus'); +var PaymentMethodModel = require('./models/payment-method-model'); +var getNonceInput = require('./get-nonce-input'); +var ERROR_PAYLOAD = { + message: 'Unable to process payments at this time', + type: 'IMMEDIATE' +}; + +function Form(apiClient, configuration) { + var merchantConfiguration = configuration.merchantConfiguration; + var hasExistingInput = typeof merchantConfiguration.paymentMethodNonceInputField === 'object'; + + this.destructor = new Destructor(); + + this.apiClient = apiClient; + + this.isCreditCardForm = merchantConfiguration.useCreditCard === false ? false : true; + + this.htmlForm = document.getElementById(merchantConfiguration.id); + + this.paymentMethodNonceInput = getNonceInput(merchantConfiguration.paymentMethodNonceInputField); + this.htmlForm.appendChild(this.paymentMethodNonceInput); + this.destructor.registerFunctionForTeardown(util.bind(function () { + if (hasExistingInput) { + this.paymentMethodNonceInput.value = ''; + } else { + this.htmlForm.removeChild(this.paymentMethodNonceInput); + } + }, this)); + + this.model = new PaymentMethodModel(); + + this.bus = new Bus({ + merchantUrl: global.location.href, + channel: configuration.channel + }); + + this.setEvents(); + this.destructor.registerFunctionForTeardown(util.bind(function () { + this.bus.teardown(); + }, this)); +} + +Form.prototype.setEvents = function () { + this.onSubmitHandler = util.bind(this.handleSubmit, this); + this.onExternalNonceReceived = util.bind(this.onExternalNonceReceived, this); + this.clearExternalNonce = util.bind(this.clearExternalNonce, this); + + util.addEventListener(this.htmlForm, 'submit', this.onSubmitHandler); + this.destructor.registerFunctionForTeardown(util.bind(function () { + util.removeEventListener(this.htmlForm, 'submit', this.onSubmitHandler); + }, this)); + + this.bus.on(Bus.events.PAYMENT_METHOD_GENERATED, this.onExternalNonceReceived); + this.bus.on(Bus.events.PAYMENT_METHOD_CANCELLED, this.clearExternalNonce); +}; + +Form.prototype.handleSubmit = function (event) { + var type; + + if (event.preventDefault) { + event.preventDefault(); + } else { + event.returnValue = false; + } + + if (!this.isCreditCardForm) { + this.onNonceReceived(null, this.model.attributes); + return; + } + + type = this.model.get('type'); + + if (type && type !== 'CreditCard') { + fields.scrubAllAttributes(this.htmlForm); + this.onNonceReceived(null, this.model.attributes); + return; + } + + this.apiClient.tokenizeCard(fields.extractValues(this.htmlForm), util.bind(function (err, nonce, payload) { + if (err) { + this.onNonceReceived(ERROR_PAYLOAD, null); + } else { + this.model.set({ + nonce: nonce, + type: payload.type, + details: payload.details + }); + + this.onNonceReceived(null, this.model.attributes); + } + }, this)); +}; + +Form.prototype.writeNonceToDOM = function () { + this.paymentMethodNonceInput.value = this.model.get('nonce'); +}; + +Form.prototype.onExternalNonceReceived = function (payload) { + this.model.set(payload); + this.writeNonceToDOM(); +}; + +Form.prototype.clearExternalNonce = function () { + this.model.reset(); +}; + +Form.prototype.onNonceReceived = function (err) { + var form = this.htmlForm; + + if (err) { + this.bus.emit(Bus.events.ERROR, ERROR_PAYLOAD); + return; + } + + util.removeEventListener(form, 'submit', this.onSubmitHandler); + + this.writeNonceToDOM(); + + if (form.submit && (typeof form.submit === 'function' || form.submit.call)) { + form.submit(); + } else { + setTimeout(function () { + form.querySelector('[type="submit"]').click(); + }, 1); + } +}; + +Form.prototype.teardown = function () { + this.destructor.teardown(); +}; + +module.exports = Form; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"./fields":241,"./get-nonce-input":243,"./models/payment-method-model":244,"braintree-bus":247,"braintree-utilities":259,"destructor":260}],243:[function(require,module,exports){ +'use strict'; + +module.exports = function getNonceInput(paymentMethodNonceInputField) { + var nonceInputName; + + if (typeof paymentMethodNonceInputField === 'object') { + return paymentMethodNonceInputField; + } + + nonceInputName = 'payment_method_nonce'; + + if (typeof paymentMethodNonceInputField === 'string') { + nonceInputName = paymentMethodNonceInputField; + } + + var nonceInput = document.createElement('input'); + nonceInput.name = nonceInputName; + nonceInput.type = 'hidden'; + + return nonceInput; +}; + +},{}],244:[function(require,module,exports){ +'use strict'; + +function PaymentMethodModel() { + this.reset(); +} + +PaymentMethodModel.prototype.get = function (key) { + return this.attributes[key]; +} + +PaymentMethodModel.prototype.set = function (payload) { + this.attributes = payload || {}; +}; + +PaymentMethodModel.prototype.reset = function () { + this.attributes = {}; +} + +module.exports = PaymentMethodModel; + +},{}],245:[function(require,module,exports){ +'use strict'; + +module.exports = function validateAnnotations(htmlForm) { + var inputs = htmlForm.getElementsByTagName('*'); + var valid = {}; + + for (var i = 0; i < inputs.length; i++) { + var field = inputs[i].getAttribute('data-braintree-name'); + valid[field] = true; + } + + if (!valid.number) { + throw new Error('Unable to find an input with data-braintree-name="number" in your form. Please add one.'); + } + + if (valid.expiration_date) { + if (valid.expiration_month || valid.expiration_year) { + throw new Error('You have inputs with data-braintree-name="expiration_date" AND data-braintree-name="expiration_(year|month)". Please use either "expiration_date" or "expiration_year" and "expiration_month".'); + } + } else { + if (!valid.expiration_month && !valid.expiration_year) { + throw new Error('Unable to find an input with data-braintree-name="expiration_date" in your form. Please add one.'); + } + + if (!valid.expiration_month) { + throw new Error('Unable to find an input with data-braintree-name="expiration_month" in your form. Please add one.'); + } + + if (!valid.expiration_year) { + throw new Error('Unable to find an input with data-braintree-name="expiration_year" in your form. Please add one.'); + } + } +}; + +},{}],246:[function(require,module,exports){ +'use strict'; + +var Form = require('./lib/form'); +var validateAnnotations = require('./lib/validate-annotations'); + +function setup(apiClient, configuration) { + var merchantConfiguration = configuration.merchantConfiguration || {}; + var htmlForm = document.getElementById(merchantConfiguration.id); + var isCreditCardForm = merchantConfiguration.useCreditCard === false ? false : true; + + if (!htmlForm) { + throw new Error('Unable to find form with id: "' + merchantConfiguration.id + '"'); + } + + if (isCreditCardForm) { + validateAnnotations(htmlForm); + } + + return new Form(apiClient, configuration); +} + +module.exports = {setup: setup}; + +},{"./lib/form":242,"./lib/validate-annotations":245}],247:[function(require,module,exports){ +arguments[4][52][0].apply(exports,arguments) +},{"./lib/check-origin":248,"./lib/events":249,"dup":52,"framebus":250}],248:[function(require,module,exports){ +arguments[4][53][0].apply(exports,arguments) +},{"dup":53}],249:[function(require,module,exports){ +arguments[4][54][0].apply(exports,arguments) +},{"dup":54}],250:[function(require,module,exports){ +arguments[4][55][0].apply(exports,arguments) +},{"dup":55}],251:[function(require,module,exports){ +arguments[4][35][0].apply(exports,arguments) +},{"dup":35}],252:[function(require,module,exports){ +arguments[4][36][0].apply(exports,arguments) +},{"dup":36}],253:[function(require,module,exports){ +arguments[4][22][0].apply(exports,arguments) +},{"dup":22}],254:[function(require,module,exports){ +arguments[4][38][0].apply(exports,arguments) +},{"dup":38}],255:[function(require,module,exports){ +arguments[4][39][0].apply(exports,arguments) +},{"dup":39}],256:[function(require,module,exports){ +arguments[4][40][0].apply(exports,arguments) +},{"dup":40}],257:[function(require,module,exports){ +arguments[4][41][0].apply(exports,arguments) +},{"./array":251,"dup":41}],258:[function(require,module,exports){ +arguments[4][42][0].apply(exports,arguments) +},{"dup":42}],259:[function(require,module,exports){ +arguments[4][43][0].apply(exports,arguments) +},{"./lib/array":251,"./lib/base64":252,"./lib/dom":253,"./lib/events":254,"./lib/fn":255,"./lib/string":256,"./lib/url":257,"./lib/uuid":258,"dup":43}],260:[function(require,module,exports){ +arguments[4][80][0].apply(exports,arguments) +},{"batch-execute-functions":261,"braintree-utilities/lib/fn":262,"dup":80}],261:[function(require,module,exports){ +arguments[4][81][0].apply(exports,arguments) +},{"dup":81}],262:[function(require,module,exports){ +arguments[4][39][0].apply(exports,arguments) +},{"dup":39}],263:[function(require,module,exports){ +arguments[4][2][0].apply(exports,arguments) +},{"./coinbase-account":264,"./constants":265,"./credit-card":266,"./europe-bank-account":267,"./normalize-api-fields":269,"./parse-client-token":270,"./paypal-account":271,"./request/choose-driver":274,"./sepa-mandate":279,"./should-enable-cors":280,"./util":281,"braintree-3ds":290,"braintree-utilities":304,"dup":2}],264:[function(require,module,exports){ +arguments[4][3][0].apply(exports,arguments) +},{"dup":3}],265:[function(require,module,exports){ +arguments[4][4][0].apply(exports,arguments) +},{"dup":4}],266:[function(require,module,exports){ +arguments[4][5][0].apply(exports,arguments) +},{"dup":5}],267:[function(require,module,exports){ +arguments[4][6][0].apply(exports,arguments) +},{"dup":6}],268:[function(require,module,exports){ +arguments[4][7][0].apply(exports,arguments) +},{"./constants":265,"./parse-client-token":270,"./request/choose-driver":274,"./should-enable-cors":280,"./util":281,"dup":7}],269:[function(require,module,exports){ +arguments[4][8][0].apply(exports,arguments) +},{"dup":8}],270:[function(require,module,exports){ +arguments[4][9][0].apply(exports,arguments) +},{"./polyfill":272,"braintree-utilities":304,"dup":9}],271:[function(require,module,exports){ +arguments[4][10][0].apply(exports,arguments) +},{"dup":10}],272:[function(require,module,exports){ +arguments[4][11][0].apply(exports,arguments) +},{"dup":11}],273:[function(require,module,exports){ +arguments[4][12][0].apply(exports,arguments) +},{"../constants":265,"../util":281,"./parse-body":277,"./prep-body":278,"dup":12}],274:[function(require,module,exports){ +arguments[4][13][0].apply(exports,arguments) +},{"../util":281,"./ajax-driver":273,"./jsonp-driver":275,"dup":13}],275:[function(require,module,exports){ +arguments[4][14][0].apply(exports,arguments) +},{"../constants":265,"./jsonp":276,"dup":14}],276:[function(require,module,exports){ +arguments[4][15][0].apply(exports,arguments) +},{"../util":281,"dup":15}],277:[function(require,module,exports){ +arguments[4][16][0].apply(exports,arguments) +},{"dup":16}],278:[function(require,module,exports){ +arguments[4][17][0].apply(exports,arguments) +},{"dup":17,"lodash.isstring":312}],279:[function(require,module,exports){ +arguments[4][18][0].apply(exports,arguments) +},{"dup":18}],280:[function(require,module,exports){ +arguments[4][19][0].apply(exports,arguments) +},{"dup":19}],281:[function(require,module,exports){ +arguments[4][20][0].apply(exports,arguments) +},{"dup":20,"lodash.isempty":305,"lodash.isobject":311}],282:[function(require,module,exports){ +arguments[4][21][0].apply(exports,arguments) +},{"./lib/client":263,"./lib/get-configuration":268,"./lib/parse-client-token":270,"./lib/util":281,"dup":21}],283:[function(require,module,exports){ +arguments[4][22][0].apply(exports,arguments) +},{"dup":22}],284:[function(require,module,exports){ +arguments[4][23][0].apply(exports,arguments) +},{"dup":23}],285:[function(require,module,exports){ +arguments[4][24][0].apply(exports,arguments) +},{"dup":24}],286:[function(require,module,exports){ +arguments[4][25][0].apply(exports,arguments) +},{"dup":25}],287:[function(require,module,exports){ +arguments[4][26][0].apply(exports,arguments) +},{"./lib/dom":283,"./lib/events":284,"./lib/fn":285,"./lib/url":286,"dup":26}],288:[function(require,module,exports){ +arguments[4][27][0].apply(exports,arguments) +},{"../shared/receiver":295,"braintree-utilities":287,"dup":27}],289:[function(require,module,exports){ +arguments[4][28][0].apply(exports,arguments) +},{"./authorization_service":288,"./loader":291,"braintree-utilities":287,"dup":28}],290:[function(require,module,exports){ +arguments[4][29][0].apply(exports,arguments) +},{"./client":289,"dup":29}],291:[function(require,module,exports){ +arguments[4][30][0].apply(exports,arguments) +},{"./loader_display":292,"./loader_message":293,"./loader_spinner":294,"dup":30}],292:[function(require,module,exports){ +arguments[4][31][0].apply(exports,arguments) +},{"dup":31}],293:[function(require,module,exports){ +arguments[4][32][0].apply(exports,arguments) +},{"dup":32}],294:[function(require,module,exports){ +arguments[4][33][0].apply(exports,arguments) +},{"dup":33}],295:[function(require,module,exports){ +arguments[4][34][0].apply(exports,arguments) +},{"braintree-utilities":287,"dup":34}],296:[function(require,module,exports){ +arguments[4][35][0].apply(exports,arguments) +},{"dup":35}],297:[function(require,module,exports){ +arguments[4][36][0].apply(exports,arguments) +},{"dup":36}],298:[function(require,module,exports){ +arguments[4][22][0].apply(exports,arguments) +},{"dup":22}],299:[function(require,module,exports){ +arguments[4][38][0].apply(exports,arguments) +},{"dup":38}],300:[function(require,module,exports){ +arguments[4][39][0].apply(exports,arguments) +},{"dup":39}],301:[function(require,module,exports){ +arguments[4][40][0].apply(exports,arguments) +},{"dup":40}],302:[function(require,module,exports){ +arguments[4][41][0].apply(exports,arguments) +},{"./array":296,"dup":41}],303:[function(require,module,exports){ +arguments[4][42][0].apply(exports,arguments) +},{"dup":42}],304:[function(require,module,exports){ +arguments[4][43][0].apply(exports,arguments) +},{"./lib/array":296,"./lib/base64":297,"./lib/dom":298,"./lib/events":299,"./lib/fn":300,"./lib/string":301,"./lib/url":302,"./lib/uuid":303,"dup":43}],305:[function(require,module,exports){ +arguments[4][44][0].apply(exports,arguments) +},{"dup":44,"lodash.isarguments":306,"lodash.isarray":307,"lodash.isfunction":308,"lodash.isstring":312,"lodash.keys":309}],306:[function(require,module,exports){ +arguments[4][45][0].apply(exports,arguments) +},{"dup":45}],307:[function(require,module,exports){ +arguments[4][46][0].apply(exports,arguments) +},{"dup":46}],308:[function(require,module,exports){ +arguments[4][47][0].apply(exports,arguments) +},{"dup":47}],309:[function(require,module,exports){ +arguments[4][48][0].apply(exports,arguments) +},{"dup":48,"lodash._getnative":310,"lodash.isarguments":306,"lodash.isarray":307}],310:[function(require,module,exports){ +arguments[4][49][0].apply(exports,arguments) +},{"dup":49}],311:[function(require,module,exports){ +arguments[4][50][0].apply(exports,arguments) +},{"dup":50}],312:[function(require,module,exports){ +arguments[4][51][0].apply(exports,arguments) +},{"dup":51}],313:[function(require,module,exports){ +arguments[4][52][0].apply(exports,arguments) +},{"./lib/check-origin":314,"./lib/events":315,"dup":52,"framebus":316}],314:[function(require,module,exports){ +arguments[4][53][0].apply(exports,arguments) +},{"dup":53}],315:[function(require,module,exports){ +arguments[4][54][0].apply(exports,arguments) +},{"dup":54}],316:[function(require,module,exports){ +arguments[4][55][0].apply(exports,arguments) +},{"dup":55}],317:[function(require,module,exports){ +arguments[4][35][0].apply(exports,arguments) +},{"dup":35}],318:[function(require,module,exports){ +arguments[4][36][0].apply(exports,arguments) +},{"dup":36}],319:[function(require,module,exports){ +arguments[4][22][0].apply(exports,arguments) +},{"dup":22}],320:[function(require,module,exports){ +arguments[4][38][0].apply(exports,arguments) +},{"dup":38}],321:[function(require,module,exports){ +arguments[4][39][0].apply(exports,arguments) +},{"dup":39}],322:[function(require,module,exports){ +arguments[4][40][0].apply(exports,arguments) +},{"dup":40}],323:[function(require,module,exports){ +arguments[4][41][0].apply(exports,arguments) +},{"./array":317,"dup":41}],324:[function(require,module,exports){ +arguments[4][42][0].apply(exports,arguments) +},{"dup":42}],325:[function(require,module,exports){ +arguments[4][43][0].apply(exports,arguments) +},{"./lib/array":317,"./lib/base64":318,"./lib/dom":319,"./lib/events":320,"./lib/fn":321,"./lib/string":322,"./lib/url":323,"./lib/uuid":324,"dup":43}],326:[function(require,module,exports){ +arguments[4][80][0].apply(exports,arguments) +},{"batch-execute-functions":327,"braintree-utilities/lib/fn":328,"dup":80}],327:[function(require,module,exports){ +arguments[4][81][0].apply(exports,arguments) +},{"dup":81}],328:[function(require,module,exports){ +arguments[4][39][0].apply(exports,arguments) +},{"dup":39}],329:[function(require,module,exports){ +arguments[4][83][0].apply(exports,arguments) +},{"./lib/default-attributes":330,"dup":83,"lodash.assign":331,"lodash.isstring":342,"setattributes":343}],330:[function(require,module,exports){ +arguments[4][84][0].apply(exports,arguments) +},{"dup":84}],331:[function(require,module,exports){ +arguments[4][85][0].apply(exports,arguments) +},{"dup":85,"lodash._baseassign":332,"lodash._createassigner":334,"lodash.keys":338}],332:[function(require,module,exports){ +arguments[4][86][0].apply(exports,arguments) +},{"dup":86,"lodash._basecopy":333,"lodash.keys":338}],333:[function(require,module,exports){ +arguments[4][87][0].apply(exports,arguments) +},{"dup":87}],334:[function(require,module,exports){ +arguments[4][88][0].apply(exports,arguments) +},{"dup":88,"lodash._bindcallback":335,"lodash._isiterateecall":336,"lodash.restparam":337}],335:[function(require,module,exports){ +arguments[4][89][0].apply(exports,arguments) +},{"dup":89}],336:[function(require,module,exports){ +arguments[4][90][0].apply(exports,arguments) +},{"dup":90}],337:[function(require,module,exports){ +arguments[4][91][0].apply(exports,arguments) +},{"dup":91}],338:[function(require,module,exports){ +arguments[4][48][0].apply(exports,arguments) +},{"dup":48,"lodash._getnative":339,"lodash.isarguments":340,"lodash.isarray":341}],339:[function(require,module,exports){ +arguments[4][49][0].apply(exports,arguments) +},{"dup":49}],340:[function(require,module,exports){ +arguments[4][45][0].apply(exports,arguments) +},{"dup":45}],341:[function(require,module,exports){ +arguments[4][46][0].apply(exports,arguments) +},{"dup":46}],342:[function(require,module,exports){ +arguments[4][51][0].apply(exports,arguments) +},{"dup":51}],343:[function(require,module,exports){ +arguments[4][97][0].apply(exports,arguments) +},{"dup":97}],344:[function(require,module,exports){ +(function (global){ +'use strict'; + +var braintreeUtil = require('braintree-utilities'); +var Destructor = require('destructor'); +var Bus = require('braintree-bus'); +var AppView = require('./views/app-view'); +var LoggedInView = require('./views/logged-in-view'); +var LoggedOutView = require('./views/logged-out-view'); +var OverlayView = require('./views/overlay-view'); +var MerchantPageView = require('./views/merchant-page-view'); +var PaymentMethodNonceInputFieldView = require('./views/payment-method-nonce-input-field-view'); +var BridgeIframeView = require('./views/bridge-iframe-view'); +var browser = require('../shared/util/browser'); +var constants = require('../shared/constants'); +var util = require('../shared/util/util'); + +function Client(clientToken, options, channel) { + options = options || {}; + + this._clientToken = clientToken; + this._clientOptions = options; + + this._clientToken.correlationId = util.generateUid(); + + this.destructor = new Destructor(); + + this.channel = channel; + this.bus = new Bus({ + merchantUrl: global.location.href, + channel: this.channel + }); + + this.container = braintreeUtil.normalizeElement(options.container); + this.paymentMethodNonceInputField = options.paymentMethodNonceInputField; + + this.insertFrameFunction = options.insertFrame; + this.onSuccess = options.onSuccess; + this.onCancelled = options.onCancelled; + this.loggedInView = null; + this.loggedOutView = null; + this.appView = null; + this.merchantPageView = null; + this.paymentMethodNonceInputFieldView = null; + this.overlayView = null; + this.bridgeIframeView = null; + this.insertUI = options.headless !== true; +} + +Client.prototype.initialize = function () { + var clickLoginHandler = braintreeUtil.bind(this._handleClickLogin, this); + + this._createViews(); + + this.bus.on( + constants.events.GET_CLIENT_TOKEN, + braintreeUtil.bind(this._handleGetClientToken, this) + ); + + this.bus.on( + constants.events.GET_CLIENT_OPTIONS, + braintreeUtil.bind(this._handleGetClientOptions, this) + ); + + if (this.insertUI) { + this.bus.on( + Bus.events.PAYMENT_METHOD_GENERATED, + braintreeUtil.bind(this._handlePaymentMethodGenerated, this) + ); + } + + braintreeUtil.addEventListener(document.body, 'click', clickLoginHandler); + + this.destructor.registerFunctionForTeardown(function () { + braintreeUtil.removeEventListener(document.body, 'click', clickLoginHandler); + }); +}; + +Client.prototype._createViews = function () { + var i; + var views = []; + + if (browser.isBridgeIframeRequired()) { + this.bridgeIframeView = new BridgeIframeView({ + container: this.container, + paypalAssetsUrl: this._clientToken.paypal.assetsUrl, + channel: this.channel + }); + views.push(this.bridgeIframeView); + } + + this.appView = new AppView({ + insertFrameFunction: this.insertFrameFunction, + paypalAssetsUrl: this._clientToken.paypal.assetsUrl, + isHermes: util.isHermesConfiguration(this._clientOptions), + headless: this._clientOptions.headless, + channel: this.channel + }); + views.push(this.appView); + + if (this.insertUI) { + this.paymentMethodNonceInputFieldView = new PaymentMethodNonceInputFieldView({ + container: this.container, + el: this.paymentMethodNonceInputField, + channel: this.channel + }); + views.push(this.paymentMethodNonceInputFieldView); + + this.merchantPageView = new MerchantPageView({ + channel: this.channel + }); + views.push(this.merchantPageView); + + this.loggedInView = new LoggedInView({ + paypalAssetsUrl: this._clientToken.paypal.assetsUrl, + container: this.container, + channel: this.channel + }); + views.push(this.loggedInView); + + this.loggedOutView = new LoggedOutView({ + paypalAssetsUrl: this._clientToken.paypal.assetsUrl, + container: this.container, + isHermes: util.isHermesConfiguration(this._clientOptions), + locale: this._clientOptions.locale, + channel: this.channel + }); + views.push(this.loggedOutView); + + if (browser.isPopupSupported() && browser.isOverlaySupported()) { + this.overlayView = new OverlayView({ + paypalAssetsUrl: this._clientToken.paypal.assetsUrl, + onFocus: braintreeUtil.bind(function () { this.bus.emit(constants.events.FOCUS_APP); }, this), + onClose: braintreeUtil.bind(function () { this.bus.emit(constants.events.CLOSE_APP); }, this), + channel: this.channel + }); + views.push(this.overlayView); + } + } + + this.destructor.registerFunctionForTeardown(function () { + for (i = 0; i < views.length; i++) { + views[i].teardown(); + } + }); +}; + +Client.prototype._handleClickLogin = function (event) { + var target = event.target || event.srcElement; + + while (true) { // eslint-disable-line no-constant-condition + if (target == null) { return; } + if (target === event.currentTarget) { return; } + if (this._isButton(target)) { break; } + + target = target.parentNode; + } + + util.preventDefault(event); + + this.launch(); +}; + +Client.prototype.launch = function () { + this.appView.open(); +}; + +Client.prototype._isButton = function (node) { + var isPayPalButton = node.id === 'braintree-paypal-button'; + var isHermesButton = util.isHermesConfiguration(this._clientOptions) && + node.className.match(/paypal-button(?!-widget)/); + + return isPayPalButton || isHermesButton; +}; + +Client.prototype._handlePaymentMethodGenerated = function (bundle) { + if (bundle.type === constants.NONCE_TYPE && braintreeUtil.isFunction(this.onSuccess)) { + this.onSuccess(bundle); + } +}; + +Client.prototype._clientTokenData = function () { + return { + analyticsUrl: this._clientToken.analytics ? + this._clientToken.analytics.url : null, + authorizationFingerprint: this._clientToken.authorizationFingerprint, + clientApiUrl: this._clientToken.clientApiUrl, + displayName: this._clientOptions.displayName || this._clientToken.paypal.displayName, + paypalAssetsUrl: this._clientToken.paypal.assetsUrl, + paypalClientId: this._clientToken.paypal.clientId, + paypalPrivacyUrl: this._clientToken.paypal.privacyUrl, + paypalUserAgreementUrl: this._clientToken.paypal.userAgreementUrl, + billingAgreementEnabled: this._clientToken.paypal.billingAgreementsEnabled, + unvettedMerchant: this._clientToken.paypal.unvettedMerchant, + payeeEmail: this._clientToken.paypal.payeeEmail, + correlationId: this._clientToken.correlationId, + offline: this._clientOptions.offline || this._clientToken.paypal.environmentNoNetwork, + sdkVersion: this._clientToken.sdkVersion, + merchantAppId: this._clientToken.merchantAppId + }; +}; + +Client.prototype._handleGetClientToken = function (callback) { + callback(this._clientTokenData()); +}; + +Client.prototype._clientOptionsData = function () { + return { + locale: this._clientOptions.locale || 'en_us', + onetime: this._clientOptions.singleUse || false, + integration: this._clientOptions.integration || 'paypal', + enableShippingAddress: this._clientOptions.enableShippingAddress || false, + enableBillingAddress: this._clientOptions.enableBillingAddress || false, + enableHermes: util.isHermesConfiguration(this._clientOptions), + amount: this._clientOptions.amount || null, + currency: this._clientOptions.currency || null, + shippingAddressOverride: this._clientOptions.shippingAddressOverride || null, + enableCORS: this._clientOptions.enableCORS + }; +}; + +Client.prototype._handleGetClientOptions = function (callback) { + callback(this._clientOptionsData()); +}; + +Client.prototype.teardown = function () { + this.destructor.teardown(braintreeUtil.bind(function () { + this.bus.teardown(); + }, this)); +}; + +module.exports = Client; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"../shared/constants":355,"../shared/util/browser":362,"../shared/util/util":364,"./views/app-view":346,"./views/bridge-iframe-view":347,"./views/logged-in-view":348,"./views/logged-out-view":349,"./views/merchant-page-view":350,"./views/overlay-view":352,"./views/payment-method-nonce-input-field-view":353,"braintree-bus":313,"braintree-utilities":325,"destructor":326}],345:[function(require,module,exports){ +'use strict'; + +var Client = require('./client'); +var browser = require('../shared/util/browser'); +var constants = require('../shared/constants'); +var getLocale = require('../shared/get-locale'); +var isHermesConfiguration = require('../shared/util/util').isHermesConfiguration; +var isOneTimeHermesConfiguration = require('../shared/util/util').isOneTimeHermesConfiguration; +var VERSION = "1.6.0"; +var braintreeUtil = require('braintree-utilities'); +var braintreeApi = require('braintree-api'); + +function create(clientToken, options, channel) { + var client, onUnsupported; + options = options || {}; + onUnsupported = options.onUnsupported; + + if (typeof onUnsupported !== 'function') { + onUnsupported = function (error) { + try { + console.log(error); // eslint-disable-line no-console + } catch (e) {} // eslint-disable-line + }; + } + + if (!clientToken) { + onUnsupported(new Error('Parameter "clientToken" cannot be null')); + return null; + } + + clientToken = braintreeApi.parseClientToken(clientToken); + + if (!clientToken.paypalEnabled) { + onUnsupported(new Error('PayPal is not enabled')); + return null; + } + + if (!browser.detectedPostMessage()) { + onUnsupported(new Error('unsupported browser detected')); + return null; + } + + if (!options.container) { + onUnsupported(new Error('Please supply a container for the PayPal button to be appended to')); + return null; + } + + if (!isBrowserSecure(clientToken, options)) { + onUnsupported(new Error('unsupported protocol detected')); + return null; + } + + if (isMisconfiguredUnvettedMerchant(clientToken, options)) { + onUnsupported(new Error('Unvetted merchant client token does not include a payee email')); + return null; + } + + if (isHermesConfiguration(options)) { + if (!isHermesSupportedCountry(options.locale)) { + onUnsupported(new Error('This PayPal integration does not support this country')); + return null; + } + } + + if (isOneTimeHermesConfiguration(options)) { + if (!isHermesSupportedCurrency(options.currency)) { + onUnsupported(new Error('This PayPal integration does not support this currency')); + return null; + } + + if (!isValidAmount(options.amount)) { + onUnsupported(new Error('Amount must be a number')); + return null; + } + } + + client = new Client(clientToken, options, channel); + client.initialize(); + + return client; +} + +function isSupportedOption(option, supported) { + var i; + var supportedLength = supported.length; + var isSupported = false; + + for (i = 0; i < supportedLength; i++) { + if (option.toLowerCase() === supported[i].toLowerCase()) { + isSupported = true; + } + } + + return isSupported; +} + +function isHermesSupportedCurrency(currency) { + return isSupportedOption(currency, constants.HERMES_SUPPORTED_CURRENCIES); +} + +function isHermesSupportedCountry(locale) { + return isSupportedOption(getLocale(locale).split('_')[1], constants.HERMES_SUPPORTED_COUNTRIES); +} + +function isValidAmount(amount) { + amount = parseFloat(amount); + return typeof amount === 'number' && !isNaN(amount) && amount >= 0; +} + +function isMisconfiguredUnvettedMerchant(clientToken, options) { + return clientToken.paypal.unvettedMerchant && (!isHermesConfiguration(options) || !clientToken.paypal.payeeEmail); +} + +function isBrowserSecure(clientToken, options) { + if (clientToken.paypal.allowHttp) { return true; } + if (browser.isPopupSupported()) { return true; } + if ('merchantHttps' in options) { return options.merchantHttps; } + + return braintreeUtil.isBrowserHttps(); +} + +module.exports = { + create: create, + VERSION: VERSION +}; + +},{"../shared/constants":355,"../shared/get-locale":357,"../shared/util/browser":362,"../shared/util/util":364,"./client":344,"braintree-api":282,"braintree-utilities":325}],346:[function(require,module,exports){ +arguments[4][183][0].apply(exports,arguments) +},{"../../shared/constants":355,"../../shared/util/browser":362,"./modal-view":351,"./popup-view":354,"braintree-bus":313,"braintree-utilities":325,"destructor":326,"dup":183}],347:[function(require,module,exports){ +'use strict'; + +var constants = require('../../shared/constants'); +var iframer = require('iframer'); + +function BridgeIframeView(options) { + this.options = options || {}; + + this.el = iframer({ + src: this._buildUrl(), + name: constants.BRIDGE_FRAME_NAME, + height: 1, + width: 1, + style: { + position: 'static', + top: 0, + left: 0, + bottom: 0, + padding: 0, + margin: 0, + border: 0, + outline: 'none', + background: 'transparent' + } + }); + + this.options.container.appendChild(this.el); +} + +BridgeIframeView.prototype._buildUrl = function () { + var url = this.options.paypalAssetsUrl; + url += '/pwpp/'; + url += constants.VERSION; + url += '/html/bridge-frame.html'; + url += '#' + this.options.channel; + + return url; +}; + +BridgeIframeView.prototype.teardown = function () { + this.options.container.removeChild(this.el); +}; + +module.exports = BridgeIframeView; + +},{"../../shared/constants":355,"iframer":329}],348:[function(require,module,exports){ +(function (global){ +'use strict'; + +var braintreeUtil = require('braintree-utilities'); +var Destructor = require('destructor'); +var Bus = require('braintree-bus'); +var util = require('../../shared/util/util'); +var dom = require('../../shared/util/dom'); +var constants = require('../../shared/constants'); + +function LoggedInView(options) { + this.options = options || {}; + this.wrapper = this.options.container || document.body; + + this.destructor = new Destructor(); + + this.bus = new Bus({ + merchantUrl: global.location.href, + channel: options.channel + }); + + this._initialize(); +} + +LoggedInView.prototype._initialize = function () { + var clickLogoutHandler = braintreeUtil.bind(this._handleClickLogout, this); + + this._createViewContainer(); + this._createPayPalName(); + this._createEmailNode(); + this._createLogoutNode(); + + braintreeUtil.addEventListener(this.logoutNode, 'click', clickLogoutHandler); + + this.destructor.registerFunctionForTeardown(braintreeUtil.bind(function () { + braintreeUtil.removeEventListener(this.logoutNode, 'click', clickLogoutHandler); + }, this)); + + this.bus.on(Bus.events.PAYMENT_METHOD_GENERATED, braintreeUtil.bind(this._handlePaymentMethodGenerated, this)); + this.bus.on(Bus.events.PAYMENT_METHOD_CANCELLED, braintreeUtil.bind(this._handlePaymentMethodCancelled, this)); +}; + +LoggedInView.prototype._createViewContainer = function () { + var cssStyles = [ + 'display: none', + 'max-width: 500px', + 'overflow: hidden', + 'padding: 16px', + 'background-image: url(' + this.options.paypalAssetsUrl + '/pwpp/' + constants.VERSION + '/images/paypal-small.png)', + 'background-image: url(' + this.options.paypalAssetsUrl + '/pwpp/' + constants.VERSION + '/images/paypal-small.svg), none', + 'background-position: 20px 50%', + 'background-repeat: no-repeat', + 'background-size: 13px 15px', + 'border-top: 1px solid #d1d4d6', + 'border-bottom: 1px solid #d1d4d6' + ].join(';'); + + this.container = document.createElement('div'); + this.container.id = 'braintree-paypal-loggedin'; + this.container.style.cssText = cssStyles; + + this.wrapper.appendChild(this.container); +}; + +LoggedInView.prototype._createPayPalName = function () { + var cssStyles = [ + 'color: #283036', + 'font-size: 13px', + 'font-weight: 800', + 'font-family: "Helvetica Neue", Helvetica, Arial, sans-serif', + 'margin-left: 36px', + '-webkit-font-smoothing: antialiased', + '-moz-font-smoothing: antialiased', + '-ms-font-smoothing: antialiased', + 'font-smoothing: antialiased' + ].join(';'); + + this.payPalName = document.createElement('span'); + this.payPalName.id = 'bt-pp-name'; + this.payPalName.innerHTML = 'PayPal'; + this.payPalName.style.cssText = cssStyles; + + return this.container.appendChild(this.payPalName); +}; + +LoggedInView.prototype._createEmailNode = function () { + var cssStyles = [ + 'color: #6e787f', + 'font-size: 13px', + 'font-family: "Helvetica Neue", Helvetica, Arial, sans-serif', + 'margin-left: 5px', + '-webkit-font-smoothing: antialiased', + '-moz-font-smoothing: antialiased', + '-ms-font-smoothing: antialiased', + 'font-smoothing: antialiased' + ].join(';'); + + this.emailNode = document.createElement('span'); + this.emailNode.id = 'bt-pp-email'; + this.emailNode.style.cssText = cssStyles; + + this.container.appendChild(this.emailNode); +}; + +LoggedInView.prototype._createLogoutNode = function () { + var cssStyles = [ + 'color: #3d95ce', + 'font-size: 11px', + 'font-family: "Helvetica Neue", Helvetica, Arial, sans-serif', + 'line-height: 20px', + 'margin: 0 0 0 25px', + 'padding: 0', + 'background-color: transparent', + 'border: 0', + 'cursor: pointer', + 'text-decoration: underline', + 'float: right', + '-webkit-font-smoothing: antialiased', + '-moz-font-smoothing: antialiased', + '-ms-font-smoothing: antialiased', + 'font-smoothing: antialiased' + ].join(';'); + + this.logoutNode = document.createElement('button'); + this.logoutNode.id = 'bt-pp-cancel'; + this.logoutNode.innerHTML = 'Cancel'; + this.logoutNode.style.cssText = cssStyles; + + this.container.appendChild(this.logoutNode); +}; + +LoggedInView.prototype.show = function (email) { + this.container.style.display = 'block'; + dom.setTextContent(this.emailNode, email); +}; + +LoggedInView.prototype.hide = function () { + this.container.style.display = 'none'; +}; + +LoggedInView.prototype._handleClickLogout = function (event) { + util.preventDefault(event); + + this.bus.emit(Bus.events.PAYMENT_METHOD_CANCELLED, {source: constants.PAYPAL_INTEGRATION_NAME}); +}; + +LoggedInView.prototype._handlePaymentMethodGenerated = function (bundle) { + var email; + + if (bundle.type === constants.NONCE_TYPE) { + email = bundle && bundle.details && bundle.details.email ? bundle.details.email : ''; + this.show(email); + } +}; + +LoggedInView.prototype._handlePaymentMethodCancelled = function (event) { + if (event.source === constants.PAYPAL_INTEGRATION_NAME) { + this.hide(); + } +}; + +LoggedInView.prototype.teardown = function () { + this.wrapper.removeChild(this.container); + this.destructor.teardown(); + this.bus.teardown(); +}; + +module.exports = LoggedInView; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"../../shared/constants":355,"../../shared/util/dom":363,"../../shared/util/util":364,"braintree-bus":313,"braintree-utilities":325,"destructor":326}],349:[function(require,module,exports){ +(function (global){ +'use strict'; + +var braintreeUtil = require('braintree-utilities'); +var Bus = require('braintree-bus'); +var constants = require('../../shared/constants'); +var getLocale = require('../../shared/get-locale'); + +function LoggedOutView(options) { + this.options = options; + this.wrapper = this.options.container || document.body; + + this.bus = new Bus({ + merchantUrl: global.location.href, + channel: options.channel + }); + + this._initialize(); +} + +LoggedOutView.prototype._initialize = function () { + this.createViewContainer(); + + if (this.options.isHermes) { + this.createCheckoutWithPayPalButton(); + } else { + this.createPayWithPayPalButton(); + } + + this.bus.on(Bus.events.PAYMENT_METHOD_GENERATED, braintreeUtil.bind(this._handlePaymentMethodGenerated, this)); + this.bus.on(Bus.events.PAYMENT_METHOD_CANCELLED, braintreeUtil.bind(this._handlePaymentMethodCancelled, this)); +}; + +LoggedOutView.prototype.createViewContainer = function () { + this.container = document.createElement('div'); + this.container.id = 'braintree-paypal-loggedout'; + + this.wrapper.appendChild(this.container); + this.loginNode = this.container; +}; + +LoggedOutView.prototype.createPayWithPayPalButton = function () { + var element = document.createElement('a'); + var image = new Image(); + var imageCssText = [ + 'max-width: 100%', + 'display: block', + 'width: 100%', + 'height: 100%', + 'outline: none', + 'border: 0' + ].join(';'); + var cssStyles = [ + 'display: block', + 'width: 115px', + 'height: 44px', + 'overflow: hidden' + ].join(';'); + + element.id = 'braintree-paypal-button'; + element.href = '#'; + element.style.cssText = cssStyles; + + image.src = this.options.paypalAssetsUrl + '/pwpp/' + constants.VERSION + '/images/pay-with-paypal.png'; + image.setAttribute('alt', 'Pay with PayPal'); + image.style.cssText = imageCssText; + + element.appendChild(image); + this.container.appendChild(element); +}; + +LoggedOutView.prototype.createCheckoutWithPayPalButton = function () { + var script = document.createElement('script'); + + script.src = '//www.paypalobjects.com/api/button.js'; + script.async = true; + script.setAttribute('data-merchant', 'merchant-id'); + script.setAttribute('data-button', 'checkout'); + script.setAttribute('data-type', 'button'); + script.setAttribute('data-width', '150'); + script.setAttribute('data-height', '44'); + script.setAttribute('data-lc', getLocale(this.options.locale)); + + this.container.appendChild(script); +}; + +LoggedOutView.prototype.show = function () { + this.container.style.display = 'block'; +}; + +LoggedOutView.prototype.hide = function () { + this.container.style.display = 'none'; +}; + +LoggedOutView.prototype._handlePaymentMethodGenerated = function (bundle) { + if (bundle.type === constants.NONCE_TYPE) { + this.hide(); + } +}; + +LoggedOutView.prototype._handlePaymentMethodCancelled = function (event) { + if (event.source === constants.PAYPAL_INTEGRATION_NAME) { + this.show(); + } +}; + +LoggedOutView.prototype.teardown = function () { + this.wrapper.removeChild(this.container); + this.bus.teardown(); +}; + +module.exports = LoggedOutView; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"../../shared/constants":355,"../../shared/get-locale":357,"braintree-bus":313,"braintree-utilities":325}],350:[function(require,module,exports){ +(function (global){ +'use strict'; + +var Bus = require('braintree-bus'); +var braintreeUtil = require('braintree-utilities'); +var constants = require('../../shared/constants'); + +function MerchantPageView(options) { + this.options = options; + + this.bus = new Bus({ + merchantUrl: global.location.href, + channel: options.channel + }); + + this.bus.on(constants.events.UI_MODAL_DID_OPEN, braintreeUtil.bind(this.lockWindowSize, this)); + this.bus.on(constants.events.UI_MODAL_DID_CLOSE, braintreeUtil.bind(this.unlockWindowSize, this)); +} + +MerchantPageView.prototype.lockWindowSize = function () { + this.defaultStyles = getMerchantPageDefaultStyles(); + document.documentElement.style.height = '100%'; + document.documentElement.style.overflow = 'hidden'; + document.body.style.height = '100%'; + document.body.style.overflow = 'hidden'; +}; + +MerchantPageView.prototype.unlockWindowSize = function () { + if (this.defaultStyles) { + document.documentElement.style.height = this.defaultStyles.html.styles.height; + document.documentElement.style.overflow = this.defaultStyles.html.styles.overflow; + document.body.style.height = this.defaultStyles.body.styles.height; + document.body.style.overflow = this.defaultStyles.body.styles.overflow; + delete this.defaultStyles; + } +}; + +MerchantPageView.prototype._handleUIModalDidOpen = function (event) { + if (event.source === constants.PAYPAL_INTEGRATION_NAME) { + this.lockWindowSize(); + } +}; + +MerchantPageView.prototype._handleUIModalDidClose = function (event) { + if (event.source === constants.PAYPAL_INTEGRATION_NAME) { + this.unlockWindowSize(); + } +}; + +MerchantPageView.prototype.teardown = function () { + this.unlockWindowSize(); + this.bus.teardown(); +}; + +function getStyles(element) { + var computedStyles = window.getComputedStyle ? getComputedStyle(element) : element.currentStyle; + return { + overflow: computedStyles.overflow || '', + height: element.style.height || '' + }; +} + +function getMerchantPageDefaultStyles() { + return { + html: { + node: document.documentElement, + styles: getStyles(document.documentElement) + }, + body: { + node: document.body, + styles: getStyles(document.body) + } + }; +} + +module.exports = MerchantPageView; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"../../shared/constants":355,"braintree-bus":313,"braintree-utilities":325}],351:[function(require,module,exports){ +arguments[4][184][0].apply(exports,arguments) +},{"../../shared/constants":355,"../../shared/util/browser":362,"braintree-bus":313,"braintree-utilities":325,"dup":184,"iframer":329}],352:[function(require,module,exports){ +(function (global){ +'use strict'; +var braintreeUtil = require('braintree-utilities'); +var Destructor = require('destructor'); +var Bus = require('braintree-bus'); +var constants = require('../../shared/constants'); + +function OverlayView(options) { + this.options = options; + this.spriteSrc = this.options.paypalAssetsUrl + '/pwpp/' + constants.VERSION + '/images/pp_overlay_sprite.png'; + + this.bus = new Bus({ + merchantUrl: global.location.href, + channel: options.channel + }); + + this.destructor = new Destructor(); + + this._create(); + this._setupEvents(); + + this.bus.on(Bus.events.UI_POPUP_DID_OPEN, braintreeUtil.bind(this._handleUIPopupDidOpen, this)); + this.bus.on(Bus.events.UI_POPUP_DID_CLOSE, braintreeUtil.bind(this._handleUIPopupDidClose, this)); +} + +OverlayView.prototype.open = function () { + if (document.body.contains(this.el)) { + return; + } + + document.body.appendChild(this.el); +}; + +OverlayView.prototype.close = function () { + if (document.body.contains(this.el)) { + document.body.removeChild(this.el); + } +}; + +OverlayView.prototype._handleUIPopupDidClose = function (event) { + if (event.source === constants.PAYPAL_INTEGRATION_NAME) { + this.close(); + } +}; + +OverlayView.prototype._handleUIPopupDidOpen = function (event) { + if (event.source === constants.PAYPAL_INTEGRATION_NAME) { + this.open(); + } +}; + +OverlayView.prototype._create = function () { + this.el = document.createElement('div'); + + this.el.className = 'bt-overlay'; + + this._setStyles(this.el, [ + 'z-index: 20001', + 'position: fixed', + 'top: 0', + 'left: 0', + 'height: 100%', + 'width: 100%', + 'text-align: center', + 'background: #000', + 'background: rgba(0,0,0,0.7)', + '-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=52)"' + ]); + + this.el.appendChild(this._createCloseIcon()); + this.el.appendChild(this._createMessage()); +}; + +OverlayView.prototype._createCloseIcon = function () { + this.closeIcon = document.createElement('div'); + + this.closeIcon.className = 'bt-close-overlay'; + + this._setStyles(this.closeIcon, [ + 'position: absolute', + 'top: 10px', + 'right: 10px', + 'cursor: pointer', + 'background: url(' + this.spriteSrc + ') no-repeat 0 -67px', + 'height: 14px', + 'width: 14px' + ]); + + return this.closeIcon; +}; + +OverlayView.prototype._createMessage = function () { + var message = document.createElement('div'); + + this._setStyles(message, [ + 'position: relative', + 'top: 50%', + 'max-width: 350px', + 'font-family: "HelveticaNeue", "HelveticaNeue-Light", "Helvetica Neue Light", helvetica, arial, sans-serif', + 'font-size: 14px', + 'line-height: 20px', + 'margin: -70px auto 0' + ]); + + message.appendChild(this._createLogo()); + message.appendChild(this._createExplanation()); + message.appendChild(this._createFocusLink()); + + return message; +}; + +OverlayView.prototype._createExplanation = function () { + var explanation = document.createElement('div'); + + this._setStyles(explanation, [ + 'color: #FFF', + 'margin-bottom: 20px' + ]); + + explanation.innerHTML = 'Don\'t see the secure PayPal browser? We\'ll help you re-launch the window to complete your purchase.'; + + return explanation; +}; + +OverlayView.prototype._createLogo = function () { + var logo = document.createElement('div'); + + this._setStyles(logo, [ + 'background: url(' + this.spriteSrc + ') no-repeat 0 0', + 'width: 94px', + 'height: 25px', + 'margin: 0 auto 26px auto' + ]); + + return logo; +}; + +OverlayView.prototype._createFocusLink = function () { + this.focusLink = document.createElement('a'); + + this._setStyles(this.focusLink, [ + 'color: #009be1', + 'cursor: pointer' + ]); + + this.focusLink.innerHTML = 'Continue'; + + return this.focusLink; +}; + +OverlayView.prototype._setStyles = function (el, styles) { + var cssStyles = styles.join(';'); + el.style.cssText = cssStyles; +}; + +OverlayView.prototype._setupEvents = function () { + var clickCloseHandler = braintreeUtil.bind(this._handleClose, this); + var clickFocusHandler = braintreeUtil.bind(this._handleFocus, this); + + braintreeUtil.addEventListener(this.closeIcon, 'click', clickCloseHandler); + braintreeUtil.addEventListener(this.focusLink, 'click', clickFocusHandler); + + this.destructor.registerFunctionForTeardown(braintreeUtil.bind(function () { + braintreeUtil.removeEventListener(this.closeIcon, 'click', clickCloseHandler); + braintreeUtil.removeEventListener(this.focusLink, 'click', clickFocusHandler); + }, this)); +}; + +OverlayView.prototype._handleClose = function (event) { + event.preventDefault(); + this.close(); + + if (braintreeUtil.isFunction(this.options.onClose)) { + this.options.onClose(); + } +}; + +OverlayView.prototype._handleFocus = function (event) { + event.preventDefault(); + + if (braintreeUtil.isFunction(this.options.onFocus)) { + this.options.onFocus(); + } +}; + +OverlayView.prototype.teardown = function () { + this.bus.teardown(); + this.destructor.teardown(); + this.close(); +}; + +module.exports = OverlayView; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"../../shared/constants":355,"braintree-bus":313,"braintree-utilities":325,"destructor":326}],353:[function(require,module,exports){ +(function (global){ +'use strict'; + +var braintreeUtil = require('braintree-utilities'); +var Destructor = require('destructor'); +var Bus = require('braintree-bus'); +var constants = require('../../shared/constants'); + +function PaymentMethodNonceInputFieldView(options) { + this.options = options || {}; + this.container = this.options.container || document.body; + this.el = this.options.el; + + this.destructor = new Destructor(); + + this.bus = new Bus({ + merchantUrl: global.location.href, + channel: options.channel + }); + + this._initialize(); +} + +PaymentMethodNonceInputFieldView.prototype._initialize = function () { + if (!braintreeUtil.isFunction(this.el)) { + if (this.el != null) { + this.el = braintreeUtil.normalizeElement(this.el); + + this.destructor.registerFunctionForTeardown(braintreeUtil.bind(function () { + this.clear(); + }, this)); + } else { + this.el = this.create(); + } + } + + this.bus.on(Bus.events.PAYMENT_METHOD_GENERATED, braintreeUtil.bind(this._handlePaymentMethodGenerated, this)); + this.bus.on(Bus.events.PAYMENT_METHOD_CANCELLED, braintreeUtil.bind(this._handlePaymentMethodCancelled, this)); +}; + +PaymentMethodNonceInputFieldView.prototype.create = function () { + var input = document.createElement('input'); + input.name = 'payment_method_nonce'; + input.type = 'hidden'; + this.container.appendChild(input); + + this.destructor.registerFunctionForTeardown(braintreeUtil.bind(function () { + this.container.removeChild(input); + }, this)); + + return input; +}; + +PaymentMethodNonceInputFieldView.prototype.value = function (value) { + if (braintreeUtil.isFunction(this.el)) { + this.el(value); + } else { + this.el.value = value; + } +}; + +PaymentMethodNonceInputFieldView.prototype.clear = function () { + this.value(''); +}; + +PaymentMethodNonceInputFieldView.prototype._handlePaymentMethodCancelled = function (event) { + if (event.source === constants.PAYPAL_INTEGRATION_NAME) { + this.clear(); + } +}; + +PaymentMethodNonceInputFieldView.prototype._handlePaymentMethodGenerated = function (bundle) { + if (bundle.type === constants.NONCE_TYPE) { + this.value(bundle.nonce); + } +}; + +PaymentMethodNonceInputFieldView.prototype.teardown = function () { + this.destructor.teardown(); + this.bus.teardown(); +}; + +module.exports = PaymentMethodNonceInputFieldView; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"../../shared/constants":355,"braintree-bus":313,"braintree-utilities":325,"destructor":326}],354:[function(require,module,exports){ +arguments[4][185][0].apply(exports,arguments) +},{"../../shared/constants":355,"../../shared/useragent/browser":358,"braintree-bus":313,"dup":185}],355:[function(require,module,exports){ +arguments[4][186][0].apply(exports,arguments) +},{"dup":186}],356:[function(require,module,exports){ +'use strict'; + +module.exports = { + us: 'en_us', + gb: 'en_uk', + uk: 'en_uk', + de: 'de_de', + fr: 'fr_fr', + it: 'it_it', + es: 'es_es', + ca: 'en_ca', + au: 'en_au', + at: 'de_de', + be: 'en_us', + ch: 'de_de', + dk: 'da_dk', + nl: 'nl_nl', + no: 'no_no', + pl: 'pl_pl', + se: 'sv_se', + tr: 'tr_tr', + bg: 'en_us', + cy: 'en_us', + hr: 'en_us', + is: 'en_us', + kh: 'en_us', + mt: 'en_us', + my: 'en_us', + ru: 'ru_ru' +}; + +},{}],357:[function(require,module,exports){ +'use strict'; + +var countryCodeLookupTable = require('../shared/data/country-code-lookup'); + +function isFormatted(code) { + return code.indexOf('_') !== -1 && code.length === 5; +} + +function queryTable(code) { + var key, match; + + for (key in countryCodeLookupTable) { + if (countryCodeLookupTable.hasOwnProperty(key)) { + if (key === code) { + match = countryCodeLookupTable[key]; + } else if (countryCodeLookupTable[key] === code) { + match = countryCodeLookupTable[key]; + } + } + } + + return match; +} + +function getLocale(code) { + var match, pieces; + + code = code ? code.toLowerCase() : 'us'; + code = code.replace(/-/g, '_'); + + match = isFormatted(code) ? code : queryTable(code); + + if (match) { + pieces = match.split('_'); + return [pieces[0], pieces[1].toUpperCase()].join('_'); + } + + return 'en_US'; +} + +module.exports = getLocale; + +},{"../shared/data/country-code-lookup":356}],358:[function(require,module,exports){ +arguments[4][187][0].apply(exports,arguments) +},{"./platform":360,"./useragent":361,"dup":187}],359:[function(require,module,exports){ +arguments[4][188][0].apply(exports,arguments) +},{"./platform":360,"./useragent":361,"dup":188}],360:[function(require,module,exports){ +arguments[4][189][0].apply(exports,arguments) +},{"./useragent":361,"dup":189}],361:[function(require,module,exports){ +arguments[4][190][0].apply(exports,arguments) +},{"dup":190}],362:[function(require,module,exports){ +arguments[4][191][0].apply(exports,arguments) +},{"../useragent/browser":358,"../useragent/device":359,"../useragent/platform":360,"../useragent/useragent":361,"dup":191}],363:[function(require,module,exports){ +'use strict'; + +function setTextContent(element, content) { + var property = 'innerText'; + if (document && document.body) { + if ('textContent' in document.body) { + property = 'textContent'; + } + } + element[property] = content; +} + +module.exports = { + setTextContent: setTextContent +}; + +},{}],364:[function(require,module,exports){ +'use strict'; + +var trim = typeof String.prototype.trim === 'function' ? + function (str) { return str.trim(); } : + function (str) { return str.replace(/^\s+|\s+$/, ''); }; + +var b2a = typeof window.btoa === 'function' ? + function (str) { return window.btoa(str); } : + function (str) { + var keyStr = + 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; + var output = ''; + var chr1, chr2, chr3, enc1, enc2, enc3, enc4; + var i = 0; + + while (i < str.length) { + chr1 = str.charCodeAt(i++); + chr2 = str.charCodeAt(i++); + chr3 = str.charCodeAt(i++); + + enc1 = chr1 >> 2; + enc2 = (chr1 & 3) << 4 | chr2 >> 4; + enc3 = (chr2 & 15) << 2 | chr3 >> 6; + enc4 = chr3 & 63; + + if (isNaN(chr2)) { + enc3 = enc4 = 64; + } else if (isNaN(chr3)) { + enc4 = 64; + } + + output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + + keyStr.charAt(enc3) + keyStr.charAt(enc4); + } + + return output; + }; + +function generateUid() { + var i, r; + var uid = ''; + + for (i = 0; i < 32; i++) { + r = Math.floor(Math.random() * 16); + uid += r.toString(16); + } + + return uid; +} + +function castToBoolean(value) { + return /^(true|1)$/i.test(value); +} + +function htmlEscape(str) { + return str.replace(/&/g, '&') + .replace(//g, '>') + .replace(/\"/g, '"') + .replace(/\'/g, '''); +} + +function parseUrlParams(url) { + var arr, i, n, parts, index, key, value, encodedValue; + var startIndex = url.indexOf('?'); + var values = {}; + + if (startIndex >= 0) { + url = url.substr(startIndex + 1); + } + + if (url.length === 0) { + return null; + } + + arr = url.split('&'); + for (i = 0, n = arr.length; i < n; i++) { + parts = arr[i]; + index = parts.indexOf('='); + key = parts.substr(0, index); + encodedValue = parts.substr(index + 1); + value = decodeURIComponent(encodedValue); + value = value.replace(//g, '>'); + + if (value === 'false') { + value = false; + } + if (value == null || value === 'true') { + value = true; + } + values[key] = value; + } + + return values; +} + +function preventDefault(event) { + if (event.preventDefault) { + event.preventDefault(); + } else { + event.returnValue = false; + } +} + +function isOneTimeHermesConfiguration(options) { + return !!options.singleUse && !!options.amount && !!options.currency; +} + +function isBillingAgreementHermesConfiguration(options) { + return !!options.billingAgreementEnabled; +} + +function isHermesConfiguration(options) { + return isBillingAgreementHermesConfiguration(options) || isOneTimeHermesConfiguration(options); +} + +module.exports = { + trim: trim, + btoa: b2a, + generateUid: generateUid, + castToBoolean: castToBoolean, + htmlEscape: htmlEscape, + parseUrlParams: parseUrlParams, + preventDefault: preventDefault, + isOneTimeHermesConfiguration: isOneTimeHermesConfiguration, + isBillingAgreementHermesConfiguration: isBillingAgreementHermesConfiguration, + isHermesConfiguration: isHermesConfiguration +}; + +},{}],365:[function(require,module,exports){ +arguments[4][35][0].apply(exports,arguments) +},{"dup":35}],366:[function(require,module,exports){ +arguments[4][36][0].apply(exports,arguments) +},{"dup":36}],367:[function(require,module,exports){ +arguments[4][22][0].apply(exports,arguments) +},{"dup":22}],368:[function(require,module,exports){ +arguments[4][38][0].apply(exports,arguments) +},{"dup":38}],369:[function(require,module,exports){ +arguments[4][39][0].apply(exports,arguments) +},{"dup":39}],370:[function(require,module,exports){ +arguments[4][40][0].apply(exports,arguments) +},{"dup":40}],371:[function(require,module,exports){ +arguments[4][41][0].apply(exports,arguments) +},{"./array":365,"dup":41}],372:[function(require,module,exports){ +arguments[4][42][0].apply(exports,arguments) +},{"dup":42}],373:[function(require,module,exports){ +arguments[4][43][0].apply(exports,arguments) +},{"./lib/array":365,"./lib/base64":366,"./lib/dom":367,"./lib/events":368,"./lib/fn":369,"./lib/string":370,"./lib/url":371,"./lib/uuid":372,"dup":43}],374:[function(require,module,exports){ +arguments[4][80][0].apply(exports,arguments) +},{"batch-execute-functions":375,"braintree-utilities/lib/fn":376,"dup":80}],375:[function(require,module,exports){ +arguments[4][81][0].apply(exports,arguments) +},{"dup":81}],376:[function(require,module,exports){ +arguments[4][39][0].apply(exports,arguments) +},{"dup":39}],377:[function(require,module,exports){ +/** + * lodash 3.0.2 (Custom Build) + * Build: `lodash modern modularize exports="npm" -o ./` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ +var baseClone = require('lodash._baseclone'), + bindCallback = require('lodash._bindcallback'); + +/** + * Creates a deep clone of `value`. If `customizer` is provided it's invoked + * to produce the cloned values. If `customizer` returns `undefined` cloning + * is handled by the method instead. The `customizer` is bound to `thisArg` + * and invoked with up to three argument; (value [, index|key, object]). + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm). + * The enumerable properties of `arguments` objects and objects created by + * constructors other than `Object` are cloned to plain `Object` objects. An + * empty object is returned for uncloneable values such as functions, DOM nodes, + * Maps, Sets, and WeakMaps. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to deep clone. + * @param {Function} [customizer] The function to customize cloning values. + * @param {*} [thisArg] The `this` binding of `customizer`. + * @returns {*} Returns the deep cloned value. + * @example + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * var deep = _.cloneDeep(users); + * deep[0] === users[0]; + * // => false + * + * // using a customizer callback + * var el = _.cloneDeep(document.body, function(value) { + * if (_.isElement(value)) { + * return value.cloneNode(true); + * } + * }); + * + * el === document.body + * // => false + * el.nodeName + * // => BODY + * el.childNodes.length; + * // => 20 + */ +function cloneDeep(value, customizer, thisArg) { + return typeof customizer == 'function' + ? baseClone(value, true, bindCallback(customizer, thisArg, 3)) + : baseClone(value, true); +} + +module.exports = cloneDeep; + +},{"lodash._baseclone":378,"lodash._bindcallback":388}],378:[function(require,module,exports){ +(function (global){ +/** + * lodash 3.3.0 (Custom Build) + * Build: `lodash modern modularize exports="npm" -o ./` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ +var arrayCopy = require('lodash._arraycopy'), + arrayEach = require('lodash._arrayeach'), + baseAssign = require('lodash._baseassign'), + baseFor = require('lodash._basefor'), + isArray = require('lodash.isarray'), + keys = require('lodash.keys'); + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + weakMapTag = '[object WeakMap]'; + +var arrayBufferTag = '[object ArrayBuffer]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** Used to identify `toStringTag` values supported by `_.clone`. */ +var cloneableTags = {}; +cloneableTags[argsTag] = cloneableTags[arrayTag] = +cloneableTags[arrayBufferTag] = cloneableTags[boolTag] = +cloneableTags[dateTag] = cloneableTags[float32Tag] = +cloneableTags[float64Tag] = cloneableTags[int8Tag] = +cloneableTags[int16Tag] = cloneableTags[int32Tag] = +cloneableTags[numberTag] = cloneableTags[objectTag] = +cloneableTags[regexpTag] = cloneableTags[stringTag] = +cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = +cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; +cloneableTags[errorTag] = cloneableTags[funcTag] = +cloneableTags[mapTag] = cloneableTags[setTag] = +cloneableTags[weakMapTag] = false; + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objToString = objectProto.toString; + +/** Native method references. */ +var ArrayBuffer = global.ArrayBuffer, + Uint8Array = global.Uint8Array; + +/** + * The base implementation of `_.clone` without support for argument juggling + * and `this` binding `customizer` functions. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @param {Function} [customizer] The function to customize cloning values. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The object `value` belongs to. + * @param {Array} [stackA=[]] Tracks traversed source objects. + * @param {Array} [stackB=[]] Associates clones with source counterparts. + * @returns {*} Returns the cloned value. + */ +function baseClone(value, isDeep, customizer, key, object, stackA, stackB) { + var result; + if (customizer) { + result = object ? customizer(value, key, object) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!isObject(value)) { + return value; + } + var isArr = isArray(value); + if (isArr) { + result = initCloneArray(value); + if (!isDeep) { + return arrayCopy(value, result); + } + } else { + var tag = objToString.call(value), + isFunc = tag == funcTag; + + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = initCloneObject(isFunc ? {} : value); + if (!isDeep) { + return baseAssign(result, value); + } + } else { + return cloneableTags[tag] + ? initCloneByTag(value, tag, isDeep) + : (object ? value : {}); + } + } + // Check for circular references and return its corresponding clone. + stackA || (stackA = []); + stackB || (stackB = []); + + var length = stackA.length; + while (length--) { + if (stackA[length] == value) { + return stackB[length]; + } + } + // Add the source value to the stack of traversed objects and associate it with its clone. + stackA.push(value); + stackB.push(result); + + // Recursively populate clone (susceptible to call stack limits). + (isArr ? arrayEach : baseForOwn)(value, function(subValue, key) { + result[key] = baseClone(subValue, isDeep, customizer, key, value, stackA, stackB); + }); + return result; +} + +/** + * The base implementation of `_.forOwn` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return baseFor(object, iteratee, keys); +} + +/** + * Creates a clone of the given array buffer. + * + * @private + * @param {ArrayBuffer} buffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. + */ +function bufferClone(buffer) { + var result = new ArrayBuffer(buffer.byteLength), + view = new Uint8Array(result); + + view.set(new Uint8Array(buffer)); + return result; +} + +/** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ +function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add array properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; +} + +/** + * Initializes an object clone. + * + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneObject(object) { + var Ctor = object.constructor; + if (!(typeof Ctor == 'function' && Ctor instanceof Ctor)) { + Ctor = Object; + } + return new Ctor; +} + +/** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return bufferClone(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + var buffer = object.buffer; + return new Ctor(isDeep ? bufferClone(buffer) : buffer, object.byteOffset, object.length); + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + var result = new Ctor(object.source, reFlags.exec(object)); + result.lastIndex = object.lastIndex; + } + return result; +} + +/** + * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. + * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(1); + * // => false + */ +function isObject(value) { + // Avoid a V8 JIT bug in Chrome 19-20. + // See https://code.google.com/p/v8/issues/detail?id=2291 for more details. + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} + +module.exports = baseClone; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"lodash._arraycopy":379,"lodash._arrayeach":380,"lodash._baseassign":381,"lodash._basefor":383,"lodash.isarray":384,"lodash.keys":385}],379:[function(require,module,exports){ +/** + * lodash 3.0.0 (Custom Build) + * Build: `lodash modern modularize exports="npm" -o ./` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.7.0 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ + +/** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ +function arrayCopy(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; +} + +module.exports = arrayCopy; + +},{}],380:[function(require,module,exports){ +/** + * lodash 3.0.0 (Custom Build) + * Build: `lodash modern modularize exports="npm" -o ./` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.7.0 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ + +/** + * A specialized version of `_.forEach` for arrays without support for callback + * shorthands or `this` binding. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { + var index = -1, + length = array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; +} + +module.exports = arrayEach; + +},{}],381:[function(require,module,exports){ +arguments[4][86][0].apply(exports,arguments) +},{"dup":86,"lodash._basecopy":382,"lodash.keys":385}],382:[function(require,module,exports){ +arguments[4][87][0].apply(exports,arguments) +},{"dup":87}],383:[function(require,module,exports){ +/** + * lodash 3.0.2 (Custom Build) + * Build: `lodash modern modularize exports="npm" -o ./` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ + +/** + * The base implementation of `baseForIn` and `baseForOwn` which iterates + * over `object` properties returned by `keysFunc` invoking `iteratee` for + * each property. Iteratee functions may exit iteration early by explicitly + * returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ +var baseFor = createBaseFor(); + +/** + * Creates a base function for `_.forIn` or `_.forInRight`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var iterable = toObject(object), + props = keysFunc(object), + length = props.length, + index = fromRight ? length : -1; + + while ((fromRight ? index-- : ++index < length)) { + var key = props[index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; +} + +/** + * Converts `value` to an object if it's not one. + * + * @private + * @param {*} value The value to process. + * @returns {Object} Returns the object. + */ +function toObject(value) { + return isObject(value) ? value : Object(value); +} + +/** + * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. + * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(1); + * // => false + */ +function isObject(value) { + // Avoid a V8 JIT bug in Chrome 19-20. + // See https://code.google.com/p/v8/issues/detail?id=2291 for more details. + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} + +module.exports = baseFor; + +},{}],384:[function(require,module,exports){ +arguments[4][46][0].apply(exports,arguments) +},{"dup":46}],385:[function(require,module,exports){ +arguments[4][48][0].apply(exports,arguments) +},{"dup":48,"lodash._getnative":386,"lodash.isarguments":387,"lodash.isarray":384}],386:[function(require,module,exports){ +arguments[4][49][0].apply(exports,arguments) +},{"dup":49}],387:[function(require,module,exports){ +arguments[4][45][0].apply(exports,arguments) +},{"dup":45}],388:[function(require,module,exports){ +arguments[4][89][0].apply(exports,arguments) +},{"dup":89}],389:[function(require,module,exports){ +/** + * lodash 3.1.1 (Custom Build) + * Build: `lodash modern modularize exports="npm" -o ./` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ +var baseAssign = require('lodash._baseassign'), + baseCreate = require('lodash._basecreate'), + isIterateeCall = require('lodash._isiterateecall'); + +/** + * Creates an object that inherits from the given `prototype` object. If a + * `properties` object is provided its own enumerable properties are assigned + * to the created object. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} prototype The object to inherit from. + * @param {Object} [properties] The properties to assign to the object. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Object} Returns the new object. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * function Circle() { + * Shape.call(this); + * } + * + * Circle.prototype = _.create(Shape.prototype, { + * 'constructor': Circle + * }); + * + * var circle = new Circle; + * circle instanceof Circle; + * // => true + * + * circle instanceof Shape; + * // => true + */ +function create(prototype, properties, guard) { + var result = baseCreate(prototype); + if (guard && isIterateeCall(prototype, properties, guard)) { + properties = undefined; + } + return properties ? baseAssign(result, properties) : result; +} + +module.exports = create; + +},{"lodash._baseassign":390,"lodash._basecreate":396,"lodash._isiterateecall":397}],390:[function(require,module,exports){ +arguments[4][86][0].apply(exports,arguments) +},{"dup":86,"lodash._basecopy":391,"lodash.keys":392}],391:[function(require,module,exports){ +arguments[4][87][0].apply(exports,arguments) +},{"dup":87}],392:[function(require,module,exports){ +arguments[4][48][0].apply(exports,arguments) +},{"dup":48,"lodash._getnative":393,"lodash.isarguments":394,"lodash.isarray":395}],393:[function(require,module,exports){ +arguments[4][49][0].apply(exports,arguments) +},{"dup":49}],394:[function(require,module,exports){ +arguments[4][45][0].apply(exports,arguments) +},{"dup":45}],395:[function(require,module,exports){ +arguments[4][46][0].apply(exports,arguments) +},{"dup":46}],396:[function(require,module,exports){ +/** + * lodash 3.0.3 (Custom Build) + * Build: `lodash modern modularize exports="npm" -o ./` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ + +/** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} prototype The object to inherit from. + * @returns {Object} Returns the new object. + */ +var baseCreate = (function() { + function object() {} + return function(prototype) { + if (isObject(prototype)) { + object.prototype = prototype; + var result = new object; + object.prototype = undefined; + } + return result || {}; + }; +}()); + +/** + * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. + * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(1); + * // => false + */ +function isObject(value) { + // Avoid a V8 JIT bug in Chrome 19-20. + // See https://code.google.com/p/v8/issues/detail?id=2291 for more details. + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} + +module.exports = baseCreate; + +},{}],397:[function(require,module,exports){ +arguments[4][90][0].apply(exports,arguments) +},{"dup":90}],398:[function(require,module,exports){ +'use strict'; +/* eslint-disable consistent-return */ + +function convertToLegacyShippingAddress(address) { + var prop; + var legacyShippingAddress = {}; + + if (!address) { + return; + } + + for (prop in address) { + if (address.hasOwnProperty(prop)) { + legacyShippingAddress[toSnakeCase(prop)] = address[prop]; + } + } + + return legacyShippingAddress; +} + +function toSnakeCase(string) { + return string.replace(/([A-Z])/g, function ($1) { + return '_' + $1.toLowerCase(); + }); +} + +module.exports = {convertToLegacyShippingAddress: convertToLegacyShippingAddress}; + +},{}],399:[function(require,module,exports){ +'use strict'; + +module.exports = { + ROOT_SUCCESS_CALLBACK: 'onPaymentMethodReceived', + ROOT_ERROR_CALLBACK: 'onError', + ROOT_READY_CALLBACK: 'onReady' +}; + +},{}],400:[function(require,module,exports){ +(function (global){ +'use strict'; + +var api = require('braintree-api'); +var Bus = require('braintree-bus'); +var Destructor = require('destructor'); +var bind = require('braintree-utilities').bind; +var constants = require('../constants'); +var sanitizePayload = require('../lib/sanitize-payload'); +var lookupCallbackFor = require('../lib/lookup-callback-for'); +var fallbackErrorHandler = require('../lib/fallback-error-handler'); + +function noop() {} + +function _handleDependencyInitializing() { + this._dependenciesRemaining++; +} + +function _handleDependencyReady() { + this._dependenciesRemaining--; + + if (this._dependenciesRemaining === 0) { + delete this._dependenciesRemaining; + + this.bus.off(Bus.events.ASYNC_DEPENDENCY_INITIALIZING, this._handleDependencyInitializing); + this.bus.off(Bus.events.ASYNC_DEPENDENCY_READY, this._handleDependencyReady); + + this._onIntegrationReady(); + } +} + +function BaseIntegration(configuration) { + this.configuration = configuration; + + this.isReady = false; + + this.destructor = new Destructor(); + + this.bus = new Bus({ + channel: this.configuration.channel, + merchantUrl: global.location.href + }); + + this._createApiClient(); + this._configureCallbacks(); + this._configureAnalytics(); + this._attachEvents(); + this._emitInitializing(); +} + +BaseIntegration.prototype._emitInitializing = function () { + this.bus.emit(Bus.events.ASYNC_DEPENDENCY_INITIALIZING); +}; + +BaseIntegration.prototype._createApiClient = function () { + var apiClientOptions = { + clientToken: this.configuration.gatewayConfiguration, + integration: this.configuration.integrationType, + analyticsConfiguration: this.configuration.analyticsConfiguration + }; + + if (this.configuration.merchantConfiguration.enableCORS) { + apiClientOptions.enableCORS = true; + } + + this.apiClient = new api.Client(apiClientOptions); + // TODO: investigate whether we need to tear these down +}; + +BaseIntegration.prototype._configureCallbacks = function () { + var getCallback = lookupCallbackFor(this.configuration.merchantConfiguration); + + function successHandler(fn) { + return function (payload) { + fn(sanitizePayload(payload)); + }; + } + + this.onSuccess = successHandler(getCallback(constants.ROOT_SUCCESS_CALLBACK)); + this.onError = getCallback(constants.ROOT_ERROR_CALLBACK, fallbackErrorHandler); + this.onReady = getCallback(constants.ROOT_READY_CALLBACK); +}; + +BaseIntegration.prototype._configureAnalytics = function () { + var prefix = 'web.' + this.configuration.integrationType + '.'; + var apiClient = this.apiClient; + + this.bus.on(Bus.events.SEND_ANALYTICS_EVENTS, function (events, callback) { + var i; + + if (!(events instanceof Array)) { + events = [events]; + } + + for (i = 0; i < events.length; i++) { + events[i] = prefix + events[i]; + } + + apiClient.sendAnalyticsEvents(events, callback); + // TODO: maybe this needs to be canceled + }); +}; + +BaseIntegration.prototype._attachEvents = function () { + var configuration = this.configuration; + + this.bus.on(Bus.events.ERROR, this.onError); + this.bus.on(Bus.events.PAYMENT_METHOD_RECEIVED, this.onSuccess); + + this.bus.on(Bus.events.WARNING, function (warning) { + try { console.warn(warning); } catch (e) { /* ignored */ } // eslint-disable-line no-console + }); + + this.bus.on(Bus.events.CONFIGURATION_REQUEST, function (reply) { + // TODO: Coinbase and Hosted Fields both expect this reply + // in this format. We need to amend that + reply({ + // We do not want to send the entire merchantConfiguration object + // because it could contain unserializable DOM nodes + enableCORS: configuration.merchantConfiguration.enableCORS, + configuration: configuration.gatewayConfiguration, + integration: configuration.integrationType, + analyticsConfiguration: configuration.analyticsConfiguration + }); + }); + + this._dependenciesRemaining = 0; + this._handleDependencyInitializing = bind(_handleDependencyInitializing, this); + this._handleDependencyReady = bind(_handleDependencyReady, this); + this.bus.on(Bus.events.ASYNC_DEPENDENCY_INITIALIZING, this._handleDependencyInitializing); + this.bus.on(Bus.events.ASYNC_DEPENDENCY_READY, this._handleDependencyReady); +}; + +BaseIntegration.prototype._onIntegrationReady = function () { + var instance = { + teardown: bind(function (done) { + var key; + var message = 'Cannot call teardown while in progress'; + + done = done || noop; + + function teardownReply() { + throw new Error(message); + } + + for (key in instance) { + if (instance.hasOwnProperty(key)) { + instance[key] = teardownReply; + } + } + + this.destructor.teardown(bind(function () { // eslint-disable-line no-invalid-this + message = 'Cannot teardown integration more than once'; + + this.bus.teardown(); // eslint-disable-line no-invalid-this + done(); + }, this)); // eslint-disable-line no-invalid-this + }, this) // eslint-disable-line no-invalid-this + }; + + this.isReady = true; + this.onReady(instance); +}; + +module.exports = BaseIntegration; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"../constants":399,"../lib/fallback-error-handler":406,"../lib/lookup-callback-for":407,"../lib/sanitize-payload":408,"braintree-api":21,"braintree-bus":52,"braintree-utilities":373,"destructor":374}],401:[function(require,module,exports){ +'use strict'; + +var clone = require('lodash.clonedeep'); +var create = require('lodash.create'); +var api = require('braintree-api'); +var bind = require('braintree-utilities').bind; +var coinbase = require('braintree-coinbase'); +var Bus = require('braintree-bus'); +var BaseIntegration = require('./base-integration'); + +function CoinbaseIntegration() { + var coinbaseConfiguration, coinbaseIntegration; + + BaseIntegration.apply(this, arguments); + + coinbaseConfiguration = clone(this.configuration.merchantConfiguration); + + this._attachBusEvents(); + + coinbaseConfiguration.channel = this.configuration.channel; + coinbaseConfiguration.configuration = clone(this.configuration.gatewayConfiguration); + coinbaseConfiguration.coinbase = clone(coinbaseConfiguration.coinbase || {}); + coinbaseConfiguration.apiClient = new api.Client({ + enableCORS: this.configuration.merchantConfiguration.enableCORS || false, + clientToken: this.configuration.gatewayConfiguration, + integration: 'coinbase' + }); + // TODO: investigate whether API client needs to be torn down + + coinbaseIntegration = coinbase.create(coinbaseConfiguration); + this.destructor.registerFunctionForTeardown(function (done) { + coinbaseIntegration.teardown(done); + }); + + this.bus.emit(Bus.events.ASYNC_DEPENDENCY_READY); +} + +CoinbaseIntegration.prototype = create(BaseIntegration.prototype, { + constructor: CoinbaseIntegration +}); + +CoinbaseIntegration.prototype._attachBusEvents = function () { + this.bus.on(Bus.events.PAYMENT_METHOD_GENERATED, bind(this._onPaymentMethodGenerated, this)); +}; + +CoinbaseIntegration.prototype._onPaymentMethodGenerated = function (payload) { + this.bus.emit(Bus.events.PAYMENT_METHOD_RECEIVED, payload); +}; + +module.exports = CoinbaseIntegration; + +},{"./base-integration":400,"braintree-api":21,"braintree-bus":52,"braintree-coinbase":56,"braintree-utilities":373,"lodash.clonedeep":377,"lodash.create":389}],402:[function(require,module,exports){ +'use strict'; + +var clone = require('lodash.clonedeep'); +var create = require('lodash.create'); +var form = require('braintree-form'); +var paypal = require('braintree-paypal'); +var coinbase = require('braintree-coinbase'); +var utils = require('braintree-utilities'); +var constants = require('../constants'); +var Bus = require('braintree-bus'); +var convertToLegacyShippingAddress = require('../compatibility').convertToLegacyShippingAddress; +var BaseIntegration = require('./base-integration'); + +function CustomIntegration() { + BaseIntegration.apply(this, arguments); + + this._setupForm(); + this._setupPayPal(); + this._setupCoinbase(); + + this.bus.emit(Bus.events.ASYNC_DEPENDENCY_READY); +} + +CustomIntegration.prototype = create(BaseIntegration.prototype, { + constructor: CustomIntegration +}); + +CustomIntegration.prototype._setupForm = function () { + var merchantConfiguration = this.configuration.merchantConfiguration; + var formShouldAutoSubmit, successCallback, formIntegration; + + if (merchantConfiguration.id) { + formIntegration = form.setup(this.apiClient, this.configuration); + + formShouldAutoSubmit = !utils.isFunction(merchantConfiguration[constants.ROOT_SUCCESS_CALLBACK]); + if (!formShouldAutoSubmit) { + successCallback = this.onSuccess; + formIntegration.onNonceReceived = utils.bind(function (err, payload) { + if (err) { + this.bus.emit(Bus.events.ERROR, err); // eslint-disable-line no-invalid-this + } else { + successCallback(payload); + } + }, this); + } + + this.destructor.registerFunctionForTeardown(function () { + formIntegration.teardown(); + }); + } else { + this.bus.on(Bus.events.PAYMENT_METHOD_GENERATED, utils.bind(function (payload) { + this.bus.emit(Bus.events.PAYMENT_METHOD_RECEIVED, payload); // eslint-disable-line no-invalid-this + }, this)); + } +}; + +CustomIntegration.prototype._setupPayPal = function () { + var paypalCallbackLookup, legacyPaypalSuccessCallback, legacyPaypalCancelledCallback, dummyInput, paypalIntegration, paypalConfiguration; + var merchantConfiguration = this.configuration.merchantConfiguration; + + if (!merchantConfiguration.paypal) { return; } + + paypalConfiguration = clone(merchantConfiguration.paypal, function (value) { + var isHtmlElement = value && value.nodeType === 1; + if (isHtmlElement) { + return value; + } + }); + + paypalCallbackLookup = getIntegrationCallbackLookup(merchantConfiguration, 'paypal'); + legacyPaypalSuccessCallback = paypalCallbackLookup('onSuccess'); + legacyPaypalCancelledCallback = paypalCallbackLookup('onCancelled'); + + if (!paypalConfiguration.paymentMethodNonceInputField) { + dummyInput = document.createElement('input'); + dummyInput.id = 'braintree-custom-integration-dummy-input'; + paypalConfiguration.paymentMethodNonceInputField = dummyInput; + } + + paypalConfiguration.onSuccess = function (payload) { + legacyPaypalSuccessCallback( + payload.nonce, + payload.details.email, + convertToLegacyShippingAddress(payload.details.shippingAddress) + ); + }; + + paypalConfiguration.onCancelled = utils.bind(function () { + this.bus.emit(Bus.events.PAYMENT_METHOD_CANCELLED); // eslint-disable-line no-invalid-this + legacyPaypalCancelledCallback(); + }, this); + + // In a custom integration, paypal options are nested inside of the paypal object + // so the paypalConfiguration needs to be augmented with the value from the root + // merchantConfiguration object for CORS + // TODO: Update paypal create signature + if (merchantConfiguration.enableCORS) { + paypalConfiguration.enableCORS = true; + } + + paypalIntegration = paypal.create(this.configuration.gatewayConfiguration, paypalConfiguration, this.configuration.channel); + + this.destructor.registerFunctionForTeardown(function () { + paypalIntegration.teardown(); + }); +}; + +CustomIntegration.prototype._setupCoinbase = function () { + var coinbaseConfiguration, coinbaseIntegration; + + if (!this.configuration.merchantConfiguration.coinbase) { return; } + + if (navigator.userAgent.match(/MSIE 8\.0/)) { return; } + + coinbaseConfiguration = clone(this.configuration.merchantConfiguration); + coinbaseConfiguration.channel = this.configuration.channel; + coinbaseConfiguration.configuration = this.configuration.gatewayConfiguration; + coinbaseConfiguration.apiClient = this.apiClient; + delete coinbaseConfiguration.paypal; + + coinbaseIntegration = coinbase.create(coinbaseConfiguration); + + this.destructor.registerFunctionForTeardown(function (done) { + coinbaseIntegration.teardown(done); + }); +}; + +function getIntegrationCallbackLookup(options, integration) { + return function (funcName) { + if (integration in options && utils.isFunction(options[integration][funcName])) { + return options[integration][funcName]; + } + return function noop() {}; + }; +} + +module.exports = CustomIntegration; + +},{"../compatibility":398,"../constants":399,"./base-integration":400,"braintree-bus":52,"braintree-coinbase":56,"braintree-form":246,"braintree-paypal":345,"braintree-utilities":373,"lodash.clonedeep":377,"lodash.create":389}],403:[function(require,module,exports){ +'use strict'; + +var create = require('lodash.create'); +var dropin = require('braintree-dropin'); +var utils = require('braintree-utilities'); +var Bus = require('braintree-bus'); +var constants = require('../constants'); +var sanitizePayload = require('../lib/sanitize-payload'); +var BaseIntegration = require('./base-integration'); + +function _getLegacyCallback(options) { + if (utils.isFunction(options.paymentMethodNonceReceived)) { + return options.paymentMethodNonceReceived; + } + + return null; +} + +function _hasRootCallback(options) { + return utils.isFunction(options[constants.ROOT_SUCCESS_CALLBACK]); +} + +function DropinIntegration() { + var merchantConfiguration, legacyCallback, hasRootCallback, dropinIntegration; + + BaseIntegration.apply(this, arguments); + + merchantConfiguration = this.configuration.merchantConfiguration; + legacyCallback = _getLegacyCallback(merchantConfiguration); + hasRootCallback = _hasRootCallback(merchantConfiguration); + + if (legacyCallback || hasRootCallback) { + merchantConfiguration.paymentMethodNonceReceived = utils.bind(function (payload) { + if (legacyCallback) { + legacyCallback(payload.originalEvent, payload.nonce); + } + + this.bus.emit(Bus.events.PAYMENT_METHOD_RECEIVED, sanitizePayload(payload)); // eslint-disable-line no-invalid-this + }, this); + } + + dropinIntegration = dropin.create(this.configuration); + this.destructor.registerFunctionForTeardown(function (done) { + dropinIntegration.teardown(done); + }); + + this.bus.emit(Bus.events.ASYNC_DEPENDENCY_READY); +} + +DropinIntegration.prototype = create(BaseIntegration.prototype, { + constructor: DropinIntegration +}); + +module.exports = DropinIntegration; + +},{"../constants":399,"../lib/sanitize-payload":408,"./base-integration":400,"braintree-bus":52,"braintree-dropin":237,"braintree-utilities":373,"lodash.create":389}],404:[function(require,module,exports){ +'use strict'; + +module.exports = { + custom: require('./custom'), + dropin: require('./dropin'), + paypal: require('./paypal'), + coinbase: require('./coinbase') +}; + +},{"./coinbase":401,"./custom":402,"./dropin":403,"./paypal":405}],405:[function(require,module,exports){ +'use strict'; + +var create = require('lodash.create'); +var paypal = require('braintree-paypal'); +var utils = require('braintree-utilities'); +var constants = require('../constants'); +var Bus = require('braintree-bus'); +var convertToLegacyShippingAddress = require('../compatibility').convertToLegacyShippingAddress; +var BaseIntegration = require('./base-integration'); + +function _getLegacyCallback(options) { + if ('onSuccess' in options && utils.isFunction(options.onSuccess)) { + return options.onSuccess; + } else if ('paypal' in options && utils.isFunction(options.paypal.onSuccess)) { + return options.paypal.onSuccess; + } + + return null; +} + +function _hasRootCallback(options) { + return utils.isFunction(options[constants.ROOT_SUCCESS_CALLBACK]); +} + +function PayPalIntegration() { + var merchantConfiguration, legacyCallback, hasRootCallback, paypalIntegration; + + BaseIntegration.apply(this, arguments); + + merchantConfiguration = this.configuration.merchantConfiguration; + legacyCallback = _getLegacyCallback(merchantConfiguration); + hasRootCallback = _hasRootCallback(merchantConfiguration); + + if (legacyCallback || hasRootCallback) { + merchantConfiguration.onSuccess = utils.bind(function (payload) { + if (legacyCallback) { + legacyCallback( + payload.nonce, + payload.details.email, + convertToLegacyShippingAddress(payload.details.shippingAddress) + ); + } + + this.bus.emit(Bus.events.PAYMENT_METHOD_RECEIVED, payload); // eslint-disable-line no-invalid-this + }, this); + } + + paypalIntegration = paypal.create(this.configuration.gatewayConfiguration, merchantConfiguration, this.configuration.channel); + + this.destructor.registerFunctionForTeardown(function () { + paypalIntegration.teardown(); + }); + + this.bus.emit(Bus.events.ASYNC_DEPENDENCY_READY); +} + +PayPalIntegration.prototype = create(BaseIntegration.prototype, { + constructor: PayPalIntegration +}); + +module.exports = PayPalIntegration; + +},{"../compatibility":398,"../constants":399,"./base-integration":400,"braintree-bus":52,"braintree-paypal":345,"braintree-utilities":373,"lodash.create":389}],406:[function(require,module,exports){ +'use strict'; + +module.exports = function fallbackError(error) { + if (error.type === 'CONFIGURATION' || error.type === 'IMMEDIATE') { + throw new Error(error.message); + } else { + try { + console.error(JSON.stringify(error)); // eslint-disable-line no-console + } catch (e) { /* ignored */ } + } +}; + +},{}],407:[function(require,module,exports){ +'use strict'; + +var isFunction = require('braintree-utilities').isFunction; + +function noop() {} + +module.exports = function lookupCallbackFor(model) { + return function (callbackName, fallbackCallback) { + if (isFunction(model[callbackName])) { + return model[callbackName]; + } else if (isFunction(fallbackCallback)) { + return fallbackCallback; + } + + return noop; + }; +}; + +},{"braintree-utilities":373}],408:[function(require,module,exports){ +'use strict'; + +module.exports = function sanitizePayload(payload) { + return { + nonce: payload.nonce, + details: payload.details, + type: payload.type + }; +}; + +},{}]},{},[1])(1) +}); \ No newline at end of file diff --git a/lib/assets/javascripts/vendor/braintree-2.9.0.js b/lib/assets/javascripts/vendor/braintree-2.9.0.js deleted file mode 100644 index c73d545c..00000000 --- a/lib/assets/javascripts/vendor/braintree-2.9.0.js +++ /dev/null @@ -1,5 +0,0 @@ -!function(){function t(e,n){e instanceof t?(this.enc=e.enc,this.pos=e.pos):(this.enc=e,this.pos=n)}function e(t,e,n,i,r){this.stream=t,this.header=e,this.length=n,this.tag=i,this.sub=r}function n(t){var e,n,i="";for(e=0;e+3<=t.length;e+=3)n=parseInt(t.substring(e,e+3),16),i+=ee.charAt(n>>6)+ee.charAt(63&n);for(e+1==t.length?(n=parseInt(t.substring(e,e+1),16),i+=ee.charAt(n<<2)):e+2==t.length&&(n=parseInt(t.substring(e,e+2),16),i+=ee.charAt(n>>2)+ee.charAt((3&n)<<4));(3&i.length)>0;)i+=ne;return i}function i(t){var e,n,i,r="",o=0;for(e=0;ei||(0==o?(r+=l(i>>2),n=3&i,o=1):1==o?(r+=l(n<<2|i>>4),n=15&i,o=2):2==o?(r+=l(n),r+=l(i>>2),n=3&i,o=3):(r+=l(n<<2|i>>4),r+=l(15&i),o=0));return 1==o&&(r+=l(n<<2)),r}function r(t){var e,n=i(t),r=new Array;for(e=0;2*e=0;){var s=e*this[t++]+n[i]+r;r=Math.floor(s/67108864),n[i++]=67108863&s}return r}function u(t,e,n,i,r,o){for(var s=32767&e,a=e>>15;--o>=0;){var u=32767&this[t],c=this[t++]>>15,l=a*u+c*s;u=s*u+((32767&l)<<15)+n[i]+(1073741823&r),r=(u>>>30)+(l>>>15)+a*c+(r>>>30),n[i++]=1073741823&u}return r}function c(t,e,n,i,r,o){for(var s=16383&e,a=e>>14;--o>=0;){var u=16383&this[t],c=this[t++]>>14,l=a*u+c*s;u=s*u+((16383&l)<<14)+n[i]+r,r=(u>>28)+(l>>14)+a*c,n[i++]=268435455&u}return r}function l(t){return ue.charAt(t)}function p(t,e){var n=ce[t.charCodeAt(e)];return null==n?-1:n}function h(t){for(var e=this.t-1;e>=0;--e)t[e]=this[e];t.t=this.t,t.s=this.s}function d(t){this.t=1,this.s=0>t?-1:0,t>0?this[0]=t:-1>t?this[0]=t+this.DV:this.t=0}function f(t){var e=s();return e.fromInt(t),e}function m(t,e){var n;if(16==e)n=4;else if(8==e)n=3;else if(256==e)n=8;else if(2==e)n=1;else if(32==e)n=5;else{if(4!=e)return void this.fromRadix(t,e);n=2}this.t=0,this.s=0;for(var i=t.length,r=!1,s=0;--i>=0;){var a=8==n?255&t[i]:p(t,i);0>a?"-"==t.charAt(i)&&(r=!0):(r=!1,0==s?this[this.t++]=a:s+n>this.DB?(this[this.t-1]|=(a&(1<>this.DB-s):this[this.t-1]|=a<=this.DB&&(s-=this.DB))}8==n&&0!=(128&t[0])&&(this.s=-1,s>0&&(this[this.t-1]|=(1<0&&this[this.t-1]==t;)--this.t}function g(t){if(this.s<0)return"-"+this.negate().toString(t);var e;if(16==t)e=4;else if(8==t)e=3;else if(2==t)e=1;else if(32==t)e=5;else{if(4!=t)return this.toRadix(t);e=2}var n,i=(1<0)for(a>a)>0&&(r=!0,o=l(n));s>=0;)e>a?(n=(this[s]&(1<>(a+=this.DB-e)):(n=this[s]>>(a-=e)&i,0>=a&&(a+=this.DB,--s)),n>0&&(r=!0),r&&(o+=l(n));return r?o:"0"}function b(){var t=s();return o.ZERO.subTo(this,t),t}function v(){return this.s<0?this.negate():this}function _(t){var e=this.s-t.s;if(0!=e)return e;var n=this.t;if(e=n-t.t,0!=e)return this.s<0?-e:e;for(;--n>=0;)if(0!=(e=this[n]-t[n]))return e;return 0}function E(t){var e,n=1;return 0!=(e=t>>>16)&&(t=e,n+=16),0!=(e=t>>8)&&(t=e,n+=8),0!=(e=t>>4)&&(t=e,n+=4),0!=(e=t>>2)&&(t=e,n+=2),0!=(e=t>>1)&&(t=e,n+=1),n}function w(){return this.t<=0?0:this.DB*(this.t-1)+E(this[this.t-1]^this.s&this.DM)}function A(t,e){var n;for(n=this.t-1;n>=0;--n)e[n+t]=this[n];for(n=t-1;n>=0;--n)e[n]=0;e.t=this.t+t,e.s=this.s}function C(t,e){for(var n=t;n=0;--n)e[n+s+1]=this[n]>>r|a,a=(this[n]&o)<=0;--n)e[n]=0;e[s]=a,e.t=this.t+s+1,e.s=this.s,e.clamp()}function T(t,e){e.s=this.s;var n=Math.floor(t/this.DB);if(n>=this.t)return void(e.t=0);var i=t%this.DB,r=this.DB-i,o=(1<>i;for(var s=n+1;s>i;i>0&&(e[this.t-n-1]|=(this.s&o)<n;)i+=this[n]-t[n],e[n++]=i&this.DM,i>>=this.DB;if(t.t>=this.DB;i+=this.s}else{for(i+=this.s;n>=this.DB;i-=t.s}e.s=0>i?-1:0,-1>i?e[n++]=this.DV+i:i>0&&(e[n++]=i),e.t=n,e.clamp()}function P(t,e){var n=this.abs(),i=t.abs(),r=n.t;for(e.t=r+i.t;--r>=0;)e[r]=0;for(r=0;r=0;)t[n]=0;for(n=0;n=e.DV&&(t[n+e.t]-=e.DV,t[n+e.t+1]=1)}t.t>0&&(t[t.t-1]+=e.am(n,e[n],t,2*n,0,1)),t.s=0,t.clamp()}function I(t,e,n){var i=t.abs();if(!(i.t<=0)){var r=this.abs();if(r.t0?(i.lShiftTo(l,a),r.lShiftTo(l,n)):(i.copyTo(a),r.copyTo(n));var p=a.t,h=a[p-1];if(0!=h){var d=h*(1<1?a[p-2]>>this.F2:0),f=this.FV/d,m=(1<=0&&(n[n.t++]=1,n.subTo(v,n)),o.ONE.dlShiftTo(p,v),v.subTo(a,a);a.t=0;){var _=n[--g]==h?this.DM:Math.floor(n[g]*f+(n[g-1]+y)*m);if((n[g]+=a.am(0,_,n,b,0,p))<_)for(a.dlShiftTo(b,v),n.subTo(v,n);n[g]<--_;)n.subTo(v,n)}null!=e&&(n.drShiftTo(p,e),u!=c&&o.ZERO.subTo(e,e)),n.t=p,n.clamp(),l>0&&n.rShiftTo(l,n),0>u&&o.ZERO.subTo(n,n)}}}function N(t){var e=s();return this.abs().divRemTo(t,null,e),this.s<0&&e.compareTo(o.ZERO)>0&&t.subTo(e,e),e}function k(t){this.m=t}function R(t){return t.s<0||t.compareTo(this.m)>=0?t.mod(this.m):t}function U(t){return t}function D(t){t.divRemTo(this.m,null,t)}function M(t,e,n){t.multiplyTo(e,n),this.reduce(n)}function F(t,e){t.squareTo(e),this.reduce(e)}function L(){if(this.t<1)return 0;var t=this[0];if(0==(1&t))return 0;var e=3&t;return e=e*(2-(15&t)*e)&15,e=e*(2-(255&t)*e)&255,e=e*(2-((65535&t)*e&65535))&65535,e=e*(2-t*e%this.DV)%this.DV,e>0?this.DV-e:-e}function B(t){this.m=t,this.mp=t.invDigit(),this.mpl=32767&this.mp,this.mph=this.mp>>15,this.um=(1<0&&this.m.subTo(e,e),e}function z(t){var e=s();return t.copyTo(e),this.reduce(e),e}function V(t){for(;t.t<=this.mt2;)t[t.t++]=0;for(var e=0;e>15)*this.mpl&this.um)<<15)&t.DM;for(n=e+this.m.t,t[n]+=this.m.am(0,i,t,e,0,this.m.t);t[n]>=t.DV;)t[n]-=t.DV,t[++n]++}t.clamp(),t.drShiftTo(this.m.t,t),t.compareTo(this.m)>=0&&t.subTo(this.m,t)}function H(t,e){t.squareTo(e),this.reduce(e)}function Y(t,e,n){t.multiplyTo(e,n),this.reduce(n)}function q(){return 0==(this.t>0?1&this[0]:this.s)}function W(t,e){if(t>4294967295||1>t)return o.ONE;var n=s(),i=s(),r=e.convert(this),a=E(t)-1;for(r.copyTo(n);--a>=0;)if(e.sqrTo(n,i),(t&1<0)e.mulTo(i,r,n);else{var u=n;n=i,i=u}return e.revert(n)}function G(t,e){var n;return n=256>t||e.isEven()?new k(e):new B(e),this.exp(t,n)}function Q(t,e){return new o(t,e)}function K(t,e){if(e=0&&e>0;){var r=t.charCodeAt(i--);128>r?n[--e]=r:r>127&&2048>r?(n[--e]=63&r|128,n[--e]=r>>6|192):(n[--e]=63&r|128,n[--e]=r>>6&63|128,n[--e]=r>>12|224)}n[--e]=0;for(var s=0,a=0,u=0;e>2;)0==u&&(a=le.random.randomWords(1,0)[0]),s=a>>u&255,u=(u+8)%32,0!=s&&(n[--e]=s);return n[--e]=2,n[--e]=0,new o(n)}function Z(){this.n=null,this.e=0,this.d=null,this.p=null,this.q=null,this.dmp1=null,this.dmq1=null,this.coeff=null}function $(t,e){if(!(null!=t&&null!=e&&t.length>0&&e.length>0))throw new Error("Invalid RSA public key");this.n=Q(t,16),this.e=parseInt(e,16)}function X(t){return t.modPowInt(this.e,this.n)}function J(t){var e=K(t,this.n.bitLength()+7>>3);if(null==e)return null;var n=this.doPublic(e);if(null==n)return null;var i=n.toString(16);return 0==(1&i.length)?i:"0"+i}t.prototype.get=function(t){if(void 0==t&&(t=this.pos++),t>=this.enc.length)throw"Requesting byte offset "+t+" on a stream of length "+this.enc.length;return this.enc[t]},t.prototype.hexDigits="0123456789ABCDEF",t.prototype.hexByte=function(t){return this.hexDigits.charAt(t>>4&15)+this.hexDigits.charAt(15&t)},t.prototype.hexDump=function(t,e){for(var n="",i=t;e>i;++i)switch(n+=this.hexByte(this.get(i)),15&i){case 7:n+=" ";break;case 15:n+="\n";break;default:n+=" "}return n},t.prototype.parseStringISO=function(t,e){for(var n="",i=t;e>i;++i)n+=String.fromCharCode(this.get(i));return n},t.prototype.parseStringUTF=function(t,e){for(var n="",i=0,r=t;e>r;){var i=this.get(r++);n+=String.fromCharCode(128>i?i:i>191&&224>i?(31&i)<<6|63&this.get(r++):(15&i)<<12|(63&this.get(r++))<<6|63&this.get(r++))}return n},t.prototype.reTime=/^((?:1[89]|2\d)?\d\d)(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])([01]\d|2[0-3])(?:([0-5]\d)(?:([0-5]\d)(?:[.,](\d{1,3}))?)?)?(Z|[-+](?:[0]\d|1[0-2])([0-5]\d)?)?$/,t.prototype.parseTime=function(t,e){var n=this.parseStringISO(t,e),i=this.reTime.exec(n);return i?(n=i[1]+"-"+i[2]+"-"+i[3]+" "+i[4],i[5]&&(n+=":"+i[5],i[6]&&(n+=":"+i[6],i[7]&&(n+="."+i[7]))),i[8]&&(n+=" UTC","Z"!=i[8]&&(n+=i[8],i[9]&&(n+=":"+i[9]))),n):"Unrecognized time: "+n},t.prototype.parseInteger=function(t,e){var n=e-t;if(n>4){n<<=3;var i=this.get(t);if(0==i)n-=8;else for(;128>i;)i<<=1,--n;return"("+n+" bit)"}for(var r=0,o=t;e>o;++o)r=r<<8|this.get(o);return r},t.prototype.parseBitString=function(t,e){var n=this.get(t),i=(e-t-1<<3)-n,r="("+i+" bit)";if(20>=i){var o=n;r+=" ";for(var s=e-1;s>t;--s){for(var a=this.get(s),u=o;8>u;++u)r+=a>>u&1?"1":"0";o=0}}return r},t.prototype.parseOctetString=function(t,e){var n=e-t,i="("+n+" byte) ";n>20&&(e=t+20);for(var r=t;e>r;++r)i+=this.hexByte(this.get(r));return n>20&&(i+=String.fromCharCode(8230)),i},t.prototype.parseOID=function(t,e){for(var n,i=0,r=0,o=t;e>o;++o){var s=this.get(o);i=i<<7|127&s,r+=7,128&s||(void 0==n?n=parseInt(i/40)+"."+i%40:n+="."+(r>=31?"bigint":i),i=r=0),n+=String.fromCharCode()}return n},e.prototype.typeName=function(){if(void 0==this.tag)return"unknown";var t=this.tag>>6,e=(this.tag>>5&1,31&this.tag);switch(t){case 0:switch(e){case 0:return"EOC";case 1:return"BOOLEAN";case 2:return"INTEGER";case 3:return"BIT_STRING";case 4:return"OCTET_STRING";case 5:return"NULL";case 6:return"OBJECT_IDENTIFIER";case 7:return"ObjectDescriptor";case 8:return"EXTERNAL";case 9:return"REAL";case 10:return"ENUMERATED";case 11:return"EMBEDDED_PDV";case 12:return"UTF8String";case 16:return"SEQUENCE";case 17:return"SET";case 18:return"NumericString";case 19:return"PrintableString";case 20:return"TeletexString";case 21:return"VideotexString";case 22:return"IA5String";case 23:return"UTCTime";case 24:return"GeneralizedTime";case 25:return"GraphicString";case 26:return"VisibleString";case 27:return"GeneralString";case 28:return"UniversalString";case 30:return"BMPString";default:return"Universal_"+e.toString(16)}case 1:return"Application_"+e.toString(16);case 2:return"["+e+"]";case 3:return"Private_"+e.toString(16)}},e.prototype.content=function(){if(void 0==this.tag)return null;var t=this.tag>>6;if(0!=t)return null==this.sub?null:"("+this.sub.length+")";var e=31&this.tag,n=this.posContent(),i=Math.abs(this.length);switch(e){case 1:return 0==this.stream.get(n)?"false":"true";case 2:return this.stream.parseInteger(n,n+i);case 3:return this.sub?"("+this.sub.length+" elem)":this.stream.parseBitString(n,n+i);case 4:return this.sub?"("+this.sub.length+" elem)":this.stream.parseOctetString(n,n+i);case 6:return this.stream.parseOID(n,n+i);case 16:case 17:return"("+this.sub.length+" elem)";case 12:return this.stream.parseStringUTF(n,n+i);case 18:case 19:case 20:case 21:case 22:case 26:return this.stream.parseStringISO(n,n+i);case 23:case 24:return this.stream.parseTime(n,n+i)}return null},e.prototype.toString=function(){return this.typeName()+"@"+this.stream.pos+"[header:"+this.header+",length:"+this.length+",sub:"+(null==this.sub?"null":this.sub.length)+"]"},e.prototype.print=function(t){if(void 0==t&&(t=""),document.writeln(t+this),null!=this.sub){t+=" ";for(var e=0,n=this.sub.length;n>e;++e)this.sub[e].print(t)}},e.prototype.toPrettyString=function(t){void 0==t&&(t="");var e=t+this.typeName()+" @"+this.stream.pos;if(this.length>=0&&(e+="+"),e+=this.length,32&this.tag?e+=" (constructed)":3!=this.tag&&4!=this.tag||null==this.sub||(e+=" (encapsulates)"),e+="\n",null!=this.sub){t+=" ";for(var n=0,i=this.sub.length;i>n;++n)e+=this.sub[n].toPrettyString(t)}return e},e.prototype.posStart=function(){return this.stream.pos},e.prototype.posContent=function(){return this.stream.pos+this.header},e.prototype.posEnd=function(){return this.stream.pos+this.header+Math.abs(this.length)},e.decodeLength=function(t){var e=t.get(),n=127&e;if(n==e)return n;if(n>3)throw"Length over 24 bits not supported at position "+(t.pos-1);if(0==n)return-1;e=0;for(var i=0;n>i;++i)e=e<<8|t.get();return e},e.hasContent=function(n,i,r){if(32&n)return!0;if(3>n||n>4)return!1;var o=new t(r);3==n&&o.get();var s=o.get();if(s>>6&1)return!1;try{var a=e.decodeLength(o);return o.pos-r.pos+a==i}catch(u){return!1}},e.decode=function(n){n instanceof t||(n=new t(n,0));var i=new t(n),r=n.get(),o=e.decodeLength(n),s=n.pos-i.pos,a=null;if(e.hasContent(r,o,n)){var u=n.pos;if(3==r&&n.get(),a=[],o>=0){for(var c=u+o;n.pos=ae;++ae)ce[se++]=ae;for(se="a".charCodeAt(0),ae=10;36>ae;++ae)ce[se++]=ae;for(se="A".charCodeAt(0),ae=10;36>ae;++ae)ce[se++]=ae;k.prototype.convert=R,k.prototype.revert=U,k.prototype.reduce=D,k.prototype.mulTo=M,k.prototype.sqrTo=F,B.prototype.convert=j,B.prototype.revert=z,B.prototype.reduce=V,B.prototype.mulTo=Y,B.prototype.sqrTo=H,o.prototype.copyTo=h,o.prototype.fromInt=d,o.prototype.fromString=m,o.prototype.clamp=y,o.prototype.dlShiftTo=A,o.prototype.drShiftTo=C,o.prototype.lShiftTo=S,o.prototype.rShiftTo=T,o.prototype.subTo=x,o.prototype.multiplyTo=P,o.prototype.squareTo=O,o.prototype.divRemTo=I,o.prototype.invDigit=L,o.prototype.isEven=q,o.prototype.exp=W,o.prototype.toString=g,o.prototype.negate=b,o.prototype.abs=v,o.prototype.compareTo=_,o.prototype.bitLength=w,o.prototype.mod=N,o.prototype.modPowInt=G,o.ZERO=f(0),o.ONE=f(1),Z.prototype.doPublic=X,Z.prototype.setPublic=$,Z.prototype.encrypt=J;var le={cipher:{},hash:{},keyexchange:{},mode:{},misc:{},codec:{},exception:{corrupt:function(t){this.toString=function(){return"CORRUPT: "+this.message},this.message=t},invalid:function(t){this.toString=function(){return"INVALID: "+this.message},this.message=t},bug:function(t){this.toString=function(){return"BUG: "+this.message},this.message=t},notReady:function(t){this.toString=function(){return"NOT READY: "+this.message},this.message=t}}};"undefined"!=typeof module&&module.exports&&(module.exports=le),le.cipher.aes=function(t){this._tables[0][0][0]||this._precompute();var e,n,i,r,o,s=this._tables[0][4],a=this._tables[1],u=t.length,c=1;if(4!==u&&6!==u&&8!==u)throw new le.exception.invalid("invalid aes key size");for(this._key=[r=t.slice(0),o=[]],e=u;4*u+28>e;e++)i=r[e-1],(e%u===0||8===u&&e%u===4)&&(i=s[i>>>24]<<24^s[i>>16&255]<<16^s[i>>8&255]<<8^s[255&i],e%u===0&&(i=i<<8^i>>>24^c<<24,c=c<<1^283*(c>>7))),r[e]=r[e-u]^i;for(n=0;e;n++,e--)i=r[3&n?e:e-4],o[n]=4>=e||4>n?i:a[0][s[i>>>24]]^a[1][s[i>>16&255]]^a[2][s[i>>8&255]]^a[3][s[255&i]]},le.cipher.aes.prototype={encrypt:function(t){return this._crypt(t,0)},decrypt:function(t){return this._crypt(t,1)},_tables:[[[],[],[],[],[]],[[],[],[],[],[]]],_precompute:function(){var t,e,n,i,r,o,s,a,u,c=this._tables[0],l=this._tables[1],p=c[4],h=l[4],d=[],f=[];for(t=0;256>t;t++)f[(d[t]=t<<1^283*(t>>7))^t]=t;for(e=n=0;!p[e];e^=i||1,n=f[n]||1)for(s=n^n<<1^n<<2^n<<3^n<<4,s=s>>8^255&s^99,p[e]=s,h[s]=e,o=d[r=d[i=d[e]]],u=16843009*o^65537*r^257*i^16843008*e,a=257*d[s]^16843008*s,t=0;4>t;t++)c[t][e]=a=a<<24^a>>>8,l[t][s]=u=u<<24^u>>>8;for(t=0;5>t;t++)c[t]=c[t].slice(0),l[t]=l[t].slice(0)},_crypt:function(t,e){if(4!==t.length)throw new le.exception.invalid("invalid aes block size");var n,i,r,o,s=this._key[e],a=t[0]^s[0],u=t[e?3:1]^s[1],c=t[2]^s[2],l=t[e?1:3]^s[3],p=s.length/4-2,h=4,d=[0,0,0,0],f=this._tables[e],m=f[0],y=f[1],g=f[2],b=f[3],v=f[4];for(o=0;p>o;o++)n=m[a>>>24]^y[u>>16&255]^g[c>>8&255]^b[255&l]^s[h],i=m[u>>>24]^y[c>>16&255]^g[l>>8&255]^b[255&a]^s[h+1],r=m[c>>>24]^y[l>>16&255]^g[a>>8&255]^b[255&u]^s[h+2],l=m[l>>>24]^y[a>>16&255]^g[u>>8&255]^b[255&c]^s[h+3],h+=4,a=n,u=i,c=r;for(o=0;4>o;o++)d[e?3&-o:o]=v[a>>>24]<<24^v[u>>16&255]<<16^v[c>>8&255]<<8^v[255&l]^s[h++],n=a,a=u,u=c,c=l,l=n;return d}},le.bitArray={bitSlice:function(t,e,n){return t=le.bitArray._shiftRight(t.slice(e/32),32-(31&e)).slice(1),void 0===n?t:le.bitArray.clamp(t,n-e)},extract:function(t,e,n){var i,r=Math.floor(-e-n&31);return i=-32&(e+n-1^e)?t[e/32|0]<<32-r^t[e/32+1|0]>>>r:t[e/32|0]>>>r,i&(1<0&&e&&(t[n-1]=le.bitArray.partial(e,t[n-1]&2147483648>>e-1,1)),t},partial:function(t,e,n){return 32===t?e:(n?0|e:e<<32-t)+1099511627776*t},getPartial:function(t){return Math.round(t/1099511627776)||32},equal:function(t,e){if(le.bitArray.bitLength(t)!==le.bitArray.bitLength(e))return!1;var n,i=0;for(n=0;n=32;e-=32)i.push(n),n=0;if(0===e)return i.concat(t);for(r=0;r>>e),n=t[r]<<32-e;return s=t.length?t[t.length-1]:0,o=le.bitArray.getPartial(s),i.push(le.bitArray.partial(e+o&31,e+o>32?n:i.pop(),1)),i},_xor4:function(t,e){return[t[0]^e[0],t[1]^e[1],t[2]^e[2],t[3]^e[3]]}},le.codec.hex={fromBits:function(t){var e,n="";for(e=0;ee;e++)0===(3&e)&&(n=t[e/4]),i+=String.fromCharCode(n>>>24),n<<=8;return decodeURIComponent(escape(i))},toBits:function(t){t=unescape(encodeURIComponent(t));var e,n=[],i=0;for(e=0;e>>o)>>>26),6>o?(a=t[i]<<6-o,o+=26,i++):(a<<=6,o-=6);for(;3&r.length&&!e;)r+="=";return r},toBits:function(t,e){t=t.replace(/\s|=/g,"");var n,i,r=[],o=0,s=le.codec.base64._chars,a=0;for(e&&(s=s.substr(0,62)+"-_"),n=0;ni)throw new le.exception.invalid("this isn't base64!");o>26?(o-=26,r.push(a^i>>>o),a=i<<32-o):(o+=6,a^=i<<32-o)}return 56&o&&r.push(le.bitArray.partial(56&o,a,1)),r}},le.codec.base64url={fromBits:function(t){return le.codec.base64.fromBits(t,1,1)},toBits:function(t){return le.codec.base64.toBits(t,1)}},void 0===le.beware&&(le.beware={}),le.beware["CBC mode is dangerous because it doesn't protect message integrity."]=function(){le.mode.cbc={name:"cbc",encrypt:function(t,e,n,i){if(i&&i.length)throw new le.exception.invalid("cbc can't authenticate data");if(128!==le.bitArray.bitLength(n))throw new le.exception.invalid("cbc iv must be 128 bits");var r,o=le.bitArray,s=o._xor4,a=o.bitLength(e),u=0,c=[];if(7&a)throw new le.exception.invalid("pkcs#5 padding only works for multiples of a byte");for(r=0;a>=u+128;r+=4,u+=128)n=t.encrypt(s(n,e.slice(r,r+4))),c.splice(r,0,n[0],n[1],n[2],n[3]);return a=16843009*(16-(a>>3&15)),n=t.encrypt(s(n,o.concat(e,[a,a,a,a]).slice(r,r+4))),c.splice(r,0,n[0],n[1],n[2],n[3]),c},decrypt:function(t,e,n,i){if(i&&i.length)throw new le.exception.invalid("cbc can't authenticate data");if(128!==le.bitArray.bitLength(n))throw new le.exception.invalid("cbc iv must be 128 bits");if(127&le.bitArray.bitLength(e)||!e.length)throw new le.exception.corrupt("cbc ciphertext must be a positive multiple of the block size");var r,o,s,a=le.bitArray,u=a._xor4,c=[];for(i=i||[],r=0;r16)throw new le.exception.corrupt("pkcs#5 padding corrupt");if(s=16843009*o,!a.equal(a.bitSlice([s,s,s,s],0,8*o),a.bitSlice(c,32*c.length-8*o,32*c.length)))throw new le.exception.corrupt("pkcs#5 padding corrupt");return a.bitSlice(c,0,32*c.length-8*o)}}},le.misc.hmac=function(t,e){this._hash=e=e||le.hash.sha256;var n,i=[[],[]],r=e.prototype.blockSize/32;for(this._baseHash=[new e,new e],t.length>r&&(t=e.hash(t)),n=0;r>n;n++)i[0][n]=909522486^t[n],i[1][n]=1549556828^t[n];this._baseHash[0].update(i[0]),this._baseHash[1].update(i[1])},le.misc.hmac.prototype.encrypt=le.misc.hmac.prototype.mac=function(t,e){var n=new this._hash(this._baseHash[0]).update(t,e).finalize();return new this._hash(this._baseHash[1]).update(n).finalize()},le.hash.sha256=function(t){this._key[0]||this._precompute(),t?(this._h=t._h.slice(0),this._buffer=t._buffer.slice(0),this._length=t._length):this.reset()},le.hash.sha256.hash=function(t){return(new le.hash.sha256).update(t).finalize()},le.hash.sha256.prototype={blockSize:512,reset:function(){return this._h=this._init.slice(0),this._buffer=[],this._length=0,this},update:function(t){"string"==typeof t&&(t=le.codec.utf8String.toBits(t));var e,n=this._buffer=le.bitArray.concat(this._buffer,t),i=this._length,r=this._length=i+le.bitArray.bitLength(t);for(e=512+i&-512;r>=e;e+=512)this._block(n.splice(0,16));return this},finalize:function(){var t,e=this._buffer,n=this._h;for(e=le.bitArray.concat(e,[le.bitArray.partial(1,1)]),t=e.length+2;15&t;t++)e.push(0);for(e.push(Math.floor(this._length/4294967296)),e.push(0|this._length);e.length;)this._block(e.splice(0,16));return this.reset(),n},_init:[],_key:[],_precompute:function(){function t(t){return 4294967296*(t-Math.floor(t))|0}var e,n=0,i=2;t:for(;64>n;i++){for(e=2;i>=e*e;e++)if(i%e===0)continue t;8>n&&(this._init[n]=t(Math.pow(i,.5))),this._key[n]=t(Math.pow(i,1/3)),n++}},_block:function(t){var e,n,i,r,o=t.slice(0),s=this._h,a=this._key,u=s[0],c=s[1],l=s[2],p=s[3],h=s[4],d=s[5],f=s[6],m=s[7];for(e=0;64>e;e++)16>e?n=o[e]:(i=o[e+1&15],r=o[e+14&15],n=o[15&e]=(i>>>7^i>>>18^i>>>3^i<<25^i<<14)+(r>>>17^r>>>19^r>>>10^r<<15^r<<13)+o[15&e]+o[e+9&15]|0),n=n+m+(h>>>6^h>>>11^h>>>25^h<<26^h<<21^h<<7)+(f^h&(d^f))+a[e],m=f,f=d,d=h,h=p+n|0,p=l,l=c,c=u,u=n+(c&l^p&(c^l))+(c>>>2^c>>>13^c>>>22^c<<30^c<<19^c<<10)|0;s[0]=s[0]+u|0,s[1]=s[1]+c|0,s[2]=s[2]+l|0,s[3]=s[3]+p|0,s[4]=s[4]+h|0,s[5]=s[5]+d|0,s[6]=s[6]+f|0,s[7]=s[7]+m|0}},le.random={randomWords:function(t,e){var n,i,r=[],o=this.isReady(e);if(o===this._NOT_READY)throw new le.exception.notReady("generator isn't seeded");for(o&this._REQUIRES_RESEED&&this._reseedFromPools(!(o&this._READY)),n=0;t>n;n+=4)(n+1)%this._MAX_WORDS_PER_BURST===0&&this._gate(),i=this._gen4words(),r.push(i[0],i[1],i[2],i[3]);return this._gate(),r.slice(0,t)},setDefaultParanoia:function(t){this._defaultParanoia=t},addEntropy:function(t,e,n){n=n||"user";var i,r,o,s=(new Date).valueOf(),a=this._robins[n],u=this.isReady(),c=0;switch(i=this._collectorIds[n],void 0===i&&(i=this._collectorIds[n]=this._collectorIdNext++),void 0===a&&(a=this._robins[n]=0),this._robins[n]=(this._robins[n]+1)%this._pools.length,typeof t){case"number":void 0===e&&(e=1),this._pools[a].update([i,this._eventId++,1,e,s,1,0|t]);break;case"object":var l=Object.prototype.toString.call(t);if("[object Uint32Array]"===l){for(o=[],r=0;r0;)e++,o>>>=1;this._pools[a].update([i,this._eventId++,2,e,s,t.length].concat(t))}break;case"string":void 0===e&&(e=t.length),this._pools[a].update([i,this._eventId++,3,e,s,t.length]),this._pools[a].update(t);break;default:c=1}if(c)throw new le.exception.bug("random: addEntropy only supports number, array of numbers or string");this._poolEntropy[a]+=e,this._poolStrength+=e,u===this._NOT_READY&&(this.isReady()!==this._NOT_READY&&this._fireEvent("seeded",Math.max(this._strength,this._poolStrength)),this._fireEvent("progress",this.getProgress()))},isReady:function(t){var e=this._PARANOIA_LEVELS[void 0!==t?t:this._defaultParanoia];return this._strength&&this._strength>=e?this._poolEntropy[0]>this._BITS_PER_RESEED&&(new Date).valueOf()>this._nextReseed?this._REQUIRES_RESEED|this._READY:this._READY:this._poolStrength>=e?this._REQUIRES_RESEED|this._NOT_READY:this._NOT_READY},getProgress:function(t){var e=this._PARANOIA_LEVELS[t?t:this._defaultParanoia];return this._strength>=e?1:this._poolStrength>e?1:this._poolStrength/e},startCollectors:function(){if(!this._collectorsStarted){if(window.addEventListener)window.addEventListener("load",this._loadTimeCollector,!1),window.addEventListener("mousemove",this._mouseCollector,!1);else{if(!document.attachEvent)throw new le.exception.bug("can't attach event");document.attachEvent("onload",this._loadTimeCollector),document.attachEvent("onmousemove",this._mouseCollector)}this._collectorsStarted=!0}},stopCollectors:function(){this._collectorsStarted&&(window.removeEventListener?(window.removeEventListener("load",this._loadTimeCollector,!1),window.removeEventListener("mousemove",this._mouseCollector,!1)):window.detachEvent&&(window.detachEvent("onload",this._loadTimeCollector),window.detachEvent("onmousemove",this._mouseCollector)),this._collectorsStarted=!1)},addEventListener:function(t,e){this._callbacks[t][this._callbackI++]=e},removeEventListener:function(t,e){var n,i,r=this._callbacks[t],o=[];for(i in r)r.hasOwnProperty(i)&&r[i]===e&&o.push(i);for(n=0;nt&&(this._counter[t]=this._counter[t]+1|0,!this._counter[t]);t++);return this._cipher.encrypt(this._counter)},_gate:function(){this._key=this._gen4words().concat(this._gen4words()),this._cipher=new le.cipher.aes(this._key)},_reseed:function(t){this._key=le.hash.sha256.hash(this._key.concat(t)),this._cipher=new le.cipher.aes(this._key);for(var e=0;4>e&&(this._counter[e]=this._counter[e]+1|0,!this._counter[e]);e++);},_reseedFromPools:function(t){var e,n=[],i=0;for(this._nextReseed=n[0]=(new Date).valueOf()+this._MILLISECONDS_PER_RESEED,e=0;16>e;e++)n.push(4294967296*Math.random()|0);for(e=0;e=1<this._strength&&(this._strength=i),this._reseedCount++,this._reseed(n)},_mouseCollector:function(t){var e=t.x||t.clientX||t.offsetX||0,n=t.y||t.clientY||t.offsetY||0;le.random.addEntropy([e,n],2,"mouse")},_loadTimeCollector:function(){le.random.addEntropy((new Date).valueOf(),2,"loadtime")},_fireEvent:function(t,e){var n,i=le.random._callbacks[t],r=[];for(n in i)i.hasOwnProperty(n)&&r.push(i[n]);for(n=0;n0&&(i=i.concat(c(e)));return i},l=function(){var n,i,o,s,a,c;try{a=r(t),n=e.decode(a)}catch(l){throw"Invalid encryption key. Please use the key labeled 'Client-Side Encryption Key'"}if(o=u(n),2!==o.length)throw"Invalid encryption key. Please use the key labeled 'Client-Side Encryption Key'";return s=o[0],i=o[1],c=new Z,c.setPublic(s,i),c},p=function(){return{key:le.random.randomWords(8,0),sign:function(t){var e=new le.misc.hmac(this.key,le.hash.sha256),n=e.encrypt(t);return le.codec.base64.fromBits(n)}}};i.encrypt=function(t){var e=l(),r=pe.generateAesKey(),o=p(),s=r.encrypt(t),a=o.sign(le.codec.base64.toBits(s)),u=le.bitArray.concat(r.key,o.key),c=le.codec.base64.fromBits(u),h=e.encrypt(c),d="$bt4|javascript_"+i.version.replace(/\./g,"_")+"$",f=null;return h&&(f=n(h)),d+f+"$"+s+"$"+a},i.encryptForm=function(t){var e,n,r,u,l,p;for(t=a(t),p=c(t);o.length>0;){try{t.removeChild(o[0])}catch(h){}o.splice(0,1)}for(l=0;le;e++)i.push(new h(t.paymentMethods[e]));return i},t,this.requestTimeout)},r.prototype.tokenizeCoinbase=function(t,e){t.options={validate:!1},this.addCoinbase(t,function(t,n){t?e(t,null):n&&n.nonce?e(t,n):e("Unable to tokenize coinbase account.",null)})},r.prototype.tokenizePayPalAccount=function(t,e){t.options={validate:!1},this.addPayPalAccount(t,function(t,n){t?e(t,null):n&&n.nonce?e(null,n):e("Unable to tokenize paypal account.",null)})},r.prototype.tokenizeCard=function(t,e){t.options={validate:!1},this.addCreditCard(t,function(t,n){n&&n.nonce?e(t,n.nonce,{type:n.type,details:n.details}):e("Unable to tokenize card.",null)})},r.prototype.lookup3DS=function(t,e){var n=c.joinUrlFragments([this.clientApiUrl,"v1/payment_methods",t.nonce,"three_d_secure/lookup"]),i=c.mergeOptions(this.attrs,{amount:t.amount});this.driver.post(n,i,function(t){return t},e,this.requestTimeout)},r.prototype.createSEPAMandate=function(t,e){var n=c.mergeOptions(this.attrs,{sepaMandate:t});this.driver.post(c.joinUrlFragments([this.clientApiUrl,"v1","sepa_mandates.json"]),n,function(t){return{sepaMandate:new l(t.europeBankAccounts[0].sepaMandates[0]),sepaBankAccount:new p(t.europeBankAccounts[0])}},e,this.requestTimeout)},r.prototype.addCoinbase=function(t,e){var n;delete t.share,n=c.mergeOptions(this.attrs,{coinbaseAccount:t,_meta:{integration:this.integration||"custom",source:"coinbase"}}),this.driver.post(c.joinUrlFragments([this.clientApiUrl,"v1","payment_methods/coinbase_accounts"]),n,function(t){return new d(t.coinbaseAccounts[0])},e,this.requestTimeout)},r.prototype.addPayPalAccount=function(t,e){var n;delete t.share,n=c.mergeOptions(this.attrs,{paypalAccount:t,_meta:{integration:this.integration||"paypal",source:"paypal"}}),this.driver.post(c.joinUrlFragments([this.clientApiUrl,"v1","payment_methods","paypal_accounts"]),n,function(t){return new f(t.paypalAccounts[0])},e,this.requestTimeout)},r.prototype.addCreditCard=function(t,e){var n,i,r=t.share;delete t.share,i=m(t),n=c.mergeOptions(this.attrs,{share:r,creditCard:i,_meta:{integration:this.integration||"custom",source:"form"}}),this.driver.post(c.joinUrlFragments([this.clientApiUrl,"v1","payment_methods/credit_cards"]),n,function(t){return new h(t.creditCards[0])},e,this.requestTimeout)},r.prototype.unlockCreditCard=function(t,e,n){var i=c.mergeOptions(this.attrs,{challengeResponses:e});this.driver.put(c.joinUrlFragments([this.clientApiUrl,"v1","payment_methods/",t.nonce]),i,function(t){return new h(t.paymentMethods[0])},n,this.requestTimeout)},r.prototype.sendAnalyticsEvents=function(t,e){var i,r,o=this.analyticsUrl,s=[];if(t=c.isArray(t)?t:[t],!o)return void(e&&e.apply(null,[null,{}]));for(r in t)t.hasOwnProperty(r)&&s.push({kind:t[r]});i=c.mergeOptions(this.attrs,{braintree_library_version:this.sdkVersion,analytics:s,_meta:{merchantAppId:this.merchantAppId,platform:"web",platformVersion:n.navigator.userAgent,integrationType:this.integration,sdkVersion:this.sdkVersion}}),this.driver.post(o,i,function(t){return t},e,this.requestTimeout)},r.prototype.decryptBrowserswitchPayload=function(t,e){var n=c.mergeOptions(this.attrs,{asymmetric_encrypted_payload:t}),i=c.joinUrlFragments([this.clientApiUrl,"/v1/paypal_browser_switch/decrypt"]);this.driver.post(i,n,function(t){return t},e,this.requestTimeout)},r.prototype.encryptBrowserswitchReturnPayload=function(t,e,n){var i=c.mergeOptions(this.attrs,{payload:t,aesKey:e}),r=c.joinUrlFragments([this.clientApiUrl,"/v1/paypal_browser_switch/encrypt"]);this.driver.post(r,i,function(t){return t},n,this.requestTimeout)},r.prototype.exchangePaypalTokenForConsentCode=function(t,e){var n=c.mergeOptions(this.attrs,t);this.attrs.merchantAccountId&&(n.merchant_account_id=this.attrs.merchantAccountId);var i=c.joinUrlFragments([this.clientApiUrl,"/v1/paypal_account_service/merchant_consent"]);this.driver.post(i,n,function(t){return t},e,this.requestTimeout)},e.exports=r}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./coinbase-account":3,"./credit-card":4,"./europe-bank-account":5,"./normalize-api-fields":9,"./parse-client-token":10,"./paypal-account":11,"./request-driver":13,"./sepa-mandate":14,"./util":15,"braintree-3ds":24,"braintree-utilities":36}],3:[function(t,e){"use strict";function n(t){var e,n;for(e=0;e=400?[t,null]:[null,e(t)]}function i(){}function r(t,e,r,o,s,a){var u;s=s||i,null==a&&(a=6e4),u=o(t,e,function(t,e){c[e]&&(clearTimeout(c[e]),s.apply(null,n(t,function(t){return r(t)})))}),"number"==typeof a?c[u]=setTimeout(function(){c[u]=null,s.apply(null,[{errors:"Unknown error"},null])},a):s.apply(null,[{errors:"Timeout must be a number"},null])}function o(t,e,n,i,o){e._method="POST",r(t,e,n,u.get,i,o)}function s(t,e,n,i,o){r(t,e,n,u.get,i,o)}function a(t,e,n,i,o){e._method="PUT",r(t,e,n,u.get,i,o)}var u=t("./jsonp"),c=[];e.exports={get:s,post:o,put:a}},{"./jsonp":8}],8:[function(t,e){(function(n){"use strict";function i(t,e){var n=document.createElement("script"),i=!1;n.src=t,n.async=!0;var r=e||l.error;"function"==typeof r&&(n.onerror=function(e){r({url:t,event:e})}),n.onload=n.onreadystatechange=function(){i||this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState||(i=!0,n.onload=n.onreadystatechange=null,n&&n.parentNode&&n.parentNode.removeChild(n))},a||(a=document.getElementsByTagName("head")[0]),a.appendChild(n)}function r(t,e){var n,i,o,s=[];for(var o in t)t.hasOwnProperty(o)&&(i=t[o],n=e?u.isArray(t)?e+"[]":e+"["+o+"]":o,s.push("object"==typeof i?r(i,n):encodeURIComponent(n)+"="+encodeURIComponent(i)));return s.join("&")}function o(t,e,n,o){var s=-1===(t||"").indexOf("?")?"?":"&";o=o||l.callbackName||"callback";var a=o+"_json"+u.generateUUID();return s+=r(e),c[a]=function(t){n(t,a);try{delete c[a]}catch(e){}c[a]=null},i(t+s+"&"+o+"="+a),a}function s(t){l=t}var a,u=t("./util"),c=n,l={};e.exports={get:o,init:s,stringify:r}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./util":15}],9:[function(t,e){"use strict";function n(t){var e,n={billingAddress:t.billingAddress||{}};for(e in t)if(t.hasOwnProperty(e))switch(e.replace(/_/,"").toLowerCase()){case"postalcode":case"countryname":case"countrycodenumeric":case"countrycodealpha2":case"countrycodealpha3":case"region":case"extendedaddress":case"locality":case"firstname":case"lastname":case"company":case"streetaddress":n.billingAddress[e]=t[e];break;default:n[e]=t[e]}return n}e.exports={normalizeCreditCardFields:n}},{}],10:[function(t,e){"use strict";function n(t){var e;if(!t)throw new Error("Braintree API Client Misconfigured: clientToken required.");if("object"==typeof t&&null!==t)e=t;else{try{t=window.atob(t)}catch(n){}try{e=JSON.parse(t)}catch(r){throw new Error("Braintree API Client Misconfigured: clientToken is invalid.")}}if(!e.hasOwnProperty("clientApiUrl")||!i.isWhitelistedDomain(e.clientApiUrl))throw new Error("Braintree API Client Misconfigured: clientToken is invalid.");return e}var i=t("braintree-utilities");t("./polyfill"),e.exports=n},{"./polyfill":12,"braintree-utilities":36}],11:[function(t,e){"use strict";function n(t){var e,n;for(e=0;e>4&3,l=(15&s)<<4|a>>2&15,p=(3&a)<<6|63&u;i+=String.fromCharCode(c)+(l?String.fromCharCode(l):"")+(p?String.fromCharCode(p):"")}while(r-1&&(n=n.split("#")[0]),e=a.makeQueryString({acsUrl:t.acsUrl,pareq:t.pareq,termUrl:t.termUrl+"&three_d_secure_version="+c,md:t.md,parentUrl:n}),this.assetsUrl+"/3ds/"+c+"/html/style_frame?"+e},e.exports=r},{"../shared/receiver":29,"braintree-utilities":21}],23:[function(t,e){"use strict";function n(){}function i(t,e){e=e||{},this.clientToken=e.clientToken,this.container=e.container,this.api=t,this.nonce=null,this._loader=null,this._boundHandleUserClose=r.bind(this._handleUserClose,this)}var r=t("braintree-utilities"),o=t("./authorization_service"),s=t("./loader");i.prototype.verify=function(t,e){if(!r.isFunction(e))throw this.api.sendAnalyticsEvents("3ds.web.no_callback"),new Error("No suitable callback argument was given");r.isFunction(t.onUserClose)&&(this._onUserClose=t.onUserClose),r.isFunction(t.onLookupComplete)&&(this._onLookupComplete=t.onLookupComplete),(void 0===t.useDefaultLoader||t.useDefaultLoader===!0)&&this._createDefaultLoader();var n={nonce:"",amount:t.amount},i=t.creditCard;if("string"==typeof i)n.nonce=i,this.api.sendAnalyticsEvents("3ds.web.verify.nonce"),this.startVerification(n,e);else{var o=this,s=function(t,i){return t?(o._removeDefaultLoader(),e(t)):(n.nonce=i,void o.startVerification(n,e))};this.api.sendAnalyticsEvents("3ds.web.verify.credit_card"),this.api.tokenizeCard(i,s)}},i.prototype.startVerification=function(t,e){this.api.lookup3DS(t,r.bind(this.handleLookupResponse(e),this))},i.prototype.handleLookupResponse=function(t){var e=this;return function(n,i){var s;this._onLookupComplete(),n?t(n.error):i.lookup&&i.lookup.acsUrl&&i.lookup.acsUrl.length>0?(e.nonce=i.paymentMethod.nonce,s=new o(this.clientToken.assetsUrl,this.container),s.get(i.lookup,r.bind(this.handleAuthenticationResponse(t),this)),this._detachListeners(),this._attachListeners()):(e.nonce=i.paymentMethod.nonce,t(null,{nonce:e.nonce,verificationDetails:i.threeDSecureInfo}))}},i.prototype.handleAuthenticationResponse=function(t){return function(e){var n,i=r.decodeQueryString(e);i.user_closed||(n=JSON.parse(i.auth_response),n.success?t(null,{nonce:n.paymentMethod.nonce,verificationDetails:n.threeDSecureInfo}):n.threeDSecureInfo&&n.threeDSecureInfo.liabilityShiftPossible?t(null,{nonce:this.nonce,verificationDetails:n.threeDSecureInfo}):t(n.error))}},i.prototype._attachListeners=function(){r.addEventListener(window,"message",this._boundHandleUserClose)},i.prototype._detachListeners=function(){r.removeEventListener(window,"message",this._boundHandleUserClose)},i.prototype._createDefaultLoader=function(){this._loader=new s,document.body.appendChild(this._loader.getElement())},i.prototype._removeDefaultLoader=function(){if(this._loader){var t=this._loader.getElement(),e=t.parentNode;e&&e.removeChild(t),this._loader.dispose(),this._loader=null}},i.prototype._handleUserClose=function(t){"user_closed=true"===t.data&&this._onUserClose()},i.prototype._onUserClose=n,i.prototype._onLookupComplete=function(){this._removeDefaultLoader()},e.exports=i},{"./authorization_service":22,"./loader":25,"braintree-utilities":21}],24:[function(t,e){"use strict";var n=t("./client");e.exports={create:function(t,e){var i=new n(t,e);return i}}},{"./client":23}],25:[function(t,e){"use strict";function n(){this._element=document.createElement("div"),this._element.style.cssText=this._cssDeclarations,this._display=null,this._initialize()}var i=t("./loader_display"),r=t("./loader_message"),o=t("./loader_spinner");n.prototype._cssDeclarations=["filter:progid:DXImageTransform.Microsoft.Gradient(StartColorStr=#7F000000, EndColorStr=#7F000000)","background-color: rgba(0, 0, 0, 0.5)","display: table","height: 100%","left: 0","position: fixed","right: 0","top: 0","width: 100%","z-index: 99999"].join(";"),n.prototype.getElement=function(){return this._element},n.prototype.dispose=function(){this._display.dispose(),this._display=null,this._element=null},n.prototype._initialize=function(){var t=new o,e=window.SVGElement&&window.SVGAnimateElement&&window.SVGAnimateTransformElement;e||(t=new r("Loading...")),this._display=new i(t),this.getElement().appendChild(this._display.getElement())},e.exports=n},{"./loader_display":26,"./loader_message":27,"./loader_spinner":28}],26:[function(t,e){"use strict";function n(t){this._element=document.createElement("div"),this._element.style.cssText=this._cssDeclarations,this._displayObject=t,this._initialize()}n.prototype._cssDeclarations=["display: table-cell","vertical-align: middle"].join(";"),n.prototype.getElement=function(){return this._element},n.prototype.dispose=function(){this._displayObject.dispose(),this._displayObject=null,this._element=null},n.prototype._initialize=function(){this.getElement().appendChild(this._displayObject.getElement())},e.exports=n},{}],27:[function(t,e){"use strict";function n(t){this._element=document.createElement("div"),this._element.style.cssText=this._cssDeclarations,this._element.innerHTML=t}n.prototype._cssDeclarations=["color: #fff","font-family: Helvetica, sans-serif","font-size: 12px","text-align: center"].join(";"),n.prototype.getElement=function(){return this._element},n.prototype.dispose=function(){this._element=null},e.exports=n},{}],28:[function(t,e){"use strict";function n(){this._element=document.createElement("div"),this._element.style.cssText=this._cssDeclarations,this._element.innerHTML=this._markup}n.prototype._cssDeclarations=["height: 36px","margin-left: auto","margin-right: auto","width: 36px"].join(";"),n.prototype._markup=['',' ',' '," ",""].join(""),n.prototype.getElement=function(){return this._element},n.prototype.dispose=function(){this._element=null},e.exports=n},{}],29:[function(t,e){"use strict";function n(t){this.postMessageReceiver(t),this.hashChangeReceiver(t)}var i=t("braintree-utilities");n.prototype.postMessageReceiver=function(t){var e=this;this.wrappedCallback=function(n){var i=n.data;(/^(auth_response=)/.test(i)||"user_closed=true"===i)&&(t(i),e.stopListening())},i.addEventListener(window,"message",this.wrappedCallback)},n.prototype.hashChangeReceiver=function(t){var e,n=window.location.hash,i=this;this.poll=setInterval(function(){e=window.location.hash,e.length>0&&e!==n&&(i.stopListening(),e=e.substring(1,e.length),t(e),window.location.hash=n.length>0?n:"")},10)},n.prototype.stopListening=function(){clearTimeout(this.poll),i.removeEventListener(window,"message",this.wrappedCallback)},e.exports=n},{"braintree-utilities":21}],30:[function(t,e){"use strict";var n,i=Array.prototype.indexOf;n=i?function(t,e){return t.indexOf(e)}:function(t,e){for(var n=0,i=t.length;i>n;n++)if(t[n]===e)return n;return-1},e.exports={indexOf:n}},{}],31:[function(t,e,n){arguments[4][17][0].apply(n,arguments)},{dup:17}],32:[function(t,e,n){arguments[4][18][0].apply(n,arguments)},{dup:18}],33:[function(t,e,n){arguments[4][19][0].apply(n,arguments)},{dup:19}],34:[function(t,e){"use strict";function n(t){var e,n,i,r,o=[{min:0,max:180,chars:7},{min:181,max:620,chars:14},{min:621,max:960,chars:22}];for(r=o.length,t=t||window.innerWidth,n=0;r>n;n++)i=o[n],t>=i.min&&t<=i.max&&(e=i.chars);return e||60}function i(t,e){var n,i;return-1===t.indexOf("@")?t:(t=t.split("@"),n=t[0],i=t[1],n.length>e&&(n=n.slice(0,e)+"..."),i.length>e&&(i="..."+i.slice(-e)),n+"@"+i)}e.exports={truncateEmail:i,getMaxCharLength:n}},{}],35:[function(t,e){"use strict";function n(){return"https:"===window.location.protocol}function i(t){switch(t){case null:case void 0:return"";case!0:return"1";case!1:return"0";default:return encodeURIComponent(t)}}function r(t,e){var n,o,s=[];for(o in t)if(t.hasOwnProperty(o)){var a=t[o];n=e?e+"["+o+"]":o,"object"==typeof a?s.push(r(a,n)):void 0!==a&&null!==a&&s.push(i(n)+"="+i(a))}return s.join("&")}function o(t){for(var e={},n=t.split("&"),i=0;i=0;i--)r=g[i],r.closed===!0?g=g.slice(i,1):n!==r&&p(r.top,t,e)}function d(t,e){function n(r,o){t(r,o),y.target(e).unsubscribe(i,n)}var i=u();return y.target(e).subscribe(i,n),i}function f(t,e,n){return"string"!=typeof t?!0:"function"!=typeof e?!0:"string"!=typeof n?!0:!1}var m,y,g=[],b={},v="/*framebus*/";return a(),y={target:e,include:t,publish:n,pub:n,trigger:n,emit:n,subscribe:i,sub:i,on:i,unsubscribe:r,unsub:r,off:r}})},{}],40:[function(t,e){"use strict";function n(t,e){a.emit(a.events.ERROR,{type:e,message:t})}function i(t){t=t||{};var e=t.coinbase;if(null==t.apiClient)n("settings.apiClient is required for coinbase",u);else if(t.configuration.coinbaseEnabled)if(e&&(e.container||e.button))if(e.container&&e.button)n("options.coinbase.container and options.coinbase.button are mutually exclusive",u);else{if(s.isSupportedBrowser())return!0;n("Coinbase is not supported by your browser. Please consider upgrading","UNSUPPORTED_BROWSER") -}else n("Either options.coinbase.container or options.coinbase.button is required for Coinbase integrations",u);else n("Coinbase is not enabled for your merchant account",u);return!1}function r(t){return i(t)?new o(t):void 0}var o=t("./lib/coinbase"),s=t("./lib/detector"),a=t("braintree-bus"),u="CONFIGURATION";e.exports={create:r}},{"./lib/coinbase":43,"./lib/detector":45,"braintree-bus":51}],41:[function(t,e){(function(t){"use strict";function n(e){return e=e||t.navigator.userAgent,/AppleWebKit\//.test(e)&&/Mobile\//.test(e)?e.replace(/.* OS ([0-9_]+) like Mac OS X.*/,"$1").replace(/_/g,"."):null}function i(e){e=e||t.navigator.userAgent;var n=null,i=/MSIE.(\d+)/.exec(e);return/Trident/.test(e)&&(n=11),i&&(n=parseInt(i[1],10)),n}function r(e){return e=e||t.navigator.userAgent,/Android/.test(e)?e.replace(/^.* Android ([0-9\.]+).*$/,"$1"):null}e.exports={ieVersion:i,iOSSafariVersion:n,androidVersion:r}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],42:[function(t,e){"use strict";function n(t,e,n){return t?(i.emit(i.events.ERROR,t.error),void n._sendAnalyticsEvent("generate.nonce.failed")):(i.emit(i.events.PAYMENT_METHOD_GENERATED,e),void n._sendAnalyticsEvent("generate.nonce.succeeded"))}var i=t("braintree-bus");e.exports={tokenize:n}},{"braintree-bus":51}],43:[function(t,e){(function(n){"use strict";function i(t){return{clientId:t.configuration.coinbase.clientId,redirectUrl:t.configuration.coinbase.redirectUrl,scopes:t.configuration.coinbase.scopes||c.SCOPES,meta:{authorizations_merchant_account:t.configuration.coinbase.merchantAccount||""}}}function r(t){var e;this.buttonId=t.coinbase.button||c.BUTTON_ID,this.apiClient=t.apiClient,this.assetsUrl=t.configuration.assetsUrl,this.environment=t.configuration.coinbase.environment,this._onOAuthSuccess=o.bind(this._onOAuthSuccess,this),this._handleButtonClick=o.bind(this._handleButtonClick,this),this.popupParams=i(t),this.redirectDoneInterval=null,t.coinbase.container?(e=o.normalizeElement(t.coinbase.container),this._insertFrame(e)):(n.braintreeCoinbasePopupCallback=this._onOAuthSuccess,e=document.body,o.addEventListener(e,"click",this._handleButtonClick),this._sendAnalyticsEvent("initialized"))}var o=t("braintree-utilities"),s=t("./dom/composer"),a=t("./url-composer"),u=t("./callbacks"),c=t("./constants"),l=t("./detector"),p=t("braintree-bus");r.prototype._sendAnalyticsEvent=function(t){var e=this.apiClient.integration+".web.coinbase.";this.apiClient.sendAnalyticsEvents(e+t)},r.prototype._insertFrame=function(t){var e=s.createFrame({src:this.assetsUrl+"/coinbase/"+c.VERSION+"/coinbase-frame.html"});p.emit(p.events.ASYNC_DEPENDENCY_INITIALIZING),t.appendChild(e)},r.prototype._onOAuthSuccess=function(t){return t.code?(p.emit("coinbase:view:navigate","loading"),this._sendAnalyticsEvent("popup.authorized"),this.apiClient.tokenizeCoinbase({code:t.code,query:a.getQueryString()},o.bind(function(t,e){u.tokenize.apply(null,[t,e,this])},this)),void this._closePopup()):void this._sendAnalyticsEvent("popup.denied")},r.prototype._clearPollForRedirectDone=function(){this.redirectDoneInterval&&(clearInterval(this.redirectDoneInterval),this.redirectDoneInterval=null)},r.prototype._closePopup=function(t){t=t||this.popup,l.shouldCloseFromParent()&&t.close(),this._popupCleanup()},r.prototype._popupCleanup=function(){this._clearPollForRedirectDone(),p.emit(p.events.UI_POPUP_DID_CLOSE,{source:c.INTEGRATION_NAME})},r.prototype._pollForRedirectDone=function(t){var e=setInterval(o.bind(function(){var e;if(null==t||t.closed)return this._sendAnalyticsEvent("popup.aborted"),void this._popupCleanup();try{if("about:blank"===t.location.href)throw new Error("Not finished loading");e=o.decodeQueryString(t.location.search.replace(/^\?/,"")).code}catch(n){return}this._onOAuthSuccess({code:e})},this),100);return this.redirectDoneInterval=e,e},r.prototype._openPopup=function(){var t;this._sendAnalyticsEvent("popup.started"),t=s.createPopup(a.compose(this._getOAuthBaseUrl(),this.popupParams)),t.focus(),this._pollForRedirectDone(t),p.trigger(p.events.UI_POPUP_DID_OPEN,{source:c.INTEGRATION_NAME}),p.on(p.events.UI_POPUP_FORCE_CLOSE,function(e){e.target===c.INTEGRATION_NAME&&t.close()}),this.popup=t},r.prototype._getOAuthBaseUrl=function(){var t;return t="shared_sandbox"===this.environment?c.SANDBOX_OAUTH_BASE_URL:c.PRODUCTION_OAUTH_BASE_URL},r.prototype._handleButtonClick=function(t){for(var e=t.target||t.srcElement;;){if(null==e)return;if(e===t.currentTarget)return;if(e.id===this.buttonId)break;e=e.parentNode}t&&t.preventDefault?t.preventDefault():t.returnValue=!1,this._openPopup()},e.exports=r}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./callbacks":42,"./constants":44,"./detector":45,"./dom/composer":47,"./url-composer":50,"braintree-bus":51,"braintree-utilities":60}],44:[function(t,e){"use strict";e.exports={PRODUCTION_OAUTH_BASE_URL:"https://coinbase.com",SANDBOX_OAUTH_BASE_URL:"https://sandbox.coinbase.com",ORIGIN_URL:"https://www.coinbase.com",FRAME_NAME:"braintree-coinbase-frame",POPUP_NAME:"coinbase",BUTTON_ID:"bt-coinbase-button",SCOPES:"send",VERSION:"0.1.0",INTEGRATION_NAME:"Coinbase"}},{}],45:[function(t,e){"use strict";function n(){var t=s.ieVersion();return!t||t>8}function i(){var t=s.androidVersion();return null==t?!1:/^5/.test(t)}function r(){return!(i()||o())}function o(){var t=s.iOSSafariVersion();return null==t?!1:/^8\.0/.test(t)||/^8\.1$/.test(t)}var s=t("./browser");e.exports={isSupportedBrowser:n,shouldCloseFromParent:r,shouldDisplayIOSClose:o,shouldDisplayLollipopClose:i}},{"./browser":41}],46:[function(t,e){"use strict";function n(t){var e=document.createElement("button");return t=t||{},e.id=t.id||"coinbase-button",e.style.backgroundColor=t.backgroundColor||"#EEE",e.style.color=t.color||"#4597C3",e.style.border=t.border||"0",e.style.borderRadius=t.borderRadius||"6px",e.style.padding=t.padding||"12px",e.innerHTML=t.innerHTML||"coinbase",e}e.exports={create:n}},{}],47:[function(t,e){"use strict";var n=t("./popup"),i=t("./button"),r=t("./frame");e.exports={createButton:i.create,createPopup:n.create,createFrame:r.create}},{"./button":46,"./frame":48,"./popup":49}],48:[function(t,e){"use strict";function n(t){return r({src:t.src,name:i.FRAME_NAME,height:"70px",width:"100%",style:{padding:0,margin:0,border:0,outline:"none"}})}var i=t("../constants"),r=t("iframer");e.exports={create:n}},{"../constants":44,iframer:61}],49:[function(t,e){(function(n){"use strict";function i(t){var e=[];for(var n in t)t.hasOwnProperty(n)&&e.push([n,t[n]].join("="));return e.join(",")}function r(){var t=850,e=600;return i({width:t,height:e,left:(screen.width-t)/2,top:(screen.height-e)/4})}function o(t){return n.open(t,s.POPUP_NAME,r())}var s=t("../constants");e.exports={create:o}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../constants":44}],50:[function(t,e){"use strict";function n(){return"version="+r.VERSION}function i(t,e){var i=t+"/oauth/authorize?response_type=code",r=e.redirectUrl+"?"+n();if(i+="&redirect_uri="+encodeURIComponent(r),i+="&client_id="+e.clientId,e.scopes&&(i+="&scope="+encodeURIComponent(e.scopes)),e.meta)for(var o in e.meta)e.meta.hasOwnProperty(o)&&(i+="&meta["+encodeURIComponent(o)+"]="+encodeURIComponent(e.meta[o]));return i}var r=t("./constants");e.exports={compose:i,getQueryString:n}},{"./constants":44}],51:[function(t,e,n){arguments[4][37][0].apply(n,arguments)},{"./lib/events":52,dup:37,framebus:53}],52:[function(t,e,n){arguments[4][38][0].apply(n,arguments)},{dup:38}],53:[function(t,e,n){arguments[4][39][0].apply(n,arguments)},{dup:39}],54:[function(t,e,n){arguments[4][30][0].apply(n,arguments)},{dup:30}],55:[function(t,e,n){arguments[4][17][0].apply(n,arguments)},{dup:17}],56:[function(t,e,n){arguments[4][18][0].apply(n,arguments)},{dup:18}],57:[function(t,e,n){arguments[4][19][0].apply(n,arguments)},{dup:19}],58:[function(t,e,n){arguments[4][34][0].apply(n,arguments)},{dup:34}],59:[function(t,e,n){arguments[4][35][0].apply(n,arguments)},{"./array":54,dup:35}],60:[function(t,e,n){arguments[4][36][0].apply(n,arguments)},{"./lib/array":54,"./lib/dom":55,"./lib/events":56,"./lib/fn":57,"./lib/string":58,"./lib/url":59,dup:36}],61:[function(t,e){"use strict";var n=t("lodash.assign"),i=t("lodash.isstring"),r=t("./lib/default-attributes");e.exports=function(t){var e=document.createElement("iframe"),o=n({},r,t);o.style&&!i(o.style)&&(n(e.style,o.style),delete o.style);for(var s in o)o.hasOwnProperty(s)&&e.setAttribute(s,o[s]);return e.getAttribute("id")||(e.id=e.name),e}},{"./lib/default-attributes":62,"lodash.assign":63,"lodash.isstring":74}],62:[function(t,e){e.exports={frameBorder:0,allowtransparency:!0}},{}],63:[function(t,e){function n(t,e,n){for(var i=-1,r=o(e),s=r.length;++i2?n[s-2]:void 0,u=s>2?n[2]:void 0,c=s>1?n[s-1]:void 0;for("function"==typeof a?(a=i(a,c,5),s-=2):(a="function"==typeof c?c:void 0,s-=a?1:0),u&&r(n[0],n[1],u)&&(a=3>s?void 0:a,s=1);++o-1&&t%1==0&&e>t}function o(t,e,n){if(!a(n))return!1;var o=typeof e;if("number"==o?i(n)&&r(e,n.length):"string"==o&&e in n){var s=n[e];return t===t?t===s:s!==s}return!1}function s(t){return"number"==typeof t&&t>-1&&t%1==0&&c>=t}function a(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}var u=/^\d+$/,c=9007199254740991,l=n("length");e.exports=o},{}],69:[function(t,e){function n(t,e){if("function"!=typeof t)throw new TypeError(i);return e=r(void 0===e?t.length-1:+e||0,0),function(){for(var n=arguments,i=-1,o=r(n.length-e,0),s=Array(o);++i-1&&t%1==0&&e>t}function o(t){return"number"==typeof t&&t>-1&&t%1==0&&y>=t}function s(t){for(var e=u(t),n=e.length,i=n&&t.length,s=!!i&&o(i)&&(p(t)||l(t)),a=-1,c=[];++a0;++i-1&&t%1==0&&l>=t}function s(t){return n(t)&&r(t)&&u.call(t,"callee")&&!c.call(t,"callee")}var a=Object.prototype,u=a.hasOwnProperty,c=a.propertyIsEnumerable,l=9007199254740991,p=i("length");e.exports=s},{}],73:[function(t,e){function n(t){return!!t&&"object"==typeof t}function i(t,e){var n=null==t?void 0:t[e];return a(n)?n:void 0}function r(t){return"number"==typeof t&&t>-1&&t%1==0&&g>=t}function o(t){return s(t)&&f.call(t)==c}function s(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function a(t){return null==t?!1:o(t)?m.test(h.call(t)):n(t)&&l.test(t)}var u="[object Array]",c="[object Function]",l=/^\[object .+?Constructor\]$/,p=Object.prototype,h=Function.prototype.toString,d=p.hasOwnProperty,f=p.toString,m=RegExp("^"+h.call(d).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),y=i(Array,"isArray"),g=9007199254740991,b=y||function(t){return n(t)&&r(t.length)&&f.call(t)==u};e.exports=b},{}],74:[function(t,e){function n(t){return!!t&&"object"==typeof t}function i(t){return"string"==typeof t||n(t)&&s.call(t)==r}var r="[object String]",o=Object.prototype,s=o.toString;e.exports=i},{}],75:[function(t,e,n){arguments[4][2][0].apply(n,arguments)},{"./coinbase-account":76,"./credit-card":77,"./europe-bank-account":78,"./normalize-api-fields":82,"./parse-client-token":83,"./paypal-account":84,"./request-driver":86,"./sepa-mandate":87,"./util":88,"braintree-3ds":97,"braintree-utilities":109,dup:2}],76:[function(t,e,n){arguments[4][3][0].apply(n,arguments)},{dup:3}],77:[function(t,e,n){arguments[4][4][0].apply(n,arguments)},{dup:4}],78:[function(t,e,n){arguments[4][5][0].apply(n,arguments)},{dup:5}],79:[function(t,e,n){arguments[4][6][0].apply(n,arguments)},{"./parse-client-token":83,"./request-driver":86,"./util":88,dup:6}],80:[function(t,e,n){arguments[4][7][0].apply(n,arguments)},{"./jsonp":81,dup:7}],81:[function(t,e,n){arguments[4][8][0].apply(n,arguments)},{"./util":88,dup:8}],82:[function(t,e,n){arguments[4][9][0].apply(n,arguments)},{dup:9}],83:[function(t,e,n){arguments[4][10][0].apply(n,arguments)},{"./polyfill":85,"braintree-utilities":109,dup:10}],84:[function(t,e,n){arguments[4][11][0].apply(n,arguments)},{dup:11}],85:[function(t,e,n){arguments[4][12][0].apply(n,arguments)},{dup:12}],86:[function(t,e,n){arguments[4][13][0].apply(n,arguments)},{"./jsonp-driver":80,dup:13}],87:[function(t,e,n){arguments[4][14][0].apply(n,arguments)},{dup:14}],88:[function(t,e,n){arguments[4][15][0].apply(n,arguments)},{dup:15}],89:[function(t,e,n){arguments[4][16][0].apply(n,arguments)},{"./lib/client":75,"./lib/get-configuration":79,"./lib/jsonp":81,"./lib/jsonp-driver":80,"./lib/parse-client-token":83,"./lib/util":88,dup:16}],90:[function(t,e,n){arguments[4][17][0].apply(n,arguments)},{dup:17}],91:[function(t,e,n){arguments[4][18][0].apply(n,arguments)},{dup:18}],92:[function(t,e,n){arguments[4][19][0].apply(n,arguments)},{dup:19}],93:[function(t,e,n){arguments[4][20][0].apply(n,arguments)},{dup:20}],94:[function(t,e,n){arguments[4][21][0].apply(n,arguments)},{"./lib/dom":90,"./lib/events":91,"./lib/fn":92,"./lib/url":93,dup:21}],95:[function(t,e,n){arguments[4][22][0].apply(n,arguments)},{"../shared/receiver":102,"braintree-utilities":94,dup:22}],96:[function(t,e,n){arguments[4][23][0].apply(n,arguments)},{"./authorization_service":95,"./loader":98,"braintree-utilities":94,dup:23}],97:[function(t,e,n){arguments[4][24][0].apply(n,arguments)},{"./client":96,dup:24}],98:[function(t,e,n){arguments[4][25][0].apply(n,arguments)},{"./loader_display":99,"./loader_message":100,"./loader_spinner":101,dup:25}],99:[function(t,e,n){arguments[4][26][0].apply(n,arguments)},{dup:26}],100:[function(t,e,n){arguments[4][27][0].apply(n,arguments)},{dup:27}],101:[function(t,e,n){arguments[4][28][0].apply(n,arguments)},{dup:28}],102:[function(t,e,n){arguments[4][29][0].apply(n,arguments)},{"braintree-utilities":94,dup:29}],103:[function(t,e,n){arguments[4][30][0].apply(n,arguments)},{dup:30}],104:[function(t,e,n){arguments[4][17][0].apply(n,arguments)},{dup:17}],105:[function(t,e,n){arguments[4][18][0].apply(n,arguments)},{dup:18}],106:[function(t,e,n){arguments[4][19][0].apply(n,arguments)},{dup:19}],107:[function(t,e,n){arguments[4][34][0].apply(n,arguments)},{dup:34}],108:[function(t,e,n){arguments[4][35][0].apply(n,arguments)},{"./array":103,dup:35}],109:[function(t,e,n){arguments[4][36][0].apply(n,arguments)},{"./lib/array":103,"./lib/dom":104,"./lib/events":105,"./lib/fn":106,"./lib/string":107,"./lib/url":108,dup:36}],110:[function(t,e,n){arguments[4][37][0].apply(n,arguments)},{"./lib/events":111,dup:37,framebus:112}],111:[function(t,e,n){arguments[4][38][0].apply(n,arguments)},{dup:38}],112:[function(t,e,n){arguments[4][39][0].apply(n,arguments)},{dup:39}],113:[function(t,e){(function(n){"use strict";function i(t){var e=t.sdkVersion;return e||(e=n.braintree&&n.braintree.VERSION?"braintree/web/"+n.braintree.VERSION:""),e}function r(t){var e,r;this.attrs={},t.hasOwnProperty("sharedCustomerIdentifier")&&(this.attrs.sharedCustomerIdentifier=t.sharedCustomerIdentifier),e=a(t.clientToken),this.driver=t.driver||u,this.analyticsUrl=e.analytics?e.analytics.url:void 0,this.clientApiUrl=e.clientApiUrl,this.customerId=t.customerId,this.challenges=e.challenges,this.integration=t.integration||"",this.sdkVersion=i(e),this.merchantAppId=e.merchantAppId||n.location.host,r=s.create(this,{container:t.container,clientToken:e}),this.verify3DS=o.bind(r.verify,r),this.attrs.authorizationFingerprint=e.authorizationFingerprint,this.attrs.sharedCustomerIdentifierType=t.sharedCustomerIdentifierType,e.merchantAccountId&&(this.attrs.merchantAccountId=e.merchantAccountId),this.requestTimeout=t.hasOwnProperty("timeout")?t.timeout:6e4}var o=t("braintree-utilities"),s=t("braintree-3ds"),a=t("./parse-client-token"),u=t("./request-driver"),c=t("./util"),l=t("./sepa-mandate"),p=t("./europe-bank-account"),h=t("./credit-card"),d=t("./coinbase-account"),f=t("./paypal-account"),m=t("./normalize-api-fields").normalizeCreditCardFields;r.prototype.getCreditCards=function(t){this.driver.get(c.joinUrlFragments([this.clientApiUrl,"v1","payment_methods"]),this.attrs,function(t){var e=0,n=t.paymentMethods.length,i=[];for(e;n>e;e++)i.push(new h(t.paymentMethods[e]));return i},t,this.requestTimeout)},r.prototype.tokenizeCoinbase=function(t,e){t.options={validate:!1},this.addCoinbase(t,function(t,n){t?e(t,null):n&&n.nonce?e(t,n):e("Unable to tokenize coinbase account.",null)})},r.prototype.tokenizePayPalAccount=function(t,e){this.addPayPalAccount(t,function(t,n){t?e(t,null):n&&n.nonce?e(null,n):e("Unable to tokenize paypal account.",null)})},r.prototype.tokenizeCard=function(t,e){t.options={validate:!1},this.addCreditCard(t,function(t,n){n&&n.nonce?e(t,n.nonce,{type:n.type,details:n.details}):e("Unable to tokenize card.",null)})},r.prototype.lookup3DS=function(t,e){var n=c.joinUrlFragments([this.clientApiUrl,"v1/payment_methods",t.nonce,"three_d_secure/lookup"]),i=c.mergeOptions(this.attrs,{amount:t.amount});this.driver.post(n,i,function(t){return t},e,this.requestTimeout)},r.prototype.createSEPAMandate=function(t,e){var n=c.mergeOptions(this.attrs,{sepaMandate:t});this.driver.post(c.joinUrlFragments([this.clientApiUrl,"v1","sepa_mandates.json"]),n,function(t){return{sepaMandate:new l(t.europeBankAccounts[0].sepaMandates[0]),sepaBankAccount:new p(t.europeBankAccounts[0])}},e,this.requestTimeout)},r.prototype.addCoinbase=function(t,e){var n;delete t.share,n=c.mergeOptions(this.attrs,{coinbaseAccount:t,_meta:{integration:this.integration||"custom",source:"coinbase"}}),this.driver.post(c.joinUrlFragments([this.clientApiUrl,"v1","payment_methods/coinbase_accounts"]),n,function(t){return new d(t.coinbaseAccounts[0])},e,this.requestTimeout)},r.prototype.addPayPalAccount=function(t,e){var n;delete t.share,n=c.mergeOptions(this.attrs,{paypalAccount:t,_meta:{integration:this.integration||"paypal",source:"paypal"}}),this.driver.post(c.joinUrlFragments([this.clientApiUrl,"v1","payment_methods","paypal_accounts"]),n,function(t){return new f(t.paypalAccounts[0])},e,this.requestTimeout)},r.prototype.addCreditCard=function(t,e){var n,i,r=t.share;delete t.share,i=m(t),n=c.mergeOptions(this.attrs,{share:r,creditCard:i,_meta:{integration:this.integration||"custom",source:"form"}}),this.driver.post(c.joinUrlFragments([this.clientApiUrl,"v1","payment_methods/credit_cards"]),n,function(t){return new h(t.creditCards[0])},e,this.requestTimeout)},r.prototype.unlockCreditCard=function(t,e,n){var i=c.mergeOptions(this.attrs,{challengeResponses:e});this.driver.put(c.joinUrlFragments([this.clientApiUrl,"v1","payment_methods/",t.nonce]),i,function(t){return new h(t.paymentMethods[0])},n,this.requestTimeout)},r.prototype.sendAnalyticsEvents=function(t,e){var i,r,o=this.analyticsUrl,s=[];if(t=c.isArray(t)?t:[t],!o)return void(e&&e.apply(null,[null,{}]));for(r in t)t.hasOwnProperty(r)&&s.push({kind:t[r]});i=c.mergeOptions(this.attrs,{braintree_library_version:this.sdkVersion,analytics:s,_meta:{merchantAppId:this.merchantAppId,platform:"web",platformVersion:n.navigator.userAgent,integrationType:this.integration,sdkVersion:this.sdkVersion}}),this.driver.post(o,i,function(t){return t},e,this.requestTimeout)},r.prototype.decryptBrowserswitchPayload=function(t,e){var n=c.mergeOptions(this.attrs,{asymmetric_encrypted_payload:t}),i=c.joinUrlFragments([this.clientApiUrl,"/v1/paypal_browser_switch/decrypt"]);this.driver.post(i,n,function(t){return t},e,this.requestTimeout)},r.prototype.encryptBrowserswitchReturnPayload=function(t,e,n){var i=c.mergeOptions(this.attrs,{payload:t,aesKey:e}),r=c.joinUrlFragments([this.clientApiUrl,"/v1/paypal_browser_switch/encrypt"]);this.driver.post(r,i,function(t){return t},n,this.requestTimeout)},r.prototype.exchangePaypalTokenForConsentCode=function(t,e){var n=c.mergeOptions(this.attrs,t);this.attrs.merchantAccountId&&(n.merchant_account_id=this.attrs.merchantAccountId);var i=c.joinUrlFragments([this.clientApiUrl,"/v1/paypal_account_service/merchant_consent"]);this.driver.post(i,n,function(t){return t},e,this.requestTimeout)},e.exports=r}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./coinbase-account":114,"./credit-card":115,"./europe-bank-account":116,"./normalize-api-fields":120,"./parse-client-token":121,"./paypal-account":122,"./request-driver":124,"./sepa-mandate":125,"./util":126,"braintree-3ds":135,"braintree-utilities":147}],114:[function(t,e,n){arguments[4][3][0].apply(n,arguments)},{dup:3}],115:[function(t,e,n){arguments[4][4][0].apply(n,arguments)},{dup:4}],116:[function(t,e,n){arguments[4][5][0].apply(n,arguments)},{dup:5}],117:[function(t,e,n){arguments[4][6][0].apply(n,arguments)},{"./parse-client-token":121,"./request-driver":124,"./util":126,dup:6}],118:[function(t,e,n){arguments[4][7][0].apply(n,arguments)},{"./jsonp":119,dup:7}],119:[function(t,e,n){arguments[4][8][0].apply(n,arguments)},{"./util":126,dup:8}],120:[function(t,e,n){arguments[4][9][0].apply(n,arguments)},{dup:9}],121:[function(t,e,n){arguments[4][10][0].apply(n,arguments)},{"./polyfill":123,"braintree-utilities":147,dup:10}],122:[function(t,e,n){arguments[4][11][0].apply(n,arguments)},{dup:11}],123:[function(t,e,n){arguments[4][12][0].apply(n,arguments)},{dup:12}],124:[function(t,e,n){arguments[4][13][0].apply(n,arguments)},{"./jsonp-driver":118,dup:13}],125:[function(t,e,n){arguments[4][14][0].apply(n,arguments)},{dup:14}],126:[function(t,e,n){arguments[4][15][0].apply(n,arguments)},{dup:15}],127:[function(t,e,n){arguments[4][16][0].apply(n,arguments)},{"./lib/client":113,"./lib/get-configuration":117,"./lib/jsonp":119,"./lib/jsonp-driver":118,"./lib/parse-client-token":121,"./lib/util":126,dup:16}],128:[function(t,e,n){arguments[4][17][0].apply(n,arguments)},{dup:17}],129:[function(t,e,n){arguments[4][18][0].apply(n,arguments)},{dup:18}],130:[function(t,e,n){arguments[4][19][0].apply(n,arguments)},{dup:19}],131:[function(t,e,n){arguments[4][20][0].apply(n,arguments)},{dup:20}],132:[function(t,e,n){arguments[4][21][0].apply(n,arguments)},{"./lib/dom":128,"./lib/events":129,"./lib/fn":130,"./lib/url":131,dup:21}],133:[function(t,e,n){arguments[4][22][0].apply(n,arguments)},{"../shared/receiver":140,"braintree-utilities":132,dup:22}],134:[function(t,e,n){arguments[4][23][0].apply(n,arguments)},{"./authorization_service":133,"./loader":136,"braintree-utilities":132,dup:23}],135:[function(t,e,n){arguments[4][24][0].apply(n,arguments)},{"./client":134,dup:24}],136:[function(t,e,n){arguments[4][25][0].apply(n,arguments)},{"./loader_display":137,"./loader_message":138,"./loader_spinner":139,dup:25}],137:[function(t,e,n){arguments[4][26][0].apply(n,arguments)},{dup:26}],138:[function(t,e,n){arguments[4][27][0].apply(n,arguments)},{dup:27}],139:[function(t,e,n){arguments[4][28][0].apply(n,arguments)},{dup:28}],140:[function(t,e,n){arguments[4][29][0].apply(n,arguments)},{"braintree-utilities":132,dup:29}],141:[function(t,e,n){arguments[4][30][0].apply(n,arguments)},{dup:30}],142:[function(t,e,n){arguments[4][17][0].apply(n,arguments)},{dup:17}],143:[function(t,e,n){arguments[4][18][0].apply(n,arguments)},{dup:18}],144:[function(t,e,n){arguments[4][19][0].apply(n,arguments)},{dup:19}],145:[function(t,e,n){arguments[4][34][0].apply(n,arguments)},{dup:34}],146:[function(t,e,n){arguments[4][35][0].apply(n,arguments)},{"./array":141,dup:35}],147:[function(t,e,n){arguments[4][36][0].apply(n,arguments)},{"./lib/array":141,"./lib/dom":142,"./lib/events":143,"./lib/fn":144,"./lib/string":145,"./lib/url":146,dup:36}],148:[function(t,e,n){arguments[4][37][0].apply(n,arguments)},{"./lib/events":149,dup:37,framebus:150}],149:[function(t,e,n){arguments[4][38][0].apply(n,arguments)},{dup:38}],150:[function(t,e,n){arguments[4][39][0].apply(n,arguments)},{dup:39}],151:[function(t,e,n){arguments[4][30][0].apply(n,arguments)},{dup:30}],152:[function(t,e,n){arguments[4][17][0].apply(n,arguments)},{dup:17}],153:[function(t,e,n){arguments[4][18][0].apply(n,arguments)},{dup:18}],154:[function(t,e,n){arguments[4][19][0].apply(n,arguments)},{dup:19}],155:[function(t,e,n){arguments[4][34][0].apply(n,arguments)},{dup:34}],156:[function(t,e,n){arguments[4][35][0].apply(n,arguments)},{"./array":151,dup:35}],157:[function(t,e,n){arguments[4][36][0].apply(n,arguments)},{"./lib/array":151,"./lib/dom":152,"./lib/events":153,"./lib/fn":154,"./lib/string":155,"./lib/url":156,dup:36}],158:[function(t,e){function n(t){var e=window.getComputedStyle?getComputedStyle(t):t.currentStyle;return{overflow:e.overflow||"",height:t.style.height||""}}function i(){return{html:{node:document.documentElement,styles:n(document.documentElement)},body:{node:document.body,styles:n(document.body)}}}function r(t,e){if(!t)throw new Error('Parameter "clientToken" cannot be null');e=e||{},this._clientToken=o.parseClientToken(t),this._clientOptions=e,this.container=e.container,this.merchantPageDefaultStyles=null,this.paymentMethodNonceInputField=e.paymentMethodNonceInputField,this.frame=null,this.popup=null,this.insertFrameFunction=e.insertFrame,this.onSuccess=e.onSuccess,this.onCancelled=e.onCancelled,this.onUnsupported=e.onUnsupported,this.loggedInView=null,this.loggedOutView=null,this.insertUI=!0}var o=t("braintree-api"),s=t("braintree-bus"),a=t("braintree-utilities"),u=t("./logged-in-view"),c=t("./logged-out-view"),l=t("./overlay-view"),p=t("../shared/util/browser"),h=t("../shared/util/dom"),d=t("../shared/constants"),f=t("../shared/util/util"),m=t("../shared/get-locale");r.prototype.getViewerUrl=function(){var t=this._clientToken.paypal.assetsUrl;return t+"/pwpp/"+d.VERSION+"/html/braintree-frame.html"},r.prototype.getProxyUrl=function(){var t=this._clientToken.paypal.assetsUrl;return t+"/pwpp/"+d.VERSION+"/html/proxy-frame.html"},r.prototype.initialize=function(){if(!this._clientToken.paypalEnabled)return void("function"==typeof this.onUnsupported&&this.onUnsupported(new Error("PayPal is not enabled")));if(!this._isBrowserSecure())return void("function"==typeof this.onUnsupported&&this.onUnsupported(new Error("unsupported protocol detected")));if(this._isHermesCapable()){if(!this._isHermesSupportedCurrency())return void("function"==typeof this.onUnsupported&&this.onUnsupported(new Error("This PayPal integration does not support this currency")));if(!this._isHermesSupportedCountries())return void("function"==typeof this.onUnsupported&&this.onUnsupported(new Error("This PayPal integration does not support this locale")));if(!this._isValidAmount())return void("function"==typeof this.onUnsupported&&this.onUnsupported(new Error("Amount must be a number")))}return this._isMisconfiguredUnvettedMerchant()?void("function"==typeof this.onUnsupported&&this.onUnsupported(new Error("Unvetted merchants must provide a payeeEmail, amount, and currency"))):(this._overrideClientTokenProperties(),p.isProxyFrameRequired()&&this._insertProxyFrame(),this._setupDomElements(),this._setupPaymentMethodNonceInputField(),this._setupViews(),void this._createBusSubscribers())},r.prototype._isSupportedOption=function(t,e){for(var n=e.length,i=!1,r=0;n>r;r++)t.toLowerCase()===e[r].toLowerCase()&&(i=!0);return i},r.prototype._isHermesSupportedCurrency=function(){return this._isSupportedOption(this._clientOptions.currency,d.ARIES_SUPPORTED_CURRENCIES)},r.prototype._isHermesSupportedCountries=function(){return this._isSupportedOption(m(this._clientOptions.locale).split("_")[1],d.ARIES_SUPPORTED_COUNTRIES)},r.prototype._isValidAmount=function(){var t=parseFloat(this._clientOptions.amount);return"number"==typeof t&&!isNaN(t)&&t>=0},r.prototype._isMisconfiguredUnvettedMerchant=function(){return this._clientToken.paypal.unvettedMerchant&&(!this._isHermesCapable()||!this._clientToken.paypal.payeeEmail)},r.prototype._isBrowserSecure=function(){return a.isBrowserHttps()||p.isPopupSupported()||this._clientToken.paypal.allowHttp},r.prototype._overrideClientTokenProperties=function(){this._clientOptions.displayName&&(this._clientToken.paypal.displayName=this._clientOptions.displayName)},r.prototype._setupDomElements=function(){this.insertUI&&(this.container=a.normalizeElement(this.container))},r.prototype._setupPaymentMethodNonceInputField=function(){if(this.insertUI){var t=this.paymentMethodNonceInputField;a.isFunction(t)||(t=void 0!==t?a.normalizeElement(t):this._createPaymentMethodNonceInputField(),this.paymentMethodNonceInputField=t)}},r.prototype._setupViews=function(){var t=this._clientToken.paypal.assetsUrl;this.insertUI&&(this.loggedInView=new u({container:this.container,assetsUrl:t}),this.loggedOutView=new c({assetsUrl:t,container:this.container,isCheckout:this._isHermesCapable(),locale:this._clientOptions.locale,merchantId:"merchantId"}),a.addEventListener(this.loggedOutView.container,"click",a.bind(this._handleContainerClick,this)),a.addEventListener(this.loggedInView.logoutNode,"click",a.bind(this._handleLogout,this))) -},r.prototype._createBusSubscribers=function(){s.subscribe("getClientToken",a.bind(this._handleGetClientToken,this)),s.subscribe("getClientOptions",a.bind(this._handleGetClientOptions,this)),s.subscribe("closePayPalModal",a.bind(this._handleCloseMessage,this)),s.subscribe("receivePayPalData",a.bind(this._handleSuccessfulAuthentication,this))},r.prototype._createPaymentMethodNonceInputField=function(){var t=document.createElement("input");return t.name="payment_method_nonce",t.type="hidden",this.container.appendChild(t)},r.prototype._createFrame=function(){var t,e=document.createElement("iframe");return this._isHermesCapable()?(t=d.ARIES_FRAME_NAME,e.style.background="#FFFFFF"):t=d.FRAME_NAME,e.src=this.getViewerUrl(),e.id=t,e.name=t,e.allowTransparency=!0,e.height="100%",e.width="100%",e.frameBorder=0,e.style.position=p.isMobile()?"absolute":"fixed",e.style.top=0,e.style.left=0,e.style.bottom=0,e.style.zIndex=20001,e.style.padding=0,e.style.margin=0,e.style.border=0,e.style.outline="none",e},r.prototype._removeFrame=function(t){t=t||document.body,this.frame&&t.contains(this.frame)&&(t.removeChild(this.frame),this._unlockMerchantWindowSize())},r.prototype._insertFrame=function(){this.insertFrameFunction?this.insertFrameFunction(this.getViewerUrl()):(this.frame=this._createFrame(),document.body.appendChild(this.frame)),this._lockMerchantWindowSize()},r.prototype._handleContainerClick=function(t){function e(t){return t.className.match(/paypal-button(?!-widget)/)||"braintree-paypal-button"===t.id}var n=t.target||t.srcElement;(e(n)||e(n.parentNode))&&(t.preventDefault?t.preventDefault():t.returnValue=!1,this._open())},r.prototype._setMerchantPageDefaultStyles=function(){this.merchantPageDefaultStyles=i()},r.prototype._open=function(){this._isHermesCapable()&&this._addCorrelationIdToClientToken(),p.isPopupSupported()?this._openPopup():this._openModal()},r.prototype._close=function(){p.isPopupSupported()?this._closePopup():this._closeModal()},r.prototype._openModal=function(){this._removeFrame(),this._insertFrame()},r.prototype._isHermesCapable=function(){return!!this._clientOptions.singleUse&&!!this._clientOptions.amount&&!!this._clientOptions.currency},r.prototype._openPopup=function(){var t,e,n,i=[],r=window.outerWidth||document.documentElement.clientWidth,o=window.outerHeight||document.documentElement.clientHeight,s="undefined"==typeof window.screenY?window.screenTop:window.screenY,a="undefined"==typeof window.screenX?window.screenLeft:window.screenX;this._isHermesCapable()?(t=d.ARIES_POPUP_NAME,n=d.ARIES_POPUP_HEIGHT,e=d.ARIES_POPUP_WIDTH):(t=d.POPUP_NAME,n=d.POPUP_HEIGHT,e=d.POPUP_WIDTH);var u=(r-e)/2+a,c=(o-n)/2+s;return i.push("height="+n),i.push("width="+e),i.push("top="+c),i.push("left="+u),i.push(d.POPUP_OPTIONS),this.popup=window.open(this.getViewerUrl(),t,i.join(",")),p.isOverlaySupported()&&(this.overlayView=new l(this.popup,this._clientToken.paypal.assetsUrl),this.overlayView.render()),this.popup.focus(),this.popup},r.prototype._addCorrelationIdToClientToken=function(){this._clientToken.correlationId=f.generateUid()},r.prototype._createProxyFrame=function(){var t=document.createElement("iframe");return t.src=this.getProxyUrl(),t.id=d.BRIDGE_FRAME_NAME,t.name=d.BRIDGE_FRAME_NAME,t.allowTransparency=!0,t.height=0,t.width=0,t.frameBorder=0,t.style.position="static",t.style.padding=0,t.style.margin=0,t.style.border=0,t.style.outline="none",t},r.prototype._insertProxyFrame=function(){this.proxyFrame=this._createProxyFrame(),document.body.appendChild(this.proxyFrame)},r.prototype._closeModal=function(){this._removeFrame()},r.prototype._closePopup=function(){this.popup&&(this.popup.close(),this.popup=null),this.overlayView&&p.isOverlaySupported()&&this.overlayView.remove()},r.prototype._clientTokenData=function(){return{analyticsUrl:this._clientToken.analytics?this._clientToken.analytics.url:void 0,authorizationFingerprint:this._clientToken.authorizationFingerprint,clientApiUrl:this._clientToken.clientApiUrl,displayName:this._clientToken.paypal.displayName,paypalBaseUrl:this._clientToken.paypal.assetsUrl,paypalClientId:this._clientToken.paypal.clientId,paypalPrivacyUrl:this._clientToken.paypal.privacyUrl,paypalUserAgreementUrl:this._clientToken.paypal.userAgreementUrl,unvettedMerchant:this._clientToken.paypal.unvettedMerchant,payeeEmail:this._clientToken.paypal.payeeEmail,correlationId:this._clientToken.correlationId,offline:this._clientOptions.offline||this._clientToken.paypal.environmentNoNetwork,sdkVersion:this._clientToken.sdkVersion,merchantAppId:this._clientToken.merchantAppId}},r.prototype._handleGetClientToken=function(t){t(this._clientTokenData())},r.prototype._clientOptionsData=function(){return{locale:this._clientOptions.locale||"en_us",onetime:this._clientOptions.singleUse||!1,integration:this._clientOptions.integration||"paypal",enableShippingAddress:this._clientOptions.enableShippingAddress||!1,enableBillingAddress:this._clientOptions.enableBillingAddress||!1,enableHermes:this._isHermesCapable(),amount:this._clientOptions.amount||null,currency:this._clientOptions.currency||null,shippingAddressOverride:this._clientOptions.shippingAddressOverride||null}},r.prototype._handleGetClientOptions=function(t){t(this._clientOptionsData())},r.prototype._handleSuccessfulAuthentication=function(t){this._close(),t.type=d.NONCE_TYPE,a.isFunction(this.paymentMethodNonceInputField)?this.paymentMethodNonceInputField(t.nonce):(this._showLoggedInContent(t.details.email),this._setNonceInputValue(t.nonce)),a.isFunction(this.onSuccess)&&this.onSuccess(t)},r.prototype._lockMerchantWindowSize=function(){this._setMerchantPageDefaultStyles(),document.documentElement.style.height="100%",document.documentElement.style.overflow="hidden",document.body.style.height="100%",document.body.style.overflow="hidden"},r.prototype._unlockMerchantWindowSize=function(){this.merchantPageDefaultStyles&&(document.documentElement.style.height=this.merchantPageDefaultStyles.html.styles.height,document.documentElement.style.overflow=this.merchantPageDefaultStyles.html.styles.overflow,document.body.style.height=this.merchantPageDefaultStyles.body.styles.height,document.body.style.overflow=this.merchantPageDefaultStyles.body.styles.overflow)},r.prototype._handleCloseMessage=function(){this._removeFrame()},r.prototype._showLoggedInContent=function(t){this.loggedOutView.hide(),h.setTextContent(this.loggedInView.emailNode,t),this.loggedInView.show()},r.prototype._handleLogout=function(t){t.preventDefault?t.preventDefault():t.returnValue=!1,this.loggedInView.hide(),this.loggedOutView.show(),this._setNonceInputValue(""),a.isFunction(this.onCancelled)&&this.onCancelled()},r.prototype._setNonceInputValue=function(t){this.paymentMethodNonceInputField.value=t},e.exports=r},{"../shared/constants":162,"../shared/get-locale":164,"../shared/util/browser":169,"../shared/util/dom":170,"../shared/util/util":171,"./logged-in-view":159,"./logged-out-view":160,"./overlay-view":161,"braintree-api":127,"braintree-bus":148,"braintree-utilities":157}],159:[function(t,e){function n(t){this.options=t,this.container=this.createViewContainer(),this.createPayPalName(),this.emailNode=this.createEmailNode(),this.logoutNode=this.createLogoutNode()}var i=t("../shared/constants");n.prototype.createViewContainer=function(){var t=document.createElement("div");t.id="braintree-paypal-loggedin";var e=["display: none","max-width: 500px","overflow: hidden","padding: 16px","background-image: url("+this.options.assetsUrl+"/pwpp/"+i.VERSION+"/images/paypal-small.png)","background-image: url("+this.options.assetsUrl+"/pwpp/"+i.VERSION+"/images/paypal-small.svg), none","background-position: 20px 50%","background-repeat: no-repeat","background-size: 13px 15px","border-top: 1px solid #d1d4d6","border-bottom: 1px solid #d1d4d6"].join(";");return t.style.cssText=e,this.options.container.appendChild(t),t},n.prototype.createPayPalName=function(){var t=document.createElement("span");t.id="bt-pp-name",t.innerHTML="PayPal";var e=["color: #283036","font-size: 13px","font-weight: 800",'font-family: "Helvetica Neue", Helvetica, Arial, sans-serif',"margin-left: 36px","-webkit-font-smoothing: antialiased","-moz-font-smoothing: antialiased","-ms-font-smoothing: antialiased","font-smoothing: antialiased"].join(";");return t.style.cssText=e,this.container.appendChild(t)},n.prototype.createEmailNode=function(){var t=document.createElement("span");t.id="bt-pp-email";var e=["color: #6e787f","font-size: 13px",'font-family: "Helvetica Neue", Helvetica, Arial, sans-serif',"margin-left: 5px","-webkit-font-smoothing: antialiased","-moz-font-smoothing: antialiased","-ms-font-smoothing: antialiased","font-smoothing: antialiased"].join(";");return t.style.cssText=e,this.container.appendChild(t)},n.prototype.createLogoutNode=function(){var t=document.createElement("button");t.id="bt-pp-cancel",t.innerHTML="Cancel";var e=["color: #3d95ce","font-size: 11px",'font-family: "Helvetica Neue", Helvetica, Arial, sans-serif',"line-height: 20px","margin: 0 0 0 25px","padding: 0","background-color: transparent","border: 0","cursor: pointer","text-decoration: underline","float: right","-webkit-font-smoothing: antialiased","-moz-font-smoothing: antialiased","-ms-font-smoothing: antialiased","font-smoothing: antialiased"].join(";");return t.style.cssText=e,this.container.appendChild(t)},n.prototype.show=function(){this.container.style.display="block"},n.prototype.hide=function(){this.container.style.display="none"},e.exports=n},{"../shared/constants":162}],160:[function(t,e){function n(t){this.options=t,this.assetsUrl=this.options.assetsUrl,this.container=this.createViewContainer(),this.options.isCheckout?this.createCheckoutWithPayPalButton():this.createPayWithPayPalButton()}var i=(t("braintree-utilities"),t("../shared/constants")),r=t("../shared/get-locale");n.prototype.createViewContainer=function(){var t=document.createElement("div");return t.id="braintree-paypal-loggedout",this.options.container.appendChild(t),t},n.prototype.createPayWithPayPalButton=function(){var t=document.createElement("a");t.id="braintree-paypal-button",t.href="#";var e=["display: block","width: 115px","height: 44px","overflow: hidden"].join(";");t.style.cssText=e;var n=new Image;n.src=this.assetsUrl+"/pwpp/"+i.VERSION+"/images/pay-with-paypal.png",n.setAttribute("alt","Pay with PayPal");var r=["max-width: 100%","display: block","width: 100%","height: 100%","outline: none","border: 0"].join(";");n.style.cssText=r,t.appendChild(n),this.container.appendChild(t)},n.prototype.createCheckoutWithPayPalButton=function(){var t=document.createElement("script");t.src="//www.paypalobjects.com/api/button.js",t.async=!0,t.setAttribute("data-merchant",this.options.merchantId),t.setAttribute("data-button","checkout"),t.setAttribute("data-type","button"),t.setAttribute("data-width","150"),t.setAttribute("data-height","44"),t.setAttribute("data-lc",r(this.options.locale)),this.container.appendChild(t)},n.prototype.show=function(){this.container.style.display="block"},n.prototype.hide=function(){this.container.style.display="none"},e.exports=n},{"../shared/constants":162,"../shared/get-locale":164,"braintree-utilities":157}],161:[function(t,e){function n(t,e){this.popup=t,this.assetsUrl=e,this.spriteSrc=this.assetsUrl+"/pwpp/"+r.VERSION+"/images/pp_overlay_sprite.png",this._create(),this._setupEvents(),this._pollForPopup()}var i=t("braintree-utilities"),r=t("../shared/constants");n.prototype.render=function(){document.body.contains(this.el)||document.body.appendChild(this.el)},n.prototype.remove=function(){document.body.contains(this.el)&&document.body.removeChild(this.el)},n.prototype._create=function(){this.el=document.createElement("div"),this.el.className="bt-overlay",this._setStyles(this.el,["z-index: 20001","position: fixed","top: 0","left: 0","height: 100%","width: 100%","text-align: center","background: #000","background: rgba(0,0,0,0.7)",'-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=52)"']),this.el.appendChild(this._createCloseIcon()),this.el.appendChild(this._createMessage())},n.prototype._createCloseIcon=function(){return this.closeIcon=document.createElement("div"),this.closeIcon.className="bt-close-overlay",this._setStyles(this.closeIcon,["position: absolute","top: 10px","right: 10px","cursor: pointer","background: url("+this.spriteSrc+") no-repeat 0 -67px","height: 14px","width: 14px"]),this.closeIcon},n.prototype._createMessage=function(){var t=document.createElement("div");return this._setStyles(t,["position: relative","top: 50%","max-width: 350px",'font-family: "HelveticaNeue", "HelveticaNeue-Light", "Helvetica Neue Light", helvetica, arial, sans-serif',"font-size: 14px","line-height: 20px","margin: -70px auto 0"]),t.appendChild(this._createLogo()),t.appendChild(this._createExplanation()),t.appendChild(this._createFocusLink()),t},n.prototype._createExplanation=function(){var t=document.createElement("div");return this._setStyles(t,["color: #FFF","margin-bottom: 20px"]),t.innerHTML="Don't see the secure PayPal browser? We'll help you re-launch the window to complete your purchase.",t},n.prototype._createLogo=function(){var t=document.createElement("div");return this._setStyles(t,["background: url("+this.spriteSrc+") no-repeat 0 0","width: 94px","height: 25px","margin: 0 auto 26px auto"]),t},n.prototype._createFocusLink=function(){return this.focusLink=document.createElement("a"),this._setStyles(this.focusLink,["color: #009be1","cursor: pointer"]),this.focusLink.innerHTML="Continue",this.focusLink},n.prototype._setStyles=function(t,e){var n=e.join(";");t.style.cssText=n},n.prototype._setupEvents=function(){i.addEventListener(this.closeIcon,"click",i.bind(this._handleClose,this)),i.addEventListener(this.focusLink,"click",i.bind(this._handleFocus,this))},n.prototype._handleClose=function(t){t.preventDefault(),this.remove(),this.popup.close()},n.prototype._handleFocus=function(t){t.preventDefault(),this.popup.focus()},n.prototype._pollForPopup=function(){var t=setInterval(i.bind(function(){this.popup&&this.popup.closed&&(clearInterval(t),this.remove())},this),100)},e.exports=n},{"../shared/constants":162,"braintree-utilities":157}],162:[function(t,e,n){var i="1.4.0";n.VERSION=i,n.POPUP_NAME="braintree_paypal_popup",n.ARIES_POPUP_NAME="PPFrameRedirect",n.FRAME_NAME="braintree-paypal-frame",n.ARIES_FRAME_NAME="PPFrameRedirect",n.POPUP_PATH="/pwpp/"+i+"/html/braintree-frame.html",n.POPUP_OPTIONS="resizable,scrollbars",n.POPUP_HEIGHT=470,n.POPUP_WIDTH=410,n.ARIES_POPUP_HEIGHT=535,n.ARIES_POPUP_WIDTH=450,n.BRIDGE_FRAME_NAME="bt-proxy-frame",n.ARIES_SUPPORTED_CURRENCIES=["USD","GBP","EUR","AUD","CAD","DKK","NOK","PLN","SEK","CHF","TRY"],n.ARIES_SUPPORTED_COUNTRIES=["US","GB","AU","CA","ES","FR","DE","IT","NL","NO","PL","CH","TR","DK","BE","AT"],n.NONCE_TYPE="PayPalAccount",n.ILLEGAL_XHR_ERROR="Illegal XHR request attempted"},{}],163:[function(t,e){"use strict";e.exports={us:"en_us",gb:"en_uk",uk:"en_uk",de:"de_de",fr:"fr_fr",it:"it_it",es:"es_es",ca:"en_ca",au:"en_au",at:"de_de",be:"en_us",ch:"de_de",dk:"da_dk",nl:"nl_nl",no:"no_no",pl:"pl_pl",se:"sv_se",tr:"tr_tr",bg:"en_us",cy:"en_us",hr:"en_us",is:"en_us",kh:"en_us",mt:"en_us",my:"en_us",ru:"ru_ru"}},{}],164:[function(t,e){"use strict";function n(t){return-1!==t.indexOf("_")&&5===t.length}function i(t){var e;for(var n in o)o.hasOwnProperty(n)&&(n===t?e=o[n]:o[n]===t&&(e=o[n]));return e}function r(t){var e;if(t=t?t.toLowerCase():"us",t=t.replace(/-/g,"_"),e=n(t)?t:i(t)){var r=e.split("_");return[r[0],r[1].toUpperCase()].join("_")}return"en_US"}var o=t("../shared/data/country-code-lookup");e.exports=r},{"../shared/data/country-code-lookup":163}],165:[function(t,e){function n(){return p.matchUserAgent("Android")&&!i()}function i(){return p.matchUserAgent("Chrome")||p.matchUserAgent("CriOS")}function r(){return p.matchUserAgent("Firefox")}function o(){return p.matchUserAgent("Trident")||p.matchUserAgent("MSIE")}function s(){return p.matchUserAgent("Opera")||p.matchUserAgent("OPR")}function a(){return s()&&"[object OperaMini]"===d.call(window.operamini)}function u(){return p.matchUserAgent("Safari")&&!i()&&!n()}function c(){return h.isIos()&&!i()&&!u()}function l(){var t=/Version\/[\w\.]+ Chrome\/[\w\.]+ Mobile/;return h.isAndroid()&&p.matchUserAgent(t)}var p=t("./useragent"),h=t("./platform"),d=Object.prototype.toString;e.exports={isAndroid:n,isChrome:i,isFirefox:r,isIE:o,isOpera:s,isOperaMini:a,isSafari:u,isIosWebView:c,isAndroidWebView:l}},{"./platform":167,"./useragent":168}],166:[function(t,e){function n(){return!i()&&(s.isAndroid()||s.isIpod()||s.isIphone()||o.matchUserAgent("IEMobile"))}function i(){return s.isIpad()||s.isAndroid()&&!o.matchUserAgent("Mobile")}function r(){return!n()&&!i()}var o=t("./useragent"),s=t("./platform");e.exports={isMobile:n,isTablet:i,isDesktop:r}},{"./platform":167,"./useragent":168}],167:[function(t,e){function n(){return a.matchUserAgent("Android")}function i(){return a.matchUserAgent("iPad")}function r(){return a.matchUserAgent("iPod")}function o(){return a.matchUserAgent("iPhone")&&!r()}function s(){return i()||r()||o()}var a=t("./useragent");e.exports={isAndroid:n,isIpad:i,isIpod:r,isIphone:o,isIos:s}},{"./useragent":168}],168:[function(t,e,n){function i(){return o}function r(t){var e=n.getNativeUserAgent(),i=e.match(t);return i?!0:!1}var o=window.navigator.userAgent;n.getNativeUserAgent=i,n.matchUserAgent=r},{}],169:[function(t,e){function n(){return i()&&window.outerWidth<600}function i(){return f.test(d)}function r(){return!!window.postMessage}function o(){if(c.isOperaMini())return!1;if(l.isDesktop())return!0;if(l.isMobile()||l.isTablet()){if(c.isIE())return!1;if(p.isAndroid())return c.isAndroidWebView()?!1:!0;if(p.isIos())return c.isChrome()||c.isSafari()&&h.matchUserAgent(/OS (?:8_1|8_0|8)(?!_\d)/i)||c.isIosWebView()?!1:!0}return!1}function s(){if(c.isIE()&&h.matchUserAgent(/MSIE 8\.0/))return!1;try{return window.self===window.top}catch(t){return!1}}function a(){return c.isIE()&&!u()}function u(){var t=null,e="";try{new ActiveXObject("")}catch(n){e=n.name}try{t=!!new ActiveXObject("htmlfile")}catch(n){t=!1}return t="ReferenceError"!==e&&t===!1?!1:!0,!t}var c=t("../useragent/browser"),l=t("../useragent/device"),p=t("../useragent/platform"),h=t("../useragent/useragent"),d=window.navigator.userAgent,f=/[Mm]obi|tablet|iOS|Android|IEMobile|Windows\sPhone/;e.exports={isMobile:n,isMobileDevice:i,detectedPostMessage:r,isPopupSupported:o,isOverlaySupported:s,isProxyFrameRequired:a}},{"../useragent/browser":165,"../useragent/device":166,"../useragent/platform":167,"../useragent/useragent":168}],170:[function(t,e){function n(t,e){var n="innerText";document&&document.body&&"textContent"in document.body&&(n="textContent"),t[n]=e}e.exports={setTextContent:n}},{}],171:[function(t,e){function n(){for(var t="",e=0;32>e;e++){var n=Math.floor(16*Math.random());t+=n.toString(16)}return t}function i(t){return/^(true|1)$/i.test(t)}function r(t){return t.replace(/&/g,"&").replace(//g,">").replace(/\"/g,""").replace(/\'/g,"'")}function o(t){var e=t.indexOf("?"),n={};if(e>=0&&(t=t.substr(e+1)),0!==t.length){for(var i=t.split("&"),r=0,o=i.length;o>r;r++){var s=i[r],a=s.indexOf("="),u=s.substr(0,a),c=s.substr(a+1),l=decodeURIComponent(c);l=l.replace(//g,">"),"false"===l&&(l=!1),(void 0===l||"true"===l)&&(l=!0),n[u]=l}return n}}function s(t){return t&&"[object Function]"===Object.prototype.toString.call(t)}function a(t){t.preventDefault?t.preventDefault():t.returnValue=!1}var u="function"==typeof String.prototype.trim?function(t){return t.trim()}:function(t){return t.replace(/^\s+|\s+$/,"")},c="function"==typeof window.btoa?function(t){return window.btoa(t)}:function(t){for(var e,n,i,r,o,s,a,u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",c="",l=0;l>2,o=(3&e)<<4|n>>4,s=(15&n)<<2|i>>6,a=63&i,isNaN(n)?s=a=64:isNaN(i)&&(a=64),c=c+u.charAt(r)+u.charAt(o)+u.charAt(s)+u.charAt(a);return c};e.exports={trim:u,btoa:c,generateUid:n,castToBoolean:i,htmlEscape:r,parseUrlParams:o,isFunction:s,preventDefault:a}},{}],172:[function(t,e){"use strict";function n(t){this.host=t||window,this.handlers=[],i.addEventListener(this.host,"message",i.bind(this.receive,this))}var i=t("braintree-utilities");n.prototype.receive=function(t){var e,i,r,o;try{r=JSON.parse(t.data)}catch(s){return}for(o=r.type,i=new n.Message(this,t.source,r.data),e=0;e=0;n--)if(this.handlers[n].type===t&&this.handlers[n].handler===e)return this.handlers.splice(n,1)},n.Message=function(t,e,n){this.bus=t,this.source=e,this.content=n},n.Message.prototype.reply=function(t,e){this.bus.send(this.source,t,e)},e.exports=n},{"braintree-utilities":182}],173:[function(t,e){"use strict";function n(t,e){this.bus=t,this.target=e,this.handlers=[],this.bus.register("publish",i.bind(this._handleMessage,this))}var i=t("braintree-utilities");n.prototype._handleMessage=function(t){var e,n=t.content,i=this.handlers[n.channel];if("undefined"!=typeof i)for(e=0;er;r++)e(i[r])},e.exports=n},{}],206:[function(t,e){"use strict";function n(t,e){var n=window.getComputedStyle?getComputedStyle(t):t.currentStyle;return n[e]}function i(){return{html:{height:s.style.height||"",overflow:n(s,"overflow"),position:n(s,"position")},body:{height:a.style.height||"",overflow:n(a,"overflow")}}}function r(){var t=/Android|iPhone|iPod|iPad/i.test(window.navigator.userAgent);return t}function o(t){var e,n,i;this.encodedClientToken=t.clientToken,this.paypalOptions=t.paypal,this.container=null,this.merchantFormManager=null,this.root=t.root,this.configurationRequests=[],this.braintreeApiClient=u.configure({clientToken:t.clientToken,integration:"dropin"}),this.paymentMethodNonceReceivedCallback=t.paymentMethodNonceReceived,this.clientToken=u.parseClientToken(t.clientToken),this.bus=new l.MessageBus(this.root),this.rpcServer=new l.RPCServer(this.bus),this.apiProxyServer=new h(this.braintreeApiClient),this.apiProxyServer.attach(this.rpcServer),e=t.inlineFramePath||this.clientToken.assetsUrl+"/dropin/"+b+"/inline-frame.html",n=t.modalFramePath||this.clientToken.assetsUrl+"/dropin/"+b+"/modal-frame.html",s=document.documentElement,a=document.body,this.frames={inline:this._createFrame(e,y.INLINE_FRAME_NAME),modal:this._createFrame(n,y.MODAL_FRAME_NAME)},this.container=p.normalizeElement(t.container,"Unable to find valid container."),i=p.normalizeElement(t.form||this._findClosest(this.container,"form")),this.merchantFormManager=new d({form:i,frames:this.frames,onSubmit:this.paymentMethodNonceReceivedCallback,apiClient:this.braintreeApiClient}).initialize(),this.clientToken.paypalEnabled&&this.clientToken.paypal&&(p.isBrowserHttps()||this.clientToken.paypal.allowHttp)&&this._configurePayPal(),this.braintreeApiClient.sendAnalyticsEvents("dropin.web.initialized")}var s,a,u=t("braintree-api"),c=t("braintree-bus"),l=t("braintree-rpc"),p=t("braintree-utilities"),h=t("./api-proxy-server"),d=t("./merchant-form-manager"),f=t("./frame-container"),m=t("../shared/paypal-service"),y=t("../shared/constants"),g=t("braintree-paypal/src/shared/util/browser"),b="1.7.0";o.prototype.initialize=function(){var t,e=this;this._initializeModal(),c.emit(c.events.ASYNC_DEPENDENCY_INITIALIZING),this.container.appendChild(this.frames.inline.element),a.appendChild(this.frames.modal.element),this.rpcServer.define("receiveSharedCustomerIdentifier",function(n){for(e.braintreeApiClient.attrs.sharedCustomerIdentifier=n,e.braintreeApiClient.attrs.sharedCustomerIdentifierType="browser_session_cookie_store",t=0;t0&&n(r,e);return e}function i(t){try{t.attributes.removeNamedItem("name")}catch(e){}}function r(t){n(t)}function o(t){return t.nodeType===s&&t.attributes["data-braintree-name"]}var s=t.Node?t.Node.ELEMENT_NODE:1;e.exports={extractValues:n,scrubAllAttributes:r,scrubAttributes:i,isBraintreeNode:o}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],213:[function(t,e){"use strict";function n(t,e,n,i){this.client=t,this.htmlForm=e,this.isCreditCardForm=i===!1?!1:!0,this.paymentMethodNonceInput=n,this.model=new s,this.setEvents()}var i=t("braintree-utilities"),r=t("./fields"),o=t("braintree-bus"),s=t("./models/payment-method-model"),a={message:"Unable to process payments at this time",type:"IMMEDIATE"};n.prototype.setEvents=function(){this.onSubmitHandler=i.bind(this.handleSubmit,this),this.onExternalNonceReceived=i.bind(this.onExternalNonceReceived,this),this.clearExternalNonce=i.bind(this.clearExternalNonce,this),i.addEventListener(this.htmlForm,"submit",this.onSubmitHandler),o.on(o.events.PAYMENT_METHOD_GENERATED,this.onExternalNonceReceived),o.on(o.events.PAYMENT_METHOD_CANCELLED,this.clearExternalNonce)},n.prototype.handleSubmit=function(t){var e;return t.preventDefault?t.preventDefault():t.returnValue=!1,this.isCreditCardForm?(e=this.model.get("type"),e&&"CreditCard"!==e?(r.scrubAllAttributes(this.htmlForm),void this.onNonceReceived(null,this.model.attributes)):void this.client.tokenizeCard(r.extractValues(this.htmlForm),i.bind(function(t,e,n){t?this.onNonceReceived(a,null):(this.model.set({nonce:e,type:n.type,details:n.details}),this.onNonceReceived(null,this.model.attributes))},this))):void this.onNonceReceived(null,this.model.attributes)},n.prototype.writeNonceToDOM=function(){this.paymentMethodNonceInput.value=this.model.get("nonce")},n.prototype.onExternalNonceReceived=function(t){this.model.set(t),this.writeNonceToDOM()},n.prototype.clearExternalNonce=function(){this.model.reset()},n.prototype.onNonceReceived=function(t){var e=this.htmlForm;return t?void o.emit(o.events.ERROR,a):(i.removeEventListener(e,"submit",this.onSubmitHandler),this.writeNonceToDOM(),void(e.submit&&("function"==typeof e.submit||e.submit.call)?e.submit():setTimeout(function(){e.querySelector('[type="submit"]').click()},1)))},e.exports=n},{"./fields":212,"./models/payment-method-model":215,"braintree-bus":218,"braintree-utilities":225}],214:[function(t,e){"use strict";e.exports=function(t){var e;if("object"==typeof t)return t;e="payment_method_nonce","string"==typeof t&&(e=t);var n=document.createElement("input");return n.name=e,n.type="hidden",n}},{}],215:[function(t,e){"use strict";function n(){this.reset()}n.prototype.get=function(t){return this.attributes[t]},n.prototype.set=function(t){this.attributes=t||{}},n.prototype.reset=function(){this.attributes={}},e.exports=n},{}],216:[function(t,e){"use strict";e.exports=function(t){for(var e=t.getElementsByTagName("*"),n={},i=0;i Date: Fri, 4 Sep 2015 13:23:11 -0400 Subject: [PATCH 044/163] bump to 0.1.2 --- lib/solidus_braintree/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/solidus_braintree/version.rb b/lib/solidus_braintree/version.rb index 767da1ca..3d49bd0d 100644 --- a/lib/solidus_braintree/version.rb +++ b/lib/solidus_braintree/version.rb @@ -1,3 +1,3 @@ module SolidusBraintree - VERSION = "0.1.1" + VERSION = "0.1.2" end From 91d5f579f5e57ec8522127b36d9151f27e372b71 Mon Sep 17 00:00:00 2001 From: Jack Chu Date: Fri, 4 Sep 2015 16:13:59 -0400 Subject: [PATCH 045/163] add name presence validation on create --- app/models/concerns/add_name_validation_concern.rb | 6 ++++++ app/models/credit_card_decorator.rb | 1 + 2 files changed, 7 insertions(+) create mode 100644 app/models/concerns/add_name_validation_concern.rb diff --git a/app/models/concerns/add_name_validation_concern.rb b/app/models/concerns/add_name_validation_concern.rb new file mode 100644 index 00000000..f374d3b0 --- /dev/null +++ b/app/models/concerns/add_name_validation_concern.rb @@ -0,0 +1,6 @@ +module AddNameValidationConcern + extend ActiveSupport::Concern + included do + validates :name, presence: true, on: :create + end +end diff --git a/app/models/credit_card_decorator.rb b/app/models/credit_card_decorator.rb index 44ca2baa..9f15b2f4 100644 --- a/app/models/credit_card_decorator.rb +++ b/app/models/credit_card_decorator.rb @@ -1 +1,2 @@ Spree::CreditCard.include SolidusBraintree::SkipRequireCardNumbersConcern +Spree::CreditCard.include SolidusBraintree::AddNameValidationConcern From af215ddacfc0fd915bac577d2b1265154f3ce107 Mon Sep 17 00:00:00 2001 From: Jack Chu Date: Fri, 4 Sep 2015 16:24:59 -0400 Subject: [PATCH 046/163] add name validation spec --- spec/models/spree/credit_card_spec.rb | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/spec/models/spree/credit_card_spec.rb b/spec/models/spree/credit_card_spec.rb index f23398d1..37da22dd 100644 --- a/spec/models/spree/credit_card_spec.rb +++ b/spec/models/spree/credit_card_spec.rb @@ -21,5 +21,14 @@ it "require_card_numbers? returns false" do expect(credit_card.require_card_numbers?).not_to be end + + it "validate presence of name on create" do + expect do + credit_card = FactoryGirl.create(:credit_card, + payment_method: payment_method, + name: nil + ) + end.to raise_error(ActiveRecord::RecordInvalid, /Name can't be blank/) + end end end From 16a5fbef1dbcf8b3fd010efe15e4c1b081818b6d Mon Sep 17 00:00:00 2001 From: Jack Chu Date: Fri, 4 Sep 2015 16:28:30 -0400 Subject: [PATCH 047/163] bump to 0.1.3 --- CHANGELOG.md | 9 +++++++++ lib/solidus_braintree/version.rb | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f431dfd8..f09400a7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ ## HEAD +## 0.1.3 + +* Add back in name validation on `CreditCard`. + +## 0.1.2 + +* Upgrade braintree to 2.13.0-beta for the abiltiy to destroy/teardown. +* Fix bug related to using existing credit cards in admin. + ## 0.1.1 * Get the client token and attach the dropin on page load to support the create diff --git a/lib/solidus_braintree/version.rb b/lib/solidus_braintree/version.rb index 3d49bd0d..4c486410 100644 --- a/lib/solidus_braintree/version.rb +++ b/lib/solidus_braintree/version.rb @@ -1,3 +1,3 @@ module SolidusBraintree - VERSION = "0.1.2" + VERSION = "0.1.3" end From 8cf6166a80a7252293c75337b00b5c62f0e417d7 Mon Sep 17 00:00:00 2001 From: Allie Larson Date: Tue, 8 Sep 2015 08:38:30 -0700 Subject: [PATCH 048/163] Use CARD_TYPE_MAPPING for setting cc_type Use a CARD_TYPE_MAPPING hash for setting the cc_type on Spree::CreditCard after getting back info from braintree. --- CHANGELOG.md | 4 + .../solidus/gateway/braintree_gateway.rb | 2 +- lib/solidus_braintree/version.rb | 2 +- .../should_have_the_correct_attributes.yml | 113 ++++++++++++++++++ .../should_have_the_correct_attributes.yml | 112 +++++++++++++++++ .../solidus/gateway/braintree_gateway_spec.rb | 44 +++++-- 6 files changed, 263 insertions(+), 14 deletions(-) create mode 100644 spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/amex/should_have_the_correct_attributes.yml create mode 100644 spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/visa/should_have_the_correct_attributes.yml diff --git a/CHANGELOG.md b/CHANGELOG.md index f09400a7..8e86a3d9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ ## HEAD +## 0.1.4 + +* Use mapping to set cc_type conventionally. + ## 0.1.3 * Add back in name validation on `CreditCard`. diff --git a/app/models/solidus/gateway/braintree_gateway.rb b/app/models/solidus/gateway/braintree_gateway.rb index e5ca8361..00e8992e 100644 --- a/app/models/solidus/gateway/braintree_gateway.rb +++ b/app/models/solidus/gateway/braintree_gateway.rb @@ -75,7 +75,7 @@ def create_profile(payment) solidus_cc.name = card.email else solidus_cc.name = card.cardholder_name - solidus_cc.cc_type = card.card_type.downcase + solidus_cc.cc_type = CARD_TYPE_MAPPING[card.card_type] solidus_cc.month = card.expiration_month solidus_cc.year = card.expiration_year solidus_cc.last_digits = card.last_4 diff --git a/lib/solidus_braintree/version.rb b/lib/solidus_braintree/version.rb index 4c486410..177bfa8b 100644 --- a/lib/solidus_braintree/version.rb +++ b/lib/solidus_braintree/version.rb @@ -1,3 +1,3 @@ module SolidusBraintree - VERSION = "0.1.3" + VERSION = "0.1.4" end diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/amex/should_have_the_correct_attributes.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/amex/should_have_the_correct_attributes.yml new file mode 100644 index 00000000..a9934d92 --- /dev/null +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/amex/should_have_the_correct_attributes.yml @@ -0,0 +1,113 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + Card + Holder + elaina.johns@weissnatweimann.com + + Card Holder + + 10 Lovely Street + Northwest + Herndon + AL + US + 35005 + + fake-valid-amex-nonce + + true + + + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.47.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Tue, 08 Sep 2015 18:11:36 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"e573d53d9adaa61007e93e2cec2a65b1"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - ac3ff63db81ad9c270f37f236871a770 + X-Runtime: + - '0.891707' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIANgk71UAA7RYS3PbNhC++1dodKdJUZYtZ2i6nk47PiS9JGmnvWQgcmUh + IgEGAPXwr88CJEhQlGRJTi9xsPstuNznJ0aPmzwbrEBIytnDcHQdDAfAEp5S + 9vIw/PrlT286fIyvoqSUiucg4qvBIKJpPB2NR+H9/Tjy8aBlqEsWhCkPz68z + Ntm+/rhXd+t8vbkJI9/VavScCqk8RnKIfycijXxHoPUZsadnnqUgIr+VaH3C + 84Kw7YDR7GGoRAlD38ghJzSLISOUkevvfMHkb2ugUjKi8G9OGLtG08ivcNqi + WHAGvXvmZNOTrWEmqepjEwFEQeoRNVDbAh6GKR4VzWEYh8Fo4gX3XjD9Mpp+ + GI0+jCf/RX5rYOzLIj3d/hbtW4Pq+SY13pxClsrGpZQqL8HQyvpSIgTZDrW2 + q68kKJvRLMOkeyRNBUhp5VW6V7c20bXM1oPXqQVX2mLb3O7GrgY0uT2gP5Dt + WiuVAFCN36Ng8JGvINsOPhtF5O8AWkvYKGCpjmSt+osLtViDRKOeznGXJySj + ahs/g2ApZ1icVtKCBLxgR8VPHyO//m+rK7hUJPOwyyAeT4JgEvmuyH3xkimx + NWKPZMWChPHXzxjnPfJjVmO0etpnNj5kxkpMI03i6U2wY2c1fUPTnV8Z9kiK + sccSlQM+HzwZOGlvsU1srd/XPvUtZzXRpNdE5g7/QAtga7B4fDcNp6HGNJmM + dP94+nFx/ZJs8Mem0KboZaNz0QszzdrBN7DjbVfZGPFcz05KMozskvE104Fs + ZC2sii2fezjtSsIScPF9ZWN4TvRv90b/9FnQInXDKN0Uppp7UotPYUZV+yLV + sVXOSZlZv2ecZ0DYMNbzQUONsgWXAjPnYSuWmfbfuXRXY01gU1Bh/PFyztQi + HoV6LOwI96C3QARGLww6cCPtoLFNdnyfk0xCbeV4sgCSqQWWiJNUR2ZhuN9e + wCtFFi+UKuQH3ydSgpLXM4H7UA/BF3zBNdnqHegXZJsDU99yUAuefsv4C/dJ + XcbfoCrj64K9PAJbUcGZBj9IwtIZ3+AyaJ7VPB1LSzfPjLBl62ZHaqFm3t/E + gZl89cHq0C3BM6faraABCCgIdRJoBRYgy5lMBC101Lvbr9kakeJLYPFNOF0u + kQ1UJ6srGf1Rmjk3M9WL701xuYoY7tJ0NroJg/GMpOQ+SEfjEPCfeXgX3CS3 + WB0HTZu737frzR0rYDn3ZLo8UD2N3rEQ6EbVW/v4QA/Uis1+JaqUcaWHVO9T + I3AxyWqFHSQLvB+qJfYJ+7ondE3ISnogBBddzP4lX+OdLdl/3HHA7lVdUrD/ + tqMY98K6rxDxHRLT7TglJWcHX6bhwyQx01kPSYmFDA5VdlSuaSF4gt7sxg15 + TxDoZtivfeMGhXQnfipQs9IZPoRwb0G3Jq/h7WbbZYYtk3RlJ7BAA3qDCVa1 + dowN1hV7ISM01pexwsr9E5ihAR5hh1WKTmSIdUDewb8c3tPt6P5PhFpzZHY2 + BbCXL7k53j/97bPP4VVN1s7Y1n2bt3e29e08CuO80bncrzb9H9eRLbY3NmoN + O42F1OBjzM1CzqZkNpgncWL7cm/wiRp2OntpnLiMcTcx52mZmOHuhL2Rddrz + QCv+ml9Ov4aUmHsElUsPNWQ3tmk8vv37U/Dp3+d/7p7Hu/vCVEtCpRmI1QrS + BVNLOpHY8wTNd/rEpSutx3Qvkh2BAUX1XIe9n012fxf2Poyc8VPo+Do8vgiP + rcBLl99Fa++EhXd41Z245C75CHLRJ5ALP4C8Z/3+ihZ+/6cPJLttWpsD4LEt + 3fjqJwAAAP//AwDNktg3KhYAAA== + http_version: + recorded_at: Tue, 08 Sep 2015 18:11:40 GMT +recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/visa/should_have_the_correct_attributes.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/visa/should_have_the_correct_attributes.yml new file mode 100644 index 00000000..908aa266 --- /dev/null +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/visa/should_have_the_correct_attributes.yml @@ -0,0 +1,112 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + Card + Holder + bettye_stroman@jast.biz + + Card Holder + + 10 Lovely Street + Northwest + Herndon + AL + US + 35005 + + fake-valid-nonce + + true + + + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.47.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Tue, 08 Sep 2015 18:11:12 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"cef5896cd9391f2436f0ad1b801ff7ea"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 02bdec428253968c0985e95307c8d8cf + X-Runtime: + - '3.050001' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAMAk71UAA7RYS2/bOBC+51cYviuSHLtxCkXZYLGLHrq9tOlhLwEljmPG + EqmSlBP31++QelGW7dhOFkgAc+ab0XDeUnT3mmejNUjFBL8dh5fBeAQ8FZTx + p9vxw4+/vfn4Lr6I0lJpkYOML0ajiNH4ejb79CkIppGPB0NDXrokXHt4/p3w + 2eb3rxt9/ZK/vE4nke9yDXrBpNIeJznEfxJJI98hGH5GmtMXkVGQkd9RDD8V + eUH4ZsRZdjvWsoSxb+mQE5bFCWi9gUelpcgJ/+MZRS8T9jvyK7YBFkvBYSC+ + IK8D2gskiukhNpVANFCP6JHeFHA7pnjULIdxPAnCmRfceMH8Rzj/HIb492/k + dwJWvizoafKdQPV8GxFvwSCjqjWJMu2l6FFVKyVSks3YcPv8ioK0hGUZxtoj + lEpQqqFXUb5aNfGtaU0aeL0UcKkdtgvptu9qQBvSPfw9Qa65GF0A3dodBqOv + Yg3ZZvTdMiJ/C9BJwqsGTo0na9Y3IfXyBRQKDXiOuSIlGdOb+AtITgXHnGwo + HUjCExZSfP818uufHa8QSpPMw+KC+GoWBLPId0nuxUuu5caSPZIVSzKJH76j + n3fQD0ldodT9LrGrfWK8xDCyNJ5Pgy25hjMUtEX5wLFGKPoeU1SNxGJ0b+Gk + 09LUbiP9vvKptbyziKwOf08JYGnweBqEk/ncYNpIRqZ+PPO4+CdT5obt2UUs + bePqetyo6WTbzFZI5KZNMpKhN1dcvHDjvJbWwSp/ioXHlCoJT6EfZpfRCr3f + 28fXfoc0BaJNEdjsHVAbPIWE6e7S1bFjLkiZNXYnQmRA+Dg2/cBALbMDlxIj + 5WHplZmx31G6zWlE4LVg0trj5YLrZRxOTBvYIu5Ab4BI9N4k6MEttYfGstiy + fUEyBbWUY8kSSKaXmB7Qme3QGhjLyRN4pczipdaF+uz7RCnQ6jKRhHHT9J7w + gi9kc4nZ4xdkkwPXjznopaCPmXgS/hrT9rLgT3fA10wKbgC3inCaiFds+K3+ + 9omYTqZAEsJXnWk9agO1PX0ah/N5WM/sactDU6TInOxuCC1AQkEwj74J5NW/ + G54qE5VKVhgn94dbOxQiLVbA43nyjMkZ+dWp4ZWc/SptG0tssuKVGc5OGU/p + 1XSWXsM0CcPryRWhE1gsZgm9JkkQ4j/2jH2ire4P6EJr4LnwFF3tSZaW70hI + NKMqpV3jfgDqyHZ8El2quOIDNePSElxMul5jwagC9UM1o/7BMh4QXRGyVh5I + KWQfs3uG13hnCA4fdxiwrao/83drO4hxFdZlhIhnSG1xY1NUgu+9TLvlktQ2 + Y9MTFSYyOAuww3JFCylStGbbb7jWBIEpht3cNzRo3Gbi+wI5axPhfQhXC5p1 + syoWnPYXv25RdGlHLHkW9MaiV+XaoWWvztgzFz4rfd7SV5l/xOJngQeWvypE + Ry6AtUPesV45a02/oodvADXnQO9sE2DnOuTGeHfjb5791trURuqEgTyUeXss + N/actqU4tzh1tatF/8cR1CTY/gFaI47bMWrwob2sgZy8cDV+PGrbbe71xuZQ + w47fU1ojTt+lW1cLWqa2j3dWdbReJe6pupO28uBmzzvQx+wfVo9kauUhh2z7 + lR5oyxRSZj4eYdLp0V9rkpVGtcmWmt5zxY5HmN1muKT0qXVLHriyR7CgqO7h + sPMLyPYr3uAbxwlvOYdH3+Ghd2jcnTvozhpxRwy3/WPtyIF2zveMs75mnPkt + 4z2j9kPerN9dv7jYdmFtD4DHLnXji/8AAAD//wMAKg+7TOwVAAA= + http_version: + recorded_at: Tue, 08 Sep 2015 18:11:16 GMT +recorded_with: VCR 2.9.3 diff --git a/spec/solidus/gateway/braintree_gateway_spec.rb b/spec/solidus/gateway/braintree_gateway_spec.rb index 9b1447fd..5fea1fda 100644 --- a/spec/solidus/gateway/braintree_gateway_spec.rb +++ b/spec/solidus/gateway/braintree_gateway_spec.rb @@ -42,18 +42,38 @@ payment_method.create_profile(payment) end - it "should have the correct attributes" do - expect(card.user).to eq user - expect(card.payment_method).to eq payment_method - expect(card.cc_type).to eq 'visa' - expect(card.last_digits).to eq '1881' - expect(card.name).to eq "Card Holder" - - expect(card.month).to eq '12' - expect(card.year).to eq '2020' - - expect(card.gateway_payment_profile_id).to be_present - expect(card.gateway_customer_profile_id).to be_present + context "visa" do + it "should have the correct attributes" do + expect(card.user).to eq user + expect(card.payment_method).to eq payment_method + expect(card.cc_type).to eq 'visa' + expect(card.last_digits).to eq '1881' + expect(card.name).to eq "Card Holder" + + expect(card.month).to eq '12' + expect(card.year).to eq '2020' + + expect(card.gateway_payment_profile_id).to be_present + expect(card.gateway_customer_profile_id).to be_present + end + end + + context "amex" do + let(:nonce) { "fake-valid-amex-nonce"} + + it "should have the correct attributes" do + expect(card.user).to eq user + expect(card.payment_method).to eq payment_method + expect(card.cc_type).to eq 'american_express' + expect(card.last_digits).to eq '0005' + expect(card.name).to eq "Card Holder" + + expect(card.month).to eq '12' + expect(card.year).to eq '2020' + + expect(card.gateway_payment_profile_id).to be_present + expect(card.gateway_customer_profile_id).to be_present + end end From 9f095e8dd102a1f1e1ac8cef0cef6d8f6aa848b7 Mon Sep 17 00:00:00 2001 From: Allie Larson Date: Tue, 8 Sep 2015 15:46:18 -0700 Subject: [PATCH 049/163] bump version --- CHANGELOG.md | 2 +- lib/solidus_braintree/version.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e86a3d9..f702b613 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ ## HEAD -## 0.1.4 +## 0.1.5 * Use mapping to set cc_type conventionally. diff --git a/lib/solidus_braintree/version.rb b/lib/solidus_braintree/version.rb index 177bfa8b..9c5446a6 100644 --- a/lib/solidus_braintree/version.rb +++ b/lib/solidus_braintree/version.rb @@ -1,3 +1,3 @@ module SolidusBraintree - VERSION = "0.1.4" + VERSION = "0.1.5" end From 38e69af56e2c5bc7e3fd8409aa3d8f7bf671415e Mon Sep 17 00:00:00 2001 From: Allie Larson Date: Thu, 10 Sep 2015 11:37:28 -0700 Subject: [PATCH 050/163] Make Spree::CreditCard more flexible for handling paypal payments by marshalling payment info into json field. * Add data json field to credit_card * Marshal payment info received from braintree into data field * Look at data field for credit card attributes, fall back to super * Add additional specs for paypal functionality * Update README --- Gemfile | 2 +- README.md | 11 +- Rakefile | 4 +- app/models/concerns/use_data_field_concern.rb | 21 + app/models/credit_card_decorator.rb | 1 + .../solidus/gateway/braintree_gateway.rb | 5 +- bin/rails | 7 + .../20150910170527_add_data_to_credit_card.rb | 5 + lib/solidus_braintree/version.rb | 2 +- solidus_braintree.gemspec | 2 +- .../PayPal/credits_a_completed_payment.yml | 398 ++++++++++++++++++ ...fails_capture_with_settlement_declined.yml | 223 +++++----- .../should_have_the_correct_attributes.yml | 36 +- .../succeeds_authorization_and_capture.yml | 208 ++++----- ...succeeds_capture_on_pending_settlement.yml | 209 ++++----- .../PayPal/voids_a_authorized_payment.yml | 294 +++++++++++++ .../should_raise_exception.yml | 51 ++- .../fails.yml | 12 +- .../should_have_the_correct_attributes.yml | 75 ++-- .../decline/fails.yml | 161 ++++--- .../should_have_the_correct_attributes.yml | 113 ----- .../successful/succeeds.yml | 258 ++++++------ .../should_have_the_correct_attributes.yml | 75 ++-- .../can_be_fully_credited.yml | 271 ++++++------ .../with_completed_payment/can_be_voided.yml | 329 +++++++-------- .../on_a_payment/PayPal/failure/fails.yml | 267 ++++++------ .../PayPal/success/can_be_voided.yml | 262 ++++++------ .../on_a_payment/PayPal/success/succeeds.yml | 262 ++++++------ .../POST_create/returns_a_client_token.yml | 79 ---- .../json.yml | 79 ---- .../POST_create/returns_an_http_success.yml | 79 ---- .../returns_a_client_token.yml | 55 +-- .../json.yml | 55 +-- .../returns_an_http_success.yml | 42 +- .../returns_a_client_token.yml | 55 +-- .../json.yml | 42 +- .../returns_an_http_success.yml | 42 +- .../braintree_client_token_controller_spec.rb | 10 +- spec/models/spree/credit_card_spec.rb | 16 +- .../solidus/gateway/braintree_gateway_spec.rb | 21 +- 40 files changed, 2285 insertions(+), 1854 deletions(-) create mode 100644 app/models/concerns/use_data_field_concern.rb create mode 100644 bin/rails create mode 100644 db/migrate/20150910170527_add_data_to_credit_card.rb create mode 100644 spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/credits_a_completed_payment.yml create mode 100644 spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/voids_a_authorized_payment.yml delete mode 100644 spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/should_have_the_correct_attributes.yml delete mode 100644 spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/returns_a_client_token.yml delete mode 100644 spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/returns_a_content_type_of_application/json.yml delete mode 100644 spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/returns_an_http_success.yml diff --git a/Gemfile b/Gemfile index e3fe2ec1..133c5dfe 100644 --- a/Gemfile +++ b/Gemfile @@ -1,5 +1,5 @@ source 'https://rubygems.org' # Specify your gem's dependencies in solidus_braintree.gemspec -#gem "solidus", github: "solidusio/solidus", branch: "master" +gem "solidus", github: "solidusio/solidus", branch: "master" gemspec diff --git a/README.md b/README.md index 44863ad4..8da0b607 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,10 @@ `solidus_braintree` is a gem that adds [Braintree v.zero](https://www.braintreepayments.com/v.zero) support to the [solidus](http://solidus.io/) E-commerce platform. +It provides support for credit card and Paypal payment methods via the `Spree::CreditCard` + +It will add the braintree-drop-in form for payment methods in the payment form of spree/backend. Spree front-end is currently unsupported. + ## Installation Add this line to your solidus application's Gemfile: @@ -13,16 +17,19 @@ gem "solidus_braintree" And then execute: $ bundle + $ bundle exec rails g solidus_braintree:install ## Usage This gem extends your solidus application by adding a `POST /api/payment_client_token` endpoint to you application to generate Braintree payment client token. This endpoint requires an authentication token in your request header. -It also creates a new `PaymentMethod` class called `Solidus::Gateway::BraintreeGateway`. You can configure this payment method in the admin and add your Braintree public/private keys and merchant id. The admin will render a Braintree dropin container when prompting you to create an order payment. +It creates a new `PaymentMethod` class called `Solidus::Gateway::BraintreeGateway`. You can configure this payment method in the admin and add your Braintree public/private keys and merchant id. The admin will render a Braintree dropin container when prompting you to create an order payment. + +It adds a json or text `data` field on `Spree::CreditCard` for storing additional information received from Braintree for addtional payment methods. ## Development -After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake rspec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment. +After checking out the repo, run `bin/setup` to install dependencies. To run tests, first generate a test app by running `rake test_app`. Then, run `rake rspec` which will run the test suite. You can also run `bin/console` for an interactive prompt that will allow you to experiment. To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org). diff --git a/Rakefile b/Rakefile index 72b2b4bc..21c576b2 100644 --- a/Rakefile +++ b/Rakefile @@ -1,6 +1,6 @@ require "bundler/gem_tasks" require "rspec/core/rake_task" -require 'spree/testing_support/common_rake' +require 'spree/testing_support/extension_rake' RSpec::Core::RakeTask.new(:spec) @@ -11,5 +11,5 @@ task default: :spec desc "Generates a dummy app for testing" task :test_app do ENV['LIB_NAME'] = 'solidus_braintree' - Rake::Task['common:test_app'].invoke + Rake::Task['extension:test_app'].invoke end diff --git a/app/models/concerns/use_data_field_concern.rb b/app/models/concerns/use_data_field_concern.rb new file mode 100644 index 00000000..31357320 --- /dev/null +++ b/app/models/concerns/use_data_field_concern.rb @@ -0,0 +1,21 @@ +module UseDataFieldConcern + extend ActiveSupport::Concern + included do + prepend(InstanceMethods) + end + + module InstanceMethods + + def email + details["email"] + end + + def display_number + cc_type == 'paypal' ? email : super + end + + def details + @details ||= (data.is_a?(String) ? JSON.parse(data) : data) + end + end +end diff --git a/app/models/credit_card_decorator.rb b/app/models/credit_card_decorator.rb index 9f15b2f4..8571d15f 100644 --- a/app/models/credit_card_decorator.rb +++ b/app/models/credit_card_decorator.rb @@ -1,2 +1,3 @@ Spree::CreditCard.include SolidusBraintree::SkipRequireCardNumbersConcern Spree::CreditCard.include SolidusBraintree::AddNameValidationConcern +Spree::CreditCard.include SolidusBraintree::UseDataFieldConcern diff --git a/app/models/solidus/gateway/braintree_gateway.rb b/app/models/solidus/gateway/braintree_gateway.rb index 00e8992e..09115446 100644 --- a/app/models/solidus/gateway/braintree_gateway.rb +++ b/app/models/solidus/gateway/braintree_gateway.rb @@ -72,7 +72,10 @@ def create_profile(payment) source.tap do |solidus_cc| if card.is_a?(::Braintree::PayPalAccount) solidus_cc.cc_type = 'paypal' - solidus_cc.name = card.email + data = { + email: card.email + } + solidus_cc.data = data.to_json else solidus_cc.name = card.cardholder_name solidus_cc.cc_type = CARD_TYPE_MAPPING[card.card_type] diff --git a/bin/rails b/bin/rails new file mode 100644 index 00000000..b2713099 --- /dev/null +++ b/bin/rails @@ -0,0 +1,7 @@ +#!/usr/bin/env ruby + +ENGINE_ROOT = File.expand_path('../..', __FILE__) +ENGINE_PATH = File.expand_path('../../lib/solidus_braintree/engine', __FILE__) + +require 'rails/all' +require 'rails/engine/commands' diff --git a/db/migrate/20150910170527_add_data_to_credit_card.rb b/db/migrate/20150910170527_add_data_to_credit_card.rb new file mode 100644 index 00000000..550311c0 --- /dev/null +++ b/db/migrate/20150910170527_add_data_to_credit_card.rb @@ -0,0 +1,5 @@ +class AddDataToCreditCard < ActiveRecord::Migration + def change + add_column :spree_credit_cards, :data, :json + end +end diff --git a/lib/solidus_braintree/version.rb b/lib/solidus_braintree/version.rb index 9c5446a6..f926bd64 100644 --- a/lib/solidus_braintree/version.rb +++ b/lib/solidus_braintree/version.rb @@ -1,3 +1,3 @@ module SolidusBraintree - VERSION = "0.1.5" + VERSION = "0.1.6" end diff --git a/solidus_braintree.gemspec b/solidus_braintree.gemspec index d3542325..2b7e5f61 100644 --- a/solidus_braintree.gemspec +++ b/solidus_braintree.gemspec @@ -19,7 +19,7 @@ Gem::Specification.new do |spec| spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) } spec.require_paths = ["lib"] - spec.add_dependency "solidus_core", [">= 1.0.0", "< 2"] + spec.add_dependency "solidus", [">= 1.0.0", "< 2"] spec.add_dependency "braintree", "~> 2.46" spec.add_development_dependency "bundler", "~> 1.10" diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/credits_a_completed_payment.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/credits_a_completed_payment.yml new file mode 100644 index 00000000..4ae76d4c --- /dev/null +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/credits_a_completed_payment.yml @@ -0,0 +1,398 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + Card + Holder + santina_osinski@windlerprosacco.com + + Card Holder + + 10 Lovely Street + Northwest + Herndon + AL + US + 35005 + + fake-paypal-future-nonce + + true + + + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.48.1 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Mon, 14 Sep 2015 16:43:52 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"04725a8fa0584b1b9d755f3e7a9e98e8"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - cf1873975fd5d1f35b8216489f017648 + X-Runtime: + - '0.201532' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAEj59lUAA6RUyW7bMBC95ysE3WlaruU0hiwHKFD0A9JLL8ZIHMusuZWk + IitfX1Lykli9FDnOmzfbmyGL7UmK5BWt41pt0mw2TxNUtWZcNZv058t38jXd + lg9F3TqvJdryIUkKzso8y1ePq8WqoMGIWPDVB1CeBPutUnn/9ufJP3ayOy0X + BX3vjew9t84TBRLLb2BZQd8B0S/gYv3QgqEt6A2J/lpLA6pPFBeb1NsWUzrg + KIGL0oVKXMFOO67ckT93XDGB1ljtoK71LEQXdKTGIHPQCiep9nCaYB1Wjvsp + t7YIHhkBn/je4CZlwfRcYlou5llO5k8kW75kq/Xyyzpf/CroLWCIbw37v/hb + wFh/2A7ZcxTMXVti3JM6qOvOScFa6M8dG+gNCBLlaJX/yIiECWUEA+z1EVW5 + z495F9YyWhffqOlvUDhjGp/xBNIIvNN7YDLcQysu41ZaCwSVllHTgp6dVzKX + 0CBprSgP3hu3phScQ+9mlQWuvEVsghod9LESDX1LVH4n0R802wndaDrOMjOq + 2aJ65VarSNmEQ2GVPoUjvla41PzkSoccn1zrkMO1lastNz68z38scuBUXIjw + Xgk0QYo4WHhm9zcaaHS60XvMDSAwZjEoPKkXprz+A38BAAD//wMA2Os/NjoE + AAA= + http_version: + recorded_at: Mon, 14 Sep 2015 16:43:52 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + body: + encoding: UTF-8 + string: | + + + + + 50.00 + Solidus + f5k5wr + + + + paypal + + + sale + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.48.1 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Mon, 14 Sep 2015 16:43:53 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"4d342edb968d9c5e3eecc6105a118e6c"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - d8dfca0c4646a2ed29e3c62e7b3a323d + X-Runtime: + - '0.315232' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + /wMAH5hsJg8VAAA= + http_version: + recorded_at: Mon, 14 Sep 2015 16:43:53 GMT +- request: + method: put + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/jcdn28/submit_for_settlement + body: + encoding: UTF-8 + string: | + + + 50.00 + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.48.1 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 200 + message: OK + headers: + Date: + - Mon, 14 Sep 2015 16:43:54 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"ca8dab12e8c0dec40ab1a2cd860a7a0e"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 7f5fb0451aceb6fcf8065403a4f3ed13 + X-Runtime: + - '0.332794' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + http_version: + recorded_at: Mon, 14 Sep 2015 16:43:53 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/jcdn28/refund + body: + encoding: UTF-8 + string: | + + + 50.00 + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.48.1 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Mon, 14 Sep 2015 16:43:54 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"967de72cdc826dcdf7616630e1c3c21c"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 0d55fda672381a162f92aaf45566ca3c + X-Runtime: + - '0.360054' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAEr59lUAA+xYTXPbNhC9+1d4dIcpyaLjZGjmy06aTKaTSeNDe9GAxFJC + RAIsAMpSf30XBEmRJpi40+lMDr2Ruw/A7mKx+4Do5aHIz/egNJfiZra4mM/O + QaSScbG5md1/fUeuZy/js8goKjRNDaLis/PziLP4styF7FsU4KeVaENNpWMN + xuQ4OAoagdWZYwlxqoBxEwX1j5WmlVK41pFwLQkuCfH9b7dRMBZbMC1kJUwc + zi/m8yho/qyiAJVuqTCEpqkVErRHlwogCnwqO0QqBgp/zgXPb2ZGVTALnEUK + qAFGqDm3Vt7MGP4aXsAsXs4XIZk/J4vV18XVi9Xli3D1B9raDajHVyX7Z+NP + A5qIaCPRavvjghwuwqtnV8urNswozbjShghaQPyWKhYFPYFD5LT9/0Xm6GoU + nCQOkcqipOL4OACogYLyPNYYNS7oWmou9I6/euCC5aBKJbWN5QWOjwIHdcMe + INHcgGfCciuFT57Rwyj+QT8AUcJzm0ldMHyTdK57lJ3THt10ALTB3MGUYUyB + 1r4IHQwIZjdtEpLLlObc+KZXsMEz5IuTxAOT1wnvtRfzVx2n3XFqO5rQvNzS + 5ZNQlz9CiQp3g6fjneptDvqUVYL5DlSn0c2BoErR40CJgewVF3tEv6VMLK+j + YEpfVxtbZqAAPNRDrW8hWpmtVPyv0VQje3vTJtSkWy9my8vy/7z8SfOyvztN + PSUZh5zpJhf2moBSUhGMUSmFBq9rNa7n+hAdv8YW9F1AO8Vw1/yzfBdTu7Hf + j0eOhRa6wXbyQI+o+QYuy7FD6fHGRljKU1wN49CeDlrDvcE4gYcrLubzZRRM + aSdGGkzU+LOTA/MOryF1CBlSBjQLgzyGjczcS57ajchwg3EE5kgCauxMZVkB + ruJowATK0ANxLMOrggMUZdvlEylzoGIWZzTXyDtOgJZVoBckxWbdpLKROxBx + Fu7CB2zO7s9pEu47g3XFWPnOBM5JrBHeelBy5Ta1kMJsY+zYj0Uj5BGoGgJr + SbNa052JrSPGXy6sRduadUzVBF7QDZBK5fHWmFK/CAKKiWD0RaIoF/YsNEls + WUZQ0qMtx+sCMEvZOpcbGVRiJ+SDuCjF5iWIPVdSWMwNshaWyANypW6JpoYp + KCl2jns30OacEzj1Fmhutmg5nBA9mQMxSLg56d1vo6oU7hsm3qbKLZ3roR5r + uipvuSmn+QnakzVG06OSeQ/RCpowal1hncM+JXYnzEA6rJsyI1ZLRQr9VcfK + NmaSVWnNmXth62QOVAn+ZwXNGUIx7gLHajs6TvZwgigk0Ww3cWg6fcMEh4em + uV6QLccUVMdBk+8aZI0AnKjZGHvSkHyjoiifSMg7fDdDe6+pkoIb3MJ1JtX6 + xBP695waP3VRcfHSyG1ZQcUGsO67W0ot6+zt8RMtsVJBTEuOdo3lzutg7PZ/ + HQnPDe+n8LyTNEniqn1O/UyvSnSqeDnJBHv6rjbXlJeUyDwkI0i2iA2iJ9cf + IdEsZbxYNPnROrblEexuHhrLuK6Pq1cHbhbZ1uqJ4jt1G8NaObZtOClSRHs1 + R7/G92a8ZQsYz4D7u7ctOQOYaqZ2CflA3M6NtOhyUintGDkDgxdO3Rbdgcq/ + Dz06719+iBm9PDwRDgcbAOw4ym+GvcZgViIJ9U1YpamHrWP0J3y3npeVAV8a + NN2S4K0dp3LXI/vcgvKS5uvmHSQKpnBDytbzdcjsVnN7wp8A/PF8NdV7KwXe + mIohG5xE1xxsixWE4NGyOQnoRybHRK92+oeUC2HYu9xjRv39Cg5Y9nJwrxx9 + dTfABY/Fn1//Tq5pcgnLFMJ5uMjwm8HzZxQS2oty2y6HVNt7c/z37Mi5/XRy + hEym2lgbb+/e3L8nV+lqfh0+m6fZ5aqmOU55ihW4YPi4X++65as9dSRd1O6+ + rD/cErpc0vAyvQ6XaZhdr1gb7cF6ivQeuD7KrWhRo3cvJz69dd1KaLGPH8A0 + 5DmKMdtMc09qmtndpw/vP7z5dIeVeQrSEt3S1KnH4revP3+9/3KHHiFvOYnb + i3XzBBJ/uXt3/+ttjToJz0bNb7pYeoBPKVltGfcQ9ihoD8mg0cZnfwMAAP// + AwD/YlmdGBYAAA== + http_version: + recorded_at: Mon, 14 Sep 2015 16:43:54 GMT +recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/fails_capture_with_settlement_declined.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/fails_capture_with_settlement_declined.yml index 38b81378..6446c8a8 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/fails_capture_with_settlement_declined.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/fails_capture_with_settlement_declined.yml @@ -10,7 +10,7 @@ http_interactions: Card Holder - walter.wyman@mayert.name + mac@roob.name Card Holder @@ -33,7 +33,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -44,13 +44,22 @@ http_interactions: message: Created headers: Date: - - Tue, 28 Jul 2015 20:51:14 GMT + - Mon, 14 Sep 2015 16:43:50 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked Connection: - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff + X-Ua-Compatible: + - chrome=1 X-Authentication: - basic_auth Strict-Transport-Security: @@ -62,34 +71,30 @@ http_interactions: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"ec245e3982f773c3f0825093c03365e5"' + - '"75ee513ce9ddd0e974ab18e5df96b649"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 27fb07ab65833f4ebd98747e2be67f24 + - 9986c644-3d21-4e4b-853b-f93106ab149f X-Runtime: - - '0.363756' - X-Frame-Options: - - SAMEORIGIN + - '1.016289' body: encoding: ASCII-8BIT string: !binary |- - H4sIAELrt1UAA6RTS2+bQBC+51cg7rDGspvYWnCkSFV/QHrpJRrYsb3NPsju - ECC/vgv4ldJLleN8j5nZb4DvOq2id3ReWpPHWbqIIzSVFdIc8vjn8/fkId4V - d7xqPFmNrriLIi5FkW1Wi02WZZyFYsACVx3BUBLqj9Ks+4+3Dd23uu1WS85u - 2UG9l85TYkBj8QROcHYDDLyCc/XDKoGOsysy8JXVNZg+MlLlMbkGYzbiqEGq - ogVF6NK212AeNfToKB2snE38oKyP1uDMv4duhrVYeklzbeUQCEUCFFFfYx6L - UJLUGBfLRbZOFvfJ8uF5udius222+sXZ1TD6m1r8n/9qmOaPJ0n2EpXwl5WE - pKQKkfpTU3AO+tPGNfQ1qASqyjaGPisGwUwygQEm+4qmePWd1t84m6ozN2X6 - GwymwuIjdqBrhWk40U3eo1LgHhp1fm5prUIwcTFkytmJvIilhgMmjVPFkaj2 - W8bAeySflg6kIYd4CGm00A+TWNhbo6EXjXS04kXZg2XTW9LaHHZo3qWzZpDk - HowobRe+3MuE88wvnnTs8cWzjj18U/rKyZrCT/mPQwYFmx/qb8yPIAjhMAQ3 - axOWv/zTfwAAAP//AwBl8rmCBgQAAA== + H4sIAEb59lUAA6RTy27bMBC85ysE3SlaiWLHhiQHKFD0A9JLL8FKXMtM+VBJ + ypby9SUlvxL1UuS4s7Pc3Rluvu2liA5oLNeqiNNkEUeoas24aor458t38hRv + y7u87qzTEk15F0U5Z+Vy8ZQuH1ZZTn0QMJ+r96Ac8fF7pR6H9z9rtzrKY5/d + 5/Q2G9g7bqwjCiSW38CwnN4AIS/gHP3QgqHJ6RUJ+VrLFtQQKS6K2JkOYzri + KIGLUkL9bLSuksDP6QSGdLvXCmdFO+hn2BEry92cWxsEh4yAi9zQYhEzHzou + MS7vF+kjWaxJmr2ky032sMnWv3J6LRjru5b9X/21YOo/+kB2HAWzl5EYd6T2 + OtrTo2AMDKeJWxhaEATqWnfKfWQEwowygR52+jeqcrW2bwdv4RSdc5Omb6Aw + YRqfsQfZCky8Lzd6j0yGO+jEed1Ka4Gg4jJomtNT8kLmEhoknRHl3rnWbigF + a9HZpDLAlTOIjVfjCEPoRP3cEpV7lej2mr0K3Wg67ZK0qtmiOnCjVaAUFhSr + dO+/66XDuecXLR3f+KKt4xu2q2xteOv8Jf7DyJFTcSH8ZRJovBRhMX9Qn/+o + p9G5o58xO4LAmEGv8Kyf3/Jy8X8BAAD//wMAjl/sQSQEAAA= http_version: - recorded_at: Tue, 28 Jul 2015 20:51:16 GMT + recorded_at: Mon, 14 Sep 2015 16:43:49 GMT - request: method: post uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions @@ -102,11 +107,11 @@ http_interactions: 4001.00 Solidus - ksxmm6 + 79sjv2 - jane.doe@example.com + paypal sale @@ -117,7 +122,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -128,7 +133,7 @@ http_interactions: message: Created headers: Date: - - Tue, 28 Jul 2015 20:51:15 GMT + - Mon, 14 Sep 2015 16:43:50 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -149,57 +154,57 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"b2f064697ac9ec6871509d8c15585136"' + - '"ec2aa2995b2abba89c21f7d321862191"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - e2b02d83c1767e65b969feba46778388 + - 24e1381d8625cb9c7dce336eff76d97d X-Runtime: - - '0.244573' + - '0.245372' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - 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 http_version: - recorded_at: Tue, 28 Jul 2015 20:51:17 GMT + recorded_at: Mon, 14 Sep 2015 16:43:50 GMT - request: method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/97r6m8/submit_for_settlement + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/gdt3zp/submit_for_settlement body: encoding: UTF-8 string: | @@ -213,7 +218,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -224,7 +229,7 @@ http_interactions: message: Unprocessable Entity headers: Date: - - Tue, 28 Jul 2015 20:51:15 GMT + - Mon, 14 Sep 2015 16:43:51 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -247,53 +252,53 @@ http_interactions: Cache-Control: - no-cache X-Request-Id: - - 9401e66b6b097d7c2a0a51f693b9b645 + - 30e29ceb2fa15ae4182a9d8fb6634738 X-Runtime: - - '0.276751' + - '0.403563' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - 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 - ABMy6zn+GgAA + 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 + //8DAMYwuuVOGwAA http_version: - recorded_at: Tue, 28 Jul 2015 20:51:17 GMT + recorded_at: Mon, 14 Sep 2015 16:43:51 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/should_have_the_correct_attributes.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/should_have_the_correct_attributes.yml index f3241c24..b144ad83 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/should_have_the_correct_attributes.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/should_have_the_correct_attributes.yml @@ -10,7 +10,7 @@ http_interactions: Card Holder - delta@nolan.biz + pasquale@langosh.name Card Holder @@ -33,7 +33,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -44,7 +44,7 @@ http_interactions: message: Created headers: Date: - - Tue, 28 Jul 2015 20:51:10 GMT + - Mon, 14 Sep 2015 16:43:43 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -65,29 +65,29 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"e8807c1f07857a2085c549179f3788b4"' + - '"3268f9e4dea837368f47e9dd7d4f09fa"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - d95b3cc5f6b7bd7b8124ce11e0a7d816 + - e2027e76b2ed19f701fb1884facdbd17 X-Runtime: - - '0.282431' + - '0.229547' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAD7rt1UAA6RTy27bMBC85ysE3SXKTlynBi0HKFD0A9JLL8FKXNtMyaVK - rmLLX19Kih+teily3JnZB2ckuTlak7yhD9rROp3lRZog1U5p2q3T789fs8d0 - U97Jug3sLPryLkmkVuWn+2I5mxcPUsSixyJX74E4i/WpokV3+vWZlwd7OD7M - pbhle/VW+8AZgcXyC3glxQ3Q8wbO1TdnFHoprkjP1842QF1C2qxT9i2mYsDR - gjalQsPwRM4A5ZU+STHCvaDZO8JJ2xaOE+yAVdA81dYegVFlwAl3Da5TFUvW - FtNyXswWWbHM5o/P82K1mK1mxQ8prg1Df9uo/+u/Noz7hySyrUajwuUkpTmr - o5PhfSh4D937xQ10DZgM6tq1xH8qesFEMoIRZvcTqXxlqu8PUozVmRs9fQXC - XDl8wiPYxmAek7nxe1Aq3EJrzs+tnDMIlJa9p1K8kxextrDDrPWm3DM3YSUE - hIAc8sqDJvaIu+jGAbp+k4h3WyR+sch7p16M2zkxviVvaLdBetPeUS9ZByBV - uWP8YC8bzjs/GOkw44OxDjNCW4Xa64bjv/iPIKNCTIP6GwsDCEp5jMZNxsTj - L7/ybwAAAP//AwDtfSRQ/QMAAA== + H4sIAD/59lUAA6RTTW/bMAy991cYvstK0nRpCsUpMGDYD+guuxS0xTjaJEqV + 5Cbur59sNx+rdxkK6ML3HkXxURTbo9HZK/qgLG3yeTHLM6TaSkXNJv/x9I3d + 59vyRtRtiNagL2+yTChZ3t6vlqvFei54CnoscfUeKLIUv1V01729rOPqYA7H + 5ULwa7ZX75QPkREYLL+Cl4JfAT2v4RR9t1qiF/yC9HxtjQPqMlJ6k0ffYs4H + HA0oXToILy1ofNRAjQ37os8TfCR7mdtbwknyDo4T7IBVUHGqrT1CRMkgZrFz + uMllCqMymJeL2fyOzdZsvnyaf3lY3qbzU/BLwpDfOvl/+ZeEsf4wD7ZTqGU4 + P0mqyOrkZ3i/FLyH7v3FDjoHmkFd25bi34peMJGMYIKj/Y1U7mi1poPgY3Ti + Rk9/AWEhLT7iEYzTWKT5XPk9KCXuoNWnditrNQLlZe+p4O/kWawMNMhar8t9 + jC48cA4hYAxF5UFR9IhNcuMAXV+Jp3cbpPhsMO6tfNa2sXzspXDUbJFelbfU + SzYBSFb2mL7tucKp5idHOtzxybEOd4S2CrVXLqaN/McgB02ltE4byqBJVvSN + pcX6+EeTjE8n+hELAwhSekwOT+qlLs+b/wcAAP//AwDyEz8mLAQAAA== http_version: - recorded_at: Tue, 28 Jul 2015 20:51:12 GMT + recorded_at: Mon, 14 Sep 2015 16:43:43 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/succeeds_authorization_and_capture.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/succeeds_authorization_and_capture.yml index 42054b25..1cb6f6d1 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/succeeds_authorization_and_capture.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/succeeds_authorization_and_capture.yml @@ -10,7 +10,7 @@ http_interactions: Card Holder - leon.upton@lemke.info + celestine@kling.co.uk Card Holder @@ -33,7 +33,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -44,7 +44,7 @@ http_interactions: message: Created headers: Date: - - Tue, 28 Jul 2015 20:51:10 GMT + - Mon, 14 Sep 2015 16:43:44 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -65,31 +65,32 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"5759ad1f3ed480e51e92010b0f1903b8"' + - '"982610f99ced0427065e1bfd003a7c2a"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - f48800a40ce95567ee6249ffa26dd693 + - 763e3d01ee30823d44204aca8c2f8fda X-Runtime: - - '0.383089' + - '0.238701' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAD7rt1UAA6RTy5KbMBC871dQ3EHYZWLHBXirUpXKB2wuuWwNaIyVlUaK - JGyzXx8BfiXkktrjdPc81A3F7qxkdETrhKYyXqRZHCE1mgtqy/j7y9dkE++q - p6LpnNcKbfUURYXgVb7aZMt8/algoRiwwDUHIJ+E+r2mvH//9dmvT+p0Xi0L - 9sgO6r2wzicECqsvYHnBHoCBl3CtvmnJ0Rbsjgx8o5UB6iMSsoy97TBmI44K - hKwkako74zU9S1RvmAra64JN5CAzB004a97DeYadsHbCz7WNRfDIE/CR7w2W - MQ+lFwrjapkt8iRbJ8vNyzLb5ovtIvtRsHvD2N8Z/n/994Zp/5hHshcoubud - xIVPmuCnuwwFa6G/XGygNyATaBrdkf9TMQhmkgkMsNdvSNUqd8c25D1VV27y - 9CcQplzjM55BGYlpyOfB71HJcQ+dvD631loiUFwNnhbsQt7EQkGLSWdldfDe - uC1j4Bx6l9YWBHmL2AY3TtAPm1i4WyH5V4X+oPmr1K1m01tSQ+0O6SispkFS - OiBe63P4bG8brjs/GOk444OxjjNcV7vGCuPDH/mPIIOCzYP6G3MjCJxbDMbN - xoTjbz/0bwAAAP//AwC/zJHXAwQAAA== + H4sIAED59lUAA6RTy27bMBC85ysE3Snajp3EgSQHKFD0A9JLL8GKXMuM+VBI + Kpby9SUlvxL10KIALzszy92dJfNNp2TyjtYJo4t0ns3SBDUzXOi6SH8+fycP + 6aa8yVnrvFFoy5skyQUvF6vVw3p2f5fTEEQscGwH2pMQf1R61X+8rf39QR26 + 5SKn12xUb4V1nmhQWH4Dy3N6BURewin6YSRHm9MLEnlmVAO6T7SQReptiykd + cFQgZMlQovNC49NehjkyZrJ2n9ORjLJmZzROkrfQTbADVk74qZZZBI+cgE98 + 32CR8hB6oTAtF7P5iszWZL58nt89Lm/D+ZXTS8KQ3zb87/OXIf+SMNYf9kG2 + AiV355a48IQFP93xUrAW+mPHDfQNSAKMmVb7z4oomEhGMMDe7FGX+1fO3sIq + x+jEjZ6+gsaMG3zCDlQjMTiurvwelBy30MrTuJUxEkGnZfQ0p0fyLBYKaiSt + leXO+8Y9UgrOoXdZZUFobxHr4MYB+liJhr4Vav+i0O8Mf5GmNnScJWt0vUH9 + LqzRUVI40LwyXXi25wqnmv+50uGOf1rr7WStwx2urRyzovHhR/5hkYOmEjK+ + bAJ1sCIOFj7W1zcaZHS60a+YG0Dg3GJweFIvTHn++b8BAAD//wMAVXWc7SwE + AAA= http_version: - recorded_at: Tue, 28 Jul 2015 20:51:12 GMT + recorded_at: Mon, 14 Sep 2015 16:43:43 GMT - request: method: post uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions @@ -102,11 +103,11 @@ http_interactions: 50.00 Solidus - 45svg6 + kjdcq2 - jane.doe@example.com + paypal sale @@ -117,7 +118,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -128,7 +129,7 @@ http_interactions: message: Created headers: Date: - - Tue, 28 Jul 2015 20:51:11 GMT + - Mon, 14 Sep 2015 16:43:45 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -149,57 +150,58 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"3ba466d886cc8333c4beb46c538d9eb1"' + - '"24630c2425af435837eb816db2782867"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 17fd197185778a34e96214794af92265 + - 557d85408275fd68336a10513be9b82e X-Runtime: - - '0.279134' + - '0.325392' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - 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 + ARUAAA== http_version: - recorded_at: Tue, 28 Jul 2015 20:51:13 GMT + recorded_at: Mon, 14 Sep 2015 16:43:44 GMT - request: method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/2dpb28/submit_for_settlement + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/55hjny/submit_for_settlement body: encoding: UTF-8 string: | @@ -213,7 +215,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -224,7 +226,7 @@ http_interactions: message: OK headers: Date: - - Tue, 28 Jul 2015 20:51:12 GMT + - Mon, 14 Sep 2015 16:43:45 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -245,54 +247,54 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"b5b76a4dd4b8fe14a3bf3ee76ab3b06e"' + - '"eede2a008edcf345b2106633bf8f235f"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 70c724bf71ab2a0ecd3c725a680a42a0 + - 87771e4c30df2f0c93df1b09275809d7 X-Runtime: - - '0.290911' + - '0.283838' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - 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 - i1RzxnrTxa/+AgAA//8DANGARo/wFgAA + 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 http_version: - recorded_at: Tue, 28 Jul 2015 20:51:14 GMT + recorded_at: Mon, 14 Sep 2015 16:43:45 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/succeeds_capture_on_pending_settlement.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/succeeds_capture_on_pending_settlement.yml index 4da25fb6..a23af8f7 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/succeeds_capture_on_pending_settlement.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/succeeds_capture_on_pending_settlement.yml @@ -10,7 +10,7 @@ http_interactions: Card Holder - mariane@bins.ca + beverly_kozey@schinnerkovacek.co.uk Card Holder @@ -33,7 +33,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -44,7 +44,7 @@ http_interactions: message: Created headers: Date: - - Tue, 28 Jul 2015 20:51:12 GMT + - Mon, 14 Sep 2015 16:43:46 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -65,31 +65,32 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"233e85692640d1907061f1bc0f7fb7ca"' + - '"fb98b77abeffc2bb8e115e75c0ce001a"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 91155dee88029c54953794d8581c1bd7 + - 415ad3654a4e678affe57fc51f80ded8 X-Runtime: - - '0.228209' + - '0.223078' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAEDrt1UAA6RTy26cMBTd5ysQezBDOspkZJhIkap+QLrpJrrYd8CNH8Q2 - M5Cvr4F5pXRTZXnPOffhc4DueiWjA1onjC7iVZrFEWpmuNB1Ef98+Z5s4l15 - R1nnvFFoy7soooKXeb6+32yyR0pCMWKBYw1on4T6o9Lr4eP90T8c1bH/llNy - y47qvbDOJxoUls9gOSU3wMhLOFc/jORoKbkiI8+MakEPkRayiL3tMCYTjgqE - LBVYARqfKqFdyoCSGR4FbWM0Ltr20C+wI1ZO+KWWWQSPPAEf+aHFIuah9EJh - XObZap1kD0m+ecmz7Xq1XeW/KLk2TP1dy/+v/9ow75+SSPYCJXeXk7jwCQtO - utNQsBaG08UtDC3IBBgznfafFaNgIZnBAHvzhrpsDuz+TVEyV2du9vR38Dnl - Bp+wB9VKTEMyN35PSo576OT5uZUxEkHH5egpJSfyIhYKakw6K8vG+9ZtCQHn - 0Lu0siC0t4h1cOMIw7iJhLsVav+q0DeGv0pTGzK/JW11vUN9ENboUVI40Lwy - ffhgLxvOO78Y6TTji7FOM1xXOWZF68O/+I8gg4Isg/obcxMInFsMxi3GhOMv - v/IfAAAA//8DAOpctL39AwAA + H4sIAEL59lUAA6RUyW7bMBC95ysE3Sl6T2zQcoACRT8gvfRijMixzJqLSlK2 + 5a8vJcVLol6KHOfNm+0Nh2xz1io5ovPSmnU6zkZpgoZbIU25Tn++fScv6SZ/ + Yrz2wWp0+VOSMCny+XSyeHmeLBmNRotFH9+DCSTal8LMm8ufZXg+6dN5NmH0 + 0duyd9L5QAxozL+BE4w+AK1fwdX6YZVAx+gdaf3c6gpMkxip1mlwNaa0w1GD + VHmBcSDVbA/2gs2r53tpDLqDPQLHQ8ZtVh8Y7altULW3BgepdnAeYCcsvAxD + LncIAQWBkISmwnUqohmkxjSfjMZzMlqS8extvFjNpqvZ4hej94Auvq7E/8Xf + A/r63XbITqIS/taSkIHwqK5/TwrOQfPecQVNBYoA57Y24SOjJQwoPRjhYA9o + 8qnQpT8x2ltXX6/pbzCYCYuveAZdKYyK6we9O6bAHdTqOm5hrUIwad5qyui7 + 80aWGkoktVP5PoTKrygF7zH4rHAgTXCIZVTjBE1bica+NZqw1Rj2VmyVLS3t + Z8kqU27QHKWzpqWsPRhR2HN8xLcK15pfXGmX44tr7XL4uvDcySrE+/zHIjtO + IZWK90qgjFK0g8Uz+/xGI40ON/oZ8x0IQjiMCg/qxSlv/8BfAAAA//8DANCt + d7M6BAAA http_version: - recorded_at: Tue, 28 Jul 2015 20:51:14 GMT + recorded_at: Mon, 14 Sep 2015 16:43:46 GMT - request: method: post uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions @@ -102,8 +103,8 @@ http_interactions: 4002.00 Solidus - hvc3km - 22538809 + 3dmgsw + 53268729 sale headers: @@ -112,7 +113,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -123,7 +124,7 @@ http_interactions: message: Created headers: Date: - - Tue, 28 Jul 2015 20:51:13 GMT + - Mon, 14 Sep 2015 16:43:47 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -144,57 +145,58 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"4eb1590ad1fc59237b7f84d922fd8f4d"' + - '"4f5e92a408249dfa9a54b78ad782e363"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 9d1623c2fb50446d362fb112d1da253c + - 060518fdfee93f4e82295cdcd431249c X-Runtime: - - '0.435357' + - '0.525286' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - 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 + b/jmHwAAAP//AwD5YufSExUAAA== http_version: - recorded_at: Tue, 28 Jul 2015 20:51:15 GMT + recorded_at: Mon, 14 Sep 2015 16:43:47 GMT - request: method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/3cykjj/submit_for_settlement + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/jv2rsd/submit_for_settlement body: encoding: UTF-8 string: | @@ -208,7 +210,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -219,7 +221,7 @@ http_interactions: message: OK headers: Date: - - Tue, 28 Jul 2015 20:51:14 GMT + - Mon, 14 Sep 2015 16:43:48 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -240,54 +242,55 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"b20f10a084f6ddf782c49ef64462f4b0"' + - '"4b11e265a988f0c7d0b185ae894f40af"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 1c53d551520e48b63d062c96ba259685 + - 1fd8f4501a157ec23c77c95e225f4f76 X-Runtime: - - '0.238789' + - '0.518692' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - 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 - BpoS1s9W9R3rbBe9+hsAAP//AwBIeKWuCxgAAA== + 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 + 3wAAAP//AwDbpeeIdhgAAA== http_version: - recorded_at: Tue, 28 Jul 2015 20:51:15 GMT + recorded_at: Mon, 14 Sep 2015 16:43:48 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/voids_a_authorized_payment.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/voids_a_authorized_payment.yml new file mode 100644 index 00000000..29f3d8de --- /dev/null +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/voids_a_authorized_payment.yml @@ -0,0 +1,294 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + Card + Holder + meggie.jewess@marks.com + + Card Holder + + 10 Lovely Street + Northwest + Herndon + AL + US + 35005 + + fake-paypal-future-nonce + + true + + + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.48.1 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Mon, 14 Sep 2015 16:43:55 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"bffd4711212ce4adc2dcc4a98446aa28"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 19f7b47054ab58ef8cb06a3d387c99db + X-Runtime: + - '0.216714' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAEv59lUAA6RTy27bMBC85ysE3Slajp3UBiUHKFD0A9JLL8FKXMuM+VBJ + KpLy9aUkPxKrlyLHnZnl7s5y2a5TMnpD64TRWZwmizhCXRoudJXFv55/kG/x + Lr9jZeO8UWjzuyhigufperHcbB7uGQ3BgAWuPID2JMTvhV737382/rFVbbda + MvqRHdR7YZ0nGhTm38FyRj8AAy/hHP00kqNl9IoMfGlUDbqPtJBZ7G2DMR1x + VCBkrrCqBCav2KJzTwrs0SUhg9GJHoT1wWicpe+hm2EtFk74uba0CB45AR/5 + vsYs5iH0QmGcLxfpmiw2JF09pw/b1f12vf7N6DVhzG9q/n/514Sp/rgRshco + ubu0xIUnZXDUnR4Fa6E/dVxDX4MkUJam0f6zYhDMJBMYYG+OqPPj0j52LaNT + dOYmT19BY8INPmEHqpZ44/eo5LiHRp7HLYyRCDrOB08ZPZEXsVBQIWmszA/e + 125LKTiH3iWFBaG9RayCGy30QyUa+lao/YtCfzD8RZrK0GmWpNbVDvWbsEYP + ksyB5oXpwse9VDjX/OJKxze+uNbxDdcUrrSi9uEm/7HIUVMIKcONEqiCFcNg + 4bRu/2iQ0flGbzE3gsC5DdeCs3physvt/wUAAP//AwAXUsgOLgQAAA== + http_version: + recorded_at: Mon, 14 Sep 2015 16:43:55 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + body: + encoding: UTF-8 + string: | + + + + + 50.00 + Solidus + k2r7xw + + + + paypal + + + sale + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.48.1 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Mon, 14 Sep 2015 16:43:56 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"74c4d2bb443ca49bd7f9d70ed6369984"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - d47c957cadebeb1d15d4d626f8f62742 + X-Runtime: + - '0.324912' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + iwMVAAA= + http_version: + recorded_at: Mon, 14 Sep 2015 16:43:56 GMT +- request: + method: put + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/cgx9gt/void + body: + encoding: UTF-8 + string: '' + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.48.1 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 200 + message: OK + headers: + Date: + - Mon, 14 Sep 2015 16:43:57 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Authentication: + - basic_auth + Strict-Transport-Security: + - max-age=31536000 + - max-age=31536000; includeSubDomains + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge,chrome=1 + Etag: + - '"1fa071798186db07ff3b2012e818c8c0"' + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 2519241026fae42f94ccc266e655e7fb + X-Runtime: + - '0.211915' + X-Frame-Options: + - SAMEORIGIN + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + D2kPg+aw9Jpv9OZvAAAA//8DAFkn+yD3FQAA + http_version: + recorded_at: Mon, 14 Sep 2015 16:43:56 GMT +recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/Previously_consumed_nonce/should_raise_exception.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/Previously_consumed_nonce/should_raise_exception.yml index a3a168f3..afb12e82 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/Previously_consumed_nonce/should_raise_exception.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/Previously_consumed_nonce/should_raise_exception.yml @@ -10,7 +10,7 @@ http_interactions: Card Holder - shaniya_quitzon@jacobs.us + johnathan_halvorson@prohaskamaggio.us Card Holder @@ -33,7 +33,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -44,13 +44,22 @@ http_interactions: message: Unprocessable Entity headers: Date: - - Tue, 28 Jul 2015 20:51:09 GMT + - Mon, 14 Sep 2015 16:43:42 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked Connection: - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff + X-Ua-Compatible: + - chrome=1 X-Authentication: - basic_auth Strict-Transport-Security: @@ -62,32 +71,28 @@ http_interactions: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Cache-Control: - no-cache X-Request-Id: - - d80da1450e7e7ae0c6651d3badd9fe8e + - 50ab942e-6dba-45f4-9b01-db0fb1c3fb56 X-Runtime: - - '0.067464' - X-Frame-Options: - - SAMEORIGIN + - '0.113054' body: encoding: ASCII-8BIT string: !binary |- - H4sIAD3rt1UAA9xVTY/TMBC991dYubtpqVYLkpsFIaE9rLgse67ceNoaHDuM - nbLh1zNJk9RN22UFnLjZ782XX2Ym4u65MGwP6LWzy2Q+nSUMbO6Utttl8vTl - E3+b3GUTIUvNAdEhR/Clsx6yCWOihXxzHC4s1CUsE4ko6yTtqLzywRWAh+uL - tkSWsi7ABl5A2DnVw5e9jmzPx0iT2inI3i3ms1uRtudTWoaAel0F6KL6ulg7 - k2RdDatDDSvrbA4iHaxHUQrwXm4h+yitdYFVHphkl0KwwiGl2knLmutUpL1r - /I509JAO8INC6WWJRI6gdOC5xH8j2/x2Mf9/ZCNkrY2h1uZSKWpkfy7DlZ5s - gl3xJX3GqhMUNXxcBvU2ysJfG4uNRh+4lUWjCSqRRkBvY2SP3DujAEV6RIbx - KqQ2mSe9dC1X3ysdfjr7/qvM3dpPK08VtQYvt01z3bUpjhWxPueYfJ3EPiBA - GKj5jD24PZiaPbaESEcGJ5/nOYBVoAbys8Ow+wGe3M642NG4XBod6uwe0Cpn - SbAeic0QtrQDsw8PIu2OMZu7ygaseTMLXJpyJ99kT4/NbJzjsV/pfJCmpbPF - zWx2Q7MbQb9vr7N9yNuJyDbyG1AM66sCOmy8FjrLYyBXBnrXqTq0+/WmPnz7 - gBUFiZGovjNnoWCvc+CeqiWGa8WsNsukiXIyORuUlaKaMKeGDFfsXjFGx9n5 - 880x+ZtdQ5vswn/wFwAAAP//AwCJ7vRuRAcAAA== + H4sIAD759lUAA9xVTW/bMAy951cIvjtOFhTdAMXdMGDoodil6zlgLCbWqg+D + krP630927ERxkrbYdtpNeo+kqCeS4ncvWrEdkpPWLJP5dJYwNIUV0myXydOP + b+nH5C6fcKhkikSWUkJXWeMwnzDGO8i1y8OG+abCZQJE0CRZTxW181Yj7bev + 2gaygkaj8alGX1oxwJe9juzAx0h7tBWYf1rMZ7c869anNHhPcl177KO6Rq+t + SvI+h9U+h5WxpkCeHaxHUTQ6B1vMv4Ix1rPaIQN2KQTTlsJRJRjWbqc8G1zj + e2Sji/SAOyiUXZaIF4RC+rQA+jeyzW8X8/9HtoCspVKhtFMQIhSyO5fhSk22 + wa74Bn3GqgcoKvg4jVDbBNpda4uNJOdTA7rVhATPImCwUTAg91YJJJ4dkUN7 + aZAq/2lLA61oqxLULmRgzeeKbAnuGTRst9JOaxey64xfL6F2W3bHHbNjw/lj + 8n1yO0+I/kDNZ+zB7lA17LEjeDYyOHmqF49GoDiQ3y358he64HbGxY7KFqCk + b/J7JCOsCeINSGxGGMQx+ZcHnvXLmC1sbTw1adsXKaiqhA/502PbJ+d47FdZ + 50F1dL64mc1uQh9H0NuldjYb06478g08Y4hhXK2xx8Yjorc8BrKVD/c6VSf8 + A3LT7N/eUx2CxEiU35kzF7iTBaYuZBuYVApmpFombZSTLtoQ1CLkREWoS3/F + 7h0tdeyjP58ik7+ZO2GqXfgTfwMAAP//AwBqsz9rUAcAAA== http_version: - recorded_at: Tue, 28 Jul 2015 20:51:11 GMT + recorded_at: Mon, 14 Sep 2015 16:43:42 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_user_with_an_invalid_email/fails.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_user_with_an_invalid_email/fails.yml index 71e13042..ff7aab61 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_user_with_an_invalid_email/fails.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_user_with_an_invalid_email/fails.yml @@ -33,7 +33,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -44,7 +44,7 @@ http_interactions: message: Unprocessable Entity headers: Date: - - Tue, 28 Jul 2015 20:50:44 GMT + - Mon, 14 Sep 2015 16:43:22 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -67,15 +67,15 @@ http_interactions: Cache-Control: - no-cache X-Request-Id: - - afc56437112eb4fd6ccb136fd0de1915 + - 90dba0b3bba5f345d64333950a864d2e X-Runtime: - - '0.095276' + - '0.140704' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIACTrt1UAA5RUTW/bMAy991cIvitOtnXoQVE3DBt6KHbpeh4Ui06E6cOj + H4sIACr59lUAA5RUTW/bMAy991cIvitOtnXoQVE3DBt6KHbpeh4Ui06E6cOj 5Cz+96Pd+CtJ1+wmvkdSFKlHcX9wlu0Bowl+na0Wy4yBL4I2frvOnn9843fZ vbwRqjIcEANyhFgFH0HeMCY6KLbHwWCpqWCdKUTVZPmRKuqYggN8MS/79lzP jnabIGiQd6uPyw8i785TUqWEZlMnOOaLjdsEm0lwyliRD/QsyEGMagvya+vE @@ -88,5 +88,5 @@ http_interactions: LKFK9Kh5a2ilmbJ5GXzCmpJMkUlxZ8FCw94UwCOVSgynfeCNXWdtlplaSlS1 ppqw2Ckq7rLfFdIZ9fKfS4lW24W1/BcAAP//AwDqfmK70wUAAA== http_version: - recorded_at: Tue, 28 Jul 2015 20:50:46 GMT + recorded_at: Mon, 14 Sep 2015 16:43:21 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/amex/should_have_the_correct_attributes.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/amex/should_have_the_correct_attributes.yml index a9934d92..40ea0d66 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/amex/should_have_the_correct_attributes.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/amex/should_have_the_correct_attributes.yml @@ -10,7 +10,7 @@ http_interactions: Card Holder - elaina.johns@weissnatweimann.com + stella@durgan.com Card Holder @@ -33,7 +33,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.47.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -44,7 +44,7 @@ http_interactions: message: Created headers: Date: - - Tue, 08 Sep 2015 18:11:36 GMT + - Mon, 14 Sep 2015 16:43:25 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -65,49 +65,48 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"e573d53d9adaa61007e93e2cec2a65b1"' + - '"1f3b77fd6907149073d92a2ce68819d0"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - ac3ff63db81ad9c270f37f236871a770 + - 76051b680b119a905c68af5572209374 X-Runtime: - - '0.891707' + - '0.964755' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIANgk71UAA7RYS3PbNhC++1dodKdJUZYtZ2i6nk47PiS9JGmnvWQgcmUh - IgEGAPXwr88CJEhQlGRJTi9xsPstuNznJ0aPmzwbrEBIytnDcHQdDAfAEp5S - 9vIw/PrlT286fIyvoqSUiucg4qvBIKJpPB2NR+H9/Tjy8aBlqEsWhCkPz68z - Ntm+/rhXd+t8vbkJI9/VavScCqk8RnKIfycijXxHoPUZsadnnqUgIr+VaH3C - 84Kw7YDR7GGoRAlD38ghJzSLISOUkevvfMHkb2ugUjKi8G9OGLtG08ivcNqi - WHAGvXvmZNOTrWEmqepjEwFEQeoRNVDbAh6GKR4VzWEYh8Fo4gX3XjD9Mpp+ - GI0+jCf/RX5rYOzLIj3d/hbtW4Pq+SY13pxClsrGpZQqL8HQyvpSIgTZDrW2 - q68kKJvRLMOkeyRNBUhp5VW6V7c20bXM1oPXqQVX2mLb3O7GrgY0uT2gP5Dt - WiuVAFCN36Ng8JGvINsOPhtF5O8AWkvYKGCpjmSt+osLtViDRKOeznGXJySj - ahs/g2ApZ1icVtKCBLxgR8VPHyO//m+rK7hUJPOwyyAeT4JgEvmuyH3xkimx - NWKPZMWChPHXzxjnPfJjVmO0etpnNj5kxkpMI03i6U2wY2c1fUPTnV8Z9kiK - sccSlQM+HzwZOGlvsU1srd/XPvUtZzXRpNdE5g7/QAtga7B4fDcNp6HGNJmM - dP94+nFx/ZJs8Mem0KboZaNz0QszzdrBN7DjbVfZGPFcz05KMozskvE104Fs - ZC2sii2fezjtSsIScPF9ZWN4TvRv90b/9FnQInXDKN0Uppp7UotPYUZV+yLV - sVXOSZlZv2ecZ0DYMNbzQUONsgWXAjPnYSuWmfbfuXRXY01gU1Bh/PFyztQi - HoV6LOwI96C3QARGLww6cCPtoLFNdnyfk0xCbeV4sgCSqQWWiJNUR2ZhuN9e - wCtFFi+UKuQH3ydSgpLXM4H7UA/BF3zBNdnqHegXZJsDU99yUAuefsv4C/dJ - XcbfoCrj64K9PAJbUcGZBj9IwtIZ3+AyaJ7VPB1LSzfPjLBl62ZHaqFm3t/E - gZl89cHq0C3BM6faraABCCgIdRJoBRYgy5lMBC101Lvbr9kakeJLYPFNOF0u - kQ1UJ6srGf1Rmjk3M9WL701xuYoY7tJ0NroJg/GMpOQ+SEfjEPCfeXgX3CS3 - WB0HTZu737frzR0rYDn3ZLo8UD2N3rEQ6EbVW/v4QA/Uis1+JaqUcaWHVO9T - I3AxyWqFHSQLvB+qJfYJ+7ondE3ISnogBBddzP4lX+OdLdl/3HHA7lVdUrD/ - tqMY98K6rxDxHRLT7TglJWcHX6bhwyQx01kPSYmFDA5VdlSuaSF4gt7sxg15 - TxDoZtivfeMGhXQnfipQs9IZPoRwb0G3Jq/h7WbbZYYtk3RlJ7BAA3qDCVa1 - dowN1hV7ISM01pexwsr9E5ihAR5hh1WKTmSIdUDewb8c3tPt6P5PhFpzZHY2 - BbCXL7k53j/97bPP4VVN1s7Y1n2bt3e29e08CuO80bncrzb9H9eRLbY3NmoN - O42F1OBjzM1CzqZkNpgncWL7cm/wiRp2OntpnLiMcTcx52mZmOHuhL2Rddrz - QCv+ml9Ov4aUmHsElUsPNWQ3tmk8vv37U/Dp3+d/7p7Hu/vCVEtCpRmI1QrS - BVNLOpHY8wTNd/rEpSutx3Qvkh2BAUX1XIe9n012fxf2Poyc8VPo+Do8vgiP - rcBLl99Fa++EhXd41Z245C75CHLRJ5ALP4C8Z/3+ihZ+/6cPJLttWpsD4LEt - 3fjqJwAAAP//AwDNktg3KhYAAA== + H4sIAC359lUAA7RY227bOBB971cYflckX9I4gaJusBcUi+4CRdtd7L4UlDS2 + 2UikSlKO3a/fISVKlGQ7tpN9CcKZM9RorkcO323zbLQBISln9+PJVTAeAUt4 + Stnqfvzl82/eYvwuehMmpVQ8BxG9GY1CmkbTxWSyuJ1MQh8PWoa6ZE2Y8vD8 + I2bXux/fb9XNU/60nU9D39Vq9JIKqTxGcoh+JiINfUeg9Rmxp/c8S0GEfivR + +oTnBWG7EaPZ/ViJEsa+kUNOaBZJBVlGfkpLsSLsCrGhXyk0pFhzBgPDJdkO + ZE8QS6qG2EQAUZB6RI3UroD7cYpHRXMYR9Ngcu0Ft95k/nny9m4+u5te/xv6 + rYGxL4v0PPvWoHq+yYW3pJClsnEppcpLMJayvpQIQXZjre3qKwnKYpplmGWP + pKkAKa28yu+isJmtZbYAvE7yXWmLbZPZj10NaJJ5QH8gvbVWKgGgGr8nwegD + 30C2G30yitDvAVpL2CpgqY5krfqTC7V+AolGA53jLk9IRtUueg+CpZxhNVpJ + CxKwwhaKHj6Efv1vqyu4VCTzsK0gml0HwXXouyL3xUumxM6IPZIVazKNvnzC + OO+RH7OaodXDPrPZITNWYhppEi3mQc/OaoaGph2/MOyRFGOPJSpHfDl6MHDS + 3mK71lq/rH3qW17YROYO/0ALYGuwaHazmC6mGtNkMtT94+nHRfVLstGv20Kb + opeNzkWvzfhqJ93IzrO+sjHiuR6WlGQY2UfGn5gOZCNrYVVs+dKjUpaEJeDi + h8rG8OXRP30WtEjdMEo3hanmgdTiU4ipal+kOrbKJSkz63fMeQaEjSM9HzTU + KFtwKTBzHrZimWn/nUv7GmsC24IK44+Xc6bW0WSqx0JPuAe9AyIwetOgAzfS + DhrbpOf7kmQSaivHkzWQTK2xRJykOjILozlZgVeKLForVcg73ydSgpJXsSCU + 6SG4whd8Iju9A/2C7HJg6msOas3TrxlfcZ/UZfwVqjK+KtjqHbANFZxp8L0k + LI35FpdB86zm6Vhaunliwh5bNztSCzXzfh4FZvLVB6tDtwTPnGq3ggYgoCDU + SaAVWIAsY5kIWuiod7dfszVCxR+BRbe7ze06Dv3qZHUlo99LM+diU7343hSX + q4jgJk3jyXwazGKSktsgncymgH+W05tgnrzF6jho2tz9CmNqAyznnkwfD1RP + o3csBLpR9dY+PjAAtWKzX4kqZVTpIdX71AhcTLLZYAfJAu+Haon9gX09ELom + ZCM9EIKLLmb/kq/xzpYcPu44oH9VlxTsv+0oxr2w7itEfIPEdDtOScnZwZdp + CDBJzHTWQ1JiIYPDjR2Va1oInqA3/bgh7wkC3Qz7tc/coJDuRA8FajY6w4cQ + 7i3o1iyOvz32mGHLJF3ZCSzQgJ5hglWtHWODdcVeyAiN9WWssHL/BGZogEfY + YZWiExliHZAX8C+H93Q7eviJUGuOzM6mAPbyJTfH+6e/ffY5vKrJ2hnbemjz + /M62vp1HYZw3Opf71ab/4zqyxfbMRq1hp7GQGnyMuVnI2ZTMBvMkTmxf7hk+ + UcNOZy+NE5cx7ibmPC0TM9ydsDeyTnseaMXX+XJ6HVJi7hFUPnqoIf3Y4qZ4 + i+3++98ff/nnr4/9fWGqJaHSDMRqBemCqSWdSOx5guY7Q+LSldZjehDJjsCA + wnquw96fTfrfhYMfRs74FDq+Do8vwmMr8NLld9HaO2HhHV51Jy65S34Euegn + kAt/AHnJ+n2Vz+8Xty+S3TatzQHw2JZu9OY/AAAA//8DABQahqAbFgAA http_version: - recorded_at: Tue, 08 Sep 2015 18:11:40 GMT + recorded_at: Mon, 14 Sep 2015 16:43:25 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/decline/fails.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/decline/fails.yml index 92440540..26186702 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/decline/fails.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/decline/fails.yml @@ -10,7 +10,7 @@ http_interactions: Card Holder - jude_brekke@bradtkekshlerin.co.uk + zander.stroman@hagenes.com Card Holder @@ -33,7 +33,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -44,7 +44,7 @@ http_interactions: message: Created headers: Date: - - Tue, 28 Jul 2015 20:50:55 GMT + - Mon, 14 Sep 2015 16:43:32 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -65,51 +65,50 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"c225bcb8cbe400ddc3847ca05754a39b"' + - '"317ba42f1ad8b879a0eed4a1571cb0e0"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 0c6fb0c7d05ec71412a5c02bf46935f8 + - 0ec1c62cc7f3b0a9949af2842daaa945 X-Runtime: - - '2.729469' + - '1.285652' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAC/rt1UAA7RYW4/aOhB+769AvGcTboWtsulZHemoDz3VkXqT+lI58QAu - iZ3aDgv99R07N4cAC2yPtCvhmW+c8XguXxK+3WXpYAtSMcEfhqO7YDgAngjK - +Oph+PnTP95i+DZ6FSaF0iIDGb0aDEJGo/Fsfn8/m70OfVwYGeqSNeHaw/Wv - mM/2v37e6/lT9rSbjkPf1Rr0kkmlPU4yiP4mkoa+IzD6lNSrdyKlIEO/lRh9 - IrKc8P2As/RhqGUBQ9/KISMsjX4UFL7HEjYb+CuWhOoNbNQ6Bcn4XSLuik3o - l0Bjkq8Fh95GS7LryZ4gVkz3sYkEooF6RA/0PoeHIcWlZhkMo3EwmnnB3Bsv - Po2DNzP8m30L/dbA2hc5vc6+NSifb+/GWzJIqWpcokx7CcZWVZsSKcl+aLRd - fSlBWczSFG/dI5RKUKqWl/edb+qbrmR1QnidZHClLba93MPYVYDmck/oT1x3 - pVVaAujG71EweC+2kO4HH60i9A8ArSXsNHBqIlmpPgip10+g0Kinc9wVCUmZ - 3kfvQHIqOGZnLWlBElZYUtHj+9Cvfra6XChNUg/LDKLJLAhmoe+K3IMXXMu9 - FXskzddkHH3+iHE+Ij9nNUGrx2Nmk1NmvMBrZEm0mAYHdrWmb2jL8zPHGqEY - e0xRNRDLwaOFk3aXuopr65eVT7XLC4vI7uGfKAEsDR5Ng9F4sTCY5iZDUz+e - eVz0hSlzwmbtIta2hbXdblD3tENlYyQy0zAZSTGaGy6euAleI2thZTzF0mNK - FYQn0L1mV9EYvTzal9d+izQFok0R2OztSWs8hZjp9tDlslUuSZHWfsdCpED4 - MDL9wECtsgUXEm/Kw9IrUuO/s+mhpjaBXc6k9cfLBNfraDQ2beBAeAS9ByIx - euOgA7fSDhrL4sD3JUkVVFaOJ2sgqV5jekDrtiOrYSwjK/AKmUZrrXP1xveJ - UqDVHQ49xk3TW+EBn8gep17m52SfAdffM9BrQb+nYiX8LabtXc5Xb4FvmRTc - AB4U4TQWO2z4zf7NEzGdTIHEhG9a1zrSGmp7+jQaLRajanpPGx26IkXqZHct - aAAScoJ59EGgrvpd61QRq0Sy3AS5O9yaoRBqsQEs2fs5pavQL1e1ruDsZ2Hb - WGyTFY/McHbKaEon01kyh2k8Gs3HE0LHsFzOYjoncTDCf+wZp0ybvf9AF9oC - z4Sn6OZEsjR6x0KiG2UpHRv3PVArtuOT6EJFpR6oGZdW4GKS7RYLRuW4P5Qz - 6l8s457QNSFb5YGUQnYxx2d4hXeGYP9x5wGHW3Vn/vHdzmLcDasyQsQPSGxx - Y1NUgp88TMN3SWKbsemJChMZHCrsqFzTXIoEvTmMG9KaIDDFcFz7zA4a2Uz0 - mKNma274FMLdBd2KJ9nu9aJL/Fqi6MouIHkW9AzRK3PtHNmrMvZGwmetbyN9 - pfsXED8LPEP+yiu6kABWAXkBvXJoTbei+28AleZM72wS4Cgdcu/4eOOvn/0c - bWpu6oqB3Ld5fizX/lzHUpxTXEvtKtP/cQTVCXZ6gFaIyzhGBT7Hy2rI1YSr - juNFbLc+1zPMoYJdzlMaJ67n0k2oBS0S28dbr1pZpxJPVN11rHx84h3oz/AP - u49kauOhhhzGlUaTb/OvwfTrx9f/fflyOBpspiRM2d5XThuTLJWkE4kjTzDU - ps9RutKqI/ci2RFYUFi1cDj6AeTwDa/3ieOKl5zzk+/8zDs37W6dczdNuAtm - 2+mpduE8u+Vzxk0fM278lPGSSftHXqxfXL7Ia9trbRaAyzZ1o1e/AQAA//8D - AHYdQ3v1FQAA + H4sIADT59lUAA7RYS2/bOBC+91cYviuybLlJA0XZoMCih26xQJMFtpeCEscx + NxKpkpRj59d3SL0oy3ZsJ3tIYM58MxrOW4pu13k2WoFUTPCbcXAxGY+Ap4Iy + /ngzfrj/07sa38YforRUWuQg4w+jUcRoPA+DaYj/Ih8Phoa8dEm49vD8kvD5 + 5uXXJ335nD+vw2nku1yDXjCptMdJDvFnImnkOwTDz0hz+iIyCjLyO4rhpyIv + CN+MOMtuxlqWMPYtHXLCsviFcJS5UFqKnPA/luQROKgLFIr8CmGwxVJwGGhY + kPWA9gyJYnqITSUQDdQjeqQ3BdyMKR41y2EcTyfB3Jt88oLwPvh4Hc6uZ9Mf + kd8JWPmyoKfJdwLV821QvAWDjKrWJMq0l6JTVa2USEk2Y8Pt8ysK0hKWZRhu + j1AqQamGXgVaySbENa3JBK+XBS61w3ZR3fZdDWijuoe/J841FwMMoFu7g8no + q1hBthl9t4zI3wJ0krDWgDlCW9Y3IfXyGRQKDXiOuSIlGdOb+AtITgXHtGwo + HUjCI9ZSfPc18uufHa8QSpPMw/qCeDafTOaR75Lci5dcy40leyQrlmQaP3xH + P++gH5KaodTdLrHZPjFeYhhZGl+Fky25hjMUtHX5wLFGKPoeU1SNxGJ0Z+Gk + 09KUbyP9tvKptbyxiKwOf08JYGnwOJwE06srg2kjGZn68czj4n+YMjdszy5i + aXtX1+ZGTTPbZrZCIjedkpEMvfnExTM3zmtpHazyp1h4TKmS8BT6YXYZrdDb + vX187XdIUyDaFIHN3gG1wVNImO4uXR075oKUWWN3IkQGhI9j0w8M1DI7cCkx + Uh6WXpkZ+x2l25xGBNYFk9YeLxdcL+NgatrAFnEHegNEovemkx7cUntoLIst + 2xckU1BLOZYsgWR6iekBndkOrYGxHEeaV8osXmpdqGvfJ0qBVheJJIybpveI + F3wmGzPz/IJscuD6Zw56KejPTDwKf4Vpe1Hwx1vgKyYFN4AbhXMzEWts+K3+ + 9omYTqZAEsKfOtN61AZqe3oYB1dXQT22w5aHpkiROdndEFqAhIJgHn0TyKt/ + NzxVJiqVrDBO7g+3dihEWjwBjylfT+c47KtTwys5+1XaNpbYZMUrM5ydMg7p + LJynlxAmQXA5nRE6hcVintBLkkwC/MOesU+01f0OXWgFPBeeok97kqXlOxIS + zahKade4H4A6sh2fRJcqrvhAzbi0BBeTrlZYMKpA/VDNqL+wjAdEV4SslAdS + CtnH7J7hNd4ZgsPHHQZsq+rP/N3aDmJchXUZIeI/SG1xY1NUgu+9TLvoktQ2 + Y9MTFSYyODuww3JFCylStGbbb7jWTCamGHZzX9GgcZuJ7wrkrEyE9yFcLWgW + feKzNe0vft2i6NKOWPIs6JVFr8q1Q8tenbFnLnxW+rylrzL/iMXPAg8sf1WI + jlwAa4e8Yb1y1pp+RQ/fAGrOgd7ZJsDOdciN8e7G3zz7tbWpjdQJA3ko8/pY + buw5bUtxbnHqaleL/o8jqEmw/QO0Rhy3Y9TgQ3tZAzl54Wr8eNS229zrlc2h + hh2/p7RGnL5Lt64WtExtH++s6mi9StxTdadt5cGed6D32T+sHsnUk4ccsu1X + Gs8+4iC6/xFOP//97/ZosJmSMmV7XzVtTLLUlJ4ndjzBrDbDHaVPrTvywJM9 + ggVFdQuHnR9Att/wBp84TnjJOTz5Ds+8Q9Pu3Dl31oQ7Yrbtn2pHzrNzPmec + 9THjzE8Zb5m07/Ji/ebyxb22C2t7ADx2qRt/+A0AAP//AwDuMKOU7hUAAA== http_version: - recorded_at: Tue, 28 Jul 2015 20:50:57 GMT + recorded_at: Mon, 14 Sep 2015 16:43:32 GMT - request: method: post uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions @@ -122,7 +121,7 @@ http_interactions: 2001.00 Solidus - 497ddg + dnx25m @@ -137,7 +136,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -148,7 +147,7 @@ http_interactions: message: Unprocessable Entity headers: Date: - - Tue, 28 Jul 2015 20:50:56 GMT + - Mon, 14 Sep 2015 16:43:33 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -171,51 +170,51 @@ http_interactions: Cache-Control: - no-cache X-Request-Id: - - d57e42c19374b43afd2269898b8ddcda + - da7c49cd42b8415840fa268697dfadb6 X-Runtime: - - '1.179163' + - '0.737194' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - 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 http_version: - recorded_at: Tue, 28 Jul 2015 20:50:58 GMT + recorded_at: Mon, 14 Sep 2015 16:43:33 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/should_have_the_correct_attributes.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/should_have_the_correct_attributes.yml deleted file mode 100644 index 54698f2d..00000000 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/should_have_the_correct_attributes.yml +++ /dev/null @@ -1,113 +0,0 @@ ---- -http_interactions: -- request: - method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers - body: - encoding: UTF-8 - string: | - - - Card - Holder - brianne@jaskolski.info - - Card Holder - - 10 Lovely Street - Northwest - Herndon - AL - US - 35005 - - fake-valid-nonce - - true - - - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Tue, 28 Jul 2015 20:50:47 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - '"cff443a95121b9ebc373b9f18dccd7f6"' - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - f4a371f4612583b90d7ec7a349d0227e - X-Runtime: - - '2.046298' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - H4sIACfrt1UAA7RYS5PTOBC+8ytSuXvsvEiG8pidomqXA8sFWLa4ULLVmYjY - kpHkPPj125Jfcpxkkgx7SFXU/bXcavXjs8O3uywdbEAqJvjDcHQXDAfAE0EZ - f3oYfvn8p7cYvo1ehUmhtMhARq8Gg5DRaPY6WMyCyST0cWFkqEtWhGsP179i - Ptv/+nmv59tsu5uOQ9/VGvSSSaU9TjKI3hFJQ98RGH1K6tV7kVKQod9KjD4R - WU74fsBZ+jDUsoChb+WQEZZGsWSEc/jjB1Frkao1u2N8KUK/1BpcvhIcetZL - suvJthArpvvYRALRQD2iB3qfw8OQ4lKzDIbROBjNvGDujRefx8GbWfBm+vpb - 6LcG1r7I6XX2rUH5fHsh3pJBSlXjEmXaSzCgqtqUSEn2Q6Pt6ksJymKWpnjV - HqFUglK1vLzkxby+3kpWZ4HXyQBX2mLbGz2MXQVobvSE/sQdV1qlJYBu/B4F - gw9iA+l+8MkqQv8A0FrCTgOnJpKV6qOQerUFhUY9neOuSEjK9D56D5JTwTEl - a0kLkvCEdRQ9fgj96m+ry4XSJPWwtiCazIJgFvquyD14wbXcW7FH0nxFxtGX - TxjnI/JzVhO0ejxmNjllxgu8RpZEi2lwYFdr+oa2Jr9wrBGKsccUVQOxHDxa - OGl3qUu3tn5Z+VS7vLCI7B7+iRLA0uDRNBiNFwuDaW4yNPXjmcdF/zBlTtis - XcTK9q22xQ3qRnaobIxEZrokIylGc83FlpvgNbIWVsZTLD2mVEF4At1rdhWN - 0cujfXntt0hTINoUgc3enrTGU4iZbg9dLlvlkhRp7XcsRAqEDyPTDwzUKltw - IfGmPCy9IjX+O5seamoT2OVMWn+8THC9ikZj0wYOhEfQeyASozcOOnAr7aCx - LA58X5JUQWXleLICkuoVpge0bjuyGsYy8gReIdNopXWu3vg+UQq0uoslYdw0 - vSc84Jbs7zB7/JzsM+D6ewZ6Jej3VDwJf4Npe5fzp7fAN0wKbgAPinAaix02 - /Gb/5omYTqZAYsLXrWsdaQ21PX0ajRaLUTWyp40OXZEidbK7FjQACTnBPPqI - o7r+X+tUEatEstwEuTvcmqEQarEGHiXrHf2ZhX65qnUFZz8L28Zim6x4ZIaz - U0ZTOpnOkjlM49FoPp4QOoblchbTOYmDEf6wZ5wybfb+DV1oAzwTnqLrE8nS - 6B0LiW6UpXRs3PdArdiOT6ILFZV6oGZcWoGLSTYbLBiV4/5Qzqi/sYx7QteE - bJQHUgrZxRyf4RXeGYL9x50HHG7VnfnHdzuLcTesyggRPyCxxY1NUQl+8jAN - ySWJbcamJypMZHD4r6NyTXMpEvTmMG5Ia4LAFMNx7TM7aGQz0WOOmo254VMI - dxd0a76dx/fTLvFriaIru4DkWdAzRK/MtXNkr8rYGwmftb6N9JXuX0D8LPAM - +Suv6EICWAXkBfTKoTXdiu6/AVSaM72zSYCjdMi94+ONv372c7SpuakrBnLf - 5vmxXPtzHUtxTnEttatM/8cRVCfY6QFaIS7jGBX4HC+rIVcTrjqOF7Hd+lzP - MIcKdjlPaZy4nks3oRa0SGwfb71qZZ1KPFF117Hy2Yl3oN/DP+w+kqm1hxpy - GFcaTb7NvwbvRl//fffX/eFosJmSMGV7XzltTLJUkk4kjjzBUJs+R+lKq47c - i2RHYEFh1cLh6AeQwze83ieOK15yzk++8zPv3LS7dc7dNOEumG2np9qF8+yW - zxk3fcy48VPGSybtb3mxfnH5Iq9tr7VZAC7b1I1e/QcAAP//AwCFwPeP6hUA - AA== - http_version: - recorded_at: Tue, 28 Jul 2015 20:50:49 GMT -recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/successful/succeeds.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/successful/succeeds.yml index de040654..847dda7c 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/successful/succeeds.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/successful/succeeds.yml @@ -10,7 +10,7 @@ http_interactions: Card Holder - kane_spencer@morissettenienow.info + angel@thiel.com Card Holder @@ -33,7 +33,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -44,7 +44,7 @@ http_interactions: message: Created headers: Date: - - Tue, 28 Jul 2015 20:50:49 GMT + - Mon, 14 Sep 2015 16:43:27 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -65,51 +65,50 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"fd9a942ac92027a8e7cb16dd0602c4c7"' + - '"556e2043a1b98bfa7161f66f718d5411"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 7ded0a617301ac38274664219259df6a + - 9c8530c614bc11a08591d8974fb585d1 X-Runtime: - - '1.775046' + - '0.812977' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIACnrt1UAA7RYS5PaOBC+51dQ3D02BgKkPM7Opmo3hySXZHarcknJdgPa - sSWPJDNDfn1a8ku2gQEme6AKdX/dbvXbDt4/Z+loB0JSzm7HkxtvPAIW84Sy - ze34/ttfznL8PnwTxIVUPAMRvhmNApqEvr9a+W9X08DFg6YhL94Sphw8/4zY - fP/zcaUWT9nT88wPXJur0WsqpHIYySD8QEQSuBZB81NSnz7yNAERuC1F82Oe - 5YTtR4ymt2MlChi7hg4ZoWn4QBj8kDneA8QfGRdUSlAKGAXGn24oW/PALZFa - Jt9yBgNNa/I8oD1BJKkaYmMBREHiEDVS+xxuxwkeFc1gHPreZO54C8dffvO9 - d3Pv3Wz1PXBbASNf5Mll8q1A+XwTHGdNIU1kY1JClROjc2WllAhB9mPN7fJL - CtIimqYYdockiQApa3oZ8MWsDnVFqzPC6WSDTW2xbXT7vqsATXSP8I/Eu+JK - JQBUY/fEG33iO0j3o6+GEbg9QCsJz5gWifZkxfrChdo+gUShAc8yl8ckpWof - fgTBEs4wPWtKCxKwwZoK7z4FbvW35eVcKpI6WGcQTueeNw9cm2RfvGBK7A3Z - IWm+JX54/xX9fIB+SmqKUneHxKbHxFiBYaRxuJx5PbmaMxQ09XnPsEYS9D2m - qBzx9ejOwEmrpS7jWvp15VNpeWURGR3ukRLA0mDhzJv4y6XGNJEMdP04+nHh - P1TqGzZnG7E1Paxtd6O6qfWZjRDPdMekJEVvPmDTYtp5Da2Flf7kawdbXEGw - 33XDbDMaodd7+/zab5G6QJQuApO9A2qNTyCiqr10eWyZa1Kktd0R5ykQNg51 - P9BQw2zBhcBIOVh6Rartt5T2ObUIPOdUGHucjDO1DSe+bgM94gH0HohA7/le - B26oHTSWRc/2NUklVFKWJVsgqdpiekBrtkWrYTQjG3AKkYZbpXL5znWJHnXy - JhKEMt30NnjBJ7K/wexxc7LPgKkfGagtT36kfMPdHabtTc4274HtqOBMA24l - YUnEn7HhN/qbJ2I66QKJCHtoTetQa6jp6bNwslxOqvE9a3hoiuCpld01oQEI - yAnm0Rcc1fX/mieLSMaC5trJ3eHWDIVA8Qdg4YpFu0eMYXmqeQWjj4VpY5FJ - Vrwyxdkpwlkync3jBcyiyWThT0niw3o9j5IFibwJ/rBnHBNtdP+GLrQDlnFH - Jg9HkqXhWxICzShL6dC4H4BashmfRBUyLPmQ6HFpCDYm3u2wYGSO+qGcUZ+x - jAdEW4TspANCcNHFHJ7hFd4agsPHnQb0VXVn/mFtJzG2wqqMEPEfxKa4sSlK - zo5epll4SWyase6JEhMZrF3YYtmiueAxWtP3G641nqeL4TD3BQ0Kt5nwLkfO - Tkf4GMLWgmZtHldvd73Fr10UbdoZS54BvbDolbl2atmrMvbKhc9IX7f0leaf - sfgZ4InlrwzRmQtg5ZBXrFfWWtOt6OEbQMU50TubBDi4DtkxPtz462e/tDY1 - kbpgIA9lXh7LtT2XbSnWLS5d7SrR/3EE1Ql2fIBWiPN2jAp8ai+rIRcvXLUf - z9p263u9sDlUsPP3lMaIy3fpxtU8KWLTx1urWlqnEo9U3WVb+eLIO9Dv2T+M - HkHlg4Mc0vdrEk6/L/71/lxO//784Ut/NJhMiak0va+cNjpZKkrHEweeoFeb - 4Y7SpVYdeeDJDsGAgqqFw8EPIP03vMEnjgteck5PvtMz79S0u3bOXTXhzpht - x6famfPsms8ZV33MuPJTxmsm7W95sX51+eJe24a1OQAe29QN3/wCAAD//wMA - 7HNf1fYVAAA= + H4sIAC/59lUAA7RYWW/jNhB+z68w/K7IZ5wNFKVBgTZYbPdlN33oy4KSxhYb + idSSlI/99R1SFyXZjo80QABz5pvRcG7Je9qmyWANQlLOHofj29FwACzkEWWr + x+Hr9z+c++GTf+OFuVQ8BeHfDAYejfz5Hf5NZ1PPxYOmIS+MCVMOnn8FbL77 + 9fOTWmzSzXY28Vybq9FLKqRyGEnB/52IyHMtguYnpDq98CQC4bkNRfNDnmaE + 7QaMJo9DJXIYuoYOKaGJT9gKkt9UTCG5RaTnFmQNyGLOoCe2JNsebQOBpKqP + DQUQBZFD1EDtMngcRnhUNIWhPxmN587okzOefR/fPcymD5O7fzy3ETDyeRad + J98IFM83kXCWeLlI1iZFVDkhelKWSokQZDfU3Da/oCAtoEmCMXZIFAmQsqIX + 0V1vqriWtCr8Tiv0NrXBNqHs+q4E1KE8wD8Q3JIrlQBQtd3j0eALX0OyG3wz + DM/tABpJ2CpgkfZkyfrKhYo3IFGox7PM5SFJqNr5LyBYxBnmYkVpQAJWWED+ + 8xfPLX82vIxLRRIHiwr86Xw0mnuuTbIvnjMldobskCSLycR//YZ+3kM/JjVF + qed9YtNDYizHMNLQv5+NOnIVpy9oivGVYY1E6HtMUTngy8GzgZNGS1WzlfR1 + 5VNqubKIjA73QAlgaTB/NhpP7u81po6kp+vH0Y/z/6ZS37A+24jYNKymtw2q + DtZl1kI81e2RkgS9+cb4hmnn1bQGVviTLx0qZU5YCO0w24xa6Hpvn177DVIX + iNJFYLK3R63wEQRUNZcujg1zSfKksjvgPAHChr7uBxpqmA04FxgpB0svT7T9 + ltIupxKBbUaFscdJOVOxP57oNtAh7kHvgAj03mTUghtqC41l0bF9SRIJpZRl + SQwkUTGmBzRmW7QKRlOyAicXiR8rlckH1yVSgpK3gSCU6aa3wgtuyE7PPDcj + uxSY+pGCinn0I+Er7q4xbW8ztnoCtqaCMw14lIRFAd9iw6/110/EdNIFEhD2 + 1pjWolZQ09Nn/vj+flzO6lnNQ1MET6zsrgg1QEBGMI++cuSVvyuezAMZCppp + J7eHWz0UPMXfgPmTzS6cYJ0Vp4qXM/ozN20sMMmKV6Y4O4U/i6azebiAWTAe + LyZTEk1guZwH0YIEozH+Y884JFrr/oAutAaWckdGbweSpeZbEgLNKEpp37jv + gRqyGZ9E5dIv+BDpcWkINiZcr7FgZIb6oZhRf2EZ94i2CFlLB4Tgoo3ZP8NL + vDUE+487Duiqas/8/dqOYmyFZRkh4l8ITXFjU5ScHbxMvd2S0DRj3RMlJjJY + i6/FskUzwUO0pus3XGtGI10M+7nvaFC4zfjPGXLWOsKHELYWNGuxiNNUtRe/ + ZlG0aScseQb0zqJX5NqxZa/M2AsXPiN92dJXmH/C4meAR5a/IkQnLoClQ65Y + r6y1pl3R/TeAknOkd9YJsHcdsmO8v/FXz35vbaojdcZA7su8P5Yre87bUqxb + nLvalaL/4wiqEuzwAC0Rp+0YJfjYXlZBzl64Kj+etO1W93pncyhhp+8ptRHn + 79K1q3mUh6aPN1Y1tFYlHqi6j3kH+pj9w+gRVL45yCFdv0b+9A4H0Z+z+efP + 05fuaDCZElJpel8xbXSylJSWJ/Y8Qa82/R2lTS07cs+TLYIBeWULh70fQLpv + eL1PHGe85ByffMdn3rFpd+mcu2jCnTDbDk+1E+fZJZ8zLvqYceGnjGsm7Ye8 + WF9dvrjXNmGtD4DHJnX9m/8AAAD//wMAm3TB0eMVAAA= http_version: - recorded_at: Tue, 28 Jul 2015 20:50:51 GMT + recorded_at: Mon, 14 Sep 2015 16:43:26 GMT - request: method: post uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions @@ -122,7 +121,7 @@ http_interactions: 50.00 Solidus - 9nbvq2 + 2wyc2r @@ -137,7 +136,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -148,13 +147,22 @@ http_interactions: message: Created headers: Date: - - Tue, 28 Jul 2015 20:50:51 GMT + - Mon, 14 Sep 2015 16:43:29 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked Connection: - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff + X-Ua-Compatible: + - chrome=1 X-Authentication: - basic_auth Strict-Transport-Security: @@ -166,61 +174,57 @@ http_interactions: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"88a7059ee55d32fd8b18c50c88872eef"' + - '"1e1597288f83f6e3acb0862a501007d4"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - ad4b45d6b4e7bb3f2b54594615bd9971 + - c9abaed6-beea-40e8-bbf7-07aebc52b1f8 X-Runtime: - - '1.822217' - X-Frame-Options: - - SAMEORIGIN + - '2.213001' body: encoding: ASCII-8BIT string: !binary |- - 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 - AP//AwAXIF3+pBIAAA== + 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 + AwCSRrS/6BIAAA== http_version: - recorded_at: Tue, 28 Jul 2015 20:50:53 GMT + recorded_at: Mon, 14 Sep 2015 16:43:29 GMT - request: method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/3hd4gt/submit_for_settlement + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/jyg9qp/submit_for_settlement body: encoding: UTF-8 string: | @@ -234,7 +238,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -245,7 +249,7 @@ http_interactions: message: OK headers: Date: - - Tue, 28 Jul 2015 20:50:52 GMT + - Mon, 14 Sep 2015 16:43:30 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -266,54 +270,54 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"91caca85a12c410b3a3c1740a3110104"' + - '"22d5c42dc42872616376654a27ca47d2"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 8b2ac5431da26f2cfc74568cf4c5805d + - cb0033a72004cda9f3f764e654ff0a5d X-Runtime: - - '0.380162' + - '0.273001' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - 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 - vBMAAA== + H4sIADL59lUAA8xY227cNhB9z1cs9l2W9uY4gazUaFGkRRogSNIAeTEocXbF + WCIVklrv9us7FKnbinJcFAVqwMBq5nDEGc7lUPGbU1ksjiAVE/x2ubqKlgvg + maCMH26Xnz/9Gtws3yQvYi0JVyTTiEpeLBYxo8m38+HV9yoO8aeRKE10rRJV + pyXTGuj9Xsh7BVoXUALXcegABqvPFSSKFBCHzU8jy2op8c3ngCkR4AYg+fzx + lzicig2YlKLmOtlFV1EUh+7JKEqQWU64DkiWGWGAu1OVBHyTT2WWCElB4sOC + s+J2qWUNy9DuSAJBRwKiF2aXt0uKj5qVsEzW0WoXRK+C1fbT6vr1dvN6ffMV + 99otaNbXFX32+k2E6/sFLiJKC9y1ebAh313j32a7aYOO0j2TSgeclJD8TCSN + w4HAIgrSPr8VBboah73EIjJRVoSfLwOAGigJKxLCD1D8pHMGxRVi49CKLeQR + UsU0eBZXueA++Z6cJrEOh87GKSsKTMDe8eOj12WP8c43j27eT6UxRTAzKJWg + VLKKFu/EEYrz4mOjMMk7ArjonDRwag7Mid8LqfNHULhgonPbExkpmD4nb0Fy + KjgeRiuxAAkHU2N37+LQ/XTBFFg/ha2AzS6KdnE4FLUOYl7Lsz3bzxyPhaIH + mFNqIfaLOwwvywjGeggbrzTGAlJUOVlj/fXQoXxuxQZX3PmWbHxLeN1sJ7nZ + RhdrWk2TF4NUwNjsa059pdpplCs1IiU5j5R4FIMm5jPSN6sLpM8oqXUuJPvr + H5lNic5yLyZnVTXMeF/Z/Ndp76v/iyz2vdnlr0dlE9jXGfrM9e63T88n1IOU + fBZq8yOUy7tpbxqejuvKwR6bIVUuF44qACmFDDBGleAKvK41uIHrY3TyBw6y + JwGtifGp+a08iWncOB4vpL9hGU6EBnrABvJIzqj5BjbLcc6p6cHGlRQZvg3j + 0FYHaeCNpffbD1/e/o5d6ynQ2Mp4K6vIzPo57cxKjRmc3FWoOQL1rm4QTWgp + ZWYnGPwpbOLrUbDMHNAeDx5XYO6kIKcRqQ3nwLdYkjGD0uQUWA7jVcEJyqrl + EKkQBRC+TPakUIY/dYCWs6AXQYZUwKW4Fg/Ak/XjOVvj6LdPVpMynmyj1frm + xrRZPuwk22R1c7NyTGHbFgsaDRq+9idTZox0z22zqJi0h1kKrvNktTZz8EI4 + wZ6BSCRE62gEbqTuvY4aBKbVNAy0mUwTab/LvCE6PStatMznUunabUkOENSy + SHKtK/U6DInCrq2uUkkYN5XkSsCwn7AiZ9PM70vA9KX3hTiI8IgBuar44Q3w + I5OCG8CtIpym4oTMpbPv2p+EiiCdeS9MRtrfVpMDKXSOuzTj+4GLRyQIA5kF + UUiZ7vX20alqiSeJaXmoC0MlB6hLTTcbDC9mpOihA5nbLzlLUQwQrcCFT6ka + uyNON/7QY0bScbcV+8BoCc9gTBmGijZUgtZZw9X7t/cyC6o5+16Dqy4UY/AZ + 9meZbOlmu8tewjZdrV6uN4SuYb/fpfQlSaMV/iPlnltqLR+BlyJQ9GGm+jq9 + I7Hj6nN3oiBnmKryPGIR3QRuEICG3BmaksU7AirK6hn3jld4b+jwnQV31+pJ + yvD61SDmblA2oAojQEvD+3GU2OtTI+t2OKA8SmCTg4RUDHcylVs/w6mj/9r3 + 5s406/tzLqL/i0h0EpcmdnAUxE8m61RlklWzZHOg79p8w6CDCsmNoAHyucAE + 1cOGLpC4Lam9WNzyxXvM9AxwUHqYMmWqqW+vDqwV0RbcDOebu0piT53ubWwU + Waj5hoB+zdRwp7cDNCecQ5F8FAWjtcKadgJL5eXRjP09wNzANu8Wj4E90okW + Y5HWUtnbAAWN1+j2ZjhW+Q9ocJXwv36MmXw7eSYcTsZpHFnSvw1zncJ0RQLs + M1hnmeemgMcy47vxvKrNHXWaH27WBowjoa3t1cwQDtto77Pmi8ccaEwJB46O + meOQFc6Cfmyr4ZE/stWRTcnUgzll0n/j2Fwjwd1++HD96cvXwdcOChlTzScB + y2JNfjtJE9aRpVjn2KICrF2T1IAh2YvxSYw6U/LibwAAAP//AwBE/2HNABQA + AA== http_version: - recorded_at: Tue, 28 Jul 2015 20:50:54 GMT + recorded_at: Mon, 14 Sep 2015 16:43:30 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/visa/should_have_the_correct_attributes.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/visa/should_have_the_correct_attributes.yml index 908aa266..f7ec4602 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/visa/should_have_the_correct_attributes.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/visa/should_have_the_correct_attributes.yml @@ -10,7 +10,7 @@ http_interactions: Card Holder - bettye_stroman@jast.biz + viva_schinner@brekkejohnston.name Card Holder @@ -33,7 +33,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.47.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -44,7 +44,7 @@ http_interactions: message: Created headers: Date: - - Tue, 08 Sep 2015 18:11:12 GMT + - Mon, 14 Sep 2015 16:43:23 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -65,48 +65,49 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"cef5896cd9391f2436f0ad1b801ff7ea"' + - '"4b4d59072cfb46704baec852c7963817"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 02bdec428253968c0985e95307c8d8cf + - 7eaf0b90325b715b360846d060a11725 X-Runtime: - - '3.050001' + - '0.770596' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - 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 + rtr1FQAA http_version: - recorded_at: Tue, 08 Sep 2015 18:11:16 GMT + recorded_at: Mon, 14 Sep 2015 16:43:22 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_completed_payment/can_be_fully_credited.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_completed_payment/can_be_fully_credited.yml index ccf7c0a1..df88be16 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_completed_payment/can_be_fully_credited.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_completed_payment/can_be_fully_credited.yml @@ -10,7 +10,7 @@ http_interactions: Card Holder - megane.abshire@pfefferborer.info + regan@cruickshank.com Card Holder @@ -33,7 +33,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -44,7 +44,7 @@ http_interactions: message: Created headers: Date: - - Tue, 28 Jul 2015 20:50:59 GMT + - Mon, 14 Sep 2015 16:43:35 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -65,51 +65,51 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"b57b5b4c0a0d74e2e8040d7261ffce25"' + - '"0c021cdb641b43bc354f3456e346a18c"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - fcdb6c1e164475b6548144d53081d5d4 + - 0effb66748caa4c3471e0a1b0c4b5247 X-Runtime: - - '2.372235' + - '0.798033' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIADPrt1UAA7RYWY/bNhB+319h+F2WfMXeQKvtokURoGkQINkWzUtASWOb - XYlUSMpHfn2H1EVZttfHFtgFzJlvqOFwjk/yH7dp0luDkJSzh/5w4PV7wCIe - U7Z86D9//d2Z9x+DOz/KpeIpiOCu1/NpHIzH09l8+G7su7jQMtRFK8KUg+uf - IZvufv64V7NNutlORr5razV6QYVUDiMpBL8SEfuuJdD6hFSrDzyJQfhuI9H6 - iKcZYbseo8lDX4kc+q6RQ0poEqSwJAwGJJQrKuCXbAGLBYiQCxADyhbcdwuc - tshWnEFnnwXZdmQbCCVVXWwkgCiIHaJ6apfBQz/GpaIp9IORN5w63swZzb+O - vPdT/Lv/5ruNgbHPs/gy+8ageL65GmdBIYll7VJMlRNhaGW5KRGC7Ppa29YX - EpSFNEnw0h0SxwKkrOTFdYdRddGlrMoHp5ULtrTBNne7H7sSUN/tEf2R2y61 - UgkAVfs99Hof+RqSXe+LUfjuHqCxhK0CFutIlqpPXKjVBiQadXSWuzwiCVW7 - 4AMIFnOGyVlJGpCAJVZU8PTRd8ufjS7jUpHEwSqDYDz1vKnv2iL74DlTYmfE - DkmyFRkFz18wzgfkp6zGaPV0yGx8zIzleI00CuYTb8+u0nQNTXU+M6yRGGOP - KSp7fNF7MnDS7FIVcWV9W/mUu9xYRGYP90gJYGmwYOINR/O5xtQ36ev6cfTj - gr+o1Ces1zZiZTpY0+x6VUvbV9ZGPNX9kpIEo/nC+Ibp4NWyBlbEky8cKmVO - WATta7YVtdHt0T6/9hukLhCli8Bkb0da4WMIqWoOXSwb5YLkSeV3yHkChPUD - 3Q801CgbcC7wphwsvTzR/lub7msqE9hmVBh/nJQztQqGI90G9oQH0DsgAqM3 - 8lpwI22hsSz2fF+QREJpZXmyApKoFaYHNG5bsgpGU7IEJxdJsFIqk+9dl0gJ - Sg5CQSjTTW+JB9yQ3QCzx83ILgWmvqegVjz+nvAld9eYtoOMLR+BrangTAMe - JGFxyLfY8Ov96ydiOukCCQl7aVxrSSuo6emTYDifD8vhPal16IrgiZXdlaAG - CMgI5tEnHNXV70on81BGgmY6yO3hVg8FX/EXYEG4mqX3eIfFqtLljP7ITRsL - TbLikSnOThFM4vFkGs1gEg6Hs9GYxCOkDdMwnpHQG+I/9oxjpvXeb9CF1sBS - 7sj45Uiy1HrLQqAbRSkdGvcdUCM245OoXAaFHmI9Lo3AxkTrNRaMzHB/KGbU - n1jGHaFtQtbSASG4aGMOz/ASbw3B7uNOA/a3as/8w7udxNgblmWEiH8hMsWN - TVFydvQwNd0lkWnGuidKTGSwmLClsk0zwSP0Zj9uSGs8TxfDYe0rOyhkM8FT - hpq1vuFjCHsXdGskNpv1pE38GqJoy84geQb0CtErcu0U2Ssz9krCZ6yvI32F - +2cQPwM8Qf6KKzqTAJYBuYFeWbSmXdHdN4BSc6J31glwkA7Zd3y48VfPfo02 - 1Td1wUDu2rw+lit/LmMp1ikupXal6f84gqoEOz5AS8R5HKMEn+JlFeRiwlXF - 8Sy2W53rFeZQws7nKbUTl3PpOtQ8ziPTxxuvGlmrEo9U3WWsfHbkHeht+IfZ - R1D54qCG7McVCf+32d/e9PO7P8a//bM/GkymRFSa3ldMG50spaQViQNP0NSm - y1Ha0rIjdyLZEhiQX7ZwOPgBZP8Nr/OJ44KXnNOT7/TMOzXtrp1zV024M2bb - 8al25jy75nPGVR8zrvyUccukfZMX65vLF3ltc631AnDZpG5w9x8AAAD//wMA - f8dAqvQVAAA= + H4sIADf59lUAA7RYS2/bOBC+51cYviuybDlxC0XdIMCih26B3ba7wF4KShzH + rCVSJSkn7q/fIfWiLNuxnezBgDnzDTUczuOTog/PeTbagFRM8LtxcD0Zj4Cn + gjL+eDf+9vV3bzH+EF9Faam0yEHGV6NRxGg8nd4sZotgFvm4MDLUpSvCtYfr + Xwmfb3/9fKdvn/Kn53Aa+a7WoJdMKu1xkkP8QCSNfEdg9BlpVh9FRkFGficx + +lTkBeHbEWfZ3VjLEsa+lUNOWBZLeCT8t1SWLF0rfOz6GvGRXykNrFgJDgPj + JXkeyJ4gUUwPsakEooF6RI/0toC7McWlZjmM4+kkmHuTd14Qfg1u3oez97Pw + 38jvDKx9WdDT7edo3xlUz7f34S0ZZFS1LlGmvRTjqepNiZRkOzbavr6SoCxh + WYY37RFKJSjVyKs7vuHN7dayJgm8XgK40g7bXehu7GpAe6EH9AeuuNYqLQF0 + 63cwGX0SG8i2oy9WEfk7gM4SnjVwaiJZqz4LqVdPoNBooHPcFSnJmN7GH0Fy + KjA0raQDYeJhGcX3nyK//tvpCqE0yTwsLYhn88lkHvmuyD14ybXcWrFHsmJF + pvG3LxjnPfJjVjO0ut9nNjtkxku8RpbGi3CyY9dohoa2JL9xrBGKsccUVSOx + HN1bOOl2aSq3sX5d+dS7nFVE4aCI7B7+gRLA0uBxOAmmi4XBtDcZmfrxzOPi + v5kyJ2zXLmJl21bX4UZNH9tVtkYiN02SkQyjuebiiZvgtbIOVsVTLD2mVEl4 + Cv1rdhWt0eujfXrtd0hTINoUgc3egbTBU0iY7g5dLTvlkpRZ43ciRAaEj2PT + DwzUKjtwKfGmPCy9MjP+O5vuahoTeC6YtP54ueB6FQdT0wZ2hHvQWyASozed + 9OBW2kNjWez4viSZgtrK8WQFJNMrTA/o3HZkDYzl5BG8UmbxSutCvfd9ohRo + dZ1Iwrhpeo94wCeyNTPPL8g2B66/56BXgn7PxKPwN5i21wV//AB8w6TgBnCn + CKeJeMaG3+7fPhHTyRRIgoO0c60nbaC2p4dxsFgE9cQOWx26IkXmZHcjaAES + CoJ59Fmgrv7f6FSZqFSywgS5P9zaoRBpsQYe/1iH4Q3WWbVqdCVnP0vbxhKb + rHhkhrNTxiGdhfP0FsIkCG6nM0KnsFzOE3pLkkmAP+wZh0zbvd+gC22A58JT + dH0gWVq9YyHRjaqU9o37AagT2/FJdKniSg/UjEsrcDHpZoMFowrcH6oZ9QeW + 8UDompCN8kBKIfuY/TO8xjtDcPi444Ddrfozf/9uRzHuhnUZIeIHpLa4sSkq + wQ8epuW4JLXN2PREhYkMDv11VK5pIUWK3uzGDWnNZGKKYb/2hR00spn4vkDN + xtzwIYS7C7o1l+vblPaJX0cUXdkJJM+CXiB6Va4dI3t1xl5I+Kz1ZaSvcv8E + 4meBR8hfdUUnEsA6IK+gVw6t6Vf08A2g1hzpnW0C7KVD7h3vb/zNs1+iTe1N + nTGQhzYvj+XGn/NYinOKc6ldbfo/jqAmwQ4P0BpxGseowcd4WQM5m3A1cTyJ + 7TbneoE51LDTeUrrxPlcug21oGVq+3jnVSfrVeKBqnubd6C34R92H8nU2kMN + 2Y0rjWc3OIgewj//+evrw+5osJmSMmV7XzVtTLLUkl4k9jzBUJshR+lL6448 + iGRPYEFR3cJh7weQ3Te8wSeOM15yjk++4zPv2LS7dM5dNOFOmG2Hp9qJ8+yS + zxkXfcy48FPGaybtm7xYv7p8kdd219ouAJdd6sZX/wEAAP//AwC1v+qG6RUA + AA== http_version: - recorded_at: Tue, 28 Jul 2015 20:51:01 GMT + recorded_at: Mon, 14 Sep 2015 16:43:34 GMT - request: method: post uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions @@ -122,7 +122,7 @@ http_interactions: 50.00 Solidus - bh7m92 + jk446r @@ -137,7 +137,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -148,7 +148,7 @@ http_interactions: message: Created headers: Date: - - Tue, 28 Jul 2015 20:51:01 GMT + - Mon, 14 Sep 2015 16:43:36 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -169,58 +169,58 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"6bd293a8a1d60de354f13884c978684e"' + - '"dd28eae9ecc3cf90398d639185624b53"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 6e27ee45f82ff21e3020257962afc551 + - 909d8c829a557d0dad4c9b82aa7cf28c X-Runtime: - - '1.878317' + - '0.665885' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - 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 - //8DAP/I+q+iEgAA + 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 + AP//AwCDdylG7hIAAA== http_version: - recorded_at: Tue, 28 Jul 2015 20:51:03 GMT + recorded_at: Mon, 14 Sep 2015 16:43:36 GMT - request: method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/cjkbfp/submit_for_settlement + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/kg4fgt/submit_for_settlement body: encoding: UTF-8 string: | @@ -234,7 +234,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -245,7 +245,7 @@ http_interactions: message: OK headers: Date: - - Tue, 28 Jul 2015 20:51:02 GMT + - Mon, 14 Sep 2015 16:43:37 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -266,59 +266,58 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"27395f0a5d610f42fc50957d3ff88182"' + - '"a3590a9c480f9b4d0690987d0ffd9330"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 3f3beea7426051fcbf17108bbb3a29f5 + - b34e7f6aa912cac31647796dce8cc787 X-Runtime: - - '0.237940' + - '0.224278' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - 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 - AAA= + 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 http_version: - recorded_at: Tue, 28 Jul 2015 20:51:04 GMT + recorded_at: Mon, 14 Sep 2015 16:43:36 GMT - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/cjkbfp/refund + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/kg4fgt/refund body: encoding: UTF-8 string: | @@ -332,7 +331,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -343,7 +342,7 @@ http_interactions: message: Unprocessable Entity headers: Date: - - Tue, 28 Jul 2015 20:51:02 GMT + - Mon, 14 Sep 2015 16:43:37 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -366,22 +365,22 @@ http_interactions: Cache-Control: - no-cache X-Request-Id: - - 699ce3bd69e65642ce3eb1cf5562ef87 + - 92c59e14b2e38ebb6cc1ce3e0d084150 X-Runtime: - - '0.091660' + - '0.104492' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIADbrt1UAA6xSQU7DMBC89xVW7qlTRIFKjntA4gXwgE2yLYbEDusNbfp6 - nCZpUlRx4razM7veGVltj1UpvpG8cTaNVsskEmhzVxi7T6O315f4KdrqhYLa - xEjkKCb0tbMe9UIIdW75rrwAwW2NaQRE0EZyoJjAesg5PNJ3bstHbmQnHDrh - KNSb1Tp5UPJcz0lgJpM1jMM+31aZKyOdgUclL+zVTIXewx71M1jrWBDuGlsI - ELNjRWPLoBKGhfHCI3OJxVLJcXS6V14dPMAxGfnL/5xWNRBU/o+goHKNZb1O - lkkSvPTo9uJO3YPeTZDPudxZJleWSHo26Ls8L8RiyIbyd7Acm0KfMrtuT18b - fjxUh+P9XWd/Ynt9KPKPz2xXK9n3lJx8/UvSwcqNP/gDAAD//wMAIaNywcAC + H4sIADn59lUAA6xSQW6DMBC85xUWd2JSJW0jOc6hUl/QPmCBDbUKNl0vTcjr + awIEUkU99bazM7veGVntT1UpvpG8cXYXrZZJJNBmLje22EXvb6/xc7TXCwW1 + iZHIUUzoa2c96oUQ6tLyXXkFgtsadxEQQRvJgWIC6yHj8EjfuS8fuZGdcOiE + o1BvV5vkUclLPSeBmUzaMA77fFulrox0Ch6VvLI3MxV6DwXqF7DWsSA8NDYX + IGbHisaWQSUMC+OFR+YS86WS4+h0r7w5eIBjMvKX/zmtaiCo/B9BQeUay3qT + LJMkeOnR/cWduge9myCfc5mzTK4skfRs0Hd5XonFkA1lH2A5Nrk+p3bTnr+2 + /HSsjqf1Q2d/Ynt9KD6L9aFgJfuekpOvf0k6WLnzB38AAAD//wMAn5uhfMAC AAA= http_version: - recorded_at: Tue, 28 Jul 2015 20:51:04 GMT + recorded_at: Mon, 14 Sep 2015 16:43:37 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_completed_payment/can_be_voided.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_completed_payment/can_be_voided.yml index 47066038..2e310cd0 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_completed_payment/can_be_voided.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_completed_payment/can_be_voided.yml @@ -10,7 +10,7 @@ http_interactions: Card Holder - wyatt@lebsack.co.uk + tyler.blick@olson.biz Card Holder @@ -33,7 +33,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -44,7 +44,7 @@ http_interactions: message: Created headers: Date: - - Tue, 28 Jul 2015 20:51:05 GMT + - Mon, 14 Sep 2015 16:43:38 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -65,50 +65,50 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"a4b176ab92260a44184213f25638a5c7"' + - '"d168b5018e719a4c1b20ca9dc039efeb"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - f87f4b01d9a0ee4188fcdbc373c96edc + - a9bb12cb7e8ce93562610455c6ee325a X-Runtime: - - '1.912919' + - '0.736856' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - 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 http_version: - recorded_at: Tue, 28 Jul 2015 20:51:07 GMT + recorded_at: Mon, 14 Sep 2015 16:43:38 GMT - request: method: post uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions @@ -121,7 +121,7 @@ http_interactions: 50.00 Solidus - 3p5qq2 + cpmrnb @@ -136,7 +136,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -147,7 +147,7 @@ http_interactions: message: Created headers: Date: - - Tue, 28 Jul 2015 20:51:07 GMT + - Mon, 14 Sep 2015 16:43:39 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -168,58 +168,58 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"1dbb3ce89b1bd99e69a658d868d41c18"' + - '"b003ac2477cfb7b49a30765c7de45016"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - eed53715a1334d2e620f3d06dcb15137 + - 1cc493a49017fbe4e1c7aff99c8e3555 X-Runtime: - - '2.315415' + - '0.680049' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - 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 - AAA= + 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 + AAD//wMA95o7Ve4SAAA= http_version: - recorded_at: Tue, 28 Jul 2015 20:51:09 GMT + recorded_at: Mon, 14 Sep 2015 16:43:40 GMT - request: method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/hsyz9p/submit_for_settlement + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/46795p/submit_for_settlement body: encoding: UTF-8 string: | @@ -233,7 +233,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -244,7 +244,7 @@ http_interactions: message: OK headers: Date: - - Tue, 28 Jul 2015 20:51:08 GMT + - Mon, 14 Sep 2015 16:43:41 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -265,58 +265,59 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"79448435adbf11a36a53833cbdf77314"' + - '"b40d491345f8a927649390a876108c32"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - f463a22fb2a5a7f51ca54b3d6a4f4645 + - 437fb8f37110a97f09ff4220ea8ffc6d X-Runtime: - - '0.513823' + - '0.324729' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - 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 + 0QYUAAA= http_version: - recorded_at: Tue, 28 Jul 2015 20:51:10 GMT + recorded_at: Mon, 14 Sep 2015 16:43:41 GMT - request: method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/hsyz9p/void + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/46795p/void body: encoding: UTF-8 string: '' @@ -326,7 +327,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -337,7 +338,7 @@ http_interactions: message: OK headers: Date: - - Tue, 28 Jul 2015 20:51:09 GMT + - Mon, 14 Sep 2015 16:43:42 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -358,54 +359,54 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"967ef30f1f032a97b7d483bb373bca53"' + - '"3146baa5844f97f743e3804f169e450b"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 1c793098a8e5be98f42ac2ede6620455 + - 0a2b3de389c2b26a2af94fbe4d976682 X-Runtime: - - '0.205131' + - '0.221451' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - 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 - OvCTFAAA + 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 + FwAAAP//AwDmHZhp7BQAAA== http_version: - recorded_at: Tue, 28 Jul 2015 20:51:11 GMT + recorded_at: Mon, 14 Sep 2015 16:43:41 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/failure/fails.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/failure/fails.yml index 6600c501..47145986 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/failure/fails.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/failure/fails.yml @@ -10,7 +10,7 @@ http_interactions: Card Holder - brandon@lockman.name + maria_powlowski@keebler.co.uk Card Holder @@ -33,7 +33,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -44,7 +44,7 @@ http_interactions: message: Created headers: Date: - - Tue, 28 Jul 2015 20:51:21 GMT + - Mon, 14 Sep 2015 22:34:16 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -65,31 +65,32 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"37b0e15ea44c840fd0905acce5aa3a68"' + - '"84759288b11dbd70f7a4c14aa4164ffa"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 70537fc0697226bfb0b8ec988391eee6 + - 4d9be758536b03acad4c07765f1061c2 X-Runtime: - - '0.270350' + - '0.258493' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAEnrt1UAA6RTy27bMBC85ysE3SVKhoU4Bi0HKFD0A9JLL8FKXNuMyaVC - UrGUry8l+dWqlyLHnZl9Dsm3nVbRB1onDW3iPM3iCKk2QtJ+E/98+Z6s4m35 - wOvWeaPRlg9RxKUo8yJbFtnqibMQDFjg6gOQT0L8WVHRf74/+ceTPnXLBWf3 - 7KDeSet8QqCx/AZWcHYHDLyCS/TDKIGWsxsy8LXRDVAfkVSb2NsWYzbiqEGq - srJAwtCzMvVRA6VDGmcTN6iagyGc5e6gm2EnrJz0c21tETyKBHzk+wY3sQih - lxrjcpHlRZI9JovVyyJbF/l6kf/i7JYw5reN+L/8W8LUf7Qj2UlUwl1HEtIn - dTinOxcFa6E/T9xA34BKoK5NS/5PxSCYSSYwwN4ckcrjcfn2rjmbogs33fQN - CFNh8Bk70I3CNNhzd+9RKXAHrbqsWxmjECguh5tydiavYqlhj0lrVXnwvnFr - xsA59C4NzkryFnEfrnGCfujEwtwayb9q9AcjXpXZGzbtkja03yJ9SGtokGxc - eBiV6cKrvXa49PyipWONL9o61nBt5WorGx8+5D+MDAo2N+pvzI0gCGExHG5W - Jgx//c+/AQAA//8DADg1+YgCBAAA + H4sIAGhL91UAA6RUyW7bMBC95ysE3SlajtzUhiwHCBD0A9JLL8ZIHMusuZWk + IstfX0rylqiXIsd582Z7w2G+OUoRvaN1XKt1nCazOEJVacZVvY5/vr2S7/Gm + eMirxnkt0RYPUZRzVqRZtnzMnpY5DUaPBV+1B+VJsE+lWnSnP0v/1Mr2mM1z + eu/t2TtunScKJBYvYFlO74DeL+Bi/dCCoc3pDen9lZYGVBcpLtaxtw3GdMBR + AheFBMtha3QrdOsO/PmAWAq0SaWT5pDTkdTTzV4rnCTZwXGCtVg67qfcyiJ4 + ZAR85DuD65gF03OJcTGfpQsyW5I0e5vPV4/ZKv32K6e3gCG+Mez/4m8BY/1h + L2THUTB3bYlxT6qgqzsnBWuhO3dsoDMgCFSVbpT/yOgJE8oIBtjrA6qCLdju + FFY6WhffqOlvUJgwjc94BGkEBsXlnd4Dk+EOGnEZt9RaIKi46DXN6dl5JXMJ + NZLGimLvvXErSsE59C4pLXDlLWId1Gih6yvR0LdE5bcS/V6zrdC1puMsiVH1 + BtU7t1r1lLUDxUp9DM/3WuFS84srHXJ8ca1DDteUrrLc+HCZ/1jkwCm5EOFS + CdRBin6wcGCf32ig0elGP2NuAIExi0HhSb0w5fUH+AsAAP//AwDC1HUcNAQA + AA== http_version: - recorded_at: Tue, 28 Jul 2015 20:51:23 GMT + recorded_at: Mon, 14 Sep 2015 22:34:16 GMT - request: method: post uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers @@ -98,11 +99,11 @@ http_interactions: string: | - jane.doe@example.com + paypal - brandon@lockman.name + maria_powlowski@keebler.co.uk - jane.doe@example.com + paypal 10 Lovely Street Northwest @@ -123,7 +124,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -134,7 +135,7 @@ http_interactions: message: Created headers: Date: - - Tue, 28 Jul 2015 20:51:21 GMT + - Mon, 14 Sep 2015 22:34:18 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -155,31 +156,31 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"367b9a7d93046c3ede9dc0d5d3a6cad6"' + - '"7576cb187ed2c8a5e72aaf23944e70af"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - c7ff8e63d7645f8b03ab95f64a9e63e9 + - 6d7941ad0db458c155749b240f88b64d X-Runtime: - - '0.187618' + - '0.359161' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAEnrt1UAA6RTy3abMBDd5ys47EGGxHXqAzirfkG66SZnQGNQI42oJAzk - 6yvAdpLiTU+Wc++d55Wyw6BkcEJjhaY8TOJNGCBVmguq8/Dn84/oMTwUd1nV - WacVmuIuCDLBi923ZJum9/cZ88GEea5qgFzk47eStuPbn+9u16t+eEgz9pGd - 1EdhrIsIFBa/gTDmGp9wANVKjCutMvZBMOklnKOAhMxDZzoM2cx4dQs0rnBU - IGRRGiCu6Unq6lUBxVOJjC3cpGobTeuaRxhWWI+lFe5Gf4PgkEfgAje2mIfc - h04oDIt0k2yjzS5KH5/TzX6b7NPkV8beE+b8ruX/l/+esPSfjYmOAiW315G4 - cFEFhttzUTAGxvPELYwtyAiqSnfkPismwUqygB52+hWpaB5Op6HP2BJduOWm - t8283ntWcjxCJy/rllpLBAqL6aYZO5NXsVBQY9QZWTTOtXbPGFiLzsbeWUHO - INb+Gj2MUyfm51ZI7kWhazR/kbrWbNklbqk+IJ2E0TRJcusfRqkH/36vHS49 - v2jpXOOLts41bFfayojW+a95w0ivYGuj/sXsDALnBv3hVmX88Nef/RcAAP// - AwB3O9cRDAQAAA== + H4sIAGpL91UAA6RTy3ajMAzd9ys47I0TmkzTHCBd9Qs6m9nkCKwQT/yqbQr0 + 68dAkqalmzld6urqdSVlu06K6A2t41rl8TJZxBGqSjOu6jz+/fJMNvGuuMuq + xnkt0RZ3UZRxVqTr+1+rdLPKaDAGLPiqIyhPgv1eqnX//vroH1rZdqs0o7fe + gX3g1nmiQGJhoDcgMnoDDQwBZytSXOSxtw3GdPRUWhpQ/QxHCVwUEiyHvdGt + 0K078acTYinQJpVOmlNGJ9JAN0et5skP0M2wFkvH/TeNWASPjICPfG8wj1kw + PZcYF+liuSaLR7JcvaTp9n61XW7+ZPQjYIxvDPu/+I+Aqf64E3LgKJi7tsS4 + JxVY5s5JwVrozx1PWhOoKt0o/5kxEGaUCQyw1ydUxWbzUHVtRifr4ps0/QsK + E6bxCTuQRmBQXN7oPTIZHqARl3FLrQWCiotB04yenVcyl1Ajaawojt4bt6UU + nEPvktICV94i1kGNFvqhEg19S1R+L9EfNdsLXWs6zZIYVe9QvXGr1UDJHShW + 6i6c7rXCpeYPVzrm+OFaxxyuKV1lufHhK79Z5MgpuRDhSwnUQYphsPBcX280 + 0Oh8o18xN4LAmMWg8KxemPL6/f8AAAD//wMANfNjrDAEAAA= http_version: - recorded_at: Tue, 28 Jul 2015 20:51:23 GMT + recorded_at: Mon, 14 Sep 2015 22:34:18 GMT - request: method: post uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions @@ -188,21 +189,21 @@ http_interactions: string: | - R419414138-3CYE5CL7 + R447239196-V3ZPASHA 45.75 Solidus - 10 Lovely Street + A Different Road Northwest Herndon AL US 35005 - h4vvxw - 76152233 + 887cxw + 25364284 sale headers: @@ -211,7 +212,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -222,7 +223,7 @@ http_interactions: message: Created headers: Date: - - Tue, 28 Jul 2015 20:51:22 GMT + - Mon, 14 Sep 2015 22:34:19 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -243,60 +244,61 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"23bb9d70b280d45358d14585db07de53"' + - '"92ba9a206897682da43b5469e494bfc8"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 07e574a2d9f58b7accf4d2e656cc52b9 + - 6f70a6570e12a6d541a383dd1bfaa1bb X-Runtime: - - '0.304335' + - '0.341943' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - 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 - dWt3kFffq4ulM3yDd38DAAD//wMAi6VxETgVAAA= + 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 + AA== http_version: - recorded_at: Tue, 28 Jul 2015 20:51:24 GMT + recorded_at: Mon, 14 Sep 2015 22:34:20 GMT - request: method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/33fr6t/submit_for_settlement + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/87nz3d/submit_for_settlement body: encoding: UTF-8 string: | @@ -310,7 +312,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -321,7 +323,7 @@ http_interactions: message: Unprocessable Entity headers: Date: - - Tue, 28 Jul 2015 20:51:22 GMT + - Mon, 14 Sep 2015 22:34:20 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -344,55 +346,56 @@ http_interactions: Cache-Control: - no-cache X-Request-Id: - - d1b0a3f00ad8aa4c48e72ddf1f416d8e + - 6c9255c91f3d8388364b0da22e4a7cbe X-Runtime: - - '0.147591' + - '0.117582' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - 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 + AP//AwDCuOOnQBkAAA== http_version: - recorded_at: Tue, 28 Jul 2015 20:51:24 GMT + recorded_at: Mon, 14 Sep 2015 22:34:20 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/success/can_be_voided.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/success/can_be_voided.yml index e7e9d137..6b7df514 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/success/can_be_voided.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/success/can_be_voided.yml @@ -10,7 +10,7 @@ http_interactions: Card Holder - berta.hamill@strosin.co.uk + sam_grant@kautzer.co.uk Card Holder @@ -33,7 +33,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -44,7 +44,7 @@ http_interactions: message: Created headers: Date: - - Tue, 28 Jul 2015 20:51:18 GMT + - Mon, 14 Sep 2015 22:34:13 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -65,31 +65,31 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"f53d3fd4b5440e3ea0c0587d79ea69ac"' + - '"dda46bc88022034fe64f44f1b44b04da"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - d54a32ddb72c87cca6eaa6220c000c54 + - bfc6cae8258e9c911bac2c98f2df967d X-Runtime: - - '0.214763' + - '0.221793' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAEbrt1UAA6RTy27bMBC85ysE3SXaQoyoBi0HKBDkA9JLL8GKXNts+FDI - VSzl60tJfrXqpchxZ2ZfsyTfdkYnH+iDcnaTLvNFmqAVTiq736Q/Xp6yMt1W - d1y0gZxBX90lCVeyKouiLFblPWcxGLDIiQNYymL8WdtV//n+jR6O5tjdF5zd - soN6p3ygzILB6jt4ydkNMPAaztGz0xI9Z1dk4IUzDdg+sUpvUvItpmzE0YDS - VY2eID+AUVo/BvIuKJsLl7dvnE2KQdscnMVZhR10M+yIdVA01wqPQCgzoIT6 - BjepjCEpg2lVLJarbPGQFeVLsVivlutl+ZOza8KY3zby//KvCVP/8SjZTqGW - 4TKSVJSJaGo4FQXvoT9N3EDfgM5ACNda+lMxCGaSCYwwuTe0lXivO3vkbIrO - 3OTpL7CYS4eP2IFpNEbHzY3fo1LiDlp9Xrd2TiPYtBo85exEXsTKwB6z1uvq - QNSENWMQAlLIaw/KkkfcRzeO0A+dWJzboKVXg3Rw8lW7vWPTLnlj91u0H8o7 - O0g2AaysXRff7qXDuecXTzrW+OJZxxqhrYPwqqH4Lf9xyKhg80P9jYURBCk9 - RuNmZeLwl1/9GwAA//8DAMAZ41QIBAAA + H4sIAGVL91UAA6RTy27bMBC85ysE3SlaitMmBi0HKFD0A9JLL8ZKXMuM+QpJ + xZa/vpTkV6Neghx3Zpa7O8tlq4OSyTs6L4xepnk2SxPUteFCN8v098tP8piu + yjtWtz4Yha68SxImePmtyIvH2TxnNAY9Frl6CzqQGB8r/dAd357C973aH+YF + o7dsr94I5wPRoLD8AY4zegP0vIRz9MtIjo7RK9LztVEWdJdoIZdpcC2mdMBR + gZClB7VuXCz3vIM2HNFltcnaHaMj3Qvt1micpG/gMMH2WHkRptraIQTkBEIS + OovLlMcwCIVpWczyBzJ7Ivn8pSgW9/NFfv+H0WvCkN9a/rn8a8JYf9gI2QiU + 3F9a4iKQOjrqT4+Cc9CdOrbQWZAE6tq0Ovyr6AUTyQhGOJgd6nIzt2/bitEx + OnOjp6+gMeMGn/EAykqMjqsbvwclxw208jxuZYxE0GnZe8roibyIhYIGSetk + uQ3B+gWl4D0Gn1UOhA4OsYlu7KHrK9HYt0Id1grD1vC1NI2h4yyZ1c0K9btw + RveSpQfNK3OIH/dS4Vzziysd3vjiWoc3fFv52gkb4k3+Z5GDphJSxhsl0EQr + +sHiaX38o1FGpxv9iPkBBM4dRocn9eKUl9v/CwAA//8DABOC32IuBAAA http_version: - recorded_at: Tue, 28 Jul 2015 20:51:20 GMT + recorded_at: Mon, 14 Sep 2015 22:34:13 GMT - request: method: post uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers @@ -98,11 +98,11 @@ http_interactions: string: | - jane.doe@example.com + paypal - berta.hamill@strosin.co.uk + sam_grant@kautzer.co.uk - jane.doe@example.com + paypal 10 Lovely Street Northwest @@ -123,7 +123,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -134,7 +134,7 @@ http_interactions: message: Created headers: Date: - - Tue, 28 Jul 2015 20:51:19 GMT + - Mon, 14 Sep 2015 22:34:13 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -155,31 +155,31 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"331ffa072e8e0fde60daae50d83c8227"' + - '"2da5a822492be65ba46e58a880f01672"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 3b47a5cdf5cb6a985df0d24a776706ea + - 6a748acd7bcef3c6a45f0411ac47b899 X-Runtime: - - '0.251727' + - '0.240197' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAEfrt1UAA6STy3abMBCG93kKDnsQOKVJfABn1SdIN93kDGiMVetCpMGG - PH0F2CQt3vRkOf98c9H8kO96JYMTWieMLsI0TsIAdW240E0R/nz5ET2Gu/Iu - rztHRqEt74IgF7zM0jRJN+l9znwwaj5XH0BT5OP3SmfD+9sTPZzVuf+2ydnn - 7EjvhXUUaVBY/gaNMTf4jD2oVmJcG5WzT8DIS7hEgRayCMl2GLIp4+kW9LDS - UYGQZYWWID6AElI+O7LGCe0HxN0xZzMxsu3B6HXnPfQr7YyVE3RjC4tAyCOg - gIYWi5D7kITCsNwkaRYlD9Hm8WWTbLN0mz79ytlHwVTftfz/6j8K5vmTPdFe - oORuWYkLimqw3F2agrUwXDZuYWhBRlDXptP0NzECK2QWvUzmiLrMTsdKfc/Z - HF1z801vW7rceyI57qGT1+dWxkgEHZbjTXN2SS6wUNBg1FlZHohat2UMnENy - cWVBaLKIjb/GGYZxEvN7K9T0qpAOhr9K0xg2vyVudbNDfRLW6BEpHGhemd5/ - xcuE68wvWjr1+KKtUw/XVa62oiX/g94w0hNsbdS/mptE4NyiP9yqjV9++b// - AAAA//8DAGYadC4SBAAA + H4sIAGVL91UAA6RTy3baQAzd5yt8vB8PrySFY5us+gXpphuO7BFmYB7ujAyY + r+/YBkLjbHqy1NXV60pK12etoiM6L63J4mkyiSM0pRXSVFn86/0n+xGv86e0 + bDxZjS5/iqJUiny6fHl9mS/nKQ9GhwVfuQNDLNiXwjy3lz9Lej3p03kxS/mj + t2NvpfPEDGjMa2hrUCl/gDqGgqsVGamymFyDMe89pdU1mHaEowapcg96U7lQ + 6u0ADV3QJaVNmkPKB3dHrHfWjNNu4TzCTlh4SV+04BAIBQOKqK0xi0UwSWqM + 89lk+swmSzZdvM9mq/liNZ3/TvlHQB/f1OL/4j8Chvr9NthWohL+3pKQxEpw + wl+TgnPQXjseVGZQlrYx9C+jI4woAxhgsgc0+f5y9Psq5YN18w2a7sFgIiy+ + 4Rl0rTAorh/07pkCt9Co27iFtQrBxHmnacqvzjtZaqiQNU7lO6LarzgH75F8 + UjiQhhxiFdQ4QdtV4qFvjYY2GmlnxUbZyvJhlqQ21RrNUTprOkrmwYjCnsPR + 3ivcan5zpX2Ob661z+GbwpdO1hT+8YtF9pxCKhX+k0EVpOgGC2/1+UYDjY83 + +hnzPQhCOAwKj+qFKe9//xcAAP//AwCydAT3KgQAAA== http_version: - recorded_at: Tue, 28 Jul 2015 20:51:21 GMT + recorded_at: Mon, 14 Sep 2015 22:34:14 GMT - request: method: post uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions @@ -188,21 +188,21 @@ http_interactions: string: | - R229128108-SJJUFCMY + R445425343-DGELLGKA 45.75 Solidus - 10 Lovely Street + A Different Road Northwest Herndon AL US 35005 - 5vkbm6 - 51101213 + jzvsjg + 19676393 sale headers: @@ -211,7 +211,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -222,7 +222,7 @@ http_interactions: message: Created headers: Date: - - Tue, 28 Jul 2015 20:51:20 GMT + - Mon, 14 Sep 2015 22:34:14 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -243,60 +243,60 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"a981bf31b8b3c95ac65c1e8ac45fb8da"' + - '"1af9a659213d2f448f535551d9e48fc5"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - a871ea0878568158ab2d6afdadf3f935 + - acf135c43acbf1b2a765a250550f0488 X-Runtime: - - '0.301365' + - '0.301379' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - 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 http_version: - recorded_at: Tue, 28 Jul 2015 20:51:22 GMT + recorded_at: Mon, 14 Sep 2015 22:34:15 GMT - request: method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/fmkddj/submit_for_settlement + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/b68j3y/submit_for_settlement body: encoding: UTF-8 string: | @@ -310,7 +310,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -321,7 +321,7 @@ http_interactions: message: OK headers: Date: - - Tue, 28 Jul 2015 20:51:20 GMT + - Mon, 14 Sep 2015 22:34:15 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -342,57 +342,57 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"128ad7fee128bc8ea9753c4dc98fbd2a"' + - '"1407175a924b1cb48580acdf7a1125fa"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 38475f06fd1f93d58bf1ded5c2fdd8a4 + - 3257e464b74bb9e3a0f605b754c7f85e X-Runtime: - - '0.234556' + - '0.296463' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - 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 - 4ld/AgAA//8DANYEaVyEFwAA + H4sIAGdL91UAA+RYS3PbNhC+51dodIepByXbGZmJErtuWk8nY8eH9uIByZUE + mwRYAJSl/PouCJIiRdB2HzPtTG/k7ofHLha732LxYZcmgy1IxQS/GI5PRsMB + 8EjEjK8vhvfffiBnww/Bu4WWlCsaaUQF7waDBYuDcH72ON0vPPw0EqWpzlWg + QOsEBy+8UmB0ep9BoGgCC6/4NLIolxJX2hOmBMEFIbi/u1x4XbEB01TkXAf+ + 7OR0tvDKP6NIQUYbyjWhUWSEBHejMgm4kktlhggZgzQ/t74/8yezqT8ll9dX + NzfXPy8XXq0t9iiBaogJ1QOz74thjL+apTAMJqPxjIzOydj/Npm8n/rvx/5v + uPt6QDE+z+K3j5/h+MOA0kdKC7TD/Finj8/np/Pp+bRyO0pXTCpNOE0hyOg+ + o8nCa4gsJqHl/4Cz5GKoZQ5Dr9RFIs0o3zs0kFKW4LmlD2s8fv3xieb6O8iT + SJzkTwvPqi30GULFtGv6bCO4S76iu2OpOf2DwYuQJSaSauNdk9SGOpR/zWil + MXowaOJYglIur+w08NgcUi8kERFNmHZNL2GNd8jlJ4EXJilC3rlfjGC57zfH + qs1oQpNsQydvQk1fQ/EcT4NF3ZNqHA7atMp5TLondNCo8gJQKem+pURHNpKL + a5IipUAKeIXbSNekGKIbIdn3PzVtSHW0cWI2LMv+7RgMloNLtloB5kU9uBU0 + Nrm1BXAHZvCLkHrzDErjXT3WtQM1+BEkjwVfeLWkGa7B8mbhlZ+daA2ms9EI + s3JT1A3a4J5jfogHd1gVQA3EarAsIovipW/CeuMZy8MB2pT3xjaOWLqGTF8I + 9ODMHx2NqTRF2DcDokzPZMUgiVUZfltFQEohCXo5E1yB80YXuIbD2ujgC9a4 + FwHVFO04cM/yIqYwY7vtjuwKDXSNh/dM96h5BHuxsOCpbj5bZFJEuBr6obqQ + tIA7nXEAt1ccj0Z4GH3anpEaQz1YZqjZQuwcXSAKD8YxM7tCH3dhnV1uBYvM + OeBFlDgCwyIE2bUlN6wDV7FEogel6Y5YFuNUwQ7SrOIMoRAJUD4MVjRRhkHV + gIqjoBUkorIiBFo8AQ8ev2/VI9Iw+2c1IXNVniJH+a4EhXMSswlnFcyYtGea + Cq43gckxR6IOcg9UtoGFpFytrP3EpCDtLpJmRxuRFJ51J1WW0jWQXCbBRutM + vfc8qjDTq5NQUsbNVShjGFlM6iFhMgXgIQUM0vghEWvh5fyJi2d+kvH1B+Bb + JgU3mAtFeRyKHTKveokyF0rIKNKxezvQxJwVWPUGaKI3uHM4IBoyC4ohZPqg + t7+lKpd4bhh46zwx5LCBOtbUdcVwX0aTA7QhKzdN91IkDUQlKN2oVI5pDisj + fzpgWtJ2EhUrYrSUR9BctausfCbiPCo4ecNttcyCcs5+z6G8QyjGU2CYbDvX + yVxO4KkgKn7quTS1vuSZ7UtTNi9kwzAE5b5FK+qSXCAAJyoPxtw0pPKoSLM3 + tgc1vp6hbJIOrKXZNxWIvtbHekghV45TyteAid72PYWs3mGDAymBuQkCmjHc + SVdu7fS6hv5922cv2a7yMGUaw/dhJeTDgZX9Dz3h6J3/E5bXkvKC2EqXUDev + zkMVSZb18u6Gvq5LRTNBMiRaIibIVIlxouOeHyFxW1I7sbjlo3VMuSdY2R1N + Q8xUkaqcOrCziKpO9RSevj4X60R3b+1JkWWbZw+0qyd71Xpb8TeUc0iCO5Gw + OFeYzUqB7Wrk1vCUFUAfwzBri2dij7SjRV+EuVS2MYpBY49fdQttlfuAGl2V + e/k2pvPc80Y47IzRWIalexums8RwRWLumjCPIkfjjsfSY7uxPMtN39KNj5JC + EMaRaOe2SzVvXPYt5qF8fFp4fbg2jW3Y2ma7/hEX7gW+Pl/Bfz8Ljo1r2qbI + veiCmG4wtRC8cyYYAe1YiS77LYx+lYciDAu6fT8qvj/CDvNhAoaUFa6q1fUA + 67w4+Lr8lUzj2B/5k/NwApPxKII50FV0NqUNL1ccot1+oPhueXNFKI3iOZKs + 1fRsPAtPp5hUj3H/FJ20Lnk7m8Rd5WuzgcurT/fXZOrDfBZR3HC4KnihVR78 + CNZRLrLcaE9dCavwsvXo1e3Dl0sShedn0fzUP5/74zN/4lcn0VpPksbr4k9i + wytU59HRiusXkOBSQIU9CKsrniQoxkjUZV9ZVsCrmy/XXz7dXGE674NUnUGm + i7CMg8/Lr9/ub6/QIkyNB3H1oNHzVnVUKA/5MxidjMbtatlQukf2PG6/Dqti + oK5c3SRV3bHWdMG7PwAAAP//AwAniJIXyhcAAA== http_version: - recorded_at: Tue, 28 Jul 2015 20:51:22 GMT + recorded_at: Mon, 14 Sep 2015 22:34:16 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/success/succeeds.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/success/succeeds.yml index f9a339d9..e62c0bf6 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/success/succeeds.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/success/succeeds.yml @@ -10,7 +10,7 @@ http_interactions: Card Holder - camila@steuber.info + lamont.langosh@russel.info Card Holder @@ -33,7 +33,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -44,7 +44,7 @@ http_interactions: message: Created headers: Date: - - Tue, 28 Jul 2015 20:51:16 GMT + - Mon, 14 Sep 2015 22:34:10 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -65,31 +65,31 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"672433a0e7e62a6a90d9feed2cdd0bdd"' + - '"ec0d6e8f4b2959fdd26ab4b73825f015"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 1289af59630195fb7458b72bf9fc9a6c + - 3c8e4cd4b717f6b62726950a3641f614 X-Runtime: - - '0.214091' + - '0.261179' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAETrt1UAA6RTy3KbQBC8+yso7rDoZcmqFXJVqlL5AOeSi2tgR2iTfZDd - wQh/fRbQyyGXlI/T3fPYbuD7k1bRGzovrdnFszSLIzSlFdJUu/j7y9dkE+/z - B142nqxGlz9EEZci32TrZbbYPHIWih4LXHkEQ0mo3wuz6t5/P9G61e1pOefs - nu3VB+k8JQY05l/ACc7ugJ5XcKm+WSXQcXZDer60ugbTRUaqXUyuwZgNOGqQ - Ki9BSwXPnrAp0KXSHCxnI9WL6qM1OGk9wGmCtVh4SVNt6RAIRQIUUVfjLhah - JKkxzufZbJVk62S+eZln29VsO3v8wdmtYehvavF//beGcf+QRnKQqIS/niQk - JWVw05+HgnPQnS+uoatBJVCWtjH0UdELJpIRDDDZX2jyZfu0WLScjdWFGz39 - CQZTYfEZT6BrhWlI587vQSnwAI26PLewViGYOO895exMXsVSQ4VJ41R+JKr9 - ljHwHsmnhQNpyCFWwY0Wun4TC3drNPSqkY5WvCpbWTa+Ja1NtUfzJp01vWTn - wYjCnsJHe91w2fnJSIcZn4x1mOGbwpdO1hT+x38EGRRsGtTfmB9AEMJhMG4y - Jhx//Z3/AAAA//8DALVm5K8BBAAA + H4sIAGJL91UAA6RTy27cMAy85ysM323tM8kutN4ABYp+QHrpJaAt2qtGohxJ + ztr5+sr2vhr3UuTI4ZAUZ0S+b7WK3tE6aWgXz9NZHCEVRkiqdvHP5+/JY7zP + 7njROG802uwuirgU2XozW67u75echaDHQq44APkkxB85rbuPt41/OOpju1pw + dpvt2aW0zicEGrNvYAVnN0CfV3COfhgl0HJ2Rfp8YXQN1EUk1S72tsGYDThq + kCpToA35VAFVxh2ebOMcqlRSaTgbGT23PhjCSYcS2gl2xNxJP+UWFsGjSMBH + vqtxF4sQeqkxzhaz+TqZbZL56nmx2C5X29nmF2fXgqG+qcX/1V8LxvmDKUkp + UQl3eZKQPimCqO7UFKyF7vTiGroaVAJFYRryfzN6woQyggH25hUpe3hsV6Xm + bIzOuVHT30CYCoNP2IKuFabBpBu9B6bAEhp1Xjc3RiFQnPWacnZKXshSQ4VJ + Y1V28L52W8YgGOldmluQ5C1iFdQ4QtdPYuHdGsm/aPQHI16UqQwbd0lrqvZI + 79Ia6ik7ByRy04a/e5lwnvlFS4ceX7R16OGa3BVW1j6c5T+MHDi5VCqcaQJV + kKJfLFzX5z8aaGzq6GfMDSAIYTEoPJkXtryc/x8AAAD//wMAq04AmTEEAAA= http_version: - recorded_at: Tue, 28 Jul 2015 20:51:18 GMT + recorded_at: Mon, 14 Sep 2015 22:34:10 GMT - request: method: post uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers @@ -98,11 +98,11 @@ http_interactions: string: | - jane.doe@example.com + paypal - camila@steuber.info + lamont.langosh@russel.info - jane.doe@example.com + paypal 10 Lovely Street Northwest @@ -123,7 +123,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -134,7 +134,7 @@ http_interactions: message: Created headers: Date: - - Tue, 28 Jul 2015 20:51:17 GMT + - Mon, 14 Sep 2015 22:34:10 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -155,31 +155,31 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"5455ae74d342664e29a81deaee3e289b"' + - '"d54d5017e08a215ab39ca223c4f02efd"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 756d98c456ec27a7d57687d7bfb49d5a + - f90ce8f4a6e0e32f434f5a95a1189423 X-Runtime: - - '0.182270' + - '0.289195' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAEXrt1UAA6STzXbiMAyF932KnOwTAy1QOCF0NU/Q2cymR4kFeGrLrq0U - 0qcfJwHambCZ06Xu/fRjKSm2J6OTd/RBWdqk03ySJki1lYr2m/Tn84/sMd2W - d0XdBLYGfXmXJIWS5fx+sbpfzR8KEYNOi159AOIsxh8VzduPtxUvj+Z4epgV - 4qvb0TvlA2cEBsvfQJhLi094AuM05rU1hfgCdLyGc5SQ0puUfYOp6J1IO6B2 - pKMBpcsajNLwFBibCn2uaGcLMVgd5A6WxiV3cBppR6yC4hvtPQKjzIATbh1u - UhlDVgbTcjaZzrPJMps9Ps8m6/l0PV38KsRnQp/fOPl/+Z8JQ//+LtlOoZbh - OpJUnNXgZTgXBe+hPU/soHWgM6hr2xD/TXTACBnEKLN9RSqlo+ViUYghunjD - Tm/f8rrvnpS4g0ZfnltZqxEoLbudFuJsXmFlYI9Z43V5YHZhLQSEgBzyyoMi - 9oj7uI0jtF0nEec2SPxikA9Wvmi7t2J4S+5ov0V6V95Sh2wCkKzsKX6+1w6X - nt88aV/jm2fta4SmCrVXjuOfeeOQkRDjQ/2rhV4EKT3GxY3KxOGvP/YfAAAA - //8DAH3AOCELBAAA + H4sIAGJL91UAA6RTy3KjMBC85yso7kK246yNC+Oc9guyl72kBjSAEmnESiI2 + +foVYDvekMtWjtPT8+qWssNJq+gNrZOG9vEyWcQRUmmEpHof/3r6ybbxIb/L + ys55o9Hmd1GUSZFvlqvtj3STZjwEAxZyZQPkWYjfC3ro3/+kfnPUx9N6lfHb + 7MCupHWeEWjMW+hbUBm/gQaGgnMUkVT72NsOYz5mSqNboH6GowapcgXakE8U + UG1c82g751AlkiqT8YkxcNvG0LxzBacZdsTCSf/FFhbBo2DgI9+3uI9FCL3U + GOerxfKBLVK2XD+tVrv79W65+J3xj4KxvmvF/9V/FEzzR0NYJVEJd11JSM9K + sMKdm4K10J83noRmUJamI/8vYyDMKBMYYG9ekfLmPt02x4xP0SU3afoChIkw + +Ign0K3CJJh0o/fIFFhBpy7nFsYoBIrzQdOMn5NXstRQI+usyhvvW7fjHIKR + 3iWFBUneItZBjSP0wyQe9tZI/lmjb4x4VqY2fLolaak+IL1Ja2ig7B2QKMwp + vNvrhMvMb1o69vimrWMP1xWutLL14Ut+YeTIKaRS4YsyqIMUw2HhZ31+o4HG + 545+xtwIghAWg8KzeeHK69f/CwAA//8DALTaeVYtBAAA http_version: - recorded_at: Tue, 28 Jul 2015 20:51:18 GMT + recorded_at: Mon, 14 Sep 2015 22:34:11 GMT - request: method: post uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions @@ -188,21 +188,21 @@ http_interactions: string: | - R398841647-JHUKE3CE + R683011820-VGXH7FSZ 45.75 Solidus - 10 Lovely Street + A Different Road Northwest Herndon AL US 35005 - dpn766 - 53693954 + h398hw + 71286979 sale headers: @@ -211,7 +211,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -222,7 +222,7 @@ http_interactions: message: Created headers: Date: - - Tue, 28 Jul 2015 20:51:17 GMT + - Mon, 14 Sep 2015 22:34:11 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -243,60 +243,60 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"e0c0b43c86a849e4b8335d4cc0d1d1db"' + - '"7d31e00fd3e73331fbf133e0825bdf00"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 6228a9b107f2fe507e611b1bc0681cd1 + - e605389f6104907e761f855205a3b554 X-Runtime: - - '0.335533' + - '0.305350' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - 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 - XsOgSpZW843e/Q0AAP//AwAiHAz6NxUAAA== + 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 http_version: - recorded_at: Tue, 28 Jul 2015 20:51:19 GMT + recorded_at: Mon, 14 Sep 2015 22:34:11 GMT - request: method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/dn94w8/submit_for_settlement + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/5jm8f4/submit_for_settlement body: encoding: UTF-8 string: | @@ -310,7 +310,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -321,7 +321,7 @@ http_interactions: message: OK headers: Date: - - Tue, 28 Jul 2015 20:51:18 GMT + - Mon, 14 Sep 2015 22:34:12 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -342,57 +342,57 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"2d8cad3f7df2b798b2f08ac76e29fe42"' + - '"ae193a7f6a2efb68ddc99fce87be7399"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - c865ecc6a14cfc2e70febf48a15fe43d + - dc45692e06bc266acc5f2e6f2e0df451 X-Runtime: - - '0.207284' + - '0.308121' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - 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 - //8DANMkpt19FwAA + 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 + 5RonqfaODaaLnv0BAAD//wMAqLxdHM0XAAA= http_version: - recorded_at: Tue, 28 Jul 2015 20:51:20 GMT + recorded_at: Mon, 14 Sep 2015 22:34:12 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/returns_a_client_token.yml b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/returns_a_client_token.yml deleted file mode 100644 index 0396e1d3..00000000 --- a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/returns_a_client_token.yml +++ /dev/null @@ -1,79 +0,0 @@ ---- -http_interactions: -- request: - method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token - body: - encoding: UTF-8 - string: | - - - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Tue, 28 Jul 2015 20:50:44 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - '"fc4f6c796b06b8c6f6709aa201c70171"' - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 7b3e9548b19ab1894bf7c0c4636264d7 - X-Runtime: - - '0.101200' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - H4sIACTrt1UAA7RUTW/aQBC951egvRbwBzYfFiRKk0btobkkObUVGq8H2LLe - dfbDYNL8965toA1KI1VqfRy/ee/tm9FML7Y575SoNJNiRoK+TzooqMyYWM7I - w/1Nb0wuzs+mlDMUpmfkGsX5WaczLYFbPH8i+1aSBF0C1qykYjswrnLjGFAV - iglDEjLABQ4z8AcBUIQgC0bxOED0YQzxeBjQBaQphjiM4iiGiKZDP3Lw4WQS - xlEwgskPqhAMZnMws9AP4p4/6oXj+9BPYj+Jor4/Hk2Gg9iP3vnu+2p9Pxzm - qOgKhJmzbLZLRVztHidmtMk32yhsEYVNOaPzNVazKp9k3zePxXqbloPtzpAu - oVIs2PJBced/ZUyhE8+DgvU1iCyV236qwD1OIS6dsw1UfSpz52XgHYS1dyrr - tTnOHY1XBl6rYFUTWK24As7R5aZJ8uVbl6AomZIixybDvW6Na1guC/a/zDkN - 0BqNPhFoaq9yk3b8J3hX6Zcocvmmr7pXAK8Mo+7hT8S+INmv3hHxNtVzl5iV - q13fIbUKPwhIOWYkMcriy1+1EpdybYt/m2KjMc/mulHxWonaVwFVAfzEUVus - vWRMFxyqW8idNXJXOJbjqD85vLCcO7xiJdDql2XnGLeQFxxrc15RuCarUV0u - HUG9OX+EGqkdNgWNfzXlV/aCrpCupTX99jV7ZMYUUvP+wN/6dwsuNx9d3yGA - 33b8Vt6i2Ui1fuWfU5OLBWeiDsWKEo27Bp/3UyDJArh2DUfPV8fYSA7aOFxT - GLjmw+guKZV2j9GHtK1S7vxVn7S8klk9h4e763p2VDJRJ3WcXiP4PPXaO3g2 - 9V5eyJ8AAAD//wMAm3G+xlgFAAA= - http_version: - recorded_at: Tue, 28 Jul 2015 20:50:46 GMT -recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/returns_a_content_type_of_application/json.yml b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/returns_a_content_type_of_application/json.yml deleted file mode 100644 index d115b8a7..00000000 --- a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/returns_a_content_type_of_application/json.yml +++ /dev/null @@ -1,79 +0,0 @@ ---- -http_interactions: -- request: - method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token - body: - encoding: UTF-8 - string: | - - - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Tue, 28 Jul 2015 20:50:43 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - '"3b37d2f4128366e910c8f32fb53ad33c"' - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 1ea60596fe295b9f44128c7d18357dc0 - X-Runtime: - - '0.178202' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - H4sIACPrt1UAA7RUTW/aQBC951egvRawscEGCxKlSaP20FySnNoKrdcDbFnv - OvthMGn+e8c20AalkSq19m32zXtv34x2erHNRacEbbiSMzLo+6QDkqmMy+WM - PNzf9Mbk4vxsygQHaXtWrUGen3U605IKB+dPZN9KkkGXUGdXSvMdtVi5QQbQ - hebSkoRkNI0HIfOzmPqD8TikIQBN/QCyER0v0nEc4D/wsygaRws/DBEcjIZB - lsbDeETDyQ+mgVrI5tTOAn8w6vlxLxjfB34y8pNh2I9GQTSMgmjyzsfvq/P9 - IMpBsxWVds6z2S6Vo2r3OLHxJt9sh0GLKFwqOJuvoZpV+ST7vnks1tu0DLc7 - S7qEKbngywct0P/K2sIknkcL3jdUZqna9lNN8XIaYInONrTqM5Unw2HoHYSN - dyrrtTnOkcYrB16r4HQTWK24okIA5mZI8uVbl4AsuVYyhybDvW6Na1guC/6/ - zKEGNQasORFoaq9yk3b8J3is9EuQuXrTV90rqagsZ3jxJ+JekOxX74h4m+q5 - S+wKa9d3wJyGD5KmAjKSWO3g5VGtJJRau+LfpthozLO5aVS8VqL2VdCqoOLE - UVusvWTcFIJWtzRHa+SuQJbjqD8hXjohEK95SVn1yzI6hi3NCwG1Oa8osMkZ - 0JdLJKg3549QqwxiU2rgr6b8yl6wFbC1crbf3maPzLgGZt8f+Fv/uOBq8xH7 - DgH8tuO36hbsRun1K2eophYLwWUdipMlWHwNPu+nQJIFFQYbjp6vjrGRnBqL - uKYQYvNhdJeMKbfHmEPaTmt8/qpPRl2prJ7Dw911PTumuKyTOk6vEXyeeu07 - eDb1Xr6QPwEAAP//AwCKmDtWWAUAAA== - http_version: - recorded_at: Tue, 28 Jul 2015 20:50:45 GMT -recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/returns_an_http_success.yml b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/returns_an_http_success.yml deleted file mode 100644 index 1a7de27b..00000000 --- a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/returns_an_http_success.yml +++ /dev/null @@ -1,79 +0,0 @@ ---- -http_interactions: -- request: - method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token - body: - encoding: UTF-8 - string: | - - - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.46.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Tue, 28 Jul 2015 20:50:43 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - close - X-Authentication: - - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 - Etag: - - '"a98a3c7839959c97577aff8f089f3d4a"' - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 20fc03cbf8a0ea4fc7180c1c7c9de94c - X-Runtime: - - '0.157002' - X-Frame-Options: - - SAMEORIGIN - body: - encoding: ASCII-8BIT - string: !binary |- - H4sIACPrt1UAA7RUTW/aQBC951egvRbwJwYsSJQmjdpDc0lyaiu03h3DlvWu - sx8Gk+a/d20DbVAaqVLr4/jNe2/fjGZ2sS14rwKlmRRzFAx91ANBJGViOUcP - 9zeDCbo4P5sRzkCYgZFrEOdnvd6swtzC+RPat6I06CNszUoqtsPGVW4cA6hS - MWFQiqLEn45pEo4xSeJoOsqD0YTmhGSTIMpomFAaYxz5EMbJCIIc4zjJkiCe - TCCEaRjBD6IAG6ALbOahH4wG/ngQTu5DPx35aRwNg3g6CpMk8N/57vtqfT9M - ClBkhYVZMDrfZWJU7x6nZrwpNts47BClzTgjizXU87qY0u+bx3K9zapouzOo - j4gUOVs+KO78r4wpdep5uGRDjQXN5HaYKewepwCWztkG10MiizSOI+8grL1T - Wa/LceFovCrwOgWr2sAaxRXmHFxuGqVfvvURiIopKQpoM9zrNriW5bJk/8uc - 08Bag9EnAm3tVW7Ujf8E7yrDCkQh3/TV9ArMa8OIe/gTsi9I9qt3RLxN9dxH - ZuVq13dArIIPAmccKEqNsvDyV6PEpVzb8t+m2Gos6EK3Kl4n0fgqcV1ifuKo - KzZeKNMlx/UtLpw1dFc6luOoPzm8sJw7vGIVJvUvy84xbHFRcmjMeWXpmqwG - dbl0BM3m/BFqpHbYDGv4qym/shdkBWQtrRl2r9kjKVNAzPsDf+ffLbjcfHR9 - hwB+2/FbeQtmI9X6lX9OTeY5Z6IJxYoKjLsGn/dTQGmOuXYNR89Xx9hQgbVx - uLYQuebD6C4JkXaP0Ye0rVLu/NWftLyStJnDw911MzsimWiSOk6vFXyeed0d - PJt5Ly/kTwAAAP//AwChrQ7tWAUAAA== - http_version: - recorded_at: Tue, 28 Jul 2015 20:50:45 GMT -recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/with_a_payment_method_id/returns_a_client_token.yml b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/with_a_payment_method_id/returns_a_client_token.yml index 1d000401..f7e489d5 100644 --- a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/with_a_payment_method_id/returns_a_client_token.yml +++ b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/with_a_payment_method_id/returns_a_client_token.yml @@ -15,7 +15,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -26,13 +26,22 @@ http_interactions: message: Created headers: Date: - - Tue, 04 Aug 2015 20:51:48 GMT + - Mon, 14 Sep 2015 19:38:23 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked Connection: - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff + X-Ua-Compatible: + - chrome=1 X-Authentication: - basic_auth Strict-Transport-Security: @@ -44,36 +53,32 @@ http_interactions: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"e6c775d2994ffce32850ca4edb36b180"' + - '"e0970b4b548ebcfd8f8a22d7875abc4c"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 83db7e27d41ec30dece923aab021086f + - 7c09e8af-2964-4d91-a294-a9186bf4a1f6 X-Runtime: - - '0.165173' - X-Frame-Options: - - SAMEORIGIN + - '0.392126' body: encoding: ASCII-8BIT string: !binary |- - H4sIAOQlwVUAA7RUTW/aQBC951egvZbgTwhYkChNGrWH5pLk1FZovB7DlvWu - sx8Gk+a/d20DbVAaqVLr4/jNe2/fjGZ6sSl4r0KlmRQzEgx80kNBZcbEYkYe - 7m9Ox+Ti/GRKOUNhTo1coTg/6fWmFXCL509k10qSoE/AmqVUbAvGVW4cA6pS - MWFIQoJxmvoQRoBZFKcU83AEaU6RjoI8C2ESRJOzKI9TiIM0ysMIY4jH+QhT - OsIsGIU/qEIwmM3BzEI/GJ7641M/vg/9ZBgk8XgwHI/CYRj643e++75a3w9H - BSq6BGHmLJttUzGst48Tc7Yu1ps47BClTTmj8xXWs7qYZN/Xj+Vqk1bRZmtI - n1ApcrZ4UNz5XxpT6sTzoGQDDSJL5WaQKnCPU4gL52wN9YDKIonjyNsLa+9Y - 1utynDsarwq8TsGqNrBGcQmco8tNk+TLtz5BUTElRYFthjvdBteyXJbsf5lz - GqA1Gn0k0NZe5Sbd+I/wrjKoUBTyTV9NrwBeG0bdw5+IfUGyW70D4m2q5z4x - S1e7vkNqFX4QkHLMSGKUxZe/GiUu5cqW/zbFVmOezXWr4nUSja8S6hL4kaOu - 2HjJmC451LdQOGvkrnQsh1F/cnhhOXd4xSqg9S/LzjFuoCg5Nua8snRNVqO6 - XDiCZnP+CDVSO2wKGv9qyq/sBV0iXUlrBt1rdsiMKaTm/Z6/8+8WXK4/ur59 - AL/t+K28RbOWavXKP6cm85wz0YRiRYXGXYPPuymQJAeuXcPB89UhNlKANg7X - FiLXvB/dJaXS7jB6n7ZVyp2/+pOWVzJr5vBwd93MjkommqQO02sFn6dedwdP - pt7LC/kTAAD//wMA/rlv2lgFAAA= + H4sIAC8i91UAA7RUTW/aQBC951egvRb8jTEWJEqTRs0huSQ5tRVar8ewZb3r + 7IfBpPnvXWOgBaWRKrU+jt+89+bNaCcX65L1apCKCj5FvuOhHnAicsrnU/T0 + eDNI0MX52YQwClwPtFgCPz/r9SY1ZgbOX9CuFaV+H2GjF0LSDda2cmMZQFaS + co1SNEqGUR6MIAiycUhIHuA4DvM48KHIisgrRmEQkdArcBANcRH5OQ4TEsQe + TsLEi4PkB5GANeQzrKeB5w8H3njgR4/+OA2TNAidyPO9MI798QfPfl+N5wVx + CZIsMNczmk83GR82m+exHq3K1ToKOkRlMkbJbAnNtCnH+ffVc7VcZ3W43mjU + R0Twgs6fJLP+F1pXKnVdXFFHYZ5nYu1kEtvhJMDcOlvhxiGiTKModPfCyj2V + dbscZ5bGrX23UzByG1iruMCMgc1NofTLtz4CXlMpeAnbDHe6LW7LclnR/2XO + amClQKsTgW3tTW7Urf8EbytODbwU7/pqezlmjabEDv6CzBHJ7vQOiPepXvtI + L2zt+gGIkfCJ44xBjlItDRz/apWYEEtT/dsUtxqzfKa2Km4n0fqqcFNhduKo + K7Zecqoqhpt7XFpr6KGyLIdV31o8N4xZvKQ1Js0vy9YxrHFZMWjNuVVlm4wC + eTm3BO3l/BGqhbLYDCv4qy2/cRdkAWQpjHa6aXbInEog+uOev/NvD1ysPtu+ + fQC/3fi9uAe9EnL5xj+rJoqCUd6GYngN2r4Gd7stoLTATNmGg+erQ2yoxEpb + 3LYQtgNTZmnmh3zUYSM7kv1uLwkRZkei9uswUtr3sblV4krk7aKeHq7b5RJB + eRvlMdnrxO0eyrOJe/yE/gQAAP//AwDfX2RfeQUAAA== http_version: - recorded_at: Tue, 04 Aug 2015 20:52:04 GMT + recorded_at: Mon, 14 Sep 2015 19:38:23 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/with_a_payment_method_id/returns_a_content_type_of_application/json.yml b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/with_a_payment_method_id/returns_a_content_type_of_application/json.yml index 30e79bcd..dba433d3 100644 --- a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/with_a_payment_method_id/returns_a_content_type_of_application/json.yml +++ b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/with_a_payment_method_id/returns_a_content_type_of_application/json.yml @@ -15,7 +15,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -26,13 +26,22 @@ http_interactions: message: Created headers: Date: - - Tue, 04 Aug 2015 20:51:48 GMT + - Mon, 14 Sep 2015 19:38:22 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked Connection: - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff + X-Ua-Compatible: + - chrome=1 X-Authentication: - basic_auth Strict-Transport-Security: @@ -44,36 +53,32 @@ http_interactions: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"781cd592bff63ec41d5cd7c1ae631c1a"' + - '"24eda6b83c8f33053954ead04a5c7dc3"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - ab3e2e109fb5ebea46909b73ed7bbf0d + - c611f258-78a2-4223-aa6f-d83f2b7276e4 X-Runtime: - - '0.130490' - X-Frame-Options: - - SAMEORIGIN + - '0.257911' body: encoding: ASCII-8BIT string: !binary |- - H4sIAOQlwVUAA7RUTW/aQBC951egvRbwJ2AsSJQmjdpDc0lyaiu03h3DlvWu - sx8Gk+a/d20DbVAaqVLr4/jNe2/fjGZ2sS14rwKlmRRzFAx91ANBJGViOUcP - 9zeDBF2cn80IZyDMwMg1iPOzXm9WYW7h/AntW1Ea9BG2ZiUV22HjKjeOAVSp - mDAoRTQJo/GExDEZ+ROIsiwPojwi1I9pnozHOYQBpWOaj0gUQEKTjEzDqT+Z - jMa5n5Bw9IMowAboApt56AejgZ8M/Pg+9NNRkMbJ0A+iOPanYfDOd99X6/vh - uABFVliYBaPzXSZG9e5xaiabYrONww5R2owzslhDPa+LKf2+eSzX26yKtjuD - +ohIkbPlg+LO/8qYUqeeh0s21FjQTG6HmcLucQpg6ZxtcD0kskjjOPIOwto7 - lfW6HBeOxqsCr1Owqg2sUVxhzsHlplH65VsfgaiYkqKANsO9boNrWS5L9r/M - OQ2sNRh9ItDWXuVG3fhP8K4yrEAU8k1fTa/AvDaMuIc/IfuCZL96R8TbVM99 - ZFaudn0HxCr4IHDGgaLUKAsvfzVKXMq1Lf9tiq3Ggi50q+J1Eo2vEtcl5ieO - umLjhTJdclzf4sJZQ3elYzmO+pPDC8u5wytWYVL/suwcwxYXJYfGnFeWrslq - UJdLR9Bszh+hRmqHzbCGv5ryK3tBVkDW0pph95o9kjIFxLw/8Hf+3YLLzUfX - dwjgtx2/lbdgNlKtX/nn1GSecyaaUKyowLhr8Hk/BZTmmGvXcPR8dYwNFVgb - h2sLkWs+jO6SEGn3GH1I2yrlzl/9ScsrSZs5PNxdN7MjkokmqeP0WsHnmdfd - wbOZ9/JC/gQAAP//AwCLkjm+WAUAAA== + H4sIAC4i91UAA7RUTW/aQBC951egvRbwtwELEqVJo+aQXJKc2gqtdwfYst51 + 9sNg0vz3rjHQgtJIlVofx2/ee/NmtOOLdcE7FSjNpJigoO+jDggiKRPzCXp6 + vOkN0cX52ZhwBsL0jFyCOD/rdMYV5hbOX9CuFWVBF2FrFlKxDTaucuMYQJWK + CYMyBDjEcQg0J0mapjAbkAHEPo3oLB0k4TCHIY6CAAOlSUwgHYQEXHWYgJ9E + JIiHP4gCbIBOsZmEfpD0/FEviB+DURYNszDsp+kw9ZNBGn3w3ffV+n6YFqDI + AgszZXSyyUVSb55HZrAqVus4bBGlzTkj0yXUk7oY0e+r53K5zqtovTGoi4gU + MzZ/Utz5XxhT6szzcMn6Gguay3U/V9gNpwDmztkK130iiyyOI28vrL1TWa/N + cepovCrwWgWrtoE1igvMObjcNMq+fOsiEBVTUhSwzXCn2+C2LJcl+1/mnAbW + Gow+EdjW3uRG7fpP8K7Sr0AU8l1fTa/AvDaMuMFfkD0i2Z3eAfE+1WsXmYWr + XT8AsQo+CZxzoCgzysLxr0aJS7m05b9NcasxpVO9VfFaicZXiesS8xNHbbHx + QpkuOa7vceGsoYfSsRxWfevwwnLu8IpVmNS/LDvHsMZFyaEx55Wla7Ia1OXc + ETSX80eokdphc6zhr7b8xl2QBZCltKbfTrNDUqaAmI97/ta/O3C5+uz69gH8 + duP38h7MSqrlG/+cmpzNOBNNKFZUYNxrcLfbAspmmGvXcPB8dYgNFVgbh9sW + omZgxh3N/JCPPmxkR7Lf7SUh0u5I9H4dVin3Pta3Wl5J2izq6eG6WS6RTDRR + HpO9jr32oTwbe8dP6E8AAAD//wMARsrGQ3kFAAA= http_version: - recorded_at: Tue, 04 Aug 2015 20:52:04 GMT + recorded_at: Mon, 14 Sep 2015 19:38:22 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/with_a_payment_method_id/returns_an_http_success.yml b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/with_a_payment_method_id/returns_an_http_success.yml index e4543e99..0ba6e526 100644 --- a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/with_a_payment_method_id/returns_an_http_success.yml +++ b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/with_a_payment_method_id/returns_an_http_success.yml @@ -15,7 +15,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -26,7 +26,7 @@ http_interactions: message: Created headers: Date: - - Tue, 04 Aug 2015 20:51:47 GMT + - Mon, 14 Sep 2015 19:38:22 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -47,33 +47,33 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"40665863bc7c39f60d0f540c7a2f4751"' + - '"114b836af38ebadd15f19c51ca9cb106"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 05078dc6b32e5278afbfd1e1830a2181 + - 291d71752b63cfac034c5818e1d3e9ce X-Runtime: - - '0.207337' + - '0.119904' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAOMlwVUAA7RUXW/aMBR9769Afh0QBxISImjVtau2h/Wl7dM2Ice5AQ/H - Tv0RCF3/+5wE2Iq6SpM2P16fe87xuVeeXWwL3qtAaSbFHPlDjHogqMyYWM7R - w/3NIEYX52czyhkIMzByDeL8rNebVYRbOH9C+1aU+H1ErFlJxXbEuMqNYwBV - KiYMShCe4CzPgzhOKc4hDvJpFvs4CidhHkY4y8bjFKfTmKQ4H5EomEzDyJ+Q - MHRXmJKY/qAKiIFsQcx8hP1wgOMBDu5HOAn9JIiGoR9EU3+Mx++wO18txqNJ - AYquiDALls13qQjr3ePURJtisw1GHaK0KWd0sYZ6XhfT7PvmsVxv02q83RnU - R1SKnC0fFHf+V8aUOvE8UrKhJiJL5XaYKuIepwCWztmG1EMqiyQIxt5BWHun - sl6X48LReJXvdQpWtYE1iivCObjcNEq+fOsjEBVTUhTQZrjXbXAty2XJ/pc5 - p0G0BqNPBNraq9yoG/8J3lWGFYhCvumr6RWE14ZR9/AnZF+Q7FfviHib6rmP - zMrVru+AWgUfBEk5ZCgxysLLq0aJS7m25b9NsdVYZAvdqnidROOrJHVJ+Imj - rth4yZguOalvSeGsobvSsRxH/cnhheXc4RWrCK1/WXaOYUuKkkNjzitL12Q1 - qMulI2g2549QI7XDpkTDX035lb2gK6Brac2we80emTEF1Lw/8Hf+3YLLzUfX - dwjgtx2/lbdgNlKtX7lzajLPORNNKFZUYNxv8Hk/BZTkhGvXcPR8dYwNFUQb - h2sLY9d8GN0lpdLuMfqQtlXKfX/1Jy2vZNbM4eHuupkdlUw0SR2n1wo+z7zu - HzybeS9/yJ8AAAD//wMASkF0fFgFAAA= + H4sIAC4i91UAA7RUy27bMBC85ysMXmtbL78k2AnSpEFzSC5JTm1hUOTKZk2R + Ch+y5TT/Xkqy3dpIAxRodVzNzszOLji92OS8U4LSTIoZCvo+6oAgkjKxmKGn + x5veBF2cn00JZyBMz8gViPOzTmdaYm7h/AXtWlESdBG2ZikV22LjKjeOAVSh + mDAoQeNRPIpwRoPJKKBZmoaYDCFLM5+6QkAnkzCmZBTG4zGmA0IDwH5KaDgY + DrOIDGn6gyjABugcm1noB8OeH/eCwWMQJ9EkCcO+PwmjURRHkw+++75a3w9H + OSiyxMLMGZ1tUzGsts+xGa/z9WYQtojCppyR+QqqWZXH9Pv6uVht0jLabA3q + IiJFxhZPijv/S2MKnXgeLlhfY0FTuemnCrvhFMDCOVvjqk9kngwGkbcX1t6p + rNfmOHc0Xhl4rYJVTWC14hJzDi43jZIv37oIRMmUFDk0Ge50a1zDclmw/2XO + aWCtwegTgab2Jjdq13+Cd5V+CSKX7/qqewXmlWHEDf6C7BHJ7vQOiPepXrvI + LF3t+gGIVfBJ4JQDRYlRFo5/1UpcypUt/m2KjcacznWj4rUSta8CVwXmJ47a + Yu2FMl1wXN3j3FlDD4VjOaz61uGF5dzhFSsxqX5Zdo5hg/OCQ23OKwrXZDWo + y4UjqC/nj1AjtcOmWMNfbfmNuyBLICtpTb+dZoekTAExH/f8rX934HL92fXt + A/jtxu/lPZi1VKs3/jk1mWWciToUK0ow7jW4220BJRnm2jUcPF8dYkM51sbh + mkJUD8y4o1kc8tGHjexI9ru9JETaHYner8Mq5d7H6lbLK0nrRT09XNfLJZKJ + Ospjstep1z6UZ1Pv+An9CQAA//8DACQQIct5BQAA http_version: - recorded_at: Tue, 04 Aug 2015 20:52:03 GMT + recorded_at: Mon, 14 Sep 2015 19:38:22 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/without_a_payment_method_id/returns_a_client_token.yml b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/without_a_payment_method_id/returns_a_client_token.yml index 03b90047..c5583c56 100644 --- a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/without_a_payment_method_id/returns_a_client_token.yml +++ b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/without_a_payment_method_id/returns_a_client_token.yml @@ -15,7 +15,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -26,13 +26,22 @@ http_interactions: message: Created headers: Date: - - Tue, 04 Aug 2015 20:58:40 GMT + - Mon, 14 Sep 2015 19:38:25 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked Connection: - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff + X-Ua-Compatible: + - chrome=1 X-Authentication: - basic_auth Strict-Transport-Security: @@ -44,36 +53,32 @@ http_interactions: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"f659ccdce4af1ce619cec00dd6ffa0cf"' + - '"65b37080f7126ea9c3c54bdc07e790f5"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - e9936da618db03bf8dc0fd91327d46a4 + - e365c9a0-bc90-4add-bd27-bc89ac447dff X-Runtime: - - '0.213516' - X-Frame-Options: - - SAMEORIGIN + - '0.549933' body: encoding: ASCII-8BIT string: !binary |- - H4sIAIAnwVUAA7RUy27bMBC85ysMXmvrZcmWBDtBmjRoD80lyaktDIpa2awp - UuFDtpzm30tJttsYaYACrY6r2Znh7GJnF9uSDWqQigo+R77joQFwInLKl3P0 - cH8zitHF+dmMMApcj7RYAz8/GwxmNWYGzp/QvhWl/hBho1dC0h3WtnJjGUBW - knKNUjRJAh+Pg2gCGEdF6OVZ6E3zPIy9IE68JIzCYgyT2CNZFEBU+EWQR2FS - +HEWxhOcT34QCVhDvsB6Hnh+NPLikRfeB14axWnoOf40mYZxEsfvPPt9NZ4X - TEqQZIW5XtB8vst41OweEz3dlJttGPSIymSMksUamnlTJvn3zWO13mb1eLvT - aIiI4AVdPkhm/a+0rlTquriijsI8z8TWySS2j5MAS+tsgxuHiDINw7F7EFbu - qazb57iwNG7tu72CkV1greIKMwY2N4XSL9+GCHhNpeAldBnudVtcx3JZ0f9l - zmpgpUCrE4Gu9io36sd/grcVpwZeijd9tb0cs0ZTYh/+hMwLkv3qHRFvUz0P - kV7Z2vUdECPhA8cZgxylWhp4+atVYkKsTfVvU+w0FvlCdSpuL9H6qnBTYXbi - qC+2XnKqKoabW1xaa+iusizHUX+yeG4Ys3hJa0yaX5atY9jismLQmnOryjYZ - BfJyaQnazfkjVAtlsRlW8FdTfmUvyArIWhjt9K/ZI3Mqgej3B/7ev11wsflo - +w4B/Lbjt+IW9EbI9Sv/rJooCkZ5G4rhNWh7DT7vp4DSAjNlG46er46xoRIr - bXFdYWybD6O7JESYPUYd0jZS2vPXfFLiSuTtHB7urtvZEUF5m9Rxep3g88zt - 7+DZzH15IX8CAAD//wMAEIiXelgFAAA= + H4sIADEi91UAA7RUy27bMBC85ysMXmtb78QS7ARp0qA5JJckp7YwKHJls6ZI + hQ/Zcpp/L2XZbm2kAQq0Oq5mZ2ZnFxxfrEreq0FpJsUEBUMf9UAQSZmYTdDT + 481ghC7OT8aEMxBmYOQCxPlJrzeuMbdw/oK2rSgL+ghbM5eKrbFxlRvHAKpS + TBiUoYLGOQ0LHODTBOfghzggfhAlBOJkBBRwEifRWR6mSRAmtMCpnyQFIeEI + j8hpXNAfRAE2QKfYTEI/SAZ+OgjixyDNolEWJsMoTkdpGoXBB999X63vh6cl + KDLHwkwZnaxzkTTr59ScLcvlKg47RGVzzsh0Ac2kKVP6fflcLVZ5Ha3WBvUR + kaJgsyfFnf+5MZXOPA9XbKixoLlcDXOF3XAKYOacLXEzJLLM4jjydsLaO5b1 + uhynjsarA69TsGoTWKs4x5yDy02j7Mu3PgJRMyVFCZsMt7otbsNyWbH/Zc5p + YK3B6COBTe1NbtSt/wjvKsMaRCnf9dX2Cswbw4gb/AXZA5Lt6e0R71O99pGZ + u9r1AxCr4JPAOQeKMqMsHP5qlbiUC1v92xQ3GlM61RsVr5NofVW4qTA/ctQV + Wy+U6Yrj5h6Xzhp6qBzLftW3Di8s5w6vWI1J88uycwwrXFYcWnNeVbkmq0Fd + zhxBezl/hBqpHTbHGv5qy2/cBZkDWUhrht00WyRlCoj5uOPv/LsDl8vPrm8X + wG83fi/vwSylWrzxz6nJouBMtKFYUYNxr8HddgsoKzDXrmHv+WofGyqxNg63 + KUTtwIw7mtk+H73fyJZkt9tLQqTdkujdOqxS7n1sbrW8krRd1NPDdbtcIplo + ozwkex173UN5MvYOn9CfAAAA//8DAORoYLR5BQAA http_version: - recorded_at: Tue, 04 Aug 2015 20:58:56 GMT + recorded_at: Mon, 14 Sep 2015 19:38:25 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/without_a_payment_method_id/returns_a_content_type_of_application/json.yml b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/without_a_payment_method_id/returns_a_content_type_of_application/json.yml index 97c1fecb..4c8dc7f9 100644 --- a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/without_a_payment_method_id/returns_a_content_type_of_application/json.yml +++ b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/without_a_payment_method_id/returns_a_content_type_of_application/json.yml @@ -15,7 +15,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -26,7 +26,7 @@ http_interactions: message: Created headers: Date: - - Tue, 04 Aug 2015 20:58:39 GMT + - Mon, 14 Sep 2015 19:38:24 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -47,33 +47,33 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"8f2b4a58eb0c81d800024e9c517d8f24"' + - '"8d3ef251dfb3b3a82dab8495665ccc5c"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 02b023fc6f21ecc38663fde88f3cb2e9 + - 6577f0925af104edfffa91b1b5849af6 X-Runtime: - - '0.205694' + - '0.133121' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAH8nwVUAA7RUTW/aQBC951egvRawwSbYFiRKk0bNIbkkObUVWq8H2LLe - dfbDYNL8945toA1KI1VqfRy/ee/tm9FMzje56JSgDVdySgZ9n3RAMpVxuZiS - x4frXkTOz04mTHCQtmfVCuTZSaczKalwcPZMdq0kGXQJdXapNN9Si5VrZABd - aC4tSQgNxzSiIxoBDDOIM3rKwsEcwoyNIYpDPxyMxtQP0kEYQ5oyBKYRG0c+ - zIP0dJgFP5gGaiGbUTsd+oNRz496fvgw9JNRlARxfxTH4WgYj4MPPn5fne8P - T3PQbEmlnfFsuk3lqNo+xXa8ztebcNgiCpcKzmYrqKZVHmff10/FapOWwWZr - SZcwJed88agF+l9aW5jE82jB+4bKLFWbfqopPk4DLNDZmlZ9pvIkDANvL2y8 - Y1mvzXGGNF458FoFp5vAasUlFQIwN0OSL9+6BGTJtZI5NBnudGtcw3JR8P9l - DjWoMWDNkUBTe5ObtOM/wmOlX4LM1bu+6l5JRWU5w4c/E/eKZLd6B8T7VC9d - YpdYu7oH5jR8kjQVkJHEagevf9VKQqmVK/5tio3GLJuZRsVrJWpfBa0KKo4c - tcXaS8ZNIWh1R3O0Ru4LZDmM+gbx0gmBeM1LyqpfltExbGheCKjNeUWBTc6A - vlggQb05f4RaZRCbUgN/NeU39oItga2Us/32NTtkxjUw+3HP3/rHBVfrz9i3 - D+C3Hb9Td2DXSq/e+Idqaj4XXNahOFmCxWtwu5sCSeZUGGw4eL48xEZyaizi - mkKAzfvRXTCm3A5j9mk7rfH8VTdGXaqsnsPj/VU9O6a4rJM6TK8RfJl47R08 - mXivL+RPAAAA//8DAGgqKxdYBQAA + H4sIADAi91UAA7RUXW/aMBR9769Afh2Q7wIRtOraVdvD+tL2aZuQY9+Ah2On + /giErv99DglsoK7SpC1P0fW55xyfe+Xp5abgvQqUZlLMUDD0UQ8EkZSJxQw9 + PtwOxujy4mxKOANhBkauQFyc9XrTCnMLF8+oa0Vp0EfYmqVUbIuNq9w6BlCl + YsKgFAVRnkVZGGajAI98GAdxnPiB+x+HNJpEMfVpEiY5jEb5+TkZh2QEQP0E + R5RMojyJfhAF2ACdYzML/SAZ+JNBED8EkzQap2E8HAdRFPtJGL7z3ffV+n54 + XoAiSyzMnNHZNhNJvX2amNG6WG/isEWUNuOMzFdQz+piQr+vn8rVJquizdag + PiJS5GzxqLjzvzSm1Knn4ZINNRY0k5thprC7nAJYOGdrXA+JLNI4jry9sPZO + Zb02x7mj8arAaxWs2gXWKC4x5+By0yj98q2PQFRMSVHALsNOt8HtWK5K9r/M + OQ2sNRh9IrCrvcqN2vGf4F1lWIEo5Ju+ml6BeW0YcRd/RvaIpFu9A+Jtqpc+ + MktXu7kHYhV8EDjjQFFqlIXjo0aJS7my5b9Ncacxp3O9U/FaicZXiesS8xNH + bbHxQpkuOa7vcOGsofvSsRxG/cnhheXc4RWrMKl/WXaOYYOLkkNjzitL12Q1 + qKuFI2g2549QI7XDZljDX035lb0gSyArac2wvU2HpEwBMe/3/K1/t+By/dH1 + 7QP4bcfv5B2YtVSrV86cmsxzzkQTihUVGPcafO6mgNIcc+0aDp6vD7GhAmvj + cLtC1FyYcUezOOSjDxPpSPazvSJE2o5E78dhlXLvY/1Jy2tJm0E93t80wyWS + iSbKY7KXqdc+lGdT7/gJ/QkAAP//AwC+HO8YeQUAAA== http_version: - recorded_at: Tue, 04 Aug 2015 20:58:55 GMT + recorded_at: Mon, 14 Sep 2015 19:38:24 GMT recorded_with: VCR 2.9.3 diff --git a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/without_a_payment_method_id/returns_an_http_success.yml b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/without_a_payment_method_id/returns_an_http_success.yml index 05b2fb2c..a7442765 100644 --- a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/without_a_payment_method_id/returns_an_http_success.yml +++ b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/without_a_payment_method_id/returns_an_http_success.yml @@ -15,7 +15,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.46.0 + - Braintree Ruby Gem 2.48.1 X-Apiversion: - '4' Content-Type: @@ -26,7 +26,7 @@ http_interactions: message: Created headers: Date: - - Tue, 04 Aug 2015 20:58:39 GMT + - Mon, 14 Sep 2015 19:38:24 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -47,33 +47,33 @@ http_interactions: X-Ua-Compatible: - IE=Edge,chrome=1 Etag: - - '"17ce018de2e497a544bbafe6603ec3a2"' + - '"e476ac28f6a84e2b6b1a3c1695e63aa8"' Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 3854d6329ccd304a536b4d20062fba04 + - e87efcc242becd386443e450e135eed1 X-Runtime: - - '0.130774' + - '0.096052' X-Frame-Options: - SAMEORIGIN body: encoding: ASCII-8BIT string: !binary |- - H4sIAH8nwVUAA7RUXU/bMBR951dUfl3bOElTmqgFMRgaD/ACPG1T5Tg3rVfH - Dv5ImzL++5yk7UbFkCZtUZ6uzz3n+NwrT883Be9VoDSTYob8IUY9EFRmTCxm - 6PHhejBB52cnU8oZCDMwcgXi7KTXm1aEWzh7RrtWlPh9RKxZSsW2xLjKtWMA - VSomDEoQ9TGZhGmc0TgMoijEo/w0g0kEYX4aYDLC49QP4jgeT1I/TX3IQ0pS - wO4Pojwg9AdVQAxkc2JmAfajAZ4M8OghwEk0ScJ46ONxHI2jCH/A7vtqMQ7G - BSi6JMLMWTbbpiKqt0+xOV0X680o6BClTTmj8xXUs7qIs+/rp3K1SatwszWo - j6gUOVs8Ku78L40pdeJ5pGRDTUSWys0wVcRdTgEsnLM1qYdUFsloFHp7Ye0d - y3pdjnNH41W+1ylY1QbWKC4J5+By0yj58q2PQFRMSVFAm+FOt8G1LBcl+1/m - nAbRGow+Emhrb3KjbvxHeFcZViAK+a6vplcQXhtG3cWfkX1Fslu9A+J9qpc+ - MktXu7oHahV8EiTlkKHEKAuvjxolLuXKlv82xVZjns11q+J1Eo2vktQl4UeO - umLjJWO65KS+I4Wzhu5Lx3IY9Y3DC8u5wytWEVr/suwcw4YUJYfGnFeWrslq - UBcLR9Bszh+hRmqHTYmGv5ryG3tBl0BX0pphd5sdMmMKqPm45+/8uwWX68+u - bx/Abzt+J+/ArKVavXHm1GSecyaaUKyowLjX4HY3BZTkhGvXcPB8eYgNFUQb - h2sLoWvej+6CUml3GL1P2yrlnr/6RstLmTVzeLy/amZHJRNNUofptYIvU697 - B0+m3usX8icAAAD//wMAVmoKI1gFAAA= + H4sIADAi91UAA7RUTW/aQBC951egvRb8bWwsSJQmjZpDcklyaiu0Xg+wZb3r + 7IfBpPnvXWOgBaWRKrU+jt+89+bNaMcX65L1apCKCj5BvuOhHnAiCsrnE/T0 + eDNI0cX52ZgwClwPtFgCPz/r9cY1ZgbOX9CuFWV+H2GjF0LSDda2cmMZQFaS + co0yFCcQpcMQe1Ecpb4XB8MEJxEJvdRP/dHQBwIe5GmaeCEh2M+HoVfEOA7S + osBhEvg/iASsoZhiPQk8Px54o4EfPfqjLEyzIHJCPwiSZJiEHzz7fTWeFwxL + kGSBuZ7SYrLJedxsnkc6WZWrdRR0iMrkjJLpEppJU46K76vnarnO63C90aiP + iOAzOn+SzPpfaF2pzHVxRR2FeZGLtZNLbIeTAHPrbIUbh4gyi6LQ3Qsr91TW + 7XKcWhq39t1OwchtYK3iAjMGNjeFsi/f+gh4TaXgJWwz3Om2uC3LZUX/lzmr + gZUCrU4EtrU3uVG3/hO8rTg18FK866vt5Zg1mhI7+AsyRyS70zsg3qd67SO9 + sLXrByBGwieOcwYFyrQ0cPyrVWJCLE31b1PcakyLqdqquJ1E66vCTYXZiaOu + 2HopqKoYbu5xaa2hh8qyHFZ9a/HcMGbxktaYNL8sW8ewxmXFoDXnVpVtMgrk + 5dwStJfzR6gWymJzrOCvtvzGXZAFkKUw2umm2SELKoHoj3v+zr89cLH6bPv2 + Afx24/fiHvRKyOUb/6yamM0Y5W0ohteg7Wtwt9sCymaYKdtw8Hx1iA2VWGmL + 2xbCdmDKLM38kI86bGRHst/tJSHC7EjUfh1GSvs+NrdKXImiXdTTw3W7XCIo + b6M8Jnsdu91DeTZ2j5/QnwAAAP//AwBZy6breQUAAA== http_version: - recorded_at: Tue, 04 Aug 2015 20:58:55 GMT + recorded_at: Mon, 14 Sep 2015 19:38:24 GMT recorded_with: VCR 2.9.3 diff --git a/spec/controllers/spree/api/braintree_client_token_controller_spec.rb b/spec/controllers/spree/api/braintree_client_token_controller_spec.rb index 40083ea0..bffb0eff 100644 --- a/spec/controllers/spree/api/braintree_client_token_controller_spec.rb +++ b/spec/controllers/spree/api/braintree_client_token_controller_spec.rb @@ -2,10 +2,16 @@ describe Spree::Api::BraintreeClientTokenController, :vcr, type: :controller do describe "POST create" do + let(:current_api_user) do + user = Spree.user_class.new(:email => "spree@example.com") + user.generate_spree_api_key! + user + end + context "with a payment method id" do before do gateway = create_braintree_payment_method - post :create, id: gateway.id + post :create, payment_method_id: gateway.id, token: current_api_user.spree_api_key end it "returns an http success" do @@ -26,7 +32,7 @@ context "without a payment method id" do before do create_braintree_payment_method - post :create + post :create, token: current_api_user.spree_api_key end it "returns an http success" do diff --git a/spec/models/spree/credit_card_spec.rb b/spec/models/spree/credit_card_spec.rb index 37da22dd..18421a88 100644 --- a/spec/models/spree/credit_card_spec.rb +++ b/spec/models/spree/credit_card_spec.rb @@ -5,26 +5,12 @@ let(:payment_method) do Solidus::Gateway::BraintreeGateway.create!( name: 'Braintree Gateway', - environment: 'sandbox', active: true ) end - let(:credit_card) do - FactoryGirl.create(:credit_card, - payment_method: payment_method, - encrypted_data: nil, - gateway_customer_profile_id: nil, - gateway_payment_profile_id: nil - ) - end - - it "require_card_numbers? returns false" do - expect(credit_card.require_card_numbers?).not_to be - end - it "validate presence of name on create" do expect do - credit_card = FactoryGirl.create(:credit_card, + FactoryGirl.create(:credit_card, payment_method: payment_method, name: nil ) diff --git a/spec/solidus/gateway/braintree_gateway_spec.rb b/spec/solidus/gateway/braintree_gateway_spec.rb index 5fea1fda..61e18616 100644 --- a/spec/solidus/gateway/braintree_gateway_spec.rb +++ b/spec/solidus/gateway/braintree_gateway_spec.rb @@ -140,7 +140,7 @@ expect(card.user).to eq user expect(card.payment_method).to eq payment_method expect(card.cc_type).to eq 'paypal' - expect(card.name).to eq 'jane.doe@example.com' + expect(card.email).to eq 'jane.doe@example.com' expect(card.gateway_payment_profile_id).to be_present expect(card.gateway_customer_profile_id).to be_present @@ -182,6 +182,24 @@ expect(Spree::CreditCard.count).to eql(1) expect(Spree::CreditCard.first.gateway_payment_profile_id).to be_present end + + it "credits a completed payment" do + card.gateway_customer_profile_id = nil + auth = payment_method.authorize(5000, card, {}) + expect(auth).to be_success + capture = payment_method.capture(5000, auth.authorization, {}) + expect(capture).to be_success + credit = payment_method.credit(5000, card, auth.authorization, {}) + expect(credit).to be_success + end + + it "voids a authorized payment" do + card.gateway_customer_profile_id = nil + auth = payment_method.authorize(5000, card, {}) + expect(auth).to be_success + void = payment_method.void(auth.authorization, card, {}) + expect(void).to be_success + end end context 'on a payment' do @@ -191,7 +209,6 @@ before do payment.source.gateway_customer_profile_id = nil payment.source.save! - payment.payment_method.environment = Rails.env payment.authorize! expect(payment).to be_pending expect(payment.response_code).to be_present From 5f6c1c4b8d816dc75dbdbe6dce8d9c9f502a45c2 Mon Sep 17 00:00:00 2001 From: Jack Chu Date: Thu, 17 Sep 2015 14:52:24 -0400 Subject: [PATCH 051/163] update braintree-web to 2.14.0 --- CHANGELOG.md | 2 + .../backend/braintree/solidus_braintree.js | 2 +- .../vendor/braintree-2.13.0-beta.js | 12152 ---------------- .../javascripts/vendor/braintree-2.14.0.js | 7 + 4 files changed, 10 insertions(+), 12153 deletions(-) delete mode 100644 lib/assets/javascripts/vendor/braintree-2.13.0-beta.js create mode 100644 lib/assets/javascripts/vendor/braintree-2.14.0.js diff --git a/CHANGELOG.md b/CHANGELOG.md index f702b613..cb4cb47b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ ## HEAD +* Upgrade braintree to 2.14.0 for hosted field and teardown support. + ## 0.1.5 * Use mapping to set cc_type conventionally. diff --git a/lib/assets/javascripts/spree/backend/braintree/solidus_braintree.js b/lib/assets/javascripts/spree/backend/braintree/solidus_braintree.js index 01010ca5..a321af96 100644 --- a/lib/assets/javascripts/spree/backend/braintree/solidus_braintree.js +++ b/lib/assets/javascripts/spree/backend/braintree/solidus_braintree.js @@ -1,4 +1,4 @@ -//= require "vendor/braintree-2.13.0-beta" +//= require "vendor/braintree-2.14.0" Spree.routes.payment_client_token_api = Spree.pathFor("api/payment_client_token") diff --git a/lib/assets/javascripts/vendor/braintree-2.13.0-beta.js b/lib/assets/javascripts/vendor/braintree-2.13.0-beta.js deleted file mode 100644 index 562c08eb..00000000 --- a/lib/assets/javascripts/vendor/braintree-2.13.0-beta.js +++ /dev/null @@ -1,12152 +0,0 @@ -/*! - * Braintree End-to-End Encryption Library - * https://www.braintreepayments.com - * Copyright (c) 2009-2014 Braintree, a division of PayPal, Inc. - * - * JSBN - * Copyright (c) 2005 Tom Wu - * - * Both Licensed under the MIT License. - * http://opensource.org/licenses/MIT - * - * ASN.1 JavaScript decoder - * Copyright (c) 2008-2009 Lapo Luchini - * Licensed under the ISC License. - * http://opensource.org/licenses/ISC - */ - -(function () { - -// ASN.1 JavaScript decoder -// Copyright (c) 2008-2009 Lapo Luchini - -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. -// -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -function Stream(enc, pos) { - if (enc instanceof Stream) { - this.enc = enc.enc; - this.pos = enc.pos; - } else { - this.enc = enc; - this.pos = pos; - } -} -Stream.prototype.get = function(pos) { - if (pos == undefined) - pos = this.pos++; - if (pos >= this.enc.length) - throw 'Requesting byte offset ' + pos + ' on a stream of length ' + this.enc.length; - return this.enc[pos]; -} -Stream.prototype.hexDigits = "0123456789ABCDEF"; -Stream.prototype.hexByte = function(b) { - return this.hexDigits.charAt((b >> 4) & 0xF) + this.hexDigits.charAt(b & 0xF); -} -Stream.prototype.hexDump = function(start, end) { - var s = ""; - for (var i = start; i < end; ++i) { - s += this.hexByte(this.get(i)); - switch (i & 0xF) { - case 0x7: s += " "; break; - case 0xF: s += "\n"; break; - default: s += " "; - } - } - return s; -} -Stream.prototype.parseStringISO = function(start, end) { - var s = ""; - for (var i = start; i < end; ++i) - s += String.fromCharCode(this.get(i)); - return s; -} -Stream.prototype.parseStringUTF = function(start, end) { - var s = "", c = 0; - for (var i = start; i < end; ) { - var c = this.get(i++); - if (c < 128) - s += String.fromCharCode(c); - else if ((c > 191) && (c < 224)) - s += String.fromCharCode(((c & 0x1F) << 6) | (this.get(i++) & 0x3F)); - else - s += String.fromCharCode(((c & 0x0F) << 12) | ((this.get(i++) & 0x3F) << 6) | (this.get(i++) & 0x3F)); - //TODO: this doesn't check properly 'end', some char could begin before and end after - } - return s; -} -Stream.prototype.reTime = /^((?:1[89]|2\d)?\d\d)(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])([01]\d|2[0-3])(?:([0-5]\d)(?:([0-5]\d)(?:[.,](\d{1,3}))?)?)?(Z|[-+](?:[0]\d|1[0-2])([0-5]\d)?)?$/; -Stream.prototype.parseTime = function(start, end) { - var s = this.parseStringISO(start, end); - var m = this.reTime.exec(s); - if (!m) - return "Unrecognized time: " + s; - s = m[1] + "-" + m[2] + "-" + m[3] + " " + m[4]; - if (m[5]) { - s += ":" + m[5]; - if (m[6]) { - s += ":" + m[6]; - if (m[7]) - s += "." + m[7]; - } - } - if (m[8]) { - s += " UTC"; - if (m[8] != 'Z') { - s += m[8]; - if (m[9]) - s += ":" + m[9]; - } - } - return s; -} -Stream.prototype.parseInteger = function(start, end) { - //TODO support negative numbers - var len = end - start; - if (len > 4) { - len <<= 3; - var s = this.get(start); - if (s == 0) - len -= 8; - else - while (s < 128) { - s <<= 1; - --len; - } - return "(" + len + " bit)"; - } - var n = 0; - for (var i = start; i < end; ++i) - n = (n << 8) | this.get(i); - return n; -} -Stream.prototype.parseBitString = function(start, end) { - var unusedBit = this.get(start); - var lenBit = ((end - start - 1) << 3) - unusedBit; - var s = "(" + lenBit + " bit)"; - if (lenBit <= 20) { - var skip = unusedBit; - s += " "; - for (var i = end - 1; i > start; --i) { - var b = this.get(i); - for (var j = skip; j < 8; ++j) - s += (b >> j) & 1 ? "1" : "0"; - skip = 0; - } - } - return s; -} -Stream.prototype.parseOctetString = function(start, end) { - var len = end - start; - var s = "(" + len + " byte) "; - if (len > 20) - end = start + 20; - for (var i = start; i < end; ++i) - s += this.hexByte(this.get(i)); - if (len > 20) - s += String.fromCharCode(8230); // ellipsis - return s; -} -Stream.prototype.parseOID = function(start, end) { - var s, n = 0, bits = 0; - for (var i = start; i < end; ++i) { - var v = this.get(i); - n = (n << 7) | (v & 0x7F); - bits += 7; - if (!(v & 0x80)) { // finished - if (s == undefined) - s = parseInt(n / 40) + "." + (n % 40); - else - s += "." + ((bits >= 31) ? "bigint" : n); - n = bits = 0; - } - s += String.fromCharCode(); - } - return s; -} - -function ASN1(stream, header, length, tag, sub) { - this.stream = stream; - this.header = header; - this.length = length; - this.tag = tag; - this.sub = sub; -} -ASN1.prototype.typeName = function() { - if (this.tag == undefined) - return "unknown"; - var tagClass = this.tag >> 6; - var tagConstructed = (this.tag >> 5) & 1; - var tagNumber = this.tag & 0x1F; - switch (tagClass) { - case 0: // universal - switch (tagNumber) { - case 0x00: return "EOC"; - case 0x01: return "BOOLEAN"; - case 0x02: return "INTEGER"; - case 0x03: return "BIT_STRING"; - case 0x04: return "OCTET_STRING"; - case 0x05: return "NULL"; - case 0x06: return "OBJECT_IDENTIFIER"; - case 0x07: return "ObjectDescriptor"; - case 0x08: return "EXTERNAL"; - case 0x09: return "REAL"; - case 0x0A: return "ENUMERATED"; - case 0x0B: return "EMBEDDED_PDV"; - case 0x0C: return "UTF8String"; - case 0x10: return "SEQUENCE"; - case 0x11: return "SET"; - case 0x12: return "NumericString"; - case 0x13: return "PrintableString"; // ASCII subset - case 0x14: return "TeletexString"; // aka T61String - case 0x15: return "VideotexString"; - case 0x16: return "IA5String"; // ASCII - case 0x17: return "UTCTime"; - case 0x18: return "GeneralizedTime"; - case 0x19: return "GraphicString"; - case 0x1A: return "VisibleString"; // ASCII subset - case 0x1B: return "GeneralString"; - case 0x1C: return "UniversalString"; - case 0x1E: return "BMPString"; - default: return "Universal_" + tagNumber.toString(16); - } - case 1: return "Application_" + tagNumber.toString(16); - case 2: return "[" + tagNumber + "]"; // Context - case 3: return "Private_" + tagNumber.toString(16); - } -} -ASN1.prototype.content = function() { - if (this.tag == undefined) - return null; - var tagClass = this.tag >> 6; - if (tagClass != 0) // universal - return (this.sub == null) ? null : "(" + this.sub.length + ")"; - var tagNumber = this.tag & 0x1F; - var content = this.posContent(); - var len = Math.abs(this.length); - switch (tagNumber) { - case 0x01: // BOOLEAN - return (this.stream.get(content) == 0) ? "false" : "true"; - case 0x02: // INTEGER - return this.stream.parseInteger(content, content + len); - case 0x03: // BIT_STRING - return this.sub ? "(" + this.sub.length + " elem)" : - this.stream.parseBitString(content, content + len) - case 0x04: // OCTET_STRING - return this.sub ? "(" + this.sub.length + " elem)" : - this.stream.parseOctetString(content, content + len) - //case 0x05: // NULL - case 0x06: // OBJECT_IDENTIFIER - return this.stream.parseOID(content, content + len); - //case 0x07: // ObjectDescriptor - //case 0x08: // EXTERNAL - //case 0x09: // REAL - //case 0x0A: // ENUMERATED - //case 0x0B: // EMBEDDED_PDV - case 0x10: // SEQUENCE - case 0x11: // SET - return "(" + this.sub.length + " elem)"; - case 0x0C: // UTF8String - return this.stream.parseStringUTF(content, content + len); - case 0x12: // NumericString - case 0x13: // PrintableString - case 0x14: // TeletexString - case 0x15: // VideotexString - case 0x16: // IA5String - //case 0x19: // GraphicString - case 0x1A: // VisibleString - //case 0x1B: // GeneralString - //case 0x1C: // UniversalString - //case 0x1E: // BMPString - return this.stream.parseStringISO(content, content + len); - case 0x17: // UTCTime - case 0x18: // GeneralizedTime - return this.stream.parseTime(content, content + len); - } - return null; -} -ASN1.prototype.toString = function() { - return this.typeName() + "@" + this.stream.pos + "[header:" + this.header + ",length:" + this.length + ",sub:" + ((this.sub == null) ? 'null' : this.sub.length) + "]"; -} -ASN1.prototype.print = function(indent) { - if (indent == undefined) indent = ''; - document.writeln(indent + this); - if (this.sub != null) { - indent += ' '; - for (var i = 0, max = this.sub.length; i < max; ++i) - this.sub[i].print(indent); - } -} -ASN1.prototype.toPrettyString = function(indent) { - if (indent == undefined) indent = ''; - var s = indent + this.typeName() + " @" + this.stream.pos; - if (this.length >= 0) - s += "+"; - s += this.length; - if (this.tag & 0x20) - s += " (constructed)"; - else if (((this.tag == 0x03) || (this.tag == 0x04)) && (this.sub != null)) - s += " (encapsulates)"; - s += "\n"; - if (this.sub != null) { - indent += ' '; - for (var i = 0, max = this.sub.length; i < max; ++i) - s += this.sub[i].toPrettyString(indent); - } - return s; -} -ASN1.prototype.posStart = function() { - return this.stream.pos; -} -ASN1.prototype.posContent = function() { - return this.stream.pos + this.header; -} -ASN1.prototype.posEnd = function() { - return this.stream.pos + this.header + Math.abs(this.length); -} -ASN1.decodeLength = function(stream) { - var buf = stream.get(); - var len = buf & 0x7F; - if (len == buf) - return len; - if (len > 3) - throw "Length over 24 bits not supported at position " + (stream.pos - 1); - if (len == 0) - return -1; // undefined - buf = 0; - for (var i = 0; i < len; ++i) - buf = (buf << 8) | stream.get(); - return buf; -} -ASN1.hasContent = function(tag, len, stream) { - if (tag & 0x20) // constructed - return true; - if ((tag < 0x03) || (tag > 0x04)) - return false; - var p = new Stream(stream); - if (tag == 0x03) p.get(); // BitString unused bits, must be in [0, 7] - var subTag = p.get(); - if ((subTag >> 6) & 0x01) // not (universal or context) - return false; - try { - var subLength = ASN1.decodeLength(p); - return ((p.pos - stream.pos) + subLength == len); - } catch (exception) { - return false; - } -} -ASN1.decode = function(stream) { - if (!(stream instanceof Stream)) - stream = new Stream(stream, 0); - var streamStart = new Stream(stream); - var tag = stream.get(); - var len = ASN1.decodeLength(stream); - var header = stream.pos - streamStart.pos; - var sub = null; - if (ASN1.hasContent(tag, len, stream)) { - // it has content, so we decode it - var start = stream.pos; - if (tag == 0x03) stream.get(); // skip BitString unused bits, must be in [0, 7] - sub = []; - if (len >= 0) { - // definite length - var end = start + len; - while (stream.pos < end) - sub[sub.length] = ASN1.decode(stream); - if (stream.pos != end) - throw "Content size is not correct for container starting at offset " + start; - } else { - // undefined length - try { - for (;;) { - var s = ASN1.decode(stream); - if (s.tag == 0) - break; - sub[sub.length] = s; - } - len = start - stream.pos; - } catch (e) { - throw "Exception while decoding undefined length content: " + e; - } - } - } else - stream.pos += len; // skip content - return new ASN1(streamStart, header, len, tag, sub); -} - -var b64map="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; -var b64padchar="="; - -function hex2b64(h) { - var i; - var c; - var ret = ""; - for(i = 0; i+3 <= h.length; i+=3) { - c = parseInt(h.substring(i,i+3),16); - ret += b64map.charAt(c >> 6) + b64map.charAt(c & 63); - } - if(i+1 == h.length) { - c = parseInt(h.substring(i,i+1),16); - ret += b64map.charAt(c << 2); - } - else if(i+2 == h.length) { - c = parseInt(h.substring(i,i+2),16); - ret += b64map.charAt(c >> 2) + b64map.charAt((c & 3) << 4); - } - while((ret.length & 3) > 0) ret += b64padchar; - return ret; -} - -// convert a base64 string to hex -function b64tohex(s) { - var ret = ""; - var i; - var k = 0; // b64 state, 0-3 - var slop; - var v; - for(i = 0; i < s.length; ++i) { - if(s.charAt(i) == b64padchar) break; - v = b64map.indexOf(s.charAt(i)); - if(v < 0) continue; - if(k == 0) { - ret += int2char(v >> 2); - slop = v & 3; - k = 1; - } - else if(k == 1) { - ret += int2char((slop << 2) | (v >> 4)); - slop = v & 0xf; - k = 2; - } - else if(k == 2) { - ret += int2char(slop); - ret += int2char(v >> 2); - slop = v & 3; - k = 3; - } - else { - ret += int2char((slop << 2) | (v >> 4)); - ret += int2char(v & 0xf); - k = 0; - } - } - if(k == 1) - ret += int2char(slop << 2); - return ret; -} - -// convert a base64 string to a byte/number array -function b64toBA(s) { - //piggyback on b64tohex for now, optimize later - var h = b64tohex(s); - var i; - var a = new Array(); - for(i = 0; 2*i < h.length; ++i) { - a[i] = parseInt(h.substring(2*i,2*i+2),16); - } - return a; -} - -// Copyright (c) 2005 Tom Wu -// All Rights Reserved. -// See "LICENSE" for details. - -// Basic JavaScript BN library - subset useful for RSA encryption. - -// Bits per digit -var dbits; - -// JavaScript engine analysis -var canary = 0xdeadbeefcafe; -var j_lm = ((canary&0xffffff)==0xefcafe); - -// (public) Constructor -function BigInteger(a,b,c) { - if(a != null) - if("number" == typeof a) this.fromNumber(a,b,c); - else if(b == null && "string" != typeof a) this.fromString(a,256); - else this.fromString(a,b); -} - -// return new, unset BigInteger -function nbi() { return new BigInteger(null); } - -// am: Compute w_j += (x*this_i), propagate carries, -// c is initial carry, returns final carry. -// c < 3*dvalue, x < 2*dvalue, this_i < dvalue -// We need to select the fastest one that works in this environment. - -// am1: use a single mult and divide to get the high bits, -// max digit bits should be 26 because -// max internal value = 2*dvalue^2-2*dvalue (< 2^53) -function am1(i,x,w,j,c,n) { - while(--n >= 0) { - var v = x*this[i++]+w[j]+c; - c = Math.floor(v/0x4000000); - w[j++] = v&0x3ffffff; - } - return c; -} -// am2 avoids a big mult-and-extract completely. -// Max digit bits should be <= 30 because we do bitwise ops -// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31) -function am2(i,x,w,j,c,n) { - var xl = x&0x7fff, xh = x>>15; - while(--n >= 0) { - var l = this[i]&0x7fff; - var h = this[i++]>>15; - var m = xh*l+h*xl; - l = xl*l+((m&0x7fff)<<15)+w[j]+(c&0x3fffffff); - c = (l>>>30)+(m>>>15)+xh*h+(c>>>30); - w[j++] = l&0x3fffffff; - } - return c; -} -// Alternately, set max digit bits to 28 since some -// browsers slow down when dealing with 32-bit numbers. -function am3(i,x,w,j,c,n) { - var xl = x&0x3fff, xh = x>>14; - while(--n >= 0) { - var l = this[i]&0x3fff; - var h = this[i++]>>14; - var m = xh*l+h*xl; - l = xl*l+((m&0x3fff)<<14)+w[j]+c; - c = (l>>28)+(m>>14)+xh*h; - w[j++] = l&0xfffffff; - } - return c; -} -if(j_lm && (navigator.appName == "Microsoft Internet Explorer")) { - BigInteger.prototype.am = am2; - dbits = 30; -} -else if(j_lm && (navigator.appName != "Netscape")) { - BigInteger.prototype.am = am1; - dbits = 26; -} -else { // Mozilla/Netscape seems to prefer am3 - BigInteger.prototype.am = am3; - dbits = 28; -} - -BigInteger.prototype.DB = dbits; -BigInteger.prototype.DM = ((1<= 0; --i) r[i] = this[i]; - r.t = this.t; - r.s = this.s; -} - -// (protected) set from integer value x, -DV <= x < DV -function bnpFromInt(x) { - this.t = 1; - this.s = (x<0)?-1:0; - if(x > 0) this[0] = x; - else if(x < -1) this[0] = x+this.DV; - else this.t = 0; -} - -// return bigint initialized to value -function nbv(i) { var r = nbi(); r.fromInt(i); return r; } - -// (protected) set from string and radix -function bnpFromString(s,b) { - var k; - if(b == 16) k = 4; - else if(b == 8) k = 3; - else if(b == 256) k = 8; // byte array - else if(b == 2) k = 1; - else if(b == 32) k = 5; - else if(b == 4) k = 2; - else { this.fromRadix(s,b); return; } - this.t = 0; - this.s = 0; - var i = s.length, mi = false, sh = 0; - while(--i >= 0) { - var x = (k==8)?s[i]&0xff:intAt(s,i); - if(x < 0) { - if(s.charAt(i) == "-") mi = true; - continue; - } - mi = false; - if(sh == 0) - this[this.t++] = x; - else if(sh+k > this.DB) { - this[this.t-1] |= (x&((1<<(this.DB-sh))-1))<>(this.DB-sh)); - } - else - this[this.t-1] |= x<= this.DB) sh -= this.DB; - } - if(k == 8 && (s[0]&0x80) != 0) { - this.s = -1; - if(sh > 0) this[this.t-1] |= ((1<<(this.DB-sh))-1)< 0 && this[this.t-1] == c) --this.t; -} - -// (public) return string representation in given radix -function bnToString(b) { - if(this.s < 0) return "-"+this.negate().toString(b); - var k; - if(b == 16) k = 4; - else if(b == 8) k = 3; - else if(b == 2) k = 1; - else if(b == 32) k = 5; - else if(b == 4) k = 2; - else return this.toRadix(b); - var km = (1< 0) { - if(p < this.DB && (d = this[i]>>p) > 0) { m = true; r = int2char(d); } - while(i >= 0) { - if(p < k) { - d = (this[i]&((1<>(p+=this.DB-k); - } - else { - d = (this[i]>>(p-=k))&km; - if(p <= 0) { p += this.DB; --i; } - } - if(d > 0) m = true; - if(m) r += int2char(d); - } - } - return m?r:"0"; -} - -// (public) -this -function bnNegate() { var r = nbi(); BigInteger.ZERO.subTo(this,r); return r; } - -// (public) |this| -function bnAbs() { return (this.s<0)?this.negate():this; } - -// (public) return + if this > a, - if this < a, 0 if equal -function bnCompareTo(a) { - var r = this.s-a.s; - if(r != 0) return r; - var i = this.t; - r = i-a.t; - if(r != 0) return (this.s<0)?-r:r; - while(--i >= 0) if((r=this[i]-a[i]) != 0) return r; - return 0; -} - -// returns bit length of the integer x -function nbits(x) { - var r = 1, t; - if((t=x>>>16) != 0) { x = t; r += 16; } - if((t=x>>8) != 0) { x = t; r += 8; } - if((t=x>>4) != 0) { x = t; r += 4; } - if((t=x>>2) != 0) { x = t; r += 2; } - if((t=x>>1) != 0) { x = t; r += 1; } - return r; -} - -// (public) return the number of bits in "this" -function bnBitLength() { - if(this.t <= 0) return 0; - return this.DB*(this.t-1)+nbits(this[this.t-1]^(this.s&this.DM)); -} - -// (protected) r = this << n*DB -function bnpDLShiftTo(n,r) { - var i; - for(i = this.t-1; i >= 0; --i) r[i+n] = this[i]; - for(i = n-1; i >= 0; --i) r[i] = 0; - r.t = this.t+n; - r.s = this.s; -} - -// (protected) r = this >> n*DB -function bnpDRShiftTo(n,r) { - for(var i = n; i < this.t; ++i) r[i-n] = this[i]; - r.t = Math.max(this.t-n,0); - r.s = this.s; -} - -// (protected) r = this << n -function bnpLShiftTo(n,r) { - var bs = n%this.DB; - var cbs = this.DB-bs; - var bm = (1<= 0; --i) { - r[i+ds+1] = (this[i]>>cbs)|c; - c = (this[i]&bm)<= 0; --i) r[i] = 0; - r[ds] = c; - r.t = this.t+ds+1; - r.s = this.s; - r.clamp(); -} - -// (protected) r = this >> n -function bnpRShiftTo(n,r) { - r.s = this.s; - var ds = Math.floor(n/this.DB); - if(ds >= this.t) { r.t = 0; return; } - var bs = n%this.DB; - var cbs = this.DB-bs; - var bm = (1<>bs; - for(var i = ds+1; i < this.t; ++i) { - r[i-ds-1] |= (this[i]&bm)<>bs; - } - if(bs > 0) r[this.t-ds-1] |= (this.s&bm)<>= this.DB; - } - if(a.t < this.t) { - c -= a.s; - while(i < this.t) { - c += this[i]; - r[i++] = c&this.DM; - c >>= this.DB; - } - c += this.s; - } - else { - c += this.s; - while(i < a.t) { - c -= a[i]; - r[i++] = c&this.DM; - c >>= this.DB; - } - c -= a.s; - } - r.s = (c<0)?-1:0; - if(c < -1) r[i++] = this.DV+c; - else if(c > 0) r[i++] = c; - r.t = i; - r.clamp(); -} - -// (protected) r = this * a, r != this,a (HAC 14.12) -// "this" should be the larger one if appropriate. -function bnpMultiplyTo(a,r) { - var x = this.abs(), y = a.abs(); - var i = x.t; - r.t = i+y.t; - while(--i >= 0) r[i] = 0; - for(i = 0; i < y.t; ++i) r[i+x.t] = x.am(0,y[i],r,i,0,x.t); - r.s = 0; - r.clamp(); - if(this.s != a.s) BigInteger.ZERO.subTo(r,r); -} - -// (protected) r = this^2, r != this (HAC 14.16) -function bnpSquareTo(r) { - var x = this.abs(); - var i = r.t = 2*x.t; - while(--i >= 0) r[i] = 0; - for(i = 0; i < x.t-1; ++i) { - var c = x.am(i,x[i],r,2*i,0,1); - if((r[i+x.t]+=x.am(i+1,2*x[i],r,2*i+1,c,x.t-i-1)) >= x.DV) { - r[i+x.t] -= x.DV; - r[i+x.t+1] = 1; - } - } - if(r.t > 0) r[r.t-1] += x.am(i,x[i],r,2*i,0,1); - r.s = 0; - r.clamp(); -} - -// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20) -// r != q, this != m. q or r may be null. -function bnpDivRemTo(m,q,r) { - var pm = m.abs(); - if(pm.t <= 0) return; - var pt = this.abs(); - if(pt.t < pm.t) { - if(q != null) q.fromInt(0); - if(r != null) this.copyTo(r); - return; - } - if(r == null) r = nbi(); - var y = nbi(), ts = this.s, ms = m.s; - var nsh = this.DB-nbits(pm[pm.t-1]); // normalize modulus - if(nsh > 0) { pm.lShiftTo(nsh,y); pt.lShiftTo(nsh,r); } - else { pm.copyTo(y); pt.copyTo(r); } - var ys = y.t; - var y0 = y[ys-1]; - if(y0 == 0) return; - var yt = y0*(1<1)?y[ys-2]>>this.F2:0); - var d1 = this.FV/yt, d2 = (1<= 0) { - r[r.t++] = 1; - r.subTo(t,r); - } - BigInteger.ONE.dlShiftTo(ys,t); - t.subTo(y,y); // "negative" y so we can replace sub with am later - while(y.t < ys) y[y.t++] = 0; - while(--j >= 0) { - // Estimate quotient digit - var qd = (r[--i]==y0)?this.DM:Math.floor(r[i]*d1+(r[i-1]+e)*d2); - if((r[i]+=y.am(0,qd,r,j,0,ys)) < qd) { // Try it out - y.dlShiftTo(j,t); - r.subTo(t,r); - while(r[i] < --qd) r.subTo(t,r); - } - } - if(q != null) { - r.drShiftTo(ys,q); - if(ts != ms) BigInteger.ZERO.subTo(q,q); - } - r.t = ys; - r.clamp(); - if(nsh > 0) r.rShiftTo(nsh,r); // Denormalize remainder - if(ts < 0) BigInteger.ZERO.subTo(r,r); -} - -// (public) this mod a -function bnMod(a) { - var r = nbi(); - this.abs().divRemTo(a,null,r); - if(this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r,r); - return r; -} - -// Modular reduction using "classic" algorithm -function Classic(m) { this.m = m; } -function cConvert(x) { - if(x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m); - else return x; -} -function cRevert(x) { return x; } -function cReduce(x) { x.divRemTo(this.m,null,x); } -function cMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); } -function cSqrTo(x,r) { x.squareTo(r); this.reduce(r); } - -Classic.prototype.convert = cConvert; -Classic.prototype.revert = cRevert; -Classic.prototype.reduce = cReduce; -Classic.prototype.mulTo = cMulTo; -Classic.prototype.sqrTo = cSqrTo; - -// (protected) return "-1/this % 2^DB"; useful for Mont. reduction -// justification: -// xy == 1 (mod m) -// xy = 1+km -// xy(2-xy) = (1+km)(1-km) -// x[y(2-xy)] = 1-k^2m^2 -// x[y(2-xy)] == 1 (mod m^2) -// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2 -// should reduce x and y(2-xy) by m^2 at each step to keep size bounded. -// JS multiply "overflows" differently from C/C++, so care is needed here. -function bnpInvDigit() { - if(this.t < 1) return 0; - var x = this[0]; - if((x&1) == 0) return 0; - var y = x&3; // y == 1/x mod 2^2 - y = (y*(2-(x&0xf)*y))&0xf; // y == 1/x mod 2^4 - y = (y*(2-(x&0xff)*y))&0xff; // y == 1/x mod 2^8 - y = (y*(2-(((x&0xffff)*y)&0xffff)))&0xffff; // y == 1/x mod 2^16 - // last step - calculate inverse mod DV directly; - // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints - y = (y*(2-x*y%this.DV))%this.DV; // y == 1/x mod 2^dbits - // we really want the negative inverse, and -DV < y < DV - return (y>0)?this.DV-y:-y; -} - -// Montgomery reduction -function Montgomery(m) { - this.m = m; - this.mp = m.invDigit(); - this.mpl = this.mp&0x7fff; - this.mph = this.mp>>15; - this.um = (1<<(m.DB-15))-1; - this.mt2 = 2*m.t; -} - -// xR mod m -function montConvert(x) { - var r = nbi(); - x.abs().dlShiftTo(this.m.t,r); - r.divRemTo(this.m,null,r); - if(x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r,r); - return r; -} - -// x/R mod m -function montRevert(x) { - var r = nbi(); - x.copyTo(r); - this.reduce(r); - return r; -} - -// x = x/R mod m (HAC 14.32) -function montReduce(x) { - while(x.t <= this.mt2) // pad x so am has enough room later - x[x.t++] = 0; - for(var i = 0; i < this.m.t; ++i) { - // faster way of calculating u0 = x[i]*mp mod DV - var j = x[i]&0x7fff; - var u0 = (j*this.mpl+(((j*this.mph+(x[i]>>15)*this.mpl)&this.um)<<15))&x.DM; - // use am to combine the multiply-shift-add into one call - j = i+this.m.t; - x[j] += this.m.am(0,u0,x,i,0,this.m.t); - // propagate carry - while(x[j] >= x.DV) { x[j] -= x.DV; x[++j]++; } - } - x.clamp(); - x.drShiftTo(this.m.t,x); - if(x.compareTo(this.m) >= 0) x.subTo(this.m,x); -} - -// r = "x^2/R mod m"; x != r -function montSqrTo(x,r) { x.squareTo(r); this.reduce(r); } - -// r = "xy/R mod m"; x,y != r -function montMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); } - -Montgomery.prototype.convert = montConvert; -Montgomery.prototype.revert = montRevert; -Montgomery.prototype.reduce = montReduce; -Montgomery.prototype.mulTo = montMulTo; -Montgomery.prototype.sqrTo = montSqrTo; - -// (protected) true iff this is even -function bnpIsEven() { return ((this.t>0)?(this[0]&1):this.s) == 0; } - -// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79) -function bnpExp(e,z) { - if(e > 0xffffffff || e < 1) return BigInteger.ONE; - var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e)-1; - g.copyTo(r); - while(--i >= 0) { - z.sqrTo(r,r2); - if((e&(1< 0) z.mulTo(r2,g,r); - else { var t = r; r = r2; r2 = t; } - } - return z.revert(r); -} - -// (public) this^e % m, 0 <= e < 2^32 -function bnModPowInt(e,m) { - var z; - if(e < 256 || m.isEven()) z = new Classic(m); else z = new Montgomery(m); - return this.exp(e,z); -} - -// protected -BigInteger.prototype.copyTo = bnpCopyTo; -BigInteger.prototype.fromInt = bnpFromInt; -BigInteger.prototype.fromString = bnpFromString; -BigInteger.prototype.clamp = bnpClamp; -BigInteger.prototype.dlShiftTo = bnpDLShiftTo; -BigInteger.prototype.drShiftTo = bnpDRShiftTo; -BigInteger.prototype.lShiftTo = bnpLShiftTo; -BigInteger.prototype.rShiftTo = bnpRShiftTo; -BigInteger.prototype.subTo = bnpSubTo; -BigInteger.prototype.multiplyTo = bnpMultiplyTo; -BigInteger.prototype.squareTo = bnpSquareTo; -BigInteger.prototype.divRemTo = bnpDivRemTo; -BigInteger.prototype.invDigit = bnpInvDigit; -BigInteger.prototype.isEven = bnpIsEven; -BigInteger.prototype.exp = bnpExp; - -// public -BigInteger.prototype.toString = bnToString; -BigInteger.prototype.negate = bnNegate; -BigInteger.prototype.abs = bnAbs; -BigInteger.prototype.compareTo = bnCompareTo; -BigInteger.prototype.bitLength = bnBitLength; -BigInteger.prototype.mod = bnMod; -BigInteger.prototype.modPowInt = bnModPowInt; - -// "constants" -BigInteger.ZERO = nbv(0); -BigInteger.ONE = nbv(1); - -// Depends on jsbn.js and rng.js - -// Version 1.1: support utf-8 encoding in pkcs1pad2 - -// convert a (hex) string to a bignum object -function parseBigInt(str,r) { - return new BigInteger(str,r); -} - -function linebrk(s,n) { - var ret = ""; - var i = 0; - while(i + n < s.length) { - ret += s.substring(i,i+n) + "\n"; - i += n; - } - return ret + s.substring(i,s.length); -} - -function byte2Hex(b) { - if(b < 0x10) - return "0" + b.toString(16); - else - return b.toString(16); -} - -// PKCS#1 (type 2, random) pad input string s to n bytes, and return a bigint -function pkcs1pad2(s,n) { - if(n < s.length + 11) { // TODO: fix for utf-8 - throw new Error("Message too long for RSA"); - } - var ba = new Array(); - var i = s.length - 1; - while(i >= 0 && n > 0) { - var c = s.charCodeAt(i--); - if(c < 128) { // encode using utf-8 - ba[--n] = c; - } - else if((c > 127) && (c < 2048)) { - ba[--n] = (c & 63) | 128; - ba[--n] = (c >> 6) | 192; - } - else { - ba[--n] = (c & 63) | 128; - ba[--n] = ((c >> 6) & 63) | 128; - ba[--n] = (c >> 12) | 224; - } - } - ba[--n] = 0; - var randomByte = 0; - var random = 0; - var shift = 0; - while(n > 2) { // random non-zero pad - if (shift == 0) { - random = sjcl.random.randomWords(1, 0)[0]; - } - - randomByte = (random >> shift) & 0xff; - shift = (shift + 8) % 32; - if (randomByte != 0) { - ba[--n] = randomByte; - } - } - ba[--n] = 2; - ba[--n] = 0; - return new BigInteger(ba); -} - -// "empty" RSA key constructor -function RSAKey() { - this.n = null; - this.e = 0; - this.d = null; - this.p = null; - this.q = null; - this.dmp1 = null; - this.dmq1 = null; - this.coeff = null; -} - -// Set the public key fields N and e from hex strings -function RSASetPublic(N,E) { - if(N != null && E != null && N.length > 0 && E.length > 0) { - this.n = parseBigInt(N,16); - this.e = parseInt(E,16); - } - else - throw new Error("Invalid RSA public key"); -} - -// Perform raw public operation on "x": return x^e (mod n) -function RSADoPublic(x) { - return x.modPowInt(this.e, this.n); -} - -// Return the PKCS#1 RSA encryption of "text" as an even-length hex string -function RSAEncrypt(text) { - var m = pkcs1pad2(text,(this.n.bitLength()+7)>>3); - if(m == null) return null; - var c = this.doPublic(m); - if(c == null) return null; - var h = c.toString(16); - if((h.length & 1) == 0) return h; else return "0" + h; -} - -// Return the PKCS#1 RSA encryption of "text" as a Base64-encoded string -//function RSAEncryptB64(text) { -// var h = this.encrypt(text); -// if(h) return hex2b64(h); else return null; -//} - -// protected -RSAKey.prototype.doPublic = RSADoPublic; - -// public -RSAKey.prototype.setPublic = RSASetPublic; -RSAKey.prototype.encrypt = RSAEncrypt; -//RSAKey.prototype.encrypt_b64 = RSAEncryptB64; - -/** @fileOverview Javascript cryptography implementation. - * - * Crush to remove comments, shorten variable names and - * generally reduce transmission size. - * - * @author Emily Stark - * @author Mike Hamburg - * @author Dan Boneh - */ - -"use strict"; -/*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */ -/*global document, window, escape, unescape */ - -/** @namespace The Stanford Javascript Crypto Library, top-level namespace. */ -var sjcl = { - /** @namespace Symmetric ciphers. */ - cipher: {}, - - /** @namespace Hash functions. Right now only SHA256 is implemented. */ - hash: {}, - - /** @namespace Key exchange functions. Right now only SRP is implemented. */ - keyexchange: {}, - - /** @namespace Block cipher modes of operation. */ - mode: {}, - - /** @namespace Miscellaneous. HMAC and PBKDF2. */ - misc: {}, - - /** - * @namespace Bit array encoders and decoders. - * - * @description - * The members of this namespace are functions which translate between - * SJCL's bitArrays and other objects (usually strings). Because it - * isn't always clear which direction is encoding and which is decoding, - * the method names are "fromBits" and "toBits". - */ - codec: {}, - - /** @namespace Exceptions. */ - exception: { - /** @class Ciphertext is corrupt. */ - corrupt: function(message) { - this.toString = function() { return "CORRUPT: "+this.message; }; - this.message = message; - }, - - /** @class Invalid parameter. */ - invalid: function(message) { - this.toString = function() { return "INVALID: "+this.message; }; - this.message = message; - }, - - /** @class Bug or missing feature in SJCL. */ - bug: function(message) { - this.toString = function() { return "BUG: "+this.message; }; - this.message = message; - }, - - /** @class Something isn't ready. */ - notReady: function(message) { - this.toString = function() { return "NOT READY: "+this.message; }; - this.message = message; - } - } -}; - -if(typeof module != 'undefined' && module.exports){ - module.exports = sjcl; -} - -/** @fileOverview Low-level AES implementation. - * - * This file contains a low-level implementation of AES, optimized for - * size and for efficiency on several browsers. It is based on - * OpenSSL's aes_core.c, a public-domain implementation by Vincent - * Rijmen, Antoon Bosselaers and Paulo Barreto. - * - * An older version of this implementation is available in the public - * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh, - * Stanford University 2008-2010 and BSD-licensed for liability - * reasons. - * - * @author Emily Stark - * @author Mike Hamburg - * @author Dan Boneh - */ - -/** - * Schedule out an AES key for both encryption and decryption. This - * is a low-level class. Use a cipher mode to do bulk encryption. - * - * @constructor - * @param {Array} key The key as an array of 4, 6 or 8 words. - * - * @class Advanced Encryption Standard (low-level interface) - */ -sjcl.cipher.aes = function (key) { - if (!this._tables[0][0][0]) { - this._precompute(); - } - - var i, j, tmp, - encKey, decKey, - sbox = this._tables[0][4], decTable = this._tables[1], - keyLen = key.length, rcon = 1; - - if (keyLen !== 4 && keyLen !== 6 && keyLen !== 8) { - throw new sjcl.exception.invalid("invalid aes key size"); - } - - this._key = [encKey = key.slice(0), decKey = []]; - - // schedule encryption keys - for (i = keyLen; i < 4 * keyLen + 28; i++) { - tmp = encKey[i-1]; - - // apply sbox - if (i%keyLen === 0 || (keyLen === 8 && i%keyLen === 4)) { - tmp = sbox[tmp>>>24]<<24 ^ sbox[tmp>>16&255]<<16 ^ sbox[tmp>>8&255]<<8 ^ sbox[tmp&255]; - - // shift rows and add rcon - if (i%keyLen === 0) { - tmp = tmp<<8 ^ tmp>>>24 ^ rcon<<24; - rcon = rcon<<1 ^ (rcon>>7)*283; - } - } - - encKey[i] = encKey[i-keyLen] ^ tmp; - } - - // schedule decryption keys - for (j = 0; i; j++, i--) { - tmp = encKey[j&3 ? i : i - 4]; - if (i<=4 || j<4) { - decKey[j] = tmp; - } else { - decKey[j] = decTable[0][sbox[tmp>>>24 ]] ^ - decTable[1][sbox[tmp>>16 & 255]] ^ - decTable[2][sbox[tmp>>8 & 255]] ^ - decTable[3][sbox[tmp & 255]]; - } - } -}; - -sjcl.cipher.aes.prototype = { - // public - /* Something like this might appear here eventually - name: "AES", - blockSize: 4, - keySizes: [4,6,8], - */ - - /** - * Encrypt an array of 4 big-endian words. - * @param {Array} data The plaintext. - * @return {Array} The ciphertext. - */ - encrypt:function (data) { return this._crypt(data,0); }, - - /** - * Decrypt an array of 4 big-endian words. - * @param {Array} data The ciphertext. - * @return {Array} The plaintext. - */ - decrypt:function (data) { return this._crypt(data,1); }, - - /** - * The expanded S-box and inverse S-box tables. These will be computed - * on the client so that we don't have to send them down the wire. - * - * There are two tables, _tables[0] is for encryption and - * _tables[1] is for decryption. - * - * The first 4 sub-tables are the expanded S-box with MixColumns. The - * last (_tables[01][4]) is the S-box itself. - * - * @private - */ - _tables: [[[],[],[],[],[]],[[],[],[],[],[]]], - - /** - * Expand the S-box tables. - * - * @private - */ - _precompute: function () { - var encTable = this._tables[0], decTable = this._tables[1], - sbox = encTable[4], sboxInv = decTable[4], - i, x, xInv, d=[], th=[], x2, x4, x8, s, tEnc, tDec; - - // Compute double and third tables - for (i = 0; i < 256; i++) { - th[( d[i] = i<<1 ^ (i>>7)*283 )^i]=i; - } - - for (x = xInv = 0; !sbox[x]; x ^= x2 || 1, xInv = th[xInv] || 1) { - // Compute sbox - s = xInv ^ xInv<<1 ^ xInv<<2 ^ xInv<<3 ^ xInv<<4; - s = s>>8 ^ s&255 ^ 99; - sbox[x] = s; - sboxInv[s] = x; - - // Compute MixColumns - x8 = d[x4 = d[x2 = d[x]]]; - tDec = x8*0x1010101 ^ x4*0x10001 ^ x2*0x101 ^ x*0x1010100; - tEnc = d[s]*0x101 ^ s*0x1010100; - - for (i = 0; i < 4; i++) { - encTable[i][x] = tEnc = tEnc<<24 ^ tEnc>>>8; - decTable[i][s] = tDec = tDec<<24 ^ tDec>>>8; - } - } - - // Compactify. Considerable speedup on Firefox. - for (i = 0; i < 5; i++) { - encTable[i] = encTable[i].slice(0); - decTable[i] = decTable[i].slice(0); - } - }, - - /** - * Encryption and decryption core. - * @param {Array} input Four words to be encrypted or decrypted. - * @param dir The direction, 0 for encrypt and 1 for decrypt. - * @return {Array} The four encrypted or decrypted words. - * @private - */ - _crypt:function (input, dir) { - if (input.length !== 4) { - throw new sjcl.exception.invalid("invalid aes block size"); - } - - var key = this._key[dir], - // state variables a,b,c,d are loaded with pre-whitened data - a = input[0] ^ key[0], - b = input[dir ? 3 : 1] ^ key[1], - c = input[2] ^ key[2], - d = input[dir ? 1 : 3] ^ key[3], - a2, b2, c2, - - nInnerRounds = key.length/4 - 2, - i, - kIndex = 4, - out = [0,0,0,0], - table = this._tables[dir], - - // load up the tables - t0 = table[0], - t1 = table[1], - t2 = table[2], - t3 = table[3], - sbox = table[4]; - - // Inner rounds. Cribbed from OpenSSL. - for (i = 0; i < nInnerRounds; i++) { - a2 = t0[a>>>24] ^ t1[b>>16 & 255] ^ t2[c>>8 & 255] ^ t3[d & 255] ^ key[kIndex]; - b2 = t0[b>>>24] ^ t1[c>>16 & 255] ^ t2[d>>8 & 255] ^ t3[a & 255] ^ key[kIndex + 1]; - c2 = t0[c>>>24] ^ t1[d>>16 & 255] ^ t2[a>>8 & 255] ^ t3[b & 255] ^ key[kIndex + 2]; - d = t0[d>>>24] ^ t1[a>>16 & 255] ^ t2[b>>8 & 255] ^ t3[c & 255] ^ key[kIndex + 3]; - kIndex += 4; - a=a2; b=b2; c=c2; - } - - // Last round. - for (i = 0; i < 4; i++) { - out[dir ? 3&-i : i] = - sbox[a>>>24 ]<<24 ^ - sbox[b>>16 & 255]<<16 ^ - sbox[c>>8 & 255]<<8 ^ - sbox[d & 255] ^ - key[kIndex++]; - a2=a; a=b; b=c; c=d; d=a2; - } - - return out; - } -}; - - -/** @fileOverview Arrays of bits, encoded as arrays of Numbers. - * - * @author Emily Stark - * @author Mike Hamburg - * @author Dan Boneh - */ - -/** @namespace Arrays of bits, encoded as arrays of Numbers. - * - * @description - *

- * These objects are the currency accepted by SJCL's crypto functions. - *

- * - *

- * Most of our crypto primitives operate on arrays of 4-byte words internally, - * but many of them can take arguments that are not a multiple of 4 bytes. - * This library encodes arrays of bits (whose size need not be a multiple of 8 - * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an - * array of words, 32 bits at a time. Since the words are double-precision - * floating point numbers, they fit some extra data. We use this (in a private, - * possibly-changing manner) to encode the number of bits actually present - * in the last word of the array. - *

- * - *

- * Because bitwise ops clear this out-of-band data, these arrays can be passed - * to ciphers like AES which want arrays of words. - *

- */ -sjcl.bitArray = { - /** - * Array slices in units of bits. - * @param {bitArray} a The array to slice. - * @param {Number} bstart The offset to the start of the slice, in bits. - * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined, - * slice until the end of the array. - * @return {bitArray} The requested slice. - */ - bitSlice: function (a, bstart, bend) { - a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1); - return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart); - }, - - /** - * Extract a number packed into a bit array. - * @param {bitArray} a The array to slice. - * @param {Number} bstart The offset to the start of the slice, in bits. - * @param {Number} length The length of the number to extract. - * @return {Number} The requested slice. - */ - extract: function(a, bstart, blength) { - // FIXME: this Math.floor is not necessary at all, but for some reason - // seems to suppress a bug in the Chromium JIT. - var x, sh = Math.floor((-bstart-blength) & 31); - if ((bstart + blength - 1 ^ bstart) & -32) { - // it crosses a boundary - x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh); - } else { - // within a single word - x = a[bstart/32|0] >>> sh; - } - return x & ((1< 0 && len) { - a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1); - } - return a; - }, - - /** - * Make a partial word for a bit array. - * @param {Number} len The number of bits in the word. - * @param {Number} x The bits. - * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side. - * @return {Number} The partial word. - */ - partial: function (len, x, _end) { - if (len === 32) { return x; } - return (_end ? x|0 : x << (32-len)) + len * 0x10000000000; - }, - - /** - * Get the number of bits used by a partial word. - * @param {Number} x The partial word. - * @return {Number} The number of bits used by the partial word. - */ - getPartial: function (x) { - return Math.round(x/0x10000000000) || 32; - }, - - /** - * Compare two arrays for equality in a predictable amount of time. - * @param {bitArray} a The first array. - * @param {bitArray} b The second array. - * @return {boolean} true if a == b; false otherwise. - */ - equal: function (a, b) { - if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) { - return false; - } - var x = 0, i; - for (i=0; i= 32; shift -= 32) { - out.push(carry); - carry = 0; - } - if (shift === 0) { - return out.concat(a); - } - - for (i=0; i>>shift); - carry = a[i] << (32-shift); - } - last2 = a.length ? a[a.length-1] : 0; - shift2 = sjcl.bitArray.getPartial(last2); - out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1)); - return out; - }, - - /** xor a block of 4 words together. - * @private - */ - _xor4: function(x,y) { - return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]]; - } -}; - -/** @fileOverview Bit array codec implementations. - * - * @author Emily Stark - * @author Mike Hamburg - * @author Dan Boneh - */ - -/** @namespace Hexadecimal */ -sjcl.codec.hex = { - /** Convert from a bitArray to a hex string. */ - fromBits: function (arr) { - var out = "", i, x; - for (i=0; i>> 24); - tmp <<= 8; - } - return decodeURIComponent(escape(out)); - }, - - /** Convert from a UTF-8 string to a bitArray. */ - toBits: function (str) { - str = unescape(encodeURIComponent(str)); - var out = [], i, tmp=0; - for (i=0; i>>bits) >>> 26); - if (bits < 6) { - ta = arr[i] << (6-bits); - bits += 26; - i++; - } else { - ta <<= 6; - bits -= 6; - } - } - while ((out.length & 3) && !_noEquals) { out += "="; } - return out; - }, - - /** Convert from a base64 string to a bitArray */ - toBits: function(str, _url) { - str = str.replace(/\s|=/g,''); - var out = [], i, bits=0, c = sjcl.codec.base64._chars, ta=0, x; - if (_url) c = c.substr(0,62) + '-_'; - for (i=0; i 26) { - bits -= 26; - out.push(ta ^ x>>>bits); - ta = x << (32-bits); - } else { - bits += 6; - ta ^= x << (32-bits); - } - } - if (bits&56) { - out.push(sjcl.bitArray.partial(bits&56, ta, 1)); - } - return out; - } -}; - -sjcl.codec.base64url = { - fromBits: function (arr) { return sjcl.codec.base64.fromBits(arr,1,1); }, - toBits: function (str) { return sjcl.codec.base64.toBits(str,1); } -}; - -/** @fileOverview CBC mode implementation - * - * @author Emily Stark - * @author Mike Hamburg - * @author Dan Boneh - */ - -/** @namespace - * Dangerous: CBC mode with PKCS#5 padding. - * - * @author Emily Stark - * @author Mike Hamburg - * @author Dan Boneh - */ -if (sjcl.beware === undefined) { - sjcl.beware = {}; -} -sjcl.beware["CBC mode is dangerous because it doesn't protect message integrity." -] = function() { - sjcl.mode.cbc = { - /** The name of the mode. - * @constant - */ - name: "cbc", - - /** Encrypt in CBC mode with PKCS#5 padding. - * @param {Object} prp The block cipher. It must have a block size of 16 bytes. - * @param {bitArray} plaintext The plaintext data. - * @param {bitArray} iv The initialization value. - * @param {bitArray} [adata=[]] The authenticated data. Must be empty. - * @return The encrypted data, an array of bytes. - * @throws {sjcl.exception.invalid} if the IV isn't exactly 128 bits, or if any adata is specified. - */ - encrypt: function(prp, plaintext, iv, adata) { - if (adata && adata.length) { - throw new sjcl.exception.invalid("cbc can't authenticate data"); - } - if (sjcl.bitArray.bitLength(iv) !== 128) { - throw new sjcl.exception.invalid("cbc iv must be 128 bits"); - } - var i, - w = sjcl.bitArray, - xor = w._xor4, - bl = w.bitLength(plaintext), - bp = 0, - output = []; - - if (bl&7) { - throw new sjcl.exception.invalid("pkcs#5 padding only works for multiples of a byte"); - } - - for (i=0; bp+128 <= bl; i+=4, bp+=128) { - /* Encrypt a non-final block */ - iv = prp.encrypt(xor(iv, plaintext.slice(i,i+4))); - output.splice(i,0,iv[0],iv[1],iv[2],iv[3]); - } - - /* Construct the pad. */ - bl = (16 - ((bl >> 3) & 15)) * 0x1010101; - - /* Pad and encrypt. */ - iv = prp.encrypt(xor(iv,w.concat(plaintext,[bl,bl,bl,bl]).slice(i,i+4))); - output.splice(i,0,iv[0],iv[1],iv[2],iv[3]); - return output; - }, - - /** Decrypt in CBC mode. - * @param {Object} prp The block cipher. It must have a block size of 16 bytes. - * @param {bitArray} ciphertext The ciphertext data. - * @param {bitArray} iv The initialization value. - * @param {bitArray} [adata=[]] The authenticated data. It must be empty. - * @return The decrypted data, an array of bytes. - * @throws {sjcl.exception.invalid} if the IV isn't exactly 128 bits, or if any adata is specified. - * @throws {sjcl.exception.corrupt} if if the message is corrupt. - */ - decrypt: function(prp, ciphertext, iv, adata) { - if (adata && adata.length) { - throw new sjcl.exception.invalid("cbc can't authenticate data"); - } - if (sjcl.bitArray.bitLength(iv) !== 128) { - throw new sjcl.exception.invalid("cbc iv must be 128 bits"); - } - if ((sjcl.bitArray.bitLength(ciphertext) & 127) || !ciphertext.length) { - throw new sjcl.exception.corrupt("cbc ciphertext must be a positive multiple of the block size"); - } - var i, - w = sjcl.bitArray, - xor = w._xor4, - bi, bo, - output = []; - - adata = adata || []; - - for (i=0; i 16) { - throw new sjcl.exception.corrupt("pkcs#5 padding corrupt"); - } - bo = bi * 0x1010101; - if (!w.equal(w.bitSlice([bo,bo,bo,bo], 0, bi*8), - w.bitSlice(output, output.length*32 - bi*8, output.length*32))) { - throw new sjcl.exception.corrupt("pkcs#5 padding corrupt"); - } - - return w.bitSlice(output, 0, output.length*32 - bi*8); - } - }; -}; - -/** @fileOverview HMAC implementation. - * - * @author Emily Stark - * @author Mike Hamburg - * @author Dan Boneh - */ - -/** HMAC with the specified hash function. - * @constructor - * @param {bitArray} key the key for HMAC. - * @param {Object} [hash=sjcl.hash.sha256] The hash function to use. - */ -sjcl.misc.hmac = function (key, Hash) { - this._hash = Hash = Hash || sjcl.hash.sha256; - var exKey = [[],[]], i, - bs = Hash.prototype.blockSize / 32; - this._baseHash = [new Hash(), new Hash()]; - - if (key.length > bs) { - key = Hash.hash(key); - } - - for (i=0; i>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) + - (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) + - w[i&15] + w[(i+9) & 15]) | 0; - } - - tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0; - - // shift register - h7 = h6; h6 = h5; h5 = h4; - h4 = h3 + tmp | 0; - h3 = h2; h2 = h1; h1 = h0; - - h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0; - } - - h[0] = h[0]+h0 | 0; - h[1] = h[1]+h1 | 0; - h[2] = h[2]+h2 | 0; - h[3] = h[3]+h3 | 0; - h[4] = h[4]+h4 | 0; - h[5] = h[5]+h5 | 0; - h[6] = h[6]+h6 | 0; - h[7] = h[7]+h7 | 0; - } -}; - - - -/** @fileOverview Random number generator. - * - * @author Emily Stark - * @author Mike Hamburg - * @author Dan Boneh - */ - -/** @namespace Random number generator - * - * @description - *

- * This random number generator is a derivative of Ferguson and Schneier's - * generator Fortuna. It collects entropy from various events into several - * pools, implemented by streaming SHA-256 instances. It differs from - * ordinary Fortuna in a few ways, though. - *

- * - *

- * Most importantly, it has an entropy estimator. This is present because - * there is a strong conflict here between making the generator available - * as soon as possible, and making sure that it doesn't "run on empty". - * In Fortuna, there is a saved state file, and the system is likely to have - * time to warm up. - *

- * - *

- * Second, because users are unlikely to stay on the page for very long, - * and to speed startup time, the number of pools increases logarithmically: - * a new pool is created when the previous one is actually used for a reseed. - * This gives the same asymptotic guarantees as Fortuna, but gives more - * entropy to early reseeds. - *

- * - *

- * The entire mechanism here feels pretty klunky. Furthermore, there are - * several improvements that should be made, including support for - * dedicated cryptographic functions that may be present in some browsers; - * state files in local storage; cookies containing randomness; etc. So - * look for improvements in future versions. - *

- */ -sjcl.random = { - /** Generate several random words, and return them in an array - * @param {Number} nwords The number of words to generate. - */ - randomWords: function (nwords, paranoia) { - var out = [], i, readiness = this.isReady(paranoia), g; - - if (readiness === this._NOT_READY) { - throw new sjcl.exception.notReady("generator isn't seeded"); - } else if (readiness & this._REQUIRES_RESEED) { - this._reseedFromPools(!(readiness & this._READY)); - } - - for (i=0; i0) { - estimatedEntropy++; - tmp = tmp >>> 1; - } - } - } - this._pools[robin].update([id,this._eventId++,2,estimatedEntropy,t,data.length].concat(data)); - } - break; - - case "string": - if (estimatedEntropy === undefined) { - /* English text has just over 1 bit per character of entropy. - * But this might be HTML or something, and have far less - * entropy than English... Oh well, let's just say one bit. - */ - estimatedEntropy = data.length; - } - this._pools[robin].update([id,this._eventId++,3,estimatedEntropy,t,data.length]); - this._pools[robin].update(data); - break; - - default: - err=1; - } - if (err) { - throw new sjcl.exception.bug("random: addEntropy only supports number, array of numbers or string"); - } - - /* record the new strength */ - this._poolEntropy[robin] += estimatedEntropy; - this._poolStrength += estimatedEntropy; - - /* fire off events */ - if (oldReady === this._NOT_READY) { - if (this.isReady() !== this._NOT_READY) { - this._fireEvent("seeded", Math.max(this._strength, this._poolStrength)); - } - this._fireEvent("progress", this.getProgress()); - } - }, - - /** Is the generator ready? */ - isReady: function (paranoia) { - var entropyRequired = this._PARANOIA_LEVELS[ (paranoia !== undefined) ? paranoia : this._defaultParanoia ]; - - if (this._strength && this._strength >= entropyRequired) { - return (this._poolEntropy[0] > this._BITS_PER_RESEED && (new Date()).valueOf() > this._nextReseed) ? - this._REQUIRES_RESEED | this._READY : - this._READY; - } else { - return (this._poolStrength >= entropyRequired) ? - this._REQUIRES_RESEED | this._NOT_READY : - this._NOT_READY; - } - }, - - /** Get the generator's progress toward readiness, as a fraction */ - getProgress: function (paranoia) { - var entropyRequired = this._PARANOIA_LEVELS[ paranoia ? paranoia : this._defaultParanoia ]; - - if (this._strength >= entropyRequired) { - return 1.0; - } else { - return (this._poolStrength > entropyRequired) ? - 1.0 : - this._poolStrength / entropyRequired; - } - }, - - /** start the built-in entropy collectors */ - startCollectors: function () { - if (this._collectorsStarted) { return; } - - if (window.addEventListener) { - window.addEventListener("load", this._loadTimeCollector, false); - window.addEventListener("mousemove", this._mouseCollector, false); - } else if (document.attachEvent) { - document.attachEvent("onload", this._loadTimeCollector); - document.attachEvent("onmousemove", this._mouseCollector); - } - else { - throw new sjcl.exception.bug("can't attach event"); - } - - this._collectorsStarted = true; - }, - - /** stop the built-in entropy collectors */ - stopCollectors: function () { - if (!this._collectorsStarted) { return; } - - if (window.removeEventListener) { - window.removeEventListener("load", this._loadTimeCollector, false); - window.removeEventListener("mousemove", this._mouseCollector, false); - } else if (window.detachEvent) { - window.detachEvent("onload", this._loadTimeCollector); - window.detachEvent("onmousemove", this._mouseCollector); - } - this._collectorsStarted = false; - }, - - /* use a cookie to store entropy. - useCookie: function (all_cookies) { - throw new sjcl.exception.bug("random: useCookie is unimplemented"); - },*/ - - /** add an event listener for progress or seeded-ness. */ - addEventListener: function (name, callback) { - this._callbacks[name][this._callbackI++] = callback; - }, - - /** remove an event listener for progress or seeded-ness */ - removeEventListener: function (name, cb) { - var i, j, cbs=this._callbacks[name], jsTemp=[]; - - /* I'm not sure if this is necessary; in C++, iterating over a - * collection and modifying it at the same time is a no-no. - */ - - for (j in cbs) { - if (cbs.hasOwnProperty(j) && cbs[j] === cb) { - jsTemp.push(j); - } - } - - for (i=0; i= 1 << this._pools.length) { - this._pools.push(new sjcl.hash.sha256()); - this._poolEntropy.push(0); - } - - /* how strong was this reseed? */ - this._poolStrength -= strength; - if (strength > this._strength) { - this._strength = strength; - } - - this._reseedCount ++; - this._reseed(reseedData); - }, - - _mouseCollector: function (ev) { - var x = ev.x || ev.clientX || ev.offsetX || 0, y = ev.y || ev.clientY || ev.offsetY || 0; - sjcl.random.addEntropy([x,y], 2, "mouse"); - }, - - _loadTimeCollector: function (ev) { - sjcl.random.addEntropy((new Date()).valueOf(), 2, "loadtime"); - }, - - _fireEvent: function (name, arg) { - var j, cbs=sjcl.random._callbacks[name], cbsTemp=[]; - /* TODO: there is a race condition between removing collectors and firing them */ - - /* I'm not sure if this is necessary; in C++, iterating over a - * collection and modifying it at the same time is a no-no. - */ - - for (j in cbs) { - if (cbs.hasOwnProperty(j)) { - cbsTemp.push(cbs[j]); - } - } - - for (j=0; j 0) { - found = found.concat(findInputs(child)); - } - } - - return found; - }; - - var generateRsaKey = function () { - var asn1, exponent, parts, modulus, rawKey, rsa; - - try { - rawKey = b64toBA(publicKey); - asn1 = ASN1.decode(rawKey); - } catch (e) { - throw "Invalid encryption key. Please use the key labeled 'Client-Side Encryption Key'"; - } - - parts = extractIntegers(asn1); - - if (parts.length !== 2) { - throw "Invalid encryption key. Please use the key labeled 'Client-Side Encryption Key'"; - } - - modulus = parts[0]; - exponent = parts[1]; - - rsa = new RSAKey(); - rsa.setPublic(modulus, exponent); - - return rsa; - }; - - var generateHmacKey = function () { - return { - key: sjcl.random.randomWords(8, 0), - sign: function (message) { - var hmac = new sjcl.misc.hmac(this.key, sjcl.hash.sha256), - signature = hmac.encrypt(message); - - return sjcl.codec.base64.fromBits(signature); - } - }; - }; - - self.encrypt = function (plaintext) { - var rsa = generateRsaKey(), - aes = Braintree.generateAesKey(), - hmac = generateHmacKey(), - ciphertext = aes.encrypt(plaintext), - signature = hmac.sign(sjcl.codec.base64.toBits(ciphertext)), - combinedKey = sjcl.bitArray.concat(aes.key, hmac.key), - encodedKey = sjcl.codec.base64.fromBits(combinedKey), - hexEncryptedKey = rsa.encrypt(encodedKey), - prefix = "$bt4|javascript_" + self.version.replace(/\./g, "_") + "$", - encryptedKey = null; - - if(hexEncryptedKey) { - encryptedKey = hex2b64(hexEncryptedKey); - } - - return prefix + encryptedKey + "$" + ciphertext + "$" + signature; - }; - - self.encryptForm = function (form) { - var element, encryptedValue, - fieldName, hiddenField, - i, inputs; - - form = extractForm(form); - inputs = findInputs(form); - - while (hiddenFields.length > 0) { - try { - form.removeChild(hiddenFields[0]); - } catch (err) {} - hiddenFields.splice(0, 1); - } - - for (i = 0; i < inputs.length; i++) { - element = inputs[i]; - fieldName = element.getAttribute("data-encrypted-name"); - encryptedValue = self.encrypt(element.value); - element.removeAttribute("name"); - hiddenField = createElement("input", { - value: encryptedValue, - type: "hidden", - name: fieldName - }); - hiddenFields.push(hiddenField); - form.appendChild(hiddenField); - } - }; - - self.onSubmitEncryptForm = function (form, callback) { - var wrappedCallback; - - form = extractForm(form); - - wrappedCallback = function (e) { - self.encryptForm(form); - return (!!callback) ? callback(e) : e; - }; - - if (window.jQuery) { - window.jQuery(form).submit(wrappedCallback); - } else if (form.addEventListener) { - form.addEventListener("submit", wrappedCallback, false); - } else if (form.attachEvent) { - form.attachEvent("onsubmit", wrappedCallback); - } - }; - - // backwards compatibility - self.formEncrypter = { - encryptForm: self.encryptForm, - extractForm: extractForm, - onSubmitEncryptForm: self.onSubmitEncryptForm - }; - - sjcl.random.startCollectors(); -}; - -window.Braintree = Braintree; - -})(); - -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.braintree=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o> 4 ) & 0x3 ); - var b = ( ( b2 & 0xF ) << 4 ) | ( ( b3 >> 2 ) & 0xF ); - var c = ( ( b3 & 0x3 ) << 6 ) | ( b4 & 0x3F ); - - result += String.fromCharCode(a) + (b?String.fromCharCode(b):"") + (c?String.fromCharCode(c):""); - - } while( i < base64String.length ); - - return result; -}; - -global.atob = global.atob || atobPolyfill; - -module.exports = { - atobPolyfill: atobPolyfill -}; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],12:[function(require,module,exports){ -(function (global){ -'use strict'; - -var util = require('../util'); -var prepBody = require('./prep-body'); -var parseBody = require('./parse-body'); -var constants = require('../constants'); -var isXHRAvailable = global.XMLHttpRequest && 'withCredentials' in new global.XMLHttpRequest(); - -function getRequestObject() { - return isXHRAvailable ? new XMLHttpRequest() : new XDomainRequest(); -} - -function get(url, attrs, deserializer, callback, timeout) { - var urlParams = util.createURLParams(url, attrs); - makeRequest('GET', urlParams, null, deserializer, callback, timeout); -} - -function post(url, attrs, deserializer, callback, timeout) { - makeRequest('POST', url, attrs, deserializer, callback, timeout); -} - -function makeRequest(method, url, body, deserializer, callback, timeout) { - var status, resBody; - var req = getRequestObject(); - - callback = callback || function () {}; - - if (isXHRAvailable) { - req.onreadystatechange = function () { - if (req.readyState !== 4) { return; } - - status = req.status; - resBody = parseBody(req.responseText); - - if (status >= 400 || status === 0) { - callback.call(null, resBody || {errors: constants.errors.UNKNOWN_ERROR}, null); - } else if (status > 0) { - callback.call(null, null, deserializer(resBody)); - } - }; - } else { - req.onload = function () { - callback.call(null, null, deserializer(parseBody(req.responseText))); - }; - - req.onerror = function () { - callback.call(null, req.responseText, null); - }; - - // This must remain for IE9 to work - req.onprogress = function() {}; - - req.ontimeout = function () { - callback.call(null, {errors: constants.errors.UNKNOWN_ERROR}, null); - }; - } - - req.open(method, url, true); - req.timeout = timeout == null ? 60000 : timeout; - - if (isXHRAvailable && method === 'POST') { - req.setRequestHeader('Content-Type', 'application/json'); - } - - setTimeout(function () { - req.send(prepBody(method, body)); - }, 0); -} - -module.exports = { - get: get, - post: post -}; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"../constants":4,"../util":20,"./parse-body":16,"./prep-body":17}],13:[function(require,module,exports){ -'use strict'; - -var JSONPDriver = require('./jsonp-driver'); -var AJAXDriver = require('./ajax-driver'); -var util = require('../util'); - -function chooseRequestDriver(options) { - var ua = util.getUserAgent(); - var isAJAXAvailable = !(util.isHTTP() && /(MSIE\s(8|9))|(Phantom)/.test(ua)); - - options = options || {}; - - if (options.enableCORS && isAJAXAvailable) { - return AJAXDriver; - } else { - return JSONPDriver; - } -} - -module.exports = chooseRequestDriver; - -},{"../util":20,"./ajax-driver":12,"./jsonp-driver":14}],14:[function(require,module,exports){ -'use strict'; - -var JSONP = require('./jsonp'); -var constants = require('../constants'); -var timeoutWatchers = []; - -function deserialize(response, mapper) { - if (response.status >= 400) { - return [response, null]; - } else { - return [null, mapper(response)]; - } -} - -function noop() {} - -function requestWithTimeout(url, attrs, deserializer, method, callback, timeout) { - var uniqueName; - - callback = callback || noop; - - if (timeout == null) { - timeout = 60000; - } - - uniqueName = method(url, attrs, function (data, name) { - if (timeoutWatchers[name]) { - clearTimeout(timeoutWatchers[name]); - callback.apply(null, deserialize(data, function (d) { return deserializer(d); })); - } - }); - - if (typeof timeout === 'number') { - timeoutWatchers[uniqueName] = setTimeout(function () { - timeoutWatchers[uniqueName] = null; - callback.apply(null, [{errors: constants.errors.UNKNOWN_ERROR}, null]); - }, timeout); - } else { - callback.apply(null, [{errors: constants.errors.INVALID_TIMEOUT}, null]); - } -} - -function post(url, attrs, deserializer, callback, timeout) { - attrs._method = 'POST'; - requestWithTimeout(url, attrs, deserializer, JSONP.get, callback, timeout); -} - -function get(url, attrs, deserializer, callback, timeout) { - requestWithTimeout(url, attrs, deserializer, JSONP.get, callback, timeout); -} - -module.exports = { - get: get, - post: post -}; - -},{"../constants":4,"./jsonp":15}],15:[function(require,module,exports){ -(function (global){ -'use strict'; - -var util = require('../util'); - -/* -* Lightweight JSONP fetcher -* Copyright 2010-2012 Erik Karlsson. All rights reserved. -* BSD licensed -*/ -var head, - window = global, - config = {}; - -function load(url, pfnError) { - var script = document.createElement('script'), - done = false; - script.src = url; - script.async = true; - - var errorHandler = pfnError || config.error; - if ( typeof errorHandler === 'function' ) { - script.onerror = function (ex){ - errorHandler({url: url, event: ex}); - }; - } - - script.onload = script.onreadystatechange = function () { - if ( !done && (!this.readyState || this.readyState === "loaded" || this.readyState === "complete") ) { - done = true; - script.onload = script.onreadystatechange = null; - if ( script && script.parentNode ) { - script.parentNode.removeChild( script ); - } - } - }; - - if ( !head ) { - head = document.getElementsByTagName('head')[0]; - } - head.appendChild( script ); -} - -function jsonp(url, params, callback, callbackName) { - var urlParams, key, uniqueName; - - callbackName = (callbackName||config['callbackName']||'callback'); - uniqueName = callbackName + "_json" + util.generateUUID(); - params[callbackName] = uniqueName; - urlParams = util.createURLParams(url, params) - - window[ uniqueName ] = function (data){ - callback(data, uniqueName); - try { - delete window[ uniqueName ]; - } catch (e) {} - window[ uniqueName ] = null; - }; - - load(urlParams); - return uniqueName; -} - -function setDefaults(obj){ - config = obj; -} - -module.exports = { - get: jsonp, - init: setDefaults -}; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"../util":20}],16:[function(require,module,exports){ -'use strict'; - -module.exports = function (body) { - try { - body = JSON.parse(body); - } catch (e) {} - - return body; -}; - -},{}],17:[function(require,module,exports){ -'use strict'; - -var isString = require('lodash.isstring'); - -module.exports = function (method, body) { - if (!isString(method)) { - throw new Error('Method must be a string'); - } - - if (method.toLowerCase() !== 'get' && body != null) { - body = isString(body) ? body : JSON.stringify(body); - } - - return body; -}; - -},{"lodash.isstring":51}],18:[function(require,module,exports){ -'use strict'; - -function SEPAMandate(attributes) { - var i = 0; - var attribute; - var allAttributes = [ - 'accountHolderName', - 'bic', - 'longFormURL', - 'mandateReferenceNumber', - 'maskedIBAN', - 'shortForm' - ]; - - for (i = 0; i < allAttributes.length; i++) { - attribute = allAttributes[i]; - this[attribute] = attributes[attribute]; - } -} - -module.exports = SEPAMandate; - -},{}],19:[function(require,module,exports){ -'use strict'; - -module.exports = function (options) { - if (options.enableCORS != null) { - return options.enableCORS; - } - - if (options.merchantConfiguration) { - return options.merchantConfiguration.enableCORS; - } - - return false; -}; - -},{}],20:[function(require,module,exports){ -(function (global){ -'use strict'; - -var isEmpty = require('lodash.isempty'); -var isObject = require('lodash.isobject'); - -function joinUrlFragments(fragments) { - var strippedFragments = [], - strippedFragment, - i; - - for (i = 0; i < fragments.length; i++) { - strippedFragment = fragments[i]; - if (strippedFragment.charAt(strippedFragment.length - 1) === '/') { - strippedFragment = strippedFragment.substring(0, strippedFragment.length - 1); - } - if (strippedFragment.charAt(0) === '/') { - strippedFragment = strippedFragment.substring(1); - } - - strippedFragments.push(strippedFragment); - } - - return strippedFragments.join('/'); -} - -function isArray(value) { - return value && typeof value === 'object' && typeof value.length === 'number' && - Object.prototype.toString.call(value) === '[object Array]' || false; -} - -function generateUUID() { // RFC 4122 v4 (pseudo-random) UUID without hyphens - return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function (xORy) { - var randomHex = Math.floor(Math.random() * 16); - var uuidHex = xORy === 'x' ? randomHex : randomHex & 0x3 | 0x8; // jshint ignore:line - return uuidHex.toString(16); - }); -} - -function mergeOptions(obj1, obj2) { - var obj3 = {}; - var attrname; - for (attrname in obj1) { - if (obj1.hasOwnProperty(attrname)) { - obj3[attrname] = obj1[attrname]; - } - } - for (attrname in obj2) { - if (obj2.hasOwnProperty(attrname)) { - obj3[attrname] = obj2[attrname]; - } - } - return obj3; -} - -function stringify(params, namespace) { - var query = [], k, v, p; - - for (p in params) { - if (!params.hasOwnProperty(p)) { - continue; - } - - v = params[p]; - - if (namespace) { - if (isArray(params)) { - k = namespace + '[]'; - } else { - k = namespace + '[' + p + ']'; - } - } else { - k = p; - } - if (typeof v === 'object') { - query.push(stringify(v, k)); - } else { - query.push(encodeURIComponent(k) + '=' + encodeURIComponent(v)); - } - } - - return query.join('&'); -} - -function createURLParams(url, params) { - url = url || ''; - - if (!isEmpty(params) && isObject(params)) { - url += url.indexOf('?') === -1 ? '?' : ''; - url += url.indexOf('=') !== -1 ? '&' : ''; - url += stringify(params); - } - - return url; -} - -function getUserAgent() { - return global.navigator.userAgent; -} - -function isHTTP() { - return global.location.protocol === 'http:'; -} - -module.exports = { - joinUrlFragments: joinUrlFragments, - isArray: isArray, - generateUUID: generateUUID, - mergeOptions: mergeOptions, - stringify: stringify, - createURLParams: createURLParams, - getUserAgent: getUserAgent, - isHTTP: isHTTP -}; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"lodash.isempty":44,"lodash.isobject":50}],21:[function(require,module,exports){ -'use strict'; - -var Client = require('./lib/client'); -var util = require('./lib/util'); -var parseClientToken = require('./lib/parse-client-token'); -var getConfiguration = require('./lib/get-configuration'); - -function configure(options) { - return new Client(options); -} - -module.exports = { - Client: Client, - configure: configure, - util: util, - parseClientToken: parseClientToken, - _getConfiguration: getConfiguration -}; - -},{"./lib/client":2,"./lib/get-configuration":7,"./lib/parse-client-token":9,"./lib/util":20}],22:[function(require,module,exports){ -'use strict'; - -function normalizeElement (element, errorMessage) { - errorMessage = errorMessage || '[' + element + '] is not a valid DOM Element'; - - if (element && element.nodeType && element.nodeType === 1) { - return element; - } - if (element && window.jQuery && (element instanceof jQuery || 'jquery' in Object(element)) && element.length !== 0) { - return element[0]; - } - - if (typeof element === 'string' && document.getElementById(element)) { - return document.getElementById(element); - } - - throw new Error(errorMessage); -} - -module.exports = { - normalizeElement: normalizeElement -}; - -},{}],23:[function(require,module,exports){ -'use strict'; - -function addEventListener(element, type, listener, useCapture) { - if (element.addEventListener) { - element.addEventListener(type, listener, useCapture); - } else if (element.attachEvent) { - element.attachEvent('on' + type, listener); - } -} - -function removeEventListener(element, type, listener, useCapture) { - if (element.removeEventListener) { - element.removeEventListener(type, listener, useCapture); - } else if (element.detachEvent) { - element.detachEvent('on' + type, listener); - } -} - -module.exports = { - addEventListener: addEventListener, - removeEventListener: removeEventListener -}; - -},{}],24:[function(require,module,exports){ -'use strict'; - -var toString = Object.prototype.toString; - -function isFunction(func) { - return toString.call(func) === '[object Function]'; -} - -function bind(func, context) { - return function () { - func.apply(context, arguments); - }; -} - -module.exports = { - bind: bind, - isFunction: isFunction -}; - -},{}],25:[function(require,module,exports){ -'use strict'; - -function isBrowserHttps() { - return window.location.protocol === 'https:'; -} - -function encode(str) { - switch (str) { - case null: - case undefined: - return ''; - case true: - return '1'; - case false: - return '0'; - default: - return encodeURIComponent(str); - } -} - -function makeQueryString(params, namespace) { - var query = [], k, p; - for (p in params) { - if (params.hasOwnProperty(p)) { - var v = params[p]; - if (namespace) { - k = namespace + '[' + p + ']'; - } else { - k = p; - } - if (typeof v === 'object') { - query.push(makeQueryString(v, k)); - } else if (v !== undefined && v !== null) { - query.push(encode(k) + '=' + encode(v)); - } - } - } - return query.join('&'); -} - -function decodeQueryString(queryString) { - var params = {}, - paramPairs = queryString.split('&'); - - for (var i = 0; i < paramPairs.length; i++) { - var paramPair = paramPairs[i].split('='); - var key = paramPair[0]; - var value = decodeURIComponent(paramPair[1]); - params[key] = value; - } - - return params; -} - -function getParams(url) { - var urlSegments = url.split('?'); - - if (urlSegments.length !== 2) { - return {}; - } - - return decodeQueryString(urlSegments[1]); -} - -module.exports = { - isBrowserHttps: isBrowserHttps, - makeQueryString: makeQueryString, - decodeQueryString: decodeQueryString, - getParams: getParams -}; - -},{}],26:[function(require,module,exports){ -var dom = require('./lib/dom'); -var url = require('./lib/url'); -var fn = require('./lib/fn'); -var events = require('./lib/events'); - -module.exports = { - normalizeElement: dom.normalizeElement, - isBrowserHttps: url.isBrowserHttps, - makeQueryString: url.makeQueryString, - decodeQueryString: url.decodeQueryString, - getParams: url.getParams, - removeEventListener: events.removeEventListener, - addEventListener: events.addEventListener, - bind: fn.bind, - isFunction: fn.isFunction -}; - -},{"./lib/dom":22,"./lib/events":23,"./lib/fn":24,"./lib/url":25}],27:[function(require,module,exports){ -'use strict'; - -var utils = require('braintree-utilities'); -var Receiver = require('../shared/receiver'); -var version = "1.3.0"; - -var htmlNode, bodyNode; - -function getElementStyle(element, style) { - var computedStyle = window.getComputedStyle ? getComputedStyle(element) : element.currentStyle; - - return computedStyle[style]; -} - -function getMerchantPageDefaultStyles() { - return { - html: { - height: htmlNode.style.height || '', - overflow: getElementStyle(htmlNode, 'overflow'), - position: getElementStyle(htmlNode, 'position') - }, - body: { - height: bodyNode.style.height || '', - overflow: getElementStyle(bodyNode, 'overflow') - } - }; -} - -function AuthenticationService (assetsUrl, container) { - this.assetsUrl = assetsUrl; - this.container = container || document.body; - this.iframe = null; - - htmlNode = document.documentElement; - bodyNode = document.body; - this.merchantPageDefaultStyles = getMerchantPageDefaultStyles(); -} - -AuthenticationService.prototype.get = function (response, callback) { - var self = this, - url = this.constructAuthorizationURL(response); - - if (this.container && utils.isFunction(this.container)) { - this.container(url + '&no_style=1'); - } else { - this.insertIframe(url); - } - - new Receiver(function (response) { - if (!utils.isFunction(self.container)) { - self.removeIframe(); - } - callback(response); - }); -}; - -AuthenticationService.prototype.removeIframe = function () { - if (this.container && this.container.nodeType && this.container.nodeType === 1) { - this.container.removeChild(this.iframe); - } else if (this.container && window.jQuery && this.container instanceof jQuery) { - $(this.iframe, this.container).remove(); - } else if (typeof this.container === 'string') { - document.getElementById(this.container).removeChild(this.iframe); - } - - this.unlockMerchantWindowSize(); -}; - -AuthenticationService.prototype.insertIframe = function (url) { - // TODO: Security - This takes a url and makes an iframe. Doesn't seem like this would be a problem. - var iframe = document.createElement('iframe'); - iframe.src = url; - this.applyStyles(iframe); - this.lockMerchantWindowSize(); - - if (this.container && this.container.nodeType && this.container.nodeType === 1) { - this.container.appendChild(iframe); - } else if (this.container && window.jQuery && this.container instanceof jQuery && this.container.length !== 0) { - this.container.append(iframe); - } else if (typeof this.container === 'string' && document.getElementById(this.container)) { - document.getElementById(this.container).appendChild(iframe); - } else { - throw new Error('Unable to find valid container for iframe.'); - } - this.iframe = iframe; -}; - -AuthenticationService.prototype.applyStyles = function (iframe) { - iframe.style.position = 'fixed'; - iframe.style.top = '0'; - iframe.style.left = '0'; - iframe.style.height = '100%'; - iframe.style.width = '100%'; - iframe.setAttribute('frameborder', '0'); - iframe.setAttribute('allowTransparency', 'true'); - iframe.style.border = '0'; - iframe.style.zIndex = '99999'; -}; - -AuthenticationService.prototype.lockMerchantWindowSize = function () { - htmlNode.style.overflow = 'hidden'; - bodyNode.style.overflow = 'hidden'; - bodyNode.style.height = '100%'; -}; - -AuthenticationService.prototype.unlockMerchantWindowSize = function () { - var defaultStyles = this.merchantPageDefaultStyles; - - bodyNode.style.height = defaultStyles.body.height; - bodyNode.style.overflow = defaultStyles.body.overflow; - - htmlNode.style.overflow = defaultStyles.html.overflow; -}; - -AuthenticationService.prototype.constructAuthorizationURL = function (response) { - var queryString, - parentURL = window.location.href; - - if (parentURL.indexOf('#') > -1) { - parentURL = parentURL.split('#')[0]; - } - - queryString = utils.makeQueryString({ - acsUrl: response.acsUrl, - pareq: response.pareq, - termUrl: response.termUrl + '&three_d_secure_version=' + version, - md: response.md, - parentUrl: parentURL - }); - return this.assetsUrl + '/3ds/' + version + '/html/style_frame?' + queryString; -}; - -module.exports = AuthenticationService; - -},{"../shared/receiver":34,"braintree-utilities":26}],28:[function(require,module,exports){ -'use strict'; - -var utils = require('braintree-utilities'); -var AuthenticationService = require('./authorization_service'); -var Loader = require('./loader'); - -function noop() {} - -function Client(api, options) { - options = options || {}; - this.clientToken = options.clientToken; - this.container = options.container; - this.api = api; - this.nonce = null; - - this._loader = null; - this._boundHandleUserClose = utils.bind(this._handleUserClose, this); -} - -Client.prototype.verify = function (data, callback) { - if (!utils.isFunction(callback)) { - this.api.sendAnalyticsEvents('3ds.web.no_callback'); - throw new Error('No suitable callback argument was given'); - } - if (utils.isFunction(data.onUserClose)) { - this._onUserClose = data.onUserClose; - } - if (utils.isFunction(data.onLookupComplete)) { - this._onLookupComplete = data.onLookupComplete; - } - if (data.useDefaultLoader === undefined || data.useDefaultLoader === true) { - this._createDefaultLoader(); - } - - var dataRecord = {nonce: '', amount: data.amount}; - var creditCardMetaData = data.creditCard; - - if (typeof creditCardMetaData === 'string') { - dataRecord.nonce = creditCardMetaData; - this.api.sendAnalyticsEvents('3ds.web.verify.nonce'); - this.startVerification(dataRecord, callback); - } else { - var self = this; - var boundHandleTokenizeCard = function (err, nonce) { - if (err) { - self._removeDefaultLoader(); - - return callback(err); - } - dataRecord.nonce = nonce; - self.startVerification(dataRecord, callback); - }; - this.api.sendAnalyticsEvents('3ds.web.verify.credit_card'); - this.api.tokenizeCard(creditCardMetaData, boundHandleTokenizeCard); - } -}; - -Client.prototype.startVerification = function (data, merchantCallback) { - this.api.lookup3DS(data, utils.bind(this.handleLookupResponse(merchantCallback), this)); -}; - -Client.prototype.handleLookupResponse = function (merchantCallback) { - var self = this; - return function (errorResponse, lookupResponse) { - var authenticationService; - - this._onLookupComplete(); - - if (errorResponse) { - merchantCallback(errorResponse.error); - } else if (lookupResponse.lookup && lookupResponse.lookup.acsUrl && lookupResponse.lookup.acsUrl.length > 0) { - self.nonce = lookupResponse.paymentMethod.nonce; - authenticationService = new AuthenticationService(this.clientToken.assetsUrl, this.container); - authenticationService.get(lookupResponse.lookup, utils.bind(this.handleAuthenticationResponse(merchantCallback), this)); - - this._detachListeners(); - this._attachListeners(); - } else { - self.nonce = lookupResponse.paymentMethod.nonce; - merchantCallback(null, { - nonce: self.nonce, - verificationDetails: lookupResponse.threeDSecureInfo - }); - } - }; -}; - -Client.prototype.handleAuthenticationResponse = function (merchantCallback) { - return function (authResponseQueryString) { - var authResponse, - queryParams = utils.decodeQueryString(authResponseQueryString); - - if (queryParams.user_closed) { - return; - } - - authResponse = JSON.parse(queryParams.auth_response); - - if (authResponse.success) { - merchantCallback(null, { - nonce: authResponse.paymentMethod.nonce, - verificationDetails: authResponse.threeDSecureInfo - }); - } else if (authResponse.threeDSecureInfo && authResponse.threeDSecureInfo.liabilityShiftPossible) { - merchantCallback(null, { - nonce: this.nonce, - verificationDetails: authResponse.threeDSecureInfo - }); - } else { - merchantCallback(authResponse.error); - } - }; -}; - -Client.prototype._attachListeners = function () { - utils.addEventListener(window, 'message', this._boundHandleUserClose); -}; - -Client.prototype._detachListeners = function () { - utils.removeEventListener(window, 'message', this._boundHandleUserClose); -}; - -Client.prototype._createDefaultLoader = function () { - this._loader = new Loader(); - - document.body.appendChild(this._loader.getElement()); -}; - -Client.prototype._removeDefaultLoader = function () { - if (!this._loader) { - return; - } - - var loaderElement = this._loader.getElement(); - var parentElement = loaderElement.parentNode; - - if (parentElement) { - parentElement.removeChild(loaderElement); - } - - this._loader.dispose(); - this._loader = null; -}; - -Client.prototype._handleUserClose = function (event) { - if (event.data === 'user_closed=true') { - this._onUserClose(); - } -}; - -Client.prototype._onUserClose = noop; - -Client.prototype._onLookupComplete = function () { - this._removeDefaultLoader(); -}; - -module.exports = Client; - -},{"./authorization_service":27,"./loader":30,"braintree-utilities":26}],29:[function(require,module,exports){ -'use strict'; - -var Client = require('./client'); - -module.exports = { - create: function (clientToken, options) { - var client = new Client(clientToken, options); - return client; - } -}; - -},{"./client":28}],30:[function(require,module,exports){ -'use strict'; - -var LoaderDisplay = require('./loader_display'); -var LoaderMessage = require('./loader_message'); -var LoaderSpinner = require('./loader_spinner'); - -function Loader() { - this._element = document.createElement('div'); - this._element.style.cssText = this._cssDeclarations; - - this._display = null; - - this._initialize(); -} - -Loader.prototype._cssDeclarations = [ - 'filter:progid:DXImageTransform.Microsoft.Gradient(StartColorStr=#7F000000, EndColorStr=#7F000000)', - 'background-color: rgba(0, 0, 0, 0.5)', - 'display: table', - 'height: 100%', - 'left: 0', - 'position: fixed', - 'right: 0', - 'top: 0', - 'width: 100%', - 'z-index: 99999' -].join(';'); - -Loader.prototype.getElement = function () { - return this._element; -}; - -Loader.prototype.dispose = function () { - this._display.dispose(); - this._display = null; - - this._element = null; -}; - -Loader.prototype._initialize = function () { - var displayObject = new LoaderSpinner(); - var supportsSvgAnimations = (window.SVGElement && window.SVGAnimateElement && - window.SVGAnimateTransformElement); - - if (!(supportsSvgAnimations)) { - displayObject = new LoaderMessage('Loading...'); - } - - this._display = new LoaderDisplay(displayObject); - this.getElement().appendChild(this._display.getElement()); -}; - -module.exports = Loader; - -},{"./loader_display":31,"./loader_message":32,"./loader_spinner":33}],31:[function(require,module,exports){ -'use strict'; - -function LoaderDisplay(displayObject) { - this._element = document.createElement('div'); - this._element.style.cssText = this._cssDeclarations; - - this._displayObject = displayObject; - - this._initialize(); -} - -LoaderDisplay.prototype._cssDeclarations = [ - 'display: table-cell', - 'vertical-align: middle' -].join(';'); - -LoaderDisplay.prototype.getElement = function () { - return this._element; -}; - -LoaderDisplay.prototype.dispose = function () { - this._displayObject.dispose(); - this._displayObject = null; - - this._element = null; -}; - -LoaderDisplay.prototype._initialize = function () { - this.getElement().appendChild(this._displayObject.getElement()); -}; - -module.exports = LoaderDisplay; - -},{}],32:[function(require,module,exports){ -'use strict'; - -function LoaderMessage(text) { - this._element = document.createElement('div'); - this._element.style.cssText = this._cssDeclarations; - this._element.innerHTML = text; -} - -LoaderMessage.prototype._cssDeclarations = [ - 'color: #fff', - 'font-family: Helvetica, sans-serif', - 'font-size: 12px', - 'text-align: center' -].join(';'); - -LoaderMessage.prototype.getElement = function () { - return this._element; -}; - -LoaderMessage.prototype.dispose = function () { - this._element = null; -}; - -module.exports = LoaderMessage; - -},{}],33:[function(require,module,exports){ -'use strict'; - -function LoaderSpinner() { - this._element = document.createElement('div'); - this._element.style.cssText = this._cssDeclarations; - this._element.innerHTML = this._markup; -} - -LoaderSpinner.prototype._cssDeclarations = [ - 'height: 36px', - 'margin-left: auto', - 'margin-right: auto', - 'width: 36px' -].join(';'); - -LoaderSpinner.prototype._markup = [ - '', - ' ', - ' ', - ' ', - '' -].join(''); - -LoaderSpinner.prototype.getElement = function () { - return this._element; -}; - -LoaderSpinner.prototype.dispose = function () { - this._element = null; -}; - -module.exports = LoaderSpinner; - -},{}],34:[function(require,module,exports){ -'use strict'; - -var utils = require('braintree-utilities'); - -function Receiver (callback) { - this.postMessageReceiver(callback); - this.hashChangeReceiver(callback); -} - -Receiver.prototype.postMessageReceiver = function (callback) { - var self = this; - - this.wrappedCallback = function (event) { - var data = event.data; - - if (/^(auth_response=)/.test(data) || data === 'user_closed=true') { - callback(data); - self.stopListening(); - } - }; - - utils.addEventListener(window, 'message', this.wrappedCallback); -}; - -Receiver.prototype.hashChangeReceiver = function (callback) { - var hash, - originalHash = window.location.hash, - self = this; - - this.poll = setInterval(function () { - hash = window.location.hash; - - if (hash.length > 0 && (hash !== originalHash)) { - self.stopListening(); - - hash = hash.substring(1, hash.length); - callback(hash); - - if (originalHash.length > 0) { - window.location.hash = originalHash; - } else { - window.location.hash = ''; - } - } - }, 10); -}; - -Receiver.prototype.stopListening = function () { - clearTimeout(this.poll); - - utils.removeEventListener(window, 'message', this.wrappedCallback); -}; - -module.exports = Receiver; - -},{"braintree-utilities":26}],35:[function(require,module,exports){ -'use strict'; - -var nativeIndexOf = Array.prototype.indexOf; - -var indexOf; -if (nativeIndexOf) { - indexOf = function (haystack, needle) { - return haystack.indexOf(needle); - }; -} else { - indexOf = function indexOf(haystack, needle) { - for (var i = 0, len = haystack.length; i < len; i++) { - if (haystack[i] === needle) { - return i; - } - } - return -1; - }; -} - -module.exports = { - indexOf: indexOf -}; - -},{}],36:[function(require,module,exports){ -'use strict'; - -function _escape(string) { - var i, hex; - var escaped = ''; - - for (i = 0; i < string.length; i++) { - escaped += '%'; - hex = string[i].charCodeAt(0).toString(16).toUpperCase(); - - if (hex.length < 2) { - escaped += '0'; - } - - escaped += hex; - } - - return escaped; -} - -function decodeUtf8(b64) { - return decodeURIComponent(_escape(atob(b64))); -} - -module.exports = { - decodeUtf8: decodeUtf8 -}; - -},{}],37:[function(require,module,exports){ -arguments[4][22][0].apply(exports,arguments) -},{"dup":22}],38:[function(require,module,exports){ -'use strict'; - -function addEventListener(element, type, listener, useCapture) { - if (element.addEventListener) { - element.addEventListener(type, listener, useCapture || false); - } else if (element.attachEvent) { - element.attachEvent('on' + type, listener); - } -} - -function removeEventListener(element, type, listener, useCapture) { - if (element.removeEventListener) { - element.removeEventListener(type, listener, useCapture || false); - } else if (element.detachEvent) { - element.detachEvent('on' + type, listener); - } -} - -function preventDefault(event) { - if (event.preventDefault) { - event.preventDefault(); - } else { - event.returnValue = false; - } -} - -module.exports = { - addEventListener: addEventListener, - removeEventListener: removeEventListener, - preventDefault: preventDefault -}; - -},{}],39:[function(require,module,exports){ -'use strict'; - -var toString = Object.prototype.toString; - -function isFunction(func) { - return toString.call(func) === '[object Function]'; -} - -function bind(func, context) { - return function () { - return func.apply(context, arguments); - }; -} - -module.exports = { - bind: bind, - isFunction: isFunction -}; - -},{}],40:[function(require,module,exports){ -'use strict'; - -function getMaxCharLength(width) { - var max, i, range, len; - var ranges = [ - { min: 0, max: 180, chars: 7 }, - { min: 181, max: 620, chars: 14 }, - { min: 621, max: 960, chars: 22 } - ]; - - len = ranges.length; - - width = width || window.innerWidth; - - for (i = 0; i < len; i++) { - range = ranges[i]; - - if (width >= range.min && width <= range.max) { - max = range.chars; - } - } - - return max || 60; -} - -function truncateEmail(email, maxLength) { - var address, domain; - - if (email.indexOf('@') === -1) { - return email; - } - - email = email.split('@'); - address = email[0]; - domain = email[1]; - - if (address.length > maxLength) { - address = address.slice(0, maxLength) + '...'; - } - - if (domain.length > maxLength) { - domain = '...' + domain.slice(-maxLength); - } - - return address + '@' + domain; -} - -module.exports = { - truncateEmail: truncateEmail, - getMaxCharLength: getMaxCharLength -}; - -},{}],41:[function(require,module,exports){ -'use strict'; - -var array = require('./array'); - -function isBrowserHttps() { - return window.location.protocol === 'https:'; -} - -function encode(str) { - switch (str) { - case null: - case undefined: - return ''; - case true: - return '1'; - case false: - return '0'; - default: - return encodeURIComponent(str); - } -} - -function makeQueryString(params, namespace) { - var query = [], k, p; - for (p in params) { - if (params.hasOwnProperty(p)) { - var v = params[p]; - if (namespace) { - k = namespace + '[' + p + ']'; - } else { - k = p; - } - if (typeof v === 'object') { - query.push(makeQueryString(v, k)); - } else if (v !== undefined && v !== null) { - query.push(encode(k) + '=' + encode(v)); - } - } - } - return query.join('&'); -} - -function decodeQueryString(queryString) { - var params = {}, - paramPairs = queryString.split('&'); - - for (var i = 0; i < paramPairs.length; i++) { - var paramPair = paramPairs[i].split('='); - var key = paramPair[0]; - var value = decodeURIComponent(paramPair[1]); - params[key] = value; - } - - return params; -} - -function getParams(url) { - var urlSegments = url.split('?'); - - if (urlSegments.length !== 2) { - return {}; - } - - return decodeQueryString(urlSegments[1]); -} - -var parser = document.createElement('a'); -var legalHosts = [ - 'paypal.com', - 'braintreepayments.com', - 'braintreegateway.com', - 'localhost' -]; - -function isWhitelistedDomain(url) { - url = url.toLowerCase(); - - if (!/^http/.test(url)) { - return false; - } - - parser.href = url; - - var pieces = parser.hostname.split('.'); - var topLevelDomain = pieces.slice(-2).join('.'); - - if (array.indexOf(legalHosts, topLevelDomain) === -1) { - return false; - } - - return true; -} - -module.exports = { - isBrowserHttps: isBrowserHttps, - makeQueryString: makeQueryString, - decodeQueryString: decodeQueryString, - getParams: getParams, - isWhitelistedDomain: isWhitelistedDomain -}; - -},{"./array":35}],42:[function(require,module,exports){ -'use strict'; - -// RFC 4122 v4 (pseudo-random) UUID -function generate() { - return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { - var r = Math.random() * 16 | 0; - var v = c === 'x' ? r : r & 0x3 | 0x8; - return v.toString(16); - }); -} - -module.exports = generate; - -},{}],43:[function(require,module,exports){ -var dom = require('./lib/dom'); -var url = require('./lib/url'); -var fn = require('./lib/fn'); -var events = require('./lib/events'); -var string = require('./lib/string'); -var array = require('./lib/array'); -var base64 = require('./lib/base64'); -var uuid = require('./lib/uuid'); - -module.exports = { - string: string, - array: array, - normalizeElement: dom.normalizeElement, - isBrowserHttps: url.isBrowserHttps, - makeQueryString: url.makeQueryString, - decodeQueryString: url.decodeQueryString, - getParams: url.getParams, - isWhitelistedDomain: url.isWhitelistedDomain, - removeEventListener: events.removeEventListener, - addEventListener: events.addEventListener, - preventDefault: events.preventDefault, - bind: fn.bind, - isFunction: fn.isFunction, - base64ToUtf8: base64.decodeUtf8, - uuid: uuid -}; - -},{"./lib/array":35,"./lib/base64":36,"./lib/dom":37,"./lib/events":38,"./lib/fn":39,"./lib/string":40,"./lib/url":41,"./lib/uuid":42}],44:[function(require,module,exports){ -/** - * lodash 3.0.4 (Custom Build) - * Build: `lodash modern modularize exports="npm" -o ./` - * Copyright 2012-2015 The Dojo Foundation - * Based on Underscore.js 1.8.3 - * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - * Available under MIT license - */ -var isArguments = require('lodash.isarguments'), - isArray = require('lodash.isarray'), - isFunction = require('lodash.isfunction'), - isString = require('lodash.isstring'), - keys = require('lodash.keys'); - -/** - * Checks if `value` is object-like. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - */ -function isObjectLike(value) { - return !!value && typeof value == 'object'; -} - -/** - * Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer) - * of an array-like value. - */ -var MAX_SAFE_INTEGER = 9007199254740991; - -/** - * The base implementation of `_.property` without support for deep paths. - * - * @private - * @param {string} key The key of the property to get. - * @returns {Function} Returns the new function. - */ -function baseProperty(key) { - return function(object) { - return object == null ? undefined : object[key]; - }; -} - -/** - * Gets the "length" property value of `object`. - * - * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792) - * that affects Safari on at least iOS 8.1-8.3 ARM64. - * - * @private - * @param {Object} object The object to query. - * @returns {*} Returns the "length" value. - */ -var getLength = baseProperty('length'); - -/** - * Checks if `value` is array-like. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - */ -function isArrayLike(value) { - return value != null && isLength(getLength(value)); -} - -/** - * Checks if `value` is a valid array-like length. - * - * **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength). - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - */ -function isLength(value) { - return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; -} - -/** - * Checks if `value` is empty. A value is considered empty unless it is an - * `arguments` object, array, string, or jQuery-like collection with a length - * greater than `0` or an object with own enumerable properties. - * - * @static - * @memberOf _ - * @category Lang - * @param {Array|Object|string} value The value to inspect. - * @returns {boolean} Returns `true` if `value` is empty, else `false`. - * @example - * - * _.isEmpty(null); - * // => true - * - * _.isEmpty(true); - * // => true - * - * _.isEmpty(1); - * // => true - * - * _.isEmpty([1, 2, 3]); - * // => false - * - * _.isEmpty({ 'a': 1 }); - * // => false - */ -function isEmpty(value) { - if (value == null) { - return true; - } - if (isArrayLike(value) && (isArray(value) || isString(value) || isArguments(value) || - (isObjectLike(value) && isFunction(value.splice)))) { - return !value.length; - } - return !keys(value).length; -} - -module.exports = isEmpty; - -},{"lodash.isarguments":45,"lodash.isarray":46,"lodash.isfunction":47,"lodash.isstring":51,"lodash.keys":48}],45:[function(require,module,exports){ -/** - * lodash 3.0.4 (Custom Build) - * Build: `lodash modern modularize exports="npm" -o ./` - * Copyright 2012-2015 The Dojo Foundation - * Based on Underscore.js 1.8.3 - * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - * Available under MIT license - */ - -/** - * Checks if `value` is object-like. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - */ -function isObjectLike(value) { - return !!value && typeof value == 'object'; -} - -/** Used for native method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** Native method references. */ -var propertyIsEnumerable = objectProto.propertyIsEnumerable; - -/** - * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer) - * of an array-like value. - */ -var MAX_SAFE_INTEGER = 9007199254740991; - -/** - * The base implementation of `_.property` without support for deep paths. - * - * @private - * @param {string} key The key of the property to get. - * @returns {Function} Returns the new function. - */ -function baseProperty(key) { - return function(object) { - return object == null ? undefined : object[key]; - }; -} - -/** - * Gets the "length" property value of `object`. - * - * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792) - * that affects Safari on at least iOS 8.1-8.3 ARM64. - * - * @private - * @param {Object} object The object to query. - * @returns {*} Returns the "length" value. - */ -var getLength = baseProperty('length'); - -/** - * Checks if `value` is array-like. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - */ -function isArrayLike(value) { - return value != null && isLength(getLength(value)); -} - -/** - * Checks if `value` is a valid array-like length. - * - * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength). - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - */ -function isLength(value) { - return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; -} - -/** - * Checks if `value` is classified as an `arguments` object. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ -function isArguments(value) { - return isObjectLike(value) && isArrayLike(value) && - hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee'); -} - -module.exports = isArguments; - -},{}],46:[function(require,module,exports){ -/** - * lodash 3.0.4 (Custom Build) - * Build: `lodash modern modularize exports="npm" -o ./` - * Copyright 2012-2015 The Dojo Foundation - * Based on Underscore.js 1.8.3 - * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - * Available under MIT license - */ - -/** `Object#toString` result references. */ -var arrayTag = '[object Array]', - funcTag = '[object Function]'; - -/** Used to detect host constructors (Safari > 5). */ -var reIsHostCtor = /^\[object .+?Constructor\]$/; - -/** - * Checks if `value` is object-like. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - */ -function isObjectLike(value) { - return !!value && typeof value == 'object'; -} - -/** Used for native method references. */ -var objectProto = Object.prototype; - -/** Used to resolve the decompiled source of functions. */ -var fnToString = Function.prototype.toString; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) - * of values. - */ -var objToString = objectProto.toString; - -/** Used to detect if a method is native. */ -var reIsNative = RegExp('^' + - fnToString.call(hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g, '\\$&') - .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' -); - -/* Native method references for those with the same name as other `lodash` methods. */ -var nativeIsArray = getNative(Array, 'isArray'); - -/** - * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer) - * of an array-like value. - */ -var MAX_SAFE_INTEGER = 9007199254740991; - -/** - * Gets the native function at `key` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the method to get. - * @returns {*} Returns the function if it's native, else `undefined`. - */ -function getNative(object, key) { - var value = object == null ? undefined : object[key]; - return isNative(value) ? value : undefined; -} - -/** - * Checks if `value` is a valid array-like length. - * - * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength). - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - */ -function isLength(value) { - return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; -} - -/** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(function() { return arguments; }()); - * // => false - */ -var isArray = nativeIsArray || function(value) { - return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag; -}; - -/** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ -function isFunction(value) { - // The use of `Object#toString` avoids issues with the `typeof` operator - // in older versions of Chrome and Safari which return 'function' for regexes - // and Safari 8 equivalents which return 'object' for typed array constructors. - return isObject(value) && objToString.call(value) == funcTag; -} - -/** - * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. - * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(1); - * // => false - */ -function isObject(value) { - // Avoid a V8 JIT bug in Chrome 19-20. - // See https://code.google.com/p/v8/issues/detail?id=2291 for more details. - var type = typeof value; - return !!value && (type == 'object' || type == 'function'); -} - -/** - * Checks if `value` is a native function. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, else `false`. - * @example - * - * _.isNative(Array.prototype.push); - * // => true - * - * _.isNative(_); - * // => false - */ -function isNative(value) { - if (value == null) { - return false; - } - if (isFunction(value)) { - return reIsNative.test(fnToString.call(value)); - } - return isObjectLike(value) && reIsHostCtor.test(value); -} - -module.exports = isArray; - -},{}],47:[function(require,module,exports){ -/** - * lodash 3.0.6 (Custom Build) - * Build: `lodash modern modularize exports="npm" -o ./` - * Copyright 2012-2015 The Dojo Foundation - * Based on Underscore.js 1.8.3 - * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - * Available under MIT license - */ - -/** `Object#toString` result references. */ -var funcTag = '[object Function]'; - -/** Used for native method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) - * of values. - */ -var objToString = objectProto.toString; - -/** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ -function isFunction(value) { - // The use of `Object#toString` avoids issues with the `typeof` operator - // in older versions of Chrome and Safari which return 'function' for regexes - // and Safari 8 equivalents which return 'object' for typed array constructors. - return isObject(value) && objToString.call(value) == funcTag; -} - -/** - * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. - * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(1); - * // => false - */ -function isObject(value) { - // Avoid a V8 JIT bug in Chrome 19-20. - // See https://code.google.com/p/v8/issues/detail?id=2291 for more details. - var type = typeof value; - return !!value && (type == 'object' || type == 'function'); -} - -module.exports = isFunction; - -},{}],48:[function(require,module,exports){ -/** - * lodash 3.1.2 (Custom Build) - * Build: `lodash modern modularize exports="npm" -o ./` - * Copyright 2012-2015 The Dojo Foundation - * Based on Underscore.js 1.8.3 - * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - * Available under MIT license - */ -var getNative = require('lodash._getnative'), - isArguments = require('lodash.isarguments'), - isArray = require('lodash.isarray'); - -/** Used to detect unsigned integer values. */ -var reIsUint = /^\d+$/; - -/** Used for native method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/* Native method references for those with the same name as other `lodash` methods. */ -var nativeKeys = getNative(Object, 'keys'); - -/** - * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer) - * of an array-like value. - */ -var MAX_SAFE_INTEGER = 9007199254740991; - -/** - * The base implementation of `_.property` without support for deep paths. - * - * @private - * @param {string} key The key of the property to get. - * @returns {Function} Returns the new function. - */ -function baseProperty(key) { - return function(object) { - return object == null ? undefined : object[key]; - }; -} - -/** - * Gets the "length" property value of `object`. - * - * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792) - * that affects Safari on at least iOS 8.1-8.3 ARM64. - * - * @private - * @param {Object} object The object to query. - * @returns {*} Returns the "length" value. - */ -var getLength = baseProperty('length'); - -/** - * Checks if `value` is array-like. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - */ -function isArrayLike(value) { - return value != null && isLength(getLength(value)); -} - -/** - * Checks if `value` is a valid array-like index. - * - * @private - * @param {*} value The value to check. - * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. - * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. - */ -function isIndex(value, length) { - value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1; - length = length == null ? MAX_SAFE_INTEGER : length; - return value > -1 && value % 1 == 0 && value < length; -} - -/** - * Checks if `value` is a valid array-like length. - * - * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength). - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - */ -function isLength(value) { - return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; -} - -/** - * A fallback implementation of `Object.keys` which creates an array of the - * own enumerable property names of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ -function shimKeys(object) { - var props = keysIn(object), - propsLength = props.length, - length = propsLength && object.length; - - var allowIndexes = !!length && isLength(length) && - (isArray(object) || isArguments(object)); - - var index = -1, - result = []; - - while (++index < propsLength) { - var key = props[index]; - if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) { - result.push(key); - } - } - return result; -} - -/** - * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. - * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(1); - * // => false - */ -function isObject(value) { - // Avoid a V8 JIT bug in Chrome 19-20. - // See https://code.google.com/p/v8/issues/detail?id=2291 for more details. - var type = typeof value; - return !!value && (type == 'object' || type == 'function'); -} - -/** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys) - * for more details. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ -var keys = !nativeKeys ? shimKeys : function(object) { - var Ctor = object == null ? undefined : object.constructor; - if ((typeof Ctor == 'function' && Ctor.prototype === object) || - (typeof object != 'function' && isArrayLike(object))) { - return shimKeys(object); - } - return isObject(object) ? nativeKeys(object) : []; -}; - -/** - * Creates an array of the own and inherited enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keysIn(new Foo); - * // => ['a', 'b', 'c'] (iteration order is not guaranteed) - */ -function keysIn(object) { - if (object == null) { - return []; - } - if (!isObject(object)) { - object = Object(object); - } - var length = object.length; - length = (length && isLength(length) && - (isArray(object) || isArguments(object)) && length) || 0; - - var Ctor = object.constructor, - index = -1, - isProto = typeof Ctor == 'function' && Ctor.prototype === object, - result = Array(length), - skipIndexes = length > 0; - - while (++index < length) { - result[index] = (index + ''); - } - for (var key in object) { - if (!(skipIndexes && isIndex(key, length)) && - !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { - result.push(key); - } - } - return result; -} - -module.exports = keys; - -},{"lodash._getnative":49,"lodash.isarguments":45,"lodash.isarray":46}],49:[function(require,module,exports){ -/** - * lodash 3.9.1 (Custom Build) - * Build: `lodash modern modularize exports="npm" -o ./` - * Copyright 2012-2015 The Dojo Foundation - * Based on Underscore.js 1.8.3 - * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - * Available under MIT license - */ - -/** `Object#toString` result references. */ -var funcTag = '[object Function]'; - -/** Used to detect host constructors (Safari > 5). */ -var reIsHostCtor = /^\[object .+?Constructor\]$/; - -/** - * Checks if `value` is object-like. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - */ -function isObjectLike(value) { - return !!value && typeof value == 'object'; -} - -/** Used for native method references. */ -var objectProto = Object.prototype; - -/** Used to resolve the decompiled source of functions. */ -var fnToString = Function.prototype.toString; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) - * of values. - */ -var objToString = objectProto.toString; - -/** Used to detect if a method is native. */ -var reIsNative = RegExp('^' + - fnToString.call(hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g, '\\$&') - .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' -); - -/** - * Gets the native function at `key` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the method to get. - * @returns {*} Returns the function if it's native, else `undefined`. - */ -function getNative(object, key) { - var value = object == null ? undefined : object[key]; - return isNative(value) ? value : undefined; -} - -/** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ -function isFunction(value) { - // The use of `Object#toString` avoids issues with the `typeof` operator - // in older versions of Chrome and Safari which return 'function' for regexes - // and Safari 8 equivalents which return 'object' for typed array constructors. - return isObject(value) && objToString.call(value) == funcTag; -} - -/** - * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. - * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(1); - * // => false - */ -function isObject(value) { - // Avoid a V8 JIT bug in Chrome 19-20. - // See https://code.google.com/p/v8/issues/detail?id=2291 for more details. - var type = typeof value; - return !!value && (type == 'object' || type == 'function'); -} - -/** - * Checks if `value` is a native function. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, else `false`. - * @example - * - * _.isNative(Array.prototype.push); - * // => true - * - * _.isNative(_); - * // => false - */ -function isNative(value) { - if (value == null) { - return false; - } - if (isFunction(value)) { - return reIsNative.test(fnToString.call(value)); - } - return isObjectLike(value) && reIsHostCtor.test(value); -} - -module.exports = getNative; - -},{}],50:[function(require,module,exports){ -/** - * lodash 3.0.2 (Custom Build) - * Build: `lodash modern modularize exports="npm" -o ./` - * Copyright 2012-2015 The Dojo Foundation - * Based on Underscore.js 1.8.3 - * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - * Available under MIT license - */ - -/** - * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. - * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(1); - * // => false - */ -function isObject(value) { - // Avoid a V8 JIT bug in Chrome 19-20. - // See https://code.google.com/p/v8/issues/detail?id=2291 for more details. - var type = typeof value; - return !!value && (type == 'object' || type == 'function'); -} - -module.exports = isObject; - -},{}],51:[function(require,module,exports){ -/** - * lodash 3.0.1 (Custom Build) - * Build: `lodash modern modularize exports="npm" -o ./` - * Copyright 2012-2015 The Dojo Foundation - * Based on Underscore.js 1.8.2 - * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - * Available under MIT license - */ - -/** `Object#toString` result references. */ -var stringTag = '[object String]'; - -/** - * Checks if `value` is object-like. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - */ -function isObjectLike(value) { - return !!value && typeof value == 'object'; -} - -/** Used for native method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the [`toStringTag`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.prototype.tostring) - * of values. - */ -var objToString = objectProto.toString; - -/** - * Checks if `value` is classified as a `String` primitive or object. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. - * @example - * - * _.isString('abc'); - * // => true - * - * _.isString(1); - * // => false - */ -function isString(value) { - return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag); -} - -module.exports = isString; - -},{}],52:[function(require,module,exports){ -'use strict'; - -var bus = require('framebus'); -var events = require('./lib/events'); -var checkOrigin = require('./lib/check-origin').checkOrigin; - -function BraintreeBus(options) { - options = options || {}; - - this.channel = options.channel; - if (!this.channel) { - throw new Error('Channel ID must be specified'); - } - - this.merchantUrl = options.merchantUrl; - - this._isDestroyed = false; - this._isVerbose = false; - - this._listeners = []; - - this._log('new bus on channel ' + this.channel, [location.href]); -} - -BraintreeBus.prototype.on = function (eventName, originalHandler) { - var namespacedEvent, args; - var handler = originalHandler; - var self = this; - - if (this._isDestroyed) { return; } - - if (this.merchantUrl) { - handler = function () { - if (checkOrigin(this.origin, self.merchantUrl)) { - originalHandler.apply(this, arguments); - } - }; - } - - namespacedEvent = this._namespaceEvent(eventName); - args = Array.prototype.slice.call(arguments); - args[0] = namespacedEvent; - args[1] = handler; - - this._log('on', args); - bus.on.apply(bus, args); - - this._listeners.push({ - eventName: eventName, - handler: handler, - originalHandler: originalHandler - }); -}; - -BraintreeBus.prototype.emit = function (eventName, payload, reply) { - var args; - - if (this._isDestroyed) { return; } - - args = Array.prototype.slice.call(arguments); - args[0] = this._namespaceEvent(eventName); - - this._log('emit', args); - bus.emit.apply(bus, args); -}; - -BraintreeBus.prototype._offDirect = function (eventName, handler) { - var args = Array.prototype.slice.call(arguments); - - if (this._isDestroyed) { return; } - - args[0] = this._namespaceEvent(eventName); - - this._log('off', args); - bus.off.apply(bus, args); -}; - -BraintreeBus.prototype.off = function (eventName, originalHandler) { - var i, listener; - var handler = originalHandler; - - if (this._isDestroyed) { return; } - - if (this.merchantUrl) { - for (i = 0; i < this._listeners.length; i++) { - listener = this._listeners[i]; - - if (listener.originalHandler === originalHandler) { - handler = listener.handler; - } - } - } - - this._offDirect.call(this, eventName, handler); -}; - -BraintreeBus.prototype._namespaceEvent = function (eventName) { - return ['braintree', this.channel, eventName].join(':'); -}; - -BraintreeBus.prototype.teardown = function () { - var listener, i; - - for (i = 0; i < this._listeners.length; i++) { - listener = this._listeners[i]; - this._offDirect(listener.eventName, listener.handler); - } - - this._listeners.length = 0; - - this._isDestroyed = true; -}; - -BraintreeBus.prototype._log = function (functionName, args) { - if (this._isVerbose) { - console.log(functionName, args); - } -}; - -BraintreeBus.events = events; - -module.exports = BraintreeBus; - -},{"./lib/check-origin":53,"./lib/events":54,"framebus":55}],53:[function(require,module,exports){ -'use strict'; - -var BT_ORIGIN_REGEX = /^https:\/\/([a-zA-Z0-9-]+\.)*(braintreepayments|braintreegateway|paypal)\.com(:\d{1,5})?$/; - -function checkOrigin(postMessageOrigin, merchantUrl) { - var merchantOrigin; - var merchantHost; - var a = document.createElement('a'); - - a.href = merchantUrl; - - if (a.protocol === 'https:') { - merchantHost = a.host.replace(/:443$/, ''); - } else if (a.protocol === 'http:') { - merchantHost = a.host.replace(/:80$/, ''); - } else { - merchantHost = a.host; - } - - merchantOrigin = a.protocol + '//' + merchantHost; - - return merchantOrigin === postMessageOrigin || BT_ORIGIN_REGEX.test(postMessageOrigin); -} - -module.exports = { - checkOrigin: checkOrigin -}; - -},{}],54:[function(require,module,exports){ -'use strict'; - -var eventList = [ - 'PAYMENT_METHOD_REQUEST', - 'PAYMENT_METHOD_RECEIVED', - 'PAYMENT_METHOD_GENERATED', - 'PAYMENT_METHOD_NOT_GENERATED', - 'PAYMENT_METHOD_CANCELLED', - 'PAYMENT_METHOD_ERROR', - 'CONFIGURATION_REQUEST', - 'ROOT_METADATA_REQUEST', - 'ERROR', - 'WARNING', - 'UI_POPUP_DID_OPEN', - 'UI_POPUP_DID_CLOSE', - 'UI_POPUP_FORCE_CLOSE', - 'ASYNC_DEPENDENCY_INITIALIZING', - 'ASYNC_DEPENDENCY_READY', - 'USER_FORM_SUBMIT_REQUEST', - 'SEND_ANALYTICS_EVENTS' -]; -var eventEnum = {}; - -for (var i = 0; i < eventList.length; i++) { - var evnt = eventList[i]; - eventEnum[evnt] = evnt; -} - -module.exports = eventEnum; - -},{}],55:[function(require,module,exports){ -'use strict'; -(function (root, factory) { - if (typeof exports === 'object' && typeof module !== 'undefined') { - module.exports = factory(); - } else if (typeof define === 'function' && define.amd) { - define([], factory); - } else { - root.framebus = factory(); - } -})(this, function () { - var win, framebus; - var popups = []; - var subscribers = {}; - var prefix = '/*framebus*/'; - - function include(popup) { - if (popup == null) { return false; } - if (popup.Window == null) { return false; } - if (popup.constructor !== popup.Window) { return false; } - - popups.push(popup); - return true; - } - - function target(origin) { - var key; - var targetedFramebus = {}; - - for (key in framebus) { - if (!framebus.hasOwnProperty(key)) { continue; } - - targetedFramebus[key] = framebus[key]; - } - - targetedFramebus._origin = origin || '*'; - - return targetedFramebus; - } - - function publish(event) { - var payload, args; - var origin = _getOrigin(this); - - if (_isntString(event)) { return false; } - if (_isntString(origin)) { return false; } - - args = Array.prototype.slice.call(arguments, 1); - - payload = _packagePayload(event, args, origin); - if (payload === false) { return false; } - - _broadcast(win.top, payload, origin); - - return true; - } - - function subscribe(event, fn) { - var origin = _getOrigin(this); - - if (_subscriptionArgsInvalid(event, fn, origin)) { return false; } - - subscribers[origin] = subscribers[origin] || {}; - subscribers[origin][event] = subscribers[origin][event] || []; - subscribers[origin][event].push(fn); - - return true; - } - - function unsubscribe(event, fn) { - var i, subscriberList; - var origin = _getOrigin(this); - - if (_subscriptionArgsInvalid(event, fn, origin)) { return false; } - - subscriberList = subscribers[origin] && subscribers[origin][event]; - if (!subscriberList) { return false; } - - for (i = 0; i < subscriberList.length; i++) { - if (subscriberList[i] === fn) { - subscriberList.splice(i, 1); - return true; - } - } - - return false; - } - - function _getOrigin(scope) { - return scope && scope._origin || '*'; - } - - function _isntString(string) { - return typeof string !== 'string'; - } - - function _packagePayload(event, args, origin) { - var packaged = false; - var payload = { - event: event, - origin: origin - }; - var reply = args[args.length - 1]; - - if (typeof reply === 'function') { - payload.reply = _subscribeReplier(reply, origin); - args = args.slice(0, -1); - } - - payload.args = args; - - try { - packaged = prefix + JSON.stringify(payload); - } catch (e) { - throw new Error('Could not stringify event: ' + e.message); - } - return packaged; - } - - function _unpackPayload(e) { - var payload, replyOrigin, replySource, replyEvent; - - if (e.data.slice(0, prefix.length) !== prefix) { return false; } - - try { - payload = JSON.parse(e.data.slice(prefix.length)); - } catch (err) { - return false; - } - - if (payload.reply != null) { - replyOrigin = e.origin; - replySource = e.source; - replyEvent = payload.reply; - - payload.reply = function reply(data) { - var replyPayload = _packagePayload(replyEvent, [data], replyOrigin); - if (replyPayload === false) { return false; } - - replySource.postMessage(replyPayload, replyOrigin); - }; - - payload.args.push(payload.reply); - } - - return payload; - } - - function _attach(w) { - if (win) { return; } - win = w || window; - - if (win.addEventListener) { - win.addEventListener('message', _onmessage, false); - } else if (win.attachEvent) { - win.attachEvent('onmessage', _onmessage); - } else if (win.onmessage === null) { - win.onmessage = _onmessage; - } else { - win = null; - } - } - - function _uuid() { - return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { - var r = Math.random() * 16 | 0; - var v = c === 'x' ? r : r & 0x3 | 0x8; - return v.toString(16); - }); - } - - function _onmessage(e) { - var payload; - if (_isntString(e.data)) { return; } - - payload = _unpackPayload(e); - if (!payload) { return; } - - _dispatch('*', payload.event, payload.args, e); - _dispatch(e.origin, payload.event, payload.args, e); - _broadcastPopups(e.data, payload.origin, e.source); - } - - function _dispatch(origin, event, args, e) { - var i; - if (!subscribers[origin]) { return; } - if (!subscribers[origin][event]) { return; } - - for (i = 0; i < subscribers[origin][event].length; i++) { - subscribers[origin][event][i].apply(e, args); - } - } - - function _broadcast(frame, payload, origin) { - var i; - - try { - frame.postMessage(payload, origin); - } catch (_) { return; } - - if (frame.opener && !frame.opener.closed && frame.opener !== win) { - _broadcast(frame.opener.top, payload, origin); - } - - for (i = 0; i < frame.frames.length; i++) { - _broadcast(frame.frames[i], payload, origin); - } - } - - function _broadcastPopups(payload, origin, source) { - var i, popup; - - for (i = popups.length - 1; i >= 0; i--) { - popup = popups[i]; - - if (popup.closed === true) { - popups = popups.slice(i, 1); - } else if (source !== popup) { - _broadcast(popup.top, payload, origin); - } - } - } - - function _subscribeReplier(fn, origin) { - var uuid = _uuid(); - - function replier(d, o) { - fn(d, o); - framebus.target(origin).unsubscribe(uuid, replier); - } - - framebus.target(origin).subscribe(uuid, replier); - return uuid; - } - - function _subscriptionArgsInvalid(event, fn, origin) { - if (_isntString(event)) { return true; } - if (typeof fn !== 'function') { return true; } - if (_isntString(origin)) { return true; } - - return false; - } - - _attach(); - - framebus = { - target: target, - include: include, - publish: publish, - pub: publish, - trigger: publish, - emit: publish, - subscribe: subscribe, - sub: subscribe, - on: subscribe, - unsubscribe: unsubscribe, - unsub: unsubscribe, - off: unsubscribe - }; - - return framebus; -}); - -},{}],56:[function(require,module,exports){ -'use strict'; - -var Coinbase = require('./lib/coinbase'); - -function create(options) { - return new Coinbase(options); -} - -module.exports = {create: create}; - -},{"./lib/coinbase":59}],57:[function(require,module,exports){ -(function (global){ -'use strict'; - -function iOSSafariVersion(userAgent) { - userAgent = userAgent || global.navigator.userAgent; - if (!/AppleWebKit\//.test(userAgent)) { - return null; - } - if (!/Mobile\//.test(userAgent)) { - return null; - } - - return userAgent.replace(/.* OS ([0-9_]+) like Mac OS X.*/, '$1').replace(/_/g, '.'); -} - -function ieVersion(userAgent) { - userAgent = userAgent || global.navigator.userAgent; - var result = null; - var match = /MSIE.(\d+)/.exec(userAgent); - - if (/Trident/.test(userAgent)) { - result = 11; - } - - if (match) { - result = parseInt(match[1], 10); - } - - return result; -} - -function androidVersion(UA) { - UA = UA || global.navigator.userAgent; - if (!/Android/.test(UA)) { return null; } - - return UA.replace(/^.* Android ([0-9\.]+).*$/,'$1'); -} - -module.exports = { - ieVersion: ieVersion, - iOSSafariVersion: iOSSafariVersion, - androidVersion: androidVersion -}; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],58:[function(require,module,exports){ -'use strict'; - -var busEvents = require('braintree-bus').events; - -function tokenize(err, payload, coinbase) { - if (err) { - // TODO: make payload in line with onError() - coinbase.bus.emit(busEvents.ERROR, err.error); - coinbase._sendAnalyticsEvent('generate.nonce.failed'); - return; - } - - coinbase.bus.emit(busEvents.PAYMENT_METHOD_GENERATED, payload); - coinbase._sendAnalyticsEvent('generate.nonce.succeeded'); -} - -module.exports = {tokenize: tokenize}; - -},{"braintree-bus":67}],59:[function(require,module,exports){ -(function (global){ -'use strict'; - -var utils = require('braintree-utilities'); -var Destructor = require('destructor'); -var DOMComposer = require('./dom/composer'); -var urlComposer = require('./url-composer'); -var callbacks = require('./callbacks'); -var constants = require('./constants'); -var detector = require('./detector'); -var Bus = require('braintree-bus'); - -function _getPopupParams(options) { - return { - clientId: options.configuration.coinbase.clientId, - redirectUrl: options.configuration.coinbase.redirectUrl, - scopes: options.configuration.coinbase.scopes || constants.SCOPES, - meta: { - authorizations_merchant_account: options.configuration.coinbase.merchantAccount || '' - } - }; -} - -function _error(bus) { - return function (message, type) { - bus.emit(Bus.events.ERROR, {type: type, message: message}); - } -} - -function _optionsAreValid(options, bus) { - var cbOptions = (options || {}).coinbase; - var busError = _error(bus); - - if (options.apiClient == null) { - busError('settings.apiClient is required for coinbase', constants.CONFIGURATION_ERROR); - } else if (!options.configuration.coinbaseEnabled) { - busError('Coinbase is not enabled for your merchant account', constants.CONFIGURATION_ERROR); - } else if (!cbOptions || (!cbOptions.container && !cbOptions.button)) { - busError('Either options.coinbase.container or options.coinbase.button is required for Coinbase integrations', constants.CONFIGURATION_ERROR); - } else if (cbOptions.container && cbOptions.button) { - busError('options.coinbase.container and options.coinbase.button are mutually exclusive', constants.CONFIGURATION_ERROR); - } else if (!detector.isSupportedBrowser()) { - busError('Coinbase is not supported by your browser. Please consider upgrading', constants.UNSUPPORTED_BROWSER_ERROR); - } else { - return true; - } - - return false; -} - -function Coinbase(options) { - var context, busOptions; - - this.destructor = new Destructor(); - - this.channel = options.channel; - - busOptions = {channel: this.channel}; - - try { - if (options.coinbase.container) { - busOptions.merchantUrl = global.location.href; - } - } catch (e) {} - - this.bus = options.bus || new Bus(busOptions); - - this.canCreateIntegration = _optionsAreValid(options, this.bus); - if (!this.canCreateIntegration) { - return; - } - - this.buttonId = options.coinbase.button || constants.BUTTON_ID; - this.apiClient = options.apiClient; - this.assetsUrl = options.configuration.assetsUrl; - this.environment = options.configuration.coinbase.environment; - this._onOAuthSuccess = utils.bind(this._onOAuthSuccess, this); - this._handleButtonClick = utils.bind(this._handleButtonClick, this); - this.popupParams = _getPopupParams(options); - this.redirectDoneInterval = null; - - if (options.coinbase.container) { - context = utils.normalizeElement(options.coinbase.container); - this._insertFrame(context); - } else { - global.braintreeCoinbasePopupCallback = this._onOAuthSuccess; - - context = document.body; - utils.addEventListener(context, 'click', this._handleButtonClick); - - this._sendAnalyticsEvent('initialized'); - - this.destructor.registerFunctionForTeardown(utils.bind(function () { - this._closePopup(); - }, this)); - - this.bus.on(constants.TEARDOWN_EVENT, utils.bind(this.destructor.teardown, this.destructor)); - } -} - -Coinbase.prototype._sendAnalyticsEvent = function (eventName) { - var namespace = this.apiClient.integration + '.web.coinbase.'; - this.apiClient.sendAnalyticsEvents(namespace + eventName); -}; - -Coinbase.prototype._insertFrame = function (container) { - var frame = DOMComposer.createFrame({channel: this.channel}); - - this.bus.emit(Bus.events.ASYNC_DEPENDENCY_INITIALIZING); - - container.appendChild(frame); - this.destructor.registerFunctionForTeardown(function () { - container.removeChild(frame); - }); - - // Delayed to make sure browser caches are busted. - setTimeout(utils.bind(function () { - frame.src = this.assetsUrl + '/coinbase/' + constants.VERSION + '/coinbase-frame.html#' + this.channel; - }, this), 0); -}; - -Coinbase.prototype._onOAuthSuccess = function (data) { - if (!data.code) { - this._sendAnalyticsEvent('popup.denied'); - this._closePopup(); - return; - } - - this.bus.emit('coinbase:view:navigate', 'loading'); - this._sendAnalyticsEvent('popup.authorized'); - - this.apiClient.tokenizeCoinbase({ code: data.code, query: urlComposer.getQueryString() }, utils.bind(function (err, payload) { - callbacks.tokenize.apply(null, [err, payload, this]); - }, this)); - - this._closePopup(); -}; - -Coinbase.prototype._clearPollForRedirectDone = function () { - if (this.redirectDoneInterval) { - clearInterval(this.redirectDoneInterval); - this.redirectDoneInterval = null; - } -}; - -Coinbase.prototype._closePopup = function (popup) { - popup = popup || this.popup; - - if (popup == null) { return; } - - if (detector.shouldCloseFromParent()) { - popup.close(); - } - - this._popupCleanup(); -}; - -Coinbase.prototype._popupCleanup = function () { - this._clearPollForRedirectDone(); - this.bus.emit(Bus.events.UI_POPUP_DID_CLOSE, {source: constants.INTEGRATION_NAME}); -}; - -Coinbase.prototype._pollForRedirectDone = function (popup) { - var interval = setInterval(utils.bind(function () { - var code; - - if (popup == null || popup.closed) { - this._sendAnalyticsEvent('popup.aborted'); - this._popupCleanup(); - return; - } - - try { - if (popup.location.href === 'about:blank') { throw new Error('Not finished loading'); } - code = utils.decodeQueryString(popup.location.search.replace(/^\?/, '')).code; - } catch (e) { - return; - } - - this._onOAuthSuccess({ code: code }); - }, this), 100); - - this.redirectDoneInterval = interval; - return interval; -}; - -Coinbase.prototype._openPopup = function () { - var popup; - - this._sendAnalyticsEvent('popup.started'); - - popup = DOMComposer.createPopup(urlComposer.compose(this._getOAuthBaseUrl(), this.popupParams)); - popup.focus(); - - this._pollForRedirectDone(popup); - - this.bus.emit(Bus.events.UI_POPUP_DID_OPEN, {source: constants.INTEGRATION_NAME}); - this.bus.on(Bus.events.UI_POPUP_FORCE_CLOSE, function (payload) { - if (payload.target === constants.INTEGRATION_NAME) { - popup.close(); - } - }); - - this.popup = popup; -}; - -Coinbase.prototype._getOAuthBaseUrl = function () { - var baseUrl; - - if (this.environment === 'shared_sandbox') { - baseUrl = constants.SANDBOX_OAUTH_BASE_URL; - } else { - baseUrl = constants.PRODUCTION_OAUTH_BASE_URL; - } - - return baseUrl; -}; - -Coinbase.prototype._handleButtonClick = function (event) { - var target = event.target || event.srcElement; - - while (true) { - if (target == null) { return; } - if (target === event.currentTarget) { return; } - if (target.id === this.buttonId) { break; } - - target = target.parentNode; - } - - if (event && event.preventDefault) { - event.preventDefault(); - } else { - event.returnValue = false; - } - - this._openPopup(); -}; - -Coinbase.prototype.teardown = function (done) { - var self = this; - - if (!this.canCreateIntegration) { - done(null); - return; - } - - this.bus.emit(constants.TEARDOWN_EVENT, function () { - self.destructor.teardown(function (err) { - if (err) { return done(err); } - - self.bus.teardown(); - done(null); - }); - }); -}; - -module.exports = Coinbase; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./callbacks":58,"./constants":60,"./detector":61,"./dom/composer":63,"./url-composer":66,"braintree-bus":67,"braintree-utilities":79,"destructor":80}],60:[function(require,module,exports){ -'use strict'; - -module.exports = { - PRODUCTION_OAUTH_BASE_URL: 'https://coinbase.com', - SANDBOX_OAUTH_BASE_URL: 'https://sandbox.coinbase.com', - ORIGIN_URL: 'https://www.coinbase.com', - FRAME_NAME: 'braintree-coinbase-frame', - POPUP_NAME: 'coinbase', - BUTTON_ID: 'bt-coinbase-button', - SCOPES: 'send', - VERSION: "0.3.0", - INTEGRATION_NAME: 'Coinbase', - CONFIGURATION_ERROR: 'CONFIGURATION', - UNSUPPORTED_BROWSER_ERROR: 'UNSUPPORTED_BROWSER', - TEARDOWN_EVENT: 'coinbase:TEARDOWN' -}; - -},{}],61:[function(require,module,exports){ -'use strict'; - -var browser = require('./browser'); - -function isSupportedBrowser() { - var version = browser.ieVersion(); - return !version || (version > 8); -} - -function shouldDisplayLollipopClose() { - var version = browser.androidVersion(); - if (version == null) { return false; } - - return /^5/.test(version); -} - -function shouldCloseFromParent() { - return !(shouldDisplayLollipopClose() || shouldDisplayIOSClose()); -} - -function shouldDisplayIOSClose() { - var version = browser.iOSSafariVersion(); - if (version == null) { return false; } - - return /^8\.0/.test(version) || /^8\.1$/.test(version); -} - -module.exports = { - isSupportedBrowser: isSupportedBrowser, - shouldCloseFromParent: shouldCloseFromParent, - shouldDisplayIOSClose: shouldDisplayIOSClose, - shouldDisplayLollipopClose: shouldDisplayLollipopClose -}; - -},{"./browser":57}],62:[function(require,module,exports){ -'use strict'; - -function createButton(config) { - var button = document.createElement('button'); - - config = config || {}; - - button.id = config.id || 'coinbase-button'; - button.style.backgroundColor = config.backgroundColor || '#EEE'; - button.style.color = config.color || '#4597C3'; - button.style.border = config.border || '0'; - button.style.borderRadius = config.borderRadius || '6px'; - button.style.padding = config.padding || '12px'; - button.innerHTML = config.innerHTML || 'coinbase'; - - return button; -} - -module.exports = { create: createButton }; - -},{}],63:[function(require,module,exports){ -'use strict'; - -var popup = require('./popup'); -var button = require('./button'); -var frame = require('./frame'); - -module.exports = { - createButton: button.create, - createPopup: popup.create, - createFrame: frame.create -}; - -},{"./button":62,"./frame":64,"./popup":65}],64:[function(require,module,exports){ -'use strict'; - -var constants = require('../constants'); -var iframer = require('iframer'); - -function createFrame(config) { - return iframer({ - name: constants.FRAME_NAME, - height: '70px', - width: '100%', - style: { - padding: 0, - margin: 0, - border: 0, - outline: 'none' - } - }); -} - -module.exports = { create: createFrame }; - -},{"../constants":60,"iframer":83}],65:[function(require,module,exports){ -(function (global){ -'use strict'; - -var constants = require('../constants'); - -function _stringifyParams(payload) { - var params = []; - - for (var param in payload) { - if (payload.hasOwnProperty(param)) { - params.push([param, payload[param]].join('=')); - } - } - - return params.join(','); -} - -function _getParams() { - var baseWidth = 850; - var baseHeight = 600; - - return _stringifyParams({ - width: baseWidth, - height: baseHeight, - left: (screen.width - baseWidth) / 2, - top: (screen.height - baseHeight) / 4 - }); -} - -function createPopup(url) { - return global.open(url, constants.POPUP_NAME, _getParams()); -} - -module.exports = { create: createPopup }; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"../constants":60}],66:[function(require,module,exports){ -'use strict'; - -var constants = require('./constants'); - -function getQueryString() { - return 'version=' + constants.VERSION; -} - -function compose(baseUrl, params) { - var url = baseUrl + '/oauth/authorize?response_type=code'; - var redirectUri = params.redirectUrl + '?' + getQueryString(); - - url += '&redirect_uri=' + encodeURIComponent(redirectUri); - url += '&client_id=' + params.clientId; - - if (params.scopes) { - url += '&scope=' + encodeURIComponent(params.scopes); - } - - if (params.meta) { - for (var key in params.meta) { - if (params.meta.hasOwnProperty(key)) { - url += '&meta[' + encodeURIComponent(key) + ']=' + encodeURIComponent(params.meta[key]); - } - } - } - - return url; -} - -module.exports = { - compose: compose, - getQueryString: getQueryString -}; - -},{"./constants":60}],67:[function(require,module,exports){ -arguments[4][52][0].apply(exports,arguments) -},{"./lib/check-origin":68,"./lib/events":69,"dup":52,"framebus":70}],68:[function(require,module,exports){ -arguments[4][53][0].apply(exports,arguments) -},{"dup":53}],69:[function(require,module,exports){ -arguments[4][54][0].apply(exports,arguments) -},{"dup":54}],70:[function(require,module,exports){ -arguments[4][55][0].apply(exports,arguments) -},{"dup":55}],71:[function(require,module,exports){ -arguments[4][35][0].apply(exports,arguments) -},{"dup":35}],72:[function(require,module,exports){ -arguments[4][36][0].apply(exports,arguments) -},{"dup":36}],73:[function(require,module,exports){ -arguments[4][22][0].apply(exports,arguments) -},{"dup":22}],74:[function(require,module,exports){ -arguments[4][38][0].apply(exports,arguments) -},{"dup":38}],75:[function(require,module,exports){ -arguments[4][39][0].apply(exports,arguments) -},{"dup":39}],76:[function(require,module,exports){ -arguments[4][40][0].apply(exports,arguments) -},{"dup":40}],77:[function(require,module,exports){ -arguments[4][41][0].apply(exports,arguments) -},{"./array":71,"dup":41}],78:[function(require,module,exports){ -arguments[4][42][0].apply(exports,arguments) -},{"dup":42}],79:[function(require,module,exports){ -arguments[4][43][0].apply(exports,arguments) -},{"./lib/array":71,"./lib/base64":72,"./lib/dom":73,"./lib/events":74,"./lib/fn":75,"./lib/string":76,"./lib/url":77,"./lib/uuid":78,"dup":43}],80:[function(require,module,exports){ -'use strict'; - -var batchExecuteFunctions = require('batch-execute-functions'); -// Reach into lib for isFunction. This lib requires a DOM and cannot be -// tested otherwise -var fnUtil = require('braintree-utilities/lib/fn'); - -function Destructor() { - this._teardownRegistry = []; -} - -Destructor.prototype.registerFunctionForTeardown = function (fn) { - if (fnUtil.isFunction(fn)) { - this._teardownRegistry.push(fn); - } -}; - -Destructor.prototype.teardown = function (callback) { - batchExecuteFunctions(this._teardownRegistry, fnUtil.bind(function (err) { - this._teardownRegistry = []; - - if (fnUtil.isFunction(callback)) { - callback(err); - } - }, this)); -}; - -module.exports = Destructor; - -},{"batch-execute-functions":81,"braintree-utilities/lib/fn":82}],81:[function(require,module,exports){ -'use strict'; - -function call(fn, callback) { - var isSync = fn.length === 0; - var wrappedCallback; - - if (isSync) { - fn(); - callback(null); - } else { - wrappedCallback = once(callback); - fn(wrappedCallback); - } -} - -function once(fn) { - var called = false; - return function () { - if (!called) { - called = true; - fn.apply(this, arguments); - } - }; -} - -module.exports = function (functions, callback) { - var length = functions.length; - var remaining = length; - - if (length === 0) { - callback(null); - return; - } - - for (var i = 0; i < length; i++) { - call(functions[i], function (err) { - if (err) { - callback(err); - return; - } - - remaining -= 1; - if (remaining === 0) { - callback(null); - } - }); - } -}; - -},{}],82:[function(require,module,exports){ -arguments[4][39][0].apply(exports,arguments) -},{"dup":39}],83:[function(require,module,exports){ -'use strict'; - -var assign = require('lodash.assign'); -var isString = require('lodash.isstring'); -var setAttributes = require('setattributes'); -var defaultAttributes = require('./lib/default-attributes'); - -module.exports = function createFrame(options) { - var iframe = document.createElement('iframe'); - var config = assign({}, defaultAttributes, options); - - if (config.style && !isString(config.style)) { - assign(iframe.style, config.style); - delete config.style; - } - - setAttributes(iframe, config); - - if (!iframe.getAttribute('id')) { - iframe.id = iframe.name; - } - - return iframe; -}; - -},{"./lib/default-attributes":84,"lodash.assign":85,"lodash.isstring":96,"setattributes":97}],84:[function(require,module,exports){ -module.exports={ - "src": "about:blank", - "frameBorder": 0, - "allowtransparency": true, - "scrolling": "no" -} - -},{}],85:[function(require,module,exports){ -/** - * lodash 3.2.0 (Custom Build) - * Build: `lodash modern modularize exports="npm" -o ./` - * Copyright 2012-2015 The Dojo Foundation - * Based on Underscore.js 1.8.3 - * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - * Available under MIT license - */ -var baseAssign = require('lodash._baseassign'), - createAssigner = require('lodash._createassigner'), - keys = require('lodash.keys'); - -/** - * A specialized version of `_.assign` for customizing assigned values without - * support for argument juggling, multiple sources, and `this` binding `customizer` - * functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {Function} customizer The function to customize assigned values. - * @returns {Object} Returns `object`. - */ -function assignWith(object, source, customizer) { - var index = -1, - props = keys(source), - length = props.length; - - while (++index < length) { - var key = props[index], - value = object[key], - result = customizer(value, source[key], key, object, source); - - if ((result === result ? (result !== value) : (value === value)) || - (value === undefined && !(key in object))) { - object[key] = result; - } - } - return object; -} - -/** - * Assigns own enumerable properties of source object(s) to the destination - * object. Subsequent sources overwrite property assignments of previous sources. - * If `customizer` is provided it is invoked to produce the assigned values. - * The `customizer` is bound to `thisArg` and invoked with five arguments: - * (objectValue, sourceValue, key, object, source). - * - * **Note:** This method mutates `object` and is based on - * [`Object.assign`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign). - * - * @static - * @memberOf _ - * @alias extend - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @param {Function} [customizer] The function to customize assigned values. - * @param {*} [thisArg] The `this` binding of `customizer`. - * @returns {Object} Returns `object`. - * @example - * - * _.assign({ 'user': 'barney' }, { 'age': 40 }, { 'user': 'fred' }); - * // => { 'user': 'fred', 'age': 40 } - * - * // using a customizer callback - * var defaults = _.partialRight(_.assign, function(value, other) { - * return _.isUndefined(value) ? other : value; - * }); - * - * defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' }); - * // => { 'user': 'barney', 'age': 36 } - */ -var assign = createAssigner(function(object, source, customizer) { - return customizer - ? assignWith(object, source, customizer) - : baseAssign(object, source); -}); - -module.exports = assign; - -},{"lodash._baseassign":86,"lodash._createassigner":88,"lodash.keys":92}],86:[function(require,module,exports){ -/** - * lodash 3.2.0 (Custom Build) - * Build: `lodash modern modularize exports="npm" -o ./` - * Copyright 2012-2015 The Dojo Foundation - * Based on Underscore.js 1.8.3 - * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - * Available under MIT license - */ -var baseCopy = require('lodash._basecopy'), - keys = require('lodash.keys'); - -/** - * The base implementation of `_.assign` without support for argument juggling, - * multiple sources, and `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ -function baseAssign(object, source) { - return source == null - ? object - : baseCopy(source, keys(source), object); -} - -module.exports = baseAssign; - -},{"lodash._basecopy":87,"lodash.keys":92}],87:[function(require,module,exports){ -/** - * lodash 3.0.1 (Custom Build) - * Build: `lodash modern modularize exports="npm" -o ./` - * Copyright 2012-2015 The Dojo Foundation - * Based on Underscore.js 1.8.3 - * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - * Available under MIT license - */ - -/** - * Copies properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy properties from. - * @param {Array} props The property names to copy. - * @param {Object} [object={}] The object to copy properties to. - * @returns {Object} Returns `object`. - */ -function baseCopy(source, props, object) { - object || (object = {}); - - var index = -1, - length = props.length; - - while (++index < length) { - var key = props[index]; - object[key] = source[key]; - } - return object; -} - -module.exports = baseCopy; - -},{}],88:[function(require,module,exports){ -/** - * lodash 3.1.1 (Custom Build) - * Build: `lodash modern modularize exports="npm" -o ./` - * Copyright 2012-2015 The Dojo Foundation - * Based on Underscore.js 1.8.3 - * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - * Available under MIT license - */ -var bindCallback = require('lodash._bindcallback'), - isIterateeCall = require('lodash._isiterateecall'), - restParam = require('lodash.restparam'); - -/** - * Creates a function that assigns properties of source object(s) to a given - * destination object. - * - * **Note:** This function is used to create `_.assign`, `_.defaults`, and `_.merge`. - * - * @private - * @param {Function} assigner The function to assign values. - * @returns {Function} Returns the new assigner function. - */ -function createAssigner(assigner) { - return restParam(function(object, sources) { - var index = -1, - length = object == null ? 0 : sources.length, - customizer = length > 2 ? sources[length - 2] : undefined, - guard = length > 2 ? sources[2] : undefined, - thisArg = length > 1 ? sources[length - 1] : undefined; - - if (typeof customizer == 'function') { - customizer = bindCallback(customizer, thisArg, 5); - length -= 2; - } else { - customizer = typeof thisArg == 'function' ? thisArg : undefined; - length -= (customizer ? 1 : 0); - } - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - customizer = length < 3 ? undefined : customizer; - length = 1; - } - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object, source, customizer); - } - } - return object; - }); -} - -module.exports = createAssigner; - -},{"lodash._bindcallback":89,"lodash._isiterateecall":90,"lodash.restparam":91}],89:[function(require,module,exports){ -/** - * lodash 3.0.1 (Custom Build) - * Build: `lodash modern modularize exports="npm" -o ./` - * Copyright 2012-2015 The Dojo Foundation - * Based on Underscore.js 1.8.3 - * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - * Available under MIT license - */ - -/** - * A specialized version of `baseCallback` which only supports `this` binding - * and specifying the number of arguments to provide to `func`. - * - * @private - * @param {Function} func The function to bind. - * @param {*} thisArg The `this` binding of `func`. - * @param {number} [argCount] The number of arguments to provide to `func`. - * @returns {Function} Returns the callback. - */ -function bindCallback(func, thisArg, argCount) { - if (typeof func != 'function') { - return identity; - } - if (thisArg === undefined) { - return func; - } - switch (argCount) { - case 1: return function(value) { - return func.call(thisArg, value); - }; - case 3: return function(value, index, collection) { - return func.call(thisArg, value, index, collection); - }; - case 4: return function(accumulator, value, index, collection) { - return func.call(thisArg, accumulator, value, index, collection); - }; - case 5: return function(value, other, key, object, source) { - return func.call(thisArg, value, other, key, object, source); - }; - } - return function() { - return func.apply(thisArg, arguments); - }; -} - -/** - * This method returns the first argument provided to it. - * - * @static - * @memberOf _ - * @category Utility - * @param {*} value Any value. - * @returns {*} Returns `value`. - * @example - * - * var object = { 'user': 'fred' }; - * - * _.identity(object) === object; - * // => true - */ -function identity(value) { - return value; -} - -module.exports = bindCallback; - -},{}],90:[function(require,module,exports){ -/** - * lodash 3.0.9 (Custom Build) - * Build: `lodash modern modularize exports="npm" -o ./` - * Copyright 2012-2015 The Dojo Foundation - * Based on Underscore.js 1.8.3 - * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - * Available under MIT license - */ - -/** Used to detect unsigned integer values. */ -var reIsUint = /^\d+$/; - -/** - * Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer) - * of an array-like value. - */ -var MAX_SAFE_INTEGER = 9007199254740991; - -/** - * The base implementation of `_.property` without support for deep paths. - * - * @private - * @param {string} key The key of the property to get. - * @returns {Function} Returns the new function. - */ -function baseProperty(key) { - return function(object) { - return object == null ? undefined : object[key]; - }; -} - -/** - * Gets the "length" property value of `object`. - * - * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792) - * that affects Safari on at least iOS 8.1-8.3 ARM64. - * - * @private - * @param {Object} object The object to query. - * @returns {*} Returns the "length" value. - */ -var getLength = baseProperty('length'); - -/** - * Checks if `value` is array-like. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - */ -function isArrayLike(value) { - return value != null && isLength(getLength(value)); -} - -/** - * Checks if `value` is a valid array-like index. - * - * @private - * @param {*} value The value to check. - * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. - * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. - */ -function isIndex(value, length) { - value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1; - length = length == null ? MAX_SAFE_INTEGER : length; - return value > -1 && value % 1 == 0 && value < length; -} - -/** - * Checks if the provided arguments are from an iteratee call. - * - * @private - * @param {*} value The potential iteratee value argument. - * @param {*} index The potential iteratee index or key argument. - * @param {*} object The potential iteratee object argument. - * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`. - */ -function isIterateeCall(value, index, object) { - if (!isObject(object)) { - return false; - } - var type = typeof index; - if (type == 'number' - ? (isArrayLike(object) && isIndex(index, object.length)) - : (type == 'string' && index in object)) { - var other = object[index]; - return value === value ? (value === other) : (other !== other); - } - return false; -} - -/** - * Checks if `value` is a valid array-like length. - * - * **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength). - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - */ -function isLength(value) { - return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; -} - -/** - * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. - * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(1); - * // => false - */ -function isObject(value) { - // Avoid a V8 JIT bug in Chrome 19-20. - // See https://code.google.com/p/v8/issues/detail?id=2291 for more details. - var type = typeof value; - return !!value && (type == 'object' || type == 'function'); -} - -module.exports = isIterateeCall; - -},{}],91:[function(require,module,exports){ -/** - * lodash 3.6.1 (Custom Build) - * Build: `lodash modern modularize exports="npm" -o ./` - * Copyright 2012-2015 The Dojo Foundation - * Based on Underscore.js 1.8.3 - * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - * Available under MIT license - */ - -/** Used as the `TypeError` message for "Functions" methods. */ -var FUNC_ERROR_TEXT = 'Expected a function'; - -/* Native method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; - -/** - * Creates a function that invokes `func` with the `this` binding of the - * created function and arguments from `start` and beyond provided as an array. - * - * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters). - * - * @static - * @memberOf _ - * @category Function - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - * @example - * - * var say = _.restParam(function(what, names) { - * return what + ' ' + _.initial(names).join(', ') + - * (_.size(names) > 1 ? ', & ' : '') + _.last(names); - * }); - * - * say('hello', 'fred', 'barney', 'pebbles'); - * // => 'hello fred, barney, & pebbles' - */ -function restParam(func, start) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0); - return function() { - var args = arguments, - index = -1, - length = nativeMax(args.length - start, 0), - rest = Array(length); - - while (++index < length) { - rest[index] = args[start + index]; - } - switch (start) { - case 0: return func.call(this, rest); - case 1: return func.call(this, args[0], rest); - case 2: return func.call(this, args[0], args[1], rest); - } - var otherArgs = Array(start + 1); - index = -1; - while (++index < start) { - otherArgs[index] = args[index]; - } - otherArgs[start] = rest; - return func.apply(this, otherArgs); - }; -} - -module.exports = restParam; - -},{}],92:[function(require,module,exports){ -arguments[4][48][0].apply(exports,arguments) -},{"dup":48,"lodash._getnative":93,"lodash.isarguments":94,"lodash.isarray":95}],93:[function(require,module,exports){ -arguments[4][49][0].apply(exports,arguments) -},{"dup":49}],94:[function(require,module,exports){ -arguments[4][45][0].apply(exports,arguments) -},{"dup":45}],95:[function(require,module,exports){ -arguments[4][46][0].apply(exports,arguments) -},{"dup":46}],96:[function(require,module,exports){ -arguments[4][51][0].apply(exports,arguments) -},{"dup":51}],97:[function(require,module,exports){ -module.exports = function setAttributes(element, attributes) { - var value; - - for (var key in attributes) { - if (attributes.hasOwnProperty(key)) { - value = attributes[key]; - - if (value == null) { - element.removeAttribute(key); - } else { - element.setAttribute(key, value); - } - } - } -}; - -},{}],98:[function(require,module,exports){ -arguments[4][2][0].apply(exports,arguments) -},{"./coinbase-account":99,"./constants":100,"./credit-card":101,"./europe-bank-account":102,"./normalize-api-fields":104,"./parse-client-token":105,"./paypal-account":106,"./request/choose-driver":109,"./sepa-mandate":114,"./should-enable-cors":115,"./util":116,"braintree-3ds":125,"braintree-utilities":139,"dup":2}],99:[function(require,module,exports){ -arguments[4][3][0].apply(exports,arguments) -},{"dup":3}],100:[function(require,module,exports){ -arguments[4][4][0].apply(exports,arguments) -},{"dup":4}],101:[function(require,module,exports){ -arguments[4][5][0].apply(exports,arguments) -},{"dup":5}],102:[function(require,module,exports){ -arguments[4][6][0].apply(exports,arguments) -},{"dup":6}],103:[function(require,module,exports){ -arguments[4][7][0].apply(exports,arguments) -},{"./constants":100,"./parse-client-token":105,"./request/choose-driver":109,"./should-enable-cors":115,"./util":116,"dup":7}],104:[function(require,module,exports){ -arguments[4][8][0].apply(exports,arguments) -},{"dup":8}],105:[function(require,module,exports){ -arguments[4][9][0].apply(exports,arguments) -},{"./polyfill":107,"braintree-utilities":139,"dup":9}],106:[function(require,module,exports){ -arguments[4][10][0].apply(exports,arguments) -},{"dup":10}],107:[function(require,module,exports){ -arguments[4][11][0].apply(exports,arguments) -},{"dup":11}],108:[function(require,module,exports){ -arguments[4][12][0].apply(exports,arguments) -},{"../constants":100,"../util":116,"./parse-body":112,"./prep-body":113,"dup":12}],109:[function(require,module,exports){ -arguments[4][13][0].apply(exports,arguments) -},{"../util":116,"./ajax-driver":108,"./jsonp-driver":110,"dup":13}],110:[function(require,module,exports){ -arguments[4][14][0].apply(exports,arguments) -},{"../constants":100,"./jsonp":111,"dup":14}],111:[function(require,module,exports){ -arguments[4][15][0].apply(exports,arguments) -},{"../util":116,"dup":15}],112:[function(require,module,exports){ -arguments[4][16][0].apply(exports,arguments) -},{"dup":16}],113:[function(require,module,exports){ -arguments[4][17][0].apply(exports,arguments) -},{"dup":17,"lodash.isstring":147}],114:[function(require,module,exports){ -arguments[4][18][0].apply(exports,arguments) -},{"dup":18}],115:[function(require,module,exports){ -arguments[4][19][0].apply(exports,arguments) -},{"dup":19}],116:[function(require,module,exports){ -arguments[4][20][0].apply(exports,arguments) -},{"dup":20,"lodash.isempty":140,"lodash.isobject":146}],117:[function(require,module,exports){ -arguments[4][21][0].apply(exports,arguments) -},{"./lib/client":98,"./lib/get-configuration":103,"./lib/parse-client-token":105,"./lib/util":116,"dup":21}],118:[function(require,module,exports){ -arguments[4][22][0].apply(exports,arguments) -},{"dup":22}],119:[function(require,module,exports){ -arguments[4][23][0].apply(exports,arguments) -},{"dup":23}],120:[function(require,module,exports){ -arguments[4][24][0].apply(exports,arguments) -},{"dup":24}],121:[function(require,module,exports){ -arguments[4][25][0].apply(exports,arguments) -},{"dup":25}],122:[function(require,module,exports){ -arguments[4][26][0].apply(exports,arguments) -},{"./lib/dom":118,"./lib/events":119,"./lib/fn":120,"./lib/url":121,"dup":26}],123:[function(require,module,exports){ -arguments[4][27][0].apply(exports,arguments) -},{"../shared/receiver":130,"braintree-utilities":122,"dup":27}],124:[function(require,module,exports){ -arguments[4][28][0].apply(exports,arguments) -},{"./authorization_service":123,"./loader":126,"braintree-utilities":122,"dup":28}],125:[function(require,module,exports){ -arguments[4][29][0].apply(exports,arguments) -},{"./client":124,"dup":29}],126:[function(require,module,exports){ -arguments[4][30][0].apply(exports,arguments) -},{"./loader_display":127,"./loader_message":128,"./loader_spinner":129,"dup":30}],127:[function(require,module,exports){ -arguments[4][31][0].apply(exports,arguments) -},{"dup":31}],128:[function(require,module,exports){ -arguments[4][32][0].apply(exports,arguments) -},{"dup":32}],129:[function(require,module,exports){ -arguments[4][33][0].apply(exports,arguments) -},{"dup":33}],130:[function(require,module,exports){ -arguments[4][34][0].apply(exports,arguments) -},{"braintree-utilities":122,"dup":34}],131:[function(require,module,exports){ -arguments[4][35][0].apply(exports,arguments) -},{"dup":35}],132:[function(require,module,exports){ -arguments[4][36][0].apply(exports,arguments) -},{"dup":36}],133:[function(require,module,exports){ -arguments[4][22][0].apply(exports,arguments) -},{"dup":22}],134:[function(require,module,exports){ -arguments[4][38][0].apply(exports,arguments) -},{"dup":38}],135:[function(require,module,exports){ -arguments[4][39][0].apply(exports,arguments) -},{"dup":39}],136:[function(require,module,exports){ -arguments[4][40][0].apply(exports,arguments) -},{"dup":40}],137:[function(require,module,exports){ -arguments[4][41][0].apply(exports,arguments) -},{"./array":131,"dup":41}],138:[function(require,module,exports){ -arguments[4][42][0].apply(exports,arguments) -},{"dup":42}],139:[function(require,module,exports){ -arguments[4][43][0].apply(exports,arguments) -},{"./lib/array":131,"./lib/base64":132,"./lib/dom":133,"./lib/events":134,"./lib/fn":135,"./lib/string":136,"./lib/url":137,"./lib/uuid":138,"dup":43}],140:[function(require,module,exports){ -arguments[4][44][0].apply(exports,arguments) -},{"dup":44,"lodash.isarguments":141,"lodash.isarray":142,"lodash.isfunction":143,"lodash.isstring":147,"lodash.keys":144}],141:[function(require,module,exports){ -arguments[4][45][0].apply(exports,arguments) -},{"dup":45}],142:[function(require,module,exports){ -arguments[4][46][0].apply(exports,arguments) -},{"dup":46}],143:[function(require,module,exports){ -arguments[4][47][0].apply(exports,arguments) -},{"dup":47}],144:[function(require,module,exports){ -arguments[4][48][0].apply(exports,arguments) -},{"dup":48,"lodash._getnative":145,"lodash.isarguments":141,"lodash.isarray":142}],145:[function(require,module,exports){ -arguments[4][49][0].apply(exports,arguments) -},{"dup":49}],146:[function(require,module,exports){ -arguments[4][50][0].apply(exports,arguments) -},{"dup":50}],147:[function(require,module,exports){ -arguments[4][51][0].apply(exports,arguments) -},{"dup":51}],148:[function(require,module,exports){ -arguments[4][52][0].apply(exports,arguments) -},{"./lib/check-origin":149,"./lib/events":150,"dup":52,"framebus":151}],149:[function(require,module,exports){ -arguments[4][53][0].apply(exports,arguments) -},{"dup":53}],150:[function(require,module,exports){ -arguments[4][54][0].apply(exports,arguments) -},{"dup":54}],151:[function(require,module,exports){ -arguments[4][55][0].apply(exports,arguments) -},{"dup":55}],152:[function(require,module,exports){ -arguments[4][52][0].apply(exports,arguments) -},{"./lib/check-origin":153,"./lib/events":154,"dup":52,"framebus":155}],153:[function(require,module,exports){ -arguments[4][53][0].apply(exports,arguments) -},{"dup":53}],154:[function(require,module,exports){ -arguments[4][54][0].apply(exports,arguments) -},{"dup":54}],155:[function(require,module,exports){ -arguments[4][55][0].apply(exports,arguments) -},{"dup":55}],156:[function(require,module,exports){ -arguments[4][35][0].apply(exports,arguments) -},{"dup":35}],157:[function(require,module,exports){ -arguments[4][36][0].apply(exports,arguments) -},{"dup":36}],158:[function(require,module,exports){ -arguments[4][22][0].apply(exports,arguments) -},{"dup":22}],159:[function(require,module,exports){ -arguments[4][38][0].apply(exports,arguments) -},{"dup":38}],160:[function(require,module,exports){ -arguments[4][39][0].apply(exports,arguments) -},{"dup":39}],161:[function(require,module,exports){ -arguments[4][40][0].apply(exports,arguments) -},{"dup":40}],162:[function(require,module,exports){ -arguments[4][41][0].apply(exports,arguments) -},{"./array":156,"dup":41}],163:[function(require,module,exports){ -arguments[4][42][0].apply(exports,arguments) -},{"dup":42}],164:[function(require,module,exports){ -arguments[4][43][0].apply(exports,arguments) -},{"./lib/array":156,"./lib/base64":157,"./lib/dom":158,"./lib/events":159,"./lib/fn":160,"./lib/string":161,"./lib/url":162,"./lib/uuid":163,"dup":43}],165:[function(require,module,exports){ -arguments[4][80][0].apply(exports,arguments) -},{"batch-execute-functions":166,"braintree-utilities/lib/fn":167,"dup":80}],166:[function(require,module,exports){ -arguments[4][81][0].apply(exports,arguments) -},{"dup":81}],167:[function(require,module,exports){ -arguments[4][39][0].apply(exports,arguments) -},{"dup":39}],168:[function(require,module,exports){ -arguments[4][83][0].apply(exports,arguments) -},{"./lib/default-attributes":169,"dup":83,"lodash.assign":170,"lodash.isstring":181,"setattributes":182}],169:[function(require,module,exports){ -arguments[4][84][0].apply(exports,arguments) -},{"dup":84}],170:[function(require,module,exports){ -arguments[4][85][0].apply(exports,arguments) -},{"dup":85,"lodash._baseassign":171,"lodash._createassigner":173,"lodash.keys":177}],171:[function(require,module,exports){ -arguments[4][86][0].apply(exports,arguments) -},{"dup":86,"lodash._basecopy":172,"lodash.keys":177}],172:[function(require,module,exports){ -arguments[4][87][0].apply(exports,arguments) -},{"dup":87}],173:[function(require,module,exports){ -arguments[4][88][0].apply(exports,arguments) -},{"dup":88,"lodash._bindcallback":174,"lodash._isiterateecall":175,"lodash.restparam":176}],174:[function(require,module,exports){ -arguments[4][89][0].apply(exports,arguments) -},{"dup":89}],175:[function(require,module,exports){ -arguments[4][90][0].apply(exports,arguments) -},{"dup":90}],176:[function(require,module,exports){ -arguments[4][91][0].apply(exports,arguments) -},{"dup":91}],177:[function(require,module,exports){ -arguments[4][48][0].apply(exports,arguments) -},{"dup":48,"lodash._getnative":178,"lodash.isarguments":179,"lodash.isarray":180}],178:[function(require,module,exports){ -arguments[4][49][0].apply(exports,arguments) -},{"dup":49}],179:[function(require,module,exports){ -arguments[4][45][0].apply(exports,arguments) -},{"dup":45}],180:[function(require,module,exports){ -arguments[4][46][0].apply(exports,arguments) -},{"dup":46}],181:[function(require,module,exports){ -arguments[4][51][0].apply(exports,arguments) -},{"dup":51}],182:[function(require,module,exports){ -arguments[4][97][0].apply(exports,arguments) -},{"dup":97}],183:[function(require,module,exports){ -(function (global){ -'use strict'; - -var braintreeUtil = require('braintree-utilities'); -var browser = require('../../shared/util/browser'); -var Destructor = require('destructor'); -var Bus = require('braintree-bus'); -var constants = require('../../shared/constants'); -var PopupView = require('./popup-view'); -var ModalView = require('./modal-view'); - -function AppView(options) { - this.options = options || {}; - - this.destructor = new Destructor(); - - this.bus = new Bus({ - merchantUrl: global.location.href, - channel: this.options.channel - }); - - this.destructor.registerFunctionForTeardown(braintreeUtil.bind(function () { - this.bus.teardown(); - }, this)); - - this._initialize(); -} - -AppView.prototype._initialize = function () { - if (browser.isPopupSupported()) { - this.app = new PopupView({ - src: this._buildUrl(), - isHermes: this.options.isHermes, - channel: this.options.channel - }); - } else { - this.app = new ModalView({ - src: this._buildUrl(), - headless: this.options.headless, - isHermes: this.options.isHermes, - insertFrameFunction: this.options.insertFrameFunction, - channel: this.options.channel - }); - } - - this.destructor.registerFunctionForTeardown(braintreeUtil.bind(function () { - this.app.teardown(); - }, this)); - - this.bus.on(constants.events.CLOSE_APP, braintreeUtil.bind(this.close, this)); - this.bus.on(constants.events.FOCUS_APP, braintreeUtil.bind(this.focus, this)); - this.bus.on(Bus.events.PAYMENT_METHOD_GENERATED, braintreeUtil.bind(this._handlePaymentMethodGenerated, this)); - this.bus.on(Bus.events.UI_POPUP_FORCE_CLOSE, braintreeUtil.bind(this._handleForceClose, this)); -}; - -AppView.prototype._buildUrl = function () { - var url = this.options.paypalAssetsUrl; - url += '/pwpp/'; - url += constants.VERSION; - url += '/html/braintree-frame.html'; - url += '#' + this.options.channel; - - return url; -}; - -AppView.prototype.open = function () { - this.focus(); - this.app.open(); - this.poll(); -}; - -AppView.prototype._handleForceClose = function (event) { - if (event.target === constants.PAYPAL_INTEGRATION_NAME) { - this.close(); - } -}; - -AppView.prototype.close = function () { - this.app.close(); -}; - -AppView.prototype.focus = function () { - if (braintreeUtil.isFunction(this.app.focus)) { - this.app.focus(); - } -}; - -AppView.prototype.isClosed = function () { - return this.app.isClosed(); -}; - -AppView.prototype.stopPolling = function () { - clearInterval(this.pollId); -}; - -AppView.prototype.poll = function () { - this.pollId = setInterval(braintreeUtil.bind(function () { - if (this.isClosed()) { - this._handleClosed(); - } - }, this), 100); -}; - -AppView.prototype._handlePaymentMethodGenerated = function (bundle) { - if (bundle.type === constants.NONCE_TYPE) { - this.close(); - } -}; - -AppView.prototype._handleClosed = function () { - this.stopPolling(); - - this.close(); - - if (browser.isPopupSupported()) { - this.app.el = null; - } -}; - -AppView.prototype.teardown = function () { - this.destructor.teardown(); -}; - -module.exports = AppView; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"../../shared/constants":186,"../../shared/util/browser":191,"./modal-view":184,"./popup-view":185,"braintree-bus":152,"braintree-utilities":164,"destructor":165}],184:[function(require,module,exports){ -(function (global){ -'use strict'; - -var braintreeUtil = require('braintree-utilities'); -var browser = require('../../shared/util/browser'); -var constants = require('../../shared/constants'); -var Bus = require('braintree-bus'); -var iframer = require('iframer'); - -function ModalView(options) { - this.options = options || {}; - this.container = document.body; - - this.bus = new Bus({ - merchantUrl: global.location.href, - channel: options.channel - }); - - if (this.options.headless) { - this._open = this._openHeadless; - } else { - this._attachBusEvents(); - } - - this._initialize(); -} - -ModalView.prototype._attachBusEvents = function () { - this.bus.on(constants.events.OPEN_MODAL, braintreeUtil.bind(this.open, this)); -}; - -ModalView.prototype._initialize = function () { - var name = this.options.isHermes ? constants.HERMES_FRAME_NAME : constants.FRAME_NAME; - - this.el = iframer({ - src: this.options.src, - name: name, - height: this.options.height || '100%', - width: this.options.width || '100%', - style: { - position: browser.isMobile() ? 'absolute' : 'fixed', - top: 0, - left: 0, - bottom: 0, - padding: 0, - margin: 0, - border: 0, - outline: 'none', - zIndex: 20001, - background: '#FFFFFF' - } - }); -}; - -ModalView.prototype.isClosed = function () { - return !this.container.contains(this.el); -}; - -ModalView.prototype._openHeadless = function () { - this.bus.emit(constants.events.OPEN_MODAL); -}; - -ModalView.prototype._open = function () { - if (braintreeUtil.isFunction(this.options.insertFrameFunction)) { - this.options.insertFrameFunction(this.el.src); - } else { - this.container.appendChild(this.el); - } - - this.bus.emit(constants.events.UI_MODAL_DID_OPEN, {source: constants.PAYPAL_INTEGRATION_NAME}); -}; - -ModalView.prototype.open = function () { - if (this.isClosed()) { - this._open(); - } -}; - -ModalView.prototype.close = function () { - if (!this.isClosed()) { - this.container.removeChild(this.el); - - this.bus.emit(constants.events.UI_MODAL_DID_CLOSE, {source: constants.PAYPAL_INTEGRATION_NAME}); - } -}; - -ModalView.prototype.teardown = function () { - this.close(); - this.bus.teardown(); -}; - -module.exports = ModalView; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"../../shared/constants":186,"../../shared/util/browser":191,"braintree-bus":152,"braintree-utilities":164,"iframer":168}],185:[function(require,module,exports){ -(function (global){ -'use strict'; - -var constants = require('../../shared/constants'); -var Bus = require('braintree-bus'); -var browser = require('../../shared/useragent/browser'); - -function PopupView(options) { - this.options = options; - - this.bus = new Bus({ - merchantUrl: global.location.href, - channel: this.options.channel - }); - - if (options.isHermes) { - this.name = constants.HERMES_POPUP_NAME; - this.popupHeight = constants.HERMES_POPUP_HEIGHT; - this.popupWidth = constants.HERMES_POPUP_WIDTH; - } else { - this.name = constants.POPUP_NAME; - this.popupHeight = constants.POPUP_HEIGHT; - this.popupWidth = constants.POPUP_WIDTH; - } -} - -PopupView.prototype._getPopupOptions = function () { - return [ - 'height=' + this.popupHeight, - 'width=' + this.popupWidth, - 'top=' + this._getTopPosition(), - 'left=' + this._getLeftPosition(), - constants.POPUP_OPTIONS - ].join(','); -}; - -PopupView.prototype._centerPosition = function (windowMetric, popupMetric, offset) { - return (windowMetric - popupMetric) / 2 + offset; -}; - -PopupView.prototype._getTopPosition = function () { - var windowHeight = window.outerHeight || document.documentElement.clientHeight; - var windowTop = typeof window.screenY === 'undefined' ? window.screenTop : window.screenY; - - return this._centerPosition(windowHeight, this.popupHeight, windowTop); -}; - -PopupView.prototype._getLeftPosition = function () { - var windowWidth = window.outerWidth || document.documentElement.clientWidth; - var windowLeft = typeof window.screenX === 'undefined' ? window.screenLeft : window.screenX; - - return this._centerPosition(windowWidth, this.popupWidth, windowLeft); -}; - -PopupView.prototype.isClosed = function () { - if (this.el) { - return this.el.closed; - } -}; - -PopupView.prototype.open = function () { - if (!this.el) { - this.el = window.open(this.options.src, this.name, this._getPopupOptions()); - this.focus(); - - this.bus.emit(Bus.events.UI_POPUP_DID_OPEN, {source: constants.PAYPAL_INTEGRATION_NAME}); - } -}; - -PopupView.prototype.close = function () { - if (this.el) { - if (browser.isIE8() && !this.isClosed() || !browser.isIE8()) { - this.el.close(); - } - - this.bus.emit(Bus.events.UI_POPUP_DID_CLOSE, {source: constants.PAYPAL_INTEGRATION_NAME}); - } -}; - -PopupView.prototype.focus = function () { - if (this.el) { - this.el.focus(); - } -}; - -PopupView.prototype.teardown = function () { - this.close(); - this.bus.teardown(); -}; - -module.exports = PopupView; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"../../shared/constants":186,"../../shared/useragent/browser":187,"braintree-bus":152}],186:[function(require,module,exports){ -'use strict'; - -var i; -var version = "1.6.0"; -var events = [ - 'GET_CLIENT_TOKEN', - 'GET_CLIENT_OPTIONS', - 'OPEN_MODAL', - 'CLOSE_APP', - 'FOCUS_APP', - 'UI_MODAL_DID_OPEN', - 'UI_MODAL_DID_CLOSE' -]; - -exports.VERSION = version; -exports.POPUP_NAME = 'braintree_paypal_popup'; -exports.HERMES_POPUP_NAME = 'PPFrameRedirect'; -exports.FRAME_NAME = 'braintree-paypal-frame'; -exports.HERMES_FRAME_NAME = 'PPFrameRedirect'; -exports.POPUP_PATH = '/pwpp/' + version + '/html/braintree-frame.html'; -exports.POPUP_OPTIONS = 'resizable,scrollbars'; -exports.POPUP_HEIGHT = 470; -exports.POPUP_WIDTH = 410; -exports.HERMES_POPUP_HEIGHT = 535; -exports.HERMES_POPUP_WIDTH = 450; -exports.BRIDGE_FRAME_NAME = 'bt-proxy-frame'; -exports.HERMES_SUPPORTED_CURRENCIES = ['USD', 'GBP', 'EUR', 'AUD', 'CAD', 'DKK', 'NOK', 'PLN', 'SEK', 'CHF', 'TRY']; -exports.HERMES_SUPPORTED_COUNTRIES = ['US', 'GB', 'AU', 'CA', 'ES', 'FR', 'DE', 'IT', 'NL', 'NO', 'PL', 'CH', 'TR', 'DK', 'BE', 'AT']; -exports.NONCE_TYPE = 'PayPalAccount'; -exports.PAYPAL_INTEGRATION_NAME = 'PayPal'; -exports.ILLEGAL_XHR_ERROR = 'Illegal XHR request attempted'; -exports.events = {}; - -for (i = 0; i < events.length; i++) { - exports.events[events[i]] = 'paypal:' + events[i]; -} - -},{}],187:[function(require,module,exports){ -'use strict'; - -var userAgent = require('./useragent'); -var platform = require('./platform'); - -function isAndroid() { - return userAgent.matchUserAgent('Android') && !isChrome(); -} - -function isChrome() { - return userAgent.matchUserAgent('Chrome') || userAgent.matchUserAgent('CriOS'); -} - -function isFirefox() { - return userAgent.matchUserAgent('Firefox'); -} - -function isIE() { - return userAgent.matchUserAgent('Trident') || userAgent.matchUserAgent('MSIE'); -} - -function isIE8() { - return userAgent.matchUserAgent(/MSIE 8\.0/); -} - -function isOpera() { - return userAgent.matchUserAgent('Opera') || userAgent.matchUserAgent('OPR'); -} - -function isOperaMini() { - return isOpera() && Object.prototype.toString.call(window.operamini) === '[object OperaMini]'; -} - -function isSafari() { - return userAgent.matchUserAgent('Safari') && !isChrome() && !isAndroid(); -} - -function isIosWebView() { - return platform.isIos() && !isChrome() && !isSafari(); -} - -function isAndroidWebView() { - var androidWebviewRegExp = /Version\/[\w\.]+ Chrome\/[\w\.]+ Mobile/; - return platform.isAndroid() && userAgent.matchUserAgent(androidWebviewRegExp); -} - -module.exports = { - isAndroid: isAndroid, - isChrome: isChrome, - isFirefox: isFirefox, - isIE: isIE, - isIE8: isIE8, - isOpera: isOpera, - isOperaMini: isOperaMini, - isSafari: isSafari, - isIosWebView: isIosWebView, - isAndroidWebView: isAndroidWebView -}; - -},{"./platform":189,"./useragent":190}],188:[function(require,module,exports){ -'use strict'; - -var userAgent = require('./useragent'); -var platform = require('./platform'); - -function isMobile() { - return !isTablet() && - (platform.isAndroid() || platform.isIpod() || platform.isIphone() || - userAgent.matchUserAgent('IEMobile')); -} - -function isTablet() { - return platform.isIpad() || platform.isAndroid() && - !userAgent.matchUserAgent('Mobile'); -} - -function isDesktop() { - return !isMobile() && !isTablet(); -} - -module.exports = { - isMobile: isMobile, - isTablet: isTablet, - isDesktop: isDesktop -}; - -},{"./platform":189,"./useragent":190}],189:[function(require,module,exports){ -'use strict'; - -var userAgent = require('./useragent'); - -function isAndroid() { - return userAgent.matchUserAgent('Android'); -} - -function isIpad() { - return userAgent.matchUserAgent('iPad'); -} - -function isIpod() { - return userAgent.matchUserAgent('iPod'); -} - -function isIphone() { - return userAgent.matchUserAgent('iPhone') && !isIpod(); -} - -function isIos() { - return isIpad() || isIpod() || isIphone(); -} - -module.exports = { - isAndroid: isAndroid, - isIpad: isIpad, - isIpod: isIpod, - isIphone: isIphone, - isIos: isIos -}; - -},{"./useragent":190}],190:[function(require,module,exports){ -'use strict'; - -var nativeUserAgent = window.navigator.userAgent; - -function getNativeUserAgent() { - return nativeUserAgent; -} - -function matchUserAgent(pattern) { - var userAgent = exports.getNativeUserAgent(); - var matches = userAgent.match(pattern); - if (matches) { - return true; - } - return false; -} - -exports.getNativeUserAgent = getNativeUserAgent; -exports.matchUserAgent = matchUserAgent; - -},{}],191:[function(require,module,exports){ -'use strict'; - -var browser = require('../useragent/browser'); -var device = require('../useragent/device'); -var platform = require('../useragent/platform'); -var userAgent = require('../useragent/useragent'); - -var uaString = window.navigator.userAgent; -var mobileRe = /[Mm]obi|tablet|iOS|Android|IEMobile|Windows\sPhone/; - -function isMobile() { - return isMobileDevice() && window.outerWidth < 600; -} - -function isMobileDevice() { - return mobileRe.test(uaString); -} - -function detectedPostMessage() { - return !!window.postMessage; -} - -function isPopupSupported() { - if (browser.isOperaMini()) { - return false; - } - - if (device.isDesktop()) { - return true; - } - - if (device.isMobile() || device.isTablet()) { - if (browser.isIE()) { - return false; - } - - if (platform.isAndroid()) { - if (browser.isAndroidWebView()) { - return false; - } - - return true; - } - - if (platform.isIos()) { - // Chrome, Safari Versions 8.0-8.1, or WebViews - if (browser.isChrome()) { - return false; - } - - if (browser.isSafari() && userAgent.matchUserAgent(/OS (?:8_1|8_0|8)(?!_\d)/i)) { - return false; - } - - if (browser.isIosWebView()) { - return false; - } - - return true; - } - } - - return false; -} - -function isOverlaySupported() { - if (browser.isIE8()) { - return false; - } - - try { - return window.self === window.top; - } catch (e) { - return false; - } -} - -function isBridgeIframeRequired() { - return browser.isIE(); -} - -function isMetroBrowser() { - var supported = null; - var errorName = ''; - - try { - new ActiveXObject(''); // eslint-disable-line - } catch (e) { - errorName = e.name; - } - - try { - supported = !!new ActiveXObject('htmlfile'); - } catch (e) { - supported = false; - } - - if (errorName !== 'ReferenceError' && supported === false) { - supported = false; - } else { - supported = true; - } - return !supported; -} - -module.exports = { - isMobile: isMobile, - isMobileDevice: isMobileDevice, - detectedPostMessage: detectedPostMessage, - isPopupSupported: isPopupSupported, - isOverlaySupported: isOverlaySupported, - isBridgeIframeRequired: isBridgeIframeRequired, - isMetroBrowser: isMetroBrowser -}; - -},{"../useragent/browser":187,"../useragent/device":188,"../useragent/platform":189,"../useragent/useragent":190}],192:[function(require,module,exports){ -'use strict'; - -var utils = require('braintree-utilities'); - -function MessageBus(host, channel) { - this.host = host || window; - this.channel = channel || null; - this.handlers = []; - - utils.addEventListener(this.host, 'message', utils.bind(this.receive, this)); -} - -MessageBus.prototype.receive = function (event) { - var i, message, parsed, type; - - try { - parsed = JSON.parse(event.data); - } catch (e) { - return; - } - - type = parsed.type; - message = new MessageBus.Message(this, event.source, parsed.data); - - for (i = 0; i < this.handlers.length; i++) { - if (this.handlers[i].type === type) { - this.handlers[i].handler(message); - } - } -}; - -MessageBus.prototype.send = function (source, type, data) { - source.postMessage(JSON.stringify({ - type: this._namespaceEvent(type), - data: data - }), '*'); -}; - -MessageBus.prototype.register = function (type, handler) { - this.handlers.push({ - type: this._namespaceEvent(type), - handler: handler - }); -}; - -MessageBus.prototype.unregister = function (type, handler) { - for (var i = this.handlers.length - 1; i >= 0; i--) { - if (this.handlers[i].type === type && this.handlers[i].handler === handler) { - return this.handlers.splice(i, 1); - } - } -}; - -MessageBus.prototype._namespaceEvent = function (eventName) { - return this.channel ? ['braintree', this.channel, eventName].join(':') : eventName; -}; - -MessageBus.Message = function (bus, source, content) { - this.bus = bus; - this.source = source; - this.content = content; -}; - -MessageBus.Message.prototype.reply = function (type, data) { - this.bus.send(this.source, type, data); -}; - -module.exports = MessageBus; - -},{"braintree-utilities":206}],193:[function(require,module,exports){ -'use strict'; - -var utils = require('braintree-utilities'); - -function PubsubClient(bus, target) { - this.bus = bus; - this.target = target; - this.handlers = []; - - this.bus.register('publish', utils.bind(this._handleMessage, this)); -} - -PubsubClient.prototype._handleMessage = function (message) { - var i, - content = message.content, - handlers = this.handlers[content.channel]; - - if (typeof handlers !== 'undefined') { - for (i = 0; i < handlers.length; i++) { - handlers[i](content.data); - } - } -}; - -PubsubClient.prototype.publish = function (channel, data) { - this.bus.send(this.target, 'publish', { channel: channel, data: data }); -}; - -PubsubClient.prototype.subscribe = function (channel, handler) { - this.handlers[channel] = this.handlers[channel] || []; - this.handlers[channel].push(handler); -}; - -PubsubClient.prototype.unsubscribe = function (channel, handler) { - var i, - handlers = this.handlers[channel]; - - if (typeof handlers !== 'undefined') { - for (i = 0; i < handlers.length; i++) { - if (handlers[i] === handler) { - handlers.splice(i, 1); - } - } - } -}; - -module.exports = PubsubClient; - -},{"braintree-utilities":206}],194:[function(require,module,exports){ -'use strict'; - -function PubsubServer(bus) { - this.bus = bus; - this.frames = []; - this.handlers = []; -} - -PubsubServer.prototype.subscribe = function (channel, handler) { - this.handlers[channel] = this.handlers[channel] || []; - this.handlers[channel].push(handler); -}; - -PubsubServer.prototype.registerFrame = function (frame) { - this.frames.push(frame); -}; - -PubsubServer.prototype.unregisterFrame = function (frame) { - for (var i = 0; i < this.frames.length; i++) { - if (this.frames[i] === frame) { - this.frames.splice(i, 1); - } - } -}; - -PubsubServer.prototype.publish = function (channel, data) { - var i, - handlers = this.handlers[channel]; - - if (typeof handlers !== 'undefined') { - for (i = 0; i < handlers.length; i++) { - handlers[i](data); - } - } - - for (i = 0; i < this.frames.length; i++) { - this.bus.send(this.frames[i], 'publish', { - channel: channel, - data: data - }); - } -}; - -PubsubServer.prototype.unsubscribe = function (channel, handler) { - var i, - handlers = this.handlers[channel]; - - if (typeof handlers !== 'undefined') { - for (i = 0; i < handlers.length; i++) { - if (handlers[i] === handler) { - handlers.splice(i, 1); - } - } - } -}; - -module.exports = PubsubServer; - -},{}],195:[function(require,module,exports){ -'use strict'; - -var utils = require('braintree-utilities'); - -function RPCClient(bus, target) { - this.bus = bus; - this.target = target || window.parent; - this.counter = 0; - this.callbacks = {}; - - this.bus.register('rpc_response', utils.bind(this._handleResponse, this)); -} - -RPCClient.prototype._handleResponse = function (message) { - var content = message.content, - thisCallback = this.callbacks[content.id]; - - if (typeof thisCallback === 'function') { - thisCallback.apply(null, content.response); - delete this.callbacks[content.id]; - } -}; - -RPCClient.prototype.invoke = function (method, args, callback) { - var counter = this.counter++; - - this.callbacks[counter] = callback; - this.bus.send(this.target, 'rpc_request', { id: counter, method: method, args: args }); -}; - -module.exports = RPCClient; - -},{"braintree-utilities":206}],196:[function(require,module,exports){ -'use strict'; - -var utils = require('braintree-utilities'); - -function RPCServer(bus) { - this.bus = bus; - this.methods = {}; - - this.bus.register('rpc_request', utils.bind(this._handleRequest, this)); -} - -RPCServer.prototype._handleRequest = function (message) { - var reply, - content = message.content, - args = content.args || [], - thisMethod = this.methods[content.method]; - - if (typeof thisMethod === 'function') { - reply = function () { - message.reply('rpc_response', { - id: content.id, - response: Array.prototype.slice.call(arguments) - }); - }; - - args.push(reply); - - thisMethod.apply(null, args); - } -}; - -RPCServer.prototype.reset = function () { - this.methods = {}; -}; - -RPCServer.prototype.define = function (method, handler) { - this.methods[method] = handler; -}; - -module.exports = RPCServer; - -},{"braintree-utilities":206}],197:[function(require,module,exports){ -var MessageBus = require('./lib/message-bus'); -var PubsubClient = require('./lib/pubsub-client'); -var PubsubServer = require('./lib/pubsub-server'); -var RPCClient = require('./lib/rpc-client'); -var RPCServer = require('./lib/rpc-server'); - -module.exports = { - MessageBus: MessageBus, - PubsubClient: PubsubClient, - PubsubServer: PubsubServer, - RPCClient: RPCClient, - RPCServer: RPCServer -}; - -},{"./lib/message-bus":192,"./lib/pubsub-client":193,"./lib/pubsub-server":194,"./lib/rpc-client":195,"./lib/rpc-server":196}],198:[function(require,module,exports){ -arguments[4][35][0].apply(exports,arguments) -},{"dup":35}],199:[function(require,module,exports){ -arguments[4][36][0].apply(exports,arguments) -},{"dup":36}],200:[function(require,module,exports){ -arguments[4][22][0].apply(exports,arguments) -},{"dup":22}],201:[function(require,module,exports){ -arguments[4][38][0].apply(exports,arguments) -},{"dup":38}],202:[function(require,module,exports){ -arguments[4][39][0].apply(exports,arguments) -},{"dup":39}],203:[function(require,module,exports){ -arguments[4][40][0].apply(exports,arguments) -},{"dup":40}],204:[function(require,module,exports){ -arguments[4][41][0].apply(exports,arguments) -},{"./array":198,"dup":41}],205:[function(require,module,exports){ -arguments[4][42][0].apply(exports,arguments) -},{"dup":42}],206:[function(require,module,exports){ -arguments[4][43][0].apply(exports,arguments) -},{"./lib/array":198,"./lib/base64":199,"./lib/dom":200,"./lib/events":201,"./lib/fn":202,"./lib/string":203,"./lib/url":204,"./lib/uuid":205,"dup":43}],207:[function(require,module,exports){ -arguments[4][35][0].apply(exports,arguments) -},{"dup":35}],208:[function(require,module,exports){ -arguments[4][36][0].apply(exports,arguments) -},{"dup":36}],209:[function(require,module,exports){ -arguments[4][22][0].apply(exports,arguments) -},{"dup":22}],210:[function(require,module,exports){ -arguments[4][38][0].apply(exports,arguments) -},{"dup":38}],211:[function(require,module,exports){ -arguments[4][39][0].apply(exports,arguments) -},{"dup":39}],212:[function(require,module,exports){ -arguments[4][40][0].apply(exports,arguments) -},{"dup":40}],213:[function(require,module,exports){ -arguments[4][41][0].apply(exports,arguments) -},{"./array":207,"dup":41}],214:[function(require,module,exports){ -arguments[4][42][0].apply(exports,arguments) -},{"dup":42}],215:[function(require,module,exports){ -arguments[4][43][0].apply(exports,arguments) -},{"./lib/array":207,"./lib/base64":208,"./lib/dom":209,"./lib/events":210,"./lib/fn":211,"./lib/string":212,"./lib/url":213,"./lib/uuid":214,"dup":43}],216:[function(require,module,exports){ -arguments[4][80][0].apply(exports,arguments) -},{"batch-execute-functions":217,"braintree-utilities/lib/fn":218,"dup":80}],217:[function(require,module,exports){ -arguments[4][81][0].apply(exports,arguments) -},{"dup":81}],218:[function(require,module,exports){ -arguments[4][39][0].apply(exports,arguments) -},{"dup":39}],219:[function(require,module,exports){ -(function (global){ -'use strict'; - -function FormNapper(form) { - if (typeof form === 'string' || form instanceof String) { - form = document.getElementById(form); - } - - if (form instanceof HTMLFormElement) { - this.htmlForm = form; - } else { - throw new TypeError('FormNapper requires an HTMLFormElement element or the id string of one.'); - } -} - -FormNapper.prototype.hijack = function (onsubmit) { - if (this.submitHandler) { return; } - - this.submitHandler = function (event) { - if (event.preventDefault) { - event.preventDefault(); - } else { - event.returnValue = false; - } - - onsubmit(event); - }; - - if (global.addEventListener != null) { - this.htmlForm.addEventListener('submit', this.submitHandler, false); - } else if (global.attachEvent != null) { - this.htmlForm.attachEvent('onsubmit', this.submitHandler); - } else { - this.htmlForm.onsubmit = this.submitHandler; - } -}; - -FormNapper.prototype.inject = function (name, value) { - var input = this.htmlForm.querySelector('input[name="' + name + '"]'); - - if (input == null) { - input = document.createElement('input'); - input.type = 'hidden'; - input.name = name; - this.htmlForm.appendChild(input); - } - - input.value = value; - - return input; -}; - -FormNapper.prototype.submit = function () { - HTMLFormElement.prototype.submit.call(this.htmlForm); -}; - -FormNapper.prototype.detach = function () { - if (!this.submitHandler) { return; } - - if (global.removeEventListener != null) { - this.htmlForm.removeEventListener('submit', this.submitHandler, false); - } else if (global.detachEvent != null) { - this.htmlForm.detachEvent('onsubmit', this.submitHandler); - } else { - this.htmlForm.onsubmit = null; - } - - delete this.submitHandler; -}; - -module.exports = FormNapper; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],220:[function(require,module,exports){ -arguments[4][83][0].apply(exports,arguments) -},{"./lib/default-attributes":221,"dup":83,"lodash.assign":222,"lodash.isstring":233,"setattributes":234}],221:[function(require,module,exports){ -arguments[4][84][0].apply(exports,arguments) -},{"dup":84}],222:[function(require,module,exports){ -arguments[4][85][0].apply(exports,arguments) -},{"dup":85,"lodash._baseassign":223,"lodash._createassigner":225,"lodash.keys":229}],223:[function(require,module,exports){ -arguments[4][86][0].apply(exports,arguments) -},{"dup":86,"lodash._basecopy":224,"lodash.keys":229}],224:[function(require,module,exports){ -arguments[4][87][0].apply(exports,arguments) -},{"dup":87}],225:[function(require,module,exports){ -arguments[4][88][0].apply(exports,arguments) -},{"dup":88,"lodash._bindcallback":226,"lodash._isiterateecall":227,"lodash.restparam":228}],226:[function(require,module,exports){ -arguments[4][89][0].apply(exports,arguments) -},{"dup":89}],227:[function(require,module,exports){ -arguments[4][90][0].apply(exports,arguments) -},{"dup":90}],228:[function(require,module,exports){ -arguments[4][91][0].apply(exports,arguments) -},{"dup":91}],229:[function(require,module,exports){ -arguments[4][48][0].apply(exports,arguments) -},{"dup":48,"lodash._getnative":230,"lodash.isarguments":231,"lodash.isarray":232}],230:[function(require,module,exports){ -arguments[4][49][0].apply(exports,arguments) -},{"dup":49}],231:[function(require,module,exports){ -arguments[4][45][0].apply(exports,arguments) -},{"dup":45}],232:[function(require,module,exports){ -arguments[4][46][0].apply(exports,arguments) -},{"dup":46}],233:[function(require,module,exports){ -arguments[4][51][0].apply(exports,arguments) -},{"dup":51}],234:[function(require,module,exports){ -arguments[4][97][0].apply(exports,arguments) -},{"dup":97}],235:[function(require,module,exports){ -'use strict'; - -var RPC_METHOD_NAMES = ['getCreditCards', 'unlockCreditCard', 'sendAnalyticsEvents']; - -function APIProxyServer(apiClient) { - this.apiClient = apiClient; -} - -APIProxyServer.prototype.attach = function (rpcServer) { - var self = this; - var i = 0; - var len = RPC_METHOD_NAMES.length; - - function attachDefine(name) { - rpcServer.define(name, function () { - self.apiClient[name].apply(self.apiClient, arguments); - }); - } - - for (i; i < len; i++) { - attachDefine(RPC_METHOD_NAMES[i]); - } -}; - -module.exports = APIProxyServer; - -},{}],236:[function(require,module,exports){ -(function (global){ -'use strict'; - -var htmlNode, bodyNode; -var api = require('braintree-api'); -var BraintreeBus = require('braintree-bus'); -var Destructor = require('destructor'); -var rpc = require('braintree-rpc'); -var utils = require('braintree-utilities'); -var normalizeElement = utils.normalizeElement; -var bind = utils.bind; -var isBrowserHttps = utils.isBrowserHttps; -var APIProxyServer = require('./api-proxy-server'); -var MerchantFormManager = require('./merchant-form-manager'); -var FrameContainer = require('./frame-container'); -var constants = require('../shared/constants'); -var version = "1.9.0"; -var PayPalModalView = require('braintree-paypal/src/external/views/app-view'); - -function getElementStyle(element, style) { - var computedStyle = window.getComputedStyle ? getComputedStyle(element) : element.currentStyle; - - return computedStyle[style]; -} - -function getMerchantPageDefaultStyles() { - return { - html: { - height: htmlNode.style.height || '', - overflow: getElementStyle(htmlNode, 'overflow'), - position: getElementStyle(htmlNode, 'position') - }, - body: { - height: bodyNode.style.height || '', - overflow: getElementStyle(bodyNode, 'overflow') - } - }; -} - -function isMobile() { - var isMobileUserAgent = /Android|iPhone|iPod|iPad/i.test(window.navigator.userAgent); - return isMobileUserAgent; -} - -function Client(settings) { - var inlineFramePath, modalFramePath, formElement; - - this.channel = settings.channel; - this.destructor = new Destructor(); - this.merchantConfiguration = settings.merchantConfiguration; - this.encodedClientToken = settings.gatewayConfiguration; - this.analyticsConfiguration = settings.analyticsConfiguration; - this.paypalOptions = settings.merchantConfiguration.paypal || {}; - this.container = null; - this.merchantFormManager = null; - this.root = settings.root; - this.configurationRequests = []; - this.braintreeApiClient = api.configure({ - clientToken: settings.gatewayConfiguration, - analyticsConfiguration: this.analyticsConfiguration, - integration: 'dropin', - enableCORS: this.merchantConfiguration.enableCORS - }); - - this.paymentMethodNonceReceivedCallback = settings.merchantConfiguration.paymentMethodNonceReceived; - this.clientToken = api.parseClientToken(settings.gatewayConfiguration); - - this.braintreeBus = new BraintreeBus({ - merchantUrl: global.location.href, - channel: settings.channel - }); - - this.bus = new rpc.MessageBus(this.root, this.channel); - this.rpcServer = new rpc.RPCServer(this.bus); - this.apiProxyServer = new APIProxyServer(this.braintreeApiClient); - - this.apiProxyServer.attach(this.rpcServer); - - inlineFramePath = settings.inlineFramePath || this.clientToken.assetsUrl + '/dropin/' + version + '/inline-frame.html'; - modalFramePath = settings.modalFramePath || this.clientToken.assetsUrl + '/dropin/' + version + '/modal-frame.html'; - htmlNode = document.documentElement; - bodyNode = document.body; - - this.frames = { - inline: this._createFrame(inlineFramePath, constants.INLINE_FRAME_NAME), - modal: this._createFrame(modalFramePath, constants.MODAL_FRAME_NAME) - }; - - this.container = normalizeElement(settings.merchantConfiguration.container, 'Unable to find valid container.'); - - formElement = normalizeElement(settings.merchantConfiguration.form || this._findClosest(this.container, 'form')); - - this.merchantFormManager = new MerchantFormManager({ - form: formElement, - frames: this.frames, - onSubmit: this.paymentMethodNonceReceivedCallback, - apiClient: this.braintreeApiClient - }).initialize(); - - this.destructor.registerFunctionForTeardown(bind(function () { - this.merchantFormManager.teardown(); - }, this)); - - if (settings.gatewayConfiguration.paypalEnabled) { - this._configurePayPal(); - } - - this.braintreeApiClient.sendAnalyticsEvents('dropin.web.initialized'); -} - -Client.prototype.initialize = function () { - var i; - var self = this; - - this._initializeModal(); - - this.braintreeBus.emit(BraintreeBus.events.ASYNC_DEPENDENCY_INITIALIZING); - this.container.appendChild(this.frames.inline.element); - bodyNode.appendChild(this.frames.modal.element); - - this.destructor.registerFunctionForTeardown(function (done) { - self._hideModal(function () { - self.container.removeChild(self.frames.inline.element); - bodyNode.removeChild(self.frames.modal.element); - - done(); - }); - }); - - this.rpcServer.define('receiveSharedCustomerIdentifier', function (sharedCustomerIdentifier) { - self.braintreeApiClient.attrs.sharedCustomerIdentifier = sharedCustomerIdentifier; - self.braintreeApiClient.attrs.sharedCustomerIdentifierType = 'browser_session_cookie_store'; - - for (i = 0; i < self.configurationRequests.length; i++) { - self.configurationRequests[i](self.encodedClientToken); - } - - self.configurationRequests = []; - }); - - this.braintreeBus.on(BraintreeBus.events.PAYMENT_METHOD_GENERATED, bind(this._handleAltPayData, this)); - - this.rpcServer.define('getConfiguration', function (reply) { - reply({ - enableCORS: self.merchantConfiguration.enableCORS, - clientToken: self.encodedClientToken, - paypalOptions: self.paypalOptions, - analyticsConfiguration: self.analyticsConfiguration, - merchantHttps: isBrowserHttps() - }); - }); - - this.rpcServer.define('selectPaymentMethod', function (paymentMethods) { - self.frames.modal.rpcClient.invoke('selectPaymentMethod', [paymentMethods]); - self._showModal(); - }); - - this.rpcServer.define('sendAddedPaymentMethod', function (paymentMethod) { - self.merchantFormManager.setNoncePayload(paymentMethod); - - self.frames.inline.rpcClient.invoke('receiveNewPaymentMethod', [paymentMethod]); - }); - - this.rpcServer.define('sendUsedPaymentMethod', function (paymentMethod) { - self.frames.inline.rpcClient.invoke('selectPaymentMethod', [paymentMethod]); - }); - - this.rpcServer.define('sendUnlockedNonce', function (paymentMethod) { - self.merchantFormManager.setNoncePayload(paymentMethod); - }); - - this.rpcServer.define('clearNonce', function () { - self.merchantFormManager.clearNoncePayload(); - }); - - this.rpcServer.define('closeDropInModal', function () { - self._hideModal(); - }); - - this.rpcServer.define('setInlineFrameHeight', function (height) { - self.frames.inline.element.style.height = height + 'px'; - }); - - this.bus.register('ready', function (message) { - if (message.source === self.frames.inline.element.contentWindow) { - self.frames.inline.rpcClient = new rpc.RPCClient(self.bus, message.source); - } else if (message.source === self.frames.modal.element.contentWindow) { - self.frames.modal.rpcClient = new rpc.RPCClient(self.bus, message.source); - } - }); -}; - -Client.prototype._createFrame = function (endpoint, name) { - return new FrameContainer(endpoint, name, this.braintreeBus); -}; - -Client.prototype._initializeModal = function () { - this.frames.modal.element.style.display = 'none'; - this.frames.modal.element.style.position = isMobile() ? 'absolute' : 'fixed'; - this.frames.modal.element.style.top = '0'; - this.frames.modal.element.style.left = '0'; - this.frames.modal.element.style.height = '100%'; - this.frames.modal.element.style.width = '100%'; -}; - -Client.prototype._lockMerchantWindowSize = function () { - setTimeout(function () { - htmlNode.style.overflow = 'hidden'; - bodyNode.style.overflow = 'hidden'; - bodyNode.style.height = '100%'; - - if (isMobile()) { - htmlNode.style.position = 'relative'; - htmlNode.style.height = window.innerHeight + 'px'; - } - }, 160); -}; - -Client.prototype._unlockMerchantWindowSize = function () { - var defaultStyles = this.merchantPageDefaultStyles; - - if (!defaultStyles) { return; } - - bodyNode.style.height = defaultStyles.body.height; - bodyNode.style.overflow = defaultStyles.body.overflow; - - htmlNode.style.overflow = defaultStyles.html.overflow; - - if (isMobile()) { - htmlNode.style.height = defaultStyles.html.height; - htmlNode.style.position = defaultStyles.html.position; - } - - delete this.merchantPageDefaultStyles; -}; - -Client.prototype._showModal = function () { - var self = this; - var el = this.frames.modal.element; - - this.merchantPageDefaultStyles = getMerchantPageDefaultStyles(); - - el.style.display = 'block'; - - this.frames.modal.rpcClient.invoke('open', [], function () { - setTimeout(function () { - self._lockMerchantWindowSize(); - el.contentWindow.focus(); - }, 200); - }); -}; - -Client.prototype._hideModal = function (done) { - this._unlockMerchantWindowSize(); - this.frames.modal.element.style.display = 'none'; - - if (done) { - done(); - } -}; - -Client.prototype._configurePayPal = function () { - this.paypalModalView = new PayPalModalView({ - channel: this.channel, - insertFrameFunction: this.paypalOptions.insertFrame, - paypalAssetsUrl: this.clientToken.paypal.assetsUrl, - isHermes: !!this.paypalOptions.singleUse && !!this.paypalOptions.amount && !!this.paypalOptions.currency - }); -}; - -Client.prototype._handleAltPayData = function (payload) { - this.merchantFormManager.setNoncePayload(payload); - this.frames.inline.rpcClient.invoke('receiveNewPaymentMethod', [payload]); - this.frames.modal.rpcClient.invoke('modalViewClose'); -}; - -Client.prototype._findClosest = function (node, tagName) { - tagName = tagName.toUpperCase(); - - do { - if (node.nodeName === tagName) { - return node; - } - } while (node = node.parentNode); - - throw 'Unable to find a valid ' + tagName; -}; - -Client.prototype.teardown = function (done) { - if (this.paypalModalView) { - this.paypalModalView.teardown(); - } - - this.braintreeBus.emit(constants.MODAL_FRAME_TEARDOWN_EVENT, bind(function () { - this.braintreeBus.emit(constants.INLINE_FRAME_TEARDOWN_EVENT, bind(function () { - this.destructor.teardown(bind(function (err) { - if (err) { return done(err); } - - this.braintreeBus.teardown(); - done(); - }, this)); - }, this)); - }, this)); -}; - -module.exports = Client; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"../shared/constants":240,"./api-proxy-server":235,"./frame-container":238,"./merchant-form-manager":239,"braintree-api":117,"braintree-bus":148,"braintree-paypal/src/external/views/app-view":183,"braintree-rpc":197,"braintree-utilities":215,"destructor":216}],237:[function(require,module,exports){ -'use strict'; - -var Client = require('./client'); -var VERSION = "1.9.0"; - -function create(options) { - var client = new Client(options); - client.initialize(); - - return client; -} - -module.exports = { - create: create, - VERSION: VERSION -}; - -},{"./client":236}],238:[function(require,module,exports){ -'use strict'; - -var BraintreeBus = require('braintree-bus'); -var constants = require('../shared/constants'); -var iFramer = require('iframer'); - -// TODO: move to shared and deduplicate from src/internal/util/dropin-util.js -var TRANSITION_END_EVENT_NAMES = { - transition: 'transitionend', - '-o-transition': 'otransitionEnd', - '-moz-transition': 'transitionend', - '-webkit-transition': 'webkitTransitionEnd' -}; - -function getTransitionEndEventName() { - var eventName; - var fakeEl = document.createElement('fakeelement'); - - for (eventName in TRANSITION_END_EVENT_NAMES) { - if (typeof fakeEl.style[eventName] !== 'undefined') { - return TRANSITION_END_EVENT_NAMES[eventName]; - } - } - return null; -} - -function listenForReady(el, braintreeBus) { - var transitionEndEvent = getTransitionEndEventName(); - - function handler(event) { - if (event.target === el && event.propertyName === 'height') { - braintreeBus.emit(BraintreeBus.events.ASYNC_DEPENDENCY_READY); - el.removeEventListener(transitionEndEvent, handler); - } - } - - if (transitionEndEvent) { - el.addEventListener(transitionEndEvent, handler); - } else { - setTimeout(function () { - braintreeBus.emit(BraintreeBus.events.ASYNC_DEPENDENCY_READY); - }, 500); - } -} - -function FrameContainer(endpoint, name, braintreeBus) { - var transition = 'height 210ms cubic-bezier(0.390, 0.575, 0.565, 1.000)'; - var element = iFramer({ - name: name, - width: '100%', - height: '68', - style: { - transition: transition, - WebkitTransition: transition, - MozTransition: transition, - msTransition: transition, - OTransition: transition, - border: '0', - zIndex: '9999' - } - }); - - this.element = element; - - // Delayed so that browsers won't cache iframe URLs. - setTimeout(function () { - element.src = endpoint + '#' + braintreeBus.channel; - }, 0); - - if (name === constants.INLINE_FRAME_NAME) { - listenForReady(element, braintreeBus); - } -} - -module.exports = FrameContainer; - -},{"../shared/constants":240,"braintree-bus":148,"iframer":220}],239:[function(require,module,exports){ -'use strict'; - -var utils = require('braintree-utilities'); -var FormNapper = require('form-napper'); - -function MerchantFormManager(options) { - this.formNapper = new FormNapper(options.form); - this.frames = options.frames; - this.onSubmit = options.onSubmit; - this.apiClient = options.apiClient; -} - -MerchantFormManager.prototype.initialize = function () { - if (this._isSubmitBased()) { - this._setElements(); - } - - this._setEvents(); - - return this; -}; - -MerchantFormManager.prototype.setNoncePayload = function (payload) { - this.noncePayload = payload; -}; - -MerchantFormManager.prototype.clearNoncePayload = function () { - this.noncePayload = null; -}; - -MerchantFormManager.prototype._isSubmitBased = function () { - return !this.onSubmit; -}; - -MerchantFormManager.prototype._isCallbackBased = function () { - return !!this.onSubmit; -}; - -MerchantFormManager.prototype._setElements = function () { - this.nonceInput = this.formNapper.inject('payment_method_nonce', ''); -}; - -MerchantFormManager.prototype._setEvents = function () { - this.formNapper.hijack(utils.bind(this._handleFormSubmit, this)); -}; - -MerchantFormManager.prototype._handleFormSubmit = function (event) { - if (this.noncePayload && this.noncePayload.nonce) { - this._handleNonceReply(event); - } else { - this.frames.inline.rpcClient.invoke('requestNonce', [], utils.bind(function (payload) { - this.setNoncePayload(payload); - this._handleNonceReply(event); - }, this)); - } -}; - -MerchantFormManager.prototype._handleNonceReply = function (event) { - if (this._isCallbackBased()) { - this.apiClient.sendAnalyticsEvents('dropin.web.end.callback', utils.bind(function () { - var payload = this.noncePayload; - - payload.originalEvent = event; - - this.onSubmit(payload); - - setTimeout(utils.bind(function () { - delete payload.originalEvent; - - this.frames.inline.rpcClient.invoke('clearLoadingState'); - this.frames.inline.rpcClient.invoke('receiveNewPaymentMethod', [payload]); - }, this), 200); - }, this)); - } else { - this._triggerFormSubmission(); - } -}; - -MerchantFormManager.prototype._triggerFormSubmission = function () { - this.nonceInput = this.formNapper.inject('payment_method_nonce', this.noncePayload.nonce); - - this.apiClient.sendAnalyticsEvents('dropin.web.end.auto-submit', utils.bind(function () { - this.formNapper.submit(); - }, this)); -}; - -MerchantFormManager.prototype.teardown = function () { - var form; - - if (this.nonceInput) { - form = this.formNapper.htmlForm; - form.removeChild(this.nonceInput); - } - - this.formNapper.detach(); -}; - -module.exports = MerchantFormManager; - -},{"braintree-utilities":215,"form-napper":219}],240:[function(require,module,exports){ -module.exports={ - "PAYPAL_INTEGRATION_NAME": "PayPal", - "INLINE_FRAME_NAME": "braintree-dropin-frame", - "MODAL_FRAME_NAME": "braintree-dropin-modal-frame", - "PAYMENT_METHOD_TYPES": ["CoinbaseAccount", "PayPalAccount", "CreditCard"], - "cssClassMap": { - "American Express": "american-express", - "Diners Club": "diners-club", - "DinersClub": "diners-club", - "Discover": "discover", - "JCB": "jcb", - "Maestro": "maestro", - "MasterCard": "master-card", - "Solo": "solo", - "Switch": "switch", - "UKMaestro": "maestro", - "UnionPay": "unionpay", - "Visa": "visa" - }, - "INLINE_FRAME_TEARDOWN_EVENT": "dropin:TEARDOWN_INLINE_FRAME", - "MODAL_FRAME_TEARDOWN_EVENT": "dropin:TEARDOWN_MODAL_FRAME" -} - -},{}],241:[function(require,module,exports){ -(function (global){ -'use strict'; -var ELEMENT_NODE = global.Node ? global.Node.ELEMENT_NODE : 1; - -function extractValues(node, results) { - results = results || {}; - - var child, i; - var children = node.children; - - for (i = 0; i < children.length; i++) { - child = children[i]; - - if (isBraintreeNode(child)) { - var dataAttr = child.getAttribute('data-braintree-name'); - - if (dataAttr === 'postal_code') { - results.billingAddress = { - postalCode: child.value - }; - } else { - results[dataAttr] = child.value; - } - - scrubAttributes(child); - } else if (child.children && child.children.length > 0) { - extractValues(child, results); - } - } - - return results; -} - -function scrubAttributes(node) { - try { - node.attributes.removeNamedItem('name'); - } catch (e) {} -} - -function scrubAllAttributes(node) { - extractValues(node); -} - -function isBraintreeNode(node) { - return node.nodeType === ELEMENT_NODE && node.attributes['data-braintree-name']; -} - -module.exports = { - extractValues: extractValues, - scrubAllAttributes: scrubAllAttributes, - scrubAttributes: scrubAttributes, - isBraintreeNode: isBraintreeNode -}; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],242:[function(require,module,exports){ -(function (global){ -'use strict'; - -var util = require('braintree-utilities'); -var fields = require('./fields'); -var Destructor = require('destructor'); -var Bus = require('braintree-bus'); -var PaymentMethodModel = require('./models/payment-method-model'); -var getNonceInput = require('./get-nonce-input'); -var ERROR_PAYLOAD = { - message: 'Unable to process payments at this time', - type: 'IMMEDIATE' -}; - -function Form(apiClient, configuration) { - var merchantConfiguration = configuration.merchantConfiguration; - var hasExistingInput = typeof merchantConfiguration.paymentMethodNonceInputField === 'object'; - - this.destructor = new Destructor(); - - this.apiClient = apiClient; - - this.isCreditCardForm = merchantConfiguration.useCreditCard === false ? false : true; - - this.htmlForm = document.getElementById(merchantConfiguration.id); - - this.paymentMethodNonceInput = getNonceInput(merchantConfiguration.paymentMethodNonceInputField); - this.htmlForm.appendChild(this.paymentMethodNonceInput); - this.destructor.registerFunctionForTeardown(util.bind(function () { - if (hasExistingInput) { - this.paymentMethodNonceInput.value = ''; - } else { - this.htmlForm.removeChild(this.paymentMethodNonceInput); - } - }, this)); - - this.model = new PaymentMethodModel(); - - this.bus = new Bus({ - merchantUrl: global.location.href, - channel: configuration.channel - }); - - this.setEvents(); - this.destructor.registerFunctionForTeardown(util.bind(function () { - this.bus.teardown(); - }, this)); -} - -Form.prototype.setEvents = function () { - this.onSubmitHandler = util.bind(this.handleSubmit, this); - this.onExternalNonceReceived = util.bind(this.onExternalNonceReceived, this); - this.clearExternalNonce = util.bind(this.clearExternalNonce, this); - - util.addEventListener(this.htmlForm, 'submit', this.onSubmitHandler); - this.destructor.registerFunctionForTeardown(util.bind(function () { - util.removeEventListener(this.htmlForm, 'submit', this.onSubmitHandler); - }, this)); - - this.bus.on(Bus.events.PAYMENT_METHOD_GENERATED, this.onExternalNonceReceived); - this.bus.on(Bus.events.PAYMENT_METHOD_CANCELLED, this.clearExternalNonce); -}; - -Form.prototype.handleSubmit = function (event) { - var type; - - if (event.preventDefault) { - event.preventDefault(); - } else { - event.returnValue = false; - } - - if (!this.isCreditCardForm) { - this.onNonceReceived(null, this.model.attributes); - return; - } - - type = this.model.get('type'); - - if (type && type !== 'CreditCard') { - fields.scrubAllAttributes(this.htmlForm); - this.onNonceReceived(null, this.model.attributes); - return; - } - - this.apiClient.tokenizeCard(fields.extractValues(this.htmlForm), util.bind(function (err, nonce, payload) { - if (err) { - this.onNonceReceived(ERROR_PAYLOAD, null); - } else { - this.model.set({ - nonce: nonce, - type: payload.type, - details: payload.details - }); - - this.onNonceReceived(null, this.model.attributes); - } - }, this)); -}; - -Form.prototype.writeNonceToDOM = function () { - this.paymentMethodNonceInput.value = this.model.get('nonce'); -}; - -Form.prototype.onExternalNonceReceived = function (payload) { - this.model.set(payload); - this.writeNonceToDOM(); -}; - -Form.prototype.clearExternalNonce = function () { - this.model.reset(); -}; - -Form.prototype.onNonceReceived = function (err) { - var form = this.htmlForm; - - if (err) { - this.bus.emit(Bus.events.ERROR, ERROR_PAYLOAD); - return; - } - - util.removeEventListener(form, 'submit', this.onSubmitHandler); - - this.writeNonceToDOM(); - - if (form.submit && (typeof form.submit === 'function' || form.submit.call)) { - form.submit(); - } else { - setTimeout(function () { - form.querySelector('[type="submit"]').click(); - }, 1); - } -}; - -Form.prototype.teardown = function () { - this.destructor.teardown(); -}; - -module.exports = Form; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./fields":241,"./get-nonce-input":243,"./models/payment-method-model":244,"braintree-bus":247,"braintree-utilities":259,"destructor":260}],243:[function(require,module,exports){ -'use strict'; - -module.exports = function getNonceInput(paymentMethodNonceInputField) { - var nonceInputName; - - if (typeof paymentMethodNonceInputField === 'object') { - return paymentMethodNonceInputField; - } - - nonceInputName = 'payment_method_nonce'; - - if (typeof paymentMethodNonceInputField === 'string') { - nonceInputName = paymentMethodNonceInputField; - } - - var nonceInput = document.createElement('input'); - nonceInput.name = nonceInputName; - nonceInput.type = 'hidden'; - - return nonceInput; -}; - -},{}],244:[function(require,module,exports){ -'use strict'; - -function PaymentMethodModel() { - this.reset(); -} - -PaymentMethodModel.prototype.get = function (key) { - return this.attributes[key]; -} - -PaymentMethodModel.prototype.set = function (payload) { - this.attributes = payload || {}; -}; - -PaymentMethodModel.prototype.reset = function () { - this.attributes = {}; -} - -module.exports = PaymentMethodModel; - -},{}],245:[function(require,module,exports){ -'use strict'; - -module.exports = function validateAnnotations(htmlForm) { - var inputs = htmlForm.getElementsByTagName('*'); - var valid = {}; - - for (var i = 0; i < inputs.length; i++) { - var field = inputs[i].getAttribute('data-braintree-name'); - valid[field] = true; - } - - if (!valid.number) { - throw new Error('Unable to find an input with data-braintree-name="number" in your form. Please add one.'); - } - - if (valid.expiration_date) { - if (valid.expiration_month || valid.expiration_year) { - throw new Error('You have inputs with data-braintree-name="expiration_date" AND data-braintree-name="expiration_(year|month)". Please use either "expiration_date" or "expiration_year" and "expiration_month".'); - } - } else { - if (!valid.expiration_month && !valid.expiration_year) { - throw new Error('Unable to find an input with data-braintree-name="expiration_date" in your form. Please add one.'); - } - - if (!valid.expiration_month) { - throw new Error('Unable to find an input with data-braintree-name="expiration_month" in your form. Please add one.'); - } - - if (!valid.expiration_year) { - throw new Error('Unable to find an input with data-braintree-name="expiration_year" in your form. Please add one.'); - } - } -}; - -},{}],246:[function(require,module,exports){ -'use strict'; - -var Form = require('./lib/form'); -var validateAnnotations = require('./lib/validate-annotations'); - -function setup(apiClient, configuration) { - var merchantConfiguration = configuration.merchantConfiguration || {}; - var htmlForm = document.getElementById(merchantConfiguration.id); - var isCreditCardForm = merchantConfiguration.useCreditCard === false ? false : true; - - if (!htmlForm) { - throw new Error('Unable to find form with id: "' + merchantConfiguration.id + '"'); - } - - if (isCreditCardForm) { - validateAnnotations(htmlForm); - } - - return new Form(apiClient, configuration); -} - -module.exports = {setup: setup}; - -},{"./lib/form":242,"./lib/validate-annotations":245}],247:[function(require,module,exports){ -arguments[4][52][0].apply(exports,arguments) -},{"./lib/check-origin":248,"./lib/events":249,"dup":52,"framebus":250}],248:[function(require,module,exports){ -arguments[4][53][0].apply(exports,arguments) -},{"dup":53}],249:[function(require,module,exports){ -arguments[4][54][0].apply(exports,arguments) -},{"dup":54}],250:[function(require,module,exports){ -arguments[4][55][0].apply(exports,arguments) -},{"dup":55}],251:[function(require,module,exports){ -arguments[4][35][0].apply(exports,arguments) -},{"dup":35}],252:[function(require,module,exports){ -arguments[4][36][0].apply(exports,arguments) -},{"dup":36}],253:[function(require,module,exports){ -arguments[4][22][0].apply(exports,arguments) -},{"dup":22}],254:[function(require,module,exports){ -arguments[4][38][0].apply(exports,arguments) -},{"dup":38}],255:[function(require,module,exports){ -arguments[4][39][0].apply(exports,arguments) -},{"dup":39}],256:[function(require,module,exports){ -arguments[4][40][0].apply(exports,arguments) -},{"dup":40}],257:[function(require,module,exports){ -arguments[4][41][0].apply(exports,arguments) -},{"./array":251,"dup":41}],258:[function(require,module,exports){ -arguments[4][42][0].apply(exports,arguments) -},{"dup":42}],259:[function(require,module,exports){ -arguments[4][43][0].apply(exports,arguments) -},{"./lib/array":251,"./lib/base64":252,"./lib/dom":253,"./lib/events":254,"./lib/fn":255,"./lib/string":256,"./lib/url":257,"./lib/uuid":258,"dup":43}],260:[function(require,module,exports){ -arguments[4][80][0].apply(exports,arguments) -},{"batch-execute-functions":261,"braintree-utilities/lib/fn":262,"dup":80}],261:[function(require,module,exports){ -arguments[4][81][0].apply(exports,arguments) -},{"dup":81}],262:[function(require,module,exports){ -arguments[4][39][0].apply(exports,arguments) -},{"dup":39}],263:[function(require,module,exports){ -arguments[4][2][0].apply(exports,arguments) -},{"./coinbase-account":264,"./constants":265,"./credit-card":266,"./europe-bank-account":267,"./normalize-api-fields":269,"./parse-client-token":270,"./paypal-account":271,"./request/choose-driver":274,"./sepa-mandate":279,"./should-enable-cors":280,"./util":281,"braintree-3ds":290,"braintree-utilities":304,"dup":2}],264:[function(require,module,exports){ -arguments[4][3][0].apply(exports,arguments) -},{"dup":3}],265:[function(require,module,exports){ -arguments[4][4][0].apply(exports,arguments) -},{"dup":4}],266:[function(require,module,exports){ -arguments[4][5][0].apply(exports,arguments) -},{"dup":5}],267:[function(require,module,exports){ -arguments[4][6][0].apply(exports,arguments) -},{"dup":6}],268:[function(require,module,exports){ -arguments[4][7][0].apply(exports,arguments) -},{"./constants":265,"./parse-client-token":270,"./request/choose-driver":274,"./should-enable-cors":280,"./util":281,"dup":7}],269:[function(require,module,exports){ -arguments[4][8][0].apply(exports,arguments) -},{"dup":8}],270:[function(require,module,exports){ -arguments[4][9][0].apply(exports,arguments) -},{"./polyfill":272,"braintree-utilities":304,"dup":9}],271:[function(require,module,exports){ -arguments[4][10][0].apply(exports,arguments) -},{"dup":10}],272:[function(require,module,exports){ -arguments[4][11][0].apply(exports,arguments) -},{"dup":11}],273:[function(require,module,exports){ -arguments[4][12][0].apply(exports,arguments) -},{"../constants":265,"../util":281,"./parse-body":277,"./prep-body":278,"dup":12}],274:[function(require,module,exports){ -arguments[4][13][0].apply(exports,arguments) -},{"../util":281,"./ajax-driver":273,"./jsonp-driver":275,"dup":13}],275:[function(require,module,exports){ -arguments[4][14][0].apply(exports,arguments) -},{"../constants":265,"./jsonp":276,"dup":14}],276:[function(require,module,exports){ -arguments[4][15][0].apply(exports,arguments) -},{"../util":281,"dup":15}],277:[function(require,module,exports){ -arguments[4][16][0].apply(exports,arguments) -},{"dup":16}],278:[function(require,module,exports){ -arguments[4][17][0].apply(exports,arguments) -},{"dup":17,"lodash.isstring":312}],279:[function(require,module,exports){ -arguments[4][18][0].apply(exports,arguments) -},{"dup":18}],280:[function(require,module,exports){ -arguments[4][19][0].apply(exports,arguments) -},{"dup":19}],281:[function(require,module,exports){ -arguments[4][20][0].apply(exports,arguments) -},{"dup":20,"lodash.isempty":305,"lodash.isobject":311}],282:[function(require,module,exports){ -arguments[4][21][0].apply(exports,arguments) -},{"./lib/client":263,"./lib/get-configuration":268,"./lib/parse-client-token":270,"./lib/util":281,"dup":21}],283:[function(require,module,exports){ -arguments[4][22][0].apply(exports,arguments) -},{"dup":22}],284:[function(require,module,exports){ -arguments[4][23][0].apply(exports,arguments) -},{"dup":23}],285:[function(require,module,exports){ -arguments[4][24][0].apply(exports,arguments) -},{"dup":24}],286:[function(require,module,exports){ -arguments[4][25][0].apply(exports,arguments) -},{"dup":25}],287:[function(require,module,exports){ -arguments[4][26][0].apply(exports,arguments) -},{"./lib/dom":283,"./lib/events":284,"./lib/fn":285,"./lib/url":286,"dup":26}],288:[function(require,module,exports){ -arguments[4][27][0].apply(exports,arguments) -},{"../shared/receiver":295,"braintree-utilities":287,"dup":27}],289:[function(require,module,exports){ -arguments[4][28][0].apply(exports,arguments) -},{"./authorization_service":288,"./loader":291,"braintree-utilities":287,"dup":28}],290:[function(require,module,exports){ -arguments[4][29][0].apply(exports,arguments) -},{"./client":289,"dup":29}],291:[function(require,module,exports){ -arguments[4][30][0].apply(exports,arguments) -},{"./loader_display":292,"./loader_message":293,"./loader_spinner":294,"dup":30}],292:[function(require,module,exports){ -arguments[4][31][0].apply(exports,arguments) -},{"dup":31}],293:[function(require,module,exports){ -arguments[4][32][0].apply(exports,arguments) -},{"dup":32}],294:[function(require,module,exports){ -arguments[4][33][0].apply(exports,arguments) -},{"dup":33}],295:[function(require,module,exports){ -arguments[4][34][0].apply(exports,arguments) -},{"braintree-utilities":287,"dup":34}],296:[function(require,module,exports){ -arguments[4][35][0].apply(exports,arguments) -},{"dup":35}],297:[function(require,module,exports){ -arguments[4][36][0].apply(exports,arguments) -},{"dup":36}],298:[function(require,module,exports){ -arguments[4][22][0].apply(exports,arguments) -},{"dup":22}],299:[function(require,module,exports){ -arguments[4][38][0].apply(exports,arguments) -},{"dup":38}],300:[function(require,module,exports){ -arguments[4][39][0].apply(exports,arguments) -},{"dup":39}],301:[function(require,module,exports){ -arguments[4][40][0].apply(exports,arguments) -},{"dup":40}],302:[function(require,module,exports){ -arguments[4][41][0].apply(exports,arguments) -},{"./array":296,"dup":41}],303:[function(require,module,exports){ -arguments[4][42][0].apply(exports,arguments) -},{"dup":42}],304:[function(require,module,exports){ -arguments[4][43][0].apply(exports,arguments) -},{"./lib/array":296,"./lib/base64":297,"./lib/dom":298,"./lib/events":299,"./lib/fn":300,"./lib/string":301,"./lib/url":302,"./lib/uuid":303,"dup":43}],305:[function(require,module,exports){ -arguments[4][44][0].apply(exports,arguments) -},{"dup":44,"lodash.isarguments":306,"lodash.isarray":307,"lodash.isfunction":308,"lodash.isstring":312,"lodash.keys":309}],306:[function(require,module,exports){ -arguments[4][45][0].apply(exports,arguments) -},{"dup":45}],307:[function(require,module,exports){ -arguments[4][46][0].apply(exports,arguments) -},{"dup":46}],308:[function(require,module,exports){ -arguments[4][47][0].apply(exports,arguments) -},{"dup":47}],309:[function(require,module,exports){ -arguments[4][48][0].apply(exports,arguments) -},{"dup":48,"lodash._getnative":310,"lodash.isarguments":306,"lodash.isarray":307}],310:[function(require,module,exports){ -arguments[4][49][0].apply(exports,arguments) -},{"dup":49}],311:[function(require,module,exports){ -arguments[4][50][0].apply(exports,arguments) -},{"dup":50}],312:[function(require,module,exports){ -arguments[4][51][0].apply(exports,arguments) -},{"dup":51}],313:[function(require,module,exports){ -arguments[4][52][0].apply(exports,arguments) -},{"./lib/check-origin":314,"./lib/events":315,"dup":52,"framebus":316}],314:[function(require,module,exports){ -arguments[4][53][0].apply(exports,arguments) -},{"dup":53}],315:[function(require,module,exports){ -arguments[4][54][0].apply(exports,arguments) -},{"dup":54}],316:[function(require,module,exports){ -arguments[4][55][0].apply(exports,arguments) -},{"dup":55}],317:[function(require,module,exports){ -arguments[4][35][0].apply(exports,arguments) -},{"dup":35}],318:[function(require,module,exports){ -arguments[4][36][0].apply(exports,arguments) -},{"dup":36}],319:[function(require,module,exports){ -arguments[4][22][0].apply(exports,arguments) -},{"dup":22}],320:[function(require,module,exports){ -arguments[4][38][0].apply(exports,arguments) -},{"dup":38}],321:[function(require,module,exports){ -arguments[4][39][0].apply(exports,arguments) -},{"dup":39}],322:[function(require,module,exports){ -arguments[4][40][0].apply(exports,arguments) -},{"dup":40}],323:[function(require,module,exports){ -arguments[4][41][0].apply(exports,arguments) -},{"./array":317,"dup":41}],324:[function(require,module,exports){ -arguments[4][42][0].apply(exports,arguments) -},{"dup":42}],325:[function(require,module,exports){ -arguments[4][43][0].apply(exports,arguments) -},{"./lib/array":317,"./lib/base64":318,"./lib/dom":319,"./lib/events":320,"./lib/fn":321,"./lib/string":322,"./lib/url":323,"./lib/uuid":324,"dup":43}],326:[function(require,module,exports){ -arguments[4][80][0].apply(exports,arguments) -},{"batch-execute-functions":327,"braintree-utilities/lib/fn":328,"dup":80}],327:[function(require,module,exports){ -arguments[4][81][0].apply(exports,arguments) -},{"dup":81}],328:[function(require,module,exports){ -arguments[4][39][0].apply(exports,arguments) -},{"dup":39}],329:[function(require,module,exports){ -arguments[4][83][0].apply(exports,arguments) -},{"./lib/default-attributes":330,"dup":83,"lodash.assign":331,"lodash.isstring":342,"setattributes":343}],330:[function(require,module,exports){ -arguments[4][84][0].apply(exports,arguments) -},{"dup":84}],331:[function(require,module,exports){ -arguments[4][85][0].apply(exports,arguments) -},{"dup":85,"lodash._baseassign":332,"lodash._createassigner":334,"lodash.keys":338}],332:[function(require,module,exports){ -arguments[4][86][0].apply(exports,arguments) -},{"dup":86,"lodash._basecopy":333,"lodash.keys":338}],333:[function(require,module,exports){ -arguments[4][87][0].apply(exports,arguments) -},{"dup":87}],334:[function(require,module,exports){ -arguments[4][88][0].apply(exports,arguments) -},{"dup":88,"lodash._bindcallback":335,"lodash._isiterateecall":336,"lodash.restparam":337}],335:[function(require,module,exports){ -arguments[4][89][0].apply(exports,arguments) -},{"dup":89}],336:[function(require,module,exports){ -arguments[4][90][0].apply(exports,arguments) -},{"dup":90}],337:[function(require,module,exports){ -arguments[4][91][0].apply(exports,arguments) -},{"dup":91}],338:[function(require,module,exports){ -arguments[4][48][0].apply(exports,arguments) -},{"dup":48,"lodash._getnative":339,"lodash.isarguments":340,"lodash.isarray":341}],339:[function(require,module,exports){ -arguments[4][49][0].apply(exports,arguments) -},{"dup":49}],340:[function(require,module,exports){ -arguments[4][45][0].apply(exports,arguments) -},{"dup":45}],341:[function(require,module,exports){ -arguments[4][46][0].apply(exports,arguments) -},{"dup":46}],342:[function(require,module,exports){ -arguments[4][51][0].apply(exports,arguments) -},{"dup":51}],343:[function(require,module,exports){ -arguments[4][97][0].apply(exports,arguments) -},{"dup":97}],344:[function(require,module,exports){ -(function (global){ -'use strict'; - -var braintreeUtil = require('braintree-utilities'); -var Destructor = require('destructor'); -var Bus = require('braintree-bus'); -var AppView = require('./views/app-view'); -var LoggedInView = require('./views/logged-in-view'); -var LoggedOutView = require('./views/logged-out-view'); -var OverlayView = require('./views/overlay-view'); -var MerchantPageView = require('./views/merchant-page-view'); -var PaymentMethodNonceInputFieldView = require('./views/payment-method-nonce-input-field-view'); -var BridgeIframeView = require('./views/bridge-iframe-view'); -var browser = require('../shared/util/browser'); -var constants = require('../shared/constants'); -var util = require('../shared/util/util'); - -function Client(clientToken, options, channel) { - options = options || {}; - - this._clientToken = clientToken; - this._clientOptions = options; - - this._clientToken.correlationId = util.generateUid(); - - this.destructor = new Destructor(); - - this.channel = channel; - this.bus = new Bus({ - merchantUrl: global.location.href, - channel: this.channel - }); - - this.container = braintreeUtil.normalizeElement(options.container); - this.paymentMethodNonceInputField = options.paymentMethodNonceInputField; - - this.insertFrameFunction = options.insertFrame; - this.onSuccess = options.onSuccess; - this.onCancelled = options.onCancelled; - this.loggedInView = null; - this.loggedOutView = null; - this.appView = null; - this.merchantPageView = null; - this.paymentMethodNonceInputFieldView = null; - this.overlayView = null; - this.bridgeIframeView = null; - this.insertUI = options.headless !== true; -} - -Client.prototype.initialize = function () { - var clickLoginHandler = braintreeUtil.bind(this._handleClickLogin, this); - - this._createViews(); - - this.bus.on( - constants.events.GET_CLIENT_TOKEN, - braintreeUtil.bind(this._handleGetClientToken, this) - ); - - this.bus.on( - constants.events.GET_CLIENT_OPTIONS, - braintreeUtil.bind(this._handleGetClientOptions, this) - ); - - if (this.insertUI) { - this.bus.on( - Bus.events.PAYMENT_METHOD_GENERATED, - braintreeUtil.bind(this._handlePaymentMethodGenerated, this) - ); - } - - braintreeUtil.addEventListener(document.body, 'click', clickLoginHandler); - - this.destructor.registerFunctionForTeardown(function () { - braintreeUtil.removeEventListener(document.body, 'click', clickLoginHandler); - }); -}; - -Client.prototype._createViews = function () { - var i; - var views = []; - - if (browser.isBridgeIframeRequired()) { - this.bridgeIframeView = new BridgeIframeView({ - container: this.container, - paypalAssetsUrl: this._clientToken.paypal.assetsUrl, - channel: this.channel - }); - views.push(this.bridgeIframeView); - } - - this.appView = new AppView({ - insertFrameFunction: this.insertFrameFunction, - paypalAssetsUrl: this._clientToken.paypal.assetsUrl, - isHermes: util.isHermesConfiguration(this._clientOptions), - headless: this._clientOptions.headless, - channel: this.channel - }); - views.push(this.appView); - - if (this.insertUI) { - this.paymentMethodNonceInputFieldView = new PaymentMethodNonceInputFieldView({ - container: this.container, - el: this.paymentMethodNonceInputField, - channel: this.channel - }); - views.push(this.paymentMethodNonceInputFieldView); - - this.merchantPageView = new MerchantPageView({ - channel: this.channel - }); - views.push(this.merchantPageView); - - this.loggedInView = new LoggedInView({ - paypalAssetsUrl: this._clientToken.paypal.assetsUrl, - container: this.container, - channel: this.channel - }); - views.push(this.loggedInView); - - this.loggedOutView = new LoggedOutView({ - paypalAssetsUrl: this._clientToken.paypal.assetsUrl, - container: this.container, - isHermes: util.isHermesConfiguration(this._clientOptions), - locale: this._clientOptions.locale, - channel: this.channel - }); - views.push(this.loggedOutView); - - if (browser.isPopupSupported() && browser.isOverlaySupported()) { - this.overlayView = new OverlayView({ - paypalAssetsUrl: this._clientToken.paypal.assetsUrl, - onFocus: braintreeUtil.bind(function () { this.bus.emit(constants.events.FOCUS_APP); }, this), - onClose: braintreeUtil.bind(function () { this.bus.emit(constants.events.CLOSE_APP); }, this), - channel: this.channel - }); - views.push(this.overlayView); - } - } - - this.destructor.registerFunctionForTeardown(function () { - for (i = 0; i < views.length; i++) { - views[i].teardown(); - } - }); -}; - -Client.prototype._handleClickLogin = function (event) { - var target = event.target || event.srcElement; - - while (true) { // eslint-disable-line no-constant-condition - if (target == null) { return; } - if (target === event.currentTarget) { return; } - if (this._isButton(target)) { break; } - - target = target.parentNode; - } - - util.preventDefault(event); - - this.launch(); -}; - -Client.prototype.launch = function () { - this.appView.open(); -}; - -Client.prototype._isButton = function (node) { - var isPayPalButton = node.id === 'braintree-paypal-button'; - var isHermesButton = util.isHermesConfiguration(this._clientOptions) && - node.className.match(/paypal-button(?!-widget)/); - - return isPayPalButton || isHermesButton; -}; - -Client.prototype._handlePaymentMethodGenerated = function (bundle) { - if (bundle.type === constants.NONCE_TYPE && braintreeUtil.isFunction(this.onSuccess)) { - this.onSuccess(bundle); - } -}; - -Client.prototype._clientTokenData = function () { - return { - analyticsUrl: this._clientToken.analytics ? - this._clientToken.analytics.url : null, - authorizationFingerprint: this._clientToken.authorizationFingerprint, - clientApiUrl: this._clientToken.clientApiUrl, - displayName: this._clientOptions.displayName || this._clientToken.paypal.displayName, - paypalAssetsUrl: this._clientToken.paypal.assetsUrl, - paypalClientId: this._clientToken.paypal.clientId, - paypalPrivacyUrl: this._clientToken.paypal.privacyUrl, - paypalUserAgreementUrl: this._clientToken.paypal.userAgreementUrl, - billingAgreementEnabled: this._clientToken.paypal.billingAgreementsEnabled, - unvettedMerchant: this._clientToken.paypal.unvettedMerchant, - payeeEmail: this._clientToken.paypal.payeeEmail, - correlationId: this._clientToken.correlationId, - offline: this._clientOptions.offline || this._clientToken.paypal.environmentNoNetwork, - sdkVersion: this._clientToken.sdkVersion, - merchantAppId: this._clientToken.merchantAppId - }; -}; - -Client.prototype._handleGetClientToken = function (callback) { - callback(this._clientTokenData()); -}; - -Client.prototype._clientOptionsData = function () { - return { - locale: this._clientOptions.locale || 'en_us', - onetime: this._clientOptions.singleUse || false, - integration: this._clientOptions.integration || 'paypal', - enableShippingAddress: this._clientOptions.enableShippingAddress || false, - enableBillingAddress: this._clientOptions.enableBillingAddress || false, - enableHermes: util.isHermesConfiguration(this._clientOptions), - amount: this._clientOptions.amount || null, - currency: this._clientOptions.currency || null, - shippingAddressOverride: this._clientOptions.shippingAddressOverride || null, - enableCORS: this._clientOptions.enableCORS - }; -}; - -Client.prototype._handleGetClientOptions = function (callback) { - callback(this._clientOptionsData()); -}; - -Client.prototype.teardown = function () { - this.destructor.teardown(braintreeUtil.bind(function () { - this.bus.teardown(); - }, this)); -}; - -module.exports = Client; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"../shared/constants":355,"../shared/util/browser":362,"../shared/util/util":364,"./views/app-view":346,"./views/bridge-iframe-view":347,"./views/logged-in-view":348,"./views/logged-out-view":349,"./views/merchant-page-view":350,"./views/overlay-view":352,"./views/payment-method-nonce-input-field-view":353,"braintree-bus":313,"braintree-utilities":325,"destructor":326}],345:[function(require,module,exports){ -'use strict'; - -var Client = require('./client'); -var browser = require('../shared/util/browser'); -var constants = require('../shared/constants'); -var getLocale = require('../shared/get-locale'); -var isHermesConfiguration = require('../shared/util/util').isHermesConfiguration; -var isOneTimeHermesConfiguration = require('../shared/util/util').isOneTimeHermesConfiguration; -var VERSION = "1.6.0"; -var braintreeUtil = require('braintree-utilities'); -var braintreeApi = require('braintree-api'); - -function create(clientToken, options, channel) { - var client, onUnsupported; - options = options || {}; - onUnsupported = options.onUnsupported; - - if (typeof onUnsupported !== 'function') { - onUnsupported = function (error) { - try { - console.log(error); // eslint-disable-line no-console - } catch (e) {} // eslint-disable-line - }; - } - - if (!clientToken) { - onUnsupported(new Error('Parameter "clientToken" cannot be null')); - return null; - } - - clientToken = braintreeApi.parseClientToken(clientToken); - - if (!clientToken.paypalEnabled) { - onUnsupported(new Error('PayPal is not enabled')); - return null; - } - - if (!browser.detectedPostMessage()) { - onUnsupported(new Error('unsupported browser detected')); - return null; - } - - if (!options.container) { - onUnsupported(new Error('Please supply a container for the PayPal button to be appended to')); - return null; - } - - if (!isBrowserSecure(clientToken, options)) { - onUnsupported(new Error('unsupported protocol detected')); - return null; - } - - if (isMisconfiguredUnvettedMerchant(clientToken, options)) { - onUnsupported(new Error('Unvetted merchant client token does not include a payee email')); - return null; - } - - if (isHermesConfiguration(options)) { - if (!isHermesSupportedCountry(options.locale)) { - onUnsupported(new Error('This PayPal integration does not support this country')); - return null; - } - } - - if (isOneTimeHermesConfiguration(options)) { - if (!isHermesSupportedCurrency(options.currency)) { - onUnsupported(new Error('This PayPal integration does not support this currency')); - return null; - } - - if (!isValidAmount(options.amount)) { - onUnsupported(new Error('Amount must be a number')); - return null; - } - } - - client = new Client(clientToken, options, channel); - client.initialize(); - - return client; -} - -function isSupportedOption(option, supported) { - var i; - var supportedLength = supported.length; - var isSupported = false; - - for (i = 0; i < supportedLength; i++) { - if (option.toLowerCase() === supported[i].toLowerCase()) { - isSupported = true; - } - } - - return isSupported; -} - -function isHermesSupportedCurrency(currency) { - return isSupportedOption(currency, constants.HERMES_SUPPORTED_CURRENCIES); -} - -function isHermesSupportedCountry(locale) { - return isSupportedOption(getLocale(locale).split('_')[1], constants.HERMES_SUPPORTED_COUNTRIES); -} - -function isValidAmount(amount) { - amount = parseFloat(amount); - return typeof amount === 'number' && !isNaN(amount) && amount >= 0; -} - -function isMisconfiguredUnvettedMerchant(clientToken, options) { - return clientToken.paypal.unvettedMerchant && (!isHermesConfiguration(options) || !clientToken.paypal.payeeEmail); -} - -function isBrowserSecure(clientToken, options) { - if (clientToken.paypal.allowHttp) { return true; } - if (browser.isPopupSupported()) { return true; } - if ('merchantHttps' in options) { return options.merchantHttps; } - - return braintreeUtil.isBrowserHttps(); -} - -module.exports = { - create: create, - VERSION: VERSION -}; - -},{"../shared/constants":355,"../shared/get-locale":357,"../shared/util/browser":362,"../shared/util/util":364,"./client":344,"braintree-api":282,"braintree-utilities":325}],346:[function(require,module,exports){ -arguments[4][183][0].apply(exports,arguments) -},{"../../shared/constants":355,"../../shared/util/browser":362,"./modal-view":351,"./popup-view":354,"braintree-bus":313,"braintree-utilities":325,"destructor":326,"dup":183}],347:[function(require,module,exports){ -'use strict'; - -var constants = require('../../shared/constants'); -var iframer = require('iframer'); - -function BridgeIframeView(options) { - this.options = options || {}; - - this.el = iframer({ - src: this._buildUrl(), - name: constants.BRIDGE_FRAME_NAME, - height: 1, - width: 1, - style: { - position: 'static', - top: 0, - left: 0, - bottom: 0, - padding: 0, - margin: 0, - border: 0, - outline: 'none', - background: 'transparent' - } - }); - - this.options.container.appendChild(this.el); -} - -BridgeIframeView.prototype._buildUrl = function () { - var url = this.options.paypalAssetsUrl; - url += '/pwpp/'; - url += constants.VERSION; - url += '/html/bridge-frame.html'; - url += '#' + this.options.channel; - - return url; -}; - -BridgeIframeView.prototype.teardown = function () { - this.options.container.removeChild(this.el); -}; - -module.exports = BridgeIframeView; - -},{"../../shared/constants":355,"iframer":329}],348:[function(require,module,exports){ -(function (global){ -'use strict'; - -var braintreeUtil = require('braintree-utilities'); -var Destructor = require('destructor'); -var Bus = require('braintree-bus'); -var util = require('../../shared/util/util'); -var dom = require('../../shared/util/dom'); -var constants = require('../../shared/constants'); - -function LoggedInView(options) { - this.options = options || {}; - this.wrapper = this.options.container || document.body; - - this.destructor = new Destructor(); - - this.bus = new Bus({ - merchantUrl: global.location.href, - channel: options.channel - }); - - this._initialize(); -} - -LoggedInView.prototype._initialize = function () { - var clickLogoutHandler = braintreeUtil.bind(this._handleClickLogout, this); - - this._createViewContainer(); - this._createPayPalName(); - this._createEmailNode(); - this._createLogoutNode(); - - braintreeUtil.addEventListener(this.logoutNode, 'click', clickLogoutHandler); - - this.destructor.registerFunctionForTeardown(braintreeUtil.bind(function () { - braintreeUtil.removeEventListener(this.logoutNode, 'click', clickLogoutHandler); - }, this)); - - this.bus.on(Bus.events.PAYMENT_METHOD_GENERATED, braintreeUtil.bind(this._handlePaymentMethodGenerated, this)); - this.bus.on(Bus.events.PAYMENT_METHOD_CANCELLED, braintreeUtil.bind(this._handlePaymentMethodCancelled, this)); -}; - -LoggedInView.prototype._createViewContainer = function () { - var cssStyles = [ - 'display: none', - 'max-width: 500px', - 'overflow: hidden', - 'padding: 16px', - 'background-image: url(' + this.options.paypalAssetsUrl + '/pwpp/' + constants.VERSION + '/images/paypal-small.png)', - 'background-image: url(' + this.options.paypalAssetsUrl + '/pwpp/' + constants.VERSION + '/images/paypal-small.svg), none', - 'background-position: 20px 50%', - 'background-repeat: no-repeat', - 'background-size: 13px 15px', - 'border-top: 1px solid #d1d4d6', - 'border-bottom: 1px solid #d1d4d6' - ].join(';'); - - this.container = document.createElement('div'); - this.container.id = 'braintree-paypal-loggedin'; - this.container.style.cssText = cssStyles; - - this.wrapper.appendChild(this.container); -}; - -LoggedInView.prototype._createPayPalName = function () { - var cssStyles = [ - 'color: #283036', - 'font-size: 13px', - 'font-weight: 800', - 'font-family: "Helvetica Neue", Helvetica, Arial, sans-serif', - 'margin-left: 36px', - '-webkit-font-smoothing: antialiased', - '-moz-font-smoothing: antialiased', - '-ms-font-smoothing: antialiased', - 'font-smoothing: antialiased' - ].join(';'); - - this.payPalName = document.createElement('span'); - this.payPalName.id = 'bt-pp-name'; - this.payPalName.innerHTML = 'PayPal'; - this.payPalName.style.cssText = cssStyles; - - return this.container.appendChild(this.payPalName); -}; - -LoggedInView.prototype._createEmailNode = function () { - var cssStyles = [ - 'color: #6e787f', - 'font-size: 13px', - 'font-family: "Helvetica Neue", Helvetica, Arial, sans-serif', - 'margin-left: 5px', - '-webkit-font-smoothing: antialiased', - '-moz-font-smoothing: antialiased', - '-ms-font-smoothing: antialiased', - 'font-smoothing: antialiased' - ].join(';'); - - this.emailNode = document.createElement('span'); - this.emailNode.id = 'bt-pp-email'; - this.emailNode.style.cssText = cssStyles; - - this.container.appendChild(this.emailNode); -}; - -LoggedInView.prototype._createLogoutNode = function () { - var cssStyles = [ - 'color: #3d95ce', - 'font-size: 11px', - 'font-family: "Helvetica Neue", Helvetica, Arial, sans-serif', - 'line-height: 20px', - 'margin: 0 0 0 25px', - 'padding: 0', - 'background-color: transparent', - 'border: 0', - 'cursor: pointer', - 'text-decoration: underline', - 'float: right', - '-webkit-font-smoothing: antialiased', - '-moz-font-smoothing: antialiased', - '-ms-font-smoothing: antialiased', - 'font-smoothing: antialiased' - ].join(';'); - - this.logoutNode = document.createElement('button'); - this.logoutNode.id = 'bt-pp-cancel'; - this.logoutNode.innerHTML = 'Cancel'; - this.logoutNode.style.cssText = cssStyles; - - this.container.appendChild(this.logoutNode); -}; - -LoggedInView.prototype.show = function (email) { - this.container.style.display = 'block'; - dom.setTextContent(this.emailNode, email); -}; - -LoggedInView.prototype.hide = function () { - this.container.style.display = 'none'; -}; - -LoggedInView.prototype._handleClickLogout = function (event) { - util.preventDefault(event); - - this.bus.emit(Bus.events.PAYMENT_METHOD_CANCELLED, {source: constants.PAYPAL_INTEGRATION_NAME}); -}; - -LoggedInView.prototype._handlePaymentMethodGenerated = function (bundle) { - var email; - - if (bundle.type === constants.NONCE_TYPE) { - email = bundle && bundle.details && bundle.details.email ? bundle.details.email : ''; - this.show(email); - } -}; - -LoggedInView.prototype._handlePaymentMethodCancelled = function (event) { - if (event.source === constants.PAYPAL_INTEGRATION_NAME) { - this.hide(); - } -}; - -LoggedInView.prototype.teardown = function () { - this.wrapper.removeChild(this.container); - this.destructor.teardown(); - this.bus.teardown(); -}; - -module.exports = LoggedInView; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"../../shared/constants":355,"../../shared/util/dom":363,"../../shared/util/util":364,"braintree-bus":313,"braintree-utilities":325,"destructor":326}],349:[function(require,module,exports){ -(function (global){ -'use strict'; - -var braintreeUtil = require('braintree-utilities'); -var Bus = require('braintree-bus'); -var constants = require('../../shared/constants'); -var getLocale = require('../../shared/get-locale'); - -function LoggedOutView(options) { - this.options = options; - this.wrapper = this.options.container || document.body; - - this.bus = new Bus({ - merchantUrl: global.location.href, - channel: options.channel - }); - - this._initialize(); -} - -LoggedOutView.prototype._initialize = function () { - this.createViewContainer(); - - if (this.options.isHermes) { - this.createCheckoutWithPayPalButton(); - } else { - this.createPayWithPayPalButton(); - } - - this.bus.on(Bus.events.PAYMENT_METHOD_GENERATED, braintreeUtil.bind(this._handlePaymentMethodGenerated, this)); - this.bus.on(Bus.events.PAYMENT_METHOD_CANCELLED, braintreeUtil.bind(this._handlePaymentMethodCancelled, this)); -}; - -LoggedOutView.prototype.createViewContainer = function () { - this.container = document.createElement('div'); - this.container.id = 'braintree-paypal-loggedout'; - - this.wrapper.appendChild(this.container); - this.loginNode = this.container; -}; - -LoggedOutView.prototype.createPayWithPayPalButton = function () { - var element = document.createElement('a'); - var image = new Image(); - var imageCssText = [ - 'max-width: 100%', - 'display: block', - 'width: 100%', - 'height: 100%', - 'outline: none', - 'border: 0' - ].join(';'); - var cssStyles = [ - 'display: block', - 'width: 115px', - 'height: 44px', - 'overflow: hidden' - ].join(';'); - - element.id = 'braintree-paypal-button'; - element.href = '#'; - element.style.cssText = cssStyles; - - image.src = this.options.paypalAssetsUrl + '/pwpp/' + constants.VERSION + '/images/pay-with-paypal.png'; - image.setAttribute('alt', 'Pay with PayPal'); - image.style.cssText = imageCssText; - - element.appendChild(image); - this.container.appendChild(element); -}; - -LoggedOutView.prototype.createCheckoutWithPayPalButton = function () { - var script = document.createElement('script'); - - script.src = '//www.paypalobjects.com/api/button.js'; - script.async = true; - script.setAttribute('data-merchant', 'merchant-id'); - script.setAttribute('data-button', 'checkout'); - script.setAttribute('data-type', 'button'); - script.setAttribute('data-width', '150'); - script.setAttribute('data-height', '44'); - script.setAttribute('data-lc', getLocale(this.options.locale)); - - this.container.appendChild(script); -}; - -LoggedOutView.prototype.show = function () { - this.container.style.display = 'block'; -}; - -LoggedOutView.prototype.hide = function () { - this.container.style.display = 'none'; -}; - -LoggedOutView.prototype._handlePaymentMethodGenerated = function (bundle) { - if (bundle.type === constants.NONCE_TYPE) { - this.hide(); - } -}; - -LoggedOutView.prototype._handlePaymentMethodCancelled = function (event) { - if (event.source === constants.PAYPAL_INTEGRATION_NAME) { - this.show(); - } -}; - -LoggedOutView.prototype.teardown = function () { - this.wrapper.removeChild(this.container); - this.bus.teardown(); -}; - -module.exports = LoggedOutView; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"../../shared/constants":355,"../../shared/get-locale":357,"braintree-bus":313,"braintree-utilities":325}],350:[function(require,module,exports){ -(function (global){ -'use strict'; - -var Bus = require('braintree-bus'); -var braintreeUtil = require('braintree-utilities'); -var constants = require('../../shared/constants'); - -function MerchantPageView(options) { - this.options = options; - - this.bus = new Bus({ - merchantUrl: global.location.href, - channel: options.channel - }); - - this.bus.on(constants.events.UI_MODAL_DID_OPEN, braintreeUtil.bind(this.lockWindowSize, this)); - this.bus.on(constants.events.UI_MODAL_DID_CLOSE, braintreeUtil.bind(this.unlockWindowSize, this)); -} - -MerchantPageView.prototype.lockWindowSize = function () { - this.defaultStyles = getMerchantPageDefaultStyles(); - document.documentElement.style.height = '100%'; - document.documentElement.style.overflow = 'hidden'; - document.body.style.height = '100%'; - document.body.style.overflow = 'hidden'; -}; - -MerchantPageView.prototype.unlockWindowSize = function () { - if (this.defaultStyles) { - document.documentElement.style.height = this.defaultStyles.html.styles.height; - document.documentElement.style.overflow = this.defaultStyles.html.styles.overflow; - document.body.style.height = this.defaultStyles.body.styles.height; - document.body.style.overflow = this.defaultStyles.body.styles.overflow; - delete this.defaultStyles; - } -}; - -MerchantPageView.prototype._handleUIModalDidOpen = function (event) { - if (event.source === constants.PAYPAL_INTEGRATION_NAME) { - this.lockWindowSize(); - } -}; - -MerchantPageView.prototype._handleUIModalDidClose = function (event) { - if (event.source === constants.PAYPAL_INTEGRATION_NAME) { - this.unlockWindowSize(); - } -}; - -MerchantPageView.prototype.teardown = function () { - this.unlockWindowSize(); - this.bus.teardown(); -}; - -function getStyles(element) { - var computedStyles = window.getComputedStyle ? getComputedStyle(element) : element.currentStyle; - return { - overflow: computedStyles.overflow || '', - height: element.style.height || '' - }; -} - -function getMerchantPageDefaultStyles() { - return { - html: { - node: document.documentElement, - styles: getStyles(document.documentElement) - }, - body: { - node: document.body, - styles: getStyles(document.body) - } - }; -} - -module.exports = MerchantPageView; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"../../shared/constants":355,"braintree-bus":313,"braintree-utilities":325}],351:[function(require,module,exports){ -arguments[4][184][0].apply(exports,arguments) -},{"../../shared/constants":355,"../../shared/util/browser":362,"braintree-bus":313,"braintree-utilities":325,"dup":184,"iframer":329}],352:[function(require,module,exports){ -(function (global){ -'use strict'; -var braintreeUtil = require('braintree-utilities'); -var Destructor = require('destructor'); -var Bus = require('braintree-bus'); -var constants = require('../../shared/constants'); - -function OverlayView(options) { - this.options = options; - this.spriteSrc = this.options.paypalAssetsUrl + '/pwpp/' + constants.VERSION + '/images/pp_overlay_sprite.png'; - - this.bus = new Bus({ - merchantUrl: global.location.href, - channel: options.channel - }); - - this.destructor = new Destructor(); - - this._create(); - this._setupEvents(); - - this.bus.on(Bus.events.UI_POPUP_DID_OPEN, braintreeUtil.bind(this._handleUIPopupDidOpen, this)); - this.bus.on(Bus.events.UI_POPUP_DID_CLOSE, braintreeUtil.bind(this._handleUIPopupDidClose, this)); -} - -OverlayView.prototype.open = function () { - if (document.body.contains(this.el)) { - return; - } - - document.body.appendChild(this.el); -}; - -OverlayView.prototype.close = function () { - if (document.body.contains(this.el)) { - document.body.removeChild(this.el); - } -}; - -OverlayView.prototype._handleUIPopupDidClose = function (event) { - if (event.source === constants.PAYPAL_INTEGRATION_NAME) { - this.close(); - } -}; - -OverlayView.prototype._handleUIPopupDidOpen = function (event) { - if (event.source === constants.PAYPAL_INTEGRATION_NAME) { - this.open(); - } -}; - -OverlayView.prototype._create = function () { - this.el = document.createElement('div'); - - this.el.className = 'bt-overlay'; - - this._setStyles(this.el, [ - 'z-index: 20001', - 'position: fixed', - 'top: 0', - 'left: 0', - 'height: 100%', - 'width: 100%', - 'text-align: center', - 'background: #000', - 'background: rgba(0,0,0,0.7)', - '-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=52)"' - ]); - - this.el.appendChild(this._createCloseIcon()); - this.el.appendChild(this._createMessage()); -}; - -OverlayView.prototype._createCloseIcon = function () { - this.closeIcon = document.createElement('div'); - - this.closeIcon.className = 'bt-close-overlay'; - - this._setStyles(this.closeIcon, [ - 'position: absolute', - 'top: 10px', - 'right: 10px', - 'cursor: pointer', - 'background: url(' + this.spriteSrc + ') no-repeat 0 -67px', - 'height: 14px', - 'width: 14px' - ]); - - return this.closeIcon; -}; - -OverlayView.prototype._createMessage = function () { - var message = document.createElement('div'); - - this._setStyles(message, [ - 'position: relative', - 'top: 50%', - 'max-width: 350px', - 'font-family: "HelveticaNeue", "HelveticaNeue-Light", "Helvetica Neue Light", helvetica, arial, sans-serif', - 'font-size: 14px', - 'line-height: 20px', - 'margin: -70px auto 0' - ]); - - message.appendChild(this._createLogo()); - message.appendChild(this._createExplanation()); - message.appendChild(this._createFocusLink()); - - return message; -}; - -OverlayView.prototype._createExplanation = function () { - var explanation = document.createElement('div'); - - this._setStyles(explanation, [ - 'color: #FFF', - 'margin-bottom: 20px' - ]); - - explanation.innerHTML = 'Don\'t see the secure PayPal browser? We\'ll help you re-launch the window to complete your purchase.'; - - return explanation; -}; - -OverlayView.prototype._createLogo = function () { - var logo = document.createElement('div'); - - this._setStyles(logo, [ - 'background: url(' + this.spriteSrc + ') no-repeat 0 0', - 'width: 94px', - 'height: 25px', - 'margin: 0 auto 26px auto' - ]); - - return logo; -}; - -OverlayView.prototype._createFocusLink = function () { - this.focusLink = document.createElement('a'); - - this._setStyles(this.focusLink, [ - 'color: #009be1', - 'cursor: pointer' - ]); - - this.focusLink.innerHTML = 'Continue'; - - return this.focusLink; -}; - -OverlayView.prototype._setStyles = function (el, styles) { - var cssStyles = styles.join(';'); - el.style.cssText = cssStyles; -}; - -OverlayView.prototype._setupEvents = function () { - var clickCloseHandler = braintreeUtil.bind(this._handleClose, this); - var clickFocusHandler = braintreeUtil.bind(this._handleFocus, this); - - braintreeUtil.addEventListener(this.closeIcon, 'click', clickCloseHandler); - braintreeUtil.addEventListener(this.focusLink, 'click', clickFocusHandler); - - this.destructor.registerFunctionForTeardown(braintreeUtil.bind(function () { - braintreeUtil.removeEventListener(this.closeIcon, 'click', clickCloseHandler); - braintreeUtil.removeEventListener(this.focusLink, 'click', clickFocusHandler); - }, this)); -}; - -OverlayView.prototype._handleClose = function (event) { - event.preventDefault(); - this.close(); - - if (braintreeUtil.isFunction(this.options.onClose)) { - this.options.onClose(); - } -}; - -OverlayView.prototype._handleFocus = function (event) { - event.preventDefault(); - - if (braintreeUtil.isFunction(this.options.onFocus)) { - this.options.onFocus(); - } -}; - -OverlayView.prototype.teardown = function () { - this.bus.teardown(); - this.destructor.teardown(); - this.close(); -}; - -module.exports = OverlayView; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"../../shared/constants":355,"braintree-bus":313,"braintree-utilities":325,"destructor":326}],353:[function(require,module,exports){ -(function (global){ -'use strict'; - -var braintreeUtil = require('braintree-utilities'); -var Destructor = require('destructor'); -var Bus = require('braintree-bus'); -var constants = require('../../shared/constants'); - -function PaymentMethodNonceInputFieldView(options) { - this.options = options || {}; - this.container = this.options.container || document.body; - this.el = this.options.el; - - this.destructor = new Destructor(); - - this.bus = new Bus({ - merchantUrl: global.location.href, - channel: options.channel - }); - - this._initialize(); -} - -PaymentMethodNonceInputFieldView.prototype._initialize = function () { - if (!braintreeUtil.isFunction(this.el)) { - if (this.el != null) { - this.el = braintreeUtil.normalizeElement(this.el); - - this.destructor.registerFunctionForTeardown(braintreeUtil.bind(function () { - this.clear(); - }, this)); - } else { - this.el = this.create(); - } - } - - this.bus.on(Bus.events.PAYMENT_METHOD_GENERATED, braintreeUtil.bind(this._handlePaymentMethodGenerated, this)); - this.bus.on(Bus.events.PAYMENT_METHOD_CANCELLED, braintreeUtil.bind(this._handlePaymentMethodCancelled, this)); -}; - -PaymentMethodNonceInputFieldView.prototype.create = function () { - var input = document.createElement('input'); - input.name = 'payment_method_nonce'; - input.type = 'hidden'; - this.container.appendChild(input); - - this.destructor.registerFunctionForTeardown(braintreeUtil.bind(function () { - this.container.removeChild(input); - }, this)); - - return input; -}; - -PaymentMethodNonceInputFieldView.prototype.value = function (value) { - if (braintreeUtil.isFunction(this.el)) { - this.el(value); - } else { - this.el.value = value; - } -}; - -PaymentMethodNonceInputFieldView.prototype.clear = function () { - this.value(''); -}; - -PaymentMethodNonceInputFieldView.prototype._handlePaymentMethodCancelled = function (event) { - if (event.source === constants.PAYPAL_INTEGRATION_NAME) { - this.clear(); - } -}; - -PaymentMethodNonceInputFieldView.prototype._handlePaymentMethodGenerated = function (bundle) { - if (bundle.type === constants.NONCE_TYPE) { - this.value(bundle.nonce); - } -}; - -PaymentMethodNonceInputFieldView.prototype.teardown = function () { - this.destructor.teardown(); - this.bus.teardown(); -}; - -module.exports = PaymentMethodNonceInputFieldView; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"../../shared/constants":355,"braintree-bus":313,"braintree-utilities":325,"destructor":326}],354:[function(require,module,exports){ -arguments[4][185][0].apply(exports,arguments) -},{"../../shared/constants":355,"../../shared/useragent/browser":358,"braintree-bus":313,"dup":185}],355:[function(require,module,exports){ -arguments[4][186][0].apply(exports,arguments) -},{"dup":186}],356:[function(require,module,exports){ -'use strict'; - -module.exports = { - us: 'en_us', - gb: 'en_uk', - uk: 'en_uk', - de: 'de_de', - fr: 'fr_fr', - it: 'it_it', - es: 'es_es', - ca: 'en_ca', - au: 'en_au', - at: 'de_de', - be: 'en_us', - ch: 'de_de', - dk: 'da_dk', - nl: 'nl_nl', - no: 'no_no', - pl: 'pl_pl', - se: 'sv_se', - tr: 'tr_tr', - bg: 'en_us', - cy: 'en_us', - hr: 'en_us', - is: 'en_us', - kh: 'en_us', - mt: 'en_us', - my: 'en_us', - ru: 'ru_ru' -}; - -},{}],357:[function(require,module,exports){ -'use strict'; - -var countryCodeLookupTable = require('../shared/data/country-code-lookup'); - -function isFormatted(code) { - return code.indexOf('_') !== -1 && code.length === 5; -} - -function queryTable(code) { - var key, match; - - for (key in countryCodeLookupTable) { - if (countryCodeLookupTable.hasOwnProperty(key)) { - if (key === code) { - match = countryCodeLookupTable[key]; - } else if (countryCodeLookupTable[key] === code) { - match = countryCodeLookupTable[key]; - } - } - } - - return match; -} - -function getLocale(code) { - var match, pieces; - - code = code ? code.toLowerCase() : 'us'; - code = code.replace(/-/g, '_'); - - match = isFormatted(code) ? code : queryTable(code); - - if (match) { - pieces = match.split('_'); - return [pieces[0], pieces[1].toUpperCase()].join('_'); - } - - return 'en_US'; -} - -module.exports = getLocale; - -},{"../shared/data/country-code-lookup":356}],358:[function(require,module,exports){ -arguments[4][187][0].apply(exports,arguments) -},{"./platform":360,"./useragent":361,"dup":187}],359:[function(require,module,exports){ -arguments[4][188][0].apply(exports,arguments) -},{"./platform":360,"./useragent":361,"dup":188}],360:[function(require,module,exports){ -arguments[4][189][0].apply(exports,arguments) -},{"./useragent":361,"dup":189}],361:[function(require,module,exports){ -arguments[4][190][0].apply(exports,arguments) -},{"dup":190}],362:[function(require,module,exports){ -arguments[4][191][0].apply(exports,arguments) -},{"../useragent/browser":358,"../useragent/device":359,"../useragent/platform":360,"../useragent/useragent":361,"dup":191}],363:[function(require,module,exports){ -'use strict'; - -function setTextContent(element, content) { - var property = 'innerText'; - if (document && document.body) { - if ('textContent' in document.body) { - property = 'textContent'; - } - } - element[property] = content; -} - -module.exports = { - setTextContent: setTextContent -}; - -},{}],364:[function(require,module,exports){ -'use strict'; - -var trim = typeof String.prototype.trim === 'function' ? - function (str) { return str.trim(); } : - function (str) { return str.replace(/^\s+|\s+$/, ''); }; - -var b2a = typeof window.btoa === 'function' ? - function (str) { return window.btoa(str); } : - function (str) { - var keyStr = - 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; - var output = ''; - var chr1, chr2, chr3, enc1, enc2, enc3, enc4; - var i = 0; - - while (i < str.length) { - chr1 = str.charCodeAt(i++); - chr2 = str.charCodeAt(i++); - chr3 = str.charCodeAt(i++); - - enc1 = chr1 >> 2; - enc2 = (chr1 & 3) << 4 | chr2 >> 4; - enc3 = (chr2 & 15) << 2 | chr3 >> 6; - enc4 = chr3 & 63; - - if (isNaN(chr2)) { - enc3 = enc4 = 64; - } else if (isNaN(chr3)) { - enc4 = 64; - } - - output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + - keyStr.charAt(enc3) + keyStr.charAt(enc4); - } - - return output; - }; - -function generateUid() { - var i, r; - var uid = ''; - - for (i = 0; i < 32; i++) { - r = Math.floor(Math.random() * 16); - uid += r.toString(16); - } - - return uid; -} - -function castToBoolean(value) { - return /^(true|1)$/i.test(value); -} - -function htmlEscape(str) { - return str.replace(/&/g, '&') - .replace(//g, '>') - .replace(/\"/g, '"') - .replace(/\'/g, '''); -} - -function parseUrlParams(url) { - var arr, i, n, parts, index, key, value, encodedValue; - var startIndex = url.indexOf('?'); - var values = {}; - - if (startIndex >= 0) { - url = url.substr(startIndex + 1); - } - - if (url.length === 0) { - return null; - } - - arr = url.split('&'); - for (i = 0, n = arr.length; i < n; i++) { - parts = arr[i]; - index = parts.indexOf('='); - key = parts.substr(0, index); - encodedValue = parts.substr(index + 1); - value = decodeURIComponent(encodedValue); - value = value.replace(//g, '>'); - - if (value === 'false') { - value = false; - } - if (value == null || value === 'true') { - value = true; - } - values[key] = value; - } - - return values; -} - -function preventDefault(event) { - if (event.preventDefault) { - event.preventDefault(); - } else { - event.returnValue = false; - } -} - -function isOneTimeHermesConfiguration(options) { - return !!options.singleUse && !!options.amount && !!options.currency; -} - -function isBillingAgreementHermesConfiguration(options) { - return !!options.billingAgreementEnabled; -} - -function isHermesConfiguration(options) { - return isBillingAgreementHermesConfiguration(options) || isOneTimeHermesConfiguration(options); -} - -module.exports = { - trim: trim, - btoa: b2a, - generateUid: generateUid, - castToBoolean: castToBoolean, - htmlEscape: htmlEscape, - parseUrlParams: parseUrlParams, - preventDefault: preventDefault, - isOneTimeHermesConfiguration: isOneTimeHermesConfiguration, - isBillingAgreementHermesConfiguration: isBillingAgreementHermesConfiguration, - isHermesConfiguration: isHermesConfiguration -}; - -},{}],365:[function(require,module,exports){ -arguments[4][35][0].apply(exports,arguments) -},{"dup":35}],366:[function(require,module,exports){ -arguments[4][36][0].apply(exports,arguments) -},{"dup":36}],367:[function(require,module,exports){ -arguments[4][22][0].apply(exports,arguments) -},{"dup":22}],368:[function(require,module,exports){ -arguments[4][38][0].apply(exports,arguments) -},{"dup":38}],369:[function(require,module,exports){ -arguments[4][39][0].apply(exports,arguments) -},{"dup":39}],370:[function(require,module,exports){ -arguments[4][40][0].apply(exports,arguments) -},{"dup":40}],371:[function(require,module,exports){ -arguments[4][41][0].apply(exports,arguments) -},{"./array":365,"dup":41}],372:[function(require,module,exports){ -arguments[4][42][0].apply(exports,arguments) -},{"dup":42}],373:[function(require,module,exports){ -arguments[4][43][0].apply(exports,arguments) -},{"./lib/array":365,"./lib/base64":366,"./lib/dom":367,"./lib/events":368,"./lib/fn":369,"./lib/string":370,"./lib/url":371,"./lib/uuid":372,"dup":43}],374:[function(require,module,exports){ -arguments[4][80][0].apply(exports,arguments) -},{"batch-execute-functions":375,"braintree-utilities/lib/fn":376,"dup":80}],375:[function(require,module,exports){ -arguments[4][81][0].apply(exports,arguments) -},{"dup":81}],376:[function(require,module,exports){ -arguments[4][39][0].apply(exports,arguments) -},{"dup":39}],377:[function(require,module,exports){ -/** - * lodash 3.0.2 (Custom Build) - * Build: `lodash modern modularize exports="npm" -o ./` - * Copyright 2012-2015 The Dojo Foundation - * Based on Underscore.js 1.8.3 - * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - * Available under MIT license - */ -var baseClone = require('lodash._baseclone'), - bindCallback = require('lodash._bindcallback'); - -/** - * Creates a deep clone of `value`. If `customizer` is provided it's invoked - * to produce the cloned values. If `customizer` returns `undefined` cloning - * is handled by the method instead. The `customizer` is bound to `thisArg` - * and invoked with up to three argument; (value [, index|key, object]). - * - * **Note:** This method is loosely based on the - * [structured clone algorithm](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm). - * The enumerable properties of `arguments` objects and objects created by - * constructors other than `Object` are cloned to plain `Object` objects. An - * empty object is returned for uncloneable values such as functions, DOM nodes, - * Maps, Sets, and WeakMaps. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to deep clone. - * @param {Function} [customizer] The function to customize cloning values. - * @param {*} [thisArg] The `this` binding of `customizer`. - * @returns {*} Returns the deep cloned value. - * @example - * - * var users = [ - * { 'user': 'barney' }, - * { 'user': 'fred' } - * ]; - * - * var deep = _.cloneDeep(users); - * deep[0] === users[0]; - * // => false - * - * // using a customizer callback - * var el = _.cloneDeep(document.body, function(value) { - * if (_.isElement(value)) { - * return value.cloneNode(true); - * } - * }); - * - * el === document.body - * // => false - * el.nodeName - * // => BODY - * el.childNodes.length; - * // => 20 - */ -function cloneDeep(value, customizer, thisArg) { - return typeof customizer == 'function' - ? baseClone(value, true, bindCallback(customizer, thisArg, 3)) - : baseClone(value, true); -} - -module.exports = cloneDeep; - -},{"lodash._baseclone":378,"lodash._bindcallback":388}],378:[function(require,module,exports){ -(function (global){ -/** - * lodash 3.3.0 (Custom Build) - * Build: `lodash modern modularize exports="npm" -o ./` - * Copyright 2012-2015 The Dojo Foundation - * Based on Underscore.js 1.8.3 - * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - * Available under MIT license - */ -var arrayCopy = require('lodash._arraycopy'), - arrayEach = require('lodash._arrayeach'), - baseAssign = require('lodash._baseassign'), - baseFor = require('lodash._basefor'), - isArray = require('lodash.isarray'), - keys = require('lodash.keys'); - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - mapTag = '[object Map]', - numberTag = '[object Number]', - objectTag = '[object Object]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - weakMapTag = '[object WeakMap]'; - -var arrayBufferTag = '[object ArrayBuffer]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - -/** Used to match `RegExp` flags from their coerced string values. */ -var reFlags = /\w*$/; - -/** Used to identify `toStringTag` values supported by `_.clone`. */ -var cloneableTags = {}; -cloneableTags[argsTag] = cloneableTags[arrayTag] = -cloneableTags[arrayBufferTag] = cloneableTags[boolTag] = -cloneableTags[dateTag] = cloneableTags[float32Tag] = -cloneableTags[float64Tag] = cloneableTags[int8Tag] = -cloneableTags[int16Tag] = cloneableTags[int32Tag] = -cloneableTags[numberTag] = cloneableTags[objectTag] = -cloneableTags[regexpTag] = cloneableTags[stringTag] = -cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = -cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; -cloneableTags[errorTag] = cloneableTags[funcTag] = -cloneableTags[mapTag] = cloneableTags[setTag] = -cloneableTags[weakMapTag] = false; - -/** Used for native method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) - * of values. - */ -var objToString = objectProto.toString; - -/** Native method references. */ -var ArrayBuffer = global.ArrayBuffer, - Uint8Array = global.Uint8Array; - -/** - * The base implementation of `_.clone` without support for argument juggling - * and `this` binding `customizer` functions. - * - * @private - * @param {*} value The value to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @param {Function} [customizer] The function to customize cloning values. - * @param {string} [key] The key of `value`. - * @param {Object} [object] The object `value` belongs to. - * @param {Array} [stackA=[]] Tracks traversed source objects. - * @param {Array} [stackB=[]] Associates clones with source counterparts. - * @returns {*} Returns the cloned value. - */ -function baseClone(value, isDeep, customizer, key, object, stackA, stackB) { - var result; - if (customizer) { - result = object ? customizer(value, key, object) : customizer(value); - } - if (result !== undefined) { - return result; - } - if (!isObject(value)) { - return value; - } - var isArr = isArray(value); - if (isArr) { - result = initCloneArray(value); - if (!isDeep) { - return arrayCopy(value, result); - } - } else { - var tag = objToString.call(value), - isFunc = tag == funcTag; - - if (tag == objectTag || tag == argsTag || (isFunc && !object)) { - result = initCloneObject(isFunc ? {} : value); - if (!isDeep) { - return baseAssign(result, value); - } - } else { - return cloneableTags[tag] - ? initCloneByTag(value, tag, isDeep) - : (object ? value : {}); - } - } - // Check for circular references and return its corresponding clone. - stackA || (stackA = []); - stackB || (stackB = []); - - var length = stackA.length; - while (length--) { - if (stackA[length] == value) { - return stackB[length]; - } - } - // Add the source value to the stack of traversed objects and associate it with its clone. - stackA.push(value); - stackB.push(result); - - // Recursively populate clone (susceptible to call stack limits). - (isArr ? arrayEach : baseForOwn)(value, function(subValue, key) { - result[key] = baseClone(subValue, isDeep, customizer, key, value, stackA, stackB); - }); - return result; -} - -/** - * The base implementation of `_.forOwn` without support for callback - * shorthands and `this` binding. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ -function baseForOwn(object, iteratee) { - return baseFor(object, iteratee, keys); -} - -/** - * Creates a clone of the given array buffer. - * - * @private - * @param {ArrayBuffer} buffer The array buffer to clone. - * @returns {ArrayBuffer} Returns the cloned array buffer. - */ -function bufferClone(buffer) { - var result = new ArrayBuffer(buffer.byteLength), - view = new Uint8Array(result); - - view.set(new Uint8Array(buffer)); - return result; -} - -/** - * Initializes an array clone. - * - * @private - * @param {Array} array The array to clone. - * @returns {Array} Returns the initialized clone. - */ -function initCloneArray(array) { - var length = array.length, - result = new array.constructor(length); - - // Add array properties assigned by `RegExp#exec`. - if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { - result.index = array.index; - result.input = array.input; - } - return result; -} - -/** - * Initializes an object clone. - * - * @private - * @param {Object} object The object to clone. - * @returns {Object} Returns the initialized clone. - */ -function initCloneObject(object) { - var Ctor = object.constructor; - if (!(typeof Ctor == 'function' && Ctor instanceof Ctor)) { - Ctor = Object; - } - return new Ctor; -} - -/** - * Initializes an object clone based on its `toStringTag`. - * - * **Note:** This function only supports cloning values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to clone. - * @param {string} tag The `toStringTag` of the object to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the initialized clone. - */ -function initCloneByTag(object, tag, isDeep) { - var Ctor = object.constructor; - switch (tag) { - case arrayBufferTag: - return bufferClone(object); - - case boolTag: - case dateTag: - return new Ctor(+object); - - case float32Tag: case float64Tag: - case int8Tag: case int16Tag: case int32Tag: - case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: - var buffer = object.buffer; - return new Ctor(isDeep ? bufferClone(buffer) : buffer, object.byteOffset, object.length); - - case numberTag: - case stringTag: - return new Ctor(object); - - case regexpTag: - var result = new Ctor(object.source, reFlags.exec(object)); - result.lastIndex = object.lastIndex; - } - return result; -} - -/** - * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. - * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(1); - * // => false - */ -function isObject(value) { - // Avoid a V8 JIT bug in Chrome 19-20. - // See https://code.google.com/p/v8/issues/detail?id=2291 for more details. - var type = typeof value; - return !!value && (type == 'object' || type == 'function'); -} - -module.exports = baseClone; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"lodash._arraycopy":379,"lodash._arrayeach":380,"lodash._baseassign":381,"lodash._basefor":383,"lodash.isarray":384,"lodash.keys":385}],379:[function(require,module,exports){ -/** - * lodash 3.0.0 (Custom Build) - * Build: `lodash modern modularize exports="npm" -o ./` - * Copyright 2012-2015 The Dojo Foundation - * Based on Underscore.js 1.7.0 - * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - * Available under MIT license - */ - -/** - * Copies the values of `source` to `array`. - * - * @private - * @param {Array} source The array to copy values from. - * @param {Array} [array=[]] The array to copy values to. - * @returns {Array} Returns `array`. - */ -function arrayCopy(source, array) { - var index = -1, - length = source.length; - - array || (array = Array(length)); - while (++index < length) { - array[index] = source[index]; - } - return array; -} - -module.exports = arrayCopy; - -},{}],380:[function(require,module,exports){ -/** - * lodash 3.0.0 (Custom Build) - * Build: `lodash modern modularize exports="npm" -o ./` - * Copyright 2012-2015 The Dojo Foundation - * Based on Underscore.js 1.7.0 - * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - * Available under MIT license - */ - -/** - * A specialized version of `_.forEach` for arrays without support for callback - * shorthands or `this` binding. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ -function arrayEach(array, iteratee) { - var index = -1, - length = array.length; - - while (++index < length) { - if (iteratee(array[index], index, array) === false) { - break; - } - } - return array; -} - -module.exports = arrayEach; - -},{}],381:[function(require,module,exports){ -arguments[4][86][0].apply(exports,arguments) -},{"dup":86,"lodash._basecopy":382,"lodash.keys":385}],382:[function(require,module,exports){ -arguments[4][87][0].apply(exports,arguments) -},{"dup":87}],383:[function(require,module,exports){ -/** - * lodash 3.0.2 (Custom Build) - * Build: `lodash modern modularize exports="npm" -o ./` - * Copyright 2012-2015 The Dojo Foundation - * Based on Underscore.js 1.8.3 - * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - * Available under MIT license - */ - -/** - * The base implementation of `baseForIn` and `baseForOwn` which iterates - * over `object` properties returned by `keysFunc` invoking `iteratee` for - * each property. Iteratee functions may exit iteration early by explicitly - * returning `false`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ -var baseFor = createBaseFor(); - -/** - * Creates a base function for `_.forIn` or `_.forInRight`. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ -function createBaseFor(fromRight) { - return function(object, iteratee, keysFunc) { - var iterable = toObject(object), - props = keysFunc(object), - length = props.length, - index = fromRight ? length : -1; - - while ((fromRight ? index-- : ++index < length)) { - var key = props[index]; - if (iteratee(iterable[key], key, iterable) === false) { - break; - } - } - return object; - }; -} - -/** - * Converts `value` to an object if it's not one. - * - * @private - * @param {*} value The value to process. - * @returns {Object} Returns the object. - */ -function toObject(value) { - return isObject(value) ? value : Object(value); -} - -/** - * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. - * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(1); - * // => false - */ -function isObject(value) { - // Avoid a V8 JIT bug in Chrome 19-20. - // See https://code.google.com/p/v8/issues/detail?id=2291 for more details. - var type = typeof value; - return !!value && (type == 'object' || type == 'function'); -} - -module.exports = baseFor; - -},{}],384:[function(require,module,exports){ -arguments[4][46][0].apply(exports,arguments) -},{"dup":46}],385:[function(require,module,exports){ -arguments[4][48][0].apply(exports,arguments) -},{"dup":48,"lodash._getnative":386,"lodash.isarguments":387,"lodash.isarray":384}],386:[function(require,module,exports){ -arguments[4][49][0].apply(exports,arguments) -},{"dup":49}],387:[function(require,module,exports){ -arguments[4][45][0].apply(exports,arguments) -},{"dup":45}],388:[function(require,module,exports){ -arguments[4][89][0].apply(exports,arguments) -},{"dup":89}],389:[function(require,module,exports){ -/** - * lodash 3.1.1 (Custom Build) - * Build: `lodash modern modularize exports="npm" -o ./` - * Copyright 2012-2015 The Dojo Foundation - * Based on Underscore.js 1.8.3 - * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - * Available under MIT license - */ -var baseAssign = require('lodash._baseassign'), - baseCreate = require('lodash._basecreate'), - isIterateeCall = require('lodash._isiterateecall'); - -/** - * Creates an object that inherits from the given `prototype` object. If a - * `properties` object is provided its own enumerable properties are assigned - * to the created object. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} prototype The object to inherit from. - * @param {Object} [properties] The properties to assign to the object. - * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. - * @returns {Object} Returns the new object. - * @example - * - * function Shape() { - * this.x = 0; - * this.y = 0; - * } - * - * function Circle() { - * Shape.call(this); - * } - * - * Circle.prototype = _.create(Shape.prototype, { - * 'constructor': Circle - * }); - * - * var circle = new Circle; - * circle instanceof Circle; - * // => true - * - * circle instanceof Shape; - * // => true - */ -function create(prototype, properties, guard) { - var result = baseCreate(prototype); - if (guard && isIterateeCall(prototype, properties, guard)) { - properties = undefined; - } - return properties ? baseAssign(result, properties) : result; -} - -module.exports = create; - -},{"lodash._baseassign":390,"lodash._basecreate":396,"lodash._isiterateecall":397}],390:[function(require,module,exports){ -arguments[4][86][0].apply(exports,arguments) -},{"dup":86,"lodash._basecopy":391,"lodash.keys":392}],391:[function(require,module,exports){ -arguments[4][87][0].apply(exports,arguments) -},{"dup":87}],392:[function(require,module,exports){ -arguments[4][48][0].apply(exports,arguments) -},{"dup":48,"lodash._getnative":393,"lodash.isarguments":394,"lodash.isarray":395}],393:[function(require,module,exports){ -arguments[4][49][0].apply(exports,arguments) -},{"dup":49}],394:[function(require,module,exports){ -arguments[4][45][0].apply(exports,arguments) -},{"dup":45}],395:[function(require,module,exports){ -arguments[4][46][0].apply(exports,arguments) -},{"dup":46}],396:[function(require,module,exports){ -/** - * lodash 3.0.3 (Custom Build) - * Build: `lodash modern modularize exports="npm" -o ./` - * Copyright 2012-2015 The Dojo Foundation - * Based on Underscore.js 1.8.3 - * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - * Available under MIT license - */ - -/** - * The base implementation of `_.create` without support for assigning - * properties to the created object. - * - * @private - * @param {Object} prototype The object to inherit from. - * @returns {Object} Returns the new object. - */ -var baseCreate = (function() { - function object() {} - return function(prototype) { - if (isObject(prototype)) { - object.prototype = prototype; - var result = new object; - object.prototype = undefined; - } - return result || {}; - }; -}()); - -/** - * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. - * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(1); - * // => false - */ -function isObject(value) { - // Avoid a V8 JIT bug in Chrome 19-20. - // See https://code.google.com/p/v8/issues/detail?id=2291 for more details. - var type = typeof value; - return !!value && (type == 'object' || type == 'function'); -} - -module.exports = baseCreate; - -},{}],397:[function(require,module,exports){ -arguments[4][90][0].apply(exports,arguments) -},{"dup":90}],398:[function(require,module,exports){ -'use strict'; -/* eslint-disable consistent-return */ - -function convertToLegacyShippingAddress(address) { - var prop; - var legacyShippingAddress = {}; - - if (!address) { - return; - } - - for (prop in address) { - if (address.hasOwnProperty(prop)) { - legacyShippingAddress[toSnakeCase(prop)] = address[prop]; - } - } - - return legacyShippingAddress; -} - -function toSnakeCase(string) { - return string.replace(/([A-Z])/g, function ($1) { - return '_' + $1.toLowerCase(); - }); -} - -module.exports = {convertToLegacyShippingAddress: convertToLegacyShippingAddress}; - -},{}],399:[function(require,module,exports){ -'use strict'; - -module.exports = { - ROOT_SUCCESS_CALLBACK: 'onPaymentMethodReceived', - ROOT_ERROR_CALLBACK: 'onError', - ROOT_READY_CALLBACK: 'onReady' -}; - -},{}],400:[function(require,module,exports){ -(function (global){ -'use strict'; - -var api = require('braintree-api'); -var Bus = require('braintree-bus'); -var Destructor = require('destructor'); -var bind = require('braintree-utilities').bind; -var constants = require('../constants'); -var sanitizePayload = require('../lib/sanitize-payload'); -var lookupCallbackFor = require('../lib/lookup-callback-for'); -var fallbackErrorHandler = require('../lib/fallback-error-handler'); - -function noop() {} - -function _handleDependencyInitializing() { - this._dependenciesRemaining++; -} - -function _handleDependencyReady() { - this._dependenciesRemaining--; - - if (this._dependenciesRemaining === 0) { - delete this._dependenciesRemaining; - - this.bus.off(Bus.events.ASYNC_DEPENDENCY_INITIALIZING, this._handleDependencyInitializing); - this.bus.off(Bus.events.ASYNC_DEPENDENCY_READY, this._handleDependencyReady); - - this._onIntegrationReady(); - } -} - -function BaseIntegration(configuration) { - this.configuration = configuration; - - this.isReady = false; - - this.destructor = new Destructor(); - - this.bus = new Bus({ - channel: this.configuration.channel, - merchantUrl: global.location.href - }); - - this._createApiClient(); - this._configureCallbacks(); - this._configureAnalytics(); - this._attachEvents(); - this._emitInitializing(); -} - -BaseIntegration.prototype._emitInitializing = function () { - this.bus.emit(Bus.events.ASYNC_DEPENDENCY_INITIALIZING); -}; - -BaseIntegration.prototype._createApiClient = function () { - var apiClientOptions = { - clientToken: this.configuration.gatewayConfiguration, - integration: this.configuration.integrationType, - analyticsConfiguration: this.configuration.analyticsConfiguration - }; - - if (this.configuration.merchantConfiguration.enableCORS) { - apiClientOptions.enableCORS = true; - } - - this.apiClient = new api.Client(apiClientOptions); - // TODO: investigate whether we need to tear these down -}; - -BaseIntegration.prototype._configureCallbacks = function () { - var getCallback = lookupCallbackFor(this.configuration.merchantConfiguration); - - function successHandler(fn) { - return function (payload) { - fn(sanitizePayload(payload)); - }; - } - - this.onSuccess = successHandler(getCallback(constants.ROOT_SUCCESS_CALLBACK)); - this.onError = getCallback(constants.ROOT_ERROR_CALLBACK, fallbackErrorHandler); - this.onReady = getCallback(constants.ROOT_READY_CALLBACK); -}; - -BaseIntegration.prototype._configureAnalytics = function () { - var prefix = 'web.' + this.configuration.integrationType + '.'; - var apiClient = this.apiClient; - - this.bus.on(Bus.events.SEND_ANALYTICS_EVENTS, function (events, callback) { - var i; - - if (!(events instanceof Array)) { - events = [events]; - } - - for (i = 0; i < events.length; i++) { - events[i] = prefix + events[i]; - } - - apiClient.sendAnalyticsEvents(events, callback); - // TODO: maybe this needs to be canceled - }); -}; - -BaseIntegration.prototype._attachEvents = function () { - var configuration = this.configuration; - - this.bus.on(Bus.events.ERROR, this.onError); - this.bus.on(Bus.events.PAYMENT_METHOD_RECEIVED, this.onSuccess); - - this.bus.on(Bus.events.WARNING, function (warning) { - try { console.warn(warning); } catch (e) { /* ignored */ } // eslint-disable-line no-console - }); - - this.bus.on(Bus.events.CONFIGURATION_REQUEST, function (reply) { - // TODO: Coinbase and Hosted Fields both expect this reply - // in this format. We need to amend that - reply({ - // We do not want to send the entire merchantConfiguration object - // because it could contain unserializable DOM nodes - enableCORS: configuration.merchantConfiguration.enableCORS, - configuration: configuration.gatewayConfiguration, - integration: configuration.integrationType, - analyticsConfiguration: configuration.analyticsConfiguration - }); - }); - - this._dependenciesRemaining = 0; - this._handleDependencyInitializing = bind(_handleDependencyInitializing, this); - this._handleDependencyReady = bind(_handleDependencyReady, this); - this.bus.on(Bus.events.ASYNC_DEPENDENCY_INITIALIZING, this._handleDependencyInitializing); - this.bus.on(Bus.events.ASYNC_DEPENDENCY_READY, this._handleDependencyReady); -}; - -BaseIntegration.prototype._onIntegrationReady = function () { - var instance = { - teardown: bind(function (done) { - var key; - var message = 'Cannot call teardown while in progress'; - - done = done || noop; - - function teardownReply() { - throw new Error(message); - } - - for (key in instance) { - if (instance.hasOwnProperty(key)) { - instance[key] = teardownReply; - } - } - - this.destructor.teardown(bind(function () { // eslint-disable-line no-invalid-this - message = 'Cannot teardown integration more than once'; - - this.bus.teardown(); // eslint-disable-line no-invalid-this - done(); - }, this)); // eslint-disable-line no-invalid-this - }, this) // eslint-disable-line no-invalid-this - }; - - this.isReady = true; - this.onReady(instance); -}; - -module.exports = BaseIntegration; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"../constants":399,"../lib/fallback-error-handler":406,"../lib/lookup-callback-for":407,"../lib/sanitize-payload":408,"braintree-api":21,"braintree-bus":52,"braintree-utilities":373,"destructor":374}],401:[function(require,module,exports){ -'use strict'; - -var clone = require('lodash.clonedeep'); -var create = require('lodash.create'); -var api = require('braintree-api'); -var bind = require('braintree-utilities').bind; -var coinbase = require('braintree-coinbase'); -var Bus = require('braintree-bus'); -var BaseIntegration = require('./base-integration'); - -function CoinbaseIntegration() { - var coinbaseConfiguration, coinbaseIntegration; - - BaseIntegration.apply(this, arguments); - - coinbaseConfiguration = clone(this.configuration.merchantConfiguration); - - this._attachBusEvents(); - - coinbaseConfiguration.channel = this.configuration.channel; - coinbaseConfiguration.configuration = clone(this.configuration.gatewayConfiguration); - coinbaseConfiguration.coinbase = clone(coinbaseConfiguration.coinbase || {}); - coinbaseConfiguration.apiClient = new api.Client({ - enableCORS: this.configuration.merchantConfiguration.enableCORS || false, - clientToken: this.configuration.gatewayConfiguration, - integration: 'coinbase' - }); - // TODO: investigate whether API client needs to be torn down - - coinbaseIntegration = coinbase.create(coinbaseConfiguration); - this.destructor.registerFunctionForTeardown(function (done) { - coinbaseIntegration.teardown(done); - }); - - this.bus.emit(Bus.events.ASYNC_DEPENDENCY_READY); -} - -CoinbaseIntegration.prototype = create(BaseIntegration.prototype, { - constructor: CoinbaseIntegration -}); - -CoinbaseIntegration.prototype._attachBusEvents = function () { - this.bus.on(Bus.events.PAYMENT_METHOD_GENERATED, bind(this._onPaymentMethodGenerated, this)); -}; - -CoinbaseIntegration.prototype._onPaymentMethodGenerated = function (payload) { - this.bus.emit(Bus.events.PAYMENT_METHOD_RECEIVED, payload); -}; - -module.exports = CoinbaseIntegration; - -},{"./base-integration":400,"braintree-api":21,"braintree-bus":52,"braintree-coinbase":56,"braintree-utilities":373,"lodash.clonedeep":377,"lodash.create":389}],402:[function(require,module,exports){ -'use strict'; - -var clone = require('lodash.clonedeep'); -var create = require('lodash.create'); -var form = require('braintree-form'); -var paypal = require('braintree-paypal'); -var coinbase = require('braintree-coinbase'); -var utils = require('braintree-utilities'); -var constants = require('../constants'); -var Bus = require('braintree-bus'); -var convertToLegacyShippingAddress = require('../compatibility').convertToLegacyShippingAddress; -var BaseIntegration = require('./base-integration'); - -function CustomIntegration() { - BaseIntegration.apply(this, arguments); - - this._setupForm(); - this._setupPayPal(); - this._setupCoinbase(); - - this.bus.emit(Bus.events.ASYNC_DEPENDENCY_READY); -} - -CustomIntegration.prototype = create(BaseIntegration.prototype, { - constructor: CustomIntegration -}); - -CustomIntegration.prototype._setupForm = function () { - var merchantConfiguration = this.configuration.merchantConfiguration; - var formShouldAutoSubmit, successCallback, formIntegration; - - if (merchantConfiguration.id) { - formIntegration = form.setup(this.apiClient, this.configuration); - - formShouldAutoSubmit = !utils.isFunction(merchantConfiguration[constants.ROOT_SUCCESS_CALLBACK]); - if (!formShouldAutoSubmit) { - successCallback = this.onSuccess; - formIntegration.onNonceReceived = utils.bind(function (err, payload) { - if (err) { - this.bus.emit(Bus.events.ERROR, err); // eslint-disable-line no-invalid-this - } else { - successCallback(payload); - } - }, this); - } - - this.destructor.registerFunctionForTeardown(function () { - formIntegration.teardown(); - }); - } else { - this.bus.on(Bus.events.PAYMENT_METHOD_GENERATED, utils.bind(function (payload) { - this.bus.emit(Bus.events.PAYMENT_METHOD_RECEIVED, payload); // eslint-disable-line no-invalid-this - }, this)); - } -}; - -CustomIntegration.prototype._setupPayPal = function () { - var paypalCallbackLookup, legacyPaypalSuccessCallback, legacyPaypalCancelledCallback, dummyInput, paypalIntegration, paypalConfiguration; - var merchantConfiguration = this.configuration.merchantConfiguration; - - if (!merchantConfiguration.paypal) { return; } - - paypalConfiguration = clone(merchantConfiguration.paypal, function (value) { - var isHtmlElement = value && value.nodeType === 1; - if (isHtmlElement) { - return value; - } - }); - - paypalCallbackLookup = getIntegrationCallbackLookup(merchantConfiguration, 'paypal'); - legacyPaypalSuccessCallback = paypalCallbackLookup('onSuccess'); - legacyPaypalCancelledCallback = paypalCallbackLookup('onCancelled'); - - if (!paypalConfiguration.paymentMethodNonceInputField) { - dummyInput = document.createElement('input'); - dummyInput.id = 'braintree-custom-integration-dummy-input'; - paypalConfiguration.paymentMethodNonceInputField = dummyInput; - } - - paypalConfiguration.onSuccess = function (payload) { - legacyPaypalSuccessCallback( - payload.nonce, - payload.details.email, - convertToLegacyShippingAddress(payload.details.shippingAddress) - ); - }; - - paypalConfiguration.onCancelled = utils.bind(function () { - this.bus.emit(Bus.events.PAYMENT_METHOD_CANCELLED); // eslint-disable-line no-invalid-this - legacyPaypalCancelledCallback(); - }, this); - - // In a custom integration, paypal options are nested inside of the paypal object - // so the paypalConfiguration needs to be augmented with the value from the root - // merchantConfiguration object for CORS - // TODO: Update paypal create signature - if (merchantConfiguration.enableCORS) { - paypalConfiguration.enableCORS = true; - } - - paypalIntegration = paypal.create(this.configuration.gatewayConfiguration, paypalConfiguration, this.configuration.channel); - - this.destructor.registerFunctionForTeardown(function () { - paypalIntegration.teardown(); - }); -}; - -CustomIntegration.prototype._setupCoinbase = function () { - var coinbaseConfiguration, coinbaseIntegration; - - if (!this.configuration.merchantConfiguration.coinbase) { return; } - - if (navigator.userAgent.match(/MSIE 8\.0/)) { return; } - - coinbaseConfiguration = clone(this.configuration.merchantConfiguration); - coinbaseConfiguration.channel = this.configuration.channel; - coinbaseConfiguration.configuration = this.configuration.gatewayConfiguration; - coinbaseConfiguration.apiClient = this.apiClient; - delete coinbaseConfiguration.paypal; - - coinbaseIntegration = coinbase.create(coinbaseConfiguration); - - this.destructor.registerFunctionForTeardown(function (done) { - coinbaseIntegration.teardown(done); - }); -}; - -function getIntegrationCallbackLookup(options, integration) { - return function (funcName) { - if (integration in options && utils.isFunction(options[integration][funcName])) { - return options[integration][funcName]; - } - return function noop() {}; - }; -} - -module.exports = CustomIntegration; - -},{"../compatibility":398,"../constants":399,"./base-integration":400,"braintree-bus":52,"braintree-coinbase":56,"braintree-form":246,"braintree-paypal":345,"braintree-utilities":373,"lodash.clonedeep":377,"lodash.create":389}],403:[function(require,module,exports){ -'use strict'; - -var create = require('lodash.create'); -var dropin = require('braintree-dropin'); -var utils = require('braintree-utilities'); -var Bus = require('braintree-bus'); -var constants = require('../constants'); -var sanitizePayload = require('../lib/sanitize-payload'); -var BaseIntegration = require('./base-integration'); - -function _getLegacyCallback(options) { - if (utils.isFunction(options.paymentMethodNonceReceived)) { - return options.paymentMethodNonceReceived; - } - - return null; -} - -function _hasRootCallback(options) { - return utils.isFunction(options[constants.ROOT_SUCCESS_CALLBACK]); -} - -function DropinIntegration() { - var merchantConfiguration, legacyCallback, hasRootCallback, dropinIntegration; - - BaseIntegration.apply(this, arguments); - - merchantConfiguration = this.configuration.merchantConfiguration; - legacyCallback = _getLegacyCallback(merchantConfiguration); - hasRootCallback = _hasRootCallback(merchantConfiguration); - - if (legacyCallback || hasRootCallback) { - merchantConfiguration.paymentMethodNonceReceived = utils.bind(function (payload) { - if (legacyCallback) { - legacyCallback(payload.originalEvent, payload.nonce); - } - - this.bus.emit(Bus.events.PAYMENT_METHOD_RECEIVED, sanitizePayload(payload)); // eslint-disable-line no-invalid-this - }, this); - } - - dropinIntegration = dropin.create(this.configuration); - this.destructor.registerFunctionForTeardown(function (done) { - dropinIntegration.teardown(done); - }); - - this.bus.emit(Bus.events.ASYNC_DEPENDENCY_READY); -} - -DropinIntegration.prototype = create(BaseIntegration.prototype, { - constructor: DropinIntegration -}); - -module.exports = DropinIntegration; - -},{"../constants":399,"../lib/sanitize-payload":408,"./base-integration":400,"braintree-bus":52,"braintree-dropin":237,"braintree-utilities":373,"lodash.create":389}],404:[function(require,module,exports){ -'use strict'; - -module.exports = { - custom: require('./custom'), - dropin: require('./dropin'), - paypal: require('./paypal'), - coinbase: require('./coinbase') -}; - -},{"./coinbase":401,"./custom":402,"./dropin":403,"./paypal":405}],405:[function(require,module,exports){ -'use strict'; - -var create = require('lodash.create'); -var paypal = require('braintree-paypal'); -var utils = require('braintree-utilities'); -var constants = require('../constants'); -var Bus = require('braintree-bus'); -var convertToLegacyShippingAddress = require('../compatibility').convertToLegacyShippingAddress; -var BaseIntegration = require('./base-integration'); - -function _getLegacyCallback(options) { - if ('onSuccess' in options && utils.isFunction(options.onSuccess)) { - return options.onSuccess; - } else if ('paypal' in options && utils.isFunction(options.paypal.onSuccess)) { - return options.paypal.onSuccess; - } - - return null; -} - -function _hasRootCallback(options) { - return utils.isFunction(options[constants.ROOT_SUCCESS_CALLBACK]); -} - -function PayPalIntegration() { - var merchantConfiguration, legacyCallback, hasRootCallback, paypalIntegration; - - BaseIntegration.apply(this, arguments); - - merchantConfiguration = this.configuration.merchantConfiguration; - legacyCallback = _getLegacyCallback(merchantConfiguration); - hasRootCallback = _hasRootCallback(merchantConfiguration); - - if (legacyCallback || hasRootCallback) { - merchantConfiguration.onSuccess = utils.bind(function (payload) { - if (legacyCallback) { - legacyCallback( - payload.nonce, - payload.details.email, - convertToLegacyShippingAddress(payload.details.shippingAddress) - ); - } - - this.bus.emit(Bus.events.PAYMENT_METHOD_RECEIVED, payload); // eslint-disable-line no-invalid-this - }, this); - } - - paypalIntegration = paypal.create(this.configuration.gatewayConfiguration, merchantConfiguration, this.configuration.channel); - - this.destructor.registerFunctionForTeardown(function () { - paypalIntegration.teardown(); - }); - - this.bus.emit(Bus.events.ASYNC_DEPENDENCY_READY); -} - -PayPalIntegration.prototype = create(BaseIntegration.prototype, { - constructor: PayPalIntegration -}); - -module.exports = PayPalIntegration; - -},{"../compatibility":398,"../constants":399,"./base-integration":400,"braintree-bus":52,"braintree-paypal":345,"braintree-utilities":373,"lodash.create":389}],406:[function(require,module,exports){ -'use strict'; - -module.exports = function fallbackError(error) { - if (error.type === 'CONFIGURATION' || error.type === 'IMMEDIATE') { - throw new Error(error.message); - } else { - try { - console.error(JSON.stringify(error)); // eslint-disable-line no-console - } catch (e) { /* ignored */ } - } -}; - -},{}],407:[function(require,module,exports){ -'use strict'; - -var isFunction = require('braintree-utilities').isFunction; - -function noop() {} - -module.exports = function lookupCallbackFor(model) { - return function (callbackName, fallbackCallback) { - if (isFunction(model[callbackName])) { - return model[callbackName]; - } else if (isFunction(fallbackCallback)) { - return fallbackCallback; - } - - return noop; - }; -}; - -},{"braintree-utilities":373}],408:[function(require,module,exports){ -'use strict'; - -module.exports = function sanitizePayload(payload) { - return { - nonce: payload.nonce, - details: payload.details, - type: payload.type - }; -}; - -},{}]},{},[1])(1) -}); \ No newline at end of file diff --git a/lib/assets/javascripts/vendor/braintree-2.14.0.js b/lib/assets/javascripts/vendor/braintree-2.14.0.js new file mode 100644 index 00000000..c5c128e7 --- /dev/null +++ b/lib/assets/javascripts/vendor/braintree-2.14.0.js @@ -0,0 +1,7 @@ +!function(){function t(e,n){e instanceof t?(this.enc=e.enc,this.pos=e.pos):(this.enc=e,this.pos=n)}function e(t,e,n,i,r){this.stream=t,this.header=e,this.length=n,this.tag=i,this.sub=r}function n(t){var e,n,i="";for(e=0;e+3<=t.length;e+=3)n=parseInt(t.substring(e,e+3),16),i+=ee.charAt(n>>6)+ee.charAt(63&n);for(e+1==t.length?(n=parseInt(t.substring(e,e+1),16),i+=ee.charAt(n<<2)):e+2==t.length&&(n=parseInt(t.substring(e,e+2),16),i+=ee.charAt(n>>2)+ee.charAt((3&n)<<4));(3&i.length)>0;)i+=ne;return i}function i(t){var e,n,i,r="",o=0;for(e=0;ei||(0==o?(r+=l(i>>2),n=3&i,o=1):1==o?(r+=l(n<<2|i>>4),n=15&i,o=2):2==o?(r+=l(n),r+=l(i>>2),n=3&i,o=3):(r+=l(n<<2|i>>4),r+=l(15&i),o=0));return 1==o&&(r+=l(n<<2)),r}function r(t){var e,n=i(t),r=new Array;for(e=0;2*e=0;){var s=e*this[t++]+n[i]+r;r=Math.floor(s/67108864),n[i++]=67108863&s}return r}function u(t,e,n,i,r,o){for(var s=32767&e,a=e>>15;--o>=0;){var u=32767&this[t],c=this[t++]>>15,l=a*u+c*s;u=s*u+((32767&l)<<15)+n[i]+(1073741823&r),r=(u>>>30)+(l>>>15)+a*c+(r>>>30),n[i++]=1073741823&u}return r}function c(t,e,n,i,r,o){for(var s=16383&e,a=e>>14;--o>=0;){var u=16383&this[t],c=this[t++]>>14,l=a*u+c*s;u=s*u+((16383&l)<<14)+n[i]+r,r=(u>>28)+(l>>14)+a*c,n[i++]=268435455&u}return r}function l(t){return ue.charAt(t)}function p(t,e){var n=ce[t.charCodeAt(e)];return null==n?-1:n}function h(t){for(var e=this.t-1;e>=0;--e)t[e]=this[e];t.t=this.t,t.s=this.s}function d(t){this.t=1,this.s=0>t?-1:0,t>0?this[0]=t:-1>t?this[0]=t+this.DV:this.t=0}function f(t){var e=s();return e.fromInt(t),e}function m(t,e){var n;if(16==e)n=4;else if(8==e)n=3;else if(256==e)n=8;else if(2==e)n=1;else if(32==e)n=5;else{if(4!=e)return void this.fromRadix(t,e);n=2}this.t=0,this.s=0;for(var i=t.length,r=!1,s=0;--i>=0;){var a=8==n?255&t[i]:p(t,i);0>a?"-"==t.charAt(i)&&(r=!0):(r=!1,0==s?this[this.t++]=a:s+n>this.DB?(this[this.t-1]|=(a&(1<>this.DB-s):this[this.t-1]|=a<=this.DB&&(s-=this.DB))}8==n&&0!=(128&t[0])&&(this.s=-1,s>0&&(this[this.t-1]|=(1<0&&this[this.t-1]==t;)--this.t}function y(t){if(this.s<0)return"-"+this.negate().toString(t);var e;if(16==t)e=4;else if(8==t)e=3;else if(2==t)e=1;else if(32==t)e=5;else{if(4!=t)return this.toRadix(t);e=2}var n,i=(1<0)for(a>a)>0&&(r=!0,o=l(n));s>=0;)e>a?(n=(this[s]&(1<>(a+=this.DB-e)):(n=this[s]>>(a-=e)&i,0>=a&&(a+=this.DB,--s)),n>0&&(r=!0),r&&(o+=l(n));return r?o:"0"}function b(){var t=s();return o.ZERO.subTo(this,t),t}function v(){return this.s<0?this.negate():this}function _(t){var e=this.s-t.s;if(0!=e)return e;var n=this.t;if(e=n-t.t,0!=e)return this.s<0?-e:e;for(;--n>=0;)if(0!=(e=this[n]-t[n]))return e;return 0}function E(t){var e,n=1;return 0!=(e=t>>>16)&&(t=e,n+=16),0!=(e=t>>8)&&(t=e,n+=8),0!=(e=t>>4)&&(t=e,n+=4),0!=(e=t>>2)&&(t=e,n+=2),0!=(e=t>>1)&&(t=e,n+=1),n}function w(){return this.t<=0?0:this.DB*(this.t-1)+E(this[this.t-1]^this.s&this.DM)}function A(t,e){var n;for(n=this.t-1;n>=0;--n)e[n+t]=this[n];for(n=t-1;n>=0;--n)e[n]=0;e.t=this.t+t,e.s=this.s}function C(t,e){for(var n=t;n=0;--n)e[n+s+1]=this[n]>>r|a,a=(this[n]&o)<=0;--n)e[n]=0;e[s]=a,e.t=this.t+s+1,e.s=this.s,e.clamp()}function T(t,e){e.s=this.s;var n=Math.floor(t/this.DB);if(n>=this.t)return void(e.t=0);var i=t%this.DB,r=this.DB-i,o=(1<>i;for(var s=n+1;s>i;i>0&&(e[this.t-n-1]|=(this.s&o)<n;)i+=this[n]-t[n],e[n++]=i&this.DM,i>>=this.DB;if(t.t>=this.DB;i+=this.s}else{for(i+=this.s;n>=this.DB;i-=t.s}e.s=0>i?-1:0,-1>i?e[n++]=this.DV+i:i>0&&(e[n++]=i),e.t=n,e.clamp()}function S(t,e){var n=this.abs(),i=t.abs(),r=n.t;for(e.t=r+i.t;--r>=0;)e[r]=0;for(r=0;r=0;)t[n]=0;for(n=0;n=e.DV&&(t[n+e.t]-=e.DV,t[n+e.t+1]=1)}t.t>0&&(t[t.t-1]+=e.am(n,e[n],t,2*n,0,1)),t.s=0,t.clamp()}function I(t,e,n){var i=t.abs();if(!(i.t<=0)){var r=this.abs();if(r.t0?(i.lShiftTo(l,a),r.lShiftTo(l,n)):(i.copyTo(a),r.copyTo(n));var p=a.t,h=a[p-1];if(0!=h){var d=h*(1<1?a[p-2]>>this.F2:0),f=this.FV/d,m=(1<=0&&(n[n.t++]=1,n.subTo(v,n)),o.ONE.dlShiftTo(p,v),v.subTo(a,a);a.t=0;){var _=n[--y]==h?this.DM:Math.floor(n[y]*f+(n[y-1]+g)*m);if((n[y]+=a.am(0,_,n,b,0,p))<_)for(a.dlShiftTo(b,v),n.subTo(v,n);n[y]<--_;)n.subTo(v,n)}null!=e&&(n.drShiftTo(p,e),u!=c&&o.ZERO.subTo(e,e)),n.t=p,n.clamp(),l>0&&n.rShiftTo(l,n),0>u&&o.ZERO.subTo(n,n)}}}function P(t){var e=s();return this.abs().divRemTo(t,null,e),this.s<0&&e.compareTo(o.ZERO)>0&&t.subTo(e,e),e}function R(t){this.m=t}function D(t){return t.s<0||t.compareTo(this.m)>=0?t.mod(this.m):t}function M(t){return t}function U(t){t.divRemTo(this.m,null,t)}function k(t,e,n){t.multiplyTo(e,n),this.reduce(n)}function F(t,e){t.squareTo(e),this.reduce(e)}function L(){if(this.t<1)return 0;var t=this[0];if(0==(1&t))return 0;var e=3&t;return e=e*(2-(15&t)*e)&15,e=e*(2-(255&t)*e)&255,e=e*(2-((65535&t)*e&65535))&65535,e=e*(2-t*e%this.DV)%this.DV,e>0?this.DV-e:-e}function j(t){this.m=t,this.mp=t.invDigit(),this.mpl=32767&this.mp,this.mph=this.mp>>15,this.um=(1<0&&this.m.subTo(e,e),e}function H(t){var e=s();return t.copyTo(e),this.reduce(e),e}function V(t){for(;t.t<=this.mt2;)t[t.t++]=0;for(var e=0;e>15)*this.mpl&this.um)<<15)&t.DM;for(n=e+this.m.t,t[n]+=this.m.am(0,i,t,e,0,this.m.t);t[n]>=t.DV;)t[n]-=t.DV,t[++n]++}t.clamp(),t.drShiftTo(this.m.t,t),t.compareTo(this.m)>=0&&t.subTo(this.m,t)}function z(t,e){t.squareTo(e),this.reduce(e)}function Y(t,e,n){t.multiplyTo(e,n),this.reduce(n)}function G(){return 0==(this.t>0?1&this[0]:this.s)}function W(t,e){if(t>4294967295||1>t)return o.ONE;var n=s(),i=s(),r=e.convert(this),a=E(t)-1;for(r.copyTo(n);--a>=0;)if(e.sqrTo(n,i),(t&1<0)e.mulTo(i,r,n);else{var u=n;n=i,i=u}return e.revert(n)}function q(t,e){var n;return n=256>t||e.isEven()?new R(e):new j(e),this.exp(t,n)}function Q(t,e){return new o(t,e)}function K(t,e){if(e=0&&e>0;){var r=t.charCodeAt(i--);128>r?n[--e]=r:r>127&&2048>r?(n[--e]=63&r|128,n[--e]=r>>6|192):(n[--e]=63&r|128,n[--e]=r>>6&63|128,n[--e]=r>>12|224)}n[--e]=0;for(var s=0,a=0,u=0;e>2;)0==u&&(a=le.random.randomWords(1,0)[0]),s=a>>u&255,u=(u+8)%32,0!=s&&(n[--e]=s);return n[--e]=2,n[--e]=0,new o(n)}function $(){this.n=null,this.e=0,this.d=null,this.p=null,this.q=null,this.dmp1=null,this.dmq1=null,this.coeff=null}function Z(t,e){if(!(null!=t&&null!=e&&t.length>0&&e.length>0))throw new Error("Invalid RSA public key");this.n=Q(t,16),this.e=parseInt(e,16)}function X(t){return t.modPowInt(this.e,this.n)}function J(t){var e=K(t,this.n.bitLength()+7>>3);if(null==e)return null;var n=this.doPublic(e);if(null==n)return null;var i=n.toString(16);return 0==(1&i.length)?i:"0"+i}t.prototype.get=function(t){if(void 0==t&&(t=this.pos++),t>=this.enc.length)throw"Requesting byte offset "+t+" on a stream of length "+this.enc.length;return this.enc[t]},t.prototype.hexDigits="0123456789ABCDEF",t.prototype.hexByte=function(t){return this.hexDigits.charAt(t>>4&15)+this.hexDigits.charAt(15&t)},t.prototype.hexDump=function(t,e){for(var n="",i=t;e>i;++i)switch(n+=this.hexByte(this.get(i)),15&i){case 7:n+=" ";break;case 15:n+="\n";break;default:n+=" "}return n},t.prototype.parseStringISO=function(t,e){for(var n="",i=t;e>i;++i)n+=String.fromCharCode(this.get(i));return n},t.prototype.parseStringUTF=function(t,e){for(var n="",i=0,r=t;e>r;){var i=this.get(r++);n+=String.fromCharCode(128>i?i:i>191&&224>i?(31&i)<<6|63&this.get(r++):(15&i)<<12|(63&this.get(r++))<<6|63&this.get(r++))}return n},t.prototype.reTime=/^((?:1[89]|2\d)?\d\d)(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])([01]\d|2[0-3])(?:([0-5]\d)(?:([0-5]\d)(?:[.,](\d{1,3}))?)?)?(Z|[-+](?:[0]\d|1[0-2])([0-5]\d)?)?$/,t.prototype.parseTime=function(t,e){var n=this.parseStringISO(t,e),i=this.reTime.exec(n);return i?(n=i[1]+"-"+i[2]+"-"+i[3]+" "+i[4],i[5]&&(n+=":"+i[5],i[6]&&(n+=":"+i[6],i[7]&&(n+="."+i[7]))),i[8]&&(n+=" UTC","Z"!=i[8]&&(n+=i[8],i[9]&&(n+=":"+i[9]))),n):"Unrecognized time: "+n},t.prototype.parseInteger=function(t,e){var n=e-t;if(n>4){n<<=3;var i=this.get(t);if(0==i)n-=8;else for(;128>i;)i<<=1,--n;return"("+n+" bit)"}for(var r=0,o=t;e>o;++o)r=r<<8|this.get(o);return r},t.prototype.parseBitString=function(t,e){var n=this.get(t),i=(e-t-1<<3)-n,r="("+i+" bit)";if(20>=i){var o=n;r+=" ";for(var s=e-1;s>t;--s){for(var a=this.get(s),u=o;8>u;++u)r+=a>>u&1?"1":"0";o=0}}return r},t.prototype.parseOctetString=function(t,e){var n=e-t,i="("+n+" byte) ";n>20&&(e=t+20);for(var r=t;e>r;++r)i+=this.hexByte(this.get(r));return n>20&&(i+=String.fromCharCode(8230)),i},t.prototype.parseOID=function(t,e){for(var n,i=0,r=0,o=t;e>o;++o){var s=this.get(o);i=i<<7|127&s,r+=7,128&s||(void 0==n?n=parseInt(i/40)+"."+i%40:n+="."+(r>=31?"bigint":i),i=r=0),n+=String.fromCharCode()}return n},e.prototype.typeName=function(){if(void 0==this.tag)return"unknown";var t=this.tag>>6,e=(this.tag>>5&1,31&this.tag);switch(t){case 0:switch(e){case 0:return"EOC";case 1:return"BOOLEAN";case 2:return"INTEGER";case 3:return"BIT_STRING";case 4:return"OCTET_STRING";case 5:return"NULL";case 6:return"OBJECT_IDENTIFIER";case 7:return"ObjectDescriptor";case 8:return"EXTERNAL";case 9:return"REAL";case 10:return"ENUMERATED";case 11:return"EMBEDDED_PDV";case 12:return"UTF8String";case 16:return"SEQUENCE";case 17:return"SET";case 18:return"NumericString";case 19:return"PrintableString";case 20:return"TeletexString";case 21:return"VideotexString";case 22:return"IA5String";case 23:return"UTCTime";case 24:return"GeneralizedTime";case 25:return"GraphicString";case 26:return"VisibleString";case 27:return"GeneralString";case 28:return"UniversalString";case 30:return"BMPString";default:return"Universal_"+e.toString(16)}case 1:return"Application_"+e.toString(16);case 2:return"["+e+"]";case 3:return"Private_"+e.toString(16)}},e.prototype.content=function(){if(void 0==this.tag)return null;var t=this.tag>>6;if(0!=t)return null==this.sub?null:"("+this.sub.length+")";var e=31&this.tag,n=this.posContent(),i=Math.abs(this.length);switch(e){case 1:return 0==this.stream.get(n)?"false":"true";case 2:return this.stream.parseInteger(n,n+i);case 3:return this.sub?"("+this.sub.length+" elem)":this.stream.parseBitString(n,n+i);case 4:return this.sub?"("+this.sub.length+" elem)":this.stream.parseOctetString(n,n+i);case 6:return this.stream.parseOID(n,n+i);case 16:case 17:return"("+this.sub.length+" elem)";case 12:return this.stream.parseStringUTF(n,n+i);case 18:case 19:case 20:case 21:case 22:case 26:return this.stream.parseStringISO(n,n+i);case 23:case 24:return this.stream.parseTime(n,n+i)}return null},e.prototype.toString=function(){return this.typeName()+"@"+this.stream.pos+"[header:"+this.header+",length:"+this.length+",sub:"+(null==this.sub?"null":this.sub.length)+"]"},e.prototype.print=function(t){if(void 0==t&&(t=""),document.writeln(t+this),null!=this.sub){t+=" ";for(var e=0,n=this.sub.length;n>e;++e)this.sub[e].print(t)}},e.prototype.toPrettyString=function(t){void 0==t&&(t="");var e=t+this.typeName()+" @"+this.stream.pos;if(this.length>=0&&(e+="+"),e+=this.length,32&this.tag?e+=" (constructed)":3!=this.tag&&4!=this.tag||null==this.sub||(e+=" (encapsulates)"),e+="\n",null!=this.sub){t+=" ";for(var n=0,i=this.sub.length;i>n;++n)e+=this.sub[n].toPrettyString(t)}return e},e.prototype.posStart=function(){return this.stream.pos},e.prototype.posContent=function(){return this.stream.pos+this.header},e.prototype.posEnd=function(){return this.stream.pos+this.header+Math.abs(this.length)},e.decodeLength=function(t){var e=t.get(),n=127&e;if(n==e)return n;if(n>3)throw"Length over 24 bits not supported at position "+(t.pos-1);if(0==n)return-1;e=0;for(var i=0;n>i;++i)e=e<<8|t.get();return e},e.hasContent=function(n,i,r){if(32&n)return!0;if(3>n||n>4)return!1;var o=new t(r);3==n&&o.get();var s=o.get();if(s>>6&1)return!1;try{var a=e.decodeLength(o);return o.pos-r.pos+a==i}catch(u){return!1}},e.decode=function(n){n instanceof t||(n=new t(n,0));var i=new t(n),r=n.get(),o=e.decodeLength(n),s=n.pos-i.pos,a=null;if(e.hasContent(r,o,n)){var u=n.pos;if(3==r&&n.get(),a=[],o>=0){for(var c=u+o;n.pos=ae;++ae)ce[se++]=ae;for(se="a".charCodeAt(0),ae=10;36>ae;++ae)ce[se++]=ae;for(se="A".charCodeAt(0),ae=10;36>ae;++ae)ce[se++]=ae;R.prototype.convert=D,R.prototype.revert=M,R.prototype.reduce=U,R.prototype.mulTo=k,R.prototype.sqrTo=F,j.prototype.convert=B,j.prototype.revert=H,j.prototype.reduce=V,j.prototype.mulTo=Y,j.prototype.sqrTo=z,o.prototype.copyTo=h,o.prototype.fromInt=d,o.prototype.fromString=m,o.prototype.clamp=g,o.prototype.dlShiftTo=A,o.prototype.drShiftTo=C,o.prototype.lShiftTo=N,o.prototype.rShiftTo=T,o.prototype.subTo=O,o.prototype.multiplyTo=S,o.prototype.squareTo=x,o.prototype.divRemTo=I,o.prototype.invDigit=L,o.prototype.isEven=G,o.prototype.exp=W,o.prototype.toString=y,o.prototype.negate=b,o.prototype.abs=v,o.prototype.compareTo=_,o.prototype.bitLength=w,o.prototype.mod=P,o.prototype.modPowInt=q,o.ZERO=f(0),o.ONE=f(1),$.prototype.doPublic=X,$.prototype.setPublic=Z,$.prototype.encrypt=J;var le={cipher:{},hash:{},keyexchange:{},mode:{},misc:{},codec:{},exception:{corrupt:function(t){this.toString=function(){return"CORRUPT: "+this.message},this.message=t},invalid:function(t){this.toString=function(){return"INVALID: "+this.message},this.message=t},bug:function(t){this.toString=function(){return"BUG: "+this.message},this.message=t},notReady:function(t){this.toString=function(){return"NOT READY: "+this.message},this.message=t}}};"undefined"!=typeof module&&module.exports&&(module.exports=le),le.cipher.aes=function(t){this._tables[0][0][0]||this._precompute();var e,n,i,r,o,s=this._tables[0][4],a=this._tables[1],u=t.length,c=1;if(4!==u&&6!==u&&8!==u)throw new le.exception.invalid("invalid aes key size");for(this._key=[r=t.slice(0),o=[]],e=u;4*u+28>e;e++)i=r[e-1],(e%u===0||8===u&&e%u===4)&&(i=s[i>>>24]<<24^s[i>>16&255]<<16^s[i>>8&255]<<8^s[255&i],e%u===0&&(i=i<<8^i>>>24^c<<24,c=c<<1^283*(c>>7))),r[e]=r[e-u]^i;for(n=0;e;n++,e--)i=r[3&n?e:e-4],o[n]=4>=e||4>n?i:a[0][s[i>>>24]]^a[1][s[i>>16&255]]^a[2][s[i>>8&255]]^a[3][s[255&i]]},le.cipher.aes.prototype={encrypt:function(t){return this._crypt(t,0)},decrypt:function(t){return this._crypt(t,1)},_tables:[[[],[],[],[],[]],[[],[],[],[],[]]],_precompute:function(){var t,e,n,i,r,o,s,a,u,c=this._tables[0],l=this._tables[1],p=c[4],h=l[4],d=[],f=[];for(t=0;256>t;t++)f[(d[t]=t<<1^283*(t>>7))^t]=t;for(e=n=0;!p[e];e^=i||1,n=f[n]||1)for(s=n^n<<1^n<<2^n<<3^n<<4,s=s>>8^255&s^99,p[e]=s,h[s]=e,o=d[r=d[i=d[e]]],u=16843009*o^65537*r^257*i^16843008*e,a=257*d[s]^16843008*s,t=0;4>t;t++)c[t][e]=a=a<<24^a>>>8,l[t][s]=u=u<<24^u>>>8;for(t=0;5>t;t++)c[t]=c[t].slice(0),l[t]=l[t].slice(0)},_crypt:function(t,e){if(4!==t.length)throw new le.exception.invalid("invalid aes block size");var n,i,r,o,s=this._key[e],a=t[0]^s[0],u=t[e?3:1]^s[1],c=t[2]^s[2],l=t[e?1:3]^s[3],p=s.length/4-2,h=4,d=[0,0,0,0],f=this._tables[e],m=f[0],g=f[1],y=f[2],b=f[3],v=f[4];for(o=0;p>o;o++)n=m[a>>>24]^g[u>>16&255]^y[c>>8&255]^b[255&l]^s[h],i=m[u>>>24]^g[c>>16&255]^y[l>>8&255]^b[255&a]^s[h+1],r=m[c>>>24]^g[l>>16&255]^y[a>>8&255]^b[255&u]^s[h+2],l=m[l>>>24]^g[a>>16&255]^y[u>>8&255]^b[255&c]^s[h+3],h+=4,a=n,u=i,c=r;for(o=0;4>o;o++)d[e?3&-o:o]=v[a>>>24]<<24^v[u>>16&255]<<16^v[c>>8&255]<<8^v[255&l]^s[h++],n=a,a=u,u=c,c=l,l=n;return d}},le.bitArray={bitSlice:function(t,e,n){return t=le.bitArray._shiftRight(t.slice(e/32),32-(31&e)).slice(1),void 0===n?t:le.bitArray.clamp(t,n-e)},extract:function(t,e,n){var i,r=Math.floor(-e-n&31);return i=-32&(e+n-1^e)?t[e/32|0]<<32-r^t[e/32+1|0]>>>r:t[e/32|0]>>>r,i&(1<0&&e&&(t[n-1]=le.bitArray.partial(e,t[n-1]&2147483648>>e-1,1)),t},partial:function(t,e,n){return 32===t?e:(n?0|e:e<<32-t)+1099511627776*t},getPartial:function(t){return Math.round(t/1099511627776)||32},equal:function(t,e){if(le.bitArray.bitLength(t)!==le.bitArray.bitLength(e))return!1;var n,i=0;for(n=0;n=32;e-=32)i.push(n),n=0;if(0===e)return i.concat(t);for(r=0;r>>e),n=t[r]<<32-e;return s=t.length?t[t.length-1]:0,o=le.bitArray.getPartial(s),i.push(le.bitArray.partial(e+o&31,e+o>32?n:i.pop(),1)),i},_xor4:function(t,e){return[t[0]^e[0],t[1]^e[1],t[2]^e[2],t[3]^e[3]]}},le.codec.hex={fromBits:function(t){var e,n="";for(e=0;ee;e++)0===(3&e)&&(n=t[e/4]),i+=String.fromCharCode(n>>>24),n<<=8;return decodeURIComponent(escape(i))},toBits:function(t){t=unescape(encodeURIComponent(t));var e,n=[],i=0;for(e=0;e>>o)>>>26),6>o?(a=t[i]<<6-o,o+=26,i++):(a<<=6,o-=6);for(;3&r.length&&!e;)r+="=";return r},toBits:function(t,e){t=t.replace(/\s|=/g,"");var n,i,r=[],o=0,s=le.codec.base64._chars,a=0;for(e&&(s=s.substr(0,62)+"-_"),n=0;ni)throw new le.exception.invalid("this isn't base64!");o>26?(o-=26,r.push(a^i>>>o),a=i<<32-o):(o+=6,a^=i<<32-o)}return 56&o&&r.push(le.bitArray.partial(56&o,a,1)),r}},le.codec.base64url={fromBits:function(t){return le.codec.base64.fromBits(t,1,1)},toBits:function(t){return le.codec.base64.toBits(t,1)}},void 0===le.beware&&(le.beware={}),le.beware["CBC mode is dangerous because it doesn't protect message integrity."]=function(){le.mode.cbc={name:"cbc",encrypt:function(t,e,n,i){if(i&&i.length)throw new le.exception.invalid("cbc can't authenticate data");if(128!==le.bitArray.bitLength(n))throw new le.exception.invalid("cbc iv must be 128 bits");var r,o=le.bitArray,s=o._xor4,a=o.bitLength(e),u=0,c=[];if(7&a)throw new le.exception.invalid("pkcs#5 padding only works for multiples of a byte");for(r=0;a>=u+128;r+=4,u+=128)n=t.encrypt(s(n,e.slice(r,r+4))),c.splice(r,0,n[0],n[1],n[2],n[3]);return a=16843009*(16-(a>>3&15)),n=t.encrypt(s(n,o.concat(e,[a,a,a,a]).slice(r,r+4))),c.splice(r,0,n[0],n[1],n[2],n[3]),c},decrypt:function(t,e,n,i){if(i&&i.length)throw new le.exception.invalid("cbc can't authenticate data");if(128!==le.bitArray.bitLength(n))throw new le.exception.invalid("cbc iv must be 128 bits");if(127&le.bitArray.bitLength(e)||!e.length)throw new le.exception.corrupt("cbc ciphertext must be a positive multiple of the block size");var r,o,s,a=le.bitArray,u=a._xor4,c=[];for(i=i||[],r=0;r16)throw new le.exception.corrupt("pkcs#5 padding corrupt");if(s=16843009*o,!a.equal(a.bitSlice([s,s,s,s],0,8*o),a.bitSlice(c,32*c.length-8*o,32*c.length)))throw new le.exception.corrupt("pkcs#5 padding corrupt");return a.bitSlice(c,0,32*c.length-8*o)}}},le.misc.hmac=function(t,e){this._hash=e=e||le.hash.sha256;var n,i=[[],[]],r=e.prototype.blockSize/32;for(this._baseHash=[new e,new e],t.length>r&&(t=e.hash(t)),n=0;r>n;n++)i[0][n]=909522486^t[n],i[1][n]=1549556828^t[n];this._baseHash[0].update(i[0]),this._baseHash[1].update(i[1])},le.misc.hmac.prototype.encrypt=le.misc.hmac.prototype.mac=function(t,e){var n=new this._hash(this._baseHash[0]).update(t,e).finalize();return new this._hash(this._baseHash[1]).update(n).finalize()},le.hash.sha256=function(t){this._key[0]||this._precompute(),t?(this._h=t._h.slice(0),this._buffer=t._buffer.slice(0),this._length=t._length):this.reset()},le.hash.sha256.hash=function(t){return(new le.hash.sha256).update(t).finalize()},le.hash.sha256.prototype={blockSize:512,reset:function(){return this._h=this._init.slice(0),this._buffer=[],this._length=0,this},update:function(t){"string"==typeof t&&(t=le.codec.utf8String.toBits(t));var e,n=this._buffer=le.bitArray.concat(this._buffer,t),i=this._length,r=this._length=i+le.bitArray.bitLength(t);for(e=512+i&-512;r>=e;e+=512)this._block(n.splice(0,16));return this},finalize:function(){var t,e=this._buffer,n=this._h;for(e=le.bitArray.concat(e,[le.bitArray.partial(1,1)]),t=e.length+2;15&t;t++)e.push(0);for(e.push(Math.floor(this._length/4294967296)),e.push(0|this._length);e.length;)this._block(e.splice(0,16));return this.reset(),n},_init:[],_key:[],_precompute:function(){function t(t){return 4294967296*(t-Math.floor(t))|0}var e,n=0,i=2;t:for(;64>n;i++){for(e=2;i>=e*e;e++)if(i%e===0)continue t;8>n&&(this._init[n]=t(Math.pow(i,.5))),this._key[n]=t(Math.pow(i,1/3)),n++}},_block:function(t){var e,n,i,r,o=t.slice(0),s=this._h,a=this._key,u=s[0],c=s[1],l=s[2],p=s[3],h=s[4],d=s[5],f=s[6],m=s[7];for(e=0;64>e;e++)16>e?n=o[e]:(i=o[e+1&15],r=o[e+14&15],n=o[15&e]=(i>>>7^i>>>18^i>>>3^i<<25^i<<14)+(r>>>17^r>>>19^r>>>10^r<<15^r<<13)+o[15&e]+o[e+9&15]|0),n=n+m+(h>>>6^h>>>11^h>>>25^h<<26^h<<21^h<<7)+(f^h&(d^f))+a[e],m=f,f=d,d=h,h=p+n|0,p=l,l=c,c=u,u=n+(c&l^p&(c^l))+(c>>>2^c>>>13^c>>>22^c<<30^c<<19^c<<10)|0;s[0]=s[0]+u|0,s[1]=s[1]+c|0,s[2]=s[2]+l|0,s[3]=s[3]+p|0,s[4]=s[4]+h|0,s[5]=s[5]+d|0,s[6]=s[6]+f|0,s[7]=s[7]+m|0}},le.random={randomWords:function(t,e){var n,i,r=[],o=this.isReady(e);if(o===this._NOT_READY)throw new le.exception.notReady("generator isn't seeded");for(o&this._REQUIRES_RESEED&&this._reseedFromPools(!(o&this._READY)),n=0;t>n;n+=4)(n+1)%this._MAX_WORDS_PER_BURST===0&&this._gate(),i=this._gen4words(),r.push(i[0],i[1],i[2],i[3]);return this._gate(),r.slice(0,t)},setDefaultParanoia:function(t){this._defaultParanoia=t},addEntropy:function(t,e,n){n=n||"user";var i,r,o,s=(new Date).valueOf(),a=this._robins[n],u=this.isReady(),c=0;switch(i=this._collectorIds[n],void 0===i&&(i=this._collectorIds[n]=this._collectorIdNext++),void 0===a&&(a=this._robins[n]=0),this._robins[n]=(this._robins[n]+1)%this._pools.length,typeof t){case"number":void 0===e&&(e=1),this._pools[a].update([i,this._eventId++,1,e,s,1,0|t]);break;case"object":var l=Object.prototype.toString.call(t);if("[object Uint32Array]"===l){for(o=[],r=0;r0;)e++,o>>>=1;this._pools[a].update([i,this._eventId++,2,e,s,t.length].concat(t))}break;case"string":void 0===e&&(e=t.length),this._pools[a].update([i,this._eventId++,3,e,s,t.length]),this._pools[a].update(t);break;default:c=1}if(c)throw new le.exception.bug("random: addEntropy only supports number, array of numbers or string");this._poolEntropy[a]+=e,this._poolStrength+=e,u===this._NOT_READY&&(this.isReady()!==this._NOT_READY&&this._fireEvent("seeded",Math.max(this._strength,this._poolStrength)),this._fireEvent("progress",this.getProgress()))},isReady:function(t){var e=this._PARANOIA_LEVELS[void 0!==t?t:this._defaultParanoia];return this._strength&&this._strength>=e?this._poolEntropy[0]>this._BITS_PER_RESEED&&(new Date).valueOf()>this._nextReseed?this._REQUIRES_RESEED|this._READY:this._READY:this._poolStrength>=e?this._REQUIRES_RESEED|this._NOT_READY:this._NOT_READY},getProgress:function(t){var e=this._PARANOIA_LEVELS[t?t:this._defaultParanoia];return this._strength>=e?1:this._poolStrength>e?1:this._poolStrength/e},startCollectors:function(){if(!this._collectorsStarted){if(window.addEventListener)window.addEventListener("load",this._loadTimeCollector,!1),window.addEventListener("mousemove",this._mouseCollector,!1);else{if(!document.attachEvent)throw new le.exception.bug("can't attach event");document.attachEvent("onload",this._loadTimeCollector),document.attachEvent("onmousemove",this._mouseCollector)}this._collectorsStarted=!0}},stopCollectors:function(){this._collectorsStarted&&(window.removeEventListener?(window.removeEventListener("load",this._loadTimeCollector,!1),window.removeEventListener("mousemove",this._mouseCollector,!1)):window.detachEvent&&(window.detachEvent("onload",this._loadTimeCollector),window.detachEvent("onmousemove",this._mouseCollector)),this._collectorsStarted=!1)},addEventListener:function(t,e){this._callbacks[t][this._callbackI++]=e},removeEventListener:function(t,e){var n,i,r=this._callbacks[t],o=[];for(i in r)r.hasOwnProperty(i)&&r[i]===e&&o.push(i);for(n=0;nt&&(this._counter[t]=this._counter[t]+1|0,!this._counter[t]);t++);return this._cipher.encrypt(this._counter)},_gate:function(){this._key=this._gen4words().concat(this._gen4words()),this._cipher=new le.cipher.aes(this._key)},_reseed:function(t){this._key=le.hash.sha256.hash(this._key.concat(t)),this._cipher=new le.cipher.aes(this._key);for(var e=0;4>e&&(this._counter[e]=this._counter[e]+1|0,!this._counter[e]);e++);},_reseedFromPools:function(t){var e,n=[],i=0;for(this._nextReseed=n[0]=(new Date).valueOf()+this._MILLISECONDS_PER_RESEED,e=0;16>e;e++)n.push(4294967296*Math.random()|0);for(e=0;e=1<this._strength&&(this._strength=i),this._reseedCount++,this._reseed(n)},_mouseCollector:function(t){var e=t.x||t.clientX||t.offsetX||0,n=t.y||t.clientY||t.offsetY||0;le.random.addEntropy([e,n],2,"mouse")},_loadTimeCollector:function(){le.random.addEntropy((new Date).valueOf(),2,"loadtime")},_fireEvent:function(t,e){var n,i=le.random._callbacks[t],r=[];for(n in i)i.hasOwnProperty(n)&&r.push(i[n]);for(n=0;n0&&(i=i.concat(c(e)));return i},l=function(){var n,i,o,s,a,c;try{a=r(t),n=e.decode(a)}catch(l){throw"Invalid encryption key. Please use the key labeled 'Client-Side Encryption Key'"}if(o=u(n),2!==o.length)throw"Invalid encryption key. Please use the key labeled 'Client-Side Encryption Key'";return s=o[0],i=o[1],c=new $,c.setPublic(s,i),c},p=function(){return{key:le.random.randomWords(8,0),sign:function(t){var e=new le.misc.hmac(this.key,le.hash.sha256),n=e.encrypt(t);return le.codec.base64.fromBits(n)}}};i.encrypt=function(t){var e=l(),r=pe.generateAesKey(),o=p(),s=r.encrypt(t),a=o.sign(le.codec.base64.toBits(s)),u=le.bitArray.concat(r.key,o.key),c=le.codec.base64.fromBits(u),h=e.encrypt(c),d="$bt4|javascript_"+i.version.replace(/\./g,"_")+"$",f=null;return h&&(f=n(h)),d+f+"$"+s+"$"+a},i.encryptForm=function(t){var e,n,r,u,l,p;for(t=a(t),p=c(t);o.length>0;){try{t.removeChild(o[0])}catch(h){}o.splice(0,1)}for(l=0;le;e++)i.push(new p(t.paymentMethods[e]));return i},t,this.requestTimeout)},r.prototype.tokenizeCoinbase=function(t,e){t.options={validate:!1},this.addCoinbase(t,function(t,n){t?e(t,null):n&&n.nonce?e(t,n):e("Unable to tokenize coinbase account.",null)})},r.prototype.tokenizePayPalAccount=function(t,e){t.options={validate:!1},this.addPayPalAccount(t,function(t,n){t?e(t,null):n&&n.nonce?e(null,n):e("Unable to tokenize paypal account.",null)})},r.prototype.tokenizeCard=function(t,e){t.options={validate:!1},this.addCreditCard(t,function(t,n){n&&n.nonce?e(t,n.nonce,{type:n.type,details:n.details}):e("Unable to tokenize card.",null)})},r.prototype.lookup3DS=function(t,e){var n=u.joinUrlFragments([this.clientApiUrl,"v1/payment_methods",t.nonce,"three_d_secure/lookup"]),i=u.mergeOptions(this.attrs,{amount:t.amount});this.driver.post(n,i,function(t){return t},e,this.requestTimeout)},r.prototype.createSEPAMandate=function(t,e){var n=u.mergeOptions(this.attrs,{sepaMandate:t});this.driver.post(u.joinUrlFragments([this.clientApiUrl,"v1","sepa_mandates.json"]),n,function(t){return{sepaMandate:new c(t.europeBankAccounts[0].sepaMandates[0]),sepaBankAccount:new l(t.europeBankAccounts[0])}},e,this.requestTimeout)},r.prototype.getSEPAMandate=function(t,e){var n=u.mergeOptions(this.attrs,t);this.driver.get(u.joinUrlFragments([this.clientApiUrl,"v1","sepa_mandates.json"]),n,function(t){return{sepaMandate:new c(t.sepaMandates[0])}},e,this.requestTimeout)},r.prototype.addCoinbase=function(t,e){var n;delete t.share,n=u.mergeOptions(this.attrs,{coinbaseAccount:t,_meta:{integration:this.integration||"custom",source:"coinbase"}}),this.driver.post(u.joinUrlFragments([this.clientApiUrl,"v1","payment_methods/coinbase_accounts"]),n,function(t){return new h(t.coinbaseAccounts[0])},e,this.requestTimeout)},r.prototype.addPayPalAccount=function(t,e){var n;delete t.share,n=u.mergeOptions(this.attrs,{paypalAccount:t,_meta:{integration:this.integration||"paypal",source:"paypal"}}),this.driver.post(u.joinUrlFragments([this.clientApiUrl,"v1","payment_methods","paypal_accounts"]),n,function(t){return new d(t.paypalAccounts[0])},e,this.requestTimeout)},r.prototype.addCreditCard=function(t,e){var n,i,r=t.share;delete t.share,i=f(t),n=u.mergeOptions(this.attrs,{share:r,creditCard:i,_meta:{integration:this.integration||"custom",source:"form"}}),this.driver.post(u.joinUrlFragments([this.clientApiUrl,"v1","payment_methods/credit_cards"]),n,function(t){return new p(t.creditCards[0])},e,this.requestTimeout)},r.prototype.sendAnalyticsEvents=function(t,e){var i,r,o=this.analyticsUrl,s=[];if(t=u.isArray(t)?t:[t],!o)return void(e&&e.apply(null,[null,{}]));for(r in t)t.hasOwnProperty(r)&&s.push({kind:t[r]});i=u.mergeOptions(this.attrs,{braintree_library_version:this.sdkVersion,analytics:s,_meta:{merchantAppId:this.merchantAppId,platform:"web",platformVersion:n.navigator.userAgent,integrationType:this.integration,sdkVersion:this.sdkVersion}}),this.driver.post(o,i,function(t){return t},e,y.ANALYTICS_TIMEOUT_MS)},r.prototype.decryptBrowserswitchPayload=function(t,e){var n=u.mergeOptions(this.attrs,{asymmetric_encrypted_payload:t}),i=u.joinUrlFragments([this.clientApiUrl,"/v1/paypal_browser_switch/decrypt"]);this.driver.post(i,n,function(t){return t},e,this.requestTimeout)},r.prototype.encryptBrowserswitchReturnPayload=function(t,e,n){var i=u.mergeOptions(this.attrs,{payload:t,aesKey:e}),r=u.joinUrlFragments([this.clientApiUrl,"/v1/paypal_browser_switch/encrypt"]);this.driver.post(r,i,function(t){return t},n,this.requestTimeout)},r.prototype.exchangePaypalTokenForConsentCode=function(t,e){var n=u.mergeOptions(this.attrs,t);this.attrs.merchantAccountId&&(n.merchant_account_id=this.attrs.merchantAccountId);var i=u.joinUrlFragments([this.clientApiUrl,"/v1/paypal_account_service/merchant_consent"]);this.driver.post(i,n,function(t){return t},e,this.requestTimeout)},r.prototype.getAmexRewardsBalance=function(t,e){var n=u.mergeOptions(this.attrs,t);n.nonce&&(n.payment_method_nonce=n.nonce,delete n.nonce),this.driver.get(u.joinUrlFragments([this.clientApiUrl,"v1/payment_methods/amex_rewards_balance"]),n,function(t){return t},e,this.requestTimeout)},e.exports=r}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./coinbase-account":3,"./constants":4,"./credit-card":5,"./europe-bank-account":6,"./normalize-api-fields":8,"./parse-client-token":9,"./paypal-account":10,"./request/choose-driver":13,"./sepa-mandate":18,"./should-enable-cors":19,"./util":20,"braintree-3ds":29,"braintree-utilities":43}],3:[function(t,e){"use strict";function n(t){var e,n;for(e=0;e>4&3,l=(15&s)<<4|a>>2&15,p=(3&a)<<6|63&u;i+=String.fromCharCode(c)+(l?String.fromCharCode(l):"")+(p?String.fromCharCode(p):"")}while(r=400||0===a?o.call(null,h||{errors:l.errors.UNKNOWN_ERROR},null):a>0&&o.call(null,null,r(h)))}:(d.onload=function(){o.call(null,null,r(c(d.responseText)))},d.onerror=function(){o.call(null,d.responseText,null)},d.onprogress=function(){},d.ontimeout=function(){o.call(null,{errors:l.errors.UNKNOWN_ERROR},null)}),d.open(t,e,!0),d.timeout=null==s?6e4:s,p&&"POST"===t&&d.setRequestHeader("Content-Type","application/json"),setTimeout(function(){d.send(u(t,n))},0)}var a=t("../util"),u=t("./prep-body"),c=t("./parse-body"),l=t("../constants"),p=n.XMLHttpRequest&&"withCredentials"in new n.XMLHttpRequest;e.exports={get:r,post:o}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../constants":4,"../util":20,"./parse-body":16,"./prep-body":17}],13:[function(t,e){"use strict";function n(t){var e=o.getUserAgent(),n=!(o.isHTTP()&&/(MSIE\s(8|9))|(Phantom)/.test(e));return t=t||{},t.enableCORS&&n?r:i}var i=t("./jsonp-driver"),r=t("./ajax-driver"),o=t("../util");e.exports=n},{"../util":20,"./ajax-driver":12,"./jsonp-driver":14}],14:[function(t,e){"use strict";function n(t,e){return t.status>=400?[t,null]:[null,e(t)]}function i(){}function r(t,e,r,o,s,a){var l;s=s||i,null==a&&(a=6e4),l=o(t,e,function(t,e){c[e]&&(clearTimeout(c[e]),s.apply(null,n(t,function(t){return r(t)})))}),"number"==typeof a?c[l]=setTimeout(function(){c[l]=null,s.apply(null,[{errors:u.errors.UNKNOWN_ERROR},null])},a):s.apply(null,[{errors:u.errors.INVALID_TIMEOUT},null])}function o(t,e,n,i,o){e._method="POST",r(t,e,n,a.get,i,o)}function s(t,e,n,i,o){r(t,e,n,a.get,i,o)}var a=t("./jsonp"),u=t("../constants"),c=[];e.exports={get:s,post:o}},{"../constants":4,"./jsonp":15}],15:[function(t,e){(function(n){"use strict";function i(t,e){var n=document.createElement("script"),i=!1;n.src=t,n.async=!0;var r=e||c.error;"function"==typeof r&&(n.onerror=function(e){r({url:t,event:e})}),n.onload=n.onreadystatechange=function(){i||this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState||(i=!0,n.onload=n.onreadystatechange=null,n&&n.parentNode&&n.parentNode.removeChild(n))},s||(s=document.getElementsByTagName("head")[0]),s.appendChild(n)}function r(t,e,n,r){var o,s;return r=r||c.callbackName||"callback",s=r+"_json"+a.generateUUID(),e[r]=s,o=a.createURLParams(t,e),u[s]=function(t){n(t,s);try{delete u[s]}catch(e){}u[s]=null},i(o),s}function o(t){c=t}var s,a=t("../util"),u=n,c={};e.exports={get:r,init:o}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../util":20}],16:[function(t,e){"use strict";e.exports=function(t){try{t=JSON.parse(t)}catch(e){}return t}},{}],17:[function(t,e){"use strict";var n=t("lodash.isstring");e.exports=function(t,e){if(!n(t))throw new Error("Method must be a string");return"get"!==t.toLowerCase()&&null!=e&&(e=n(e)?e:JSON.stringify(e)),e}},{"lodash.isstring":51}],18:[function(t,e){"use strict";function n(t){var e,n=0,i=["accountHolderName","bic","longFormURL","mandateReferenceNumber","maskedIBAN","shortForm"];for(n=0;n-1&&(n=n.split("#")[0]),e=a.makeQueryString({acsUrl:t.acsUrl,pareq:t.pareq,termUrl:t.termUrl+"&three_d_secure_version="+c,md:t.md,parentUrl:n}),this.assetsUrl+"/3ds/"+c+"/html/style_frame?"+e},e.exports=r},{"../shared/receiver":34,"braintree-utilities":26}],28:[function(t,e){"use strict";function n(){}function i(t,e){e=e||{},this.clientToken=e.clientToken,this.container=e.container,this.api=t,this.nonce=null,this._loader=null,this._boundHandleUserClose=r.bind(this._handleUserClose,this)}var r=t("braintree-utilities"),o=t("./authorization_service"),s=t("./loader");i.prototype.verify=function(t,e){if(!r.isFunction(e))throw this.api.sendAnalyticsEvents("3ds.web.no_callback"),new Error("No suitable callback argument was given");r.isFunction(t.onUserClose)&&(this._onUserClose=t.onUserClose),r.isFunction(t.onLookupComplete)&&(this._onLookupComplete=t.onLookupComplete),(void 0===t.useDefaultLoader||t.useDefaultLoader===!0)&&this._createDefaultLoader();var n={nonce:"",amount:t.amount},i=t.creditCard;if("string"==typeof i)n.nonce=i,this.api.sendAnalyticsEvents("3ds.web.verify.nonce"),this.startVerification(n,e);else{var o=this,s=function(t,i){return t?(o._removeDefaultLoader(),e(t)):(n.nonce=i,void o.startVerification(n,e))};this.api.sendAnalyticsEvents("3ds.web.verify.credit_card"),this.api.tokenizeCard(i,s)}},i.prototype.startVerification=function(t,e){this.api.lookup3DS(t,r.bind(this.handleLookupResponse(e),this))},i.prototype.handleLookupResponse=function(t){var e=this;return function(n,i){var s;this._onLookupComplete(),n?t(n.error):i.lookup&&i.lookup.acsUrl&&i.lookup.acsUrl.length>0?(e.nonce=i.paymentMethod.nonce,s=new o(this.clientToken.assetsUrl,this.container),s.get(i.lookup,r.bind(this.handleAuthenticationResponse(t),this)),this._detachListeners(),this._attachListeners()):(e.nonce=i.paymentMethod.nonce,t(null,{nonce:e.nonce,verificationDetails:i.threeDSecureInfo}))}},i.prototype.handleAuthenticationResponse=function(t){return function(e){var n,i=r.decodeQueryString(e);i.user_closed||(n=JSON.parse(i.auth_response),n.success?t(null,{nonce:n.paymentMethod.nonce,verificationDetails:n.threeDSecureInfo}):n.threeDSecureInfo&&n.threeDSecureInfo.liabilityShiftPossible?t(null,{nonce:this.nonce,verificationDetails:n.threeDSecureInfo}):t(n.error))}},i.prototype._attachListeners=function(){r.addEventListener(window,"message",this._boundHandleUserClose)},i.prototype._detachListeners=function(){r.removeEventListener(window,"message",this._boundHandleUserClose)},i.prototype._createDefaultLoader=function(){this._loader=new s,document.body.appendChild(this._loader.getElement())},i.prototype._removeDefaultLoader=function(){if(this._loader){var t=this._loader.getElement(),e=t.parentNode;e&&e.removeChild(t),this._loader.dispose(),this._loader=null}},i.prototype._handleUserClose=function(t){"user_closed=true"===t.data&&this._onUserClose()},i.prototype._onUserClose=n,i.prototype._onLookupComplete=function(){this._removeDefaultLoader()},e.exports=i},{"./authorization_service":27,"./loader":30,"braintree-utilities":26}],29:[function(t,e){"use strict";var n=t("./client");e.exports={create:function(t,e){var i=new n(t,e);return i}}},{"./client":28}],30:[function(t,e){"use strict";function n(){this._element=document.createElement("div"),this._element.style.cssText=this._cssDeclarations,this._display=null,this._initialize()}var i=t("./loader_display"),r=t("./loader_message"),o=t("./loader_spinner");n.prototype._cssDeclarations=["filter:progid:DXImageTransform.Microsoft.Gradient(StartColorStr=#7F000000, EndColorStr=#7F000000)","background-color: rgba(0, 0, 0, 0.5)","display: table","height: 100%","left: 0","position: fixed","right: 0","top: 0","width: 100%","z-index: 99999"].join(";"),n.prototype.getElement=function(){return this._element},n.prototype.dispose=function(){this._display.dispose(),this._display=null,this._element=null},n.prototype._initialize=function(){var t=new o,e=window.SVGElement&&window.SVGAnimateElement&&window.SVGAnimateTransformElement;e||(t=new r("Loading...")),this._display=new i(t),this.getElement().appendChild(this._display.getElement())},e.exports=n},{"./loader_display":31,"./loader_message":32,"./loader_spinner":33}],31:[function(t,e){"use strict";function n(t){this._element=document.createElement("div"),this._element.style.cssText=this._cssDeclarations,this._displayObject=t,this._initialize()}n.prototype._cssDeclarations=["display: table-cell","vertical-align: middle"].join(";"),n.prototype.getElement=function(){return this._element},n.prototype.dispose=function(){this._displayObject.dispose(),this._displayObject=null,this._element=null},n.prototype._initialize=function(){this.getElement().appendChild(this._displayObject.getElement())},e.exports=n},{}],32:[function(t,e){"use strict";function n(t){this._element=document.createElement("div"),this._element.style.cssText=this._cssDeclarations,this._element.innerHTML=t}n.prototype._cssDeclarations=["color: #fff","font-family: Helvetica, sans-serif","font-size: 12px","text-align: center"].join(";"),n.prototype.getElement=function(){return this._element},n.prototype.dispose=function(){this._element=null},e.exports=n},{}],33:[function(t,e){"use strict";function n(){this._element=document.createElement("div"),this._element.style.cssText=this._cssDeclarations,this._element.innerHTML=this._markup}n.prototype._cssDeclarations=["height: 36px","margin-left: auto","margin-right: auto","width: 36px"].join(";"),n.prototype._markup=['',' ',' '," ",""].join(""),n.prototype.getElement=function(){return this._element},n.prototype.dispose=function(){this._element=null},e.exports=n},{}],34:[function(t,e){"use strict";function n(t){this.postMessageReceiver(t),this.hashChangeReceiver(t)}var i=t("braintree-utilities");n.prototype.postMessageReceiver=function(t){var e=this;this.wrappedCallback=function(n){var i=n.data;(/^(auth_response=)/.test(i)||"user_closed=true"===i)&&(t(i),e.stopListening())},i.addEventListener(window,"message",this.wrappedCallback)},n.prototype.hashChangeReceiver=function(t){var e,n=window.location.hash,i=this;this.poll=setInterval(function(){e=window.location.hash,e.length>0&&e!==n&&(i.stopListening(),e=e.substring(1,e.length),t(e),window.location.hash=n.length>0?n:"")},10)},n.prototype.stopListening=function(){clearTimeout(this.poll),i.removeEventListener(window,"message",this.wrappedCallback)},e.exports=n},{"braintree-utilities":26}],35:[function(t,e){"use strict";var n,i=Array.prototype.indexOf;n=i?function(t,e){return t.indexOf(e)}:function(t,e){for(var n=0,i=t.length;i>n;n++)if(t[n]===e)return n;return-1},e.exports={indexOf:n}},{}],36:[function(t,e){"use strict";function n(t){var e,n,i="";for(e=0;en;n++)i=o[n],t>=i.min&&t<=i.max&&(e=i.chars);return e||60}function i(t,e){var n,i;return-1===t.indexOf("@")?t:(t=t.split("@"),n=t[0],i=t[1],n.length>e&&(n=n.slice(0,e)+"..."),i.length>e&&(i="..."+i.slice(-e)),n+"@"+i)}e.exports={truncateEmail:i,getMaxCharLength:n}},{}],41:[function(t,e){"use strict";function n(){return"https:"===window.location.protocol}function i(t){switch(t){case null:case void 0:return"";case!0:return"1";case!1:return"0";default:return encodeURIComponent(t)}}function r(t,e){var n,o,s=[];for(o in t)if(t.hasOwnProperty(o)){var a=t[o];n=e?e+"["+o+"]":o,"object"==typeof a?s.push(r(a,n)):void 0!==a&&null!==a&&s.push(i(n)+"="+i(a))}return s.join("&")}function o(t){for(var e={},n=t.split("&"),i=0;i-1&&t%1==0&&h>=t}function s(t){return null==t?!0:r(t)&&(u(t)||l(t)||a(t)||n(t)&&c(t.splice))?!t.length:!p(t).length}var a=t("lodash.isarguments"),u=t("lodash.isarray"),c=t("lodash.isfunction"),l=t("lodash.isstring"),p=t("lodash.keys"),h=9007199254740991,d=i("length");e.exports=s},{"lodash.isarguments":45,"lodash.isarray":46,"lodash.isfunction":47,"lodash.isstring":51,"lodash.keys":48}],45:[function(t,e){function n(t){return!!t&&"object"==typeof t}function i(t){return function(e){return null==e?void 0:e[t]}}function r(t){return null!=t&&o(p(t))}function o(t){return"number"==typeof t&&t>-1&&t%1==0&&l>=t}function s(t){return n(t)&&r(t)&&u.call(t,"callee")&&!c.call(t,"callee")}var a=Object.prototype,u=a.hasOwnProperty,c=a.propertyIsEnumerable,l=9007199254740991,p=i("length");e.exports=s},{}],46:[function(t,e){function n(t){return!!t&&"object"==typeof t}function i(t,e){var n=null==t?void 0:t[e];return a(n)?n:void 0}function r(t){return"number"==typeof t&&t>-1&&t%1==0&&y>=t}function o(t){return s(t)&&f.call(t)==c}function s(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function a(t){return null==t?!1:o(t)?m.test(h.call(t)):n(t)&&l.test(t)}var u="[object Array]",c="[object Function]",l=/^\[object .+?Constructor\]$/,p=Object.prototype,h=Function.prototype.toString,d=p.hasOwnProperty,f=p.toString,m=RegExp("^"+h.call(d).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),g=i(Array,"isArray"),y=9007199254740991,b=g||function(t){return n(t)&&r(t.length)&&f.call(t)==u};e.exports=b},{}],47:[function(t,e){function n(t){return i(t)&&s.call(t)==r}function i(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}var r="[object Function]",o=Object.prototype,s=o.toString;e.exports=n},{}],48:[function(t,e){function n(t){return function(e){return null==e?void 0:e[t]}}function i(t){return null!=t&&o(y(t))}function r(t,e){return t="number"==typeof t||h.test(t)?+t:-1,e=null==e?g:e,t>-1&&t%1==0&&e>t}function o(t){return"number"==typeof t&&t>-1&&t%1==0&&g>=t}function s(t){for(var e=u(t),n=e.length,i=n&&t.length,s=!!i&&o(i)&&(p(t)||l(t)),a=-1,c=[];++a0;++i=0;i--)r=v[i],r.closed===!0?v=v.slice(i,1):n!==r&&d(r.top,t,e)}function m(t,e){function n(r,o){t(r,o),b.target(e).unsubscribe(i,n)}var i=l();return b.target(e).subscribe(i,n),i}function g(t,e,n){return s(t)?!0:"function"!=typeof e?!0:s(n)?!0:!1}var y,b,v=[],_={},E="/*framebus*/";return c(),b={target:e,include:t,publish:n,pub:n,trigger:n,emit:n,subscribe:i,sub:i,on:i,unsubscribe:r,unsub:r,off:r}})},{}],56:[function(t,e){"use strict";function n(t){return new i(t)}var i=t("./lib/coinbase");e.exports={create:n}},{"./lib/coinbase":59}],57:[function(t,e){(function(t){"use strict";function n(e){return e=e||t.navigator.userAgent,/AppleWebKit\//.test(e)&&/Mobile\//.test(e)?e.replace(/.* OS ([0-9_]+) like Mac OS X.*/,"$1").replace(/_/g,"."):null}function i(e){e=e||t.navigator.userAgent;var n=null,i=/MSIE.(\d+)/.exec(e);return/Trident/.test(e)&&(n=11),i&&(n=parseInt(i[1],10)),n}function r(e){return e=e||t.navigator.userAgent,/Android/.test(e)?e.replace(/^.* Android ([0-9\.]+).*$/,"$1"):null}e.exports={ieVersion:i,iOSSafariVersion:n,androidVersion:r}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],58:[function(t,e){"use strict";function n(t,e,n){return t?(n.bus.emit(i.ERROR,t.error),void n._sendAnalyticsEvent("generate.nonce.failed")):(n.bus.emit(i.PAYMENT_METHOD_GENERATED,e),void n._sendAnalyticsEvent("generate.nonce.succeeded"))}var i=t("braintree-bus").events;e.exports={tokenize:n}},{"braintree-bus":67}],59:[function(t,e){(function(n){"use strict";function i(t){return{clientId:t.configuration.coinbase.clientId,redirectUrl:t.configuration.coinbase.redirectUrl,scopes:t.configuration.coinbase.scopes||h.SCOPES,meta:{authorizations_merchant_account:t.configuration.coinbase.merchantAccount||""}}}function r(t){return function(e,n){t.emit(f.events.ERROR,{type:n,message:e})}}function o(t,e){var n=(t||{}).coinbase,i=r(e);if(null==t.apiClient)i("settings.apiClient is required for coinbase",h.CONFIGURATION_ERROR);else if(t.configuration.coinbaseEnabled)if(n&&(n.container||n.button))if(n.container&&n.button)i("options.coinbase.container and options.coinbase.button are mutually exclusive",h.CONFIGURATION_ERROR);else{if(d.isSupportedBrowser())return!0;i("Coinbase is not supported by your browser. Please consider upgrading",h.UNSUPPORTED_BROWSER_ERROR)}else i("Either options.coinbase.container or options.coinbase.button is required for Coinbase integrations",h.CONFIGURATION_ERROR);else i("Coinbase is not enabled for your merchant account",h.CONFIGURATION_ERROR);return!1}function s(t){var e,r;this.destructor=new u,this.channel=t.channel,r={channel:this.channel};try{t.coinbase.container&&(r.merchantUrl=n.location.href)}catch(s){}this.bus=t.bus||new f(r),this.canCreateIntegration=o(t,this.bus),this.canCreateIntegration&&(this.buttonId=t.coinbase.button||h.BUTTON_ID,this.apiClient=t.apiClient,this.assetsUrl=t.configuration.assetsUrl,this.environment=t.configuration.coinbase.environment,this._onOAuthSuccess=a.bind(this._onOAuthSuccess,this),this._handleButtonClick=a.bind(this._handleButtonClick,this),this.popupParams=i(t),this.redirectDoneInterval=null,t.coinbase.container?(e=a.normalizeElement(t.coinbase.container),this._insertFrame(e)):(n.braintreeCoinbasePopupCallback=this._onOAuthSuccess,e=document.body,a.addEventListener(e,"click",this._handleButtonClick),this._sendAnalyticsEvent("initialized"),this.destructor.registerFunctionForTeardown(a.bind(function(){this._closePopup()},this)),this.bus.on(h.TEARDOWN_EVENT,a.bind(this.destructor.teardown,this.destructor))))}var a=t("braintree-utilities"),u=t("destructor"),c=t("./dom/composer"),l=t("./url-composer"),p=t("./callbacks"),h=t("./constants"),d=t("./detector"),f=t("braintree-bus");s.prototype._sendAnalyticsEvent=function(t){var e=this.apiClient.integration+".web.coinbase.";this.apiClient.sendAnalyticsEvents(e+t)},s.prototype._insertFrame=function(t){var e=c.createFrame({channel:this.channel});this.bus.emit(f.events.ASYNC_DEPENDENCY_INITIALIZING),t.appendChild(e),this.destructor.registerFunctionForTeardown(function(){t.removeChild(e)}),setTimeout(a.bind(function(){e.src=this.assetsUrl+"/coinbase/"+h.VERSION+"/coinbase-frame.html#"+this.channel},this),0)},s.prototype._onOAuthSuccess=function(t){return t.code?(this.bus.emit("coinbase:view:navigate","loading"),this._sendAnalyticsEvent("popup.authorized"),this.apiClient.tokenizeCoinbase({code:t.code,query:l.getQueryString()},a.bind(function(t,e){p.tokenize.apply(null,[t,e,this])},this)),void this._closePopup()):(this._sendAnalyticsEvent("popup.denied"),void this._closePopup())},s.prototype._clearPollForRedirectDone=function(){this.redirectDoneInterval&&(clearInterval(this.redirectDoneInterval),this.redirectDoneInterval=null)},s.prototype._closePopup=function(t){t=t||this.popup,null!=t&&(d.shouldCloseFromParent()&&t.close(),this._popupCleanup())},s.prototype._popupCleanup=function(){this._clearPollForRedirectDone(),this.bus.emit(f.events.UI_POPUP_DID_CLOSE,{source:h.INTEGRATION_NAME})},s.prototype._pollForRedirectDone=function(t){var e=setInterval(a.bind(function(){var e;if(null==t||t.closed)return this._sendAnalyticsEvent("popup.aborted"),void this._popupCleanup();try{if("about:blank"===t.location.href)throw new Error("Not finished loading");e=a.decodeQueryString(t.location.search.replace(/^\?/,"")).code}catch(n){return}this._onOAuthSuccess({code:e})},this),100);return this.redirectDoneInterval=e,e},s.prototype._openPopup=function(){var t;this._sendAnalyticsEvent("popup.started"),t=c.createPopup(l.compose(this._getOAuthBaseUrl(),this.popupParams)),t.focus(),this._pollForRedirectDone(t),this.bus.emit(f.events.UI_POPUP_DID_OPEN,{source:h.INTEGRATION_NAME}),this.bus.on(f.events.UI_POPUP_FORCE_CLOSE,function(e){e.target===h.INTEGRATION_NAME&&t.close()}),this.popup=t},s.prototype._getOAuthBaseUrl=function(){var t;return t="shared_sandbox"===this.environment?h.SANDBOX_OAUTH_BASE_URL:h.PRODUCTION_OAUTH_BASE_URL},s.prototype._handleButtonClick=function(t){for(var e=t.target||t.srcElement;;){if(null==e)return;if(e===t.currentTarget)return;if(e.id===this.buttonId)break;e=e.parentNode}t&&t.preventDefault?t.preventDefault():t.returnValue=!1,this._openPopup()},s.prototype.teardown=function(t){var e=this;return this.canCreateIntegration?void this.bus.emit(h.TEARDOWN_EVENT,function(){e.destructor.teardown(function(n){return n?t(n):(e.bus.teardown(),void t(null))})}):void t(null)},e.exports=s}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./callbacks":58,"./constants":60,"./detector":61,"./dom/composer":63,"./url-composer":66,"braintree-bus":67,"braintree-utilities":79,destructor:80}],60:[function(t,e){"use strict";e.exports={PRODUCTION_OAUTH_BASE_URL:"https://coinbase.com",SANDBOX_OAUTH_BASE_URL:"https://sandbox.coinbase.com",ORIGIN_URL:"https://www.coinbase.com",FRAME_NAME:"braintree-coinbase-frame",POPUP_NAME:"coinbase",BUTTON_ID:"bt-coinbase-button",SCOPES:"send",VERSION:"0.3.1",INTEGRATION_NAME:"Coinbase",CONFIGURATION_ERROR:"CONFIGURATION",UNSUPPORTED_BROWSER_ERROR:"UNSUPPORTED_BROWSER",TEARDOWN_EVENT:"coinbase:TEARDOWN"}},{}],61:[function(t,e){"use strict";function n(){var t=s.ieVersion();return!t||t>8}function i(){var t=s.androidVersion();return null==t?!1:/^5/.test(t)}function r(){return!(i()||o())}function o(){var t=s.iOSSafariVersion();return null==t?!1:/^8\.0/.test(t)||/^8\.1$/.test(t)}var s=t("./browser");e.exports={isSupportedBrowser:n,shouldCloseFromParent:r,shouldDisplayIOSClose:o,shouldDisplayLollipopClose:i}},{"./browser":57}],62:[function(t,e){"use strict";function n(t){var e=document.createElement("button");return t=t||{},e.id=t.id||"coinbase-button",e.style.backgroundColor=t.backgroundColor||"#EEE",e.style.color=t.color||"#4597C3",e.style.border=t.border||"0",e.style.borderRadius=t.borderRadius||"6px",e.style.padding=t.padding||"12px",e.innerHTML=t.innerHTML||"coinbase",e}e.exports={create:n}},{}],63:[function(t,e){"use strict";var n=t("./popup"),i=t("./button"),r=t("./frame");e.exports={createButton:i.create,createPopup:n.create,createFrame:r.create}},{"./button":62,"./frame":64,"./popup":65}],64:[function(t,e){"use strict";function n(){return r({name:i.FRAME_NAME,height:"70px",width:"100%",style:{padding:0,margin:0,border:0,outline:"none"}})}var i=t("../constants"),r=t("iframer");e.exports={create:n}},{"../constants":60,iframer:83}],65:[function(t,e){(function(n){"use strict";function i(t){var e=[];for(var n in t)t.hasOwnProperty(n)&&e.push([n,t[n]].join("="));return e.join(",")}function r(){var t=850,e=600;return i({width:t,height:e,left:(screen.width-t)/2,top:(screen.height-e)/4})}function o(t){return n.open(t,s.POPUP_NAME,r())}var s=t("../constants");e.exports={create:o}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../constants":60}],66:[function(t,e){"use strict";function n(){return"version="+r.VERSION}function i(t,e){var i=t+"/oauth/authorize?response_type=code",r=e.redirectUrl+"?"+n();if(i+="&redirect_uri="+encodeURIComponent(r),i+="&client_id="+e.clientId,e.scopes&&(i+="&scope="+encodeURIComponent(e.scopes)),e.meta)for(var o in e.meta)e.meta.hasOwnProperty(o)&&(i+="&meta["+encodeURIComponent(o)+"]="+encodeURIComponent(e.meta[o]));return i}var r=t("./constants");e.exports={compose:i,getQueryString:n}},{"./constants":60}],67:[function(t,e,n){arguments[4][52][0].apply(n,arguments)},{"./lib/check-origin":68,"./lib/events":69,dup:52,framebus:70}],68:[function(t,e,n){arguments[4][53][0].apply(n,arguments)},{dup:53}],69:[function(t,e,n){arguments[4][54][0].apply(n,arguments)},{dup:54}],70:[function(t,e,n){arguments[4][55][0].apply(n,arguments)},{dup:55}],71:[function(t,e,n){arguments[4][35][0].apply(n,arguments)},{dup:35}],72:[function(t,e,n){arguments[4][36][0].apply(n,arguments)},{dup:36}],73:[function(t,e,n){arguments[4][22][0].apply(n,arguments)},{dup:22}],74:[function(t,e,n){arguments[4][38][0].apply(n,arguments)},{dup:38}],75:[function(t,e,n){arguments[4][39][0].apply(n,arguments)},{dup:39}],76:[function(t,e,n){arguments[4][40][0].apply(n,arguments)},{dup:40}],77:[function(t,e,n){arguments[4][41][0].apply(n,arguments)},{"./array":71,dup:41}],78:[function(t,e,n){arguments[4][42][0].apply(n,arguments)},{dup:42}],79:[function(t,e,n){arguments[4][43][0].apply(n,arguments)},{"./lib/array":71,"./lib/base64":72,"./lib/dom":73,"./lib/events":74,"./lib/fn":75,"./lib/string":76,"./lib/url":77,"./lib/uuid":78,dup:43}],80:[function(t,e){"use strict";function n(){this._teardownRegistry=[]}var i=t("batch-execute-functions"),r=t("braintree-utilities/lib/fn");n.prototype.registerFunctionForTeardown=function(t){r.isFunction(t)&&this._teardownRegistry.push(t)},n.prototype.teardown=function(t){i(this._teardownRegistry,r.bind(function(e){this._teardownRegistry=[],r.isFunction(t)&&t(e)},this))},e.exports=n},{"batch-execute-functions":81,"braintree-utilities/lib/fn":82}],81:[function(t,e){"use strict";function n(t,e){var n,r=0===t.length;r?(t(),e(null)):(n=i(e),t(n))}function i(t){var e=!1;return function(){e||(e=!0,t.apply(this,arguments))}}e.exports=function(t,e){var i=t.length,r=i;if(0===i)return void e(null);for(var o=0;i>o;o++)n(t[o],function(t){return t?void e(t):(r-=1,void(0===r&&e(null)))})}},{}],82:[function(t,e,n){arguments[4][39][0].apply(n,arguments)},{dup:39}],83:[function(t,e){"use strict";var n=t("lodash.assign"),i=t("lodash.isstring"),r=t("setattributes"),o=t("./lib/default-attributes");e.exports=function(t){var e=document.createElement("iframe"),s=n({},o,t);return s.style&&!i(s.style)&&(n(e.style,s.style),delete s.style),r(e,s),e.getAttribute("id")||(e.id=e.name),e}},{"./lib/default-attributes":84,"lodash.assign":85,"lodash.isstring":96,setattributes:97}],84:[function(t,e){e.exports={src:"about:blank",frameBorder:0,allowtransparency:!0,scrolling:"no"}},{}],85:[function(t,e){function n(t,e,n){for(var i=-1,r=o(e),s=r.length;++i2?n[s-2]:void 0,u=s>2?n[2]:void 0,c=s>1?n[s-1]:void 0;for("function"==typeof a?(a=i(a,c,5),s-=2):(a="function"==typeof c?c:void 0,s-=a?1:0),u&&r(n[0],n[1],u)&&(a=3>s?void 0:a,s=1);++o-1&&t%1==0&&e>t}function o(t,e,n){if(!a(n))return!1;var o=typeof e;if("number"==o?i(n)&&r(e,n.length):"string"==o&&e in n){var s=n[e];return t===t?t===s:s!==s}return!1}function s(t){return"number"==typeof t&&t>-1&&t%1==0&&c>=t}function a(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}var u=/^\d+$/,c=9007199254740991,l=n("length");e.exports=o},{}],91:[function(t,e){function n(t,e){if("function"!=typeof t)throw new TypeError(i);return e=r(void 0===e?t.length-1:+e||0,0),function(){for(var n=arguments,i=-1,o=r(n.length-e,0),s=Array(o);++i=0;n--)if(this.handlers[n].type===t&&this.handlers[n].handler===e)return this.handlers.splice(n,1)},n.prototype._namespaceEvent=function(t){return this.channel?["braintree",this.channel,t].join(":"):t},n.Message=function(t,e,n){this.bus=t,this.source=e,this.content=n},n.Message.prototype.reply=function(t,e){this.bus.send(this.source,t,e)},e.exports=n},{"braintree-utilities":206}],193:[function(t,e){"use strict";function n(t,e){this.bus=t,this.target=e,this.handlers=[],this.bus.register("publish",i.bind(this._handleMessage,this))}var i=t("braintree-utilities");n.prototype._handleMessage=function(t){var e,n=t.content,i=this.handlers[n.channel];if("undefined"!=typeof i)for(e=0;er;r++)e(i[r])},e.exports=n},{}],235:[function(t,e){(function(n){"use strict";function i(t,e){var n=window.getComputedStyle?getComputedStyle(t):t.currentStyle;return n[e]}function r(){return{html:{height:a.style.height||"",overflow:i(a,"overflow"),position:i(a,"position")},body:{height:u.style.height||"",overflow:i(u,"overflow")}}}function o(){var t=/Android|iPhone|iPod|iPad/i.test(window.navigator.userAgent);return t}function s(t){var e,i,r;this.channel=t.channel,this.destructor=new p,this.merchantConfiguration=t.merchantConfiguration,this.encodedClientToken=t.gatewayConfiguration,this.analyticsConfiguration=t.analyticsConfiguration,this.paypalOptions=t.merchantConfiguration.paypal||{},this.container=null,this.merchantFormManager=null,this.root=t.root,this.configurationRequests=[],this.braintreeApiClient=c.configure({clientToken:t.gatewayConfiguration,analyticsConfiguration:this.analyticsConfiguration,integration:"dropin",enableCORS:this.merchantConfiguration.enableCORS}),this.paymentMethodNonceReceivedCallback=t.merchantConfiguration.paymentMethodNonceReceived,this.clientToken=c.parseClientToken(t.gatewayConfiguration),this.braintreeBus=new l({merchantUrl:n.location.href,channel:t.channel}),this.bus=new h.MessageBus(this.root,this.channel),this.rpcServer=new h.RPCServer(this.bus),this.apiProxyServer=new y(this.braintreeApiClient),this.apiProxyServer.attach(this.rpcServer),e=t.inlineFramePath||this.clientToken.assetsUrl+"/dropin/"+E+"/inline-frame.html",i=t.modalFramePath||this.clientToken.assetsUrl+"/dropin/"+E+"/modal-frame.html",a=document.documentElement,u=document.body,this.frames={inline:this._createFrame(e,_.INLINE_FRAME_NAME),modal:this._createFrame(i,_.MODAL_FRAME_NAME)},this.container=f(t.merchantConfiguration.container,"Unable to find valid container."),r=f(t.merchantConfiguration.form||this._findClosest(this.container,"form")),this.merchantFormManager=new b({form:r,frames:this.frames,onSubmit:this.paymentMethodNonceReceivedCallback,apiClient:this.braintreeApiClient}).initialize(),this.destructor.registerFunctionForTeardown(m(function(){this.merchantFormManager.teardown()},this)),t.gatewayConfiguration.paypalEnabled&&this._configurePayPal(),this.braintreeApiClient.sendAnalyticsEvents("dropin.web.initialized")}var a,u,c=t("braintree-api"),l=t("braintree-bus"),p=t("destructor"),h=t("braintree-rpc"),d=t("braintree-utilities"),f=d.normalizeElement,m=d.bind,g=d.isBrowserHttps,y=t("./api-proxy-server"),b=t("./merchant-form-manager"),v=t("./frame-container"),_=t("../shared/constants"),E="1.9.1",w=t("braintree-paypal/src/external/views/app-view");s.prototype.initialize=function(){var t,e=this;this._initializeModal(),this.braintreeBus.emit(l.events.ASYNC_DEPENDENCY_INITIALIZING),this.container.appendChild(this.frames.inline.element),u.appendChild(this.frames.modal.element),this.destructor.registerFunctionForTeardown(function(t){e._hideModal(function(){e.container.removeChild(e.frames.inline.element),u.removeChild(e.frames.modal.element),t()})}),this.rpcServer.define("receiveSharedCustomerIdentifier",function(n){for(e.braintreeApiClient.attrs.sharedCustomerIdentifier=n,e.braintreeApiClient.attrs.sharedCustomerIdentifierType="browser_session_cookie_store",t=0;t0&&n(r,e);return e}function i(t){try{t.attributes.removeNamedItem("name")}catch(e){}}function r(t){n(t)}function o(t){return t.nodeType===s&&t.attributes["data-braintree-name"]}var s=t.Node?t.Node.ELEMENT_NODE:1;e.exports={extractValues:n,scrubAllAttributes:r,scrubAttributes:i,isBraintreeNode:o}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],241:[function(t,e){(function(n){"use strict";function i(t,e){var i=e.merchantConfiguration,o="object"==typeof i.paymentMethodNonceInputField;this.destructor=new s,this.apiClient=t,this.isCreditCardForm=i.useCreditCard===!1?!1:!0,this.htmlForm=document.getElementById(i.id),this.paymentMethodNonceInput=c(i.paymentMethodNonceInputField),this.htmlForm.appendChild(this.paymentMethodNonceInput),this.destructor.registerFunctionForTeardown(r.bind(function(){o?this.paymentMethodNonceInput.value="":this.htmlForm.removeChild(this.paymentMethodNonceInput)},this)),this.model=new u,this.bus=new a({merchantUrl:n.location.href,channel:e.channel}),this.setEvents(),this.destructor.registerFunctionForTeardown(r.bind(function(){this.bus.teardown()},this))}var r=t("braintree-utilities"),o=t("./fields"),s=t("destructor"),a=t("braintree-bus"),u=t("./models/payment-method-model"),c=t("./get-nonce-input"),l={message:"Unable to process payments at this time",type:"IMMEDIATE"};i.prototype.setEvents=function(){this.onSubmitHandler=r.bind(this.handleSubmit,this),this.onExternalNonceReceived=r.bind(this.onExternalNonceReceived,this),this.clearExternalNonce=r.bind(this.clearExternalNonce,this),r.addEventListener(this.htmlForm,"submit",this.onSubmitHandler),this.destructor.registerFunctionForTeardown(r.bind(function(){r.removeEventListener(this.htmlForm,"submit",this.onSubmitHandler)},this)),this.bus.on(a.events.PAYMENT_METHOD_GENERATED,this.onExternalNonceReceived),this.bus.on(a.events.PAYMENT_METHOD_CANCELLED,this.clearExternalNonce)},i.prototype.handleSubmit=function(t){var e;return t.preventDefault?t.preventDefault():t.returnValue=!1,this.isCreditCardForm?(e=this.model.get("type"),e&&"CreditCard"!==e?(o.scrubAllAttributes(this.htmlForm),void this.onNonceReceived(null,this.model.attributes)):void this.apiClient.tokenizeCard(o.extractValues(this.htmlForm),r.bind(function(t,e,n){t?this.onNonceReceived(l,null):(this.model.set({nonce:e,type:n.type,details:n.details}),this.onNonceReceived(null,this.model.attributes))},this))):void this.onNonceReceived(null,this.model.attributes)},i.prototype.writeNonceToDOM=function(){this.paymentMethodNonceInput.value=this.model.get("nonce")},i.prototype.onExternalNonceReceived=function(t){this.model.set(t),this.writeNonceToDOM()},i.prototype.clearExternalNonce=function(){this.model.reset()},i.prototype.onNonceReceived=function(t){var e=this.htmlForm;return t?void this.bus.emit(a.events.ERROR,l):(r.removeEventListener(e,"submit",this.onSubmitHandler),this.writeNonceToDOM(),void(e.submit&&("function"==typeof e.submit||e.submit.call)?e.submit():setTimeout(function(){e.querySelector('[type="submit"]').click()},1)))},i.prototype.teardown=function(){this.destructor.teardown() +},e.exports=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./fields":240,"./get-nonce-input":242,"./models/payment-method-model":243,"braintree-bus":246,"braintree-utilities":258,destructor:259}],242:[function(t,e){"use strict";e.exports=function(t){var e;if("object"==typeof t)return t;e="payment_method_nonce","string"==typeof t&&(e=t);var n=document.createElement("input");return n.name=e,n.type="hidden",n}},{}],243:[function(t,e){"use strict";function n(){this.reset()}n.prototype.get=function(t){return this.attributes[t]},n.prototype.set=function(t){this.attributes=t||{}},n.prototype.reset=function(){this.attributes={}},e.exports=n},{}],244:[function(t,e){"use strict";e.exports=function(t){for(var e=t.getElementsByTagName("*"),n={},i=0;in;n++)t.toLowerCase()===e[n].toLowerCase()&&(r=!0);return r}function r(t){return i(t,p.HERMES_SUPPORTED_CURRENCIES)}function o(t){return i(h(t).split("_")[1],p.HERMES_SUPPORTED_COUNTRIES)}function s(t){return t=parseFloat(t),"number"==typeof t&&!isNaN(t)&&t>=0}function a(t,e){return t.paypal.unvettedMerchant&&(!d(t,e)||!t.paypal.payeeEmail)}function u(t,e){return t.paypal.allowHttp?!0:l.isPopupSupported()?!0:"merchantHttps"in e?e.merchantHttps:g.isBrowserHttps()}var c=t("./client"),l=t("../shared/util/browser"),p=t("../shared/constants"),h=t("../shared/get-locale"),d=t("../shared/util/util").isHermesConfiguration,f=t("../shared/util/util").isOneTimeHermesConfiguration,m="1.6.1",g=t("braintree-utilities"),y=t("braintree-api");e.exports={create:n,VERSION:m}},{"../shared/constants":354,"../shared/get-locale":356,"../shared/util/browser":361,"../shared/util/util":363,"./client":343,"braintree-api":281,"braintree-utilities":324}],345:[function(t,e,n){arguments[4][183][0].apply(n,arguments)},{"../../shared/constants":354,"../../shared/util/browser":361,"./modal-view":350,"./popup-view":353,"braintree-bus":312,"braintree-utilities":324,destructor:325,dup:183}],346:[function(t,e){"use strict";function n(t){this.options=t||{},this.el=r({src:this._buildUrl(),name:i.BRIDGE_FRAME_NAME,height:1,width:1,style:{position:"static",top:0,left:0,bottom:0,padding:0,margin:0,border:0,outline:"none",background:"transparent"}}),this.options.container.appendChild(this.el)}var i=t("../../shared/constants"),r=t("iframer");n.prototype._buildUrl=function(){var t=this.options.paypalAssetsUrl;return t+="/pwpp/",t+=i.VERSION,t+="/html/bridge-frame.html",t+="#"+this.options.channel},n.prototype.teardown=function(){this.options.container.removeChild(this.el)},e.exports=n},{"../../shared/constants":354,iframer:328}],347:[function(t,e){(function(n){"use strict";function i(t){this.options=t||{},this.wrapper=this.options.container||document.body,this.destructor=new o,this.bus=new s({merchantUrl:n.location.href,channel:t.channel}),this._initialize()}var r=t("braintree-utilities"),o=t("destructor"),s=t("braintree-bus"),a=t("../../shared/util/util"),u=t("../../shared/util/dom"),c=t("../../shared/constants");i.prototype._initialize=function(){var t=r.bind(this._handleClickLogout,this);this._createViewContainer(),this._createPayPalName(),this._createEmailNode(),this._createLogoutNode(),r.addEventListener(this.logoutNode,"click",t),this.destructor.registerFunctionForTeardown(r.bind(function(){r.removeEventListener(this.logoutNode,"click",t)},this)),this.bus.on(s.events.PAYMENT_METHOD_GENERATED,r.bind(this._handlePaymentMethodGenerated,this)),this.bus.on(s.events.PAYMENT_METHOD_CANCELLED,r.bind(this._handlePaymentMethodCancelled,this))},i.prototype._createViewContainer=function(){var t=["display: none","max-width: 500px","overflow: hidden","padding: 16px","background-image: url("+this.options.paypalAssetsUrl+"/pwpp/"+c.VERSION+"/images/paypal-small.png)","background-image: url("+this.options.paypalAssetsUrl+"/pwpp/"+c.VERSION+"/images/paypal-small.svg), none","background-position: 20px 50%","background-repeat: no-repeat","background-size: 13px 15px","border-top: 1px solid #d1d4d6","border-bottom: 1px solid #d1d4d6"].join(";");this.container=document.createElement("div"),this.container.id="braintree-paypal-loggedin",this.container.style.cssText=t,this.wrapper.appendChild(this.container)},i.prototype._createPayPalName=function(){var t=["color: #283036","font-size: 13px","font-weight: 800",'font-family: "Helvetica Neue", Helvetica, Arial, sans-serif',"margin-left: 36px","-webkit-font-smoothing: antialiased","-moz-font-smoothing: antialiased","-ms-font-smoothing: antialiased","font-smoothing: antialiased"].join(";");return this.payPalName=document.createElement("span"),this.payPalName.id="bt-pp-name",this.payPalName.innerHTML="PayPal",this.payPalName.style.cssText=t,this.container.appendChild(this.payPalName)},i.prototype._createEmailNode=function(){var t=["color: #6e787f","font-size: 13px",'font-family: "Helvetica Neue", Helvetica, Arial, sans-serif',"margin-left: 5px","-webkit-font-smoothing: antialiased","-moz-font-smoothing: antialiased","-ms-font-smoothing: antialiased","font-smoothing: antialiased"].join(";");this.emailNode=document.createElement("span"),this.emailNode.id="bt-pp-email",this.emailNode.style.cssText=t,this.container.appendChild(this.emailNode)},i.prototype._createLogoutNode=function(){var t=["color: #3d95ce","font-size: 11px",'font-family: "Helvetica Neue", Helvetica, Arial, sans-serif',"line-height: 20px","margin: 0 0 0 25px","padding: 0","background-color: transparent","border: 0","cursor: pointer","text-decoration: underline","float: right","-webkit-font-smoothing: antialiased","-moz-font-smoothing: antialiased","-ms-font-smoothing: antialiased","font-smoothing: antialiased"].join(";");this.logoutNode=document.createElement("button"),this.logoutNode.id="bt-pp-cancel",this.logoutNode.innerHTML="Cancel",this.logoutNode.style.cssText=t,this.container.appendChild(this.logoutNode)},i.prototype.show=function(t){this.container.style.display="block",u.setTextContent(this.emailNode,t)},i.prototype.hide=function(){this.container.style.display="none"},i.prototype._handleClickLogout=function(t){a.preventDefault(t),this.bus.emit(s.events.PAYMENT_METHOD_CANCELLED,{source:c.PAYPAL_INTEGRATION_NAME})},i.prototype._handlePaymentMethodGenerated=function(t){var e;t.type===c.NONCE_TYPE&&(e=t&&t.details&&t.details.email?t.details.email:"",this.show(e))},i.prototype._handlePaymentMethodCancelled=function(t){t.source===c.PAYPAL_INTEGRATION_NAME&&this.hide()},i.prototype.teardown=function(){this.wrapper.removeChild(this.container),this.destructor.teardown(),this.bus.teardown()},e.exports=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../../shared/constants":354,"../../shared/util/dom":362,"../../shared/util/util":363,"braintree-bus":312,"braintree-utilities":324,destructor:325}],348:[function(t,e){(function(n){"use strict";function i(t){this.options=t,this.wrapper=this.options.container||document.body,this.bus=new o({merchantUrl:n.location.href,channel:t.channel}),this._initialize()}var r=t("braintree-utilities"),o=t("braintree-bus"),s=t("../../shared/constants"),a=t("../../shared/get-locale");i.prototype._initialize=function(){this.createViewContainer(),this.options.enablePayPalButton?this.createCheckoutWithPayPalButton():this.createPayWithPayPalButton(),this.bus.on(o.events.PAYMENT_METHOD_GENERATED,r.bind(this._handlePaymentMethodGenerated,this)),this.bus.on(o.events.PAYMENT_METHOD_CANCELLED,r.bind(this._handlePaymentMethodCancelled,this))},i.prototype.createViewContainer=function(){this.container=document.createElement("div"),this.container.id="braintree-paypal-loggedout",this.wrapper.appendChild(this.container),this.loginNode=this.container},i.prototype.createPayWithPayPalButton=function(){var t=document.createElement("a"),e=new Image,n=["max-width: 100%","display: block","width: 100%","height: 100%","outline: none","border: 0"].join(";"),i=["display: block","width: 115px","height: 44px","overflow: hidden"].join(";");t.id="braintree-paypal-button",t.href="#",t.style.cssText=i,e.src=this.options.paypalAssetsUrl+"/pwpp/"+s.VERSION+"/images/pay-with-paypal.png",e.setAttribute("alt","Pay with PayPal"),e.style.cssText=n,t.appendChild(e),this.container.appendChild(t)},i.prototype.createCheckoutWithPayPalButton=function(){var t,e=document.createElement("script"),n={"data-merchant":"merchant-id","data-button":"checkout","data-type":"button","data-color":"blue","data-lc":a(this.options.locale)};e.src="//www.paypalobjects.com/api/button.js",e.async=!0;for(t in n)n.hasOwnProperty(t)&&e.setAttribute(t,n[t]);this.container.appendChild(e)},i.prototype.show=function(){this.container.style.display="block"},i.prototype.hide=function(){this.container.style.display="none"},i.prototype._handlePaymentMethodGenerated=function(t){t.type===s.NONCE_TYPE&&this.hide()},i.prototype._handlePaymentMethodCancelled=function(t){t.source===s.PAYPAL_INTEGRATION_NAME&&this.show()},i.prototype.teardown=function(){this.wrapper.removeChild(this.container),this.bus.teardown()},e.exports=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../../shared/constants":354,"../../shared/get-locale":356,"braintree-bus":312,"braintree-utilities":324}],349:[function(t,e){(function(n){"use strict";function i(t){this.options=t,this.bus=new s({merchantUrl:n.location.href,channel:t.channel}),this.bus.on(u.events.UI_MODAL_DID_OPEN,a.bind(this.lockWindowSize,this)),this.bus.on(u.events.UI_MODAL_DID_CLOSE,a.bind(this.unlockWindowSize,this))}function r(t){var e=window.getComputedStyle?getComputedStyle(t):t.currentStyle;return{overflow:e.overflow||"",height:t.style.height||""}}function o(){return{html:{node:document.documentElement,styles:r(document.documentElement)},body:{node:document.body,styles:r(document.body)}}}var s=t("braintree-bus"),a=t("braintree-utilities"),u=t("../../shared/constants");i.prototype.lockWindowSize=function(){this.defaultStyles=o(),document.documentElement.style.height="100%",document.documentElement.style.overflow="hidden",document.body.style.height="100%",document.body.style.overflow="hidden"},i.prototype.unlockWindowSize=function(){this.defaultStyles&&(document.documentElement.style.height=this.defaultStyles.html.styles.height,document.documentElement.style.overflow=this.defaultStyles.html.styles.overflow,document.body.style.height=this.defaultStyles.body.styles.height,document.body.style.overflow=this.defaultStyles.body.styles.overflow,delete this.defaultStyles)},i.prototype._handleUIModalDidOpen=function(t){t.source===u.PAYPAL_INTEGRATION_NAME&&this.lockWindowSize()},i.prototype._handleUIModalDidClose=function(t){t.source===u.PAYPAL_INTEGRATION_NAME&&this.unlockWindowSize()},i.prototype.teardown=function(){this.unlockWindowSize(),this.bus.teardown()},e.exports=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../../shared/constants":354,"braintree-bus":312,"braintree-utilities":324}],350:[function(t,e,n){arguments[4][184][0].apply(n,arguments)},{"../../shared/constants":354,"../../shared/util/browser":361,"braintree-bus":312,"braintree-utilities":324,dup:184,iframer:328}],351:[function(t,e){(function(n){"use strict";function i(t){this.options=t,this.spriteSrc=this.options.paypalAssetsUrl+"/pwpp/"+a.VERSION+"/images/pp_overlay_sprite.png",this.bus=new s({merchantUrl:n.location.href,channel:t.channel}),this.destructor=new o,this._create(),this._setupEvents(),this.bus.on(s.events.UI_POPUP_DID_OPEN,r.bind(this._handleUIPopupDidOpen,this)),this.bus.on(s.events.UI_POPUP_DID_CLOSE,r.bind(this._handleUIPopupDidClose,this))}var r=t("braintree-utilities"),o=t("destructor"),s=t("braintree-bus"),a=t("../../shared/constants");i.prototype.open=function(){document.body.contains(this.el)||document.body.appendChild(this.el)},i.prototype.close=function(){document.body.contains(this.el)&&document.body.removeChild(this.el)},i.prototype._handleUIPopupDidClose=function(t){t.source===a.PAYPAL_INTEGRATION_NAME&&this.close()},i.prototype._handleUIPopupDidOpen=function(t){t.source===a.PAYPAL_INTEGRATION_NAME&&this.open()},i.prototype._create=function(){this.el=document.createElement("div"),this.el.className="bt-overlay",this._setStyles(this.el,["z-index: 20001","position: fixed","top: 0","left: 0","height: 100%","width: 100%","text-align: center","background: #000","background: rgba(0,0,0,0.7)",'-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=52)"']),this.el.appendChild(this._createCloseIcon()),this.el.appendChild(this._createMessage())},i.prototype._createCloseIcon=function(){return this.closeIcon=document.createElement("div"),this.closeIcon.className="bt-close-overlay",this._setStyles(this.closeIcon,["position: absolute","top: 10px","right: 10px","cursor: pointer","background: url("+this.spriteSrc+") no-repeat 0 -67px","height: 14px","width: 14px"]),this.closeIcon},i.prototype._createMessage=function(){var t=document.createElement("div");return this._setStyles(t,["position: relative","top: 50%","max-width: 350px",'font-family: "HelveticaNeue", "HelveticaNeue-Light", "Helvetica Neue Light", helvetica, arial, sans-serif',"font-size: 14px","line-height: 20px","margin: -70px auto 0"]),t.appendChild(this._createLogo()),t.appendChild(this._createExplanation()),t.appendChild(this._createFocusLink()),t},i.prototype._createExplanation=function(){var t=document.createElement("div");return this._setStyles(t,["color: #FFF","margin-bottom: 20px"]),t.innerHTML="Don't see the secure PayPal browser? We'll help you re-launch the window to complete your purchase.",t},i.prototype._createLogo=function(){var t=document.createElement("div");return this._setStyles(t,["background: url("+this.spriteSrc+") no-repeat 0 0","width: 94px","height: 25px","margin: 0 auto 26px auto"]),t},i.prototype._createFocusLink=function(){return this.focusLink=document.createElement("a"),this._setStyles(this.focusLink,["color: #009be1","cursor: pointer"]),this.focusLink.innerHTML="Continue",this.focusLink},i.prototype._setStyles=function(t,e){var n=e.join(";");t.style.cssText=n},i.prototype._setupEvents=function(){var t=r.bind(this._handleClose,this),e=r.bind(this._handleFocus,this);r.addEventListener(this.closeIcon,"click",t),r.addEventListener(this.focusLink,"click",e),this.destructor.registerFunctionForTeardown(r.bind(function(){r.removeEventListener(this.closeIcon,"click",t),r.removeEventListener(this.focusLink,"click",e) +},this))},i.prototype._handleClose=function(t){t.preventDefault(),this.close(),r.isFunction(this.options.onClose)&&this.options.onClose()},i.prototype._handleFocus=function(t){t.preventDefault(),r.isFunction(this.options.onFocus)&&this.options.onFocus()},i.prototype.teardown=function(){this.bus.teardown(),this.destructor.teardown(),this.close()},e.exports=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../../shared/constants":354,"braintree-bus":312,"braintree-utilities":324,destructor:325}],352:[function(t,e){(function(n){"use strict";function i(t){this.options=t||{},this.container=this.options.container||document.body,this.el=this.options.el,this.destructor=new o,this.bus=new s({merchantUrl:n.location.href,channel:t.channel}),this._initialize()}var r=t("braintree-utilities"),o=t("destructor"),s=t("braintree-bus"),a=t("../../shared/constants");i.prototype._initialize=function(){r.isFunction(this.el)||(null!=this.el?(this.el=r.normalizeElement(this.el),this.destructor.registerFunctionForTeardown(r.bind(function(){this.clear()},this))):this.el=this.create()),this.bus.on(s.events.PAYMENT_METHOD_GENERATED,r.bind(this._handlePaymentMethodGenerated,this)),this.bus.on(s.events.PAYMENT_METHOD_CANCELLED,r.bind(this._handlePaymentMethodCancelled,this))},i.prototype.create=function(){var t=document.createElement("input");return t.name="payment_method_nonce",t.type="hidden",this.container.appendChild(t),this.destructor.registerFunctionForTeardown(r.bind(function(){this.container.removeChild(t)},this)),t},i.prototype.value=function(t){r.isFunction(this.el)?this.el(t):this.el.value=t},i.prototype.clear=function(){this.value("")},i.prototype._handlePaymentMethodCancelled=function(t){t.source===a.PAYPAL_INTEGRATION_NAME&&this.clear()},i.prototype._handlePaymentMethodGenerated=function(t){t.type===a.NONCE_TYPE&&this.value(t.nonce)},i.prototype.teardown=function(){this.destructor.teardown(),this.bus.teardown()},e.exports=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../../shared/constants":354,"braintree-bus":312,"braintree-utilities":324,destructor:325}],353:[function(t,e,n){arguments[4][185][0].apply(n,arguments)},{"../../shared/constants":354,"../../shared/useragent/browser":357,"braintree-bus":312,dup:185}],354:[function(t,e,n){arguments[4][186][0].apply(n,arguments)},{dup:186}],355:[function(t,e){"use strict";e.exports={us:"en_us",gb:"en_uk",uk:"en_uk",de:"de_de",fr:"fr_fr",it:"it_it",es:"es_es",ca:"en_ca",au:"en_au",at:"de_de",be:"en_us",ch:"de_de",dk:"da_dk",nl:"nl_nl",no:"no_no",pl:"pl_pl",se:"sv_se",tr:"tr_tr",bg:"en_us",cy:"en_us",hr:"en_us",is:"en_us",kh:"en_us",mt:"en_us",my:"en_us",ru:"ru_ru"}},{}],356:[function(t,e){"use strict";function n(t){return-1!==t.indexOf("_")&&5===t.length}function i(t){var e,n;for(e in o)o.hasOwnProperty(e)&&(e===t?n=o[e]:o[e]===t&&(n=o[e]));return n}function r(t){var e,r;return t=t?t.toLowerCase():"us",t=t.replace(/-/g,"_"),e=n(t)?t:i(t),e?(r=e.split("_"),[r[0],r[1].toUpperCase()].join("_")):"en_US"}var o=t("../shared/data/country-code-lookup");e.exports=r},{"../shared/data/country-code-lookup":355}],357:[function(t,e,n){arguments[4][187][0].apply(n,arguments)},{"./platform":359,"./useragent":360,dup:187}],358:[function(t,e,n){arguments[4][188][0].apply(n,arguments)},{"./platform":359,"./useragent":360,dup:188}],359:[function(t,e,n){arguments[4][189][0].apply(n,arguments)},{"./useragent":360,dup:189}],360:[function(t,e,n){arguments[4][190][0].apply(n,arguments)},{dup:190}],361:[function(t,e,n){arguments[4][191][0].apply(n,arguments)},{"../useragent/browser":357,"../useragent/device":358,"../useragent/platform":359,"../useragent/useragent":360,dup:191}],362:[function(t,e){"use strict";function n(t,e){var n="innerText";document&&document.body&&"textContent"in document.body&&(n="textContent"),t[n]=e}e.exports={setTextContent:n}},{}],363:[function(t,e){"use strict";function n(){var t,e,n="";for(t=0;32>t;t++)e=Math.floor(16*Math.random()),n+=e.toString(16);return n}function i(t){return/^(true|1)$/i.test(t)}function r(t){return t.replace(/&/g,"&").replace(//g,">").replace(/\"/g,""").replace(/\'/g,"'")}function o(t){var e,n,i,r,o,s,a,u,c=t.indexOf("?"),l={};if(c>=0&&(t=t.substr(c+1)),0===t.length)return null;for(e=t.split("&"),n=0,i=e.length;i>n;n++)r=e[n],o=r.indexOf("="),s=r.substr(0,o),u=r.substr(o+1),a=decodeURIComponent(u),a=a.replace(//g,">"),"false"===a&&(a=!1),(null==a||"true"===a)&&(a=!0),l[s]=a;return l}function s(t){t.preventDefault?t.preventDefault():t.returnValue=!1}function a(t){return Boolean(t.singleUse)&&Boolean(t.amount)&&Boolean(t.currency)}function u(t){return Boolean(t.paypal.billingAgreementsEnabled)}function c(t,e){return u(t)||a(e)}var l="function"==typeof String.prototype.trim?function(t){return t.trim()}:function(t){return t.replace(/^\s+|\s+$/,"")},p="function"==typeof window.btoa?function(t){return window.btoa(t)}:function(t){for(var e,n,i,r,o,s,a,u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",c="",l=0;l>2,o=(3&e)<<4|n>>4,s=(15&n)<<2|i>>6,a=63&i,isNaN(n)?s=a=64:isNaN(i)&&(a=64),c=c+u.charAt(r)+u.charAt(o)+u.charAt(s)+u.charAt(a);return c};e.exports={trim:l,btoa:p,generateUid:n,castToBoolean:i,htmlEscape:r,parseUrlParams:o,preventDefault:s,isOneTimeHermesConfiguration:a,isBillingAgreementsHermesConfiguration:u,isHermesConfiguration:c}},{}],364:[function(t,e,n){arguments[4][35][0].apply(n,arguments)},{dup:35}],365:[function(t,e,n){arguments[4][36][0].apply(n,arguments)},{dup:36}],366:[function(t,e,n){arguments[4][22][0].apply(n,arguments)},{dup:22}],367:[function(t,e,n){arguments[4][38][0].apply(n,arguments)},{dup:38}],368:[function(t,e,n){arguments[4][39][0].apply(n,arguments)},{dup:39}],369:[function(t,e,n){arguments[4][40][0].apply(n,arguments)},{dup:40}],370:[function(t,e,n){arguments[4][41][0].apply(n,arguments)},{"./array":364,dup:41}],371:[function(t,e,n){arguments[4][42][0].apply(n,arguments)},{dup:42}],372:[function(t,e,n){arguments[4][43][0].apply(n,arguments)},{"./lib/array":364,"./lib/base64":365,"./lib/dom":366,"./lib/events":367,"./lib/fn":368,"./lib/string":369,"./lib/url":370,"./lib/uuid":371,dup:43}],373:[function(t,e,n){arguments[4][80][0].apply(n,arguments)},{"batch-execute-functions":374,"braintree-utilities/lib/fn":375,dup:80}],374:[function(t,e,n){arguments[4][81][0].apply(n,arguments)},{dup:81}],375:[function(t,e,n){arguments[4][39][0].apply(n,arguments)},{dup:39}],376:[function(t,e){(function(t){"use strict";function n(t){if(("string"==typeof t||t instanceof String)&&(t=document.getElementById(t)),!(t instanceof HTMLFormElement))throw new TypeError("FormNapper requires an HTMLFormElement element or the id string of one.");this.htmlForm=t}n.prototype.hijack=function(e){this.submitHandler||(this.submitHandler=function(t){t.preventDefault?t.preventDefault():t.returnValue=!1,e(t)},null!=t.addEventListener?this.htmlForm.addEventListener("submit",this.submitHandler,!1):null!=t.attachEvent?this.htmlForm.attachEvent("onsubmit",this.submitHandler):this.htmlForm.onsubmit=this.submitHandler)},n.prototype.inject=function(t,e){var n=this.htmlForm.querySelector('input[name="'+t+'"]');return null==n&&(n=document.createElement("input"),n.type="hidden",n.name=t,this.htmlForm.appendChild(n)),n.value=e,n},n.prototype.submit=function(){HTMLFormElement.prototype.submit.call(this.htmlForm)},n.prototype.detach=function(){this.submitHandler&&(null!=t.removeEventListener?this.htmlForm.removeEventListener("submit",this.submitHandler,!1):null!=t.detachEvent?this.htmlForm.detachEvent("onsubmit",this.submitHandler):this.htmlForm.onsubmit=null,delete this.submitHandler)},e.exports=n}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],377:[function(t,e){var n=t("./lib/external"),i=t("./lib/shared/constants").events,r="1.0.0";e.exports={create:function(t){return new n(t)},events:i,VERSION:r}},{"./lib/external":379,"./lib/shared/constants":381}],378:[function(t,e){var n=t("../shared/constants");e.exports=function(t,e){return t+"/hosted-fields/"+n.VERSION+"/hosted-fields-frame.html#"+e}},{"../shared/constants":381}],379:[function(t,e){"use strict";function n(t,e){var n=document.createElement("div");return n.style.clear="both",e=e||document.body,e.appendChild(t),e.appendChild(n),{parent:e,children:[t,n]}}function i(t,e){return function(n){var i=t[n.fieldKey].containerElement,r=s(i);n.target={fieldKey:n.fieldKey,container:i},r.toggle(l.externalClasses.FOCUSED,n.isFocused).toggle(l.externalClasses.VALID,n.isValid),n.isStrictlyValidating?r.toggle(l.externalClasses.INVALID,!n.isValid):r.toggle(l.externalClasses.INVALID,!n.isPotentiallyValid),delete n.fieldKey,delete n.isStrictlyValidating,e&&e(n)}}function r(t){var e,r,p,d,f,g,y={},b=0;for(this.injectedNodes=[],this.destructor=new o,this.bus=new u({channel:t.channel,merchantUrl:location.href}),this.destructor.registerFunctionForTeardown(h.bind(function(){this.bus.teardown()},this)),this.bus.emit(u.events.ASYNC_DEPENDENCY_INITIALIZING),this.bus.emit(u.events.SEND_ANALYTICS_EVENTS,"hosted-fields.initialized"),f=0;f=0||o.push.call(this,t);return this._elem.className=this.toString(),this},n.prototype.remove=function(){var t,e,n;for(n=0;nt||o.splice.call(this,t,1);return this._elem.className=this.toString(),this},n.prototype.contains=function(t){return t+="",i(this,t)>=0},n.prototype.toggle=function(t,e){return t+="",e===!0?this.add(t):e===!1?this.remove(t):this[this.contains(t)?"remove":"add"](t)},n.prototype.toString=function(){return o.join.call(this," ")}},{"component-indexof":397,trim:398}],397:[function(t,e){e.exports=function(t,e){if(t.indexOf)return t.indexOf(e);for(var n=0;n Date: Thu, 17 Sep 2015 14:59:11 -0400 Subject: [PATCH 052/163] Rename creditcard#details to creditcard#data Use for parsing text field if needed. --- app/models/concerns/use_data_field_concern.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/models/concerns/use_data_field_concern.rb b/app/models/concerns/use_data_field_concern.rb index 31357320..1e412b90 100644 --- a/app/models/concerns/use_data_field_concern.rb +++ b/app/models/concerns/use_data_field_concern.rb @@ -7,15 +7,15 @@ module UseDataFieldConcern module InstanceMethods def email - details["email"] + data["email"] end def display_number cc_type == 'paypal' ? email : super end - def details - @details ||= (data.is_a?(String) ? JSON.parse(data) : data) + def data + super.is_a?(String) ? JSON.parse(super) : super end end end From 0514e858f5ce865507d7657f1ab4f81fe53fa104 Mon Sep 17 00:00:00 2001 From: Allie Larson Date: Thu, 17 Sep 2015 14:59:31 -0400 Subject: [PATCH 053/163] Bump version to 0.2.0 --- CHANGELOG.md | 3 +++ lib/solidus_braintree/version.rb | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cb4cb47b..156ced83 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ ## HEAD +## 0.2.0 + +* Add functionality around PayPal by adding a json or text field on credit card for storing extra data coming back from Braintree. * Upgrade braintree to 2.14.0 for hosted field and teardown support. ## 0.1.5 diff --git a/lib/solidus_braintree/version.rb b/lib/solidus_braintree/version.rb index f926bd64..0ce4cc71 100644 --- a/lib/solidus_braintree/version.rb +++ b/lib/solidus_braintree/version.rb @@ -1,3 +1,3 @@ module SolidusBraintree - VERSION = "0.1.6" + VERSION = "0.2.0" end From 2a3cf394e8c564074da8f464444a42ae12b7fc59 Mon Sep 17 00:00:00 2001 From: Greg Date: Mon, 2 Nov 2015 17:02:39 -0600 Subject: [PATCH 054/163] supply first and last name in addresses The fields are optional for Braintree credit cards, but PayPal requires them or else the whole shipping address is stripped. The shipping address needs to arrive in PayPal to provide seller protection. --- .../solidus/gateway/braintree_gateway.rb | 7 ++++ lib/solidus_braintree/version.rb | 2 +- .../solidus/gateway/braintree_gateway_spec.rb | 35 +++++++++++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) diff --git a/app/models/solidus/gateway/braintree_gateway.rb b/app/models/solidus/gateway/braintree_gateway.rb index 09115446..9bea8875 100644 --- a/app/models/solidus/gateway/braintree_gateway.rb +++ b/app/models/solidus/gateway/braintree_gateway.rb @@ -160,7 +160,14 @@ def handle_result(result) end def map_address(addr) + full_name = addr.fetch(:name, "") + *first_name_parts, last_name = full_name.split(" ") + first_name = first_name_parts.join(" ") + last_name ||= "" + { + first_name: first_name, + last_name: last_name, street_address: addr[:address1], extended_address: addr[:address2], locality: addr[:city], diff --git a/lib/solidus_braintree/version.rb b/lib/solidus_braintree/version.rb index 0ce4cc71..891bd0e7 100644 --- a/lib/solidus_braintree/version.rb +++ b/lib/solidus_braintree/version.rb @@ -1,3 +1,3 @@ module SolidusBraintree - VERSION = "0.2.0" + VERSION = "0.2.1" end diff --git a/spec/solidus/gateway/braintree_gateway_spec.rb b/spec/solidus/gateway/braintree_gateway_spec.rb index 61e18616..4a973627 100644 --- a/spec/solidus/gateway/braintree_gateway_spec.rb +++ b/spec/solidus/gateway/braintree_gateway_spec.rb @@ -348,6 +348,8 @@ it 'sends a bill address' do expected_params = { billing: { + first_name: address.first_name, + last_name: address.last_name, street_address: "1234 bill address", extended_address: address.address2, locality: address.city, @@ -408,6 +410,8 @@ options: {}, amount: "5.00", shipping: { + first_name: address.first_name, + last_name: address.last_name, street_address: address.address1, extended_address: address.address2, locality: address.city, @@ -416,6 +420,8 @@ postal_code: address.zipcode, }, billing: { + first_name: address.first_name, + last_name: address.last_name, street_address: address.address1, extended_address: address.address2, locality: address.city, @@ -433,5 +439,34 @@ end end end + + context "first and last name splitting" do + # since the address_hash comes from Spree::Address#active_merchant_hash which throws away + # information by only giving a concatenated full name in the :name field, we have to do a best + # guess here to split it back out. PayPal actually requires first_name and last_name on the + # shipping address in order to provide seller protection. Having something there is better + # than nothing. + let(:mapped_address) { payment_method.send(:map_address, {name: name}) } + + context "simple 2 word name" do + let(:name) { "Luke Skywalker" } + + it "splits" do + address = mapped_address + expect(address[:first_name]).to eq "Luke" + expect(address[:last_name]).to eq "Skywalker" + end + end + + context "3 word name" do + let(:name) { "Obi Wan Kenobi" } + + it "splits" do + address = mapped_address + expect(address[:first_name]).to eq "Obi Wan" + expect(address[:last_name]).to eq "Kenobi" + end + end + end end end From c6511918aa2f71951e5e416d6a129103753f634b Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Mon, 21 Mar 2016 16:59:29 -0700 Subject: [PATCH 055/163] Update travis.yml --- .travis.yml | 14 ++++++++++++-- Gemfile | 4 ++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 91bb4773..fb465c3a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,14 @@ +sudo: false +cache: bundler language: ruby +env: + matrix: + - SOLIDUS_BRANCH=v1.0 DB=postgres + - SOLIDUS_BRANCH=v1.1 DB=postgres + - SOLIDUS_BRANCH=v1.2 DB=postgres + - SOLIDUS_BRANCH=master DB=postgres +script: + - bundle exec rake test_app + - bundle exec rspec rvm: - - 2.1.6 -before_install: gem install bundler -v 1.10.5 + - 2.1.8 diff --git a/Gemfile b/Gemfile index 133c5dfe..c3671baa 100644 --- a/Gemfile +++ b/Gemfile @@ -2,4 +2,8 @@ source 'https://rubygems.org' # Specify your gem's dependencies in solidus_braintree.gemspec gem "solidus", github: "solidusio/solidus", branch: "master" + +gem 'pg' +gem 'mysql2' + gemspec From 8ac36c5bd903604a77c3a567d60ca079e108bf21 Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Tue, 22 Mar 2016 10:27:03 -0700 Subject: [PATCH 056/163] Use postgresql 9.3 --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index fb465c3a..067b39f4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,8 @@ sudo: false cache: bundler language: ruby +addons: + postgresql: "9.3" env: matrix: - SOLIDUS_BRANCH=v1.0 DB=postgres From 2c737c6e0ece61cbda68940d9dc7a8e090ef92a4 Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Tue, 22 Mar 2016 11:22:29 -0700 Subject: [PATCH 057/163] Fix spec related to bill address --- spec/solidus/gateway/braintree_gateway_spec.rb | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/spec/solidus/gateway/braintree_gateway_spec.rb b/spec/solidus/gateway/braintree_gateway_spec.rb index 4a973627..c01907c9 100644 --- a/spec/solidus/gateway/braintree_gateway_spec.rb +++ b/spec/solidus/gateway/braintree_gateway_spec.rb @@ -348,14 +348,14 @@ it 'sends a bill address' do expected_params = { billing: { - first_name: address.first_name, - last_name: address.last_name, - street_address: "1234 bill address", - extended_address: address.address2, - locality: address.city, - region: address.state_text, - country_code_alpha2: address.country.iso, - postal_code: address.zipcode, + first_name: bill_address.first_name, + last_name: bill_address.last_name, + street_address: bill_address.address1, + extended_address: bill_address.address2, + locality: bill_address.city, + region: bill_address.state_text, + country_code_alpha2: bill_address.country.iso, + postal_code: bill_address.zipcode, }, customer_id: creditcard.gateway_customer_profile_id, payment_method_token: 'abc123', From 098896e1f533c0927b1992558343727b82e24ef1 Mon Sep 17 00:00:00 2001 From: Dylan Kendal Date: Thu, 14 Jan 2016 14:53:40 -0800 Subject: [PATCH 058/163] Namespace concern module names The modules defined in app/models/concerns are all references as if they are namespaced when defined (they aren't) e.g. Defined as module SkipRequireCardNumbersConcern ... end referenced as Spree::CreditCard.include SolidusBraintree::SkipRequireCardNumbersConcern This commit namespaces the concerns when they are defined. I'm not too sure how this previously worked, however in an upgrade to Solidus 1.1.1 my store couldn't properly resolve the constant name any more. --- .../concerns/add_name_validation_concern.rb | 6 ----- .../payment_braintree_nonce_concern.rb | 6 ----- .../concerns/permitted_attributes_concern.rb | 5 ---- .../skip_require_card_numbers_concern.rb | 12 ---------- .../add_name_validation_concern.rb | 8 +++++++ .../payment_braintree_nonce_concern.rb | 8 +++++++ .../permitted_attributes_concern.rb | 7 ++++++ .../skip_require_card_numbers_concern.rb | 14 +++++++++++ .../use_data_field_concern.rb | 23 +++++++++++++++++++ app/models/concerns/use_data_field_concern.rb | 21 ----------------- 10 files changed, 60 insertions(+), 50 deletions(-) delete mode 100644 app/models/concerns/add_name_validation_concern.rb delete mode 100644 app/models/concerns/payment_braintree_nonce_concern.rb delete mode 100644 app/models/concerns/permitted_attributes_concern.rb delete mode 100644 app/models/concerns/skip_require_card_numbers_concern.rb create mode 100644 app/models/concerns/solidus_braintree/add_name_validation_concern.rb create mode 100644 app/models/concerns/solidus_braintree/payment_braintree_nonce_concern.rb create mode 100644 app/models/concerns/solidus_braintree/permitted_attributes_concern.rb create mode 100644 app/models/concerns/solidus_braintree/skip_require_card_numbers_concern.rb create mode 100644 app/models/concerns/solidus_braintree/use_data_field_concern.rb delete mode 100644 app/models/concerns/use_data_field_concern.rb diff --git a/app/models/concerns/add_name_validation_concern.rb b/app/models/concerns/add_name_validation_concern.rb deleted file mode 100644 index f374d3b0..00000000 --- a/app/models/concerns/add_name_validation_concern.rb +++ /dev/null @@ -1,6 +0,0 @@ -module AddNameValidationConcern - extend ActiveSupport::Concern - included do - validates :name, presence: true, on: :create - end -end diff --git a/app/models/concerns/payment_braintree_nonce_concern.rb b/app/models/concerns/payment_braintree_nonce_concern.rb deleted file mode 100644 index 792d2774..00000000 --- a/app/models/concerns/payment_braintree_nonce_concern.rb +++ /dev/null @@ -1,6 +0,0 @@ -module PaymentBraintreeNonceConcern - extend ActiveSupport::Concern - included do - attr_accessor :payment_method_nonce - end -end diff --git a/app/models/concerns/permitted_attributes_concern.rb b/app/models/concerns/permitted_attributes_concern.rb deleted file mode 100644 index 335cb479..00000000 --- a/app/models/concerns/permitted_attributes_concern.rb +++ /dev/null @@ -1,5 +0,0 @@ -module PermittedAttributesConcern - def payment_attributes - super | [:payment_method_nonce] - end -end diff --git a/app/models/concerns/skip_require_card_numbers_concern.rb b/app/models/concerns/skip_require_card_numbers_concern.rb deleted file mode 100644 index 3acd4e54..00000000 --- a/app/models/concerns/skip_require_card_numbers_concern.rb +++ /dev/null @@ -1,12 +0,0 @@ -module SkipRequireCardNumbersConcern - extend ActiveSupport::Concern - included do - prepend(InstanceMethods) - end - - module InstanceMethods - def require_card_numbers? - super && !self.payment_method.kind_of?(Solidus::Gateway::BraintreeGateway) - end - end -end diff --git a/app/models/concerns/solidus_braintree/add_name_validation_concern.rb b/app/models/concerns/solidus_braintree/add_name_validation_concern.rb new file mode 100644 index 00000000..13721e9b --- /dev/null +++ b/app/models/concerns/solidus_braintree/add_name_validation_concern.rb @@ -0,0 +1,8 @@ +module SolidusBraintree + module AddNameValidationConcern + extend ActiveSupport::Concern + included do + validates :name, presence: true, on: :create + end + end +end diff --git a/app/models/concerns/solidus_braintree/payment_braintree_nonce_concern.rb b/app/models/concerns/solidus_braintree/payment_braintree_nonce_concern.rb new file mode 100644 index 00000000..576efa50 --- /dev/null +++ b/app/models/concerns/solidus_braintree/payment_braintree_nonce_concern.rb @@ -0,0 +1,8 @@ +module SolidusBraintree + module PaymentBraintreeNonceConcern + extend ActiveSupport::Concern + included do + attr_accessor :payment_method_nonce + end + end +end diff --git a/app/models/concerns/solidus_braintree/permitted_attributes_concern.rb b/app/models/concerns/solidus_braintree/permitted_attributes_concern.rb new file mode 100644 index 00000000..7025cbf3 --- /dev/null +++ b/app/models/concerns/solidus_braintree/permitted_attributes_concern.rb @@ -0,0 +1,7 @@ +module SolidusBraintree + module PermittedAttributesConcern + def payment_attributes + super | [:payment_method_nonce] + end + end +end diff --git a/app/models/concerns/solidus_braintree/skip_require_card_numbers_concern.rb b/app/models/concerns/solidus_braintree/skip_require_card_numbers_concern.rb new file mode 100644 index 00000000..9054b332 --- /dev/null +++ b/app/models/concerns/solidus_braintree/skip_require_card_numbers_concern.rb @@ -0,0 +1,14 @@ +module SolidusBraintree + module SkipRequireCardNumbersConcern + extend ActiveSupport::Concern + included do + prepend(InstanceMethods) + end + + module InstanceMethods + def require_card_numbers? + super && !self.payment_method.kind_of?(Solidus::Gateway::BraintreeGateway) + end + end + end +end diff --git a/app/models/concerns/solidus_braintree/use_data_field_concern.rb b/app/models/concerns/solidus_braintree/use_data_field_concern.rb new file mode 100644 index 00000000..0cfe878d --- /dev/null +++ b/app/models/concerns/solidus_braintree/use_data_field_concern.rb @@ -0,0 +1,23 @@ +module SolidusBraintree + module UseDataFieldConcern + extend ActiveSupport::Concern + included do + prepend(InstanceMethods) + end + + module InstanceMethods + + def email + data["email"] + end + + def display_number + cc_type == 'paypal' ? email : super + end + + def data + super.is_a?(String) ? JSON.parse(super) : super + end + end + end +end diff --git a/app/models/concerns/use_data_field_concern.rb b/app/models/concerns/use_data_field_concern.rb deleted file mode 100644 index 1e412b90..00000000 --- a/app/models/concerns/use_data_field_concern.rb +++ /dev/null @@ -1,21 +0,0 @@ -module UseDataFieldConcern - extend ActiveSupport::Concern - included do - prepend(InstanceMethods) - end - - module InstanceMethods - - def email - data["email"] - end - - def display_number - cc_type == 'paypal' ? email : super - end - - def data - super.is_a?(String) ? JSON.parse(super) : super - end - end -end From b742abf1d6e52094f59783186d79d0fd85f3faea Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Wed, 23 Mar 2016 16:57:20 -0700 Subject: [PATCH 059/163] Just use text instead of JSON This already manually does a JSON.parse, so there's no need to use a JSON type. --- db/migrate/20150910170527_add_data_to_credit_card.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/migrate/20150910170527_add_data_to_credit_card.rb b/db/migrate/20150910170527_add_data_to_credit_card.rb index 550311c0..67ee8904 100644 --- a/db/migrate/20150910170527_add_data_to_credit_card.rb +++ b/db/migrate/20150910170527_add_data_to_credit_card.rb @@ -1,5 +1,5 @@ class AddDataToCreditCard < ActiveRecord::Migration def change - add_column :spree_credit_cards, :data, :json + add_column :spree_credit_cards, :data, :text end end From 880974b98d31fd7b624fc6294e2df97ca163f54d Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Wed, 23 Mar 2016 16:50:32 -0700 Subject: [PATCH 060/163] Test MySQL --- .travis.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.travis.yml b/.travis.yml index 067b39f4..cf27e9b8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,6 +9,10 @@ env: - SOLIDUS_BRANCH=v1.1 DB=postgres - SOLIDUS_BRANCH=v1.2 DB=postgres - SOLIDUS_BRANCH=master DB=postgres + - SOLIDUS_BRANCH=v1.0 DB=mysql + - SOLIDUS_BRANCH=v1.1 DB=mysql + - SOLIDUS_BRANCH=v1.2 DB=mysql + - SOLIDUS_BRANCH=master DB=mysql script: - bundle exec rake test_app - bundle exec rspec From 7f7b47fddfac94a09e44d4984ec4d201d6d794e1 Mon Sep 17 00:00:00 2001 From: Phillip Birtcher Date: Mon, 23 Nov 2015 11:05:31 -0500 Subject: [PATCH 061/163] Add AVS response code to ActiveMerchant responses --- app/models/solidus/gateway/braintree_gateway.rb | 11 ++++++++++- spec/solidus/gateway/braintree_gateway_spec.rb | 3 +++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/app/models/solidus/gateway/braintree_gateway.rb b/app/models/solidus/gateway/braintree_gateway.rb index 9bea8875..df1958ea 100644 --- a/app/models/solidus/gateway/braintree_gateway.rb +++ b/app/models/solidus/gateway/braintree_gateway.rb @@ -150,12 +150,21 @@ def message_from_result(result) end end + def build_results_hash(result) + {}.tap do |results_hash| + results_hash.merge!({ + authorization: result.transaction.id, + avs_result: { code: result.transaction.avs_street_address_response_code } + }) if result.success? + end + end + def handle_result(result) ActiveMerchant::Billing::Response.new( result.success?, message_from_result(result), {}, - { authorization: (result.transaction.id if result.success?) } + build_results_hash(result) ) end diff --git a/spec/solidus/gateway/braintree_gateway_spec.rb b/spec/solidus/gateway/braintree_gateway_spec.rb index c01907c9..58712e85 100644 --- a/spec/solidus/gateway/braintree_gateway_spec.rb +++ b/spec/solidus/gateway/braintree_gateway_spec.rb @@ -87,6 +87,7 @@ capture = payment_method.capture(5000, auth.authorization, {}) expect(capture).to be_success expect(capture.authorization).to be_present + expect(capture.avs_result["code"]).to eq "M" end end @@ -151,10 +152,12 @@ auth = payment_method.authorize(5000, card, {}) expect(auth).to be_success expect(auth.authorization).to be_present + expect(auth.avs_result["code"]).to eq "I" capture = payment_method.capture(5000, auth.authorization, {}) expect(capture).to be_success expect(capture.authorization).to be_present + expect(capture.avs_result["code"]).to eq "I" end it "succeeds capture on pending settlement" do From c722b21111644791041b574f52b470a3cfa9b249 Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Wed, 30 Mar 2016 10:45:57 -0700 Subject: [PATCH 062/163] Simplify build_results_hash --- app/models/solidus/gateway/braintree_gateway.rb | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/app/models/solidus/gateway/braintree_gateway.rb b/app/models/solidus/gateway/braintree_gateway.rb index df1958ea..4af8e05f 100644 --- a/app/models/solidus/gateway/braintree_gateway.rb +++ b/app/models/solidus/gateway/braintree_gateway.rb @@ -151,11 +151,15 @@ def message_from_result(result) end def build_results_hash(result) - {}.tap do |results_hash| - results_hash.merge!({ + if result.success? + { authorization: result.transaction.id, - avs_result: { code: result.transaction.avs_street_address_response_code } - }) if result.success? + avs_result: { + code: result.transaction.avs_street_address_response_code + } + } + else + {} end end From bd359f23d1c558bd5915e86f815f1a776bd8de0f Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Wed, 30 Mar 2016 10:51:01 -0700 Subject: [PATCH 063/163] Remove out.json --- out.json | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 out.json diff --git a/out.json b/out.json deleted file mode 100644 index e69de29b..00000000 From 19329ee8fab2273981b24b0e7ea4836e95d6d435 Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Wed, 30 Mar 2016 10:57:50 -0700 Subject: [PATCH 064/163] Remove guard I don't believe guard is so widely used anymore. It is an unnecessary dependency. --- Guardfile | 70 --------------------------------------- solidus_braintree.gemspec | 2 -- 2 files changed, 72 deletions(-) delete mode 100644 Guardfile diff --git a/Guardfile b/Guardfile deleted file mode 100644 index deea540d..00000000 --- a/Guardfile +++ /dev/null @@ -1,70 +0,0 @@ -# A sample Guardfile -# More info at https://github.com/guard/guard#readme - -## Uncomment and set this to only include directories you want to watch -# directories %w(app lib config test spec features) \ -# .select{|d| Dir.exists?(d) ? d : UI.warning("Directory #{d} does not exist")} - -## Note: if you are using the `directories` clause above and you are not -## watching the project directory ('.'), then you will want to move -## the Guardfile to a watched dir and symlink it back, e.g. -# -# $ mkdir config -# $ mv Guardfile config/ -# $ ln -s config/Guardfile . -# -# and, you'll have to watch "config/Guardfile" instead of "Guardfile" - -# Note: The cmd option is now required due to the increasing number of ways -# rspec may be run, below are examples of the most common uses. -# * bundler: 'bundle exec rspec' -# * bundler binstubs: 'bin/rspec' -# * spring: 'bin/rspec' (This will use spring if running and you have -# installed the spring binstubs per the docs) -# * zeus: 'zeus rspec' (requires the server to be started separately) -# * 'just' rspec: 'rspec' - -guard :rspec, cmd: "bundle exec rspec" do - require "guard/rspec/dsl" - dsl = Guard::RSpec::Dsl.new(self) - - # Feel free to open issues for suggestions and improvements - - # RSpec files - rspec = dsl.rspec - watch(rspec.spec_helper) { rspec.spec_dir } - watch(rspec.spec_support) { rspec.spec_dir } - watch(rspec.spec_files) - - # Ruby files - ruby = dsl.ruby - dsl.watch_spec_files_for(ruby.lib_files) - - # Rails files - rails = dsl.rails(view_extensions: %w(erb haml slim)) - dsl.watch_spec_files_for(rails.app_files) - dsl.watch_spec_files_for(rails.views) - - watch(rails.controllers) do |m| - [ - rspec.spec.("routing/#{m[1]}_routing"), - rspec.spec.("controllers/#{m[1]}_controller"), - rspec.spec.("acceptance/#{m[1]}") - ] - end - - # Rails config changes - watch(rails.spec_helper) { rspec.spec_dir } - watch(rails.routes) { "#{rspec.spec_dir}/routing" } - watch(rails.app_controller) { "#{rspec.spec_dir}/controllers" } - - # Capybara features specs - watch(rails.view_dirs) { |m| rspec.spec.("features/#{m[1]}") } - watch(rails.layouts) { |m| rspec.spec.("features/#{m[1]}") } - - # Turnip features and steps - watch(%r{^spec/acceptance/(.+)\.feature$}) - watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) do |m| - Dir[File.join("**/#{m[1]}.feature")][0] || "spec/acceptance" - end -end diff --git a/solidus_braintree.gemspec b/solidus_braintree.gemspec index 2b7e5f61..ffc67ca2 100644 --- a/solidus_braintree.gemspec +++ b/solidus_braintree.gemspec @@ -28,8 +28,6 @@ Gem::Specification.new do |spec| spec.add_development_dependency 'rspec-rails' spec.add_development_dependency 'ffaker' spec.add_development_dependency "rspec" - spec.add_development_dependency "guard" - spec.add_development_dependency "guard-rspec" spec.add_development_dependency "pry" spec.add_development_dependency "pry-byebug" spec.add_development_dependency 'sqlite3' From f972b8eb7d71074ed9f86b842cfceeb4cdc799cb Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Wed, 30 Mar 2016 11:18:58 -0700 Subject: [PATCH 065/163] Require pry and byebug but not pry-byebug --- solidus_braintree.gemspec | 2 +- spec/spec_helper.rb | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/solidus_braintree.gemspec b/solidus_braintree.gemspec index ffc67ca2..b06fe26f 100644 --- a/solidus_braintree.gemspec +++ b/solidus_braintree.gemspec @@ -29,7 +29,7 @@ Gem::Specification.new do |spec| spec.add_development_dependency 'ffaker' spec.add_development_dependency "rspec" spec.add_development_dependency "pry" - spec.add_development_dependency "pry-byebug" + spec.add_development_dependency "byebug" spec.add_development_dependency 'sqlite3' spec.add_development_dependency 'database_cleaner', '~> 1.2.0' spec.add_development_dependency "vcr" diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 9b931662..b46ca91c 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -9,7 +9,8 @@ require 'ffaker' require 'vcr' require 'webmock' -require 'pry-byebug' +require 'pry' +require 'byebug' Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} From 5c61e1499a2fa82f82d83d27a2f76fd70fb6a05c Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Wed, 30 Mar 2016 11:19:43 -0700 Subject: [PATCH 066/163] Losen dependency on database_cleaner --- solidus_braintree.gemspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/solidus_braintree.gemspec b/solidus_braintree.gemspec index b06fe26f..e0bcea97 100644 --- a/solidus_braintree.gemspec +++ b/solidus_braintree.gemspec @@ -31,7 +31,7 @@ Gem::Specification.new do |spec| spec.add_development_dependency "pry" spec.add_development_dependency "byebug" spec.add_development_dependency 'sqlite3' - spec.add_development_dependency 'database_cleaner', '~> 1.2.0' + spec.add_development_dependency 'database_cleaner', '~> 1.2' spec.add_development_dependency "vcr" spec.add_development_dependency "webmock" end From ce9f98e44b2cfb168bb49755002875c88f86a531 Mon Sep 17 00:00:00 2001 From: Eric Saupe Date: Fri, 1 Apr 2016 10:19:25 -0600 Subject: [PATCH 067/163] Javascript for hosted forms --- .../api/braintree_client_token_controller.rb | 2 + .../solidus/gateway/braintree_gateway.rb | 4 + .../frontend_payment_add_braintree_dropin.rb | 8 ++ .../frontend/braintree/solidus_braintree.js | 82 +++++++++++++++++++ lib/solidus_braintree/engine.rb | 5 +- 5 files changed, 99 insertions(+), 2 deletions(-) create mode 100644 app/overrides/frontend_payment_add_braintree_dropin.rb create mode 100644 lib/assets/javascripts/spree/frontend/braintree/solidus_braintree.js diff --git a/app/controllers/spree/api/braintree_client_token_controller.rb b/app/controllers/spree/api/braintree_client_token_controller.rb index 935f7ad9..b691f889 100644 --- a/app/controllers/spree/api/braintree_client_token_controller.rb +++ b/app/controllers/spree/api/braintree_client_token_controller.rb @@ -1,4 +1,6 @@ class Spree::Api::BraintreeClientTokenController < Spree::Api::BaseController + skip_before_action :authenticate_user + def create if params[:payment_method_id] gateway = Solidus::Gateway::BraintreeGateway.find_by!(id: params[:payment_method_id]) diff --git a/app/models/solidus/gateway/braintree_gateway.rb b/app/models/solidus/gateway/braintree_gateway.rb index 4af8e05f..0259a7f9 100644 --- a/app/models/solidus/gateway/braintree_gateway.rb +++ b/app/models/solidus/gateway/braintree_gateway.rb @@ -21,6 +21,10 @@ class Gateway::BraintreeGateway < ::Spree::Gateway 'Visa' => 'visa', } + def method_type + 'braintree' + end + def gateway_options { environment: preferred_environment.to_sym, diff --git a/app/overrides/frontend_payment_add_braintree_dropin.rb b/app/overrides/frontend_payment_add_braintree_dropin.rb new file mode 100644 index 00000000..f8c185c0 --- /dev/null +++ b/app/overrides/frontend_payment_add_braintree_dropin.rb @@ -0,0 +1,8 @@ +Deface::Override.new( + virtual_path: "spree/checkout/_payment", + name: "frontend_payment_add_braintree_dropin", + insert_bottom: "ul#payment-methods", + text: %Q{ + <%= javascript_include_tag "spree/frontend/braintree/solidus_braintree", "data-turbolinks-track" => true, "crossorigin" => "anonymous" %> + } +) diff --git a/lib/assets/javascripts/spree/frontend/braintree/solidus_braintree.js b/lib/assets/javascripts/spree/frontend/braintree/solidus_braintree.js new file mode 100644 index 00000000..fd2b1d45 --- /dev/null +++ b/lib/assets/javascripts/spree/frontend/braintree/solidus_braintree.js @@ -0,0 +1,82 @@ +//= require "vendor/braintree-2.14.0" + +Spree.routes.payment_client_token_api = Spree.pathFor("api/payment_client_token") + +var braintreeDropinIntegration; +var cardSelector = "#payment-method-fields"; +var paymentId; + +var getClientToken = function(onSuccess) { + return Spree.ajax({ + url: Spree.routes.payment_client_token_api, + type: "POST", + data: { + payment_method_id: paymentId + }, + error: function(xhr, status) { + // show_flash("error", xhr.responseJSON.message); + showFields(); + if (braintreeDropinIntegration) { + braintreeDropinIntegration.teardown(); + braintreeDropinIntegration = null; + } + }, + success: function(data) { + onSuccess(data); + } + }); +}; + +var initializeBraintree = function(data) { + $("#card_expiry").on("keyup", function() { + $("#braintree_expiration_date").val($(this).val().replace(/ /g,'')); + console.log($("#braintree_expiration_date").val()); + }) + braintree.setup(data.client_token, "custom", { + id: "checkout_form_payment", + onReady: function (integration) { + braintreeDropinIntegration = integration; + }, + onError: function(type, message) { + // show_flash("error", message); + console.log(message); + }, + onPaymentMethodReceived: function(obj) { + $("#payment_method_nonce").val(obj.nonce); + $("#checkout_form_payment").submit(); + return; + } + }); +}; + +var hideFields = function() { + $("#payment_method_" + paymentId).find(".field").hide(); + $("#credit-card-image").hide(); +} + +var showFields = function() { + $("#payment_method_" + paymentId).find(".field").show(); + $("#credit-card-image").show(); +} + +var removeFields = function() { + $("#payment_method_" + paymentId).find(".field").remove(); + $("#credit-card-image").remove(); +} + +$(document).ready(function() { + if ($(cardSelector).find("input[type=radio][name='order[payments_attributes][][payment_method_id]']").length) { + $(cardSelector).find("input[type=radio][name='order[payments_attributes][][payment_method_id]']").on("change", function() { + paymentId = $(this).val(); + if (true || $(cardSelector + ":checked").val() === "new") { + getClientToken(initializeBraintree); + } else { + if (braintreeDropinIntegration) { + braintreeDropinIntegration.teardown(); + } + } + }); + } + paymentId = $("form input[type=radio][name='order[payments_attributes][][payment_method_id]']:checked").val(); + getClientToken(initializeBraintree); +}); diff --git a/lib/solidus_braintree/engine.rb b/lib/solidus_braintree/engine.rb index c9c08d1e..9e821b8e 100644 --- a/lib/solidus_braintree/engine.rb +++ b/lib/solidus_braintree/engine.rb @@ -3,7 +3,7 @@ class Engine < Rails::Engine engine_name 'solidus_braintree' config.autoload_paths += %W(#{config.root}/lib) - config.assets.precompile += %w( spree/backend/braintree/solidus_braintree.js ) + config.assets.precompile += %w( spree/frontend/braintree/solidus_braintree.js spree/backend/braintree/solidus_braintree.js ) initializer "spree.gateway.payment_methods", after: "spree.register.payment_methods" do |app| app.config.spree.payment_methods << Solidus::Gateway::BraintreeGateway @@ -11,7 +11,8 @@ class Engine < Rails::Engine def self.activate Rails.application.config.assets.precompile += [ - 'lib/assets/javascripts/spree/backend/solidus_braintree.js', + 'lib/assets/javascripts/spree/frontend/solidus_braintree.js', + 'lib/assets/javascripts/spree/backend/solidus_braintree.js' ] Dir.glob(File.join(File.dirname(__FILE__), "../../app/**/*_decorator*.rb")) do |c| From e8bbb22996b28421ce852c7d555f9186002286ae Mon Sep 17 00:00:00 2001 From: Eric Saupe Date: Fri, 1 Apr 2016 10:20:00 -0600 Subject: [PATCH 068/163] Added custom partial for braintree fields --- .../checkout/payment/_braintree.html.erb | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 app/views/spree/checkout/payment/_braintree.html.erb diff --git a/app/views/spree/checkout/payment/_braintree.html.erb b/app/views/spree/checkout/payment/_braintree.html.erb new file mode 100644 index 00000000..a74fecd0 --- /dev/null +++ b/app/views/spree/checkout/payment/_braintree.html.erb @@ -0,0 +1,39 @@ +<%= image_tag 'credit_cards/credit_card.gif', :id => 'credit-card-image' %> +<% param_prefix = "payment_source[#{payment_method.id}]" %> + +

+ <%= label_tag "name_on_card_#{payment_method.id}", Spree.t(:name_on_card) %>*
+ <%= text_field_tag "#{param_prefix}[name]", "#{@order.billing_firstname} #{@order.billing_lastname}", { id: "name_on_card_#{payment_method.id}", :autocomplete => "cc-name" } %> +

+ +

+ <%= label_tag "card_number", Spree.t(:card_number) %>*
+ <%= text_field_tag "", '', {:id => 'card_number', :class => 'required cardNumber', :size => 19, :maxlength => 19, :autocomplete => "cc-number", type: "tel", :data => { "braintree-name" => "number" }} %> +   + +

+ +

+ <%= label_tag "card_expiry", Spree.t(:expiration) %>*
+ <%= text_field_tag "#{param_prefix}[expiry]", '', {:id => 'card_expiry', :class => "required cardExpiry", :placeholder => "MM / YY", type: "tel"} %> + <%= hidden_field_tag "", '', :id => 'braintree_expiration_date', :data => { "braintree-name" => "expiration_date" } %> +

+ +

+ <%= label_tag "card_code", Spree.t(:card_code) %>*
+ <%= text_field_tag "", '', {:id => 'card_code', :class => 'required cardCode', :size => 5, type: "tel", autocomplete: "off", :data => { "braintree-name" => "cvv" }} %> + <%= link_to "(#{Spree.t(:what_is_this)})", spree.cvv_path, :target => '_blank', "data-hook" => "cvv_link", :id => "cvv_link" %> +

+ +<% if @order.bill_address %> + <%= fields_for "#{param_prefix}[address_attributes]", @order.bill_address do |f| %> + <%= render :partial => 'spree/address/form_hidden', :locals => { :form => f } %> + <% end %> +<% end %> + +<%= hidden_field_tag "#{param_prefix}[cc_type]", '', :id => "cc_type", :class => 'ccType' %> +<%= hidden_field_tag "order[payments_attributes][][payment_method_nonce]", '', :id => "payment_method_nonce" %> From 885a5f92970758a9ce3f830d8132d454fd08b7f5 Mon Sep 17 00:00:00 2001 From: Eric Saupe Date: Fri, 1 Apr 2016 10:24:10 -0600 Subject: [PATCH 069/163] Cleaned up javascript --- .../frontend/braintree/solidus_braintree.js | 32 +++---------------- 1 file changed, 5 insertions(+), 27 deletions(-) diff --git a/lib/assets/javascripts/spree/frontend/braintree/solidus_braintree.js b/lib/assets/javascripts/spree/frontend/braintree/solidus_braintree.js index fd2b1d45..e6c75080 100644 --- a/lib/assets/javascripts/spree/frontend/braintree/solidus_braintree.js +++ b/lib/assets/javascripts/spree/frontend/braintree/solidus_braintree.js @@ -14,8 +14,7 @@ var getClientToken = function(onSuccess) { payment_method_id: paymentId }, error: function(xhr, status) { - // show_flash("error", xhr.responseJSON.message); - showFields(); + // If it fails it means the payment method was not a Braintree payment method if (braintreeDropinIntegration) { braintreeDropinIntegration.teardown(); braintreeDropinIntegration = null; @@ -29,8 +28,8 @@ var getClientToken = function(onSuccess) { var initializeBraintree = function(data) { $("#card_expiry").on("keyup", function() { + // We need to format the braintree expiration without spaces $("#braintree_expiration_date").val($(this).val().replace(/ /g,'')); - console.log($("#braintree_expiration_date").val()); }) braintree.setup(data.client_token, "custom", { id: "checkout_form_payment", @@ -38,8 +37,7 @@ var initializeBraintree = function(data) { braintreeDropinIntegration = integration; }, onError: function(type, message) { - // show_flash("error", message); - console.log(message); + show_flash("error", message); }, onPaymentMethodReceived: function(obj) { $("#payment_method_nonce").val(obj.nonce); @@ -49,34 +47,14 @@ var initializeBraintree = function(data) { }); }; -var hideFields = function() { - $("#payment_method_" + paymentId).find(".field").hide(); - $("#credit-card-image").hide(); -} - -var showFields = function() { - $("#payment_method_" + paymentId).find(".field").show(); - $("#credit-card-image").show(); -} - -var removeFields = function() { - $("#payment_method_" + paymentId).find(".field").remove(); - $("#credit-card-image").remove(); -} - $(document).ready(function() { if ($(cardSelector).find("input[type=radio][name='order[payments_attributes][][payment_method_id]']").length) { $(cardSelector).find("input[type=radio][name='order[payments_attributes][][payment_method_id]']").on("change", function() { paymentId = $(this).val(); - if (true || $(cardSelector + ":checked").val() === "new") { - getClientToken(initializeBraintree); - } else { - if (braintreeDropinIntegration) { - braintreeDropinIntegration.teardown(); - } - } + getClientToken(initializeBraintree); }); } + // Attempt to initialize braintree paymentId = $("form input[type=radio][name='order[payments_attributes][][payment_method_id]']:checked").val(); getClientToken(initializeBraintree); }); From 60dbe6be156b921801ac5efbcc2712b8ca0b164b Mon Sep 17 00:00:00 2001 From: Eric Saupe Date: Fri, 1 Apr 2016 11:35:30 -0600 Subject: [PATCH 070/163] Moved override into initializer --- app/overrides/frontend_payment_add_braintree_dropin.rb | 8 -------- .../spree/frontend/braintree/solidus_braintree.js | 6 +++--- .../solidus_braintree/install/install_generator.rb | 4 ++++ lib/solidus_braintree/engine.rb | 3 +-- 4 files changed, 8 insertions(+), 13 deletions(-) delete mode 100644 app/overrides/frontend_payment_add_braintree_dropin.rb diff --git a/app/overrides/frontend_payment_add_braintree_dropin.rb b/app/overrides/frontend_payment_add_braintree_dropin.rb deleted file mode 100644 index f8c185c0..00000000 --- a/app/overrides/frontend_payment_add_braintree_dropin.rb +++ /dev/null @@ -1,8 +0,0 @@ -Deface::Override.new( - virtual_path: "spree/checkout/_payment", - name: "frontend_payment_add_braintree_dropin", - insert_bottom: "ul#payment-methods", - text: %Q{ - <%= javascript_include_tag "spree/frontend/braintree/solidus_braintree", "data-turbolinks-track" => true, "crossorigin" => "anonymous" %> - } -) diff --git a/lib/assets/javascripts/spree/frontend/braintree/solidus_braintree.js b/lib/assets/javascripts/spree/frontend/braintree/solidus_braintree.js index e6c75080..2293f816 100644 --- a/lib/assets/javascripts/spree/frontend/braintree/solidus_braintree.js +++ b/lib/assets/javascripts/spree/frontend/braintree/solidus_braintree.js @@ -53,8 +53,8 @@ $(document).ready(function() { paymentId = $(this).val(); getClientToken(initializeBraintree); }); + // Attempt to initialize braintree + paymentId = $("form input[type=radio][name='order[payments_attributes][][payment_method_id]']:checked").val(); + getClientToken(initializeBraintree); } - // Attempt to initialize braintree - paymentId = $("form input[type=radio][name='order[payments_attributes][][payment_method_id]']:checked").val(); - getClientToken(initializeBraintree); }); diff --git a/lib/generators/solidus_braintree/install/install_generator.rb b/lib/generators/solidus_braintree/install/install_generator.rb index fe49edda..c7d2441a 100644 --- a/lib/generators/solidus_braintree/install/install_generator.rb +++ b/lib/generators/solidus_braintree/install/install_generator.rb @@ -3,6 +3,10 @@ module Generators class InstallGenerator < Rails::Generators::Base class_option :auto_run_migrations, type: :boolean, default: false + def add_javascripts + append_file "vendor/assets/javascripts/spree/frontend/all.js", "//= require spree/frontend/braintree/solidus_braintree\n" + end + def add_migrations run 'bundle exec rake railties:install:migrations FROM=solidus_braintree' end diff --git a/lib/solidus_braintree/engine.rb b/lib/solidus_braintree/engine.rb index 9e821b8e..f808395b 100644 --- a/lib/solidus_braintree/engine.rb +++ b/lib/solidus_braintree/engine.rb @@ -3,7 +3,7 @@ class Engine < Rails::Engine engine_name 'solidus_braintree' config.autoload_paths += %W(#{config.root}/lib) - config.assets.precompile += %w( spree/frontend/braintree/solidus_braintree.js spree/backend/braintree/solidus_braintree.js ) + config.assets.precompile += %w( spree/backend/braintree/solidus_braintree.js ) initializer "spree.gateway.payment_methods", after: "spree.register.payment_methods" do |app| app.config.spree.payment_methods << Solidus::Gateway::BraintreeGateway @@ -11,7 +11,6 @@ class Engine < Rails::Engine def self.activate Rails.application.config.assets.precompile += [ - 'lib/assets/javascripts/spree/frontend/solidus_braintree.js', 'lib/assets/javascripts/spree/backend/solidus_braintree.js' ] From 576a87ea1da817989c9c9e4549a4fe7a7b8dc9d2 Mon Sep 17 00:00:00 2001 From: Eric Saupe Date: Fri, 1 Apr 2016 11:36:18 -0600 Subject: [PATCH 071/163] Readded comma to engine --- lib/solidus_braintree/engine.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/solidus_braintree/engine.rb b/lib/solidus_braintree/engine.rb index f808395b..c9c08d1e 100644 --- a/lib/solidus_braintree/engine.rb +++ b/lib/solidus_braintree/engine.rb @@ -11,7 +11,7 @@ class Engine < Rails::Engine def self.activate Rails.application.config.assets.precompile += [ - 'lib/assets/javascripts/spree/backend/solidus_braintree.js' + 'lib/assets/javascripts/spree/backend/solidus_braintree.js', ] Dir.glob(File.join(File.dirname(__FILE__), "../../app/**/*_decorator*.rb")) do |c| From bf6f98cdd06ade528691c88e9a896e4469724317 Mon Sep 17 00:00:00 2001 From: Eric Saupe Date: Mon, 4 Apr 2016 13:30:23 -0600 Subject: [PATCH 072/163] Added payment view for braintree method type --- .../payments/source_views/_braintree.html.erb | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 app/views/spree/admin/payments/source_views/_braintree.html.erb diff --git a/app/views/spree/admin/payments/source_views/_braintree.html.erb b/app/views/spree/admin/payments/source_views/_braintree.html.erb new file mode 100644 index 00000000..ffbf0661 --- /dev/null +++ b/app/views/spree/admin/payments/source_views/_braintree.html.erb @@ -0,0 +1,30 @@ +
+ <%= Spree::CreditCard.model_name.human %> + +
+
+
+
<%= Spree.t(:identifier) %>:
+
<%= payment.number %>
+ +
<%= Spree.t(:response_code) %>:
+
<%= payment.response_code %>
+ +
<%= Spree.t(:name_on_card) %>:
+
<%= payment.source.name %>
+ +
<%= Spree::CreditCard.human_attribute_name(:cc_type) %>:
+
<%= payment.source.cc_type %>
+ +
<%= Spree::CreditCard.human_attribute_name(:number) %>:
+
<%= payment.source.display_number %>
+ +
<%= Spree::CreditCard.human_attribute_name(:expiration) %>:
+
<%= payment.source.month %>/<%= payment.source.year %>
+
+ <% if payment.source.address %> + <%= render partial: 'spree/admin/shared/address', locals: {address: payment.source.address} %> + <% end %> +
+
+
From c2f0586c62840539eacb7810780820ade862ab65 Mon Sep 17 00:00:00 2001 From: Eric Saupe Date: Mon, 4 Apr 2016 13:33:14 -0600 Subject: [PATCH 073/163] Fixed admin new payment form with braintree payment type --- .../admin_payment_add_braintree_dropin.rb | 2 +- ...admin_payment_remove_credit_card_fields.rb | 2 +- .../payments/source_forms/_braintree.html.erb | 64 +++++++++++++++++++ 3 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 app/views/spree/admin/payments/source_forms/_braintree.html.erb diff --git a/app/overrides/admin_payment_add_braintree_dropin.rb b/app/overrides/admin_payment_add_braintree_dropin.rb index 505a2a4e..5cdc1e9a 100644 --- a/app/overrides/admin_payment_add_braintree_dropin.rb +++ b/app/overrides/admin_payment_add_braintree_dropin.rb @@ -1,5 +1,5 @@ Deface::Override.new( - virtual_path: "spree/admin/payments/source_forms/_gateway", + virtual_path: "spree/admin/payments/source_forms/_braintree", name: "admin_payment_add_braintree_dropin", insert_bottom: "[data-hook=card_name]", text: %Q{ diff --git a/app/overrides/admin_payment_remove_credit_card_fields.rb b/app/overrides/admin_payment_remove_credit_card_fields.rb index 02454057..ae002ca4 100644 --- a/app/overrides/admin_payment_remove_credit_card_fields.rb +++ b/app/overrides/admin_payment_remove_credit_card_fields.rb @@ -1,5 +1,5 @@ Deface::Override.new( - virtual_path: "spree/admin/payments/source_forms/_gateway", + virtual_path: "spree/admin/payments/source_forms/_braintree", name: "admin_payment_remove_credit_card_fields", remove: "[data-hook=card_number], [data-hook=card_expiration], [data-hook=card_code]" ) diff --git a/app/views/spree/admin/payments/source_forms/_braintree.html.erb b/app/views/spree/admin/payments/source_forms/_braintree.html.erb new file mode 100644 index 00000000..0063872e --- /dev/null +++ b/app/views/spree/admin/payments/source_forms/_braintree.html.erb @@ -0,0 +1,64 @@ +
+
+ <% if previous_cards.any? %> + <% previous_cards.each do |card| %> + + <% end %> + + <% end %> +
+ +
+ <% param_prefix = "payment_source[#{payment_method.id}]" %> + +
+ +
+
+
+ <%= hidden_field_tag "#{param_prefix}[cc_type]", '', {class: 'ccType'} %> + <%= label_tag "card_number#{payment_method.id}", Spree::CreditCard.human_attribute_name(:number), class: 'required' %> + <%= text_field_tag "#{param_prefix}[number]", '', :class => 'required fullwidth cardNumber', :id => "card_number#{payment_method.id}", :maxlength => 19 %> + +
+
+
+
+
+
+ <%= label_tag "card_name#{payment_method.id}", Spree::CreditCard.human_attribute_name(:name), class: 'required' %> + <%= text_field_tag "#{param_prefix}[name]", '', id: "card_name#{payment_method.id}", class: 'required fullwidth', maxlength: 19 %> +
+
+
+
+
+ <%= label_tag "card_expiry#{payment_method.id}", Spree::CreditCard.human_attribute_name(:expiration), class: 'required' %> + <%= text_field_tag "#{param_prefix}[expiry]", '', id: "card_expiry#{payment_method.id}", class: "required cardExpiry", placeholder: "MM / YY" %> +
+
+
+
+ <%= label_tag "card_code#{payment_method.id}", Spree::CreditCard.human_attribute_name(:card_code), class: 'required' %> + <%= text_field_tag "#{param_prefix}[verification_value]", '', id: "card_code#{payment_method.id}", class: 'required fullwidth cardCode', size: 5 %> + + (<%= Spree.t(:what_is_this) %>) + +
+
+ +
+ + <%= label_tag "card_address#{payment_method.id}", Spree.t(:billing_address) %> + <% address = @order.bill_address || @order.ship_address || Spree::Address.build_default %> + <%= fields_for "#{param_prefix}[address_attributes]", address do |f| %> + <%= render :partial => 'spree/admin/shared/address_form', :locals => { :f => f, :type => "billing" } %> + <% end %> + +
+
+
From f8559ab0be37632d72fe2b52d13e17f1c9250d24 Mon Sep 17 00:00:00 2001 From: Eric Saupe Date: Tue, 5 Apr 2016 10:28:03 -0600 Subject: [PATCH 074/163] Void payment in checkout state without authorization code --- app/models/solidus/gateway/braintree_gateway.rb | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/app/models/solidus/gateway/braintree_gateway.rb b/app/models/solidus/gateway/braintree_gateway.rb index 4af8e05f..7ae73560 100644 --- a/app/models/solidus/gateway/braintree_gateway.rb +++ b/app/models/solidus/gateway/braintree_gateway.rb @@ -119,9 +119,19 @@ def capture(money, authorization_code, options = {}) end def void(authorization_code, source = {}, options = {}) - result = braintree_gateway.transaction.void(authorization_code) - - handle_result(result) + # Allows voiding payments that are in a checkout state + if authorization_code.nil? + # Fake response since we don't need to void anything with Braintree + ActiveMerchant::Billing::Response.new( + true, + "OK", + {}, + {} + ) + else + result = braintree_gateway.transaction.void(authorization_code) + handle_result(result) + end end def credit(cents, source, authorization_code, options = {}) From 6e319d6cecf29426a4f34ce48143f4e856cc6218 Mon Sep 17 00:00:00 2001 From: Eric Saupe Date: Tue, 5 Apr 2016 11:05:46 -0600 Subject: [PATCH 075/163] Test for voiding a payment in a checkout state --- .../with_checkout_payment/can_be_voided.yml | 117 ++++++++++++++++++ .../solidus/gateway/braintree_gateway_spec.rb | 12 ++ 2 files changed, 129 insertions(+) create mode 100644 spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_checkout_payment/can_be_voided.yml diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_checkout_payment/can_be_voided.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_checkout_payment/can_be_voided.yml new file mode 100644 index 00000000..f0218f6d --- /dev/null +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_checkout_payment/can_be_voided.yml @@ -0,0 +1,117 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + Card + Holder + rasheed@wuckert.us + + Card Holder + + John + Doe + 10 Lovely Street + Northwest + Herndon + AL + US + 91870 + + fake-valid-nonce + + true + + + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.59.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Tue, 05 Apr 2016 16:55:12 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff + X-Authentication: + - basic_auth + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + Etag: + - W/"9e7547248c8d0543ff4fcd1080bc4977" + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 2d3881d3-36c0-42fe-87ee-158d32e6ad08 + X-Runtime: + - '1.785785' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAPDtA1cAA7RY247bNhB9z1cYftdK8tprJ9Aq3bZogzYJCiRpgbwElDi2 + lZVIhaR8yddnSN0oyfba3vTBgDlzhiLneqTg9S5LRxsQMuHsfuzfeOMRsJjT + hK3ux58+/uEsxq/DF0FcSMUzEOGL0ShIaHg7ndzN/Nk8cHGhZaiL14QpB9ff + Izbbf//2Us232XY3nQSurdXoZSKkchjJIPyNCBq4lkDrU1Kv3vCUggjcVqL1 + Mc9ywvYjlqT3YyUKGLtGDhlJ0lAQuQagv2yL+BGEuilk4JYajcnXnMHAckl2 + A9kWIpmoITYWQBRQh6iR2udwP6a4VEkG43Di+XeON3W82Uf/7tVs9sr3Pwdu + a2Dsi5yebz9B+9agfL4JhrNMIKWyORJNlBOjM2W1KRGC7Mda29WXEpRFSZpi + mB1CqQApa3kZ4K95HdpKVmeA04m+LW2xVjT/4mvWD2+FakP6O4dehOuHHo5z + pZVKAKjm/L43ess3kO5HH4wicHuA1hJ2ChjVHq1U77lQ6y1INBrorBPzmKSJ + 2odvQDDK8WKNpAUJWGEthQ9vA7f62+pyLhVJHawvCF/6i7kXuLbIvnjBlNgb + sUPSfE0m4acP6O8D8lNWt2j1cMjs9pgZKzCcSRwupl7PrtYMDU3UPjGsFYq+ + x1SVI74cPRg4aXfpB/d5ZVTtclEx+YNiMnu4R0oBS4SFU8+fLBYa00Qy0HXk + 6MeF/yZS37BZ24i16V1tmxvVzayvbIx4pjtlQlL05iPjW6ad18haWOlPvnQS + KQvCYghbL9vSxuL5rj6/AbRIXR1KV4BJ3YG0xlOIEtXeuFy2yiUp0vrcEecp + EDYOdTPQUKNswYXAMDlYd0Wqz29t2tfUJrDLE2HO42ScqXXoT3QP6AkPoPdA + BHpv4nXgRtpBY030zr4kqYTKyjrJGkiq1pgb0B7bktWwJCMrcAqRhmulcvnK + dYmUoORNJEjCdMdb4QW3ZH+DqePmZJ8BU18yUGtOv6R8xd0N5uxNzlavgW0S + wZkG3EvCaMR32PWb/ZsnYjrp6ogIe2yP1pHWUNPEp6G/WPhVR582OjyK4KmV + 2rWgAQjICebRe4666n+tk0UkY5Hk2sndCddMhEDxR2Ahna1Yfhe45arWFSz5 + VpgeFplkxSsnOEBFOKW301k8h2nk+/PJLaETWC5nEZ2TyPPxhw3jmGmz909o + QRtgGXckfTySLI3eshB4jLKUDs38AagVm9lJVCHDUg9Uz0ojsDHxZoMFI3Pc + H8oB9Q7LeCC0TchGOiAEF13M4QFe4a0JOHzcaUB/q+7AP7zbSYy9YVVGiPgK + sSlubIqSs6OXaVguiU0z1j1RYiKDRYAtlW2aCx7jafp+Q07jaY5wRPvEDgqp + TPiQo2ajI3wMYe+Cx5q8FLvvssv+WrZoy85legb5NNsrc+4U46sy90rWZ6yv + Y37lDc5gfwZ4ggGWoTqTBVYOeQbHsrhNt7KHrwOV5kQPbRLhICeyw3x4ANTP + foo7NZG6YDAPbZ4ez/V5LmMr1i0u5XeV6f84iuoEOz5IK8R5XKMCn+JnNeRi + 4lX78SzKW9/rCQZRwc7nK80hLiTUjZ85LWLTzNsjtbJOGR4pucuouXfkLej5 + HxWafUQiHx3UkL5TafjP37dz78Piv18/v/uzPx9MmsSJNI2vHDk6UypJxxMH + nqD5zZCodKVVOx54siMwoKDq33DwU0j/HW/wseOCN50zxt+Tg+/UyLt22F01 + 5s4YcMdH25lD7ZoPG1d91rjyo8Zzxu1Pect+9rsEktw2rM0CcNmmcPjiBwAA + AP//AwBjPDmY+BUAAA== + http_version: + recorded_at: Tue, 05 Apr 2016 16:55:12 GMT +recorded_with: VCR 3.0.1 diff --git a/spec/solidus/gateway/braintree_gateway_spec.rb b/spec/solidus/gateway/braintree_gateway_spec.rb index 58712e85..b8fbef41 100644 --- a/spec/solidus/gateway/braintree_gateway_spec.rb +++ b/spec/solidus/gateway/braintree_gateway_spec.rb @@ -102,6 +102,18 @@ end end + context 'with checkout payment' do + # Set response_code to nil when in checkout state + before do + payment.update(response_code: nil) + end + it "can be voided" do + expect(payment).to be_checkout + void = payment_method.void(payment.response_code, payment.source, {}) + expect(void).to be_success + end + end + context 'with completed payment' do let!(:auth) do card.gateway_customer_profile_id = nil From 447ca90c055c69d490f1f99d20adb81784010bb7 Mon Sep 17 00:00:00 2001 From: Eric Saupe Date: Tue, 5 Apr 2016 11:45:10 -0600 Subject: [PATCH 076/163] Remove overrides in favor of custom template --- .../admin_payment_add_braintree_dropin.rb | 10 ------ ...admin_payment_remove_credit_card_fields.rb | 5 --- .../payments/source_forms/_braintree.html.erb | 33 +++---------------- 3 files changed, 4 insertions(+), 44 deletions(-) delete mode 100644 app/overrides/admin_payment_add_braintree_dropin.rb delete mode 100644 app/overrides/admin_payment_remove_credit_card_fields.rb diff --git a/app/overrides/admin_payment_add_braintree_dropin.rb b/app/overrides/admin_payment_add_braintree_dropin.rb deleted file mode 100644 index 5cdc1e9a..00000000 --- a/app/overrides/admin_payment_add_braintree_dropin.rb +++ /dev/null @@ -1,10 +0,0 @@ -Deface::Override.new( - virtual_path: "spree/admin/payments/source_forms/_braintree", - name: "admin_payment_add_braintree_dropin", - insert_bottom: "[data-hook=card_name]", - text: %Q{ - <%= javascript_include_tag "spree/backend/braintree/solidus_braintree", "data-turbolinks-track" => true, "crossorigin" => "anonymous" %> -
- - } -) diff --git a/app/overrides/admin_payment_remove_credit_card_fields.rb b/app/overrides/admin_payment_remove_credit_card_fields.rb deleted file mode 100644 index ae002ca4..00000000 --- a/app/overrides/admin_payment_remove_credit_card_fields.rb +++ /dev/null @@ -1,5 +0,0 @@ -Deface::Override.new( - virtual_path: "spree/admin/payments/source_forms/_braintree", - name: "admin_payment_remove_credit_card_fields", - remove: "[data-hook=card_number], [data-hook=card_expiration], [data-hook=card_code]" -) diff --git a/app/views/spree/admin/payments/source_forms/_braintree.html.erb b/app/views/spree/admin/payments/source_forms/_braintree.html.erb index 0063872e..7e619cdb 100644 --- a/app/views/spree/admin/payments/source_forms/_braintree.html.erb +++ b/app/views/spree/admin/payments/source_forms/_braintree.html.erb @@ -13,20 +13,6 @@
-
-
-
- <%= hidden_field_tag "#{param_prefix}[cc_type]", '', {class: 'ccType'} %> - <%= label_tag "card_number#{payment_method.id}", Spree::CreditCard.human_attribute_name(:number), class: 'required' %> - <%= text_field_tag "#{param_prefix}[number]", '', :class => 'required fullwidth cardNumber', :id => "card_number#{payment_method.id}", :maxlength => 19 %> - -
-
-
@@ -35,21 +21,10 @@
-
-
- <%= label_tag "card_expiry#{payment_method.id}", Spree::CreditCard.human_attribute_name(:expiration), class: 'required' %> - <%= text_field_tag "#{param_prefix}[expiry]", '', id: "card_expiry#{payment_method.id}", class: "required cardExpiry", placeholder: "MM / YY" %> -
-
-
-
- <%= label_tag "card_code#{payment_method.id}", Spree::CreditCard.human_attribute_name(:card_code), class: 'required' %> - <%= text_field_tag "#{param_prefix}[verification_value]", '', id: "card_code#{payment_method.id}", class: 'required fullwidth cardCode', size: 5 %> - - (<%= Spree.t(:what_is_this) %>) - -
-
+ + <%= javascript_include_tag "spree/backend/braintree/solidus_braintree", "data-turbolinks-track" => true, "crossorigin" => "anonymous" %> +
+
From 5819390ce1a1d9e905136a2dbf1e70d25b4029ad Mon Sep 17 00:00:00 2001 From: Eric Saupe Date: Tue, 5 Apr 2016 14:26:14 -0600 Subject: [PATCH 077/163] Install backend javascript using generator --- app/views/spree/admin/payments/source_forms/_braintree.html.erb | 1 - lib/generators/solidus_braintree/install/install_generator.rb | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/spree/admin/payments/source_forms/_braintree.html.erb b/app/views/spree/admin/payments/source_forms/_braintree.html.erb index 7e619cdb..46651c5f 100644 --- a/app/views/spree/admin/payments/source_forms/_braintree.html.erb +++ b/app/views/spree/admin/payments/source_forms/_braintree.html.erb @@ -22,7 +22,6 @@ - <%= javascript_include_tag "spree/backend/braintree/solidus_braintree", "data-turbolinks-track" => true, "crossorigin" => "anonymous" %>
diff --git a/lib/generators/solidus_braintree/install/install_generator.rb b/lib/generators/solidus_braintree/install/install_generator.rb index c7d2441a..e7903b16 100644 --- a/lib/generators/solidus_braintree/install/install_generator.rb +++ b/lib/generators/solidus_braintree/install/install_generator.rb @@ -5,6 +5,7 @@ class InstallGenerator < Rails::Generators::Base def add_javascripts append_file "vendor/assets/javascripts/spree/frontend/all.js", "//= require spree/frontend/braintree/solidus_braintree\n" + append_file "vendor/assets/javascripts/spree/backend/all.js", "//= require spree/backend/braintree/solidus_braintree\n" end def add_migrations From 68abb9683bf38a546ae703df7433a4e8233b9c81 Mon Sep 17 00:00:00 2001 From: Eric Saupe Date: Tue, 12 Apr 2016 16:06:33 -0600 Subject: [PATCH 078/163] Added helper to link directly to a braintree payment --- app/helpers/braintree_view_helpers.rb | 20 +++++++++++++++++++ .../payments/source_views/_braintree.html.erb | 2 +- config/initializers/braintree.rb | 1 + 3 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 app/helpers/braintree_view_helpers.rb create mode 100644 config/initializers/braintree.rb diff --git a/app/helpers/braintree_view_helpers.rb b/app/helpers/braintree_view_helpers.rb new file mode 100644 index 00000000..05d959a5 --- /dev/null +++ b/app/helpers/braintree_view_helpers.rb @@ -0,0 +1,20 @@ +module BraintreeViewHelpers + # Returns a link to the Braintree web UI for the given Braintree +payment_id+ + # (e.g. from Spree::Payment#response_code), or just the +payment_id+ if + # Braintree's merchant ID is not configured or +payment_id+ is blank + def braintree_transaction_link(payment_id) + env = ENV['BRAINTREE_ENV'] == 'production' ? 'www' : 'sandbox' + merchant = ENV['BRAINTREE_MERCHANT_ID'] + + if payment_id.present? && merchant.present? + link_to( + payment_id, + "https://#{env}.braintreegateway.com/merchants/#{merchant}/transactions/#{payment_id}", + title: 'Show payment on Braintree', + target: '_blank' + ) + else + payment_id + end + end +end diff --git a/app/views/spree/admin/payments/source_views/_braintree.html.erb b/app/views/spree/admin/payments/source_views/_braintree.html.erb index ffbf0661..bb8ae033 100644 --- a/app/views/spree/admin/payments/source_views/_braintree.html.erb +++ b/app/views/spree/admin/payments/source_views/_braintree.html.erb @@ -8,7 +8,7 @@
<%= payment.number %>
<%= Spree.t(:response_code) %>:
-
<%= payment.response_code %>
+
<%= braintree_transaction_link(payment.response_code) %>
<%= Spree.t(:name_on_card) %>:
<%= payment.source.name %>
diff --git a/config/initializers/braintree.rb b/config/initializers/braintree.rb new file mode 100644 index 00000000..c93ccf7c --- /dev/null +++ b/config/initializers/braintree.rb @@ -0,0 +1 @@ +ActionView::Base.send :include, BraintreeViewHelpers From d67fccab20d7f5f7dadf1162348563bc3e5432eb Mon Sep 17 00:00:00 2001 From: Eric Saupe Date: Wed, 20 Apr 2016 09:54:58 -0600 Subject: [PATCH 079/163] Fixed bug with guest checkout email being missing from user --- app/models/solidus/gateway/braintree_gateway.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/models/solidus/gateway/braintree_gateway.rb b/app/models/solidus/gateway/braintree_gateway.rb index 0259a7f9..d8d3b3a8 100644 --- a/app/models/solidus/gateway/braintree_gateway.rb +++ b/app/models/solidus/gateway/braintree_gateway.rb @@ -53,12 +53,13 @@ def create_profile(payment) return if source.gateway_customer_profile_id.present? || payment.payment_method_nonce.nil? user = payment.order.user + email = user ? user.email : payment.order.email address = (payment.source.address || payment.order.bill_address).try(:active_merchant_hash) params = { first_name: source.first_name, last_name: source.last_name, - email: user.email, + email: email, credit_card: { cardholder_name: source.name, billing_address: map_address(address), From b543123155889b5ed742e40754d58df9e6c7af27 Mon Sep 17 00:00:00 2001 From: "Hector E. Gomez Morales" Date: Wed, 20 Apr 2016 11:37:43 -0500 Subject: [PATCH 080/163] Update braintree-web to 2.23.0 --- CHANGELOG.md | 2 ++ .../spree/backend/braintree/solidus_braintree.js | 2 +- lib/assets/javascripts/vendor/braintree-2.14.0.js | 7 ------- lib/assets/javascripts/vendor/braintree-2.23.0.js | 8 ++++++++ 4 files changed, 11 insertions(+), 8 deletions(-) delete mode 100644 lib/assets/javascripts/vendor/braintree-2.14.0.js create mode 100644 lib/assets/javascripts/vendor/braintree-2.23.0.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 156ced83..fb15cc32 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ ## HEAD +* Upgrade braintree to 2.23.0 for bug fixes and fraud detection with deviceData. + ## 0.2.0 * Add functionality around PayPal by adding a json or text field on credit card for storing extra data coming back from Braintree. diff --git a/lib/assets/javascripts/spree/backend/braintree/solidus_braintree.js b/lib/assets/javascripts/spree/backend/braintree/solidus_braintree.js index a321af96..cd478276 100644 --- a/lib/assets/javascripts/spree/backend/braintree/solidus_braintree.js +++ b/lib/assets/javascripts/spree/backend/braintree/solidus_braintree.js @@ -1,4 +1,4 @@ -//= require "vendor/braintree-2.14.0" +//= require "vendor/braintree-2.23.0" Spree.routes.payment_client_token_api = Spree.pathFor("api/payment_client_token") diff --git a/lib/assets/javascripts/vendor/braintree-2.14.0.js b/lib/assets/javascripts/vendor/braintree-2.14.0.js deleted file mode 100644 index c5c128e7..00000000 --- a/lib/assets/javascripts/vendor/braintree-2.14.0.js +++ /dev/null @@ -1,7 +0,0 @@ -!function(){function t(e,n){e instanceof t?(this.enc=e.enc,this.pos=e.pos):(this.enc=e,this.pos=n)}function e(t,e,n,i,r){this.stream=t,this.header=e,this.length=n,this.tag=i,this.sub=r}function n(t){var e,n,i="";for(e=0;e+3<=t.length;e+=3)n=parseInt(t.substring(e,e+3),16),i+=ee.charAt(n>>6)+ee.charAt(63&n);for(e+1==t.length?(n=parseInt(t.substring(e,e+1),16),i+=ee.charAt(n<<2)):e+2==t.length&&(n=parseInt(t.substring(e,e+2),16),i+=ee.charAt(n>>2)+ee.charAt((3&n)<<4));(3&i.length)>0;)i+=ne;return i}function i(t){var e,n,i,r="",o=0;for(e=0;ei||(0==o?(r+=l(i>>2),n=3&i,o=1):1==o?(r+=l(n<<2|i>>4),n=15&i,o=2):2==o?(r+=l(n),r+=l(i>>2),n=3&i,o=3):(r+=l(n<<2|i>>4),r+=l(15&i),o=0));return 1==o&&(r+=l(n<<2)),r}function r(t){var e,n=i(t),r=new Array;for(e=0;2*e=0;){var s=e*this[t++]+n[i]+r;r=Math.floor(s/67108864),n[i++]=67108863&s}return r}function u(t,e,n,i,r,o){for(var s=32767&e,a=e>>15;--o>=0;){var u=32767&this[t],c=this[t++]>>15,l=a*u+c*s;u=s*u+((32767&l)<<15)+n[i]+(1073741823&r),r=(u>>>30)+(l>>>15)+a*c+(r>>>30),n[i++]=1073741823&u}return r}function c(t,e,n,i,r,o){for(var s=16383&e,a=e>>14;--o>=0;){var u=16383&this[t],c=this[t++]>>14,l=a*u+c*s;u=s*u+((16383&l)<<14)+n[i]+r,r=(u>>28)+(l>>14)+a*c,n[i++]=268435455&u}return r}function l(t){return ue.charAt(t)}function p(t,e){var n=ce[t.charCodeAt(e)];return null==n?-1:n}function h(t){for(var e=this.t-1;e>=0;--e)t[e]=this[e];t.t=this.t,t.s=this.s}function d(t){this.t=1,this.s=0>t?-1:0,t>0?this[0]=t:-1>t?this[0]=t+this.DV:this.t=0}function f(t){var e=s();return e.fromInt(t),e}function m(t,e){var n;if(16==e)n=4;else if(8==e)n=3;else if(256==e)n=8;else if(2==e)n=1;else if(32==e)n=5;else{if(4!=e)return void this.fromRadix(t,e);n=2}this.t=0,this.s=0;for(var i=t.length,r=!1,s=0;--i>=0;){var a=8==n?255&t[i]:p(t,i);0>a?"-"==t.charAt(i)&&(r=!0):(r=!1,0==s?this[this.t++]=a:s+n>this.DB?(this[this.t-1]|=(a&(1<>this.DB-s):this[this.t-1]|=a<=this.DB&&(s-=this.DB))}8==n&&0!=(128&t[0])&&(this.s=-1,s>0&&(this[this.t-1]|=(1<0&&this[this.t-1]==t;)--this.t}function y(t){if(this.s<0)return"-"+this.negate().toString(t);var e;if(16==t)e=4;else if(8==t)e=3;else if(2==t)e=1;else if(32==t)e=5;else{if(4!=t)return this.toRadix(t);e=2}var n,i=(1<0)for(a>a)>0&&(r=!0,o=l(n));s>=0;)e>a?(n=(this[s]&(1<>(a+=this.DB-e)):(n=this[s]>>(a-=e)&i,0>=a&&(a+=this.DB,--s)),n>0&&(r=!0),r&&(o+=l(n));return r?o:"0"}function b(){var t=s();return o.ZERO.subTo(this,t),t}function v(){return this.s<0?this.negate():this}function _(t){var e=this.s-t.s;if(0!=e)return e;var n=this.t;if(e=n-t.t,0!=e)return this.s<0?-e:e;for(;--n>=0;)if(0!=(e=this[n]-t[n]))return e;return 0}function E(t){var e,n=1;return 0!=(e=t>>>16)&&(t=e,n+=16),0!=(e=t>>8)&&(t=e,n+=8),0!=(e=t>>4)&&(t=e,n+=4),0!=(e=t>>2)&&(t=e,n+=2),0!=(e=t>>1)&&(t=e,n+=1),n}function w(){return this.t<=0?0:this.DB*(this.t-1)+E(this[this.t-1]^this.s&this.DM)}function A(t,e){var n;for(n=this.t-1;n>=0;--n)e[n+t]=this[n];for(n=t-1;n>=0;--n)e[n]=0;e.t=this.t+t,e.s=this.s}function C(t,e){for(var n=t;n=0;--n)e[n+s+1]=this[n]>>r|a,a=(this[n]&o)<=0;--n)e[n]=0;e[s]=a,e.t=this.t+s+1,e.s=this.s,e.clamp()}function T(t,e){e.s=this.s;var n=Math.floor(t/this.DB);if(n>=this.t)return void(e.t=0);var i=t%this.DB,r=this.DB-i,o=(1<>i;for(var s=n+1;s>i;i>0&&(e[this.t-n-1]|=(this.s&o)<n;)i+=this[n]-t[n],e[n++]=i&this.DM,i>>=this.DB;if(t.t>=this.DB;i+=this.s}else{for(i+=this.s;n>=this.DB;i-=t.s}e.s=0>i?-1:0,-1>i?e[n++]=this.DV+i:i>0&&(e[n++]=i),e.t=n,e.clamp()}function S(t,e){var n=this.abs(),i=t.abs(),r=n.t;for(e.t=r+i.t;--r>=0;)e[r]=0;for(r=0;r=0;)t[n]=0;for(n=0;n=e.DV&&(t[n+e.t]-=e.DV,t[n+e.t+1]=1)}t.t>0&&(t[t.t-1]+=e.am(n,e[n],t,2*n,0,1)),t.s=0,t.clamp()}function I(t,e,n){var i=t.abs();if(!(i.t<=0)){var r=this.abs();if(r.t0?(i.lShiftTo(l,a),r.lShiftTo(l,n)):(i.copyTo(a),r.copyTo(n));var p=a.t,h=a[p-1];if(0!=h){var d=h*(1<1?a[p-2]>>this.F2:0),f=this.FV/d,m=(1<=0&&(n[n.t++]=1,n.subTo(v,n)),o.ONE.dlShiftTo(p,v),v.subTo(a,a);a.t=0;){var _=n[--y]==h?this.DM:Math.floor(n[y]*f+(n[y-1]+g)*m);if((n[y]+=a.am(0,_,n,b,0,p))<_)for(a.dlShiftTo(b,v),n.subTo(v,n);n[y]<--_;)n.subTo(v,n)}null!=e&&(n.drShiftTo(p,e),u!=c&&o.ZERO.subTo(e,e)),n.t=p,n.clamp(),l>0&&n.rShiftTo(l,n),0>u&&o.ZERO.subTo(n,n)}}}function P(t){var e=s();return this.abs().divRemTo(t,null,e),this.s<0&&e.compareTo(o.ZERO)>0&&t.subTo(e,e),e}function R(t){this.m=t}function D(t){return t.s<0||t.compareTo(this.m)>=0?t.mod(this.m):t}function M(t){return t}function U(t){t.divRemTo(this.m,null,t)}function k(t,e,n){t.multiplyTo(e,n),this.reduce(n)}function F(t,e){t.squareTo(e),this.reduce(e)}function L(){if(this.t<1)return 0;var t=this[0];if(0==(1&t))return 0;var e=3&t;return e=e*(2-(15&t)*e)&15,e=e*(2-(255&t)*e)&255,e=e*(2-((65535&t)*e&65535))&65535,e=e*(2-t*e%this.DV)%this.DV,e>0?this.DV-e:-e}function j(t){this.m=t,this.mp=t.invDigit(),this.mpl=32767&this.mp,this.mph=this.mp>>15,this.um=(1<0&&this.m.subTo(e,e),e}function H(t){var e=s();return t.copyTo(e),this.reduce(e),e}function V(t){for(;t.t<=this.mt2;)t[t.t++]=0;for(var e=0;e>15)*this.mpl&this.um)<<15)&t.DM;for(n=e+this.m.t,t[n]+=this.m.am(0,i,t,e,0,this.m.t);t[n]>=t.DV;)t[n]-=t.DV,t[++n]++}t.clamp(),t.drShiftTo(this.m.t,t),t.compareTo(this.m)>=0&&t.subTo(this.m,t)}function z(t,e){t.squareTo(e),this.reduce(e)}function Y(t,e,n){t.multiplyTo(e,n),this.reduce(n)}function G(){return 0==(this.t>0?1&this[0]:this.s)}function W(t,e){if(t>4294967295||1>t)return o.ONE;var n=s(),i=s(),r=e.convert(this),a=E(t)-1;for(r.copyTo(n);--a>=0;)if(e.sqrTo(n,i),(t&1<0)e.mulTo(i,r,n);else{var u=n;n=i,i=u}return e.revert(n)}function q(t,e){var n;return n=256>t||e.isEven()?new R(e):new j(e),this.exp(t,n)}function Q(t,e){return new o(t,e)}function K(t,e){if(e=0&&e>0;){var r=t.charCodeAt(i--);128>r?n[--e]=r:r>127&&2048>r?(n[--e]=63&r|128,n[--e]=r>>6|192):(n[--e]=63&r|128,n[--e]=r>>6&63|128,n[--e]=r>>12|224)}n[--e]=0;for(var s=0,a=0,u=0;e>2;)0==u&&(a=le.random.randomWords(1,0)[0]),s=a>>u&255,u=(u+8)%32,0!=s&&(n[--e]=s);return n[--e]=2,n[--e]=0,new o(n)}function $(){this.n=null,this.e=0,this.d=null,this.p=null,this.q=null,this.dmp1=null,this.dmq1=null,this.coeff=null}function Z(t,e){if(!(null!=t&&null!=e&&t.length>0&&e.length>0))throw new Error("Invalid RSA public key");this.n=Q(t,16),this.e=parseInt(e,16)}function X(t){return t.modPowInt(this.e,this.n)}function J(t){var e=K(t,this.n.bitLength()+7>>3);if(null==e)return null;var n=this.doPublic(e);if(null==n)return null;var i=n.toString(16);return 0==(1&i.length)?i:"0"+i}t.prototype.get=function(t){if(void 0==t&&(t=this.pos++),t>=this.enc.length)throw"Requesting byte offset "+t+" on a stream of length "+this.enc.length;return this.enc[t]},t.prototype.hexDigits="0123456789ABCDEF",t.prototype.hexByte=function(t){return this.hexDigits.charAt(t>>4&15)+this.hexDigits.charAt(15&t)},t.prototype.hexDump=function(t,e){for(var n="",i=t;e>i;++i)switch(n+=this.hexByte(this.get(i)),15&i){case 7:n+=" ";break;case 15:n+="\n";break;default:n+=" "}return n},t.prototype.parseStringISO=function(t,e){for(var n="",i=t;e>i;++i)n+=String.fromCharCode(this.get(i));return n},t.prototype.parseStringUTF=function(t,e){for(var n="",i=0,r=t;e>r;){var i=this.get(r++);n+=String.fromCharCode(128>i?i:i>191&&224>i?(31&i)<<6|63&this.get(r++):(15&i)<<12|(63&this.get(r++))<<6|63&this.get(r++))}return n},t.prototype.reTime=/^((?:1[89]|2\d)?\d\d)(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])([01]\d|2[0-3])(?:([0-5]\d)(?:([0-5]\d)(?:[.,](\d{1,3}))?)?)?(Z|[-+](?:[0]\d|1[0-2])([0-5]\d)?)?$/,t.prototype.parseTime=function(t,e){var n=this.parseStringISO(t,e),i=this.reTime.exec(n);return i?(n=i[1]+"-"+i[2]+"-"+i[3]+" "+i[4],i[5]&&(n+=":"+i[5],i[6]&&(n+=":"+i[6],i[7]&&(n+="."+i[7]))),i[8]&&(n+=" UTC","Z"!=i[8]&&(n+=i[8],i[9]&&(n+=":"+i[9]))),n):"Unrecognized time: "+n},t.prototype.parseInteger=function(t,e){var n=e-t;if(n>4){n<<=3;var i=this.get(t);if(0==i)n-=8;else for(;128>i;)i<<=1,--n;return"("+n+" bit)"}for(var r=0,o=t;e>o;++o)r=r<<8|this.get(o);return r},t.prototype.parseBitString=function(t,e){var n=this.get(t),i=(e-t-1<<3)-n,r="("+i+" bit)";if(20>=i){var o=n;r+=" ";for(var s=e-1;s>t;--s){for(var a=this.get(s),u=o;8>u;++u)r+=a>>u&1?"1":"0";o=0}}return r},t.prototype.parseOctetString=function(t,e){var n=e-t,i="("+n+" byte) ";n>20&&(e=t+20);for(var r=t;e>r;++r)i+=this.hexByte(this.get(r));return n>20&&(i+=String.fromCharCode(8230)),i},t.prototype.parseOID=function(t,e){for(var n,i=0,r=0,o=t;e>o;++o){var s=this.get(o);i=i<<7|127&s,r+=7,128&s||(void 0==n?n=parseInt(i/40)+"."+i%40:n+="."+(r>=31?"bigint":i),i=r=0),n+=String.fromCharCode()}return n},e.prototype.typeName=function(){if(void 0==this.tag)return"unknown";var t=this.tag>>6,e=(this.tag>>5&1,31&this.tag);switch(t){case 0:switch(e){case 0:return"EOC";case 1:return"BOOLEAN";case 2:return"INTEGER";case 3:return"BIT_STRING";case 4:return"OCTET_STRING";case 5:return"NULL";case 6:return"OBJECT_IDENTIFIER";case 7:return"ObjectDescriptor";case 8:return"EXTERNAL";case 9:return"REAL";case 10:return"ENUMERATED";case 11:return"EMBEDDED_PDV";case 12:return"UTF8String";case 16:return"SEQUENCE";case 17:return"SET";case 18:return"NumericString";case 19:return"PrintableString";case 20:return"TeletexString";case 21:return"VideotexString";case 22:return"IA5String";case 23:return"UTCTime";case 24:return"GeneralizedTime";case 25:return"GraphicString";case 26:return"VisibleString";case 27:return"GeneralString";case 28:return"UniversalString";case 30:return"BMPString";default:return"Universal_"+e.toString(16)}case 1:return"Application_"+e.toString(16);case 2:return"["+e+"]";case 3:return"Private_"+e.toString(16)}},e.prototype.content=function(){if(void 0==this.tag)return null;var t=this.tag>>6;if(0!=t)return null==this.sub?null:"("+this.sub.length+")";var e=31&this.tag,n=this.posContent(),i=Math.abs(this.length);switch(e){case 1:return 0==this.stream.get(n)?"false":"true";case 2:return this.stream.parseInteger(n,n+i);case 3:return this.sub?"("+this.sub.length+" elem)":this.stream.parseBitString(n,n+i);case 4:return this.sub?"("+this.sub.length+" elem)":this.stream.parseOctetString(n,n+i);case 6:return this.stream.parseOID(n,n+i);case 16:case 17:return"("+this.sub.length+" elem)";case 12:return this.stream.parseStringUTF(n,n+i);case 18:case 19:case 20:case 21:case 22:case 26:return this.stream.parseStringISO(n,n+i);case 23:case 24:return this.stream.parseTime(n,n+i)}return null},e.prototype.toString=function(){return this.typeName()+"@"+this.stream.pos+"[header:"+this.header+",length:"+this.length+",sub:"+(null==this.sub?"null":this.sub.length)+"]"},e.prototype.print=function(t){if(void 0==t&&(t=""),document.writeln(t+this),null!=this.sub){t+=" ";for(var e=0,n=this.sub.length;n>e;++e)this.sub[e].print(t)}},e.prototype.toPrettyString=function(t){void 0==t&&(t="");var e=t+this.typeName()+" @"+this.stream.pos;if(this.length>=0&&(e+="+"),e+=this.length,32&this.tag?e+=" (constructed)":3!=this.tag&&4!=this.tag||null==this.sub||(e+=" (encapsulates)"),e+="\n",null!=this.sub){t+=" ";for(var n=0,i=this.sub.length;i>n;++n)e+=this.sub[n].toPrettyString(t)}return e},e.prototype.posStart=function(){return this.stream.pos},e.prototype.posContent=function(){return this.stream.pos+this.header},e.prototype.posEnd=function(){return this.stream.pos+this.header+Math.abs(this.length)},e.decodeLength=function(t){var e=t.get(),n=127&e;if(n==e)return n;if(n>3)throw"Length over 24 bits not supported at position "+(t.pos-1);if(0==n)return-1;e=0;for(var i=0;n>i;++i)e=e<<8|t.get();return e},e.hasContent=function(n,i,r){if(32&n)return!0;if(3>n||n>4)return!1;var o=new t(r);3==n&&o.get();var s=o.get();if(s>>6&1)return!1;try{var a=e.decodeLength(o);return o.pos-r.pos+a==i}catch(u){return!1}},e.decode=function(n){n instanceof t||(n=new t(n,0));var i=new t(n),r=n.get(),o=e.decodeLength(n),s=n.pos-i.pos,a=null;if(e.hasContent(r,o,n)){var u=n.pos;if(3==r&&n.get(),a=[],o>=0){for(var c=u+o;n.pos=ae;++ae)ce[se++]=ae;for(se="a".charCodeAt(0),ae=10;36>ae;++ae)ce[se++]=ae;for(se="A".charCodeAt(0),ae=10;36>ae;++ae)ce[se++]=ae;R.prototype.convert=D,R.prototype.revert=M,R.prototype.reduce=U,R.prototype.mulTo=k,R.prototype.sqrTo=F,j.prototype.convert=B,j.prototype.revert=H,j.prototype.reduce=V,j.prototype.mulTo=Y,j.prototype.sqrTo=z,o.prototype.copyTo=h,o.prototype.fromInt=d,o.prototype.fromString=m,o.prototype.clamp=g,o.prototype.dlShiftTo=A,o.prototype.drShiftTo=C,o.prototype.lShiftTo=N,o.prototype.rShiftTo=T,o.prototype.subTo=O,o.prototype.multiplyTo=S,o.prototype.squareTo=x,o.prototype.divRemTo=I,o.prototype.invDigit=L,o.prototype.isEven=G,o.prototype.exp=W,o.prototype.toString=y,o.prototype.negate=b,o.prototype.abs=v,o.prototype.compareTo=_,o.prototype.bitLength=w,o.prototype.mod=P,o.prototype.modPowInt=q,o.ZERO=f(0),o.ONE=f(1),$.prototype.doPublic=X,$.prototype.setPublic=Z,$.prototype.encrypt=J;var le={cipher:{},hash:{},keyexchange:{},mode:{},misc:{},codec:{},exception:{corrupt:function(t){this.toString=function(){return"CORRUPT: "+this.message},this.message=t},invalid:function(t){this.toString=function(){return"INVALID: "+this.message},this.message=t},bug:function(t){this.toString=function(){return"BUG: "+this.message},this.message=t},notReady:function(t){this.toString=function(){return"NOT READY: "+this.message},this.message=t}}};"undefined"!=typeof module&&module.exports&&(module.exports=le),le.cipher.aes=function(t){this._tables[0][0][0]||this._precompute();var e,n,i,r,o,s=this._tables[0][4],a=this._tables[1],u=t.length,c=1;if(4!==u&&6!==u&&8!==u)throw new le.exception.invalid("invalid aes key size");for(this._key=[r=t.slice(0),o=[]],e=u;4*u+28>e;e++)i=r[e-1],(e%u===0||8===u&&e%u===4)&&(i=s[i>>>24]<<24^s[i>>16&255]<<16^s[i>>8&255]<<8^s[255&i],e%u===0&&(i=i<<8^i>>>24^c<<24,c=c<<1^283*(c>>7))),r[e]=r[e-u]^i;for(n=0;e;n++,e--)i=r[3&n?e:e-4],o[n]=4>=e||4>n?i:a[0][s[i>>>24]]^a[1][s[i>>16&255]]^a[2][s[i>>8&255]]^a[3][s[255&i]]},le.cipher.aes.prototype={encrypt:function(t){return this._crypt(t,0)},decrypt:function(t){return this._crypt(t,1)},_tables:[[[],[],[],[],[]],[[],[],[],[],[]]],_precompute:function(){var t,e,n,i,r,o,s,a,u,c=this._tables[0],l=this._tables[1],p=c[4],h=l[4],d=[],f=[];for(t=0;256>t;t++)f[(d[t]=t<<1^283*(t>>7))^t]=t;for(e=n=0;!p[e];e^=i||1,n=f[n]||1)for(s=n^n<<1^n<<2^n<<3^n<<4,s=s>>8^255&s^99,p[e]=s,h[s]=e,o=d[r=d[i=d[e]]],u=16843009*o^65537*r^257*i^16843008*e,a=257*d[s]^16843008*s,t=0;4>t;t++)c[t][e]=a=a<<24^a>>>8,l[t][s]=u=u<<24^u>>>8;for(t=0;5>t;t++)c[t]=c[t].slice(0),l[t]=l[t].slice(0)},_crypt:function(t,e){if(4!==t.length)throw new le.exception.invalid("invalid aes block size");var n,i,r,o,s=this._key[e],a=t[0]^s[0],u=t[e?3:1]^s[1],c=t[2]^s[2],l=t[e?1:3]^s[3],p=s.length/4-2,h=4,d=[0,0,0,0],f=this._tables[e],m=f[0],g=f[1],y=f[2],b=f[3],v=f[4];for(o=0;p>o;o++)n=m[a>>>24]^g[u>>16&255]^y[c>>8&255]^b[255&l]^s[h],i=m[u>>>24]^g[c>>16&255]^y[l>>8&255]^b[255&a]^s[h+1],r=m[c>>>24]^g[l>>16&255]^y[a>>8&255]^b[255&u]^s[h+2],l=m[l>>>24]^g[a>>16&255]^y[u>>8&255]^b[255&c]^s[h+3],h+=4,a=n,u=i,c=r;for(o=0;4>o;o++)d[e?3&-o:o]=v[a>>>24]<<24^v[u>>16&255]<<16^v[c>>8&255]<<8^v[255&l]^s[h++],n=a,a=u,u=c,c=l,l=n;return d}},le.bitArray={bitSlice:function(t,e,n){return t=le.bitArray._shiftRight(t.slice(e/32),32-(31&e)).slice(1),void 0===n?t:le.bitArray.clamp(t,n-e)},extract:function(t,e,n){var i,r=Math.floor(-e-n&31);return i=-32&(e+n-1^e)?t[e/32|0]<<32-r^t[e/32+1|0]>>>r:t[e/32|0]>>>r,i&(1<0&&e&&(t[n-1]=le.bitArray.partial(e,t[n-1]&2147483648>>e-1,1)),t},partial:function(t,e,n){return 32===t?e:(n?0|e:e<<32-t)+1099511627776*t},getPartial:function(t){return Math.round(t/1099511627776)||32},equal:function(t,e){if(le.bitArray.bitLength(t)!==le.bitArray.bitLength(e))return!1;var n,i=0;for(n=0;n=32;e-=32)i.push(n),n=0;if(0===e)return i.concat(t);for(r=0;r>>e),n=t[r]<<32-e;return s=t.length?t[t.length-1]:0,o=le.bitArray.getPartial(s),i.push(le.bitArray.partial(e+o&31,e+o>32?n:i.pop(),1)),i},_xor4:function(t,e){return[t[0]^e[0],t[1]^e[1],t[2]^e[2],t[3]^e[3]]}},le.codec.hex={fromBits:function(t){var e,n="";for(e=0;ee;e++)0===(3&e)&&(n=t[e/4]),i+=String.fromCharCode(n>>>24),n<<=8;return decodeURIComponent(escape(i))},toBits:function(t){t=unescape(encodeURIComponent(t));var e,n=[],i=0;for(e=0;e>>o)>>>26),6>o?(a=t[i]<<6-o,o+=26,i++):(a<<=6,o-=6);for(;3&r.length&&!e;)r+="=";return r},toBits:function(t,e){t=t.replace(/\s|=/g,"");var n,i,r=[],o=0,s=le.codec.base64._chars,a=0;for(e&&(s=s.substr(0,62)+"-_"),n=0;ni)throw new le.exception.invalid("this isn't base64!");o>26?(o-=26,r.push(a^i>>>o),a=i<<32-o):(o+=6,a^=i<<32-o)}return 56&o&&r.push(le.bitArray.partial(56&o,a,1)),r}},le.codec.base64url={fromBits:function(t){return le.codec.base64.fromBits(t,1,1)},toBits:function(t){return le.codec.base64.toBits(t,1)}},void 0===le.beware&&(le.beware={}),le.beware["CBC mode is dangerous because it doesn't protect message integrity."]=function(){le.mode.cbc={name:"cbc",encrypt:function(t,e,n,i){if(i&&i.length)throw new le.exception.invalid("cbc can't authenticate data");if(128!==le.bitArray.bitLength(n))throw new le.exception.invalid("cbc iv must be 128 bits");var r,o=le.bitArray,s=o._xor4,a=o.bitLength(e),u=0,c=[];if(7&a)throw new le.exception.invalid("pkcs#5 padding only works for multiples of a byte");for(r=0;a>=u+128;r+=4,u+=128)n=t.encrypt(s(n,e.slice(r,r+4))),c.splice(r,0,n[0],n[1],n[2],n[3]);return a=16843009*(16-(a>>3&15)),n=t.encrypt(s(n,o.concat(e,[a,a,a,a]).slice(r,r+4))),c.splice(r,0,n[0],n[1],n[2],n[3]),c},decrypt:function(t,e,n,i){if(i&&i.length)throw new le.exception.invalid("cbc can't authenticate data");if(128!==le.bitArray.bitLength(n))throw new le.exception.invalid("cbc iv must be 128 bits");if(127&le.bitArray.bitLength(e)||!e.length)throw new le.exception.corrupt("cbc ciphertext must be a positive multiple of the block size");var r,o,s,a=le.bitArray,u=a._xor4,c=[];for(i=i||[],r=0;r16)throw new le.exception.corrupt("pkcs#5 padding corrupt");if(s=16843009*o,!a.equal(a.bitSlice([s,s,s,s],0,8*o),a.bitSlice(c,32*c.length-8*o,32*c.length)))throw new le.exception.corrupt("pkcs#5 padding corrupt");return a.bitSlice(c,0,32*c.length-8*o)}}},le.misc.hmac=function(t,e){this._hash=e=e||le.hash.sha256;var n,i=[[],[]],r=e.prototype.blockSize/32;for(this._baseHash=[new e,new e],t.length>r&&(t=e.hash(t)),n=0;r>n;n++)i[0][n]=909522486^t[n],i[1][n]=1549556828^t[n];this._baseHash[0].update(i[0]),this._baseHash[1].update(i[1])},le.misc.hmac.prototype.encrypt=le.misc.hmac.prototype.mac=function(t,e){var n=new this._hash(this._baseHash[0]).update(t,e).finalize();return new this._hash(this._baseHash[1]).update(n).finalize()},le.hash.sha256=function(t){this._key[0]||this._precompute(),t?(this._h=t._h.slice(0),this._buffer=t._buffer.slice(0),this._length=t._length):this.reset()},le.hash.sha256.hash=function(t){return(new le.hash.sha256).update(t).finalize()},le.hash.sha256.prototype={blockSize:512,reset:function(){return this._h=this._init.slice(0),this._buffer=[],this._length=0,this},update:function(t){"string"==typeof t&&(t=le.codec.utf8String.toBits(t));var e,n=this._buffer=le.bitArray.concat(this._buffer,t),i=this._length,r=this._length=i+le.bitArray.bitLength(t);for(e=512+i&-512;r>=e;e+=512)this._block(n.splice(0,16));return this},finalize:function(){var t,e=this._buffer,n=this._h;for(e=le.bitArray.concat(e,[le.bitArray.partial(1,1)]),t=e.length+2;15&t;t++)e.push(0);for(e.push(Math.floor(this._length/4294967296)),e.push(0|this._length);e.length;)this._block(e.splice(0,16));return this.reset(),n},_init:[],_key:[],_precompute:function(){function t(t){return 4294967296*(t-Math.floor(t))|0}var e,n=0,i=2;t:for(;64>n;i++){for(e=2;i>=e*e;e++)if(i%e===0)continue t;8>n&&(this._init[n]=t(Math.pow(i,.5))),this._key[n]=t(Math.pow(i,1/3)),n++}},_block:function(t){var e,n,i,r,o=t.slice(0),s=this._h,a=this._key,u=s[0],c=s[1],l=s[2],p=s[3],h=s[4],d=s[5],f=s[6],m=s[7];for(e=0;64>e;e++)16>e?n=o[e]:(i=o[e+1&15],r=o[e+14&15],n=o[15&e]=(i>>>7^i>>>18^i>>>3^i<<25^i<<14)+(r>>>17^r>>>19^r>>>10^r<<15^r<<13)+o[15&e]+o[e+9&15]|0),n=n+m+(h>>>6^h>>>11^h>>>25^h<<26^h<<21^h<<7)+(f^h&(d^f))+a[e],m=f,f=d,d=h,h=p+n|0,p=l,l=c,c=u,u=n+(c&l^p&(c^l))+(c>>>2^c>>>13^c>>>22^c<<30^c<<19^c<<10)|0;s[0]=s[0]+u|0,s[1]=s[1]+c|0,s[2]=s[2]+l|0,s[3]=s[3]+p|0,s[4]=s[4]+h|0,s[5]=s[5]+d|0,s[6]=s[6]+f|0,s[7]=s[7]+m|0}},le.random={randomWords:function(t,e){var n,i,r=[],o=this.isReady(e);if(o===this._NOT_READY)throw new le.exception.notReady("generator isn't seeded");for(o&this._REQUIRES_RESEED&&this._reseedFromPools(!(o&this._READY)),n=0;t>n;n+=4)(n+1)%this._MAX_WORDS_PER_BURST===0&&this._gate(),i=this._gen4words(),r.push(i[0],i[1],i[2],i[3]);return this._gate(),r.slice(0,t)},setDefaultParanoia:function(t){this._defaultParanoia=t},addEntropy:function(t,e,n){n=n||"user";var i,r,o,s=(new Date).valueOf(),a=this._robins[n],u=this.isReady(),c=0;switch(i=this._collectorIds[n],void 0===i&&(i=this._collectorIds[n]=this._collectorIdNext++),void 0===a&&(a=this._robins[n]=0),this._robins[n]=(this._robins[n]+1)%this._pools.length,typeof t){case"number":void 0===e&&(e=1),this._pools[a].update([i,this._eventId++,1,e,s,1,0|t]);break;case"object":var l=Object.prototype.toString.call(t);if("[object Uint32Array]"===l){for(o=[],r=0;r0;)e++,o>>>=1;this._pools[a].update([i,this._eventId++,2,e,s,t.length].concat(t))}break;case"string":void 0===e&&(e=t.length),this._pools[a].update([i,this._eventId++,3,e,s,t.length]),this._pools[a].update(t);break;default:c=1}if(c)throw new le.exception.bug("random: addEntropy only supports number, array of numbers or string");this._poolEntropy[a]+=e,this._poolStrength+=e,u===this._NOT_READY&&(this.isReady()!==this._NOT_READY&&this._fireEvent("seeded",Math.max(this._strength,this._poolStrength)),this._fireEvent("progress",this.getProgress()))},isReady:function(t){var e=this._PARANOIA_LEVELS[void 0!==t?t:this._defaultParanoia];return this._strength&&this._strength>=e?this._poolEntropy[0]>this._BITS_PER_RESEED&&(new Date).valueOf()>this._nextReseed?this._REQUIRES_RESEED|this._READY:this._READY:this._poolStrength>=e?this._REQUIRES_RESEED|this._NOT_READY:this._NOT_READY},getProgress:function(t){var e=this._PARANOIA_LEVELS[t?t:this._defaultParanoia];return this._strength>=e?1:this._poolStrength>e?1:this._poolStrength/e},startCollectors:function(){if(!this._collectorsStarted){if(window.addEventListener)window.addEventListener("load",this._loadTimeCollector,!1),window.addEventListener("mousemove",this._mouseCollector,!1);else{if(!document.attachEvent)throw new le.exception.bug("can't attach event");document.attachEvent("onload",this._loadTimeCollector),document.attachEvent("onmousemove",this._mouseCollector)}this._collectorsStarted=!0}},stopCollectors:function(){this._collectorsStarted&&(window.removeEventListener?(window.removeEventListener("load",this._loadTimeCollector,!1),window.removeEventListener("mousemove",this._mouseCollector,!1)):window.detachEvent&&(window.detachEvent("onload",this._loadTimeCollector),window.detachEvent("onmousemove",this._mouseCollector)),this._collectorsStarted=!1)},addEventListener:function(t,e){this._callbacks[t][this._callbackI++]=e},removeEventListener:function(t,e){var n,i,r=this._callbacks[t],o=[];for(i in r)r.hasOwnProperty(i)&&r[i]===e&&o.push(i);for(n=0;nt&&(this._counter[t]=this._counter[t]+1|0,!this._counter[t]);t++);return this._cipher.encrypt(this._counter)},_gate:function(){this._key=this._gen4words().concat(this._gen4words()),this._cipher=new le.cipher.aes(this._key)},_reseed:function(t){this._key=le.hash.sha256.hash(this._key.concat(t)),this._cipher=new le.cipher.aes(this._key);for(var e=0;4>e&&(this._counter[e]=this._counter[e]+1|0,!this._counter[e]);e++);},_reseedFromPools:function(t){var e,n=[],i=0;for(this._nextReseed=n[0]=(new Date).valueOf()+this._MILLISECONDS_PER_RESEED,e=0;16>e;e++)n.push(4294967296*Math.random()|0);for(e=0;e=1<this._strength&&(this._strength=i),this._reseedCount++,this._reseed(n)},_mouseCollector:function(t){var e=t.x||t.clientX||t.offsetX||0,n=t.y||t.clientY||t.offsetY||0;le.random.addEntropy([e,n],2,"mouse")},_loadTimeCollector:function(){le.random.addEntropy((new Date).valueOf(),2,"loadtime")},_fireEvent:function(t,e){var n,i=le.random._callbacks[t],r=[];for(n in i)i.hasOwnProperty(n)&&r.push(i[n]);for(n=0;n0&&(i=i.concat(c(e)));return i},l=function(){var n,i,o,s,a,c;try{a=r(t),n=e.decode(a)}catch(l){throw"Invalid encryption key. Please use the key labeled 'Client-Side Encryption Key'"}if(o=u(n),2!==o.length)throw"Invalid encryption key. Please use the key labeled 'Client-Side Encryption Key'";return s=o[0],i=o[1],c=new $,c.setPublic(s,i),c},p=function(){return{key:le.random.randomWords(8,0),sign:function(t){var e=new le.misc.hmac(this.key,le.hash.sha256),n=e.encrypt(t);return le.codec.base64.fromBits(n)}}};i.encrypt=function(t){var e=l(),r=pe.generateAesKey(),o=p(),s=r.encrypt(t),a=o.sign(le.codec.base64.toBits(s)),u=le.bitArray.concat(r.key,o.key),c=le.codec.base64.fromBits(u),h=e.encrypt(c),d="$bt4|javascript_"+i.version.replace(/\./g,"_")+"$",f=null;return h&&(f=n(h)),d+f+"$"+s+"$"+a},i.encryptForm=function(t){var e,n,r,u,l,p;for(t=a(t),p=c(t);o.length>0;){try{t.removeChild(o[0])}catch(h){}o.splice(0,1)}for(l=0;le;e++)i.push(new p(t.paymentMethods[e]));return i},t,this.requestTimeout)},r.prototype.tokenizeCoinbase=function(t,e){t.options={validate:!1},this.addCoinbase(t,function(t,n){t?e(t,null):n&&n.nonce?e(t,n):e("Unable to tokenize coinbase account.",null)})},r.prototype.tokenizePayPalAccount=function(t,e){t.options={validate:!1},this.addPayPalAccount(t,function(t,n){t?e(t,null):n&&n.nonce?e(null,n):e("Unable to tokenize paypal account.",null)})},r.prototype.tokenizeCard=function(t,e){t.options={validate:!1},this.addCreditCard(t,function(t,n){n&&n.nonce?e(t,n.nonce,{type:n.type,details:n.details}):e("Unable to tokenize card.",null)})},r.prototype.lookup3DS=function(t,e){var n=u.joinUrlFragments([this.clientApiUrl,"v1/payment_methods",t.nonce,"three_d_secure/lookup"]),i=u.mergeOptions(this.attrs,{amount:t.amount});this.driver.post(n,i,function(t){return t},e,this.requestTimeout)},r.prototype.createSEPAMandate=function(t,e){var n=u.mergeOptions(this.attrs,{sepaMandate:t});this.driver.post(u.joinUrlFragments([this.clientApiUrl,"v1","sepa_mandates.json"]),n,function(t){return{sepaMandate:new c(t.europeBankAccounts[0].sepaMandates[0]),sepaBankAccount:new l(t.europeBankAccounts[0])}},e,this.requestTimeout)},r.prototype.getSEPAMandate=function(t,e){var n=u.mergeOptions(this.attrs,t);this.driver.get(u.joinUrlFragments([this.clientApiUrl,"v1","sepa_mandates.json"]),n,function(t){return{sepaMandate:new c(t.sepaMandates[0])}},e,this.requestTimeout)},r.prototype.addCoinbase=function(t,e){var n;delete t.share,n=u.mergeOptions(this.attrs,{coinbaseAccount:t,_meta:{integration:this.integration||"custom",source:"coinbase"}}),this.driver.post(u.joinUrlFragments([this.clientApiUrl,"v1","payment_methods/coinbase_accounts"]),n,function(t){return new h(t.coinbaseAccounts[0])},e,this.requestTimeout)},r.prototype.addPayPalAccount=function(t,e){var n;delete t.share,n=u.mergeOptions(this.attrs,{paypalAccount:t,_meta:{integration:this.integration||"paypal",source:"paypal"}}),this.driver.post(u.joinUrlFragments([this.clientApiUrl,"v1","payment_methods","paypal_accounts"]),n,function(t){return new d(t.paypalAccounts[0])},e,this.requestTimeout)},r.prototype.addCreditCard=function(t,e){var n,i,r=t.share;delete t.share,i=f(t),n=u.mergeOptions(this.attrs,{share:r,creditCard:i,_meta:{integration:this.integration||"custom",source:"form"}}),this.driver.post(u.joinUrlFragments([this.clientApiUrl,"v1","payment_methods/credit_cards"]),n,function(t){return new p(t.creditCards[0])},e,this.requestTimeout)},r.prototype.sendAnalyticsEvents=function(t,e){var i,r,o=this.analyticsUrl,s=[];if(t=u.isArray(t)?t:[t],!o)return void(e&&e.apply(null,[null,{}]));for(r in t)t.hasOwnProperty(r)&&s.push({kind:t[r]});i=u.mergeOptions(this.attrs,{braintree_library_version:this.sdkVersion,analytics:s,_meta:{merchantAppId:this.merchantAppId,platform:"web",platformVersion:n.navigator.userAgent,integrationType:this.integration,sdkVersion:this.sdkVersion}}),this.driver.post(o,i,function(t){return t},e,y.ANALYTICS_TIMEOUT_MS)},r.prototype.decryptBrowserswitchPayload=function(t,e){var n=u.mergeOptions(this.attrs,{asymmetric_encrypted_payload:t}),i=u.joinUrlFragments([this.clientApiUrl,"/v1/paypal_browser_switch/decrypt"]);this.driver.post(i,n,function(t){return t},e,this.requestTimeout)},r.prototype.encryptBrowserswitchReturnPayload=function(t,e,n){var i=u.mergeOptions(this.attrs,{payload:t,aesKey:e}),r=u.joinUrlFragments([this.clientApiUrl,"/v1/paypal_browser_switch/encrypt"]);this.driver.post(r,i,function(t){return t},n,this.requestTimeout)},r.prototype.exchangePaypalTokenForConsentCode=function(t,e){var n=u.mergeOptions(this.attrs,t);this.attrs.merchantAccountId&&(n.merchant_account_id=this.attrs.merchantAccountId);var i=u.joinUrlFragments([this.clientApiUrl,"/v1/paypal_account_service/merchant_consent"]);this.driver.post(i,n,function(t){return t},e,this.requestTimeout)},r.prototype.getAmexRewardsBalance=function(t,e){var n=u.mergeOptions(this.attrs,t);n.nonce&&(n.payment_method_nonce=n.nonce,delete n.nonce),this.driver.get(u.joinUrlFragments([this.clientApiUrl,"v1/payment_methods/amex_rewards_balance"]),n,function(t){return t},e,this.requestTimeout)},e.exports=r}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./coinbase-account":3,"./constants":4,"./credit-card":5,"./europe-bank-account":6,"./normalize-api-fields":8,"./parse-client-token":9,"./paypal-account":10,"./request/choose-driver":13,"./sepa-mandate":18,"./should-enable-cors":19,"./util":20,"braintree-3ds":29,"braintree-utilities":43}],3:[function(t,e){"use strict";function n(t){var e,n;for(e=0;e>4&3,l=(15&s)<<4|a>>2&15,p=(3&a)<<6|63&u;i+=String.fromCharCode(c)+(l?String.fromCharCode(l):"")+(p?String.fromCharCode(p):"")}while(r=400||0===a?o.call(null,h||{errors:l.errors.UNKNOWN_ERROR},null):a>0&&o.call(null,null,r(h)))}:(d.onload=function(){o.call(null,null,r(c(d.responseText)))},d.onerror=function(){o.call(null,d.responseText,null)},d.onprogress=function(){},d.ontimeout=function(){o.call(null,{errors:l.errors.UNKNOWN_ERROR},null)}),d.open(t,e,!0),d.timeout=null==s?6e4:s,p&&"POST"===t&&d.setRequestHeader("Content-Type","application/json"),setTimeout(function(){d.send(u(t,n))},0)}var a=t("../util"),u=t("./prep-body"),c=t("./parse-body"),l=t("../constants"),p=n.XMLHttpRequest&&"withCredentials"in new n.XMLHttpRequest;e.exports={get:r,post:o}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../constants":4,"../util":20,"./parse-body":16,"./prep-body":17}],13:[function(t,e){"use strict";function n(t){var e=o.getUserAgent(),n=!(o.isHTTP()&&/(MSIE\s(8|9))|(Phantom)/.test(e));return t=t||{},t.enableCORS&&n?r:i}var i=t("./jsonp-driver"),r=t("./ajax-driver"),o=t("../util");e.exports=n},{"../util":20,"./ajax-driver":12,"./jsonp-driver":14}],14:[function(t,e){"use strict";function n(t,e){return t.status>=400?[t,null]:[null,e(t)]}function i(){}function r(t,e,r,o,s,a){var l;s=s||i,null==a&&(a=6e4),l=o(t,e,function(t,e){c[e]&&(clearTimeout(c[e]),s.apply(null,n(t,function(t){return r(t)})))}),"number"==typeof a?c[l]=setTimeout(function(){c[l]=null,s.apply(null,[{errors:u.errors.UNKNOWN_ERROR},null])},a):s.apply(null,[{errors:u.errors.INVALID_TIMEOUT},null])}function o(t,e,n,i,o){e._method="POST",r(t,e,n,a.get,i,o)}function s(t,e,n,i,o){r(t,e,n,a.get,i,o)}var a=t("./jsonp"),u=t("../constants"),c=[];e.exports={get:s,post:o}},{"../constants":4,"./jsonp":15}],15:[function(t,e){(function(n){"use strict";function i(t,e){var n=document.createElement("script"),i=!1;n.src=t,n.async=!0;var r=e||c.error;"function"==typeof r&&(n.onerror=function(e){r({url:t,event:e})}),n.onload=n.onreadystatechange=function(){i||this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState||(i=!0,n.onload=n.onreadystatechange=null,n&&n.parentNode&&n.parentNode.removeChild(n))},s||(s=document.getElementsByTagName("head")[0]),s.appendChild(n)}function r(t,e,n,r){var o,s;return r=r||c.callbackName||"callback",s=r+"_json"+a.generateUUID(),e[r]=s,o=a.createURLParams(t,e),u[s]=function(t){n(t,s);try{delete u[s]}catch(e){}u[s]=null},i(o),s}function o(t){c=t}var s,a=t("../util"),u=n,c={};e.exports={get:r,init:o}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../util":20}],16:[function(t,e){"use strict";e.exports=function(t){try{t=JSON.parse(t)}catch(e){}return t}},{}],17:[function(t,e){"use strict";var n=t("lodash.isstring");e.exports=function(t,e){if(!n(t))throw new Error("Method must be a string");return"get"!==t.toLowerCase()&&null!=e&&(e=n(e)?e:JSON.stringify(e)),e}},{"lodash.isstring":51}],18:[function(t,e){"use strict";function n(t){var e,n=0,i=["accountHolderName","bic","longFormURL","mandateReferenceNumber","maskedIBAN","shortForm"];for(n=0;n-1&&(n=n.split("#")[0]),e=a.makeQueryString({acsUrl:t.acsUrl,pareq:t.pareq,termUrl:t.termUrl+"&three_d_secure_version="+c,md:t.md,parentUrl:n}),this.assetsUrl+"/3ds/"+c+"/html/style_frame?"+e},e.exports=r},{"../shared/receiver":34,"braintree-utilities":26}],28:[function(t,e){"use strict";function n(){}function i(t,e){e=e||{},this.clientToken=e.clientToken,this.container=e.container,this.api=t,this.nonce=null,this._loader=null,this._boundHandleUserClose=r.bind(this._handleUserClose,this)}var r=t("braintree-utilities"),o=t("./authorization_service"),s=t("./loader");i.prototype.verify=function(t,e){if(!r.isFunction(e))throw this.api.sendAnalyticsEvents("3ds.web.no_callback"),new Error("No suitable callback argument was given");r.isFunction(t.onUserClose)&&(this._onUserClose=t.onUserClose),r.isFunction(t.onLookupComplete)&&(this._onLookupComplete=t.onLookupComplete),(void 0===t.useDefaultLoader||t.useDefaultLoader===!0)&&this._createDefaultLoader();var n={nonce:"",amount:t.amount},i=t.creditCard;if("string"==typeof i)n.nonce=i,this.api.sendAnalyticsEvents("3ds.web.verify.nonce"),this.startVerification(n,e);else{var o=this,s=function(t,i){return t?(o._removeDefaultLoader(),e(t)):(n.nonce=i,void o.startVerification(n,e))};this.api.sendAnalyticsEvents("3ds.web.verify.credit_card"),this.api.tokenizeCard(i,s)}},i.prototype.startVerification=function(t,e){this.api.lookup3DS(t,r.bind(this.handleLookupResponse(e),this))},i.prototype.handleLookupResponse=function(t){var e=this;return function(n,i){var s;this._onLookupComplete(),n?t(n.error):i.lookup&&i.lookup.acsUrl&&i.lookup.acsUrl.length>0?(e.nonce=i.paymentMethod.nonce,s=new o(this.clientToken.assetsUrl,this.container),s.get(i.lookup,r.bind(this.handleAuthenticationResponse(t),this)),this._detachListeners(),this._attachListeners()):(e.nonce=i.paymentMethod.nonce,t(null,{nonce:e.nonce,verificationDetails:i.threeDSecureInfo}))}},i.prototype.handleAuthenticationResponse=function(t){return function(e){var n,i=r.decodeQueryString(e);i.user_closed||(n=JSON.parse(i.auth_response),n.success?t(null,{nonce:n.paymentMethod.nonce,verificationDetails:n.threeDSecureInfo}):n.threeDSecureInfo&&n.threeDSecureInfo.liabilityShiftPossible?t(null,{nonce:this.nonce,verificationDetails:n.threeDSecureInfo}):t(n.error))}},i.prototype._attachListeners=function(){r.addEventListener(window,"message",this._boundHandleUserClose)},i.prototype._detachListeners=function(){r.removeEventListener(window,"message",this._boundHandleUserClose)},i.prototype._createDefaultLoader=function(){this._loader=new s,document.body.appendChild(this._loader.getElement())},i.prototype._removeDefaultLoader=function(){if(this._loader){var t=this._loader.getElement(),e=t.parentNode;e&&e.removeChild(t),this._loader.dispose(),this._loader=null}},i.prototype._handleUserClose=function(t){"user_closed=true"===t.data&&this._onUserClose()},i.prototype._onUserClose=n,i.prototype._onLookupComplete=function(){this._removeDefaultLoader()},e.exports=i},{"./authorization_service":27,"./loader":30,"braintree-utilities":26}],29:[function(t,e){"use strict";var n=t("./client");e.exports={create:function(t,e){var i=new n(t,e);return i}}},{"./client":28}],30:[function(t,e){"use strict";function n(){this._element=document.createElement("div"),this._element.style.cssText=this._cssDeclarations,this._display=null,this._initialize()}var i=t("./loader_display"),r=t("./loader_message"),o=t("./loader_spinner");n.prototype._cssDeclarations=["filter:progid:DXImageTransform.Microsoft.Gradient(StartColorStr=#7F000000, EndColorStr=#7F000000)","background-color: rgba(0, 0, 0, 0.5)","display: table","height: 100%","left: 0","position: fixed","right: 0","top: 0","width: 100%","z-index: 99999"].join(";"),n.prototype.getElement=function(){return this._element},n.prototype.dispose=function(){this._display.dispose(),this._display=null,this._element=null},n.prototype._initialize=function(){var t=new o,e=window.SVGElement&&window.SVGAnimateElement&&window.SVGAnimateTransformElement;e||(t=new r("Loading...")),this._display=new i(t),this.getElement().appendChild(this._display.getElement())},e.exports=n},{"./loader_display":31,"./loader_message":32,"./loader_spinner":33}],31:[function(t,e){"use strict";function n(t){this._element=document.createElement("div"),this._element.style.cssText=this._cssDeclarations,this._displayObject=t,this._initialize()}n.prototype._cssDeclarations=["display: table-cell","vertical-align: middle"].join(";"),n.prototype.getElement=function(){return this._element},n.prototype.dispose=function(){this._displayObject.dispose(),this._displayObject=null,this._element=null},n.prototype._initialize=function(){this.getElement().appendChild(this._displayObject.getElement())},e.exports=n},{}],32:[function(t,e){"use strict";function n(t){this._element=document.createElement("div"),this._element.style.cssText=this._cssDeclarations,this._element.innerHTML=t}n.prototype._cssDeclarations=["color: #fff","font-family: Helvetica, sans-serif","font-size: 12px","text-align: center"].join(";"),n.prototype.getElement=function(){return this._element},n.prototype.dispose=function(){this._element=null},e.exports=n},{}],33:[function(t,e){"use strict";function n(){this._element=document.createElement("div"),this._element.style.cssText=this._cssDeclarations,this._element.innerHTML=this._markup}n.prototype._cssDeclarations=["height: 36px","margin-left: auto","margin-right: auto","width: 36px"].join(";"),n.prototype._markup=['',' ',' '," ",""].join(""),n.prototype.getElement=function(){return this._element},n.prototype.dispose=function(){this._element=null},e.exports=n},{}],34:[function(t,e){"use strict";function n(t){this.postMessageReceiver(t),this.hashChangeReceiver(t)}var i=t("braintree-utilities");n.prototype.postMessageReceiver=function(t){var e=this;this.wrappedCallback=function(n){var i=n.data;(/^(auth_response=)/.test(i)||"user_closed=true"===i)&&(t(i),e.stopListening())},i.addEventListener(window,"message",this.wrappedCallback)},n.prototype.hashChangeReceiver=function(t){var e,n=window.location.hash,i=this;this.poll=setInterval(function(){e=window.location.hash,e.length>0&&e!==n&&(i.stopListening(),e=e.substring(1,e.length),t(e),window.location.hash=n.length>0?n:"")},10)},n.prototype.stopListening=function(){clearTimeout(this.poll),i.removeEventListener(window,"message",this.wrappedCallback)},e.exports=n},{"braintree-utilities":26}],35:[function(t,e){"use strict";var n,i=Array.prototype.indexOf;n=i?function(t,e){return t.indexOf(e)}:function(t,e){for(var n=0,i=t.length;i>n;n++)if(t[n]===e)return n;return-1},e.exports={indexOf:n}},{}],36:[function(t,e){"use strict";function n(t){var e,n,i="";for(e=0;en;n++)i=o[n],t>=i.min&&t<=i.max&&(e=i.chars);return e||60}function i(t,e){var n,i;return-1===t.indexOf("@")?t:(t=t.split("@"),n=t[0],i=t[1],n.length>e&&(n=n.slice(0,e)+"..."),i.length>e&&(i="..."+i.slice(-e)),n+"@"+i)}e.exports={truncateEmail:i,getMaxCharLength:n}},{}],41:[function(t,e){"use strict";function n(){return"https:"===window.location.protocol}function i(t){switch(t){case null:case void 0:return"";case!0:return"1";case!1:return"0";default:return encodeURIComponent(t)}}function r(t,e){var n,o,s=[];for(o in t)if(t.hasOwnProperty(o)){var a=t[o];n=e?e+"["+o+"]":o,"object"==typeof a?s.push(r(a,n)):void 0!==a&&null!==a&&s.push(i(n)+"="+i(a))}return s.join("&")}function o(t){for(var e={},n=t.split("&"),i=0;i-1&&t%1==0&&h>=t}function s(t){return null==t?!0:r(t)&&(u(t)||l(t)||a(t)||n(t)&&c(t.splice))?!t.length:!p(t).length}var a=t("lodash.isarguments"),u=t("lodash.isarray"),c=t("lodash.isfunction"),l=t("lodash.isstring"),p=t("lodash.keys"),h=9007199254740991,d=i("length");e.exports=s},{"lodash.isarguments":45,"lodash.isarray":46,"lodash.isfunction":47,"lodash.isstring":51,"lodash.keys":48}],45:[function(t,e){function n(t){return!!t&&"object"==typeof t}function i(t){return function(e){return null==e?void 0:e[t]}}function r(t){return null!=t&&o(p(t))}function o(t){return"number"==typeof t&&t>-1&&t%1==0&&l>=t}function s(t){return n(t)&&r(t)&&u.call(t,"callee")&&!c.call(t,"callee")}var a=Object.prototype,u=a.hasOwnProperty,c=a.propertyIsEnumerable,l=9007199254740991,p=i("length");e.exports=s},{}],46:[function(t,e){function n(t){return!!t&&"object"==typeof t}function i(t,e){var n=null==t?void 0:t[e];return a(n)?n:void 0}function r(t){return"number"==typeof t&&t>-1&&t%1==0&&y>=t}function o(t){return s(t)&&f.call(t)==c}function s(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function a(t){return null==t?!1:o(t)?m.test(h.call(t)):n(t)&&l.test(t)}var u="[object Array]",c="[object Function]",l=/^\[object .+?Constructor\]$/,p=Object.prototype,h=Function.prototype.toString,d=p.hasOwnProperty,f=p.toString,m=RegExp("^"+h.call(d).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),g=i(Array,"isArray"),y=9007199254740991,b=g||function(t){return n(t)&&r(t.length)&&f.call(t)==u};e.exports=b},{}],47:[function(t,e){function n(t){return i(t)&&s.call(t)==r}function i(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}var r="[object Function]",o=Object.prototype,s=o.toString;e.exports=n},{}],48:[function(t,e){function n(t){return function(e){return null==e?void 0:e[t]}}function i(t){return null!=t&&o(y(t))}function r(t,e){return t="number"==typeof t||h.test(t)?+t:-1,e=null==e?g:e,t>-1&&t%1==0&&e>t}function o(t){return"number"==typeof t&&t>-1&&t%1==0&&g>=t}function s(t){for(var e=u(t),n=e.length,i=n&&t.length,s=!!i&&o(i)&&(p(t)||l(t)),a=-1,c=[];++a0;++i=0;i--)r=v[i],r.closed===!0?v=v.slice(i,1):n!==r&&d(r.top,t,e)}function m(t,e){function n(r,o){t(r,o),b.target(e).unsubscribe(i,n)}var i=l();return b.target(e).subscribe(i,n),i}function g(t,e,n){return s(t)?!0:"function"!=typeof e?!0:s(n)?!0:!1}var y,b,v=[],_={},E="/*framebus*/";return c(),b={target:e,include:t,publish:n,pub:n,trigger:n,emit:n,subscribe:i,sub:i,on:i,unsubscribe:r,unsub:r,off:r}})},{}],56:[function(t,e){"use strict";function n(t){return new i(t)}var i=t("./lib/coinbase");e.exports={create:n}},{"./lib/coinbase":59}],57:[function(t,e){(function(t){"use strict";function n(e){return e=e||t.navigator.userAgent,/AppleWebKit\//.test(e)&&/Mobile\//.test(e)?e.replace(/.* OS ([0-9_]+) like Mac OS X.*/,"$1").replace(/_/g,"."):null}function i(e){e=e||t.navigator.userAgent;var n=null,i=/MSIE.(\d+)/.exec(e);return/Trident/.test(e)&&(n=11),i&&(n=parseInt(i[1],10)),n}function r(e){return e=e||t.navigator.userAgent,/Android/.test(e)?e.replace(/^.* Android ([0-9\.]+).*$/,"$1"):null}e.exports={ieVersion:i,iOSSafariVersion:n,androidVersion:r}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],58:[function(t,e){"use strict";function n(t,e,n){return t?(n.bus.emit(i.ERROR,t.error),void n._sendAnalyticsEvent("generate.nonce.failed")):(n.bus.emit(i.PAYMENT_METHOD_GENERATED,e),void n._sendAnalyticsEvent("generate.nonce.succeeded"))}var i=t("braintree-bus").events;e.exports={tokenize:n}},{"braintree-bus":67}],59:[function(t,e){(function(n){"use strict";function i(t){return{clientId:t.configuration.coinbase.clientId,redirectUrl:t.configuration.coinbase.redirectUrl,scopes:t.configuration.coinbase.scopes||h.SCOPES,meta:{authorizations_merchant_account:t.configuration.coinbase.merchantAccount||""}}}function r(t){return function(e,n){t.emit(f.events.ERROR,{type:n,message:e})}}function o(t,e){var n=(t||{}).coinbase,i=r(e);if(null==t.apiClient)i("settings.apiClient is required for coinbase",h.CONFIGURATION_ERROR);else if(t.configuration.coinbaseEnabled)if(n&&(n.container||n.button))if(n.container&&n.button)i("options.coinbase.container and options.coinbase.button are mutually exclusive",h.CONFIGURATION_ERROR);else{if(d.isSupportedBrowser())return!0;i("Coinbase is not supported by your browser. Please consider upgrading",h.UNSUPPORTED_BROWSER_ERROR)}else i("Either options.coinbase.container or options.coinbase.button is required for Coinbase integrations",h.CONFIGURATION_ERROR);else i("Coinbase is not enabled for your merchant account",h.CONFIGURATION_ERROR);return!1}function s(t){var e,r;this.destructor=new u,this.channel=t.channel,r={channel:this.channel};try{t.coinbase.container&&(r.merchantUrl=n.location.href)}catch(s){}this.bus=t.bus||new f(r),this.canCreateIntegration=o(t,this.bus),this.canCreateIntegration&&(this.buttonId=t.coinbase.button||h.BUTTON_ID,this.apiClient=t.apiClient,this.assetsUrl=t.configuration.assetsUrl,this.environment=t.configuration.coinbase.environment,this._onOAuthSuccess=a.bind(this._onOAuthSuccess,this),this._handleButtonClick=a.bind(this._handleButtonClick,this),this.popupParams=i(t),this.redirectDoneInterval=null,t.coinbase.container?(e=a.normalizeElement(t.coinbase.container),this._insertFrame(e)):(n.braintreeCoinbasePopupCallback=this._onOAuthSuccess,e=document.body,a.addEventListener(e,"click",this._handleButtonClick),this._sendAnalyticsEvent("initialized"),this.destructor.registerFunctionForTeardown(a.bind(function(){this._closePopup()},this)),this.bus.on(h.TEARDOWN_EVENT,a.bind(this.destructor.teardown,this.destructor))))}var a=t("braintree-utilities"),u=t("destructor"),c=t("./dom/composer"),l=t("./url-composer"),p=t("./callbacks"),h=t("./constants"),d=t("./detector"),f=t("braintree-bus");s.prototype._sendAnalyticsEvent=function(t){var e=this.apiClient.integration+".web.coinbase.";this.apiClient.sendAnalyticsEvents(e+t)},s.prototype._insertFrame=function(t){var e=c.createFrame({channel:this.channel});this.bus.emit(f.events.ASYNC_DEPENDENCY_INITIALIZING),t.appendChild(e),this.destructor.registerFunctionForTeardown(function(){t.removeChild(e)}),setTimeout(a.bind(function(){e.src=this.assetsUrl+"/coinbase/"+h.VERSION+"/coinbase-frame.html#"+this.channel},this),0)},s.prototype._onOAuthSuccess=function(t){return t.code?(this.bus.emit("coinbase:view:navigate","loading"),this._sendAnalyticsEvent("popup.authorized"),this.apiClient.tokenizeCoinbase({code:t.code,query:l.getQueryString()},a.bind(function(t,e){p.tokenize.apply(null,[t,e,this])},this)),void this._closePopup()):(this._sendAnalyticsEvent("popup.denied"),void this._closePopup())},s.prototype._clearPollForRedirectDone=function(){this.redirectDoneInterval&&(clearInterval(this.redirectDoneInterval),this.redirectDoneInterval=null)},s.prototype._closePopup=function(t){t=t||this.popup,null!=t&&(d.shouldCloseFromParent()&&t.close(),this._popupCleanup())},s.prototype._popupCleanup=function(){this._clearPollForRedirectDone(),this.bus.emit(f.events.UI_POPUP_DID_CLOSE,{source:h.INTEGRATION_NAME})},s.prototype._pollForRedirectDone=function(t){var e=setInterval(a.bind(function(){var e;if(null==t||t.closed)return this._sendAnalyticsEvent("popup.aborted"),void this._popupCleanup();try{if("about:blank"===t.location.href)throw new Error("Not finished loading");e=a.decodeQueryString(t.location.search.replace(/^\?/,"")).code}catch(n){return}this._onOAuthSuccess({code:e})},this),100);return this.redirectDoneInterval=e,e},s.prototype._openPopup=function(){var t;this._sendAnalyticsEvent("popup.started"),t=c.createPopup(l.compose(this._getOAuthBaseUrl(),this.popupParams)),t.focus(),this._pollForRedirectDone(t),this.bus.emit(f.events.UI_POPUP_DID_OPEN,{source:h.INTEGRATION_NAME}),this.bus.on(f.events.UI_POPUP_FORCE_CLOSE,function(e){e.target===h.INTEGRATION_NAME&&t.close()}),this.popup=t},s.prototype._getOAuthBaseUrl=function(){var t;return t="shared_sandbox"===this.environment?h.SANDBOX_OAUTH_BASE_URL:h.PRODUCTION_OAUTH_BASE_URL},s.prototype._handleButtonClick=function(t){for(var e=t.target||t.srcElement;;){if(null==e)return;if(e===t.currentTarget)return;if(e.id===this.buttonId)break;e=e.parentNode}t&&t.preventDefault?t.preventDefault():t.returnValue=!1,this._openPopup()},s.prototype.teardown=function(t){var e=this;return this.canCreateIntegration?void this.bus.emit(h.TEARDOWN_EVENT,function(){e.destructor.teardown(function(n){return n?t(n):(e.bus.teardown(),void t(null))})}):void t(null)},e.exports=s}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./callbacks":58,"./constants":60,"./detector":61,"./dom/composer":63,"./url-composer":66,"braintree-bus":67,"braintree-utilities":79,destructor:80}],60:[function(t,e){"use strict";e.exports={PRODUCTION_OAUTH_BASE_URL:"https://coinbase.com",SANDBOX_OAUTH_BASE_URL:"https://sandbox.coinbase.com",ORIGIN_URL:"https://www.coinbase.com",FRAME_NAME:"braintree-coinbase-frame",POPUP_NAME:"coinbase",BUTTON_ID:"bt-coinbase-button",SCOPES:"send",VERSION:"0.3.1",INTEGRATION_NAME:"Coinbase",CONFIGURATION_ERROR:"CONFIGURATION",UNSUPPORTED_BROWSER_ERROR:"UNSUPPORTED_BROWSER",TEARDOWN_EVENT:"coinbase:TEARDOWN"}},{}],61:[function(t,e){"use strict";function n(){var t=s.ieVersion();return!t||t>8}function i(){var t=s.androidVersion();return null==t?!1:/^5/.test(t)}function r(){return!(i()||o())}function o(){var t=s.iOSSafariVersion();return null==t?!1:/^8\.0/.test(t)||/^8\.1$/.test(t)}var s=t("./browser");e.exports={isSupportedBrowser:n,shouldCloseFromParent:r,shouldDisplayIOSClose:o,shouldDisplayLollipopClose:i}},{"./browser":57}],62:[function(t,e){"use strict";function n(t){var e=document.createElement("button");return t=t||{},e.id=t.id||"coinbase-button",e.style.backgroundColor=t.backgroundColor||"#EEE",e.style.color=t.color||"#4597C3",e.style.border=t.border||"0",e.style.borderRadius=t.borderRadius||"6px",e.style.padding=t.padding||"12px",e.innerHTML=t.innerHTML||"coinbase",e}e.exports={create:n}},{}],63:[function(t,e){"use strict";var n=t("./popup"),i=t("./button"),r=t("./frame");e.exports={createButton:i.create,createPopup:n.create,createFrame:r.create}},{"./button":62,"./frame":64,"./popup":65}],64:[function(t,e){"use strict";function n(){return r({name:i.FRAME_NAME,height:"70px",width:"100%",style:{padding:0,margin:0,border:0,outline:"none"}})}var i=t("../constants"),r=t("iframer");e.exports={create:n}},{"../constants":60,iframer:83}],65:[function(t,e){(function(n){"use strict";function i(t){var e=[];for(var n in t)t.hasOwnProperty(n)&&e.push([n,t[n]].join("="));return e.join(",")}function r(){var t=850,e=600;return i({width:t,height:e,left:(screen.width-t)/2,top:(screen.height-e)/4})}function o(t){return n.open(t,s.POPUP_NAME,r())}var s=t("../constants");e.exports={create:o}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../constants":60}],66:[function(t,e){"use strict";function n(){return"version="+r.VERSION}function i(t,e){var i=t+"/oauth/authorize?response_type=code",r=e.redirectUrl+"?"+n();if(i+="&redirect_uri="+encodeURIComponent(r),i+="&client_id="+e.clientId,e.scopes&&(i+="&scope="+encodeURIComponent(e.scopes)),e.meta)for(var o in e.meta)e.meta.hasOwnProperty(o)&&(i+="&meta["+encodeURIComponent(o)+"]="+encodeURIComponent(e.meta[o]));return i}var r=t("./constants");e.exports={compose:i,getQueryString:n}},{"./constants":60}],67:[function(t,e,n){arguments[4][52][0].apply(n,arguments)},{"./lib/check-origin":68,"./lib/events":69,dup:52,framebus:70}],68:[function(t,e,n){arguments[4][53][0].apply(n,arguments)},{dup:53}],69:[function(t,e,n){arguments[4][54][0].apply(n,arguments)},{dup:54}],70:[function(t,e,n){arguments[4][55][0].apply(n,arguments)},{dup:55}],71:[function(t,e,n){arguments[4][35][0].apply(n,arguments)},{dup:35}],72:[function(t,e,n){arguments[4][36][0].apply(n,arguments)},{dup:36}],73:[function(t,e,n){arguments[4][22][0].apply(n,arguments)},{dup:22}],74:[function(t,e,n){arguments[4][38][0].apply(n,arguments)},{dup:38}],75:[function(t,e,n){arguments[4][39][0].apply(n,arguments)},{dup:39}],76:[function(t,e,n){arguments[4][40][0].apply(n,arguments)},{dup:40}],77:[function(t,e,n){arguments[4][41][0].apply(n,arguments)},{"./array":71,dup:41}],78:[function(t,e,n){arguments[4][42][0].apply(n,arguments)},{dup:42}],79:[function(t,e,n){arguments[4][43][0].apply(n,arguments)},{"./lib/array":71,"./lib/base64":72,"./lib/dom":73,"./lib/events":74,"./lib/fn":75,"./lib/string":76,"./lib/url":77,"./lib/uuid":78,dup:43}],80:[function(t,e){"use strict";function n(){this._teardownRegistry=[]}var i=t("batch-execute-functions"),r=t("braintree-utilities/lib/fn");n.prototype.registerFunctionForTeardown=function(t){r.isFunction(t)&&this._teardownRegistry.push(t)},n.prototype.teardown=function(t){i(this._teardownRegistry,r.bind(function(e){this._teardownRegistry=[],r.isFunction(t)&&t(e)},this))},e.exports=n},{"batch-execute-functions":81,"braintree-utilities/lib/fn":82}],81:[function(t,e){"use strict";function n(t,e){var n,r=0===t.length;r?(t(),e(null)):(n=i(e),t(n))}function i(t){var e=!1;return function(){e||(e=!0,t.apply(this,arguments))}}e.exports=function(t,e){var i=t.length,r=i;if(0===i)return void e(null);for(var o=0;i>o;o++)n(t[o],function(t){return t?void e(t):(r-=1,void(0===r&&e(null)))})}},{}],82:[function(t,e,n){arguments[4][39][0].apply(n,arguments)},{dup:39}],83:[function(t,e){"use strict";var n=t("lodash.assign"),i=t("lodash.isstring"),r=t("setattributes"),o=t("./lib/default-attributes");e.exports=function(t){var e=document.createElement("iframe"),s=n({},o,t);return s.style&&!i(s.style)&&(n(e.style,s.style),delete s.style),r(e,s),e.getAttribute("id")||(e.id=e.name),e}},{"./lib/default-attributes":84,"lodash.assign":85,"lodash.isstring":96,setattributes:97}],84:[function(t,e){e.exports={src:"about:blank",frameBorder:0,allowtransparency:!0,scrolling:"no"}},{}],85:[function(t,e){function n(t,e,n){for(var i=-1,r=o(e),s=r.length;++i2?n[s-2]:void 0,u=s>2?n[2]:void 0,c=s>1?n[s-1]:void 0;for("function"==typeof a?(a=i(a,c,5),s-=2):(a="function"==typeof c?c:void 0,s-=a?1:0),u&&r(n[0],n[1],u)&&(a=3>s?void 0:a,s=1);++o-1&&t%1==0&&e>t}function o(t,e,n){if(!a(n))return!1;var o=typeof e;if("number"==o?i(n)&&r(e,n.length):"string"==o&&e in n){var s=n[e];return t===t?t===s:s!==s}return!1}function s(t){return"number"==typeof t&&t>-1&&t%1==0&&c>=t}function a(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}var u=/^\d+$/,c=9007199254740991,l=n("length");e.exports=o},{}],91:[function(t,e){function n(t,e){if("function"!=typeof t)throw new TypeError(i);return e=r(void 0===e?t.length-1:+e||0,0),function(){for(var n=arguments,i=-1,o=r(n.length-e,0),s=Array(o);++i=0;n--)if(this.handlers[n].type===t&&this.handlers[n].handler===e)return this.handlers.splice(n,1)},n.prototype._namespaceEvent=function(t){return this.channel?["braintree",this.channel,t].join(":"):t},n.Message=function(t,e,n){this.bus=t,this.source=e,this.content=n},n.Message.prototype.reply=function(t,e){this.bus.send(this.source,t,e)},e.exports=n},{"braintree-utilities":206}],193:[function(t,e){"use strict";function n(t,e){this.bus=t,this.target=e,this.handlers=[],this.bus.register("publish",i.bind(this._handleMessage,this))}var i=t("braintree-utilities");n.prototype._handleMessage=function(t){var e,n=t.content,i=this.handlers[n.channel];if("undefined"!=typeof i)for(e=0;er;r++)e(i[r])},e.exports=n},{}],235:[function(t,e){(function(n){"use strict";function i(t,e){var n=window.getComputedStyle?getComputedStyle(t):t.currentStyle;return n[e]}function r(){return{html:{height:a.style.height||"",overflow:i(a,"overflow"),position:i(a,"position")},body:{height:u.style.height||"",overflow:i(u,"overflow")}}}function o(){var t=/Android|iPhone|iPod|iPad/i.test(window.navigator.userAgent);return t}function s(t){var e,i,r;this.channel=t.channel,this.destructor=new p,this.merchantConfiguration=t.merchantConfiguration,this.encodedClientToken=t.gatewayConfiguration,this.analyticsConfiguration=t.analyticsConfiguration,this.paypalOptions=t.merchantConfiguration.paypal||{},this.container=null,this.merchantFormManager=null,this.root=t.root,this.configurationRequests=[],this.braintreeApiClient=c.configure({clientToken:t.gatewayConfiguration,analyticsConfiguration:this.analyticsConfiguration,integration:"dropin",enableCORS:this.merchantConfiguration.enableCORS}),this.paymentMethodNonceReceivedCallback=t.merchantConfiguration.paymentMethodNonceReceived,this.clientToken=c.parseClientToken(t.gatewayConfiguration),this.braintreeBus=new l({merchantUrl:n.location.href,channel:t.channel}),this.bus=new h.MessageBus(this.root,this.channel),this.rpcServer=new h.RPCServer(this.bus),this.apiProxyServer=new y(this.braintreeApiClient),this.apiProxyServer.attach(this.rpcServer),e=t.inlineFramePath||this.clientToken.assetsUrl+"/dropin/"+E+"/inline-frame.html",i=t.modalFramePath||this.clientToken.assetsUrl+"/dropin/"+E+"/modal-frame.html",a=document.documentElement,u=document.body,this.frames={inline:this._createFrame(e,_.INLINE_FRAME_NAME),modal:this._createFrame(i,_.MODAL_FRAME_NAME)},this.container=f(t.merchantConfiguration.container,"Unable to find valid container."),r=f(t.merchantConfiguration.form||this._findClosest(this.container,"form")),this.merchantFormManager=new b({form:r,frames:this.frames,onSubmit:this.paymentMethodNonceReceivedCallback,apiClient:this.braintreeApiClient}).initialize(),this.destructor.registerFunctionForTeardown(m(function(){this.merchantFormManager.teardown()},this)),t.gatewayConfiguration.paypalEnabled&&this._configurePayPal(),this.braintreeApiClient.sendAnalyticsEvents("dropin.web.initialized")}var a,u,c=t("braintree-api"),l=t("braintree-bus"),p=t("destructor"),h=t("braintree-rpc"),d=t("braintree-utilities"),f=d.normalizeElement,m=d.bind,g=d.isBrowserHttps,y=t("./api-proxy-server"),b=t("./merchant-form-manager"),v=t("./frame-container"),_=t("../shared/constants"),E="1.9.1",w=t("braintree-paypal/src/external/views/app-view");s.prototype.initialize=function(){var t,e=this;this._initializeModal(),this.braintreeBus.emit(l.events.ASYNC_DEPENDENCY_INITIALIZING),this.container.appendChild(this.frames.inline.element),u.appendChild(this.frames.modal.element),this.destructor.registerFunctionForTeardown(function(t){e._hideModal(function(){e.container.removeChild(e.frames.inline.element),u.removeChild(e.frames.modal.element),t()})}),this.rpcServer.define("receiveSharedCustomerIdentifier",function(n){for(e.braintreeApiClient.attrs.sharedCustomerIdentifier=n,e.braintreeApiClient.attrs.sharedCustomerIdentifierType="browser_session_cookie_store",t=0;t0&&n(r,e);return e}function i(t){try{t.attributes.removeNamedItem("name")}catch(e){}}function r(t){n(t)}function o(t){return t.nodeType===s&&t.attributes["data-braintree-name"]}var s=t.Node?t.Node.ELEMENT_NODE:1;e.exports={extractValues:n,scrubAllAttributes:r,scrubAttributes:i,isBraintreeNode:o}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],241:[function(t,e){(function(n){"use strict";function i(t,e){var i=e.merchantConfiguration,o="object"==typeof i.paymentMethodNonceInputField;this.destructor=new s,this.apiClient=t,this.isCreditCardForm=i.useCreditCard===!1?!1:!0,this.htmlForm=document.getElementById(i.id),this.paymentMethodNonceInput=c(i.paymentMethodNonceInputField),this.htmlForm.appendChild(this.paymentMethodNonceInput),this.destructor.registerFunctionForTeardown(r.bind(function(){o?this.paymentMethodNonceInput.value="":this.htmlForm.removeChild(this.paymentMethodNonceInput)},this)),this.model=new u,this.bus=new a({merchantUrl:n.location.href,channel:e.channel}),this.setEvents(),this.destructor.registerFunctionForTeardown(r.bind(function(){this.bus.teardown()},this))}var r=t("braintree-utilities"),o=t("./fields"),s=t("destructor"),a=t("braintree-bus"),u=t("./models/payment-method-model"),c=t("./get-nonce-input"),l={message:"Unable to process payments at this time",type:"IMMEDIATE"};i.prototype.setEvents=function(){this.onSubmitHandler=r.bind(this.handleSubmit,this),this.onExternalNonceReceived=r.bind(this.onExternalNonceReceived,this),this.clearExternalNonce=r.bind(this.clearExternalNonce,this),r.addEventListener(this.htmlForm,"submit",this.onSubmitHandler),this.destructor.registerFunctionForTeardown(r.bind(function(){r.removeEventListener(this.htmlForm,"submit",this.onSubmitHandler)},this)),this.bus.on(a.events.PAYMENT_METHOD_GENERATED,this.onExternalNonceReceived),this.bus.on(a.events.PAYMENT_METHOD_CANCELLED,this.clearExternalNonce)},i.prototype.handleSubmit=function(t){var e;return t.preventDefault?t.preventDefault():t.returnValue=!1,this.isCreditCardForm?(e=this.model.get("type"),e&&"CreditCard"!==e?(o.scrubAllAttributes(this.htmlForm),void this.onNonceReceived(null,this.model.attributes)):void this.apiClient.tokenizeCard(o.extractValues(this.htmlForm),r.bind(function(t,e,n){t?this.onNonceReceived(l,null):(this.model.set({nonce:e,type:n.type,details:n.details}),this.onNonceReceived(null,this.model.attributes))},this))):void this.onNonceReceived(null,this.model.attributes)},i.prototype.writeNonceToDOM=function(){this.paymentMethodNonceInput.value=this.model.get("nonce")},i.prototype.onExternalNonceReceived=function(t){this.model.set(t),this.writeNonceToDOM()},i.prototype.clearExternalNonce=function(){this.model.reset()},i.prototype.onNonceReceived=function(t){var e=this.htmlForm;return t?void this.bus.emit(a.events.ERROR,l):(r.removeEventListener(e,"submit",this.onSubmitHandler),this.writeNonceToDOM(),void(e.submit&&("function"==typeof e.submit||e.submit.call)?e.submit():setTimeout(function(){e.querySelector('[type="submit"]').click()},1)))},i.prototype.teardown=function(){this.destructor.teardown() -},e.exports=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./fields":240,"./get-nonce-input":242,"./models/payment-method-model":243,"braintree-bus":246,"braintree-utilities":258,destructor:259}],242:[function(t,e){"use strict";e.exports=function(t){var e;if("object"==typeof t)return t;e="payment_method_nonce","string"==typeof t&&(e=t);var n=document.createElement("input");return n.name=e,n.type="hidden",n}},{}],243:[function(t,e){"use strict";function n(){this.reset()}n.prototype.get=function(t){return this.attributes[t]},n.prototype.set=function(t){this.attributes=t||{}},n.prototype.reset=function(){this.attributes={}},e.exports=n},{}],244:[function(t,e){"use strict";e.exports=function(t){for(var e=t.getElementsByTagName("*"),n={},i=0;in;n++)t.toLowerCase()===e[n].toLowerCase()&&(r=!0);return r}function r(t){return i(t,p.HERMES_SUPPORTED_CURRENCIES)}function o(t){return i(h(t).split("_")[1],p.HERMES_SUPPORTED_COUNTRIES)}function s(t){return t=parseFloat(t),"number"==typeof t&&!isNaN(t)&&t>=0}function a(t,e){return t.paypal.unvettedMerchant&&(!d(t,e)||!t.paypal.payeeEmail)}function u(t,e){return t.paypal.allowHttp?!0:l.isPopupSupported()?!0:"merchantHttps"in e?e.merchantHttps:g.isBrowserHttps()}var c=t("./client"),l=t("../shared/util/browser"),p=t("../shared/constants"),h=t("../shared/get-locale"),d=t("../shared/util/util").isHermesConfiguration,f=t("../shared/util/util").isOneTimeHermesConfiguration,m="1.6.1",g=t("braintree-utilities"),y=t("braintree-api");e.exports={create:n,VERSION:m}},{"../shared/constants":354,"../shared/get-locale":356,"../shared/util/browser":361,"../shared/util/util":363,"./client":343,"braintree-api":281,"braintree-utilities":324}],345:[function(t,e,n){arguments[4][183][0].apply(n,arguments)},{"../../shared/constants":354,"../../shared/util/browser":361,"./modal-view":350,"./popup-view":353,"braintree-bus":312,"braintree-utilities":324,destructor:325,dup:183}],346:[function(t,e){"use strict";function n(t){this.options=t||{},this.el=r({src:this._buildUrl(),name:i.BRIDGE_FRAME_NAME,height:1,width:1,style:{position:"static",top:0,left:0,bottom:0,padding:0,margin:0,border:0,outline:"none",background:"transparent"}}),this.options.container.appendChild(this.el)}var i=t("../../shared/constants"),r=t("iframer");n.prototype._buildUrl=function(){var t=this.options.paypalAssetsUrl;return t+="/pwpp/",t+=i.VERSION,t+="/html/bridge-frame.html",t+="#"+this.options.channel},n.prototype.teardown=function(){this.options.container.removeChild(this.el)},e.exports=n},{"../../shared/constants":354,iframer:328}],347:[function(t,e){(function(n){"use strict";function i(t){this.options=t||{},this.wrapper=this.options.container||document.body,this.destructor=new o,this.bus=new s({merchantUrl:n.location.href,channel:t.channel}),this._initialize()}var r=t("braintree-utilities"),o=t("destructor"),s=t("braintree-bus"),a=t("../../shared/util/util"),u=t("../../shared/util/dom"),c=t("../../shared/constants");i.prototype._initialize=function(){var t=r.bind(this._handleClickLogout,this);this._createViewContainer(),this._createPayPalName(),this._createEmailNode(),this._createLogoutNode(),r.addEventListener(this.logoutNode,"click",t),this.destructor.registerFunctionForTeardown(r.bind(function(){r.removeEventListener(this.logoutNode,"click",t)},this)),this.bus.on(s.events.PAYMENT_METHOD_GENERATED,r.bind(this._handlePaymentMethodGenerated,this)),this.bus.on(s.events.PAYMENT_METHOD_CANCELLED,r.bind(this._handlePaymentMethodCancelled,this))},i.prototype._createViewContainer=function(){var t=["display: none","max-width: 500px","overflow: hidden","padding: 16px","background-image: url("+this.options.paypalAssetsUrl+"/pwpp/"+c.VERSION+"/images/paypal-small.png)","background-image: url("+this.options.paypalAssetsUrl+"/pwpp/"+c.VERSION+"/images/paypal-small.svg), none","background-position: 20px 50%","background-repeat: no-repeat","background-size: 13px 15px","border-top: 1px solid #d1d4d6","border-bottom: 1px solid #d1d4d6"].join(";");this.container=document.createElement("div"),this.container.id="braintree-paypal-loggedin",this.container.style.cssText=t,this.wrapper.appendChild(this.container)},i.prototype._createPayPalName=function(){var t=["color: #283036","font-size: 13px","font-weight: 800",'font-family: "Helvetica Neue", Helvetica, Arial, sans-serif',"margin-left: 36px","-webkit-font-smoothing: antialiased","-moz-font-smoothing: antialiased","-ms-font-smoothing: antialiased","font-smoothing: antialiased"].join(";");return this.payPalName=document.createElement("span"),this.payPalName.id="bt-pp-name",this.payPalName.innerHTML="PayPal",this.payPalName.style.cssText=t,this.container.appendChild(this.payPalName)},i.prototype._createEmailNode=function(){var t=["color: #6e787f","font-size: 13px",'font-family: "Helvetica Neue", Helvetica, Arial, sans-serif',"margin-left: 5px","-webkit-font-smoothing: antialiased","-moz-font-smoothing: antialiased","-ms-font-smoothing: antialiased","font-smoothing: antialiased"].join(";");this.emailNode=document.createElement("span"),this.emailNode.id="bt-pp-email",this.emailNode.style.cssText=t,this.container.appendChild(this.emailNode)},i.prototype._createLogoutNode=function(){var t=["color: #3d95ce","font-size: 11px",'font-family: "Helvetica Neue", Helvetica, Arial, sans-serif',"line-height: 20px","margin: 0 0 0 25px","padding: 0","background-color: transparent","border: 0","cursor: pointer","text-decoration: underline","float: right","-webkit-font-smoothing: antialiased","-moz-font-smoothing: antialiased","-ms-font-smoothing: antialiased","font-smoothing: antialiased"].join(";");this.logoutNode=document.createElement("button"),this.logoutNode.id="bt-pp-cancel",this.logoutNode.innerHTML="Cancel",this.logoutNode.style.cssText=t,this.container.appendChild(this.logoutNode)},i.prototype.show=function(t){this.container.style.display="block",u.setTextContent(this.emailNode,t)},i.prototype.hide=function(){this.container.style.display="none"},i.prototype._handleClickLogout=function(t){a.preventDefault(t),this.bus.emit(s.events.PAYMENT_METHOD_CANCELLED,{source:c.PAYPAL_INTEGRATION_NAME})},i.prototype._handlePaymentMethodGenerated=function(t){var e;t.type===c.NONCE_TYPE&&(e=t&&t.details&&t.details.email?t.details.email:"",this.show(e))},i.prototype._handlePaymentMethodCancelled=function(t){t.source===c.PAYPAL_INTEGRATION_NAME&&this.hide()},i.prototype.teardown=function(){this.wrapper.removeChild(this.container),this.destructor.teardown(),this.bus.teardown()},e.exports=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../../shared/constants":354,"../../shared/util/dom":362,"../../shared/util/util":363,"braintree-bus":312,"braintree-utilities":324,destructor:325}],348:[function(t,e){(function(n){"use strict";function i(t){this.options=t,this.wrapper=this.options.container||document.body,this.bus=new o({merchantUrl:n.location.href,channel:t.channel}),this._initialize()}var r=t("braintree-utilities"),o=t("braintree-bus"),s=t("../../shared/constants"),a=t("../../shared/get-locale");i.prototype._initialize=function(){this.createViewContainer(),this.options.enablePayPalButton?this.createCheckoutWithPayPalButton():this.createPayWithPayPalButton(),this.bus.on(o.events.PAYMENT_METHOD_GENERATED,r.bind(this._handlePaymentMethodGenerated,this)),this.bus.on(o.events.PAYMENT_METHOD_CANCELLED,r.bind(this._handlePaymentMethodCancelled,this))},i.prototype.createViewContainer=function(){this.container=document.createElement("div"),this.container.id="braintree-paypal-loggedout",this.wrapper.appendChild(this.container),this.loginNode=this.container},i.prototype.createPayWithPayPalButton=function(){var t=document.createElement("a"),e=new Image,n=["max-width: 100%","display: block","width: 100%","height: 100%","outline: none","border: 0"].join(";"),i=["display: block","width: 115px","height: 44px","overflow: hidden"].join(";");t.id="braintree-paypal-button",t.href="#",t.style.cssText=i,e.src=this.options.paypalAssetsUrl+"/pwpp/"+s.VERSION+"/images/pay-with-paypal.png",e.setAttribute("alt","Pay with PayPal"),e.style.cssText=n,t.appendChild(e),this.container.appendChild(t)},i.prototype.createCheckoutWithPayPalButton=function(){var t,e=document.createElement("script"),n={"data-merchant":"merchant-id","data-button":"checkout","data-type":"button","data-color":"blue","data-lc":a(this.options.locale)};e.src="//www.paypalobjects.com/api/button.js",e.async=!0;for(t in n)n.hasOwnProperty(t)&&e.setAttribute(t,n[t]);this.container.appendChild(e)},i.prototype.show=function(){this.container.style.display="block"},i.prototype.hide=function(){this.container.style.display="none"},i.prototype._handlePaymentMethodGenerated=function(t){t.type===s.NONCE_TYPE&&this.hide()},i.prototype._handlePaymentMethodCancelled=function(t){t.source===s.PAYPAL_INTEGRATION_NAME&&this.show()},i.prototype.teardown=function(){this.wrapper.removeChild(this.container),this.bus.teardown()},e.exports=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../../shared/constants":354,"../../shared/get-locale":356,"braintree-bus":312,"braintree-utilities":324}],349:[function(t,e){(function(n){"use strict";function i(t){this.options=t,this.bus=new s({merchantUrl:n.location.href,channel:t.channel}),this.bus.on(u.events.UI_MODAL_DID_OPEN,a.bind(this.lockWindowSize,this)),this.bus.on(u.events.UI_MODAL_DID_CLOSE,a.bind(this.unlockWindowSize,this))}function r(t){var e=window.getComputedStyle?getComputedStyle(t):t.currentStyle;return{overflow:e.overflow||"",height:t.style.height||""}}function o(){return{html:{node:document.documentElement,styles:r(document.documentElement)},body:{node:document.body,styles:r(document.body)}}}var s=t("braintree-bus"),a=t("braintree-utilities"),u=t("../../shared/constants");i.prototype.lockWindowSize=function(){this.defaultStyles=o(),document.documentElement.style.height="100%",document.documentElement.style.overflow="hidden",document.body.style.height="100%",document.body.style.overflow="hidden"},i.prototype.unlockWindowSize=function(){this.defaultStyles&&(document.documentElement.style.height=this.defaultStyles.html.styles.height,document.documentElement.style.overflow=this.defaultStyles.html.styles.overflow,document.body.style.height=this.defaultStyles.body.styles.height,document.body.style.overflow=this.defaultStyles.body.styles.overflow,delete this.defaultStyles)},i.prototype._handleUIModalDidOpen=function(t){t.source===u.PAYPAL_INTEGRATION_NAME&&this.lockWindowSize()},i.prototype._handleUIModalDidClose=function(t){t.source===u.PAYPAL_INTEGRATION_NAME&&this.unlockWindowSize()},i.prototype.teardown=function(){this.unlockWindowSize(),this.bus.teardown()},e.exports=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../../shared/constants":354,"braintree-bus":312,"braintree-utilities":324}],350:[function(t,e,n){arguments[4][184][0].apply(n,arguments)},{"../../shared/constants":354,"../../shared/util/browser":361,"braintree-bus":312,"braintree-utilities":324,dup:184,iframer:328}],351:[function(t,e){(function(n){"use strict";function i(t){this.options=t,this.spriteSrc=this.options.paypalAssetsUrl+"/pwpp/"+a.VERSION+"/images/pp_overlay_sprite.png",this.bus=new s({merchantUrl:n.location.href,channel:t.channel}),this.destructor=new o,this._create(),this._setupEvents(),this.bus.on(s.events.UI_POPUP_DID_OPEN,r.bind(this._handleUIPopupDidOpen,this)),this.bus.on(s.events.UI_POPUP_DID_CLOSE,r.bind(this._handleUIPopupDidClose,this))}var r=t("braintree-utilities"),o=t("destructor"),s=t("braintree-bus"),a=t("../../shared/constants");i.prototype.open=function(){document.body.contains(this.el)||document.body.appendChild(this.el)},i.prototype.close=function(){document.body.contains(this.el)&&document.body.removeChild(this.el)},i.prototype._handleUIPopupDidClose=function(t){t.source===a.PAYPAL_INTEGRATION_NAME&&this.close()},i.prototype._handleUIPopupDidOpen=function(t){t.source===a.PAYPAL_INTEGRATION_NAME&&this.open()},i.prototype._create=function(){this.el=document.createElement("div"),this.el.className="bt-overlay",this._setStyles(this.el,["z-index: 20001","position: fixed","top: 0","left: 0","height: 100%","width: 100%","text-align: center","background: #000","background: rgba(0,0,0,0.7)",'-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=52)"']),this.el.appendChild(this._createCloseIcon()),this.el.appendChild(this._createMessage())},i.prototype._createCloseIcon=function(){return this.closeIcon=document.createElement("div"),this.closeIcon.className="bt-close-overlay",this._setStyles(this.closeIcon,["position: absolute","top: 10px","right: 10px","cursor: pointer","background: url("+this.spriteSrc+") no-repeat 0 -67px","height: 14px","width: 14px"]),this.closeIcon},i.prototype._createMessage=function(){var t=document.createElement("div");return this._setStyles(t,["position: relative","top: 50%","max-width: 350px",'font-family: "HelveticaNeue", "HelveticaNeue-Light", "Helvetica Neue Light", helvetica, arial, sans-serif',"font-size: 14px","line-height: 20px","margin: -70px auto 0"]),t.appendChild(this._createLogo()),t.appendChild(this._createExplanation()),t.appendChild(this._createFocusLink()),t},i.prototype._createExplanation=function(){var t=document.createElement("div");return this._setStyles(t,["color: #FFF","margin-bottom: 20px"]),t.innerHTML="Don't see the secure PayPal browser? We'll help you re-launch the window to complete your purchase.",t},i.prototype._createLogo=function(){var t=document.createElement("div");return this._setStyles(t,["background: url("+this.spriteSrc+") no-repeat 0 0","width: 94px","height: 25px","margin: 0 auto 26px auto"]),t},i.prototype._createFocusLink=function(){return this.focusLink=document.createElement("a"),this._setStyles(this.focusLink,["color: #009be1","cursor: pointer"]),this.focusLink.innerHTML="Continue",this.focusLink},i.prototype._setStyles=function(t,e){var n=e.join(";");t.style.cssText=n},i.prototype._setupEvents=function(){var t=r.bind(this._handleClose,this),e=r.bind(this._handleFocus,this);r.addEventListener(this.closeIcon,"click",t),r.addEventListener(this.focusLink,"click",e),this.destructor.registerFunctionForTeardown(r.bind(function(){r.removeEventListener(this.closeIcon,"click",t),r.removeEventListener(this.focusLink,"click",e) -},this))},i.prototype._handleClose=function(t){t.preventDefault(),this.close(),r.isFunction(this.options.onClose)&&this.options.onClose()},i.prototype._handleFocus=function(t){t.preventDefault(),r.isFunction(this.options.onFocus)&&this.options.onFocus()},i.prototype.teardown=function(){this.bus.teardown(),this.destructor.teardown(),this.close()},e.exports=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../../shared/constants":354,"braintree-bus":312,"braintree-utilities":324,destructor:325}],352:[function(t,e){(function(n){"use strict";function i(t){this.options=t||{},this.container=this.options.container||document.body,this.el=this.options.el,this.destructor=new o,this.bus=new s({merchantUrl:n.location.href,channel:t.channel}),this._initialize()}var r=t("braintree-utilities"),o=t("destructor"),s=t("braintree-bus"),a=t("../../shared/constants");i.prototype._initialize=function(){r.isFunction(this.el)||(null!=this.el?(this.el=r.normalizeElement(this.el),this.destructor.registerFunctionForTeardown(r.bind(function(){this.clear()},this))):this.el=this.create()),this.bus.on(s.events.PAYMENT_METHOD_GENERATED,r.bind(this._handlePaymentMethodGenerated,this)),this.bus.on(s.events.PAYMENT_METHOD_CANCELLED,r.bind(this._handlePaymentMethodCancelled,this))},i.prototype.create=function(){var t=document.createElement("input");return t.name="payment_method_nonce",t.type="hidden",this.container.appendChild(t),this.destructor.registerFunctionForTeardown(r.bind(function(){this.container.removeChild(t)},this)),t},i.prototype.value=function(t){r.isFunction(this.el)?this.el(t):this.el.value=t},i.prototype.clear=function(){this.value("")},i.prototype._handlePaymentMethodCancelled=function(t){t.source===a.PAYPAL_INTEGRATION_NAME&&this.clear()},i.prototype._handlePaymentMethodGenerated=function(t){t.type===a.NONCE_TYPE&&this.value(t.nonce)},i.prototype.teardown=function(){this.destructor.teardown(),this.bus.teardown()},e.exports=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../../shared/constants":354,"braintree-bus":312,"braintree-utilities":324,destructor:325}],353:[function(t,e,n){arguments[4][185][0].apply(n,arguments)},{"../../shared/constants":354,"../../shared/useragent/browser":357,"braintree-bus":312,dup:185}],354:[function(t,e,n){arguments[4][186][0].apply(n,arguments)},{dup:186}],355:[function(t,e){"use strict";e.exports={us:"en_us",gb:"en_uk",uk:"en_uk",de:"de_de",fr:"fr_fr",it:"it_it",es:"es_es",ca:"en_ca",au:"en_au",at:"de_de",be:"en_us",ch:"de_de",dk:"da_dk",nl:"nl_nl",no:"no_no",pl:"pl_pl",se:"sv_se",tr:"tr_tr",bg:"en_us",cy:"en_us",hr:"en_us",is:"en_us",kh:"en_us",mt:"en_us",my:"en_us",ru:"ru_ru"}},{}],356:[function(t,e){"use strict";function n(t){return-1!==t.indexOf("_")&&5===t.length}function i(t){var e,n;for(e in o)o.hasOwnProperty(e)&&(e===t?n=o[e]:o[e]===t&&(n=o[e]));return n}function r(t){var e,r;return t=t?t.toLowerCase():"us",t=t.replace(/-/g,"_"),e=n(t)?t:i(t),e?(r=e.split("_"),[r[0],r[1].toUpperCase()].join("_")):"en_US"}var o=t("../shared/data/country-code-lookup");e.exports=r},{"../shared/data/country-code-lookup":355}],357:[function(t,e,n){arguments[4][187][0].apply(n,arguments)},{"./platform":359,"./useragent":360,dup:187}],358:[function(t,e,n){arguments[4][188][0].apply(n,arguments)},{"./platform":359,"./useragent":360,dup:188}],359:[function(t,e,n){arguments[4][189][0].apply(n,arguments)},{"./useragent":360,dup:189}],360:[function(t,e,n){arguments[4][190][0].apply(n,arguments)},{dup:190}],361:[function(t,e,n){arguments[4][191][0].apply(n,arguments)},{"../useragent/browser":357,"../useragent/device":358,"../useragent/platform":359,"../useragent/useragent":360,dup:191}],362:[function(t,e){"use strict";function n(t,e){var n="innerText";document&&document.body&&"textContent"in document.body&&(n="textContent"),t[n]=e}e.exports={setTextContent:n}},{}],363:[function(t,e){"use strict";function n(){var t,e,n="";for(t=0;32>t;t++)e=Math.floor(16*Math.random()),n+=e.toString(16);return n}function i(t){return/^(true|1)$/i.test(t)}function r(t){return t.replace(/&/g,"&").replace(//g,">").replace(/\"/g,""").replace(/\'/g,"'")}function o(t){var e,n,i,r,o,s,a,u,c=t.indexOf("?"),l={};if(c>=0&&(t=t.substr(c+1)),0===t.length)return null;for(e=t.split("&"),n=0,i=e.length;i>n;n++)r=e[n],o=r.indexOf("="),s=r.substr(0,o),u=r.substr(o+1),a=decodeURIComponent(u),a=a.replace(//g,">"),"false"===a&&(a=!1),(null==a||"true"===a)&&(a=!0),l[s]=a;return l}function s(t){t.preventDefault?t.preventDefault():t.returnValue=!1}function a(t){return Boolean(t.singleUse)&&Boolean(t.amount)&&Boolean(t.currency)}function u(t){return Boolean(t.paypal.billingAgreementsEnabled)}function c(t,e){return u(t)||a(e)}var l="function"==typeof String.prototype.trim?function(t){return t.trim()}:function(t){return t.replace(/^\s+|\s+$/,"")},p="function"==typeof window.btoa?function(t){return window.btoa(t)}:function(t){for(var e,n,i,r,o,s,a,u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",c="",l=0;l>2,o=(3&e)<<4|n>>4,s=(15&n)<<2|i>>6,a=63&i,isNaN(n)?s=a=64:isNaN(i)&&(a=64),c=c+u.charAt(r)+u.charAt(o)+u.charAt(s)+u.charAt(a);return c};e.exports={trim:l,btoa:p,generateUid:n,castToBoolean:i,htmlEscape:r,parseUrlParams:o,preventDefault:s,isOneTimeHermesConfiguration:a,isBillingAgreementsHermesConfiguration:u,isHermesConfiguration:c}},{}],364:[function(t,e,n){arguments[4][35][0].apply(n,arguments)},{dup:35}],365:[function(t,e,n){arguments[4][36][0].apply(n,arguments)},{dup:36}],366:[function(t,e,n){arguments[4][22][0].apply(n,arguments)},{dup:22}],367:[function(t,e,n){arguments[4][38][0].apply(n,arguments)},{dup:38}],368:[function(t,e,n){arguments[4][39][0].apply(n,arguments)},{dup:39}],369:[function(t,e,n){arguments[4][40][0].apply(n,arguments)},{dup:40}],370:[function(t,e,n){arguments[4][41][0].apply(n,arguments)},{"./array":364,dup:41}],371:[function(t,e,n){arguments[4][42][0].apply(n,arguments)},{dup:42}],372:[function(t,e,n){arguments[4][43][0].apply(n,arguments)},{"./lib/array":364,"./lib/base64":365,"./lib/dom":366,"./lib/events":367,"./lib/fn":368,"./lib/string":369,"./lib/url":370,"./lib/uuid":371,dup:43}],373:[function(t,e,n){arguments[4][80][0].apply(n,arguments)},{"batch-execute-functions":374,"braintree-utilities/lib/fn":375,dup:80}],374:[function(t,e,n){arguments[4][81][0].apply(n,arguments)},{dup:81}],375:[function(t,e,n){arguments[4][39][0].apply(n,arguments)},{dup:39}],376:[function(t,e){(function(t){"use strict";function n(t){if(("string"==typeof t||t instanceof String)&&(t=document.getElementById(t)),!(t instanceof HTMLFormElement))throw new TypeError("FormNapper requires an HTMLFormElement element or the id string of one.");this.htmlForm=t}n.prototype.hijack=function(e){this.submitHandler||(this.submitHandler=function(t){t.preventDefault?t.preventDefault():t.returnValue=!1,e(t)},null!=t.addEventListener?this.htmlForm.addEventListener("submit",this.submitHandler,!1):null!=t.attachEvent?this.htmlForm.attachEvent("onsubmit",this.submitHandler):this.htmlForm.onsubmit=this.submitHandler)},n.prototype.inject=function(t,e){var n=this.htmlForm.querySelector('input[name="'+t+'"]');return null==n&&(n=document.createElement("input"),n.type="hidden",n.name=t,this.htmlForm.appendChild(n)),n.value=e,n},n.prototype.submit=function(){HTMLFormElement.prototype.submit.call(this.htmlForm)},n.prototype.detach=function(){this.submitHandler&&(null!=t.removeEventListener?this.htmlForm.removeEventListener("submit",this.submitHandler,!1):null!=t.detachEvent?this.htmlForm.detachEvent("onsubmit",this.submitHandler):this.htmlForm.onsubmit=null,delete this.submitHandler)},e.exports=n}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],377:[function(t,e){var n=t("./lib/external"),i=t("./lib/shared/constants").events,r="1.0.0";e.exports={create:function(t){return new n(t)},events:i,VERSION:r}},{"./lib/external":379,"./lib/shared/constants":381}],378:[function(t,e){var n=t("../shared/constants");e.exports=function(t,e){return t+"/hosted-fields/"+n.VERSION+"/hosted-fields-frame.html#"+e}},{"../shared/constants":381}],379:[function(t,e){"use strict";function n(t,e){var n=document.createElement("div");return n.style.clear="both",e=e||document.body,e.appendChild(t),e.appendChild(n),{parent:e,children:[t,n]}}function i(t,e){return function(n){var i=t[n.fieldKey].containerElement,r=s(i);n.target={fieldKey:n.fieldKey,container:i},r.toggle(l.externalClasses.FOCUSED,n.isFocused).toggle(l.externalClasses.VALID,n.isValid),n.isStrictlyValidating?r.toggle(l.externalClasses.INVALID,!n.isValid):r.toggle(l.externalClasses.INVALID,!n.isPotentiallyValid),delete n.fieldKey,delete n.isStrictlyValidating,e&&e(n)}}function r(t){var e,r,p,d,f,g,y={},b=0;for(this.injectedNodes=[],this.destructor=new o,this.bus=new u({channel:t.channel,merchantUrl:location.href}),this.destructor.registerFunctionForTeardown(h.bind(function(){this.bus.teardown()},this)),this.bus.emit(u.events.ASYNC_DEPENDENCY_INITIALIZING),this.bus.emit(u.events.SEND_ANALYTICS_EVENTS,"hosted-fields.initialized"),f=0;f=0||o.push.call(this,t);return this._elem.className=this.toString(),this},n.prototype.remove=function(){var t,e,n;for(n=0;nt||o.splice.call(this,t,1);return this._elem.className=this.toString(),this},n.prototype.contains=function(t){return t+="",i(this,t)>=0},n.prototype.toggle=function(t,e){return t+="",e===!0?this.add(t):e===!1?this.remove(t):this[this.contains(t)?"remove":"add"](t)},n.prototype.toString=function(){return o.join.call(this," ")}},{"component-indexof":397,trim:398}],397:[function(t,e){e.exports=function(t,e){if(t.indexOf)return t.indexOf(e);for(var n=0;n>6)+et.charAt(63&n);for(e+1==t.length?(n=parseInt(t.substring(e,e+1),16),i+=et.charAt(n<<2)):e+2==t.length&&(n=parseInt(t.substring(e,e+2),16),i+=et.charAt(n>>2)+et.charAt((3&n)<<4));(3&i.length)>0;)i+=nt;return i}function i(t){var e,n,i,o="",r=0;for(e=0;ei||(0==r?(o+=l(i>>2),n=3&i,r=1):1==r?(o+=l(n<<2|i>>4),n=15&i,r=2):2==r?(o+=l(n),o+=l(i>>2),n=3&i,r=3):(o+=l(n<<2|i>>4),o+=l(15&i),r=0));return 1==r&&(o+=l(n<<2)),o}function o(t){var e,n=i(t),o=new Array;for(e=0;2*e=0;){var s=e*this[t++]+n[i]+o;o=Math.floor(s/67108864),n[i++]=67108863&s}return o}function c(t,e,n,i,o,r){for(var s=32767&e,a=e>>15;--r>=0;){var c=32767&this[t],u=this[t++]>>15,l=a*c+u*s;c=s*c+((32767&l)<<15)+n[i]+(1073741823&o),o=(c>>>30)+(l>>>15)+a*u+(o>>>30),n[i++]=1073741823&c}return o}function u(t,e,n,i,o,r){for(var s=16383&e,a=e>>14;--r>=0;){var c=16383&this[t],u=this[t++]>>14,l=a*c+u*s;c=s*c+((16383&l)<<14)+n[i]+o,o=(c>>28)+(l>>14)+a*u,n[i++]=268435455&c}return o}function l(t){return ct.charAt(t)}function h(t,e){var n=ut[t.charCodeAt(e)];return null==n?-1:n}function p(t){for(var e=this.t-1;e>=0;--e)t[e]=this[e];t.t=this.t,t.s=this.s}function d(t){this.t=1,this.s=0>t?-1:0,t>0?this[0]=t:-1>t?this[0]=t+this.DV:this.t=0}function f(t){var e=s();return e.fromInt(t),e}function m(t,e){var n;if(16==e)n=4;else if(8==e)n=3;else if(256==e)n=8;else if(2==e)n=1;else if(32==e)n=5;else{if(4!=e)return void this.fromRadix(t,e);n=2}this.t=0,this.s=0;for(var i=t.length,o=!1,s=0;--i>=0;){var a=8==n?255&t[i]:h(t,i);0>a?"-"==t.charAt(i)&&(o=!0):(o=!1,0==s?this[this.t++]=a:s+n>this.DB?(this[this.t-1]|=(a&(1<>this.DB-s):this[this.t-1]|=a<=this.DB&&(s-=this.DB))}8==n&&0!=(128&t[0])&&(this.s=-1,s>0&&(this[this.t-1]|=(1<0&&this[this.t-1]==t;)--this.t}function g(t){if(this.s<0)return"-"+this.negate().toString(t);var e;if(16==t)e=4;else if(8==t)e=3;else if(2==t)e=1;else if(32==t)e=5;else{if(4!=t)return this.toRadix(t);e=2}var n,i=(1<0)for(a>a)>0&&(o=!0,r=l(n));s>=0;)e>a?(n=(this[s]&(1<>(a+=this.DB-e)):(n=this[s]>>(a-=e)&i,0>=a&&(a+=this.DB,--s)),n>0&&(o=!0),o&&(r+=l(n));return o?r:"0"}function v(){var t=s();return r.ZERO.subTo(this,t),t}function _(){return this.s<0?this.negate():this}function E(t){var e=this.s-t.s;if(0!=e)return e;var n=this.t;if(e=n-t.t,0!=e)return this.s<0?-e:e;for(;--n>=0;)if(0!=(e=this[n]-t[n]))return e;return 0}function b(t){var e,n=1;return 0!=(e=t>>>16)&&(t=e,n+=16),0!=(e=t>>8)&&(t=e,n+=8),0!=(e=t>>4)&&(t=e,n+=4),0!=(e=t>>2)&&(t=e,n+=2),0!=(e=t>>1)&&(t=e,n+=1),n}function w(){return this.t<=0?0:this.DB*(this.t-1)+b(this[this.t-1]^this.s&this.DM)}function A(t,e){var n;for(n=this.t-1;n>=0;--n)e[n+t]=this[n];for(n=t-1;n>=0;--n)e[n]=0;e.t=this.t+t,e.s=this.s}function C(t,e){for(var n=t;n=0;--n)e[n+s+1]=this[n]>>o|a,a=(this[n]&r)<=0;--n)e[n]=0;e[s]=a,e.t=this.t+s+1,e.s=this.s,e.clamp()}function T(t,e){e.s=this.s;var n=Math.floor(t/this.DB);if(n>=this.t)return void(e.t=0);var i=t%this.DB,o=this.DB-i,r=(1<>i;for(var s=n+1;s>i;i>0&&(e[this.t-n-1]|=(this.s&r)<n;)i+=this[n]-t[n],e[n++]=i&this.DM,i>>=this.DB;if(t.t>=this.DB;i+=this.s}else{for(i+=this.s;n>=this.DB;i-=t.s}e.s=0>i?-1:0,-1>i?e[n++]=this.DV+i:i>0&&(e[n++]=i),e.t=n,e.clamp()}function S(t,e){var n=this.abs(),i=t.abs(),o=n.t;for(e.t=o+i.t;--o>=0;)e[o]=0;for(o=0;o=0;)t[n]=0;for(n=0;n=e.DV&&(t[n+e.t]-=e.DV,t[n+e.t+1]=1)}t.t>0&&(t[t.t-1]+=e.am(n,e[n],t,2*n,0,1)),t.s=0,t.clamp()}function P(t,e,n){var i=t.abs();if(!(i.t<=0)){var o=this.abs();if(o.t0?(i.lShiftTo(l,a),o.lShiftTo(l,n)):(i.copyTo(a),o.copyTo(n));var h=a.t,p=a[h-1];if(0!=p){var d=p*(1<1?a[h-2]>>this.F2:0),f=this.FV/d,m=(1<=0&&(n[n.t++]=1,n.subTo(_,n)),r.ONE.dlShiftTo(h,_),_.subTo(a,a);a.t=0;){var E=n[--g]==p?this.DM:Math.floor(n[g]*f+(n[g-1]+y)*m);if((n[g]+=a.am(0,E,n,v,0,h))0&&n.rShiftTo(l,n),0>c&&r.ZERO.subTo(n,n)}}}function O(t){var e=s();return this.abs().divRemTo(t,null,e),this.s<0&&e.compareTo(r.ZERO)>0&&t.subTo(e,e),e}function R(t){this.m=t}function D(t){return t.s<0||t.compareTo(this.m)>=0?t.mod(this.m):t}function M(t){return t}function U(t){t.divRemTo(this.m,null,t)}function L(t,e,n){t.multiplyTo(e,n),this.reduce(n)}function F(t,e){t.squareTo(e),this.reduce(e)}function k(){if(this.t<1)return 0;var t=this[0];if(0==(1&t))return 0;var e=3&t;return e=e*(2-(15&t)*e)&15,e=e*(2-(255&t)*e)&255,e=e*(2-((65535&t)*e&65535))&65535,e=e*(2-t*e%this.DV)%this.DV,e>0?this.DV-e:-e}function B(t){this.m=t,this.mp=t.invDigit(),this.mpl=32767&this.mp,this.mph=this.mp>>15,this.um=(1<0&&this.m.subTo(e,e),e}function V(t){var e=s();return t.copyTo(e),this.reduce(e),e}function z(t){for(;t.t<=this.mt2;)t[t.t++]=0;for(var e=0;e>15)*this.mpl&this.um)<<15)&t.DM;for(n=e+this.m.t,t[n]+=this.m.am(0,i,t,e,0,this.m.t);t[n]>=t.DV;)t[n]-=t.DV,t[++n]++}t.clamp(),t.drShiftTo(this.m.t,t),t.compareTo(this.m)>=0&&t.subTo(this.m,t)}function H(t,e){t.squareTo(e),this.reduce(e)}function Y(t,e,n){t.multiplyTo(e,n),this.reduce(n)}function G(){return 0==(this.t>0?1&this[0]:this.s)}function W(t,e){if(t>4294967295||1>t)return r.ONE;var n=s(),i=s(),o=e.convert(this),a=b(t)-1;for(o.copyTo(n);--a>=0;)if(e.sqrTo(n,i),(t&1<0)e.mulTo(i,o,n);else{var c=n;n=i,i=c}return e.revert(n)}function q(t,e){var n;return n=256>t||e.isEven()?new R(e):new B(e),this.exp(t,n)}function K(t,e){return new r(t,e)}function Q(t,e){if(e=0&&e>0;){var o=t.charCodeAt(i--);128>o?n[--e]=o:o>127&&2048>o?(n[--e]=63&o|128,n[--e]=o>>6|192):(n[--e]=63&o|128,n[--e]=o>>6&63|128,n[--e]=o>>12|224)}n[--e]=0;for(var s=0,a=0,c=0;e>2;)0==c&&(a=lt.random.randomWords(1,0)[0]),s=a>>c&255,c=(c+8)%32,0!=s&&(n[--e]=s);return n[--e]=2,n[--e]=0,new r(n)}function Z(){this.n=null,this.e=0,this.d=null,this.p=null,this.q=null,this.dmp1=null,this.dmq1=null,this.coeff=null}function X(t,e){if(!(null!=t&&null!=e&&t.length>0&&e.length>0))throw new Error("Invalid RSA public key");this.n=K(t,16),this.e=parseInt(e,16)}function $(t){return t.modPowInt(this.e,this.n)}function J(t){var e=Q(t,this.n.bitLength()+7>>3);if(null==e)return null;var n=this.doPublic(e);if(null==n)return null;var i=n.toString(16);return 0==(1&i.length)?i:"0"+i}t.prototype.get=function(t){if(void 0==t&&(t=this.pos++),t>=this.enc.length)throw"Requesting byte offset "+t+" on a stream of length "+this.enc.length;return this.enc[t]},t.prototype.hexDigits="0123456789ABCDEF",t.prototype.hexByte=function(t){return this.hexDigits.charAt(t>>4&15)+this.hexDigits.charAt(15&t)},t.prototype.hexDump=function(t,e){for(var n="",i=t;e>i;++i)switch(n+=this.hexByte(this.get(i)),15&i){case 7:n+=" ";break;case 15:n+="\n";break;default:n+=" "}return n},t.prototype.parseStringISO=function(t,e){for(var n="",i=t;e>i;++i)n+=String.fromCharCode(this.get(i));return n},t.prototype.parseStringUTF=function(t,e){for(var n="",i=0,o=t;e>o;){var i=this.get(o++);n+=String.fromCharCode(128>i?i:i>191&&224>i?(31&i)<<6|63&this.get(o++):(15&i)<<12|(63&this.get(o++))<<6|63&this.get(o++))}return n},t.prototype.reTime=/^((?:1[89]|2\d)?\d\d)(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])([01]\d|2[0-3])(?:([0-5]\d)(?:([0-5]\d)(?:[.,](\d{1,3}))?)?)?(Z|[-+](?:[0]\d|1[0-2])([0-5]\d)?)?$/,t.prototype.parseTime=function(t,e){var n=this.parseStringISO(t,e),i=this.reTime.exec(n);return i?(n=i[1]+"-"+i[2]+"-"+i[3]+" "+i[4],i[5]&&(n+=":"+i[5],i[6]&&(n+=":"+i[6],i[7]&&(n+="."+i[7]))),i[8]&&(n+=" UTC","Z"!=i[8]&&(n+=i[8],i[9]&&(n+=":"+i[9]))),n):"Unrecognized time: "+n},t.prototype.parseInteger=function(t,e){var n=e-t;if(n>4){n<<=3;var i=this.get(t);if(0==i)n-=8;else for(;128>i;)i<<=1,--n;return"("+n+" bit)"}for(var o=0,r=t;e>r;++r)o=o<<8|this.get(r);return o},t.prototype.parseBitString=function(t,e){var n=this.get(t),i=(e-t-1<<3)-n,o="("+i+" bit)";if(20>=i){var r=n;o+=" ";for(var s=e-1;s>t;--s){for(var a=this.get(s),c=r;8>c;++c)o+=a>>c&1?"1":"0";r=0}}return o},t.prototype.parseOctetString=function(t,e){var n=e-t,i="("+n+" byte) ";n>20&&(e=t+20);for(var o=t;e>o;++o)i+=this.hexByte(this.get(o));return n>20&&(i+=String.fromCharCode(8230)),i},t.prototype.parseOID=function(t,e){for(var n,i=0,o=0,r=t;e>r;++r){var s=this.get(r);i=i<<7|127&s,o+=7,128&s||(void 0==n?n=parseInt(i/40)+"."+i%40:n+="."+(o>=31?"bigint":i),i=o=0),n+=String.fromCharCode()}return n},e.prototype.typeName=function(){if(void 0==this.tag)return"unknown";var t=this.tag>>6,e=(this.tag>>5&1,31&this.tag);switch(t){case 0:switch(e){case 0:return"EOC";case 1:return"BOOLEAN";case 2:return"INTEGER";case 3:return"BIT_STRING";case 4:return"OCTET_STRING";case 5:return"NULL";case 6:return"OBJECT_IDENTIFIER";case 7:return"ObjectDescriptor";case 8:return"EXTERNAL";case 9:return"REAL";case 10:return"ENUMERATED";case 11:return"EMBEDDED_PDV";case 12:return"UTF8String";case 16:return"SEQUENCE";case 17:return"SET";case 18:return"NumericString";case 19:return"PrintableString";case 20:return"TeletexString";case 21:return"VideotexString";case 22:return"IA5String";case 23:return"UTCTime";case 24:return"GeneralizedTime";case 25:return"GraphicString";case 26:return"VisibleString";case 27:return"GeneralString";case 28:return"UniversalString";case 30:return"BMPString";default:return"Universal_"+e.toString(16)}case 1:return"Application_"+e.toString(16);case 2:return"["+e+"]";case 3:return"Private_"+e.toString(16)}},e.prototype.content=function(){if(void 0==this.tag)return null;var t=this.tag>>6;if(0!=t)return null==this.sub?null:"("+this.sub.length+")";var e=31&this.tag,n=this.posContent(),i=Math.abs(this.length);switch(e){case 1:return 0==this.stream.get(n)?"false":"true";case 2:return this.stream.parseInteger(n,n+i);case 3:return this.sub?"("+this.sub.length+" elem)":this.stream.parseBitString(n,n+i);case 4:return this.sub?"("+this.sub.length+" elem)":this.stream.parseOctetString(n,n+i);case 6:return this.stream.parseOID(n,n+i);case 16:case 17:return"("+this.sub.length+" elem)";case 12:return this.stream.parseStringUTF(n,n+i);case 18:case 19:case 20:case 21:case 22:case 26:return this.stream.parseStringISO(n,n+i);case 23:case 24:return this.stream.parseTime(n,n+i)}return null},e.prototype.toString=function(){return this.typeName()+"@"+this.stream.pos+"[header:"+this.header+",length:"+this.length+",sub:"+(null==this.sub?"null":this.sub.length)+"]"},e.prototype.print=function(t){if(void 0==t&&(t=""),document.writeln(t+this),null!=this.sub){t+=" ";for(var e=0,n=this.sub.length;n>e;++e)this.sub[e].print(t)}},e.prototype.toPrettyString=function(t){void 0==t&&(t="");var e=t+this.typeName()+" @"+this.stream.pos;if(this.length>=0&&(e+="+"),e+=this.length,32&this.tag?e+=" (constructed)":3!=this.tag&&4!=this.tag||null==this.sub||(e+=" (encapsulates)"),e+="\n",null!=this.sub){t+=" ";for(var n=0,i=this.sub.length;i>n;++n)e+=this.sub[n].toPrettyString(t)}return e},e.prototype.posStart=function(){return this.stream.pos},e.prototype.posContent=function(){return this.stream.pos+this.header},e.prototype.posEnd=function(){return this.stream.pos+this.header+Math.abs(this.length)},e.decodeLength=function(t){var e=t.get(),n=127&e;if(n==e)return n;if(n>3)throw"Length over 24 bits not supported at position "+(t.pos-1);if(0==n)return-1;e=0;for(var i=0;n>i;++i)e=e<<8|t.get();return e},e.hasContent=function(n,i,o){if(32&n)return!0;if(3>n||n>4)return!1;var r=new t(o);3==n&&r.get();var s=r.get();if(s>>6&1)return!1;try{var a=e.decodeLength(r);return r.pos-o.pos+a==i}catch(c){return!1}},e.decode=function(n){n instanceof t||(n=new t(n,0));var i=new t(n),o=n.get(),r=e.decodeLength(n),s=n.pos-i.pos,a=null;if(e.hasContent(o,r,n)){var c=n.pos;if(3==o&&n.get(),a=[],r>=0){for(var u=c+r;n.pos=at;++at)ut[st++]=at;for(st="a".charCodeAt(0),at=10;36>at;++at)ut[st++]=at;for(st="A".charCodeAt(0),at=10;36>at;++at)ut[st++]=at;R.prototype.convert=D,R.prototype.revert=M,R.prototype.reduce=U,R.prototype.mulTo=L,R.prototype.sqrTo=F,B.prototype.convert=j,B.prototype.revert=V,B.prototype.reduce=z,B.prototype.mulTo=Y,B.prototype.sqrTo=H,r.prototype.copyTo=p,r.prototype.fromInt=d,r.prototype.fromString=m,r.prototype.clamp=y,r.prototype.dlShiftTo=A,r.prototype.drShiftTo=C,r.prototype.lShiftTo=N,r.prototype.rShiftTo=T,r.prototype.subTo=I,r.prototype.multiplyTo=S,r.prototype.squareTo=x,r.prototype.divRemTo=P,r.prototype.invDigit=k,r.prototype.isEven=G,r.prototype.exp=W,r.prototype.toString=g,r.prototype.negate=v,r.prototype.abs=_,r.prototype.compareTo=E,r.prototype.bitLength=w,r.prototype.mod=O,r.prototype.modPowInt=q,r.ZERO=f(0),r.ONE=f(1),Z.prototype.doPublic=$,Z.prototype.setPublic=X,Z.prototype.encrypt=J;var lt={cipher:{},hash:{},keyexchange:{},mode:{},misc:{},codec:{},exception:{corrupt:function(t){this.toString=function(){return"CORRUPT: "+this.message},this.message=t},invalid:function(t){this.toString=function(){return"INVALID: "+this.message},this.message=t},bug:function(t){this.toString=function(){return"BUG: "+this.message},this.message=t},notReady:function(t){this.toString=function(){return"NOT READY: "+this.message},this.message=t}}};"undefined"!=typeof module&&module.exports&&(module.exports=lt),lt.cipher.aes=function(t){this._tables[0][0][0]||this._precompute();var e,n,i,o,r,s=this._tables[0][4],a=this._tables[1],c=t.length,u=1;if(4!==c&&6!==c&&8!==c)throw new lt.exception.invalid("invalid aes key size");for(this._key=[o=t.slice(0),r=[]],e=c;4*c+28>e;e++)i=o[e-1],(e%c===0||8===c&&e%c===4)&&(i=s[i>>>24]<<24^s[i>>16&255]<<16^s[i>>8&255]<<8^s[255&i],e%c===0&&(i=i<<8^i>>>24^u<<24,u=u<<1^283*(u>>7))),o[e]=o[e-c]^i;for(n=0;e;n++,e--)i=o[3&n?e:e-4],r[n]=4>=e||4>n?i:a[0][s[i>>>24]]^a[1][s[i>>16&255]]^a[2][s[i>>8&255]]^a[3][s[255&i]]},lt.cipher.aes.prototype={encrypt:function(t){return this._crypt(t,0)},decrypt:function(t){return this._crypt(t,1)},_tables:[[[],[],[],[],[]],[[],[],[],[],[]]],_precompute:function(){var t,e,n,i,o,r,s,a,c,u=this._tables[0],l=this._tables[1],h=u[4],p=l[4],d=[],f=[];for(t=0;256>t;t++)f[(d[t]=t<<1^283*(t>>7))^t]=t;for(e=n=0;!h[e];e^=i||1,n=f[n]||1)for(s=n^n<<1^n<<2^n<<3^n<<4,s=s>>8^255&s^99,h[e]=s,p[s]=e,r=d[o=d[i=d[e]]],c=16843009*r^65537*o^257*i^16843008*e,a=257*d[s]^16843008*s,t=0;4>t;t++)u[t][e]=a=a<<24^a>>>8,l[t][s]=c=c<<24^c>>>8;for(t=0;5>t;t++)u[t]=u[t].slice(0),l[t]=l[t].slice(0)},_crypt:function(t,e){if(4!==t.length)throw new lt.exception.invalid("invalid aes block size");var n,i,o,r,s=this._key[e],a=t[0]^s[0],c=t[e?3:1]^s[1],u=t[2]^s[2],l=t[e?1:3]^s[3],h=s.length/4-2,p=4,d=[0,0,0,0],f=this._tables[e],m=f[0],y=f[1],g=f[2],v=f[3],_=f[4];for(r=0;h>r;r++)n=m[a>>>24]^y[c>>16&255]^g[u>>8&255]^v[255&l]^s[p],i=m[c>>>24]^y[u>>16&255]^g[l>>8&255]^v[255&a]^s[p+1],o=m[u>>>24]^y[l>>16&255]^g[a>>8&255]^v[255&c]^s[p+2],l=m[l>>>24]^y[a>>16&255]^g[c>>8&255]^v[255&u]^s[p+3],p+=4,a=n,c=i,u=o;for(r=0;4>r;r++)d[e?3&-r:r]=_[a>>>24]<<24^_[c>>16&255]<<16^_[u>>8&255]<<8^_[255&l]^s[p++],n=a,a=c,c=u,u=l,l=n;return d}},lt.bitArray={bitSlice:function(t,e,n){return t=lt.bitArray._shiftRight(t.slice(e/32),32-(31&e)).slice(1),void 0===n?t:lt.bitArray.clamp(t,n-e)},extract:function(t,e,n){var i,o=Math.floor(-e-n&31);return i=-32&(e+n-1^e)?t[e/32|0]<<32-o^t[e/32+1|0]>>>o:t[e/32|0]>>>o,i&(1<0&&e&&(t[n-1]=lt.bitArray.partial(e,t[n-1]&2147483648>>e-1,1)),t},partial:function(t,e,n){return 32===t?e:(n?0|e:e<<32-t)+1099511627776*t},getPartial:function(t){return Math.round(t/1099511627776)||32},equal:function(t,e){if(lt.bitArray.bitLength(t)!==lt.bitArray.bitLength(e))return!1;var n,i=0;for(n=0;n=32;e-=32)i.push(n),n=0;if(0===e)return i.concat(t);for(o=0;o>>e),n=t[o]<<32-e;return s=t.length?t[t.length-1]:0,r=lt.bitArray.getPartial(s),i.push(lt.bitArray.partial(e+r&31,e+r>32?n:i.pop(),1)),i},_xor4:function(t,e){return[t[0]^e[0],t[1]^e[1],t[2]^e[2],t[3]^e[3]]}},lt.codec.hex={fromBits:function(t){var e,n="";for(e=0;ee;e++)0===(3&e)&&(n=t[e/4]),i+=String.fromCharCode(n>>>24),n<<=8;return decodeURIComponent(escape(i))},toBits:function(t){t=unescape(encodeURIComponent(t));var e,n=[],i=0;for(e=0;e>>r)>>>26),6>r?(a=t[i]<<6-r,r+=26,i++):(a<<=6,r-=6);for(;3&o.length&&!e;)o+="=";return o},toBits:function(t,e){t=t.replace(/\s|=/g,"");var n,i,o=[],r=0,s=lt.codec.base64._chars,a=0;for(e&&(s=s.substr(0,62)+"-_"),n=0;ni)throw new lt.exception.invalid("this isn't base64!");r>26?(r-=26,o.push(a^i>>>r),a=i<<32-r):(r+=6,a^=i<<32-r)}return 56&r&&o.push(lt.bitArray.partial(56&r,a,1)),o}},lt.codec.base64url={fromBits:function(t){return lt.codec.base64.fromBits(t,1,1)},toBits:function(t){return lt.codec.base64.toBits(t,1)}},void 0===lt.beware&&(lt.beware={}),lt.beware["CBC mode is dangerous because it doesn't protect message integrity."]=function(){lt.mode.cbc={name:"cbc",encrypt:function(t,e,n,i){if(i&&i.length)throw new lt.exception.invalid("cbc can't authenticate data");if(128!==lt.bitArray.bitLength(n))throw new lt.exception.invalid("cbc iv must be 128 bits");var o,r=lt.bitArray,s=r._xor4,a=r.bitLength(e),c=0,u=[];if(7&a)throw new lt.exception.invalid("pkcs#5 padding only works for multiples of a byte");for(o=0;a>=c+128;o+=4,c+=128)n=t.encrypt(s(n,e.slice(o,o+4))),u.splice(o,0,n[0],n[1],n[2],n[3]);return a=16843009*(16-(a>>3&15)),n=t.encrypt(s(n,r.concat(e,[a,a,a,a]).slice(o,o+4))),u.splice(o,0,n[0],n[1],n[2],n[3]),u},decrypt:function(t,e,n,i){if(i&&i.length)throw new lt.exception.invalid("cbc can't authenticate data");if(128!==lt.bitArray.bitLength(n))throw new lt.exception.invalid("cbc iv must be 128 bits");if(127<.bitArray.bitLength(e)||!e.length)throw new lt.exception.corrupt("cbc ciphertext must be a positive multiple of the block size");var o,r,s,a=lt.bitArray,c=a._xor4,u=[];for(i=i||[],o=0;o16)throw new lt.exception.corrupt("pkcs#5 padding corrupt");if(s=16843009*r,!a.equal(a.bitSlice([s,s,s,s],0,8*r),a.bitSlice(u,32*u.length-8*r,32*u.length)))throw new lt.exception.corrupt("pkcs#5 padding corrupt");return a.bitSlice(u,0,32*u.length-8*r)}}},lt.misc.hmac=function(t,e){this._hash=e=e||lt.hash.sha256;var n,i=[[],[]],o=e.prototype.blockSize/32;for(this._baseHash=[new e,new e],t.length>o&&(t=e.hash(t)),n=0;o>n;n++)i[0][n]=909522486^t[n],i[1][n]=1549556828^t[n];this._baseHash[0].update(i[0]),this._baseHash[1].update(i[1])},lt.misc.hmac.prototype.encrypt=lt.misc.hmac.prototype.mac=function(t,e){var n=new this._hash(this._baseHash[0]).update(t,e).finalize();return new this._hash(this._baseHash[1]).update(n).finalize()},lt.hash.sha256=function(t){this._key[0]||this._precompute(),t?(this._h=t._h.slice(0),this._buffer=t._buffer.slice(0),this._length=t._length):this.reset()},lt.hash.sha256.hash=function(t){return(new lt.hash.sha256).update(t).finalize()},lt.hash.sha256.prototype={blockSize:512,reset:function(){return this._h=this._init.slice(0),this._buffer=[],this._length=0,this},update:function(t){"string"==typeof t&&(t=lt.codec.utf8String.toBits(t));var e,n=this._buffer=lt.bitArray.concat(this._buffer,t),i=this._length,o=this._length=i+lt.bitArray.bitLength(t);for(e=512+i&-512;o>=e;e+=512)this._block(n.splice(0,16));return this},finalize:function(){var t,e=this._buffer,n=this._h;for(e=lt.bitArray.concat(e,[lt.bitArray.partial(1,1)]),t=e.length+2;15&t;t++)e.push(0);for(e.push(Math.floor(this._length/4294967296)),e.push(0|this._length);e.length;)this._block(e.splice(0,16));return this.reset(),n},_init:[],_key:[],_precompute:function(){function t(t){return 4294967296*(t-Math.floor(t))|0}var e,n=0,i=2;t:for(;64>n;i++){for(e=2;i>=e*e;e++)if(i%e===0)continue t;8>n&&(this._init[n]=t(Math.pow(i,.5))),this._key[n]=t(Math.pow(i,1/3)),n++}},_block:function(t){var e,n,i,o,r=t.slice(0),s=this._h,a=this._key,c=s[0],u=s[1],l=s[2],h=s[3],p=s[4],d=s[5],f=s[6],m=s[7];for(e=0;64>e;e++)16>e?n=r[e]:(i=r[e+1&15],o=r[e+14&15],n=r[15&e]=(i>>>7^i>>>18^i>>>3^i<<25^i<<14)+(o>>>17^o>>>19^o>>>10^o<<15^o<<13)+r[15&e]+r[e+9&15]|0),n=n+m+(p>>>6^p>>>11^p>>>25^p<<26^p<<21^p<<7)+(f^p&(d^f))+a[e],m=f,f=d,d=p,p=h+n|0,h=l,l=u,u=c,c=n+(u&l^h&(u^l))+(u>>>2^u>>>13^u>>>22^u<<30^u<<19^u<<10)|0;s[0]=s[0]+c|0,s[1]=s[1]+u|0,s[2]=s[2]+l|0,s[3]=s[3]+h|0,s[4]=s[4]+p|0,s[5]=s[5]+d|0,s[6]=s[6]+f|0,s[7]=s[7]+m|0}},lt.random={randomWords:function(t,e){var n,i,o=[],r=this.isReady(e);if(r===this._NOT_READY)throw new lt.exception.notReady("generator isn't seeded");for(r&this._REQUIRES_RESEED&&this._reseedFromPools(!(r&this._READY)),n=0;t>n;n+=4)(n+1)%this._MAX_WORDS_PER_BURST===0&&this._gate(),i=this._gen4words(),o.push(i[0],i[1],i[2],i[3]);return this._gate(),o.slice(0,t)},setDefaultParanoia:function(t){this._defaultParanoia=t},addEntropy:function(t,e,n){n=n||"user";var i,o,r,s=(new Date).valueOf(),a=this._robins[n],c=this.isReady(),u=0;switch(i=this._collectorIds[n],void 0===i&&(i=this._collectorIds[n]=this._collectorIdNext++),void 0===a&&(a=this._robins[n]=0),this._robins[n]=(this._robins[n]+1)%this._pools.length,typeof t){case"number":void 0===e&&(e=1),this._pools[a].update([i,this._eventId++,1,e,s,1,0|t]);break;case"object":var l=Object.prototype.toString.call(t);if("[object Uint32Array]"===l){for(r=[],o=0;o0;)e++,r>>>=1;this._pools[a].update([i,this._eventId++,2,e,s,t.length].concat(t))}break;case"string":void 0===e&&(e=t.length),this._pools[a].update([i,this._eventId++,3,e,s,t.length]),this._pools[a].update(t);break;default:u=1}if(u)throw new lt.exception.bug("random: addEntropy only supports number, array of numbers or string");this._poolEntropy[a]+=e,this._poolStrength+=e,c===this._NOT_READY&&(this.isReady()!==this._NOT_READY&&this._fireEvent("seeded",Math.max(this._strength,this._poolStrength)),this._fireEvent("progress",this.getProgress()))},isReady:function(t){var e=this._PARANOIA_LEVELS[void 0!==t?t:this._defaultParanoia];return this._strength&&this._strength>=e?this._poolEntropy[0]>this._BITS_PER_RESEED&&(new Date).valueOf()>this._nextReseed?this._REQUIRES_RESEED|this._READY:this._READY:this._poolStrength>=e?this._REQUIRES_RESEED|this._NOT_READY:this._NOT_READY},getProgress:function(t){var e=this._PARANOIA_LEVELS[t?t:this._defaultParanoia];return this._strength>=e?1:this._poolStrength>e?1:this._poolStrength/e},startCollectors:function(){if(!this._collectorsStarted){if(window.addEventListener)window.addEventListener("load",this._loadTimeCollector,!1),window.addEventListener("mousemove",this._mouseCollector,!1);else{if(!document.attachEvent)throw new lt.exception.bug("can't attach event");document.attachEvent("onload",this._loadTimeCollector),document.attachEvent("onmousemove",this._mouseCollector)}this._collectorsStarted=!0}},stopCollectors:function(){this._collectorsStarted&&(window.removeEventListener?(window.removeEventListener("load",this._loadTimeCollector,!1),window.removeEventListener("mousemove",this._mouseCollector,!1)):window.detachEvent&&(window.detachEvent("onload",this._loadTimeCollector),window.detachEvent("onmousemove",this._mouseCollector)),this._collectorsStarted=!1)},addEventListener:function(t,e){this._callbacks[t][this._callbackI++]=e},removeEventListener:function(t,e){var n,i,o=this._callbacks[t],r=[];for(i in o)o.hasOwnProperty(i)&&o[i]===e&&r.push(i);for(n=0;nt&&(this._counter[t]=this._counter[t]+1|0,!this._counter[t]);t++);return this._cipher.encrypt(this._counter)},_gate:function(){this._key=this._gen4words().concat(this._gen4words()),this._cipher=new lt.cipher.aes(this._key)},_reseed:function(t){this._key=lt.hash.sha256.hash(this._key.concat(t)),this._cipher=new lt.cipher.aes(this._key);for(var e=0;4>e&&(this._counter[e]=this._counter[e]+1|0,!this._counter[e]);e++);},_reseedFromPools:function(t){var e,n=[],i=0;for(this._nextReseed=n[0]=(new Date).valueOf()+this._MILLISECONDS_PER_RESEED,e=0;16>e;e++)n.push(4294967296*Math.random()|0);for(e=0;e=1<this._strength&&(this._strength=i),this._reseedCount++,this._reseed(n)},_mouseCollector:function(t){var e=t.x||t.clientX||t.offsetX||0,n=t.y||t.clientY||t.offsetY||0;lt.random.addEntropy([e,n],2,"mouse")},_loadTimeCollector:function(t){lt.random.addEntropy((new Date).valueOf(),2,"loadtime")},_fireEvent:function(t,e){var n,i=lt.random._callbacks[t],o=[];for(n in i)i.hasOwnProperty(n)&&o.push(i[n]);for(n=0;n0&&(i=i.concat(u(e)));return i},l=function(){var n,i,r,s,a,u;try{a=o(t),n=e.decode(a)}catch(l){throw"Invalid encryption key. Please use the key labeled 'Client-Side Encryption Key'"}if(r=c(n),2!==r.length)throw"Invalid encryption key. Please use the key labeled 'Client-Side Encryption Key'";return s=r[0],i=r[1],u=new Z,u.setPublic(s,i),u},h=function(){return{key:lt.random.randomWords(8,0),sign:function(t){var e=new lt.misc.hmac(this.key,lt.hash.sha256),n=e.encrypt(t);return lt.codec.base64.fromBits(n)}}};i.encrypt=function(t){var e=l(),o=ht.generateAesKey(),r=h(),s=o.encrypt(t),a=r.sign(lt.codec.base64.toBits(s)),c=lt.bitArray.concat(o.key,r.key),u=lt.codec.base64.fromBits(c),p=e.encrypt(u),d="$bt4|javascript_"+i.version.replace(/\./g,"_")+"$",f=null;return p&&(f=n(p)),d+f+"$"+s+"$"+a},i.encryptForm=function(t){var e,n,o,c,l,h;for(t=a(t),h=u(t);r.length>0;){try{t.removeChild(r[0])}catch(p){}r.splice(0,1)}for(l=0;le;e++)i.push(new h(t.paymentMethods[e]));return i},t,this.requestTimeout)},this))},o.prototype.tokenizeCoinbase=function(t,e){t.options={validate:!1},this.addCoinbase(t,function(t,n){t?e(t,null):n&&n.nonce?e(t,n):e("Unable to tokenize coinbase account.",null)})},o.prototype.tokenizePayPalAccount=function(t,e){t.options={validate:!1},this.addPayPalAccount(t,function(t,n){t?e(t,null):n&&n.nonce?e(null,n):e("Unable to tokenize paypal account.",null)})},o.prototype.tokenizeCard=function(t,e){t.options={validate:!1},this.addCreditCard(t,function(t,n){n&&n.nonce?e(t,n.nonce,{type:n.type,details:n.details}):e("Unable to tokenize card.",null)})},o.prototype.lookup3DS=function(t,e){this._getGatewayConfiguration(r(function(n,i){var o,r;return n?e(n):(o=c.joinUrlFragments([i.clientApiUrl,"v1/payment_methods",t.nonce,"three_d_secure/lookup"]),r=c.mergeOptions(this._getAttrs(i),{amount:t.amount}),void this.driver.post(o,r,function(t){return t},e,this.requestTimeout))},this))},o.prototype.createSEPAMandate=function(t,e){this._getGatewayConfiguration(r(function(n,i){var o;return n?e(n):(o=c.mergeOptions(this._getAttrs(i),{sepaMandate:t}),void this.driver.post(c.joinUrlFragments([i.clientApiUrl,"v1","sepa_mandates.json"]),o,function(t){return{sepaMandate:new u(t.europeBankAccounts[0].sepaMandates[0]),sepaBankAccount:new l(t.europeBankAccounts[0])}},e,this.requestTimeout))},this))},o.prototype.getSEPAMandate=function(t,e){this._getGatewayConfiguration(r(function(n,i){var o;return n?e(n):(o=c.mergeOptions(this._getAttrs(i),t),void this.driver.get(c.joinUrlFragments([i.clientApiUrl,"v1","sepa_mandates.json"]),o,function(t){return{sepaMandate:new u(t.sepaMandates[0])}},e,this.requestTimeout))},this))},o.prototype.addCoinbase=function(t,e){this._getGatewayConfiguration(r(function(n,i){var o;return n?e(n):(delete t.share,o=c.mergeOptions(this._getAttrs(i),{coinbaseAccount:t,_meta:{integration:this.integration||"custom",source:"coinbase",sessionId:this.sessionId}}),void this.driver.post(c.joinUrlFragments([i.clientApiUrl,"v1","payment_methods/coinbase_accounts"]),o,function(t){return new p(t.coinbaseAccounts[0])},e,this.requestTimeout))},this))},o.prototype.addPayPalAccount=function(t,e){this._getGatewayConfiguration(r(function(n,i){var o;return n?e(n):(delete t.share,o=c.mergeOptions(this._getAttrs(i),{paypalAccount:t,_meta:{integration:this.integration||"paypal",source:"paypal",sessionId:this.sessionId}}),void this.driver.post(c.joinUrlFragments([i.clientApiUrl,"v1","payment_methods","paypal_accounts"]),o,function(t){return new d(t.paypalAccounts[0])},e,this.requestTimeout))},this))},o.prototype.addCreditCard=function(t,e){this._getGatewayConfiguration(r(function(n,i){var o,r,s;return n?e(n):(s=t.share,delete t.share,r=f(t),o=c.mergeOptions(this._getAttrs(i),{share:s,creditCard:r,_meta:{integration:this.integration||"custom",source:"form",sessionId:this.sessionId}}),void this.driver.post(c.joinUrlFragments([i.clientApiUrl,"v1","payment_methods/credit_cards"]),o,function(t){return new h(t.creditCards[0])},e,this.requestTimeout))},this))},o.prototype.sendAnalyticsEvents=function(t,e){this._getGatewayConfiguration(r(function(i,o){var r,s,a,u;if(i)return void e(i);if(a=o.analytics.url,u=[],t=c.isArray(t)?t:[t],!a)return void(e&&e(null,{}));for(s in t)t.hasOwnProperty(s)&&u.push({kind:t[s]});r=c.mergeOptions(this._getAttrs(o),{analytics:u,_meta:{merchantAppId:this.merchantAppId,platform:"web",platformVersion:n.navigator.userAgent,integrationType:this.integration,sdkVersion:this.sdkVersion,sessionId:this.sessionId}}),this.driver.post(a,r,function(t){return t},e,v.ANALYTICS_TIMEOUT_MS)},this))},o.prototype.decryptBrowserswitchPayload=function(t,e){this._getGatewayConfiguration(r(function(n,i){var o,r;return n?e(n):(o=c.mergeOptions(this._getAttrs(i),{asymmetricEncryptedPayload:t}),r=c.joinUrlFragments([i.clientApiUrl,"/v1/paypal_browser_switch/decrypt"]),void this.driver.post(r,o,function(t){return t},e,this.requestTimeout))},this))},o.prototype.encryptBrowserswitchReturnPayload=function(t,e,n){this._getGatewayConfiguration(r(function(i,o){var r,s;return i?n(i):(r=c.mergeOptions(this._getAttrs(o),{payload:t,aesKey:e}),s=c.joinUrlFragments([o.clientApiUrl,"/v1/paypal_browser_switch/encrypt"]),void this.driver.post(s,r,function(t){return t},n,this.requestTimeout))},this))},o.prototype.exchangePaypalTokenForConsentCode=function(t,e){this._getGatewayConfiguration(r(function(n,i){var o,r;return n?e(n):(o=c.mergeOptions(this._getAttrs(i),t),i.merchantAccountId&&(o.merchantAccountId=i.merchantAccountId),r=c.joinUrlFragments([i.clientApiUrl,"/v1/paypal_account_service/merchant_consent"]),void this.driver.post(r,o,function(t){return t},e,this.requestTimeout))},this))},o.prototype.getAmexRewardsBalance=function(t,e){this._getGatewayConfiguration(r(function(n,i){var o;return n?e(n):(o=c.mergeOptions(this._getAttrs(i),t),o.nonce&&(o.paymentMethodNonce=o.nonce,delete o.nonce),void this.driver.get(c.joinUrlFragments([i.clientApiUrl,"v1/payment_methods/amex_rewards_balance"]),o,function(t){return t},e,this.requestTimeout))},this))},o.prototype.getAmexExpressCheckoutNonceProfile=function(t,e){this._getGatewayConfiguration(r(function(n,i){var o;return n?e(n):(o=c.mergeOptions(this._getAttrs(i),t),o.nonce&&(o.paymentMethodNonce=o.nonce,delete o.nonce),void this.driver.get(c.joinUrlFragments([i.clientApiUrl,"v1/payment_methods/amex_express_checkout_cards",o.paymentMethodNonce]),o,function(t){return t},e,this.requestTimeout))},this))},o.prototype.verify3DS=function(){var t=arguments;return this._secure3d?this._secure3d.verify.apply(this._secure3d,t):void this._getGatewayConfiguration(r(function(e,n){var i;return e?(i=t[t.length-1])(e):(this._secure3d=s.create(this,{container:this.options.container,clientToken:n}),this._secure3d.verify.apply(this._secure3d,t))},this))},e.exports=o}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{11:11,12:12,13:13,2:2,26:26,3:3,4:4,40:40,49:49,5:5,6:6,7:7,8:8,87:87,9:9}],2:[function(t,e,n){"use strict";function i(t){var e,n;for(e=0;e>4&3,l=(15&s)<<4|a>>2&15,h=(3&a)<<6|63&c;i+=String.fromCharCode(u)+(l?String.fromCharCode(l):"")+(h?String.fromCharCode(h):"")}while(on;n++)if(t[n]===e)return n;return-1},e.exports={indexOf:i}},{}],16:[function(t,e,n){"use strict";function i(t){var e,n,i="";for(e=0;en;n++)i=r[n],t>=i.min&&t<=i.max&&(e=i.chars);return e||60}function o(t,e){var n,i;return-1===t.indexOf("@")?t:(t=t.split("@"),n=t[0],i=t[1],n.length>e&&(n=n.slice(0,e)+"..."),i.length>e&&(i="..."+i.slice(-e)),n+"@"+i)}e.exports={truncateEmail:o,getMaxCharLength:i}},{}],21:[function(t,e,n){"use strict";function i(){return"https:"===window.location.protocol}function o(t){switch(t){case null:case void 0:return"";case!0:return"1";case!1:return"0";default:return encodeURIComponent(t)}}function r(t,e){var n,i,s=[];for(i in t)if(t.hasOwnProperty(i)){var a=t[i];n=e?e+"["+i+"]":i,"object"==typeof a?s.push(r(a,n)):void 0!==a&&null!==a&&s.push(o(n)+"="+o(a))}return s.join("&")}function s(t){for(var e={},n=t.split("&"),i=0;i-1&&(n=n.split("#")[0]),e=c.makeQueryString({acsUrl:t.acsUrl,pareq:t.pareq,termUrl:t.termUrl+"&three_d_secure_version="+h,md:t.md,parentUrl:n}),this.assetsUrl+"/3ds/"+h+"/html/style_frame?"+e},e.exports=r},{146:146,23:23,31:31}],25:[function(t,e,n){"use strict";function i(){}function o(t,e){e=e||{},this.clientToken=e.clientToken,this.container=e.container,this.api=t,this.nonce=null,this._loader=null,this._boundHandleUserClose=s(this._handleUserClose,this)}var r=t(23),s=t(87),a=t(146),c=t(24),u=t(27);o.prototype.verify=function(t,e){if(!a(e))throw this.api.sendAnalyticsEvents("3ds.web.no_callback"),new Error("No suitable callback argument was given");a(t.onUserClose)&&(this._onUserClose=t.onUserClose),a(t.onLookupComplete)&&(this._onLookupComplete=t.onLookupComplete),(void 0===t.useDefaultLoader||t.useDefaultLoader===!0)&&this._createDefaultLoader();var n={nonce:"",amount:t.amount},i=t.creditCard;if("string"==typeof i)n.nonce=i,this.api.sendAnalyticsEvents("3ds.web.verify.nonce"),this.startVerification(n,e);else{var o=this,r=function(t,i){return t?(o._removeDefaultLoader(),e(t)):(n.nonce=i,void o.startVerification(n,e))};this.api.sendAnalyticsEvents("3ds.web.verify.credit_card"),this.api.tokenizeCard(i,r)}},o.prototype.startVerification=function(t,e){this.api.lookup3DS(t,s(this.handleLookupResponse(e),this))},o.prototype.handleLookupResponse=function(t){var e=this;return function(n,i){var o;this._onLookupComplete(),n?t(n.error):i.lookup&&i.lookup.acsUrl&&i.lookup.acsUrl.length>0?(e.nonce=i.paymentMethod.nonce,o=new c(this.clientToken.assetsUrl,this.container),o.get(i.lookup,s(this.handleAuthenticationResponse(t),this)),this._detachListeners(),this._attachListeners()):(e.nonce=i.paymentMethod.nonce,t(null,{nonce:e.nonce,verificationDetails:i.threeDSecureInfo}))}},o.prototype.handleAuthenticationResponse=function(t){return function(e){var n,i=r.decodeQueryString(e);i.user_closed||(n=JSON.parse(i.auth_response),n.success?t(null,{nonce:n.paymentMethod.nonce,verificationDetails:n.threeDSecureInfo}):n.threeDSecureInfo&&n.threeDSecureInfo.liabilityShiftPossible?t(null,{nonce:this.nonce,verificationDetails:n.threeDSecureInfo}):t(n.error))}},o.prototype._attachListeners=function(){r.addEventListener(window,"message",this._boundHandleUserClose)},o.prototype._detachListeners=function(){r.removeEventListener(window,"message",this._boundHandleUserClose)},o.prototype._createDefaultLoader=function(){this._loader=new u,document.body.appendChild(this._loader.getElement())},o.prototype._removeDefaultLoader=function(){if(this._loader){var t=this._loader.getElement(),e=t.parentNode;e&&e.removeChild(t),this._loader.dispose(),this._loader=null}},o.prototype._handleUserClose=function(t){"user_closed=true"===t.data&&this._onUserClose()},o.prototype._onUserClose=i,o.prototype._onLookupComplete=function(){this._removeDefaultLoader()},e.exports=o},{146:146,23:23,24:24,27:27,87:87}],26:[function(t,e,n){"use strict";var i=t(25);e.exports={create:function(t,e){var n=new i(t,e);return n}}},{25:25}],27:[function(t,e,n){"use strict";function i(){this._element=document.createElement("div"),this._element.style.cssText=this._cssDeclarations,this._display=null,this._initialize()}var o=t(28),r=t(29),s=t(30);i.prototype._cssDeclarations=["filter:progid:DXImageTransform.Microsoft.Gradient(StartColorStr=#7F000000, EndColorStr=#7F000000)","background-color: rgba(0, 0, 0, 0.5)","display: table","height: 100%","left: 0","position: fixed","right: 0","top: 0","width: 100%","z-index: 99999"].join(";"),i.prototype.getElement=function(){return this._element},i.prototype.dispose=function(){this._display.dispose(),this._display=null,this._element=null},i.prototype._initialize=function(){var t=new s,e=window.SVGElement&&window.SVGAnimateElement&&window.SVGAnimateTransformElement;e||(t=new r("Loading...")),this._display=new o(t),this.getElement().appendChild(this._display.getElement())},e.exports=i},{28:28,29:29,30:30}],28:[function(t,e,n){"use strict";function i(t){this._element=document.createElement("div"),this._element.style.cssText=this._cssDeclarations,this._displayObject=t,this._initialize()}i.prototype._cssDeclarations=["display: table-cell","vertical-align: middle"].join(";"),i.prototype.getElement=function(){return this._element},i.prototype.dispose=function(){this._displayObject.dispose(),this._displayObject=null,this._element=null},i.prototype._initialize=function(){this.getElement().appendChild(this._displayObject.getElement())},e.exports=i},{}],29:[function(t,e,n){"use strict";function i(t){this._element=document.createElement("div"),this._element.style.cssText=this._cssDeclarations,this._element.innerHTML=t}i.prototype._cssDeclarations=["color: #fff","font-family: Helvetica, sans-serif","font-size: 12px","text-align: center"].join(";"),i.prototype.getElement=function(){return this._element},i.prototype.dispose=function(){this._element=null},e.exports=i},{}],30:[function(t,e,n){"use strict";function i(){this._element=document.createElement("div"),this._element.style.cssText=this._cssDeclarations,this._element.innerHTML=this._markup}i.prototype._cssDeclarations=["height: 36px","margin-left: auto","margin-right: auto","width: 36px"].join(";"),i.prototype._markup=['',' ',' '," ",""].join(""),i.prototype.getElement=function(){return this._element},i.prototype.dispose=function(){this._element=null},e.exports=i},{}],31:[function(t,e,n){"use strict";function i(t){this.postMessageReceiver(t),this.hashChangeReceiver(t)}var o=t(23);i.prototype.postMessageReceiver=function(t){var e=this;this.wrappedCallback=function(n){var i=n.data;(/^(auth_response=)/.test(i)||"user_closed=true"===i)&&(t(i),e.stopListening())},o.addEventListener(window,"message",this.wrappedCallback)},i.prototype.hashChangeReceiver=function(t){var e,n=window.location.hash,i=this;this.poll=setInterval(function(){e=window.location.hash,e.length>0&&e!==n&&(i.stopListening(),e=e.substring(1,e.length),t(e),window.location.hash=n.length>0?n:"")},10)},i.prototype.stopListening=function(){clearTimeout(this.poll),o.removeEventListener(window,"message",this.wrappedCallback)},e.exports=i},{23:23}],32:[function(t,e,n){(function(n){"use strict";function i(){return h?new XMLHttpRequest:new XDomainRequest}function o(t,e,n,i,o){var r=a.createURLParams(t,e);s("GET",r,null,n,i,o)}function r(t,e,n,i,o){s("POST",t,e,n,i,o)}function s(t,e,n,o,r,s){var a,p,d=i();r=r||function(){},h?d.onreadystatechange=function(){4===d.readyState&&(a=d.status,p=u(d.responseText),a>=400||0===a?r.call(null,p||{errors:l.errors.UNKNOWN_ERROR},null):a>0&&r.call(null,null,o(p)))}:(d.onload=function(){r.call(null,null,o(u(d.responseText)))},d.onerror=function(){r.call(null,d.responseText,null)},d.onprogress=function(){},d.ontimeout=function(){r.call(null,{errors:l.errors.UNKNOWN_ERROR},null)}),d.open(t,e,!0),d.timeout=null==s?6e4:s,h&&"POST"===t&&d.setRequestHeader("Content-Type","application/json"),setTimeout(function(){d.send(c(t,n))},0)}var a=t(39),c=t(38),u=t(37),l=t(34),h=n.XMLHttpRequest&&"withCredentials"in new n.XMLHttpRequest;e.exports={get:o,post:r}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{34:34,37:37,38:38,39:39}],33:[function(t,e,n){"use strict";function i(t){var e=s.getUserAgent(),n=!(s.isHTTP()&&/(MSIE\s(8|9))|(Phantom)/.test(e));return t=t||{},t.enableCORS&&n?r:o}var o=t(35),r=t(32),s=t(39);e.exports=i},{32:32,35:35,39:39}],34:[function(t,e,n){e.exports={errors:{UNKNOWN_ERROR:"Unknown error",INVALID_TIMEOUT:"Timeout must be a number"}}},{}],35:[function(t,e,n){"use strict";function i(t,e){return t.status>=400?[t,null]:[null,e(t)]}function o(){}function r(t,e,n,r,s,a){var c;s=s||o,null==a&&(a=6e4),c=r(t,e,function(t,e,o){l[o]&&(clearTimeout(l[o]),t?s.call(null,t):s.apply(null,i(e,function(t){return n(t)})))}),"number"==typeof a?l[c]=setTimeout(function(){l[c]=null,s.apply(null,[{errors:u.errors.UNKNOWN_ERROR},null])},a):s.apply(null,[{errors:u.errors.INVALID_TIMEOUT},null])}function s(t,e,n,i,o){e._method="POST",r(t,e,n,c.get,i,o)}function a(t,e,n,i,o){r(t,e,n,c.get,i,o)}var c=t(36),u=t(34),l=[];e.exports={get:a,post:s}},{34:34,36:36}],36:[function(t,e,n){(function(n){"use strict";function i(t,e){var n=document.createElement("script"),i=!1;n.src=t,n.async=!0;var o=e||u.error;"function"==typeof o&&(n.onerror=function(e){o({url:t,event:e})}),n.onload=n.onreadystatechange=function(){i||this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState||(i=!0,n.onload=n.onreadystatechange=null,n&&n.parentNode&&n.parentNode.removeChild(n))},s||(s=document.getElementsByTagName("head")[0]),s.appendChild(n)}function o(t,e,n,o){var r,s;return o=o||u.callbackName||"callback",s=o+"_json"+a.generateUUID(),e[o]=s,r=a.createURLParams(t,e),c[s]=function(t){n(null,t,s);try{delete c[s]}catch(e){}c[s]=null},i(r,function(t){n(t,null,s)}),s}function r(t){u=t}var s,a=t(39),c=n,u={};e.exports={get:o,init:r}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{39:39}],37:[function(t,e,n){"use strict";e.exports=function(t){try{t=JSON.parse(t)}catch(e){}return t}},{}],38:[function(t,e,n){"use strict";e.exports=function(t,e){if("string"!=typeof t)throw new Error("Method must be a string");return"get"!==t.toLowerCase()&&null!=e&&(e="string"==typeof e?e:JSON.stringify(e)),e}},{}],39:[function(t,e,n){(function(t){"use strict";function n(t){var e;for(e in t)if(t.hasOwnProperty(e))return!0;return!1}function i(t){return t&&"object"==typeof t&&"number"==typeof t.length&&"[object Array]"===Object.prototype.toString.call(t)||!1}function o(t,e){var n,r,s,a=[];for(s in t)t.hasOwnProperty(s)&&(r=t[s],n=e?i(t)?e+"[]":e+"["+s+"]":s,a.push("object"==typeof r?o(r,n):encodeURIComponent(n)+"="+encodeURIComponent(r)));return a.join("&")}function r(){return"xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx".replace(/[xy]/g,function(t){var e=Math.floor(16*Math.random()),n="x"===t?e:3&e|8;return n.toString(16)})}function s(t,e){return t=t||"",null!=e&&"object"==typeof e&&n(e)&&(t+=-1===t.indexOf("?")?"?":"",t+=-1!==t.indexOf("=")?"&":"",t+=o(e)),t}function a(){return t.navigator.userAgent}function c(){return"http:"===t.location.protocol}e.exports={isArray:i,generateUUID:r,stringify:o,createURLParams:s,getUserAgent:a,isHTTP:c}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],40:[function(t,e,n){"use strict";var i=t(32),o=t(35),r=t(33),s=t(39);e.exports={AJAXDriver:i,JSONPDriver:o,chooseDriver:r,util:s}},{32:32,33:33,35:35,39:39}],41:[function(t,e,n){arguments[4][15][0].apply(n,arguments)},{15:15}],42:[function(t,e,n){arguments[4][16][0].apply(n,arguments)},{16:16}],43:[function(t,e,n){arguments[4][17][0].apply(n,arguments)},{17:17}],44:[function(t,e,n){arguments[4][18][0].apply(n,arguments)},{18:18}],45:[function(t,e,n){arguments[4][19][0].apply(n,arguments)},{19:19}],46:[function(t,e,n){arguments[4][20][0].apply(n,arguments)},{20:20}],47:[function(t,e,n){arguments[4][21][0].apply(n,arguments)},{21:21,41:41}],48:[function(t,e,n){arguments[4][22][0].apply(n,arguments)},{22:22}],49:[function(t,e,n){arguments[4][23][0].apply(n,arguments)},{23:23,41:41,42:42,43:43,44:44,45:45,46:46,47:47,48:48}],50:[function(t,e,n){"use strict";function i(t,e){this.host=t||window,this.channel=e||null,this.handlers=[],o.addEventListener(this.host,"message",o.bind(this.receive,this))}var o=t(64);i.prototype.receive=function(t){ +var e,n,o,r;try{o=JSON.parse(t.data)}catch(s){return}for(r=o.type,n=new i.Message(this,t.source,o.data),e=0;e=0;n--)if(this.handlers[n].type===t&&this.handlers[n].handler===e)return this.handlers.splice(n,1)},i.prototype._namespaceEvent=function(t){return this.channel?["braintree",this.channel,t].join(":"):t},i.Message=function(t,e,n){this.bus=t,this.source=e,this.content=n},i.Message.prototype.reply=function(t,e){this.bus.send(this.source,t,e)},e.exports=i},{64:64}],51:[function(t,e,n){"use strict";function i(t,e){this.bus=t,this.target=e,this.handlers=[],this.bus.register("publish",o.bind(this._handleMessage,this))}var o=t(64);i.prototype._handleMessage=function(t){var e,n=t.content,i=this.handlers[n.channel];if("undefined"!=typeof i)for(e=0;e=0||s.push.call(this,t);return this._elem.className=this.toString(),this},i.prototype.remove=function(){var t,e,n;for(n=0;nt||s.splice.call(this,t,1);return this._elem.className=this.toString(),this},i.prototype.contains=function(t){return t+="",o(this,t)>=0},i.prototype.toggle=function(t,e){return t+="",e===!0?this.add(t):e===!1?this.remove(t):this[this.contains(t)?"remove":"add"](t)},i.prototype.toString=function(){return s.join.call(this," ")}},{75:75,76:76}],75:[function(t,e,n){e.exports=function(t,e){if(t.indexOf)return t.indexOf(e);for(var n=0;nr;r++)i(t[r],function(t){return t?void e(t):(o-=1,void(0===o&&e(null)))})}},{}],79:[function(t,e,n){arguments[4][19][0].apply(n,arguments)},{19:19}],80:[function(t,e,n){(function(t){"use strict";function n(t){if(("string"==typeof t||t instanceof String)&&(t=document.getElementById(t)),!(t instanceof HTMLFormElement))throw new TypeError("FormNapper requires an HTMLFormElement element or the id string of one.");this.htmlForm=t}n.prototype.hijack=function(e){this.submitHandler||(this.submitHandler=function(t){t.preventDefault?t.preventDefault():t.returnValue=!1,e(t)},null!=t.addEventListener?this.htmlForm.addEventListener("submit",this.submitHandler,!1):null!=t.attachEvent?this.htmlForm.attachEvent("onsubmit",this.submitHandler):this.htmlForm.onsubmit=this.submitHandler)},n.prototype.inject=function(t,e){var n=this.htmlForm.querySelector('input[name="'+t+'"]');return null==n&&(n=document.createElement("input"),n.type="hidden",n.name=t,this.htmlForm.appendChild(n)),n.value=e,n},n.prototype.submit=function(){HTMLFormElement.prototype.submit.call(this.htmlForm)},n.prototype.detach=function(){this.submitHandler&&(null!=t.removeEventListener?this.htmlForm.removeEventListener("submit",this.submitHandler,!1):null!=t.detachEvent?this.htmlForm.detachEvent("onsubmit",this.submitHandler):this.htmlForm.onsubmit=null,delete this.submitHandler)},e.exports=n}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],81:[function(e,n,i){"use strict";!function(e,o){"object"==typeof i&&"undefined"!=typeof n?n.exports=o():"function"==typeof t&&t.amd?t([],o):e.framebus=o()}(this,function(){function t(t){return null==t?!1:null==t.Window?!1:t.constructor!==t.Window?!1:(_.push(t),!0)}function e(t){var e,n={};for(e in v)v.hasOwnProperty(e)&&(n[e]=v[e]);return n._origin=t||"*",n}function n(t){var e,n,i=r(this);return s(t)?!1:s(i)?!1:(n=Array.prototype.slice.call(arguments,1),e=a(t,n,i),e===!1?!1:(d(g.top,e,i),!0))}function i(t,e){var n=r(this);return y(t,e,n)?!1:(E[n]=E[n]||{},E[n][t]=E[n][t]||[],E[n][t].push(e),!0)}function o(t,e){var n,i,o=r(this);if(y(t,e,o))return!1;if(i=E[o]&&E[o][t],!i)return!1;for(n=0;n=0;i--)o=_[i],o.closed===!0?_=_.slice(i,1):n!==o&&d(o.top,t,e)}function m(t,e){function n(o,r){t(o,r),v.target(e).unsubscribe(i,n)}var i=l();return v.target(e).subscribe(i,n),i}function y(t,e,n){return s(t)?!0:"function"!=typeof e?!0:s(n)?!0:!1}var g,v,_=[],E={},b="/*framebus*/";return u(),v={target:e,include:t,publish:n,pub:n,trigger:n,emit:n,subscribe:i,sub:i,on:i,unsubscribe:o,unsub:o,off:o}})},{}],82:[function(t,e,n){"use strict";var i=t(150),o=t(149),r=t(84),s=t(83);e.exports=function(t){var e=document.createElement("iframe"),n=i({},s,t);return n.style&&!o(n.style)&&(i(e.style,n.style),delete n.style),r(e,n),e.getAttribute("id")||(e.id=e.name),e}},{149:149,150:150,83:83,84:84}],83:[function(t,e,n){e.exports={src:"about:blank",frameBorder:0,allowtransparency:!0,scrolling:"no"}},{}],84:[function(t,e,n){e.exports=function(t,e){var n;for(var i in e)e.hasOwnProperty(i)&&(n=e[i],null==n?t.removeAttribute(i):t.setAttribute(i,n))}},{}],85:[function(t,e,n){function i(t){if(c(t)&&!a(t)&&!(t instanceof o)){if(t instanceof r)return t;if(h.call(t,"__chain__")&&h.call(t,"__wrapped__"))return u(t)}return new r(t)}var o=t(92),r=t(93),s=t(107),a=t(145),c=t(133),u=t(142),l=Object.prototype,h=l.hasOwnProperty;i.prototype=s.prototype,e.exports=i},{107:107,133:133,142:142,145:145,92:92,93:93}],86:[function(t,e,n){var i=t(124),o=i(Date,"now"),r=o||function(){return(new Date).getTime()};e.exports=r},{124:124}],87:[function(t,e,n){var i=t(120),o=t(138),r=t(91),s=1,a=32,c=r(function(t,e,n){var r=s;if(n.length){var u=o(n,c.placeholder);r|=a}return i(t,r,e,n,u)});c.placeholder={},e.exports=c},{120:120,138:138,91:91}],88:[function(t,e,n){var i=t(103),o=t(120),r=t(152),s=t(91),a=1,c=s(function(t,e){e=e.length?i(e):r(t);for(var n=-1,s=e.length;++n=t||t>e?c(v,d):g=setTimeout(u,t)}function l(){c(b,g)}function h(){if(p=arguments,m=r(),y=this,v=b&&(g||!w),E===!1)var n=w&&!g;else{d||w||(_=m);var i=E-(m-_),o=0>=i||i>E;o?(d&&(d=clearTimeout(d)),_=m,f=t.apply(y,p)):d||(d=setTimeout(l,i))}return o&&g?g=clearTimeout(g):g||e===E||(g=setTimeout(u,e)),n&&(o=!0,f=t.apply(y,p)),!o||g||d||(p=y=void 0),f}var p,d,f,m,y,g,v,_=0,E=!1,b=!0;if("function"!=typeof t)throw new TypeError(s);if(e=0>e?0:+e||0,n===!0){var w=!0;b=!1}else o(n)&&(w=!!n.leading,E="maxWait"in n&&a(+n.maxWait||0,e),b="trailing"in n?!!n.trailing:b);return h.cancel=i,h}var o=t(148),r=t(86),s="Expected a function",a=Math.max;e.exports=i},{148:148,86:86}],90:[function(t,e,n){var i=t(102),o=t(91),r=o(function(t,e){return i(t,1,e)});e.exports=r},{102:102,91:91}],91:[function(t,e,n){function i(t,e){if("function"!=typeof t)throw new TypeError(o);return e=r(void 0===e?t.length-1:+e||0,0),function(){for(var n=arguments,i=-1,o=r(n.length-e,0),s=Array(o);++i2?n[s-2]:void 0,c=s>2?n[2]:void 0,u=s>1?n[s-1]:void 0;for("function"==typeof a?(a=o(a,u,5),s-=2):(a="function"==typeof u?u:void 0,s-=a?1:0),c&&r(n[0],n[1],c)&&(a=3>s?void 0:a,s=1);++if){var k=T?o(T):void 0,B=E(S-f,0),j=D?F:void 0,V=D?void 0:F,z=D?y:void 0,H=D?void 0:y;e|=D?g:v,e&=~(D?v:g),M||(e&=~(p|d));var Y=[t,e,b,z,j,H,V,k,I,B],G=i.apply(void 0,Y);return c(t)&&h(G,Y),G.placeholder=_,G}}var W=O?b:this,q=R?W[t]:t;return T&&(y=u(y,T)),P&&I-1&&t%1==0&&e>t}var o=/^\d+$/,r=9007199254740991;e.exports=i},{}],130:[function(t,e,n){function i(t,e,n){if(!s(n))return!1;var i=typeof e;if("number"==i?o(n)&&r(e,n.length):"string"==i&&e in n){var a=n[e];return t===t?t===a:a!==a}return!1}var o=t(128),r=t(129),s=t(148);e.exports=i},{128:128,129:129,148:148}],131:[function(t,e,n){function i(t){var e=s(t),n=a[e];if("function"!=typeof n||!(e in o.prototype))return!1;if(t===n)return!0;var i=r(n);return!!i&&t===i[0]}var o=t(92),r=t(121),s=t(122),a=t(85);e.exports=i},{121:121,122:122,85:85,92:92}],132:[function(t,e,n){function i(t){return"number"==typeof t&&t>-1&&t%1==0&&o>=t}var o=9007199254740991;e.exports=i},{}],133:[function(t,e,n){function i(t){return!!t&&"object"==typeof t}e.exports=i},{}],134:[function(t,e,n){function i(t,e){var n=t[1],i=e[1],m=n|i,y=h>m,g=i==h&&n==l||i==h&&n==p&&t[7].length<=e[8]||i==(h|p)&&n==l;if(!y&&!g)return t;i&c&&(t[2]=e[2],m|=n&c?0:u);var v=e[3];if(v){var _=t[3];t[3]=_?r(_,v,e[4]):o(v),t[4]=_?a(t[3],d):o(e[4])}return v=e[5],v&&(_=t[5],t[5]=_?s(_,v,e[6]):o(v),t[6]=_?a(t[5],d):o(e[6])),v=e[7],v&&(t[7]=o(v)),i&h&&(t[8]=null==t[8]?e[8]:f(t[8],e[8])),null==t[9]&&(t[9]=e[9]),t[0]=e[0],t[1]=m,t}var o=t(94),r=t(112),s=t(113),a=t(138),c=1,u=4,l=8,h=128,p=256,d="__lodash_placeholder__",f=Math.min;e.exports=i},{112:112,113:113,138:138,94:94}],135:[function(t,e,n){(function(n){var i=t(124),o=i(n,"WeakMap"),r=o&&new o;e.exports=r}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{124:124}],136:[function(t,e,n){var i={};e.exports=i},{}],137:[function(t,e,n){function i(t,e){for(var n=t.length,i=s(e.length,n),a=o(t);i--;){var c=e[i];t[i]=r(c,n)?a[c]:void 0}return t}var o=t(94),r=t(129),s=Math.min;e.exports=i},{129:129,94:94}],138:[function(t,e,n){function i(t,e){for(var n=-1,i=t.length,r=-1,s=[];++n0){if(++t>=r)return n}else t=0;return i(n,a)}}();e.exports=a},{109:109,86:86}],140:[function(t,e,n){function i(t){for(var e=c(t),n=e.length,i=n&&t.length,u=!!i&&a(i)&&(r(t)||o(t)),h=-1,p=[];++h0;++i8}function o(){var t=a.androidVersion();return null==t?!1:/^5/.test(t)}function r(){return!(o()||s())}function s(){var t=a.iOSSafariVersion();return null==t?!1:/^8\.0/.test(t)||/^8\.1$/.test(t)}var a=t(177);e.exports={isSupportedBrowser:i,shouldCloseFromParent:r,shouldDisplayIOSClose:s,shouldDisplayLollipopClose:o}},{177:177}],182:[function(t,e,n){"use strict";function i(t){var e=document.createElement("button");return t=t||{},e.id=t.id||"coinbase-button",e.style.backgroundColor=t.backgroundColor||"#EEE",e.style.color=t.color||"#4597C3",e.style.border=t.border||"0",e.style.borderRadius=t.borderRadius||"6px",e.style.padding=t.padding||"12px",e.innerHTML=t.innerHTML||"coinbase",e}e.exports={create:i}},{}],183:[function(t,e,n){"use strict";var i=t(185),o=t(182),r=t(184);e.exports={createButton:o.create,createPopup:i.create,createFrame:r.create}},{182:182,184:184,185:185}],184:[function(t,e,n){"use strict";function i(){return r({name:o.FRAME_NAME,height:"70px",width:"100%",style:{padding:0,margin:0,border:0,outline:"none"}})}var o=t(180),r=t(82);e.exports={create:i}},{180:180,82:82}],185:[function(t,e,n){(function(n){"use strict";function i(t){var e,n=[];for(e in t)t.hasOwnProperty(e)&&n.push([e,t[e]].join("="));return n.join(",")}function o(){var t=580,e=810;return i({width:t,height:e,left:(screen.width-t)/2,top:(screen.height-e)/4})}function r(t){return n.open(t,s.POPUP_NAME,o())}var s=t(180);e.exports={create:r}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{180:180}],186:[function(t,e,n){"use strict";function i(){return"version="+r.VERSION}function o(t,e){var n,o=t+"/oauth/authorize?response_type=code",r=e.redirectUrl+"?"+i();if(o+="&redirect_uri="+encodeURIComponent(r),o+="&client_id="+e.clientId,e.scopes&&(o+="&scope="+encodeURIComponent(e.scopes)),e.meta)for(n in e.meta)e.meta.hasOwnProperty(n)&&(o+="&meta["+encodeURIComponent(n)+"]="+encodeURIComponent(e.meta[n]));return o}var r=t(180);e.exports={compose:o,getQueryString:i}},{180:180}],187:[function(t,e,n){"use strict";function i(){return new o}function o(){this.sessionId=r(),this._beaconId=s(this.sessionId),this._parameterBlock=a(this.sessionId,this._beaconId),this._thirdPartyBlock=c()}function r(){var t,e="";for(t=0;32>t;t++)e+=Math.floor(16*Math.random()).toString(16);return e}function s(t){var e=(new Date).getTime()/1e3;return"https://b.stats.paypal.com/counter.cgi?i=127.0.0.1&p="+t+"&t="+e+"&a=14"}function a(t,e){var n=document.body.appendChild(document.createElement("script"));return n.type="application/json",n.setAttribute("fncls","fnparams-dede7cc5-15fd-4c75-a9f4-36c430ee3a99"),n.text=JSON.stringify({f:t,s:"BRAINTREE_SIGNIN",b:e}),n}function c(){function t(){n._l()}var e,n,i="https://www.paypalobjects.com/webstatic/r/fb/",o=document.createElement("iframe");o.src="about:blank",o.title="",o.role="presentation",(o.frameElement||o).style.cssText="width: 0; height: 0; border: 0",document.body.appendChild(o);try{n=o.contentWindow.document}catch(r){e=document.domain,o.src='javascript:var d=document.open();d.domain="'+e+'";void(0);',n=o.contentWindow.document}return n.open()._l=function(){var t=this.createElement("script");e&&(this.domain=e),t.id="js-iframe-async",t.src=i+"fb-all-prod.pp.min.js",this.body.appendChild(t)},o.addEventListener?o.addEventListener("load",t,!1):o.attachEvent?o.attachEvent("onload",t):n.write(''),n.close(),o}o.prototype.teardown=function(){this._thirdPartyBlock.parentNode.removeChild(this._thirdPartyBlock)},e.exports={setup:i}},{}],188:[function(t,e,n){"use strict";function i(t){function e(){var t;for(t=0;t'}catch(i){}},10),n)},i.prototype._initializeEnvironment=function(t){var e=a[t.environment];if(null==e)throw new Error(t.environment+" is not a valid environment for kount.environment");return{url:e,name:t.environment,id:null==t.merchantId?s:t.merchantId}},e.exports={setup:n,Kount:i,environmentUrls:a}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],190:[function(t,e,n){"use strict";function i(t){this.apiClient=t}var o=["unlockCreditCard"];i.prototype.attach=function(t){function e(e){t.define(e,function(){n.apiClient[e].apply(n.apiClient,arguments)})}var n=this,i=0,r=o.length;for(i;r>i;i++)e(o[i])},e.exports=i},{}],191:[function(t,e,n){(function(n){"use strict";function i(t,e){var n=window.getComputedStyle?getComputedStyle(t):t.currentStyle;return n[e]}function o(){return{html:{height:a.style.height||"",overflow:i(a,"overflow"),position:i(a,"position")},body:{height:c.style.height||"",overflow:i(c,"overflow")}}}function r(){var t=/Android|iPhone|iPod|iPad/i.test(window.navigator.userAgent);return t}function s(t){var e,i,o,r=this;this.configuration=t,this.destructor=new h,this.container=null,this.merchantFormManager=null,this.configurationRequests=[],this.braintreeApiClient=new u.Client(this.configuration),this.braintreeBus=new l({merchantUrl:n.location.href,channel:this.configuration.channel}),this.bus=new p.MessageBus(this.configuration.root,this.configuration.channel),this.rpcServer=new p.RPCServer(this.bus),this.apiProxyServer=new y(this.braintreeApiClient),this.apiProxyServer.attach(this.rpcServer),e=this.configuration.inlineFramePath||this.configuration.gatewayConfiguration.assetsUrl+"/dropin/"+E+"/inline-frame.html",i=this.configuration.modalFramePath||this.configuration.gatewayConfiguration.assetsUrl+"/dropin/"+E+"/modal-frame.html",a=document.documentElement,c=document.body,this.frames={inline:this._createFrame(e,_.INLINE_FRAME_NAME),modal:this._createFrame(i,_.MODAL_FRAME_NAME)},this.container=f(this.configuration.merchantConfiguration.container,"Unable to find valid container."),o=f(this.configuration.merchantConfiguration.form||this._findClosest(this.container,"form")),this.merchantFormManager=new g({form:o,frames:this.frames,onSubmit:this.configuration.merchantConfiguration.paymentMethodNonceReceived,apiClient:this.braintreeApiClient}).initialize(),this.destructor.registerFunctionForTeardown(function(){r.merchantFormManager.teardown()}),this.configuration.gatewayConfiguration.paypalEnabled&&this._configurePayPal(),this.braintreeApiClient.sendAnalyticsEvents("dropin.web.initialized")}var a,c,u=t(14),l=t(158),h=t(77),p=t(55),d=t(73),f=d.normalizeElement,m=t(87),y=t(190),g=t(194),v=t(193),_=t(196),E="2.23.0",b=t(213);s.prototype.initialize=function(){var t,e=this;this._initializeModal(),this.braintreeBus.emit(l.events.ASYNC_DEPENDENCY_INITIALIZING),this.container.appendChild(this.frames.inline.element),c.appendChild(this.frames.modal.element),this.destructor.registerFunctionForTeardown(function(t){e._hideModal(function(){e.container.removeChild(e.frames.inline.element),c.removeChild(e.frames.modal.element),t()})}),this.rpcServer.define("receiveSharedCustomerIdentifier",function(n){for(e.braintreeApiClient.attrs.sharedCustomerIdentifier=n,e.braintreeApiClient.attrs.sharedCustomerIdentifierType="browser_session_cookie_store",t=0;t0&&n(o,e);return e}function i(t){try{t.attributes.removeNamedItem("name")}catch(e){}}function o(t){n(t)}function r(t){return t.nodeType===s&&t.attributes["data-braintree-name"]}var s=t.Node?t.Node.ELEMENT_NODE:1;e.exports={extractValues:n,scrubAllAttributes:o,scrubAttributes:i,isBraintreeNode:r}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],199:[function(t,e,n){(function(n){"use strict";function i(t,e){var i=e.merchantConfiguration,o="object"==typeof i.paymentMethodNonceInputField,r=this;this.destructor=new a,this.apiClient=t,this.isCreditCardForm=i.useCreditCard!==!1,this.htmlForm=document.getElementById(i.id),this.paymentMethodNonceInput=l(i.paymentMethodNonceInputField),this.htmlForm.appendChild(this.paymentMethodNonceInput),this.destructor.registerFunctionForTeardown(function(){o?r.paymentMethodNonceInput.value="":r.htmlForm.removeChild(r.paymentMethodNonceInput)}),this.model=new u,this.bus=new c({merchantUrl:n.location.href,channel:e.channel}),this.setEvents(),this.destructor.registerFunctionForTeardown(function(){r.bus.teardown()})}var o=t(87),r=t(73),s=t(198),a=t(77),c=t(158),u=t(201),l=t(200),h={message:"Unable to process payments at this time",type:"IMMEDIATE"};i.prototype.setEvents=function(){var t=this;this.onSubmitHandler=o(this.handleSubmit,this),this.onExternalNonceReceived=o(this.onExternalNonceReceived,this),this.clearExternalNonce=o(this.clearExternalNonce,this),r.addEventListener(this.htmlForm,"submit",this.onSubmitHandler),this.destructor.registerFunctionForTeardown(function(){r.removeEventListener(t.htmlForm,"submit",t.onSubmitHandler)}),this.bus.on(c.events.PAYMENT_METHOD_GENERATED,this.onExternalNonceReceived),this.bus.on(c.events.PAYMENT_METHOD_CANCELLED,this.clearExternalNonce)},i.prototype.handleSubmit=function(t){var e,n=this;return t.preventDefault?t.preventDefault():t.returnValue=!1,this.isCreditCardForm?(e=this.model.get("type"),e&&"CreditCard"!==e?(s.scrubAllAttributes(this.htmlForm),void this.onNonceReceived(null,this.model.attributes)):void this.apiClient.tokenizeCard(s.extractValues(this.htmlForm),function(t,e,i){t?n.onNonceReceived(h,null):(n.model.set({nonce:e,type:i.type,details:i.details}),n.onNonceReceived(null,n.model.attributes))})):void this.onNonceReceived(null,this.model.attributes)},i.prototype.writeNonceToDOM=function(){this.paymentMethodNonceInput.value=this.model.get("nonce")},i.prototype.onExternalNonceReceived=function(t){this.model.set(t),this.writeNonceToDOM()},i.prototype.clearExternalNonce=function(){this.model.reset()},i.prototype.onNonceReceived=function(t){var e=this.htmlForm;return t?void this.bus.emit(c.events.ERROR,h):(r.removeEventListener(e,"submit",this.onSubmitHandler),this.writeNonceToDOM(),void(e.submit&&("function"==typeof e.submit||e.submit.call)?e.submit():setTimeout(function(){e.querySelector('[type="submit"]').click()},1)))},i.prototype.teardown=function(){this.destructor.teardown()},e.exports=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{158:158,198:198,200:200,201:201,73:73,77:77,87:87}],200:[function(t,e,n){"use strict";e.exports=function(t){var e,n;return"object"==typeof t?t:(e="payment_method_nonce","string"==typeof t&&(e=t),n=document.createElement("input"),n.name=e,n.type="hidden",n)}},{}],201:[function(t,e,n){"use strict";function i(){this.reset()}i.prototype.get=function(t){return this.attributes[t]},i.prototype.set=function(t){this.attributes=t||{}},i.prototype.reset=function(){this.attributes={}},e.exports=i},{}],202:[function(t,e,n){"use strict";e.exports=function(t){var e,n,i=t.getElementsByTagName("*"),o={};for(e=0;en;n++)t.toLowerCase()===e[n].toLowerCase()&&(o=!0);return o}function r(t){return o(t,p.HERMES_SUPPORTED_CURRENCIES)}function s(t){return o(d(t).split("_")[1],p.HERMES_SUPPORTED_COUNTRIES)}function a(t){return t=parseFloat(t),"number"==typeof t&&!isNaN(t)&&t>=0}function c(t){return t.gatewayConfiguration.paypal.unvettedMerchant&&(!f.isHermesConfiguration(t)||!t.gatewayConfiguration.paypal.payeeEmail)}function u(t){return t.gatewayConfiguration.paypal.allowHttp?!0:h.isPopupSupported()?!0:"isMerchantPageHttps"in t?t.isMerchantPageHttps:y.isBrowserHttps()}var l=t(210),h=t(230),p=t(222),d=t(224),f=t(232),m="2.23.0",y=t(73);e.exports={create:i,VERSION:m}},{210:210,222:222,224:224,230:230,232:232,73:73}],212:[function(t,e,n){e.exports={en_us:{cancel:"Cancel",overlay_text:"Don't see the secure PayPal browser? We'll help you re-launch the window to complete your purchase.",continue_link:"Continue"},en_uk:{cancel:"Cancel",overlay_text:"Don't see the secure PayPal browser? We'll help you re-launch the window to complete your purchase.",continue_link:"Continue"},en_au:{cancel:"Cancel",overlay_text:"Don't see the secure PayPal browser? We'll help you re-launch the window to complete your purchase.",continue_link:"Continue"},sv_se:{cancel:"Avbryt",overlay_text:"Ser du inte den säkra PayPal-webbläsaren? Vi hjälper dig att starta om fönstret för att slutföra köpet.",continue_link:"Fortsätt"},de_de:{cancel:"Abbrechen",overlay_text:"Sie sehen das sichere Browserfenster von PayPal nicht? Das Fenster wird neu geöffnet, damit Sie Ihren Einkauf abschließen können.",continue_link:"Weiter"},fr_fr:{cancel:"Annuler",overlay_text:"Vous ne voyez pas le navigateur sécurisé PayPal ? Nous allons vous aider à relancer la fenêtre pour effectuer votre achat.",continue_link:"Continuer"},en_ca:{cancel:"Cancel",overlay_text:"Don't see the secure PayPal browser? We'll help you re-launch the window to complete your purchase.",continue_link:"Continue"},fr_ca:{cancel:"Annuler",overlay_text:"Vous ne voyez pas le navigateur sécurisé de PayPal ? Nous vous aiderons à relancer la fenêtre afin d'effectuer votre achat.",continue_link:"Continuer"},es_es:{cancel:"Cancelar",overlay_text:"¿No ves el símbolo de navegación segura de PayPal? Te ayudaremos a abrir de nuevo la ventana para completar la compra.",continue_link:"Continuar"},es_xc:{cancel:"Cancelar",overlay_text:"¿No ve el símbolo de navegación segura de PayPal? Abriremos la ventana nuevamente para que pueda completar su compra.",continue_link:"Continuar"},fr_xc:{cancel:"Annuler",overlay_text:"Le navigateur sécurisé de PayPal n'apparaît pas ? Nous allons vous aider à rouvrir la fenêtre pour finaliser votre achat.",continue_link:"Continuer"},nl_nl:{cancel:"Annuleren",overlay_text:"Ziet u de beveiligde PayPal-browser niet? We helpen u het venster opnieuw te openen zodat u uw aankoop kunt voltooien.",continue_link:"Doorgaan"},pt_pt:{cancel:"Cancelar",overlay_text:"Não está a ver a indicação de ligação segura PayPal no browser? Vamos então voltar a abrir a janela para concluir a sua compra.",continue_link:"Continuar"},ru_ru:{cancel:"Отмена",overlay_text:"Не отображается безопасная страница PayPal в браузере? Мы поможем вам повторно загрузить окно, чтобы завершить покупку.",continue_link:"Продолжить"},da_dk:{cancel:"Annuller",overlay_text:"Kan du ikke se PayPals sikre browser? Vi hjælper dig med at åbne vinduet igen, så du kan betale.",continue_link:"Fortsæt"},it_it:{cancel:"Annulla",overlay_text:"Non vedi il browser sicuro di PayPal? Ti aiuteremo a riavviare la pagina per completare l'acquisto.",continue_link:"Continua"},no_no:{cancel:"Avbryt",overlay_text:"Ser du ikke den sikre PayPal-nettleseren? Vi hjelper deg med å åpne vinduet på nytt så du kan fullføre kjøpet.",continue_link:"Fortsett"},pl_pl:{cancel:"Anuluj",overlay_text:"Nie widzisz bezpiecznej przeglądarki PayPal? Pomożemy Ci ponownie uruchomić to okno w celu dokonania zakupu.",continue_link:"Kontynuuj"},tr_tr:{cancel:"İptal",overlay_text:"Güvenli PayPal tarayıcısını görmüyor musunuz? Alışverişinizi tamamlamak için pencereyi yeniden başlatmanıza yardımcı olacağız.",continue_link:"Devam"},zh_xc:{cancel:"取消",overlay_text:"没有看到安全的PayPal浏览器?我们将帮助您重启窗口以完成购物。",continue_link:"继续"},en_hk:{cancel:"Cancel",overlay_text:"Don't see the secure PayPal browser? We'll help you re-launch the window to complete your purchase.",continue_link:"Continue"},zh_hk:{cancel:"取消",overlay_text:"看不到安全的 PayPal 瀏覽器視窗?我們會助你重新啟動視窗,以完成購物。",continue_link:"繼續"},en_my:{cancel:"Cancel",overlay_text:"Don't see the secure PayPal browser? We'll help you re-launch the window to complete your purchase.",continue_link:"Continue"},en_nz:{cancel:"Cancel",overlay_text:"Don't see the secure PayPal browser? We'll help you re-launch the window to complete your purchase.",continue_link:"Continue"},en_sg:{cancel:"Cancel",overlay_text:"Don't see the secure PayPal browser? We'll help you re-launch the window to complete your purchase.",continue_link:"Continue"}}},{}],213:[function(t,e,n){(function(n){"use strict";function i(t){var e=this;this.options=t||{},this.destructor=new a,this.bus=new c({merchantUrl:n.location.href,channel:this.options.channel}),this.destructor.registerFunctionForTeardown(function(){e.bus.teardown()}),this._initialize()}var o=t(87),r=t(146),s=t(230),a=t(77),c=t(158),u=t(222),l=t(221),h=t(218);i.prototype._initialize=function(){var t=this;this.app=s.isPopupSupported()?new l({src:this._buildUrl(),isHermes:this.options.isHermes,channel:this.options.channel}):new h({src:this._buildUrl(),isDropin:this.options.isDropin,isHermes:this.options.isHermes,insertFrameFunction:this.options.insertFrameFunction,channel:this.options.channel}),this.destructor.registerFunctionForTeardown(function(){t.app.teardown()}),this.bus.on(u.events.CLOSE_APP,o(this.close,this)),this.bus.on(u.events.FOCUS_APP,o(this.focus,this)),this.bus.on(c.events.PAYMENT_METHOD_GENERATED,o(this._handlePaymentMethodGenerated,this)),this.bus.on(c.events.UI_POPUP_FORCE_CLOSE,o(this._handleForceClose,this))},i.prototype._buildUrl=function(){var t=this.options.paypalAssetsUrl;return t+="/pwpp/",t+=u.VERSION,t+="/html/braintree-frame.html",t+="#"+this.options.channel},i.prototype.open=function(){this.focus(),this.app.open(),this.poll()},i.prototype._handleForceClose=function(t){t.target===u.PAYPAL_INTEGRATION_NAME&&this.close()},i.prototype.close=function(){this.app.close()},i.prototype.focus=function(){r(this.app.focus)&&this.app.focus()},i.prototype.isClosed=function(){return this.app.isClosed()},i.prototype.stopPolling=function(){clearInterval(this.pollId)},i.prototype.poll=function(){var t=this;this.pollId=setInterval(function(){t.isClosed()&&t._handleClosed()},100)},i.prototype._handlePaymentMethodGenerated=function(t){t.type===u.NONCE_TYPE&&this.close()},i.prototype._handleClosed=function(){this.stopPolling(),this.close(),s.isPopupSupported()&&(this.app.el=null)},i.prototype.teardown=function(){this.destructor.teardown()},e.exports=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{146:146,158:158,218:218,221:221,222:222,230:230,77:77,87:87}],214:[function(t,e,n){"use strict";function i(t){this.options=t||{},this.el=r({src:this._buildUrl(),name:o.BRIDGE_FRAME_NAME,height:1,width:1,style:{position:"static",top:0,left:0,bottom:0,padding:0,margin:0,border:0,outline:"none",background:"transparent"}}),this.options.container.appendChild(this.el)}var o=t(222),r=t(82);i.prototype._buildUrl=function(){var t=this.options.paypalAssetsUrl;return t+="/pwpp/",t+=o.VERSION,t+="/html/bridge-frame.html",t+="#"+this.options.channel},i.prototype.teardown=function(){this.options.container.removeChild(this.el)},e.exports=i},{222:222,82:82}],215:[function(t,e,n){(function(n){"use strict";function i(t){var e;this.options=t||{},this.wrapper=this.options.container||document.body,this.destructor=new s,this.bus=new a({merchantUrl:n.location.href,channel:t.channel}),e=h(this.options.locale,p),this.translation=e.translation,this._initialize()}var o=t(73),r=t(87),s=t(77),a=t(158),c=t(232),u=t(231),l=t(222),h=t(225),p=t(212);i.prototype._initialize=function(){var t=this,e=r(this._handleClickLogout,this);this._createViewContainer(),this._createPayPalName(),this._createEmailNode(),this._createLogoutNode(),o.addEventListener(this.logoutNode,"click",e),this.destructor.registerFunctionForTeardown(function(){o.removeEventListener(t.logoutNode,"click",e)}),this.bus.on(a.events.PAYMENT_METHOD_GENERATED,r(this._handlePaymentMethodGenerated,this)),this.bus.on(a.events.PAYMENT_METHOD_CANCELLED,r(this._handlePaymentMethodCancelled,this))},i.prototype._createViewContainer=function(){var t=["display: none","max-width: 500px","overflow: hidden","padding: 16px","background-image: url("+this.options.paypalAssetsUrl+"/pwpp/"+l.VERSION+"/images/paypal-small.png)","background-image: url("+this.options.paypalAssetsUrl+"/pwpp/"+l.VERSION+"/images/paypal-small.svg), none","background-position: 20px 50%","background-repeat: no-repeat","background-size: 13px 15px","border-top: 1px solid #d1d4d6","border-bottom: 1px solid #d1d4d6"].join(";");this.container=document.createElement("div"),this.container.id="braintree-paypal-loggedin",this.container.style.cssText=t,this.wrapper.appendChild(this.container)},i.prototype._createPayPalName=function(){var t=["color: #283036","font-size: 13px","font-weight: 800",'font-family: "Helvetica Neue", Helvetica, Arial, sans-serif',"margin-left: 36px","-webkit-font-smoothing: antialiased","-moz-font-smoothing: antialiased","-ms-font-smoothing: antialiased","font-smoothing: antialiased"].join(";");return this.payPalName=document.createElement("span"),this.payPalName.id="bt-pp-name",this.payPalName.innerHTML="PayPal",this.payPalName.style.cssText=t,this.container.appendChild(this.payPalName)},i.prototype._createEmailNode=function(){var t=["color: #6e787f","font-size: 13px",'font-family: "Helvetica Neue", Helvetica, Arial, sans-serif',"margin-left: 5px","-webkit-font-smoothing: antialiased","-moz-font-smoothing: antialiased","-ms-font-smoothing: antialiased","font-smoothing: antialiased"].join(";");this.emailNode=document.createElement("span"),this.emailNode.id="bt-pp-email",this.emailNode.style.cssText=t,this.container.appendChild(this.emailNode)},i.prototype._createLogoutNode=function(){var t=["color: #3d95ce","font-size: 11px",'font-family: "Helvetica Neue", Helvetica, Arial, sans-serif',"line-height: 20px","margin: 0 0 0 25px","padding: 0","background-color: transparent","border: 0","cursor: pointer","text-decoration: underline","float: right","-webkit-font-smoothing: antialiased","-moz-font-smoothing: antialiased","-ms-font-smoothing: antialiased","font-smoothing: antialiased"].join(";"); + +this.logoutNode=document.createElement("button"),this.logoutNode.id="bt-pp-cancel",this.logoutNode.innerHTML=this.translation.cancel,this.logoutNode.setAttribute("type","button"),this.logoutNode.style.cssText=t,this.container.appendChild(this.logoutNode)},i.prototype.show=function(t){this.container.style.display="block",u.setTextContent(this.emailNode,t)},i.prototype.hide=function(){this.container.style.display="none"},i.prototype._handleClickLogout=function(t){c.preventDefault(t),this.bus.emit(a.events.PAYMENT_METHOD_CANCELLED,{source:l.PAYPAL_INTEGRATION_NAME})},i.prototype._handlePaymentMethodGenerated=function(t){var e;t.type===l.NONCE_TYPE&&(e=t&&t.details&&t.details.email?t.details.email:"",this.show(e))},i.prototype._handlePaymentMethodCancelled=function(t){t.source===l.PAYPAL_INTEGRATION_NAME&&this.hide()},i.prototype.teardown=function(){this.wrapper.removeChild(this.container),this.destructor.teardown(),this.bus.teardown()},e.exports=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{158:158,212:212,222:222,225:225,231:231,232:232,73:73,77:77,87:87}],216:[function(t,e,n){(function(n){"use strict";function i(t){this.options=t,this.wrapper=this.options.container||document.body,this.bus=new r({merchantUrl:n.location.href,channel:t.channel}),this._initialize()}var o=t(87),r=t(158),s=t(222),a=t(224);i.prototype._initialize=function(){this.createViewContainer(),this.options.enablePayPalButton?this.createCheckoutWithPayPalButton():this.createPayWithPayPalButton(),this.bus.on(r.events.PAYMENT_METHOD_GENERATED,o(this._handlePaymentMethodGenerated,this)),this.bus.on(r.events.PAYMENT_METHOD_CANCELLED,o(this._handlePaymentMethodCancelled,this))},i.prototype.createViewContainer=function(){this.container=document.createElement("div"),this.container.id="braintree-paypal-loggedout",this.wrapper.appendChild(this.container),this.loginNode=this.container},i.prototype.createPayWithPayPalButton=function(){var t=document.createElement("a"),e=new Image,n=["max-width: 100%","display: block","width: 100%","height: 100%","outline: none","border: 0"].join(";"),i=["display: block","width: 115px","height: 44px","overflow: hidden"].join(";");t.id="braintree-paypal-button",t.href="#",t.style.cssText=i,e.src=this.options.paypalAssetsUrl+"/pwpp/"+s.VERSION+"/images/pay-with-paypal.png",e.setAttribute("alt","Pay with PayPal"),e.style.cssText=n,t.appendChild(e),this.container.appendChild(t)},i.prototype.createCheckoutWithPayPalButton=function(){var t,e=document.createElement("script"),n={"data-merchant":"merchant-id","data-button":"checkout","data-type":"button","data-color":"blue","data-lc":a(this.options.locale)};e.src="//www.paypalobjects.com/api/button.js",e.async=!0;for(t in n)n.hasOwnProperty(t)&&e.setAttribute(t,n[t]);this.container.appendChild(e)},i.prototype.show=function(){this.container.style.display="block"},i.prototype.hide=function(){this.container.style.display="none"},i.prototype._handlePaymentMethodGenerated=function(t){t.type===s.NONCE_TYPE&&this.hide()},i.prototype._handlePaymentMethodCancelled=function(t){t.source===s.PAYPAL_INTEGRATION_NAME&&this.show()},i.prototype.teardown=function(){this.wrapper.removeChild(this.container),this.bus.teardown()},e.exports=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{158:158,222:222,224:224,87:87}],217:[function(t,e,n){(function(n){"use strict";function i(t){this.options=t,this.bus=new s({merchantUrl:n.location.href,channel:t.channel}),this.bus.on(s.events.UI_MODAL_DID_OPEN,a(this.lockWindowSize,this)),this.bus.on(s.events.UI_MODAL_DID_CLOSE,a(this.unlockWindowSize,this))}function o(t){var e=window.getComputedStyle?getComputedStyle(t):t.currentStyle;return{overflow:e.overflow||"",height:t.style.height||""}}function r(){return{html:{node:document.documentElement,styles:o(document.documentElement)},body:{node:document.body,styles:o(document.body)}}}var s=t(158),a=t(87),c=t(222);i.prototype.lockWindowSize=function(){this.defaultStyles=r(),document.documentElement.style.height="100%",document.documentElement.style.overflow="hidden",document.body.style.height="100%",document.body.style.overflow="hidden"},i.prototype.unlockWindowSize=function(){this.defaultStyles&&(document.documentElement.style.height=this.defaultStyles.html.styles.height,document.documentElement.style.overflow=this.defaultStyles.html.styles.overflow,document.body.style.height=this.defaultStyles.body.styles.height,document.body.style.overflow=this.defaultStyles.body.styles.overflow,delete this.defaultStyles)},i.prototype._handleUIModalDidOpen=function(t){t.source===c.PAYPAL_INTEGRATION_NAME&&this.lockWindowSize()},i.prototype._handleUIModalDidClose=function(t){t.source===c.PAYPAL_INTEGRATION_NAME&&this.unlockWindowSize()},i.prototype.teardown=function(){this.unlockWindowSize(),this.bus.teardown()},e.exports=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{158:158,222:222,87:87}],218:[function(t,e,n){(function(n){"use strict";function i(t){this.options=t||{},this.container=document.body,this.bus=new u({merchantUrl:n.location.href,channel:t.channel}),this.options.isDropin?this._open=this._openHeadless:this._attachBusEvents(),this._initialize()}var o=t(87),r=t(150),s=t(146),a=t(228),c=t(222),u=t(158),l=t(82),h={position:"fixed",top:0,left:0,bottom:0,padding:0,margin:0,border:0,outline:"none",zIndex:20001,background:"#FFFFFF"};i.prototype._attachBusEvents=function(){this.bus.on(c.events.OPEN_MODAL,o(this.open,this))},i.prototype._initialize=function(){var t=this.options.isHermes?c.HERMES_FRAME_NAME:c.FRAME_NAME;a.isIos()?(this.el=document.createElement("div"),this.el.className=c.FRAME_CONTAINER_NAME,r(this.el.style,h,{height:this.options.height||"100%",width:this.options.width||"100%",overflow:"scroll",webkitOverflowScrolling:"touch"}),this.el.appendChild(l({src:this.options.src,name:t,scrolling:"yes",height:"100%",width:"100%",style:{position:"absolute",top:0,left:0,border:0,outline:"none",background:"#FFFFFF"}}))):this.el=l({src:this.options.src,name:t,scrolling:"yes",height:this.options.height||"100%",width:this.options.width||"100%",style:h})},i.prototype.isClosed=function(){return!this.container.contains(this.el)},i.prototype._openHeadless=function(){this.bus.emit(c.events.OPEN_MODAL)},i.prototype._open=function(){s(this.options.insertFrameFunction)?this.options.insertFrameFunction(this.el.src):this.container.appendChild(this.el),this.bus.emit(u.events.UI_MODAL_DID_OPEN,{source:c.PAYPAL_INTEGRATION_NAME})},i.prototype.open=function(){this.isClosed()&&this._open()},i.prototype.close=function(){this.isClosed()||(this.container.removeChild(this.el),this.bus.emit(u.events.UI_MODAL_DID_CLOSE,{source:c.PAYPAL_INTEGRATION_NAME}))},i.prototype.teardown=function(){this.close(),this.bus.teardown()},e.exports=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{146:146,150:150,158:158,222:222,228:228,82:82,87:87}],219:[function(t,e,n){(function(n){"use strict";function i(t){var e;this.options=t,this.spriteSrc=this.options.paypalAssetsUrl+"/pwpp/"+u.VERSION+"/images/pp_overlay_sprite.png",this.bus=new c({merchantUrl:n.location.href,channel:t.channel}),this.destructor=new a,e=l(this.options.locale,h),this.translation=e.translation,this._create(),this._setupEvents(),this.bus.on(c.events.UI_POPUP_DID_OPEN,r(this._handleUIPopupDidOpen,this)),this.bus.on(c.events.UI_POPUP_DID_CLOSE,r(this._handleUIPopupDidClose,this))}var o=t(73),r=t(87),s=t(146),a=t(77),c=t(158),u=t(222),l=t(225),h=t(212);i.prototype.open=function(){document.body.contains(this.el)||document.body.appendChild(this.el)},i.prototype.close=function(){document.body.contains(this.el)&&document.body.removeChild(this.el)},i.prototype._handleUIPopupDidClose=function(t){t.source===u.PAYPAL_INTEGRATION_NAME&&this.close()},i.prototype._handleUIPopupDidOpen=function(t){t.source===u.PAYPAL_INTEGRATION_NAME&&this.open()},i.prototype._create=function(){this.el=document.createElement("div"),this.el.className="bt-overlay",this._setStyles(this.el,["z-index: 20001","position: fixed","top: 0","left: 0","height: 100%","width: 100%","text-align: center","background: #000","background: rgba(0,0,0,0.7)",'-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=52)"']),this.el.appendChild(this._createCloseIcon()),this.el.appendChild(this._createMessage())},i.prototype._createCloseIcon=function(){return this.closeIcon=document.createElement("div"),this.closeIcon.className="bt-close-overlay",this._setStyles(this.closeIcon,["position: absolute","top: 10px","right: 10px","cursor: pointer","background: url("+this.spriteSrc+") no-repeat 0 -67px","height: 14px","width: 14px"]),this.closeIcon},i.prototype._createMessage=function(){var t=document.createElement("div");return this._setStyles(t,["position: relative","top: 50%","max-width: 350px",'font-family: "HelveticaNeue", "HelveticaNeue-Light", "Helvetica Neue Light", helvetica, arial, sans-serif',"font-size: 14px","line-height: 20px","margin: -70px auto 0"]),t.appendChild(this._createLogo()),t.appendChild(this._createExplanation()),t.appendChild(this._createFocusLink()),t},i.prototype._createExplanation=function(){return this.explanation=document.createElement("div"),this._setStyles(this.explanation,["color: #FFF","margin-bottom: 20px"]),this.explanation.innerHTML=this.translation.overlay_text,this.explanation},i.prototype._createLogo=function(){var t=document.createElement("div");return this._setStyles(t,["background: url("+this.spriteSrc+") no-repeat 0 0","width: 94px","height: 25px","margin: 0 auto 26px auto"]),t},i.prototype._createFocusLink=function(){return this.focusLink=document.createElement("a"),this._setStyles(this.focusLink,["color: #009be1","cursor: pointer"]),this.focusLink.innerHTML=this.translation.continue_link,this.focusLink},i.prototype._setStyles=function(t,e){var n=e.join(";");t.style.cssText=n},i.prototype._setupEvents=function(){var t=this,e=r(this._handleClose,this),n=r(this._handleFocus,this);o.addEventListener(this.closeIcon,"click",e),o.addEventListener(this.focusLink,"click",n),this.destructor.registerFunctionForTeardown(function(){o.removeEventListener(t.closeIcon,"click",e),o.removeEventListener(t.focusLink,"click",n)})},i.prototype._handleClose=function(t){t.preventDefault(),this.close(),s(this.options.onClose)&&this.options.onClose()},i.prototype._handleFocus=function(t){t.preventDefault(),s(this.options.onFocus)&&this.options.onFocus()},i.prototype.teardown=function(){this.bus.teardown(),this.destructor.teardown(),this.close()},e.exports=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{146:146,158:158,212:212,222:222,225:225,73:73,77:77,87:87}],220:[function(t,e,n){(function(n){"use strict";function i(t){this.options=t||{},this.container=this.options.container||document.body,this.el=this.options.el,this.destructor=new a,this.bus=new c({merchantUrl:n.location.href,channel:t.channel}),this._initialize()}var o=t(73),r=t(87),s=t(146),a=t(77),c=t(158),u=t(222);i.prototype._initialize=function(){var t=this;s(this.el)||(null!=this.el?(this.el=o.normalizeElement(this.el),this.destructor.registerFunctionForTeardown(function(){t.clear()})):this.el=this.create()),this.bus.on(c.events.PAYMENT_METHOD_GENERATED,r(this._handlePaymentMethodGenerated,this)),this.bus.on(c.events.PAYMENT_METHOD_CANCELLED,r(this._handlePaymentMethodCancelled,this))},i.prototype.create=function(){var t=this,e=document.createElement("input");return e.name="payment_method_nonce",e.type="hidden",this.container.appendChild(e),this.destructor.registerFunctionForTeardown(function(){t.container.removeChild(e)}),e},i.prototype.value=function(t){s(this.el)?this.el(t):this.el.value=t},i.prototype.clear=function(){this.value("")},i.prototype._handlePaymentMethodCancelled=function(t){t.source===u.PAYPAL_INTEGRATION_NAME&&this.clear()},i.prototype._handlePaymentMethodGenerated=function(t){t.type===u.NONCE_TYPE&&this.value(t.nonce)},i.prototype.teardown=function(){this.destructor.teardown(),this.bus.teardown()},e.exports=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{146:146,158:158,222:222,73:73,77:77,87:87}],221:[function(t,e,n){(function(n){"use strict";function i(t){this.options=t,this.bus=new r({merchantUrl:n.location.href,channel:this.options.channel}),t.isHermes?(this.name=o.HERMES_POPUP_NAME,this.popupHeight=o.HERMES_POPUP_HEIGHT,this.popupWidth=o.HERMES_POPUP_WIDTH):(this.name=o.POPUP_NAME,this.popupHeight=o.POPUP_HEIGHT,this.popupWidth=o.POPUP_WIDTH)}var o=t(222),r=t(158),s=t(226);i.prototype._getPopupOptions=function(){return["height="+this.popupHeight,"width="+this.popupWidth,"top="+this._getTopPosition(),"left="+this._getLeftPosition(),o.POPUP_OPTIONS].join(",")},i.prototype._centerPosition=function(t,e,n){return(t-e)/2+n},i.prototype._getTopPosition=function(){var t=window.outerHeight||document.documentElement.clientHeight,e="undefined"==typeof window.screenY?window.screenTop:window.screenY;return this._centerPosition(t,this.popupHeight,e)},i.prototype._getLeftPosition=function(){var t=window.outerWidth||document.documentElement.clientWidth,e="undefined"==typeof window.screenX?window.screenLeft:window.screenX;return this._centerPosition(t,this.popupWidth,e)},i.prototype.isClosed=function(){return this.el?this.el.closed:void 0},i.prototype.open=function(){(!this.el||this.isClosed())&&(this.el=window.open(this.options.src,this.name,this._getPopupOptions()),this.focus(),this.bus.emit(r.events.UI_POPUP_DID_OPEN,{source:o.PAYPAL_INTEGRATION_NAME}))},i.prototype.close=function(){this.el&&((s.isIE8()&&!this.isClosed()||!s.isIE8())&&this.el.close(),this.bus.emit(r.events.UI_POPUP_DID_CLOSE,{source:o.PAYPAL_INTEGRATION_NAME}))},i.prototype.focus=function(){this.el&&this.el.focus()},i.prototype.teardown=function(){this.close(),this.bus.teardown()},e.exports=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{158:158,222:222,226:226}],222:[function(t,e,n){"use strict";var i,o="2.23.0",r=["GET_CLIENT_TOKEN","GET_CLIENT_OPTIONS","OPEN_MODAL","CLOSE_APP","FOCUS_APP"],s={LEGACY_ONETIME:"Legacy Onetime",HERMES_ONETIME:"Hermes Onetime",LEGACY_FUTURE_PAYMENTS:"Legacy Future Payments",HERMES_BILLING_AGREEMENTS:"Hermes Billing Agreements"};for(n.VERSION=o,n.POPUP_NAME="braintree_paypal_popup",n.HERMES_POPUP_NAME="PPFrameRedirect",n.FRAME_NAME="braintree-paypal-frame",n.HERMES_FRAME_NAME="PPFrameRedirect",n.FRAME_CONTAINER_NAME="braintree-paypal-frame-container",n.POPUP_PATH="/pwpp/"+o+"/html/braintree-frame.html",n.POPUP_OPTIONS="resizable,scrollbars",n.POPUP_HEIGHT=470,n.POPUP_WIDTH=410,n.HERMES_POPUP_HEIGHT=535,n.HERMES_POPUP_WIDTH=450,n.BRIDGE_FRAME_NAME="bt-proxy-frame",n.HERMES_SUPPORTED_CURRENCIES=["USD","GBP","EUR","AUD","CAD","DKK","NOK","PLN","SEK","CHF","TRY","BRL","MXN","ILS","SGD","THB","PHP","NZD","HKD","MYR"],n.HERMES_SUPPORTED_COUNTRIES=["US","GB","AU","CA","ES","FR","DE","IT","NL","NO","PL","CH","TR","DK","BE","AT"],n.NONCE_TYPE="PayPalAccount",n.PAYPAL_INTEGRATION_NAME="PayPal",n.ILLEGAL_XHR_ERROR="Illegal XHR request attempted",n.CONFIGURATION_TYPES=s,n.events={},i=0;it;t++)e=Math.floor(16*Math.random()),n+=e.toString(16);return n}function o(t){return/^(true|1)$/i.test(t)}function r(t){return t.replace(/&/g,"&").replace(//g,">").replace(/\"/g,""").replace(/\'/g,"'")}function s(t){var e,n,i,o,r,s,a,c,u=t.indexOf("?"),l={};if(u>=0&&(t=t.substr(u+1)),0===t.length)return null;for(e=t.split("&"),n=0,i=e.length;i>n;n++)o=e[n],r=o.indexOf("="),s=o.substr(0,r),c=o.substr(r+1),a=decodeURIComponent(c),a=a.replace(//g,">"),"false"===a&&(a=!1),(null==a||"true"===a)&&(a=!0),l[s]=a;return l}function a(t){t.preventDefault?t.preventDefault():t.returnValue=!1}function c(t){var e;return e=Boolean(t.merchantConfiguration.paypal.amount)&&Boolean(t.merchantConfiguration.paypal.currency)?d.CONFIGURATION_TYPES.HERMES_ONETIME:d.CONFIGURATION_TYPES.LEGACY_ONETIME}function u(t){var e;return e=Boolean(t.gatewayConfiguration.paypal.billingAgreementsEnabled)?d.CONFIGURATION_TYPES.HERMES_BILLING_AGREEMENTS:d.CONFIGURATION_TYPES.LEGACY_FUTURE_PAYMENTS}function l(t){var e;return e=Boolean(t.merchantConfiguration.paypal.singleUse)?c(t):u(t)}function h(t){var e=l(t);return e===d.CONFIGURATION_TYPES.HERMES_ONETIME||e===d.CONFIGURATION_TYPES.HERMES_BILLING_AGREEMENTS}function p(t){var e=l(t);return e===d.CONFIGURATION_TYPES.HERMES_ONETIME}var d=t(222),f="function"==typeof String.prototype.trim?function(t){return t.trim()}:function(t){return t.replace(/^\s+|\s+$/,"")},m="function"==typeof window.btoa?function(t){return window.btoa(t)}:function(t){for(var e,n,i,o,r,s,a,c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",u="",l=0;l>2,r=(3&e)<<4|n>>4,s=(15&n)<<2|i>>6,a=63&i,isNaN(n)?s=a=64:isNaN(i)&&(a=64),u=u+c.charAt(o)+c.charAt(r)+c.charAt(s)+c.charAt(a);return u};e.exports={trim:f,btoa:m,generateUid:i,castToBoolean:o,htmlEscape:r,parseUrlParams:s,preventDefault:a,isHermesConfiguration:h,isOnetimeHermesConfiguration:p,getConfigurationType:l}},{222:222}]},{},[175])(175)}); \ No newline at end of file From fdc84f2749009fa699fa0f5c011c0d7b0dd9f4c7 Mon Sep 17 00:00:00 2001 From: "Hector E. Gomez Morales" Date: Thu, 21 Apr 2016 14:37:00 -0500 Subject: [PATCH 081/163] Drop explicit version from asset. --- .../javascripts/spree/backend/braintree/solidus_braintree.js | 2 +- .../javascripts/spree/frontend/braintree/solidus_braintree.js | 2 +- .../javascripts/vendor/{braintree-2.23.0.js => braintree.js} | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename lib/assets/javascripts/vendor/{braintree-2.23.0.js => braintree.js} (100%) diff --git a/lib/assets/javascripts/spree/backend/braintree/solidus_braintree.js b/lib/assets/javascripts/spree/backend/braintree/solidus_braintree.js index cd478276..3e3840a8 100644 --- a/lib/assets/javascripts/spree/backend/braintree/solidus_braintree.js +++ b/lib/assets/javascripts/spree/backend/braintree/solidus_braintree.js @@ -1,4 +1,4 @@ -//= require "vendor/braintree-2.23.0" +//= require "vendor/braintree" Spree.routes.payment_client_token_api = Spree.pathFor("api/payment_client_token") diff --git a/lib/assets/javascripts/spree/frontend/braintree/solidus_braintree.js b/lib/assets/javascripts/spree/frontend/braintree/solidus_braintree.js index 2293f816..fd2a8d85 100644 --- a/lib/assets/javascripts/spree/frontend/braintree/solidus_braintree.js +++ b/lib/assets/javascripts/spree/frontend/braintree/solidus_braintree.js @@ -1,4 +1,4 @@ -//= require "vendor/braintree-2.14.0" +//= require "vendor/braintree" Spree.routes.payment_client_token_api = Spree.pathFor("api/payment_client_token") diff --git a/lib/assets/javascripts/vendor/braintree-2.23.0.js b/lib/assets/javascripts/vendor/braintree.js similarity index 100% rename from lib/assets/javascripts/vendor/braintree-2.23.0.js rename to lib/assets/javascripts/vendor/braintree.js From 583d958ed40a6b16e416e34d5ec2192c31916ce3 Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Thu, 21 Apr 2016 15:11:09 -0700 Subject: [PATCH 082/163] Test against solidus 1.3 branch --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index cf27e9b8..1af4d594 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,10 +8,12 @@ env: - SOLIDUS_BRANCH=v1.0 DB=postgres - SOLIDUS_BRANCH=v1.1 DB=postgres - SOLIDUS_BRANCH=v1.2 DB=postgres + - SOLIDUS_BRANCH=v1.3 DB=postgres - SOLIDUS_BRANCH=master DB=postgres - SOLIDUS_BRANCH=v1.0 DB=mysql - SOLIDUS_BRANCH=v1.1 DB=mysql - SOLIDUS_BRANCH=v1.2 DB=mysql + - SOLIDUS_BRANCH=v1.3 DB=mysql - SOLIDUS_BRANCH=master DB=mysql script: - bundle exec rake test_app From cd77542f93a8ce46010e2730a89bf11d3efece4b Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Thu, 21 Apr 2016 15:11:29 -0700 Subject: [PATCH 083/163] Bump version to 1.0.0.alpha --- lib/solidus_braintree/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/solidus_braintree/version.rb b/lib/solidus_braintree/version.rb index 891bd0e7..f985bf9a 100644 --- a/lib/solidus_braintree/version.rb +++ b/lib/solidus_braintree/version.rb @@ -1,3 +1,3 @@ module SolidusBraintree - VERSION = "0.2.1" + VERSION = "1.0.0.alpha" end From d496666f76307029b38d8ac9220ba3ce1f767ce6 Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Thu, 21 Apr 2016 12:14:45 -0700 Subject: [PATCH 084/163] Add capybara and poltergeist --- solidus_braintree.gemspec | 2 ++ spec/spec_helper.rb | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/solidus_braintree.gemspec b/solidus_braintree.gemspec index e0bcea97..d718de40 100644 --- a/solidus_braintree.gemspec +++ b/solidus_braintree.gemspec @@ -26,6 +26,8 @@ Gem::Specification.new do |spec| spec.add_development_dependency "rake", "~> 10.0" spec.add_development_dependency 'factory_girl', '~> 4.4' spec.add_development_dependency 'rspec-rails' + spec.add_development_dependency 'capybara' + spec.add_development_dependency 'poltergeist', '~> 1.9' spec.add_development_dependency 'ffaker' spec.add_development_dependency "rspec" spec.add_development_dependency "pry" diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index b46ca91c..d1b5e777 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -20,6 +20,10 @@ require 'spree/testing_support/controller_requests' require 'spree/testing_support/url_helpers' +require 'capybara/rspec' +require 'capybara/poltergeist' +Capybara.javascript_driver = :poltergeist + module SolidusGateway module Helpers module BraintreeGateway @@ -46,6 +50,7 @@ def create_braintree_payment_method VCR.configure do |c| c.cassette_library_dir = "spec/cassettes" c.hook_into :webmock + c.ignore_localhost = true c.configure_rspec_metadata! end From 8d704b678bb33576a7815269c161d18ce296eaf7 Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Thu, 21 Apr 2016 12:14:58 -0700 Subject: [PATCH 085/163] Add feature spec for frontend checkout --- .../Accepts_a_CC_payment.yml | 312 ++++++++++++++++++ spec/features/checkout_spec.rb | 67 ++++ 2 files changed, 379 insertions(+) create mode 100644 spec/cassettes/Braintree_checkout/Accepts_a_CC_payment.yml create mode 100644 spec/features/checkout_spec.rb diff --git a/spec/cassettes/Braintree_checkout/Accepts_a_CC_payment.yml b/spec/cassettes/Braintree_checkout/Accepts_a_CC_payment.yml new file mode 100644 index 00000000..46381136 --- /dev/null +++ b/spec/cassettes/Braintree_checkout/Accepts_a_CC_payment.yml @@ -0,0 +1,312 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token + body: + encoding: UTF-8 + string: | + + + 2 + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.60.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Thu, 21 Apr 2016 19:14:41 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff + X-Authentication: + - basic_auth + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + Etag: + - W/"32a0ccd4799ffbc65c88acd7cf0d624f" + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - e08b4405-8f0e-4de5-a9e1-998b7963d140 + X-Runtime: + - '0.235167' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAKEmGVcAA6RVXW+bShB9z6+I8t5bvJjcIjmpYjtgkFnXGC+wb7BLavAu + 9i3m89ffWTtJU8m3qnQfLEswM2fOOTPD5GsnxW2T/ajyQ/lwN/pLu7vNSnbg + efn94W4bWJ++3H19vJkwkWfl6dPpsM/Kx5vb20mTiDp7zHoX0cgdktCsneLQ + L2fujkf+IdXdYyYtTT33pagpIj1buMe0XOer3M29geSrIO5pIAoqcYFDp/XQ + s44Lv/CKp25lO71nY0Hn7t4L2DgecI6HZ7QKnY7OY+QhT/eCGNG5gFpc4mHb + vti4p6Gl0dB/iaO1qergXGvxTOs9su5WwaHD84Pmbca6V3gjL9iOvfn2hzd/ + aj2rG8F/j+VIMIkPcWhoERL7b9ExTwtiZOWzwedcTyM+xnOX8QByCtry0K2S + EL8kiBjfInFahf4/XLfaRN/lvMDjDPiCJkWKDJmEnDDZKv4HvvBbNhyaJYLY + jTEA3j6W5ngp3T4ORc0XrqAh33Gb6HG0r2NknlbFWvN68wR6F4ltQYzXZNKt + cSTuWSA0rPMT179rXm4WqS1EWiodpselHndLhJtU0iPVSR9H/jFF43NfUKdK + baL8GZzimEabNqehgZLIhfiRePXrvT8nb/MYdUeI0dZQm0RuBb7nycLX2MK7 + X/bmjtn7miGrprbbZDMjZ9IC333whpSALTiyjKWEfoKDhudek4bQE9rtIGZY + 6tf0dpo3zOisl1M50hoYIhobkT6dOfeO3Gl8MR1W+ZcmjvBAI6j1Gy3PPCKi + Jda1fHg+MxDgndL+z7w51wuNXboQMPNYafm3U16p/cpjGVp1HHYGt0XB/hDj + P7TJX8Azbu+Uvs9bRAoeucKHXmLZCQr4UGtEIYbZlgG/6nfvzn1L/8j0aRVH + YhWHI6H83epTqL+9zPJltlyVn5akSmeQD7vNpVVk5CPnJzUPIrOtE7M7cfZ8 + Y7ZsBv6VBDxyp1RXPNWc+b/shtKKRjAT0bSiGwP2R2u4bQ5nncF7Sv6P75e4 + K7ML+0CKBJkjPjNa4N/GYfueR20BGmBt/QH/jT94WaU6d1TvoKHGSiJAK+BF + j0yaNcx4zZ+NJpBE48jsk/6n9lf2raGSwl0xhMLl8B76VXcNv+8+YFNpVQxt + YRc+8N1iyFNYYq+4paE1AP/+be68Xu0O3GG7O6aSf9R/uDYXH3ZzGsMNgV60 + TXi5CUzhnXcRj1gJXCU2NhFu1sjcw/N7R5DAn7nm5f6J+uzblsDcuxVVNSSF + fcFKp5837bXv63dNzQ0FnFFz5oaodErtYfL58i26mXz+9Sv1LwAAAP//AwB3 + vu0G3AYAAA== + http_version: + recorded_at: Thu, 21 Apr 2016 19:14:16 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + Han + Solo + han@example.com + + Han Solo + + Han + Solo + YT-1300 + + Mos Eisley + AL + US + 12010 + + 9fafa6c5-8235-4bf6-a7ad-d35660c80a30 + + true + + + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.60.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Thu, 21 Apr 2016 19:14:43 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff + X-Authentication: + - basic_auth + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + Etag: + - W/"348516ba4bafdcf4d9e9c1fa3e908be4" + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - f0d369d2-d5ab-4d12-af74-c3c3f5dade70 + X-Runtime: + - '0.863485' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAKMmGVcAA7RYW3OrNhB+z6/w+J1gbJI4GUKa6fTy0NM5M0lOp305I0C2 + 1YBEJOHY59d3JRAI8AXHaZ6i3W+llfb2meBhk6WjNeaCMHo/9i4n4xGmMUsI + Xd6PX55/debjh/AiiAshWYZ5eDEaBSQJPf/m+np2PQ1cWCgZ6OIVotKB9Y+I + Xm1/vN3Km/fsfeMDyNYq9IJwIR2KMhz+jmjgWmulTpFZPbGUBW6zVtqYZTmi + 2xEl6f1Y8gKPXS3HGSJpCMf8hDcoy1N8CcjALcUKkK8YxT2zBdr0ZO84EkT2 + sTHHSOLEQXIktzm+HyewlCTD43A68a6die9MvWfv9s7z7/zZP4HbGGj7Ik9O + s28MyvN1GJwFwWkiapcSIp0Y8URUmyLO0XastG19KQFZRNIUAuygJOFYCCMv + Q7t+M0GtZCb2TivutrTBHg5sBToYXnPo7iBXWiE5xrL2/+9nx5tNJoHbkTcG + eCMxTdRDlqo9+6YsRimR2/ALE6NfiEjxFtwzwgbH8RLqJXz8I3CrfxtdzoRE + qQM1hEMPogpu2SL7igWVfKvFDkrzFZqGL0/wsjvkh6xmYPW4y2y2z4wWEDgS + h3N/0rEzmr6hjs8LhapIRk8SklKM2GL0qOGo2aUbxvMKptrlzLLRe7h7kh6K + gYa+p/4Upo5koCrGUceF34hQN6zXNmLF0gSKwGT8qMzorqa2YJlqhQSl8JSv + lL1T9XK1rIGVj8kWDhGiQDTGNr6vrA3Pf+7h5d4gVYVIVQU6fXtSg09wRGRz + kXLZKBeoSI3fEWMpRnQcqhJVUK1swAWHUDlQe0Wq/Lc27WqMCd7khGt/nIxR + uYLahNnQFe5AbzHi8HrTSQuupS001EXH9wVKBa6sLE9WGKVyBSliBdWSGRjJ + 0BI7BYeRJmUu7lwXCYGluIw4IlQ1uiVc8B1t1Zhzc7TNMJXfMyxXLPmesiVz + 15C3lzldPmC6JpxRBbgXiCYR20CPr/evT4R0UhUSIfrauNaSGqhu2X5YVk21 + MDpwhbPUynAjqAEc54hYQTMCAxBFJGJOcvXS7aFWN+tAsldMw+u36E3AkC9X + RldQ8lboZhbpjIV7E5iZPJxHV7Oryfzqdu7jaXLlT3Gc3Hgzz/fwZHI1jaFz + 7DOt9/6EXrTGNGOOSF73ZEyttyw4uFHW064x3wM1Yj0ukSxEWOpxouakFtiY + eL2GqhE57I/LSfUFarkntE3QWjiYc8bbmN2ztcJbo7B/3GFAd6v2sN+920GM + vWFVS4D4F8e6wqEzCkb3XqamtCjWHVk1RgGJjC22a6ls05yzGLzpvlvoTRSH + 2ac9soMEihM+5qBZqwjvQ9i7gFuzfEnnszbhawiiLRtI7jRwAMErc+4Qyasy + 9zSip42Gkb3S02GET2MPkL4yKAOJX3X1M2iVRWfaNdzn+pXmQLesQ76TBtkR + 3d3vzdnH6FIdnBPmcN/m+DQ2/pxGTqxbnETpKrv/ceKY7DoyNCvYMHJRgQ8R + MgM5mWmZlxxEdc3ljlCGCjacoNROfIxI12/OkiLW/dt69lrWqsc9tfc5v4A+ + h3fofTgRrw5oUPdtk/Drn9+8yV/P89/8n2+6I0FnS0yE7oDllFEJU0laL7Hj + BEVp+tykLa26eO8lWwINCqq+jnd+8Oj+vut90jjhF87xiXd81h2acifOt0GT + bdhM2z/NBs6xj3y++NDHiw9+ujhnwn7K7+izCxYYbBP+eoFh2SRrePEfAAAA + //8DALbkGTbCFQAA + http_version: + recorded_at: Thu, 21 Apr 2016 19:14:18 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + body: + encoding: UTF-8 + string: | + + + R639166486-EANZ2MN8 + + + 19.99 + Solidus + + Han + Solo + YT-1300 + + Mos Eisley + AL + US + 12010 + + 6qbqsm + 14766362 + sale + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.60.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Thu, 21 Apr 2016 19:14:45 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff + X-Authentication: + - basic_auth + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + Etag: + - W/"76bde6fab371f39702d534117d0f9e67" + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 5521479d-3016-4ee3-9709-1ac098ac7537 + X-Runtime: + - '0.800524' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAKUmGVcAA+xYTY/bNhC951cYvnNl2V7HDrRKt2iKFEgWRZNN21wCShzb + 7EqklqS8dn99hyIlS5a0SS49FPXJnHkckvPFR0Wvj3k2OYDSXIqbaXg1m05A + pJJxsbuZ3n/8maynr+MXkVFUaJoaRMUvJpOIs3i+SzeHl1GAf61EG2pKHdPS + 7KXifwOLAi+yWnMqINY0gyio/lpZWiqFa50I15LgkhDff/gpCvpiC6a5LIWJ + w83VZhMFfmQVOah0T4UhNE2tkOB+dKEAVxpSVVstEzKgmwie3UyNKmEaONNU + G1DfBJWKIRLt/7ZabMLVarlekTe3d5/n7+/WUdBoq2MroAYYoWZiXXEzZTg0 + PIdpPJ+FKzJbknn4Mdy8Cpevltef0SHNhGp+WbDvm3+e4N2ujcQz2YGLZLh8 + uVotVvM6lijdcqUNETSH+C0VUdAaO0BG6/EHmckoOI+dPpV5QcXp0lGogZzy + LEaH/gBHmhcZXCE2CpzYQZ4g0dzAwORiL8WQfEuPvZgE7ZNGCc8yTOrzqQ+P + /855tcFkxORhTIHW8Z8fSbiYzWx1dOTeOUcDgtlgOfGAvUymNOPmFL+XevKG + 6wxOuJ1a6DAKdrZSb99Fgf/r3SexJjNXVSFmC26jLaqPgkmuTu509wIDwSYf + sJRBT+R2cosO5SlF77Zh3ZnWGKFZsadzrOkztC0fm7HAGbdDUxZDU0RZbSde + L2cXc2pNlQmt4KNvtqVgQ0XcaLSvLKoUPXWUGJlWKxwyUlBlODpUgzEZ5ID9 + ojtjyPi5a37NfMtsQk26H8TseVG0c32oYP5P+P9ywrdTwHd8suWQMe0T7qAJ + KCUVQacXUmiojPRSyeJaDuui4/d4Ez8LqE10Qz9s5VlMdYzD4UL6C7qgJ7TQ + HQbviZ5Q8xe4UsI7VEvRr1YlU1wN/VCXIK3glaXVu7e/f/oRM+Y5UNdKdyvh + zOb9mHZkpsGSiG8L1BwsiRpDVK5ljNudoPP7sN5ZD5KnNkBbDDzOwHxJQPU9 + Ulq2g6s40jKCMvRIHAkbVMER8qLmJ4mUGVAxjbc005YANoCaD+EpSEpVfRkb + +QAiXj0mjxqJgRs5TcJFvAztz/Z00W5Vy9iJ/cCXDholFeH8xLUt4WZcd5+C + KxfMXAqzxx6BTORS2MOegCokW/NZB1xJ/bqeeRDbpirSXHWFnvS8y73MKnf7 + hjxxTfdS4xt6TndASoUsyphCvwoCqvFe0FeJolzYMvL5b5lVUNCTvS6+5IC5 + y75kcieDA3rjqhC71yAOXElhATeaCpbII7Kixr5vogoKilTpXjwI+SRsTjqB + U++BZmaPW4UzoiVzIAYJN2e9G3pVqTCWmJi7MrNEtYW61DRXj+XkeMueoS2Z + 3zQ9KZm1ELXA+1DrEvsjXqLi4YzpSLvdV26J1VKRQnvVvrL2mWRlWj05Wm5r + ZA5UCv5Ygq8xFGMUOHZpFa+T68X1bH29WS9hzq6Xc0jZy3ARLkOYza7nKZL6 + sanO8gFELolmDyM12Og9U+7WoH/MkT3HhFWnDmFpLvkKAWjIx9EWLr5CUJEX + 3/gyafCNhWdfkRVi7CHoHKrRAyynYgd4obhXYCVrdthiV1piq4OYFhx30pe7 + cwaXB20k3jmuaWZ0mK2ViU4VL0bZXEvftLiKqpICL3PJCJIjYt04wIsukLgt + ZQaxuOWLdezNQfCSGKCijOsqqwd14KzIOs1sU/qOVxq2lP7eukaRydkPAHiu + kcxt9O7ywHekgMxyVM5KjZnsBY4rq4O98rYAY5eVXVs+ERfSnhZ9kZRKO7rN + wOALteatXdVwgFpcfXj5Lqb34eMb4XC0h8aOrYa3Yd8tmK5I/oYMlmk6QLsx + LCNntycvSsuN+/nhrxrCBZK50r197GXr2ssX216iYAzUpUOtg3ZZU5sRjYK+ + bqviUF+z1RAtxfWDjTI9fz749e5TOPv8brm6W/7R+pDAIOW6eoo4Bmfz20sq + t3YsRWaPLYpg7dqkBnTJVnYj0elM8Yt/AAAA//8DAPmkIQavEwAA + http_version: + recorded_at: Thu, 21 Apr 2016 19:14:20 GMT +recorded_with: VCR 3.0.1 diff --git a/spec/features/checkout_spec.rb b/spec/features/checkout_spec.rb new file mode 100644 index 00000000..64b47154 --- /dev/null +++ b/spec/features/checkout_spec.rb @@ -0,0 +1,67 @@ +require 'spec_helper' + +describe "Braintree checkout", :vcr, :js, type: :feature do + let!(:country) { create :country} + let!(:zone) { create :zone } + let!(:product) { create(:product, name: 'DL-44') } + let!(:gateway) { create_braintree_payment_method } + + before do + zone.members << Spree::ZoneMember.create!(zoneable: country) + create(:store) + create(:free_shipping_method) + end + + it "Accepts a CC payment" do + visit "/products/#{product.slug}" + click_on 'Add To Cart' + click_on 'Checkout' + + fill_in_address + click_on 'Save and Continue' + click_on 'Save and Continue' + + # Payment + expect(page).to have_content(gateway.name) + + fill_in 'Card Number', with: '4111111111111111' + fill_in 'Expiration', with: "12/20" + fill_in 'Card Code', with: '123' + + click_on 'Save and Continue' + click_on 'Place Order' + expect(page).to have_content('Your order has been processed successfully') + + # Assert the payment details were stored correctly + order = Spree::Order.first + expect(order).to be_complete + expect(order.payments.count).to be(1) + + payment = order.payments.first + expect(payment).to be_pending + expect(payment.response_code).to be_present + + card = payment.source + expect(card).to be_a(Spree::CreditCard) + expect(card.year).to eq("2020") + expect(card.month).to eq("12") + expect(card.last_digits).to eq("1111") + expect(card.cc_type).to eq("visa") + expect(card.gateway_customer_profile_id).to be_present + expect(card.gateway_payment_profile_id).to be_present + end + + def fill_in_address + fill_in "Customer E-Mail", with: "han@example.com" + within("#billing") do + fill_in "First Name", with: "Han" + fill_in "Last Name", with: "Solo" + fill_in "Street Address", with: "YT-1300" + fill_in "City", with: "Mos Eisley" + select country.name, from: "Country" + select country.states.first, from: "order_bill_address_attributes_state_id" + fill_in "Zip", with: "12010" + fill_in "Phone", with: "(555) 555-5555" + end + end +end From 090b17739512d185903cd010bb6417f4d0de4e86 Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Fri, 22 Apr 2016 12:02:12 -0700 Subject: [PATCH 086/163] Add capybara-screenshot --- solidus_braintree.gemspec | 1 + spec/spec_helper.rb | 1 + 2 files changed, 2 insertions(+) diff --git a/solidus_braintree.gemspec b/solidus_braintree.gemspec index d718de40..508ceab1 100644 --- a/solidus_braintree.gemspec +++ b/solidus_braintree.gemspec @@ -27,6 +27,7 @@ Gem::Specification.new do |spec| spec.add_development_dependency 'factory_girl', '~> 4.4' spec.add_development_dependency 'rspec-rails' spec.add_development_dependency 'capybara' + spec.add_development_dependency 'capybara-screenshot' spec.add_development_dependency 'poltergeist', '~> 1.9' spec.add_development_dependency 'ffaker' spec.add_development_dependency "rspec" diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index d1b5e777..2c3ab0ac 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -21,6 +21,7 @@ require 'spree/testing_support/url_helpers' require 'capybara/rspec' +require 'capybara-screenshot/rspec' require 'capybara/poltergeist' Capybara.javascript_driver = :poltergeist From 846ddfc94c20dfabea638e8f76fe432f7652485e Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Fri, 22 Apr 2016 10:27:41 -0700 Subject: [PATCH 087/163] Switch to using hosted fields --- .../checkout/payment/_braintree.html.erb | 80 ++++++++++--------- .../frontend/braintree/solidus_braintree.js | 26 ++++++ .../spree/frontend/solidus_braintree.scss | 30 +++++++ spec/features/checkout_spec.rb | 18 ++++- 4 files changed, 113 insertions(+), 41 deletions(-) create mode 100644 lib/assets/stylesheets/spree/frontend/solidus_braintree.scss diff --git a/app/views/spree/checkout/payment/_braintree.html.erb b/app/views/spree/checkout/payment/_braintree.html.erb index a74fecd0..5d297b50 100644 --- a/app/views/spree/checkout/payment/_braintree.html.erb +++ b/app/views/spree/checkout/payment/_braintree.html.erb @@ -1,39 +1,45 @@ -<%= image_tag 'credit_cards/credit_card.gif', :id => 'credit-card-image' %> -<% param_prefix = "payment_source[#{payment_method.id}]" %> - -

- <%= label_tag "name_on_card_#{payment_method.id}", Spree.t(:name_on_card) %>*
- <%= text_field_tag "#{param_prefix}[name]", "#{@order.billing_firstname} #{@order.billing_lastname}", { id: "name_on_card_#{payment_method.id}", :autocomplete => "cc-name" } %> -

- -

- <%= label_tag "card_number", Spree.t(:card_number) %>*
- <%= text_field_tag "", '', {:id => 'card_number', :class => 'required cardNumber', :size => 19, :maxlength => 19, :autocomplete => "cc-number", type: "tel", :data => { "braintree-name" => "number" }} %> -   - -

- -

- <%= label_tag "card_expiry", Spree.t(:expiration) %>*
- <%= text_field_tag "#{param_prefix}[expiry]", '', {:id => 'card_expiry', :class => "required cardExpiry", :placeholder => "MM / YY", type: "tel"} %> - <%= hidden_field_tag "", '', :id => 'braintree_expiration_date', :data => { "braintree-name" => "expiration_date" } %> -

- -

- <%= label_tag "card_code", Spree.t(:card_code) %>*
- <%= text_field_tag "", '', {:id => 'card_code', :class => 'required cardCode', :size => 5, type: "tel", autocomplete: "off", :data => { "braintree-name" => "cvv" }} %> - <%= link_to "(#{Spree.t(:what_is_this)})", spree.cvv_path, :target => '_blank', "data-hook" => "cvv_link", :id => "cvv_link" %> -

- -<% if @order.bill_address %> - <%= fields_for "#{param_prefix}[address_attributes]", @order.bill_address do |f| %> - <%= render :partial => 'spree/address/form_hidden', :locals => { :form => f } %> +
+ + +
+ <%= image_tag 'credit_cards/credit_card.gif', :id => 'credit-card-image' %> + <% param_prefix = "payment_source[#{payment_method.id}]" %> + +

+ <%= label_tag "name_on_card_#{payment_method.id}", Spree.t(:name_on_card) %>*
+ <%= text_field_tag "#{param_prefix}[name]", "#{@order.billing_firstname} #{@order.billing_lastname}", { id: "name_on_card_#{payment_method.id}", :autocomplete => "cc-name" } %> +

+ +

+ <%= label_tag "braintree_card_number", Spree.t(:card_number) %>*
+ +   + +

+ +

+ <%= label_tag "braintree_card_expiry", Spree.t(:expiration) %>*
+ +

+ +

+ <%= label_tag "braintree_card_code", Spree.t(:card_code) %>*
+ + + <%= link_to "(#{Spree.t(:what_is_this)})", spree.cvv_path, :target => '_blank', "data-hook" => "cvv_link", :id => "cvv_link" %> +

+
+ + <% if @order.bill_address %> + <%= fields_for "#{param_prefix}[address_attributes]", @order.bill_address do |f| %> + <%= render :partial => 'spree/address/form_hidden', :locals => { :form => f } %> + <% end %> <% end %> -<% end %> -<%= hidden_field_tag "#{param_prefix}[cc_type]", '', :id => "cc_type", :class => 'ccType' %> -<%= hidden_field_tag "order[payments_attributes][][payment_method_nonce]", '', :id => "payment_method_nonce" %> + <%= hidden_field_tag "#{param_prefix}[cc_type]", '', :id => "cc_type", :class => 'ccType' %> + <%= hidden_field_tag "order[payments_attributes][][payment_method_nonce]", '', :id => "payment_method_nonce" %> +
diff --git a/lib/assets/javascripts/spree/frontend/braintree/solidus_braintree.js b/lib/assets/javascripts/spree/frontend/braintree/solidus_braintree.js index fd2a8d85..ea062af8 100644 --- a/lib/assets/javascripts/spree/frontend/braintree/solidus_braintree.js +++ b/lib/assets/javascripts/spree/frontend/braintree/solidus_braintree.js @@ -1,5 +1,19 @@ //= require "vendor/braintree" +SolidusBraintree = { + getFrontendStyles: function(){ + /* Emulation of inherited attributes through an iframe */ + var $source = $('.braintree-hosted-field'); + return { + input: { + "font-family": $source.css("font-family"), + "font-size": $source.css("font-size"), + "color": $source.css("color"), + } + }; + } +} + Spree.routes.payment_client_token_api = Spree.pathFor("api/payment_client_token") var braintreeDropinIntegration; @@ -33,6 +47,18 @@ var initializeBraintree = function(data) { }) braintree.setup(data.client_token, "custom", { id: "checkout_form_payment", + hostedFields: { + styles: SolidusBraintree.getFrontendStyles(), + number: { + selector: "#braintree_card_number" + }, + cvv: { + selector: "#braintree_card_code" + }, + expirationDate: { + selector: "#braintree_card_expiry" + } + }, onReady: function (integration) { braintreeDropinIntegration = integration; }, diff --git a/lib/assets/stylesheets/spree/frontend/solidus_braintree.scss b/lib/assets/stylesheets/spree/frontend/solidus_braintree.scss new file mode 100644 index 00000000..b608b8f4 --- /dev/null +++ b/lib/assets/stylesheets/spree/frontend/solidus_braintree.scss @@ -0,0 +1,30 @@ +.braintree-hosted-field { + display: inline-block; + border: 1px solid #d9d9db; + font-family: "Ubuntu", sans-serif; + font-size: 13px; + height: 2em; + width: 16em; + cursor: text; + padding: 0 5px; + + &.braintree-hosted-fields-focused { + border-color: #00ADEE; + } + + &.braintree-hosted-fields-valid { + border-color: #63CE63; + } + + &.braintree-hosted-fields-invalid { + border-color: red; + } + + &.card-code { + width: 6em; + } +} + +.braintree-input-style { + display: none !important; +} diff --git a/spec/features/checkout_spec.rb b/spec/features/checkout_spec.rb index 64b47154..95d70a4a 100644 --- a/spec/features/checkout_spec.rb +++ b/spec/features/checkout_spec.rb @@ -24,12 +24,14 @@ # Payment expect(page).to have_content(gateway.name) - fill_in 'Card Number', with: '4111111111111111' - fill_in 'Expiration', with: "12/20" - fill_in 'Card Code', with: '123' + braintree_fill_in 'Card Number', with: '4111111111111111' + braintree_fill_in 'Expiration', with: "12/20" + braintree_fill_in 'Card Code', with: '123' click_on 'Save and Continue' - click_on 'Place Order' + + # Previous step can take a long time, so we allow an extra delay + click_on 'Place Order', wait: 30 expect(page).to have_content('Your order has been processed successfully') # Assert the payment details were stored correctly @@ -64,4 +66,12 @@ def fill_in_address fill_in "Phone", with: "(555) 555-5555" end end + + def braintree_fill_in(label_text, with:) + label = find(:label, label_text) + frame = find("##{label[:for]} iframe") + within_frame(frame) do + find('input').set(with) + end + end end From 943e5ab3e5e584c5472cd95f3101371febb431b7 Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Fri, 22 Apr 2016 14:20:02 -0700 Subject: [PATCH 088/163] Add PayPal support to frontend --- app/views/spree/checkout/payment/_braintree.html.erb | 12 +++++++++++- config/locales/en.yml | 4 ++++ .../spree/frontend/braintree/solidus_braintree.js | 9 +++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 config/locales/en.yml diff --git a/app/views/spree/checkout/payment/_braintree.html.erb b/app/views/spree/checkout/payment/_braintree.html.erb index 5d297b50..ca1e51d6 100644 --- a/app/views/spree/checkout/payment/_braintree.html.erb +++ b/app/views/spree/checkout/payment/_braintree.html.erb @@ -1,8 +1,18 @@
+
+
+ <%= t('solidus_braintree.paypal_header_html') %> +
+
+
+
- <%= image_tag 'credit_cards/credit_card.gif', :id => 'credit-card-image' %> +
+ <%= t('solidus_braintree.creditcard_header_html') %> +
+ <% param_prefix = "payment_source[#{payment_method.id}]" %>

diff --git a/config/locales/en.yml b/config/locales/en.yml new file mode 100644 index 00000000..1253387d --- /dev/null +++ b/config/locales/en.yml @@ -0,0 +1,4 @@ +en: + solidus_braintree: + paypal_header_html:

Checkout with
+ creditcard_header_html:

or

Enter a credit card:
diff --git a/lib/assets/javascripts/spree/frontend/braintree/solidus_braintree.js b/lib/assets/javascripts/spree/frontend/braintree/solidus_braintree.js index ea062af8..1741454c 100644 --- a/lib/assets/javascripts/spree/frontend/braintree/solidus_braintree.js +++ b/lib/assets/javascripts/spree/frontend/braintree/solidus_braintree.js @@ -59,6 +59,15 @@ var initializeBraintree = function(data) { selector: "#braintree_card_expiry" } }, + paypal: { + container: "#braintree_paypal_container", + onSuccess: function() { + $(".braintree-cc-input").hide(); + }, + onCancelled: function() { + $(".braintree-cc-input").show(); + } + }, onReady: function (integration) { braintreeDropinIntegration = integration; }, From 08ef545a204f0a52c5bff06368dc4f08158548c5 Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Tue, 26 Apr 2016 13:39:15 -0700 Subject: [PATCH 089/163] Always specify an amount for the payment --- spec/solidus/gateway/braintree_gateway_spec.rb | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/spec/solidus/gateway/braintree_gateway_spec.rb b/spec/solidus/gateway/braintree_gateway_spec.rb index b8fbef41..851d41e0 100644 --- a/spec/solidus/gateway/braintree_gateway_spec.rb +++ b/spec/solidus/gateway/braintree_gateway_spec.rb @@ -17,8 +17,11 @@ ), payment_method: payment_method, payment_method_nonce: nonce, + amount: amount ) end + let(:amount) { 5.00 } + let(:card) { payment.source } context 'a customer profile' do @@ -244,10 +247,10 @@ end end - context 'failure', transaction_clean: false do + context 'failure' do + let(:amount) { 4001.00 } it "fails" do expect{ - payment.amount = 4001.00 payment.capture! }.to raise_error(Spree::Core::GatewayError) expect(payment).to be_failed From 6ebfd33b7ea3efd3f58f41376c58ee3c9d9a9aca Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Tue, 26 Apr 2016 13:48:19 -0700 Subject: [PATCH 090/163] Test properly against each solidus branch --- .travis.yml | 2 -- Gemfile | 3 ++- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 1af4d594..410ab0cc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,12 +5,10 @@ addons: postgresql: "9.3" env: matrix: - - SOLIDUS_BRANCH=v1.0 DB=postgres - SOLIDUS_BRANCH=v1.1 DB=postgres - SOLIDUS_BRANCH=v1.2 DB=postgres - SOLIDUS_BRANCH=v1.3 DB=postgres - SOLIDUS_BRANCH=master DB=postgres - - SOLIDUS_BRANCH=v1.0 DB=mysql - SOLIDUS_BRANCH=v1.1 DB=mysql - SOLIDUS_BRANCH=v1.2 DB=mysql - SOLIDUS_BRANCH=v1.3 DB=mysql diff --git a/Gemfile b/Gemfile index c3671baa..6d758bfa 100644 --- a/Gemfile +++ b/Gemfile @@ -1,7 +1,8 @@ source 'https://rubygems.org' # Specify your gem's dependencies in solidus_braintree.gemspec -gem "solidus", github: "solidusio/solidus", branch: "master" +branch = ENV.fetch('SOLIDUS_BRANCH', 'master') +gem "solidus", github: "solidusio/solidus", branch: branch gem 'pg' gem 'mysql2' From b903e5b7e9ebca35875ba4e39754ee091f94b7e7 Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Fri, 22 Apr 2016 10:27:41 -0700 Subject: [PATCH 091/163] Switch to using hosted fields --- .../checkout/payment/_braintree.html.erb | 68 ++++++++++--------- .../frontend/braintree/solidus_braintree.js | 26 +++++++ .../spree/frontend/solidus_braintree.scss | 26 +++++++ .../install/install_generator.rb | 4 ++ spec/features/checkout_spec.rb | 18 +++-- 5 files changed, 106 insertions(+), 36 deletions(-) create mode 100644 lib/assets/stylesheets/spree/frontend/solidus_braintree.scss diff --git a/app/views/spree/checkout/payment/_braintree.html.erb b/app/views/spree/checkout/payment/_braintree.html.erb index a74fecd0..91552b96 100644 --- a/app/views/spree/checkout/payment/_braintree.html.erb +++ b/app/views/spree/checkout/payment/_braintree.html.erb @@ -1,39 +1,43 @@ -<%= image_tag 'credit_cards/credit_card.gif', :id => 'credit-card-image' %> -<% param_prefix = "payment_source[#{payment_method.id}]" %> +
+
+ <%= image_tag 'credit_cards/credit_card.gif', :id => 'credit-card-image' %> + <% param_prefix = "payment_source[#{payment_method.id}]" %> -

- <%= label_tag "name_on_card_#{payment_method.id}", Spree.t(:name_on_card) %>*
- <%= text_field_tag "#{param_prefix}[name]", "#{@order.billing_firstname} #{@order.billing_lastname}", { id: "name_on_card_#{payment_method.id}", :autocomplete => "cc-name" } %> -

+

+ <%= label_tag "name_on_card_#{payment_method.id}", Spree.t(:name_on_card) %>*
+ <%= text_field_tag "#{param_prefix}[name]", "#{@order.billing_firstname} #{@order.billing_lastname}", { id: "name_on_card_#{payment_method.id}", :autocomplete => "cc-name" } %> +

-

- <%= label_tag "card_number", Spree.t(:card_number) %>*
- <%= text_field_tag "", '', {:id => 'card_number', :class => 'required cardNumber', :size => 19, :maxlength => 19, :autocomplete => "cc-number", type: "tel", :data => { "braintree-name" => "number" }} %> -   - -

+

+ <%= label_tag "braintree_card_number", Spree.t(:card_number) %>*
+ +   + +

-

- <%= label_tag "card_expiry", Spree.t(:expiration) %>*
- <%= text_field_tag "#{param_prefix}[expiry]", '', {:id => 'card_expiry', :class => "required cardExpiry", :placeholder => "MM / YY", type: "tel"} %> - <%= hidden_field_tag "", '', :id => 'braintree_expiration_date', :data => { "braintree-name" => "expiration_date" } %> -

+

+ <%= label_tag "braintree_card_expiry", Spree.t(:expiration) %>*
+ +

-

- <%= label_tag "card_code", Spree.t(:card_code) %>*
- <%= text_field_tag "", '', {:id => 'card_code', :class => 'required cardCode', :size => 5, type: "tel", autocomplete: "off", :data => { "braintree-name" => "cvv" }} %> - <%= link_to "(#{Spree.t(:what_is_this)})", spree.cvv_path, :target => '_blank', "data-hook" => "cvv_link", :id => "cvv_link" %> -

+

+ <%= label_tag "braintree_card_code", Spree.t(:card_code) %>*
-<% if @order.bill_address %> - <%= fields_for "#{param_prefix}[address_attributes]", @order.bill_address do |f| %> - <%= render :partial => 'spree/address/form_hidden', :locals => { :form => f } %> + + <%= link_to "(#{Spree.t(:what_is_this)})", spree.cvv_path, :target => '_blank', "data-hook" => "cvv_link", :id => "cvv_link" %> +

+
+ + <% if @order.bill_address %> + <%= fields_for "#{param_prefix}[address_attributes]", @order.bill_address do |f| %> + <%= render :partial => 'spree/address/form_hidden', :locals => { :form => f } %> + <% end %> <% end %> -<% end %> -<%= hidden_field_tag "#{param_prefix}[cc_type]", '', :id => "cc_type", :class => 'ccType' %> -<%= hidden_field_tag "order[payments_attributes][][payment_method_nonce]", '', :id => "payment_method_nonce" %> + <%= hidden_field_tag "#{param_prefix}[cc_type]", '', :id => "cc_type", :class => 'ccType' %> + <%= hidden_field_tag "order[payments_attributes][][payment_method_nonce]", '', :id => "payment_method_nonce" %> +
diff --git a/lib/assets/javascripts/spree/frontend/braintree/solidus_braintree.js b/lib/assets/javascripts/spree/frontend/braintree/solidus_braintree.js index fd2a8d85..ea062af8 100644 --- a/lib/assets/javascripts/spree/frontend/braintree/solidus_braintree.js +++ b/lib/assets/javascripts/spree/frontend/braintree/solidus_braintree.js @@ -1,5 +1,19 @@ //= require "vendor/braintree" +SolidusBraintree = { + getFrontendStyles: function(){ + /* Emulation of inherited attributes through an iframe */ + var $source = $('.braintree-hosted-field'); + return { + input: { + "font-family": $source.css("font-family"), + "font-size": $source.css("font-size"), + "color": $source.css("color"), + } + }; + } +} + Spree.routes.payment_client_token_api = Spree.pathFor("api/payment_client_token") var braintreeDropinIntegration; @@ -33,6 +47,18 @@ var initializeBraintree = function(data) { }) braintree.setup(data.client_token, "custom", { id: "checkout_form_payment", + hostedFields: { + styles: SolidusBraintree.getFrontendStyles(), + number: { + selector: "#braintree_card_number" + }, + cvv: { + selector: "#braintree_card_code" + }, + expirationDate: { + selector: "#braintree_card_expiry" + } + }, onReady: function (integration) { braintreeDropinIntegration = integration; }, diff --git a/lib/assets/stylesheets/spree/frontend/solidus_braintree.scss b/lib/assets/stylesheets/spree/frontend/solidus_braintree.scss new file mode 100644 index 00000000..398a8775 --- /dev/null +++ b/lib/assets/stylesheets/spree/frontend/solidus_braintree.scss @@ -0,0 +1,26 @@ +.braintree-hosted-field { + display: inline-block; + border: 1px solid #d9d9db; + font-family: "Ubuntu", sans-serif; + font-size: 13px; + height: 2em; + width: 16em; + cursor: text; + padding: 0 5px; + + &.braintree-hosted-fields-focused { + border-color: #00ADEE; + } + + &.braintree-hosted-fields-valid { + border-color: #63CE63; + } + + &.braintree-hosted-fields-invalid { + border-color: red; + } + + &.card-code { + width: 6em; + } +} diff --git a/lib/generators/solidus_braintree/install/install_generator.rb b/lib/generators/solidus_braintree/install/install_generator.rb index e7903b16..1e2cd524 100644 --- a/lib/generators/solidus_braintree/install/install_generator.rb +++ b/lib/generators/solidus_braintree/install/install_generator.rb @@ -8,6 +8,10 @@ def add_javascripts append_file "vendor/assets/javascripts/spree/backend/all.js", "//= require spree/backend/braintree/solidus_braintree\n" end + def add_stylesheets + inject_into_file "vendor/assets/stylesheets/spree/frontend/all.css", " *= require spree/frontend/solidus_braintree\n", before: '*/', verbose: true + end + def add_migrations run 'bundle exec rake railties:install:migrations FROM=solidus_braintree' end diff --git a/spec/features/checkout_spec.rb b/spec/features/checkout_spec.rb index 64b47154..95d70a4a 100644 --- a/spec/features/checkout_spec.rb +++ b/spec/features/checkout_spec.rb @@ -24,12 +24,14 @@ # Payment expect(page).to have_content(gateway.name) - fill_in 'Card Number', with: '4111111111111111' - fill_in 'Expiration', with: "12/20" - fill_in 'Card Code', with: '123' + braintree_fill_in 'Card Number', with: '4111111111111111' + braintree_fill_in 'Expiration', with: "12/20" + braintree_fill_in 'Card Code', with: '123' click_on 'Save and Continue' - click_on 'Place Order' + + # Previous step can take a long time, so we allow an extra delay + click_on 'Place Order', wait: 30 expect(page).to have_content('Your order has been processed successfully') # Assert the payment details were stored correctly @@ -64,4 +66,12 @@ def fill_in_address fill_in "Phone", with: "(555) 555-5555" end end + + def braintree_fill_in(label_text, with:) + label = find(:label, label_text) + frame = find("##{label[:for]} iframe") + within_frame(frame) do + find('input').set(with) + end + end end From 6513c23b37b4427da9ff194bac01db78cff03b2f Mon Sep 17 00:00:00 2001 From: "Hector E. Gomez Morales" Date: Thu, 21 Apr 2016 16:27:46 -0500 Subject: [PATCH 092/163] Enable fraud detection provided by Braintree using device_data. This commit makes the following changes: - braintree_device_data attribute is added to Spree::Order to save the device_data generated by the JS SDK from Braintree, this value is passed to Braintree when creating a payment profile and in the confirmation of an order. - Better handling of errors both for validation and server for the frontend. - Tests to ensure the device data is passed to Braintree. - Add README section about the need to enable fraud detection on Braintree control panel. --- README.md | 7 + .../inject_device_data_concern.rb | 18 ++ .../permitted_attributes_concern.rb | 4 + .../solidus/gateway/braintree_gateway.rb | 1 + .../braintree_security.html.erb.deface | 9 + .../checkout/payment/_braintree.html.erb | 2 + .../_braintree_initialization.html.erb | 7 + ...1931_add_braintree_device_data_to_order.rb | 5 + .../frontend/braintree/solidus_braintree.js | 49 +++- .../denies_a_fraudulent_card.yml | 276 ++++++++++++++++++ ...r_passes_device_data_to_create_profile.yml | 115 ++++++++ .../sends_it_to_Braintree.yml | 116 ++++++++ spec/features/checkout_spec.rb | 32 +- spec/models/spree/order_spec.rb | 10 + spec/models/spree/payment_spec.rb | 2 +- .../models/spree/permitted_attributes_spec.rb | 4 + .../solidus/gateway/braintree_gateway_spec.rb | 91 +++++- 17 files changed, 742 insertions(+), 6 deletions(-) create mode 100644 app/models/concerns/solidus_braintree/inject_device_data_concern.rb create mode 100644 app/overrides/spree/checkout/_confirm/braintree_security.html.erb.deface create mode 100644 app/views/spree/checkout/payment/_braintree_initialization.html.erb create mode 100644 db/migrate/20160426221931_add_braintree_device_data_to_order.rb create mode 100644 spec/cassettes/Braintree_checkout/denies_a_fraudulent_card.yml create mode 100644 spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/order_gets_updated_with_device_data/order_passes_device_data_to_create_profile.yml create mode 100644 spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/payment_has_associated_device_data/sends_it_to_Braintree.yml create mode 100644 spec/models/spree/order_spec.rb diff --git a/README.md b/README.md index 8da0b607..c41cb07c 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,13 @@ And then execute: $ bundle $ bundle exec rails g solidus_braintree:install + +## Fraud detection + +This gem has support for the advanced fraud tools flow from Braintree, to activate +fully the associated Braintree account must enable advanced fraud tools in the +Control Panel. + ## Usage This gem extends your solidus application by adding a `POST /api/payment_client_token` endpoint to you application to generate Braintree payment client token. This endpoint requires an authentication token in your request header. diff --git a/app/models/concerns/solidus_braintree/inject_device_data_concern.rb b/app/models/concerns/solidus_braintree/inject_device_data_concern.rb new file mode 100644 index 00000000..af079acb --- /dev/null +++ b/app/models/concerns/solidus_braintree/inject_device_data_concern.rb @@ -0,0 +1,18 @@ +module SolidusBraintree + module InjectDeviceDataConcern + extend ActiveSupport::Concern + included do + prepend(InstanceMethods) + end + + module InstanceMethods + def gateway_options + options = super + + options[:device_data] = order.braintree_device_data if order.braintree_device_data + + options + end + end + end +end diff --git a/app/models/concerns/solidus_braintree/permitted_attributes_concern.rb b/app/models/concerns/solidus_braintree/permitted_attributes_concern.rb index 7025cbf3..c4eb1001 100644 --- a/app/models/concerns/solidus_braintree/permitted_attributes_concern.rb +++ b/app/models/concerns/solidus_braintree/permitted_attributes_concern.rb @@ -3,5 +3,9 @@ module PermittedAttributesConcern def payment_attributes super | [:payment_method_nonce] end + + def checkout_attributes + super | [:braintree_device_data] + end end end diff --git a/app/models/solidus/gateway/braintree_gateway.rb b/app/models/solidus/gateway/braintree_gateway.rb index 01bfba5c..3a1e7157 100644 --- a/app/models/solidus/gateway/braintree_gateway.rb +++ b/app/models/solidus/gateway/braintree_gateway.rb @@ -68,6 +68,7 @@ def create_profile(payment) verify_card: true, }, }, + device_data: payment.order.braintree_device_data } result = braintree_gateway.customer.create(params) diff --git a/app/overrides/spree/checkout/_confirm/braintree_security.html.erb.deface b/app/overrides/spree/checkout/_confirm/braintree_security.html.erb.deface new file mode 100644 index 00000000..e8e673b2 --- /dev/null +++ b/app/overrides/spree/checkout/_confirm/braintree_security.html.erb.deface @@ -0,0 +1,9 @@ + + +<% +# Currently we assume we only have one braintree +# payment method. In practice this should be true and it simplifies the code. +braintree_payment = @order.unprocessed_payments.find {|p| p.payment_method.class == Solidus::Gateway::BraintreeGateway } +if braintree_payment %> + <%= render 'spree/checkout/payment/braintree_initialization', payment_method: braintree_payment.payment_method %> +<% end %> \ No newline at end of file diff --git a/app/views/spree/checkout/payment/_braintree.html.erb b/app/views/spree/checkout/payment/_braintree.html.erb index 91552b96..997ec9e9 100644 --- a/app/views/spree/checkout/payment/_braintree.html.erb +++ b/app/views/spree/checkout/payment/_braintree.html.erb @@ -1,4 +1,6 @@
+ <%= render 'spree/checkout/payment/braintree_initialization', payment_method: payment_method %> +
<%= image_tag 'credit_cards/credit_card.gif', :id => 'credit-card-image' %> <% param_prefix = "payment_source[#{payment_method.id}]" %> diff --git a/app/views/spree/checkout/payment/_braintree_initialization.html.erb b/app/views/spree/checkout/payment/_braintree_initialization.html.erb new file mode 100644 index 00000000..8b541b48 --- /dev/null +++ b/app/views/spree/checkout/payment/_braintree_initialization.html.erb @@ -0,0 +1,7 @@ +<% content_for :head do %> + <%= javascript_tag do %> + braintree.environment = "<%= payment_method.preferred_environment %>" + <% end %> +<% end %> + +<%= hidden_field_tag "order[braintree_device_data]", '', :id => "device_data" %> diff --git a/db/migrate/20160426221931_add_braintree_device_data_to_order.rb b/db/migrate/20160426221931_add_braintree_device_data_to_order.rb new file mode 100644 index 00000000..2eb431c9 --- /dev/null +++ b/db/migrate/20160426221931_add_braintree_device_data_to_order.rb @@ -0,0 +1,5 @@ +class AddBraintreeDeviceDataToOrder < ActiveRecord::Migration + def change + add_column :spree_orders, :braintree_device_data, :text + end +end diff --git a/lib/assets/javascripts/spree/frontend/braintree/solidus_braintree.js b/lib/assets/javascripts/spree/frontend/braintree/solidus_braintree.js index ea062af8..db3e1cb1 100644 --- a/lib/assets/javascripts/spree/frontend/braintree/solidus_braintree.js +++ b/lib/assets/javascripts/spree/frontend/braintree/solidus_braintree.js @@ -18,6 +18,7 @@ Spree.routes.payment_client_token_api = Spree.pathFor("api/payment_client_token" var braintreeDropinIntegration; var cardSelector = "#payment-method-fields"; +var confirmForm = "#checkout_form_confirm"; var paymentId; var getClientToken = function(onSuccess) { @@ -59,11 +60,42 @@ var initializeBraintree = function(data) { selector: "#braintree_card_expiry" } }, + dataCollector: { + kount: {environment: braintree.environment} + }, onReady: function (integration) { braintreeDropinIntegration = integration; + $('form').find("input#device_data").val(integration.deviceData); }, - onError: function(type, message) { - show_flash("error", message); + onError: function(error) { + var text; + + if (error.type === "VALIDATION") { + text = 'There was a problem with your payment information. Please check your information and try again.'; + } else { + text = error.message; + } + + $('#checkout_form_payment').find(':submit, :image').attr('disabled', false).removeClass('disabled'); + var errorDiv = $("
", { + class: 'flash error', + text: text + }); + + if (error.details) { + var list = $("
    ").appendTo(errorDiv); + $.each(error.details.invalidFieldKeys, function (idx) { + $('
  • ', { + text: error.details.invalidFieldKeys[idx] + " is required." + }).appendTo(list); + }); + } + + if ($('.flash.error').length == 0) { + errorDiv.prependTo("#content"); + } else { + $('.flash.error').replaceWith(errorDiv); + } }, onPaymentMethodReceived: function(obj) { $("#payment_method_nonce").val(obj.nonce); @@ -73,6 +105,14 @@ var initializeBraintree = function(data) { }); }; +var getDeviceDataConfirm = function(data) { + var collector = braintree.data.setup({ + kount: {environment: braintree.environment} + }); + $('form').find("input#device_data").val(collector.deviceData); + collector.teardown(); +}; + $(document).ready(function() { if ($(cardSelector).find("input[type=radio][name='order[payments_attributes][][payment_method_id]']").length) { $(cardSelector).find("input[type=radio][name='order[payments_attributes][][payment_method_id]']").on("change", function() { @@ -83,4 +123,9 @@ $(document).ready(function() { paymentId = $("form input[type=radio][name='order[payments_attributes][][payment_method_id]']:checked").val(); getClientToken(initializeBraintree); } + + // Attempt to inject device_data to confirm form. + if ($(confirmForm).length && braintree.environment) { + getDeviceDataConfirm(); + } }); diff --git a/spec/cassettes/Braintree_checkout/denies_a_fraudulent_card.yml b/spec/cassettes/Braintree_checkout/denies_a_fraudulent_card.yml new file mode 100644 index 00000000..8001926a --- /dev/null +++ b/spec/cassettes/Braintree_checkout/denies_a_fraudulent_card.yml @@ -0,0 +1,276 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token + body: + encoding: UTF-8 + string: | + + + 2 + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.60.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Mon, 25 Apr 2016 16:30:52 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff + X-Authentication: + - basic_auth + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + Etag: + - W/"ebdb0f1c0fd3a67155160e55c7122742" + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 28d4ba69-05a4-464b-b964-284efc8440f4 + X-Runtime: + - '0.231296' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIADxGHlcAA6RV0W6jOhB936+o+r53jQm9i9R21SSFgIK7IYkBv4FNG4hN + cpcAga+/46TtdqXc1Ur3ASGZ8Zw558wMt9+OSl61+Y+62FV318Zf6Poqr/hO + FNXL3fV65Xz+ev3t/tMtl0VeHT4fdtu8uv90dXXbprLJ7/Pexyz2hzSyG6/c + 9fOJvxFxuMtMf58rB+nzUMmGYdrzmb/PqkXxVPhFMCxG8KBA0ZIMDx1ZbYoE + Ezj3N2T6gpPV45GoBJGVKINpYBBMZVAGAxnINigfDTLQMoh0jI73OjJdo2eX + 9CxyEIvC5yRe2EH5cCQF6sgE9YQujqTcDcF0ZwTFyAwGjoPp1iTD9kcwfegC + 52jAuyfKkFyRXRJZKMZy+z3eF1lJrbx6tMRUmFksRmTqc7GCOyXrROTXaUSe + U0yt77E8PEXhP8J0utTcFKIkoxz4giZlhi2VRoJy1Wn+OzELOz7s2jmG2KU1 + AN42UfZorvw+iWQjZr5kkdgIl5pJvG0SbB+eStCrtw+gd5m6DsQEba78hsTy + hq8kIqY4CPMFBYVdZq6UWaV1GO/nZnKcY9Jmiu2ZSfskDvcZHp3qgjx15lLt + z+CV+yxedgWLLJzGPsQb8tWv9/q8ogOfjnuIQQvITWO/Bt+LdBYiPgtu5r29 + 4e624dhpmOu3+cQquHLA9xC8oRVgS4Eda66gntUOkWnQZhHUhDcbiBnm5iW9 + vfYNMz7p5dWecsBBirhB+2zi3Xhqg8RsPDwVX9skJgOLIddvtDzxiClKnUv3 + 4XxiYcA7ZP2feXPKF1mbbCah54nW8m+vupD7lcc8cpokOlrClSX/Q4z/0KZ4 + Bs+Eu9H6Pq4xLUXsyxBqSdRRMsCHXAaDGO46Fjz1776d6lbhnpvjOonlUxIZ + Uvu7NseQf33u5XNv+fp+VtE6m8B9mG2hnDKnHzk/6H6QuescuHuUJ8+Xdscn + 4F9FwSN/zEzNU/dZ+MtsaK1YDD0Rj2u2tGB+UCtcezjpDN4z+n98P8dd6F2Y + B1qm2DbExOqAf5dE3fs95krQgKDFB/w3/uBlnZnC07WDhohXVIJWwIvtubIb + 6PFGPFrtSlEksN2n/U/tL8xbyxSDvWJJjSvgO9Sr9xp5n33AZsqpOV7DLHzg + uyZwT2PJreaWRc4A/Pu3vgt6PTuwh93jPlPio/7Dpb74MJtj2M8t1IKW0Xkn + cI13mkVi8Aq4KmItY9IusL2F8xtP0lU48e3z/pPNybc1hb73a6ZzKAbzQrRO + P3faa92X95ruGwY4RnvihpnyKnR3++X8L/p0++XXv9S/AAAA//8DAElGXWDc + BgAA + http_version: + recorded_at: Mon, 25 Apr 2016 16:30:52 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + Han + Solo + han@example.com + + Han Solo + + Han + Solo + YT-1300 + + Mos Eisley + AL + US + 12010 + + bb56ebba-9e09-441e-866a-af336aac9cf5 + + true + + + {"device_session_id":"dd15c7f582acef102b0ed6c7b7321522","fraud_merchant_id":"600000"} + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.60.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 422 + message: Unprocessable Entity + headers: + Date: + - Mon, 25 Apr 2016 16:30:55 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff + X-Authentication: + - basic_auth + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + Cache-Control: + - no-cache + X-Request-Id: + - 9b05a4f7-b396-4e26-8d61-7b96a23c00e5 + X-Runtime: + - '0.239868' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAD9GHlcAA6xWS3PjNgy+51dofGoPXD1sOY9RtN1DH4f20iSdaS8diIJi + NhKpJals9O8X1NuR0zqd9ckEPhAgHh+UfHypSu8ZtRFK3m7CD8HGQ8lVLuTj + 7ebh/id2tfmYXiRQC4ZaK800mlpJg+mF5yWdyLi/08GzbY23G9Aa2o3fofwZ + ltSgoRoteGOsqlD3RxLk+Cw4MoPGxcNEnuZ5GPPLIr6KgGMRBlEWYL7nl9nl + NgrjKEr8tc14W6GhyRndzw8grdPsA/dL/LVmshHaWCahwvQXkISczyOkhFFy + p0qV+PN5RGAFokzp6h/wBaq6xA9cVZSGTjyCuMZcWMZBT96dlI4HVeaopyC8 + 3s1rzWyTibKkejHIc6qOmTVnvee8N3UoYzWinfz8ec/CrUvnK/nSBF8syhzz + UelJUd5urG6wb445AsWhFLZNf1PG+1GYElsKYxQukRofqdDpp18Tf/i71HLV + SKtbRj2MDMr6AFH6cEfpOyFf2tXKWCg7dRpGQUjPWormbPtvppuau62Q+qlC + e1A5k0pyTLMs3mOWAbvG4JrtdiGyq/0eGBTb7R6AX/MiJl+nTOebVW3pocep + pakVRds3kEto4i8li4BXxt92zv7npPmrASDRghBcTkauSCryCo+Y/gwWv0Dr + /Y7/ILeY33idg8QfARdjYgQHO/UGdS7YxqSPvfnfejB3rdspBj56fp74rSv7 + ulsTeDavmPDfkIsWOgt/PEn/aTK8h/XvcWXRCIZePWTlTX1vPpUFeDcerjym + pghcPteq3qjWilNsZyTgBNISH6QP8kmqL9L77nuq8RuY/gZyGmv7+eWQ+JP/ + Yfy+LWMTP9cg21Ps9E7WO4vxzmO7t5nuTLaayLB764MU1PLeHXU8Gk8V3icq + Mo3JzI1zSiaWGydjvawSq55QnnxdJmS6o/EPQ3ePPK7DLg1jpxgOU6h0NXPf + DukfwkC/7vrznNha6G6oWaWkPdDDaae+Fp5Atwg6jYIoOIJ30sn7QDzM1aDj + jW5nrKTLaN+1ppNGis8NMtlUGalETmRPJEVUh7ssCq7iPNzut5xf7sLL6ywr + 9mFYcOC7uEj8N02nbtBYAw3IMFhuqnrBCDgglPZAoeGMWcjmz69M2BnRHydl + o6mWNKaPTUkdtPC20iymyvGIgHIGL2RT+NBqVS4wo2AECGMat3EzkE8z6kj6 + uuNVwZwe3Bpd+F4r5xyqvOEdzy3SOMnGBbXaWSRxb2Zghy/fnI5WVLihlgv3 + LNixKL4P9zfb4CaO/+quGAyGG5o6f98Ns0G/J4/3XeKf+lj/CgAA//8DAJ2B + +kvpCwAA + http_version: + recorded_at: Mon, 25 Apr 2016 16:30:54 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token + body: + encoding: UTF-8 + string: | + + + 2 + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.60.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Mon, 25 Apr 2016 16:30:56 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff + X-Authentication: + - basic_auth + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + Etag: + - W/"bd3eadd6ecaa46e38bf599da7c376639" + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 242ac731-45c2-4d3f-b8f4-afde52e4e95c + X-Runtime: + - '0.224942' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAEBGHlcAA6RVW2+bShB+z6+I8t4WFpNTpCSVb2CQWdfYXmDfYJfEwC72 + Keb6689gJ2kq+VSV+oCQltmZ+S4zPHxrpbitkx9leige79TPyt1tUrADT4uX + x7vd1vz09e7b080DE2lSnD6dDnlSPN3c3j7UkaiSp6RzEA2cPvKNys4O3XLq + 7HngHWLNOSbSVIZzT4qKItKxhXOMi3W6Sp18tRV56IeNu+UZ3Y6b1SzX3WyS + UR9n1JqP3H7XujMzp7N5h9FcDbM5ohCPLTMP+1yDGB1vxyrNxojO1o3bv6jP + Fu6obyrU957DYG242bjFqdLgqdJhsm5xdujd2UHF6ahdzdYqnrk97u0f7mzc + uGarwrvDUhVM4kPo60qARP49OKZxRvSkmOt8xrU44CM8cxiHnt2MNtx3ysjH + zxEi+vdAnFa+9y/XzCbS9inP8CgBvMBJFiNdRj4nTDYD/gNfeA3rD/USQexG + 76FeHkpjtJROF/qi4gtHUJ/vuUW0MMirEBmnVbZW3M44Ad9ZZJkQ49aJdCoc + iHu2FQrW+IlrL4qbGllsCREXAw+T41IL2yXCdSzpkWqkCwPvGKPRuS/IU8YW + GfTp7ewYB5smpb6OosCBeFW86vXen502aYjaI8Qoa8hNAqcE3dNo4Sls4d4v + O2PPrLxiyKyo5dTJVE+ZNEF3D7QhBdQWHJn6UkI/24MCGtSxDz2h/R5i+qV2 + jW+7fqsZnPmyS1uaPUNEYSrp4ql9b8u9wheTfpV+rcMA9zSAXL/h8owjIEpk + XrsP51Md/Kaf4u7PtDnn8/V9vBDgeTxw+Y9dXMn9imPpm1Xotzq3RMb+sMb/ + cJM+g2bc2g/8zneIZDxwhAe9hLIVFOpDLpVCDLNMHZ7yd9/OfUvvyLRJGQZi + FfqqGPTdaRPIv7t4+eItZ7gfF6SMp3AfZptLM0vIR8zjwQ8iscwTs1px1nxj + NGwK+hUENHImVBtwDj7zfpmNgSsagCeCSUk3OsyPUnPL6M88g/aU/I3ul7gr + 3oV5IFmEDJVP9QbwN6HfvN+jlgAOsLL+UP8NP2hZxhq3h96BQ4UVRABXgIse + mTQq8HjF53q9lUThyOii7if3V+atppLCXtHFUJfDd+h32Gv4ffahNpVmydAO + ZuED3h2Ge0MtkQ/YYt/sAX/35ju3G2YH9rDVHmPJP/LfX/PFh9mchLBDoBdl + 4192AhvqnWcRq6wArBLrmwDXa2TkcH5vC7L1po5x2X+iOuu2I+B7p6RDDklh + XvDA08+d9tr39b02+IZCHbU+Y0NU2oXy+PDl8i+6efjy61/qPwAAAP//AwDU + Q4g73AYAAA== + http_version: + recorded_at: Mon, 25 Apr 2016 16:30:55 GMT +recorded_with: VCR 3.0.1 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/order_gets_updated_with_device_data/order_passes_device_data_to_create_profile.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/order_gets_updated_with_device_data/order_passes_device_data_to_create_profile.yml new file mode 100644 index 00000000..55bc1902 --- /dev/null +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/order_gets_updated_with_device_data/order_passes_device_data_to_create_profile.yml @@ -0,0 +1,115 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + John + Doe + domenico@bernier.com + + John Doe + + John + Doe + PO Box 1337 + Northwest + Herndon + AL + US + 47525-1563 + + fake-valid-nonce + + true + + + + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.60.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Fri, 29 Apr 2016 22:36:23 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff + X-Authentication: + - basic_auth + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + Etag: + - W/"c85f44c108c008d1202fc2d557693dd5" + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 43528971-4a29-49c4-bfd5-a5b4fe45dd01 + X-Runtime: + - '0.813903' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAOfhI1cAA7RYS2/jNhC+768wfFdkyXbsBArTLIqiaLvpArvpoZcFJdIx + NzKpJSnH3l/fIfWiJL+THgyYM99QQ87rk6L7zSodrKlUTPC7YXA1Gg4oTwRh + /Plu+PT1N28+vEcfoiRXWqyoRB8Gg4gRNJ8F0+lkPI98WBgZ6JIl5tqD9c+Y + T7c/f9zo2evqdTMJI9/VGvSCSaU9jlcU/SGWPPIdgdGnuFr9KmjkN0ujTMQq + w3w74Cy9G2qZ06Fv5XSFWYoIuMlZIn6JqeSMyiuAR36hM6hsKTjt2S7wpid7 + pbFiuo9NJMWaEg/rgd5m9G5IYKnZig5ROAquvdHEC2++huHt+Po2HP8b+Y2B + tc8zcp59Y1A838bCWzCaElW7RJj2EiyJKjfFUuLt0Gjb+kICspilKUTZw4RI + qlQlL+L7sq4iW8qqBPBawXelDfZIdEvUoRhXD90d6VKrtKRU1/5//nvwUWwG + wXg8i/yOrjGiG005MZdZqh6F1MtXqjQkSVfnOCsSnDK9Rb9DVhEBZ6olDUjS + Z6gi9PBX5Jd/G10mlMapB5VF0WQ2DadeML0eR74rdw+ecy23VuzhNFviED19 + gfveIT9kNQarh11m431mPIdwsgTNJ6OOXaXpG9qoPXGoFTL4oiFV1UAsBg8W + jptdusF9WxmVu7yxmOwe/p5SgBLhaDIKwvncYOpwRqaOPPM49A9T5oT12kUs + RUqgNOo6GNg872pqC7EyXZLhFK7yhYtXbm6uljWw4jLFwmNK5ZgnFDVX7Epr + i7ff8+nV3yBNfWhTAzZve9IKT2jMdHPiYtkoFzhPK79jIVKK+RCZTmCgVtmA + cwkx8qDy8tT472za1VQmdJMxaf3xVoLrJQpC0wU6wh3oLcUSbi8cteBW2kJD + QXR8X+BU0dLK8WRJcaqXkBu0cduRVTC2ws/Uy2WKllpn6tb3sVJUq6tYYsZN + z3uGA77irZl6foa3MAv1txXVS0G+peJZ+GtI2KuMP99TvmZScAO4U5iTWGyg + 5df710+EdDKlEWP+0rjWklZQ28EnKJjPg7KdT2oduCJF6qR2JagBkmYY8uhR + gK78X+lUHqtEssxccnu81eMg0uKFckS+T8fZdeQXq0qXc/Yjtw0stskKR2Yw + PSWakPFkmszoJA6CWTjGJKSLxTQmMxyPAvhBt9hnWu/9Dv1nTflKeIq87EmW + Wu9YSHCjKKVdA78HasR2cGKdK1ToKTHT0gpcTLJeQ8GoDPanxXT6BGXcE7om + eK08KqWQbczu6V3infHXf9xhQHer9sjfvdtBjLthWUaA+E4TW9zQFJXgew9T + M1yc2GZseqKCRKYO+XVUrmkmRQLedO8NBaPRyBTDbu2RHTSQGfSQgWZtIrwP + 4e4Cbl3PkvUNb1O/hiq6slNpnkUep3pFzh2ie2Xmnk/5rOFltK9w/gTqZ4EH + 6F8RpXMoYHkhbyBYDrFpV3b/XaDUHOihdSLsJERumHcPgOrZx4hTHa4zBnPf + 5vh4rvw5j604pziL3JV2/+McqlJs/xQtEacRjRJ8iJxVkLNZV3WJJ/Hd6lxH + 6EMJO52s1E6cyabrexYkT2wnb1xqZK0a3FNv5/HycM/7z/swELuPZOrFAw3u + XipBnx/hdTD49HH+5+SxOxxsmiRM2dZXzBuTKaWkdRM7nmDITZ+ltKVlQ+7d + ZEtgQVHZwenOjyDdt7veZ44zXnNOmH1Hp96heXfBpLtoxp0w3fbPtXMm2iWf + NC76oHHh54y3zNp3ecV+cxkDw21iWy8oLJsURh/+AwAA//8DAGMwtn7xFQAA + http_version: + recorded_at: Fri, 29 Apr 2016 22:36:23 GMT +recorded_with: VCR 3.0.1 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/payment_has_associated_device_data/sends_it_to_Braintree.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/payment_has_associated_device_data/sends_it_to_Braintree.yml new file mode 100644 index 00000000..08c9531f --- /dev/null +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/payment_has_associated_device_data/sends_it_to_Braintree.yml @@ -0,0 +1,116 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + Card + Holder + carmella@sanfordpfeffer.co.uk + + Card Holder + + John + Doe + 10 Lovely Street + Northwest + Herndon + AL + US + 21671-9798 + + fake-valid-nonce + + true + + + + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.60.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Mon, 25 Apr 2016 15:00:37 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff + X-Authentication: + - basic_auth + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + Etag: + - W/"61828e38f3e6ec0e3f2b0851143011ef" + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 72f44c6f-2976-4d40-92a9-228aae1a6eb3 + X-Runtime: + - '0.888998' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIABUxHlcAA7RY247bNhB9z1cYftdK8mXtDbRKFw2KoEiDFkmKIC8BJY5t + ZSVSISmvna/vkLpRku21vemDAXPmDDXk3I4UvNll6WgLQiac3Y/9G288AhZz + mrD1/fjzpz+c5fhN+CqIC6l4BiJ8NRoFCQ2nd3fzpT/1AhcXWoa6eEOYcnD9 + M2Lz/c8fd2rxlD3tZpPAtbUavUqEVA4jGYS/E0ED1xJofUrq1TueUhCB20q0 + PuZZTth+xJL0fqxEAWPXyCEjSRrGRGSQpuQ3SdiKC5qvYLUCcRPzm+IxcEuQ + hucbzmCwyYrsBrIniGSihthYAFFAHaJGap/D/ZjiUiUZjMOJ59863syZzD/5 + 89ee93q6+Bq4rYGxL3J6mX1rUD7fxMVZJZBS2bhEE+XgJVBZbUqEIPux1nb1 + pQRlUZKmGHGHUCpAylpexlps6yhXsjoZnE4i2NIWawX2T75h/UhXqDa6bzn0 + gl0/9HDIK61UAkA1/vve6D3fQroffTSKwO0BWkvYKWBU32il+sCF2jyBRKOB + zvKYxyRN1D58B4JRjgdrJC1IwBrLKnx4H7jV31aXc6lI6mCpQTjxbxe+c7e4 + WwauLbdPXzAl9kbskDTfkEn4+SNe+gH5KaspWj0cMpseM2MFxjSJw+XM69nV + mqGhCd1nhgVDMQCYr3LEV6MHAyftLv0Iv6yWql1eWFFmD/dIPWCdsHDm+ZPl + UmOacAa6mBz9uPDfROoTNmsbsTG9rG17o7q59ZWNEc9050xIirf5yPgT05fX + yFpYeZ985SRSFoTFELa3bEsbi5df9fldoEXqElG6DEzqDqQ1nkKUqPbE5bJV + rkiR1n5HnKdA2DjUHUFDjbIFFwLD5GDxFan239q0r6lNYJcnwvjjZJypTehP + dCPoCQ+g90AE3t7E68CNtIPGmuj5viKphMrK8mQDJFUbzA1o3bZkNSzJyBqc + QqThRqlcvnZdIiUoeRMJkjDd9tZ4wCeyx/mXuTnZZ8DUtwzUhtNvKV9zd4s5 + e5Oz9Rtg20RwpgH3ODtpxHfY+pv9mydiOunqiAh7bF3rSGuo6eSz0F8u/aqt + zxoduiJ4aqV2LWgAAnKCefSBo676X+tkEclYJLm+5O6Ya8ZCoPgjsPD75pZG + 68AtV7WuYMmPwvSwyCQrHjnBKSrCGZ3O5vECZpHvLyZTQidIHuYRXZDI8/GH + DeOYabP3L2hBW2AZdyR9PJIsjd6yEOhGWUqHBv8A1IrNACWqkGGpB6oHphHY + mHi7xYKROe4P5YD6C8t4ILRNyFY6IAQXXczhKV7hrQk4fNxpQH+r7tQ/vNtJ + jL1hVUaI+A6xKW5sipKzo4dpWC+JTTPWPVFiIoNFiC2VbZoLHqM3/XtDYuN5 + uhgOa5/ZQSGfCR9y1Gx1hI8h7F3Qrdv8drXbdClgSxlt2bl0zyCfp3xlzp2i + fVXmXkn9jPV19K88wRkU0ABP0MAyVJdQwepWXkC0LILTLe/hi0GlOdFIm2w4 + SIzsWB+eAvWznyNQTbgumM5Dm+dndO3PZZTFOsWlJK8y/R/nUZ1lx6dphTiP + cFTgUySthlzMvup7PIv31ud6hkZUsPNJS+PEhay6uWdOi9h09NalVtYpwyMl + dxk/vz3yKvRrmIjZRyTy0UEN6V8qDf/+8G7uffn65Z+7t1/6Q8KkSZxI0/3K + uaMzpZJ0buLAEzTJGbKVrrTqyYOb7AgMKKiaOBz8KNJ/0Rt89rjgdeeMGfjs + 9Ds1966deFfNujOm3PH5dslku+YTx1UfOK78vPGSmftL3rdfXMtId9vYNgvA + ZZvH4av/AAAA//8DAO/QERUSFgAA + http_version: + recorded_at: Mon, 25 Apr 2016 15:00:37 GMT +recorded_with: VCR 3.0.1 diff --git a/spec/features/checkout_spec.rb b/spec/features/checkout_spec.rb index 95d70a4a..892e0df5 100644 --- a/spec/features/checkout_spec.rb +++ b/spec/features/checkout_spec.rb @@ -13,7 +13,9 @@ end it "Accepts a CC payment" do - visit "/products/#{product.slug}" + using_wait_time(5) do + visit "/products/#{product.slug}" + end click_on 'Add To Cart' click_on 'Checkout' @@ -53,6 +55,34 @@ expect(card.gateway_payment_profile_id).to be_present end + it "denies a fraudulent card" do + using_wait_time(5) do + visit "/products/#{product.slug}" + end + click_on 'Add To Cart' + click_on 'Checkout' + + fill_in_address + click_on 'Save and Continue' + click_on 'Save and Continue' + + # Payment + expect(page).to have_content(gateway.name) + + braintree_fill_in 'Card Number', with: '4000111111111511' + braintree_fill_in 'Expiration', with: "12/20" + braintree_fill_in 'Card Code', with: '123' + + click_on 'Save and Continue' + expect(page).to have_content('Gateway Rejected: fraud') + expect(page).to_not have_content('Place Order') + + # Assert the payment details were not stored + order = Spree::Order.first + expect(order.state).to eq("payment") + expect(order.payments.count).to be(0) + end + def fill_in_address fill_in "Customer E-Mail", with: "han@example.com" within("#billing") do diff --git a/spec/models/spree/order_spec.rb b/spec/models/spree/order_spec.rb new file mode 100644 index 00000000..a6464deb --- /dev/null +++ b/spec/models/spree/order_spec.rb @@ -0,0 +1,10 @@ +require 'spec_helper' + +describe Spree::Order, type: :model do + let(:order) { Spree::Order.new} + + it "has a braintree_device_data attribute" do + expect { order.braintree_device_data = 'abc123' }.not_to raise_error + expect(order.braintree_device_data).to eq("abc123") + end +end diff --git a/spec/models/spree/payment_spec.rb b/spec/models/spree/payment_spec.rb index 08f93261..e9cd7dd4 100644 --- a/spec/models/spree/payment_spec.rb +++ b/spec/models/spree/payment_spec.rb @@ -1,8 +1,8 @@ require 'spec_helper' describe Spree::Payment, type: :model do + let(:payment) { Spree::Payment.new } it "has a payment_method_nonce accessor" do - payment = Spree::Payment.new expect { payment.payment_method_nonce = "abc123" }.not_to raise_error expect(payment.payment_method_nonce).to eq("abc123") end diff --git a/spec/models/spree/permitted_attributes_spec.rb b/spec/models/spree/permitted_attributes_spec.rb index bfa4163c..ccb10f5a 100644 --- a/spec/models/spree/permitted_attributes_spec.rb +++ b/spec/models/spree/permitted_attributes_spec.rb @@ -4,4 +4,8 @@ it "payment_attributes includes :payment_method_nonce" do expect(Spree::PermittedAttributes.payment_attributes).to include(:payment_method_nonce) end + + it 'checkout_attributes includes :device_data' do + expect(Spree::PermittedAttributes.checkout_attributes).to include(:braintree_device_data) + end end diff --git a/spec/solidus/gateway/braintree_gateway_spec.rb b/spec/solidus/gateway/braintree_gateway_spec.rb index 851d41e0..5b5c332e 100644 --- a/spec/solidus/gateway/braintree_gateway_spec.rb +++ b/spec/solidus/gateway/braintree_gateway_spec.rb @@ -4,12 +4,12 @@ let(:payment_method){ create_braintree_payment_method } let(:user){ FactoryGirl.create :user } # #create_profile doesn't support options, does it need to? - # let(:device_data){'{"name":"device_data","value":"{\"device_session_id\":\"d99cb85002cc4ac9e9a23c4a79d943ea\",\"fraud_merchant_id\":\"600000\",\"correlation_id\":\"c3c1356c70a3565af86e9add0d09315f\"}"}'} + let(:device_data){"{\"device_session_id\":\"75197918b634416368241bb8996b560c\",\"fraud_merchant_id\":\"600000\"}"} let(:payment) do FactoryGirl.create(:payment, order: FactoryGirl.create(:order, - user: user, + user: user ), source: FactoryGirl.create(:credit_card, name: "Card Holder", @@ -40,6 +40,74 @@ end end + context 'payment has associated device_data' do + it 'sends it to Braintree' do + payment = FactoryGirl.build(:payment, + order: FactoryGirl.create(:order, + user: user, + braintree_device_data: device_data), + source: FactoryGirl.create(:credit_card, + name: "Card Holder", + user: user), + payment_method: payment_method, + payment_method_nonce: nonce) + address = (payment.source.address || payment.order.bill_address).try(:active_merchant_hash) + + expected_params = { + first_name: payment.source.first_name, + last_name: payment.source.last_name, + email: user.email, + credit_card: { + cardholder_name: payment.source.name, + payment_method_nonce: payment.payment_method_nonce, + billing_address: payment_method.send(:map_address, address), + options: { + verify_card: true, + }, + }, + device_data: device_data + } + expect_any_instance_of(::Braintree::CustomerGateway).to receive(:create).with(expected_params).and_call_original + payment_method.create_profile(payment) + end + end + + context 'order gets updated with device_data' do + it 'order passes device_data to create_profile' do + order = FactoryGirl.create(:order_with_line_items, user: user) + + bill_address = order.bill_address + expected_address = payment_method.send(:map_address, bill_address.try(:active_merchant_hash)) + expected_params = { + first_name: "John", + last_name: "Doe", + email: user.email, + credit_card: { + cardholder_name: "John Doe", + billing_address: expected_address, + payment_method_nonce: nonce, + options: { + verify_card: true + } + }, + device_data: device_data + } + + update_params = { braintree_device_data: device_data, + payments_attributes: [ + { amount: order.total, + payment_method_id: payment_method.id, + payment_method_nonce: nonce, + source_attributes: + { cc_type: "", + name: "John Doe", + address_attributes: bill_address.attributes.except("id", "created_at", "updated_at") }}]} + + expect_any_instance_of(::Braintree::CustomerGateway).to receive(:create).with(expected_params).and_call_original + Spree::OrderUpdateAttributes.new(order, update_params, request_env: nil).apply + end + end + context "with a valid credit card" do before do payment_method.create_profile(payment) @@ -346,6 +414,25 @@ payment_method.authorize(500, creditcard, options) end + context 'device_data is present' do + it 'should send device data' do + expected_params = { + customer_id: creditcard.gateway_customer_profile_id, + options: {}, + amount: "5.00", + payment_method_nonce: nonce, + channel: "Solidus", + device_data: device_data + } + + options[:device_data] = device_data + + expect(payment_method).to receive(:handle_result) + expect_any_instance_of(::Braintree::TransactionGateway).to receive(:sale).with(expected_params) + payment_method.authorize(500, creditcard, options) + end + end + context 'when a billing address is provided' do let(:bill_address) do create(:address, address1: '1234 bill address') From c5e06676d2744b07750bccc283b48ad5c36fcf0a Mon Sep 17 00:00:00 2001 From: "Hector E. Gomez Morales" Date: Wed, 4 May 2016 13:06:52 -0500 Subject: [PATCH 093/163] Add tests for unsuccessful credit card verification. --- ...l_credit_card_transaction_amount_2000_.yml | 400 ++++++++++++++++++ .../unsuccessful_credit_card_verification.yml | 192 +++++++++ spec/features/checkout_spec.rb | 73 +++- 3 files changed, 664 insertions(+), 1 deletion(-) create mode 100644 spec/cassettes/Braintree_checkout/unsuccessful_credit_card_transaction_amount_2000_.yml create mode 100644 spec/cassettes/Braintree_checkout/unsuccessful_credit_card_verification.yml diff --git a/spec/cassettes/Braintree_checkout/unsuccessful_credit_card_transaction_amount_2000_.yml b/spec/cassettes/Braintree_checkout/unsuccessful_credit_card_transaction_amount_2000_.yml new file mode 100644 index 00000000..a72f7375 --- /dev/null +++ b/spec/cassettes/Braintree_checkout/unsuccessful_credit_card_transaction_amount_2000_.yml @@ -0,0 +1,400 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token + body: + encoding: UTF-8 + string: | + + + 2 + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.60.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Wed, 04 May 2016 18:03:57 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff + X-Authentication: + - basic_auth + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + Etag: + - W/"b275de874c0c26753f98e879a2ee1462" + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 26c82bd4-8eed-4384-a2e9-d408dba70b66 + X-Runtime: + - '0.221783' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAI05KlcAA6RVXW+bShB976+I8t5bWExukZJU8QcYZNY1thfYN9glMXgX + fIsBw6+/s3aSppJvVenK4sHL7Jw558wM999OUty02Y86r8qHW/0v7fYmK1nF + 8/Ll4Xa7sT9/vf32+OmeiTwrj5+P1T4rHz/d3Ny3iWiyx6z3EI28IQmtxi2q + fjHxdjwKqtTwDpm0NXUeSNFQRHo29w5pucqXuZf7w2xEp1jEYWz4aNv7zkzD + U9fww5kRDy8jXMC7gqEYfv70qYtDssOFq/ubF0Q3KwMXMVo6286X9h5iC+pQ + +ezgnoa2RsPgOY5Wll88nXCudXgNj706LadV5w+VjvuR7hdM96ds5G/2P1R+ + 3z7B/6ceS10wias4NLUIif336JCnBTGzcmbyKTfSiI/w1GN8A3cK2vHQq5MQ + PyeImN8jcVyGwT/csLvE2OW8wKMM+IImRYpMmYScMNkp/hWfBx0bqnaBIHZt + DoC3j6U1Wkivj0PR8LknaMh33CFGHO2bGFnHZbHS/N46gt5F4tgQ47eZ9Boc + iTu2ERo2+JEbL5qfW0XqCJGWSofxYWHEpwXCbSrpgRqkj6PgkKLRuS7IU6cO + Uf4MbnFIo3WX09BESeRBvC5e/Xqvz827PEanA8RoK8hNIq8G3/NkHmhs7t8t + emvHnH3DkN1Qx2uziZkzaYPvAXhDSsAWHNnmQkI9mwo899s0hJrQbgcxw8K4 + prfbvmFGZ73c2pX2wBDRmE76dOLeuXKn8fl4WOZf2zjCA40g12+0PPOIiJbY + 1+7D+cREgHdM+z/z5pwvNHfpXEDPY6Xl3255Jfcrj0VoN3F4MrkjCvaHGP+h + Tf4MnnFnp/SdbREpeOSJAGqJ5UlQwIdcOoUY5tgmPPXv3p3rlsGBGeM6jsQy + DnWh/N0aY8i/vfTypbc8dT8tSZ1O4D7MNpd2kZGPnJ9UP4jMsY/MOYmz52ur + YxPwryTgkTemhuKp+iz4ZTaUVjSCnojGNV2bMD9ayx1rOOsM3lPyf3y/xF3p + XZgHUiTI0vnE7IA/7J3u/R51BGiAtdUH/Df+4GWdGtxVtYOGGiuJAK2AFz0w + aTXQ4w2fme1GEo0jq0/6n9pfmbeWSgp7xRQKl8N7qFftNfw++4BNpV0ztIVZ + +MB3i+GewhJ7xS0N7QH492995/dqdmAPO6dDKvlH/YdrffFhNscx7BCoRVuH + l53AFN55FrHOSuAqsbmOcLtC1h7O71xBNsHEsy77TzRn37YE+t6rqcohKcwL + Vjr93GmvdV/fa6pvKODo7ZkbotIttYf7L5dv0af7L79+pf4FAAD//wMATUIw + KdwGAAA= + http_version: + recorded_at: Wed, 04 May 2016 18:03:57 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + Han + Solo + han@example.com + + Han Solo + + Han + Solo + YT-1300 + + Mos Eisley + AL + US + 12010 + + 9ab3d281-9300-4e01-908b-fe21e0d0a30b + + true + + + {"device_session_id":"c9f24a7149bf37858d70cfd9d678bebd","fraud_merchant_id":"600000"} + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.60.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Wed, 04 May 2016 18:04:02 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff + X-Authentication: + - basic_auth + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + Etag: + - W/"f7223d2129f36d863f67c7a1f2b7c96c" + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - fc6b3eb9-dfcb-47e4-b0d5-574519adf416 + X-Runtime: + - '1.189160' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAJI5KlcAA7RY227jNhB9z1cYflck2fLaCRSlAdqiKLrFAkkKdF8WtETb + 3EiklqQce7++Q0qUKMkXOUnzFM6cIYec27HC+12WjraYC8Lo3di/9sYjTGOW + ELq+Gz8//e4sxvfRVRgXQrIM8+hqNApJEi28YL4I5vPQhYWSgS7eICodWP9c + 0tn+548bOX/NXnfBJHRtrUKvCBfSoSjD0R+Ihq61VuoUmdUjS1noNmuljVmW + I7ofUZLejSUv8NjVcpwhkkZwzC94h7I8xdeADN1SrAD5hlHcM1uhXU/2ipeC + yD425hhJnDhIjuQ+x3fjBJaSZHgcTTz/k+PNHC948he3XnDr+V9DtzHQ9kWe + DLefgH1jUJ6vw+CsCE4TUbuUEOnEiCei2hRxjvZjpW3rSwnIliRNIcAOShKO + hTDyMrTx1gS1kpnYO62429IGezqwFehkeM2hh4NcaYXkGMva/3+fHH/qeaHb + kTcGeCcxTdRDlqoj+6YsRimR++gzE6PfiEjxHtwzwgbH8RrqJXr4K3Srfxtd + zoREqQM1hCMfogpu2SL7igWVfK/FDkrzDZpEz4/wsgfkp6ymYPVwyGx6zIwW + EDgSR4vA69gZTd9Qx+eZQlUko0cJSSlGbDV60HDU7NIN4/sKptrlorLxe2Wj + 93CPJD0UA40CX/0pTB3JUFWMo46L/iFC3bBe24gNSxMoApPxozKju5ragmWq + FRKUwlO+UPZK1cvVsgZWPiZbOUSIAtEY2/i+sjZ8/3MPL/cGqSpEqirQ6duT + GnyCl0Q2FymXjXKFitT4vWQsxYiOI1WiCqqVDbjgECoHaq9Ilf/Wpl2NMcG7 + nHDtj5MxKjdQmzAbusID6D1GHF5v4rXgWtpCQ110fF+hVODKyvJkg1EqN5Ai + VlAtmYGRDK2xU3AYaVLm4tZ1kRBYiuslR4SqRreGC76ivRpzbo72GabyW4bl + hiXfUrZm7hby9jqn63tMt4QzqgB3AtFkyXbQ4+v96xMhnVSFLBF9aVxrSQ1U + t+wgKqumWhgduMJZamW4EdQAjnNErKAZgQGIYiliTnL10u2hVjfrULIXTKP5 + ehJMYciXK6MrKPlR6Ga21BkL9yYwM3m0WM6mM28xu1kEeJLMggmOk7k/9QMf + e95sEkPnOGZa7/0BvWiLacYckbwcyZhab1lwcKOsp0NjvgdqxHpcIlmIqNTj + RM1JLbAx8XYLVSNy2B+Xk+oz1HJPaJugrXAw54y3MYdna4W3RmH/uNOA7lbt + YX94t5MYe8OqlgDxHce6wqEzCkaPXqamtCjWHVk1RgGJjC22a6ls05yzGLzp + vlvke4rDHNOe2UECxYkectBsVYSPIexdwK3vs8lMxG3C1xBEWzaQ3GngAIJX + 5twpkldl7mVETxsNI3ulp8MIn8aeIH1lUAYSv+rq76BVFp1p13Cf61eaE92y + DvlBGmRH9HC/N2efo0t1cC6Yw32b89PY+HMZObFucRGlq+z+x4ljsuvM0Kxg + w8hFBT5FyAzkYqZlXnIQ1TWXO0MZKthwglI78TYiXb85S4pY92/r2WtZqx6P + 1N7H/AL6GN6h9+FEvDigQd23TaIvf3/55P06+/qnP7vpjgSdLTERugOWU0Yl + TCVpvcSBExSl6XOTtrTq4r2XbAk0KKz6Oj74waP7+673SeOCXzjnJ975WXdq + yl043wZNtmEz7fg0GzjH3vL54k0fL9746eI9E/ZDfke/u2CBwTbhrxcYlk2y + Rlf/AQAA//8DACn7genCFQAA + http_version: + recorded_at: Wed, 04 May 2016 18:04:02 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + body: + encoding: UTF-8 + string: | + + + R369273730-W7P26W87 + + + 2500.00 + Solidus + + Han + Solo + YT-1300 + + Mos Eisley + AL + US + 12010 + + 7g243m + 80478477 + sale + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.60.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 422 + message: Unprocessable Entity + headers: + Date: + - Wed, 04 May 2016 18:04:04 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff + X-Authentication: + - basic_auth + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + Cache-Control: + - no-cache + X-Request-Id: + - 16baa6d2-73ec-4a3d-90ac-3f2cc5f87bef + X-Runtime: + - '1.087636' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + EhgAAA== + http_version: + recorded_at: Wed, 04 May 2016 18:04:04 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token + body: + encoding: UTF-8 + string: | + + + 2 + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.60.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Wed, 04 May 2016 18:04:05 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff + X-Authentication: + - basic_auth + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + Etag: + - W/"2000db203cafcccbf457987ae3d6f2f5" + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 3f6c5282-e70a-49e5-af8b-097011e31550 + X-Runtime: + - '0.228220' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAJU5KlcAA6RVXW+bShB9z6+I8t5bvJjcIiWp4g8wyKxrbO/CvsEuCeBd + 7FvM56+/g92kqeRbVboPKySYnTPnnJnh4Wur5G2dfC+zQ/F4N/pLu7tNCn4Q + WfH6eLfbWp++3H19unngMkuK06fTYZ8UTze3tw91JKvkKelcxAK3j6hZOfmh + W07dVAT+IdbdY6IsbXjvK1kxRDq+cI9xsc5WmTNmuZWyWZpjSvYeZTlTOx3b + Xs9yroX9rsM2ST3l6autrzzFlEe9Ptzy8Wr7CsfRPXvee3Tespm1D6mDsD0f + vdi4Y9TSGPVfwmBtevlzizOtwRs41rpdzQ4NHs5m3OF+jXC+bvH29bs3e248 + qx3Bs8NqJLnCh5AaWoDk/ltwzOKcGEkxN8RM6HEgxnjmcrGFOzlrBHXLiOKX + CBHjWyBPK+r/I3SrifQ0EzkeJ8AXNMljZKiICsJVA/zdg1j4De8P9RJB7Mbo + AW8fKnO8VG4XUlmJhSsZFamwiR4G+ypE5mmVrzWvM0+gdx7ZFsR4daLcCgfy + nm+lhnVxEvqr5mVmHttSxsWgw+S41MN2iXAdK3ZkOunCwD/GaHyuC/KUsU0G + f3onP8bBpskYNVAUuBA/khe/3Pf6nKzJQtQeIUZbQ24SuCX4nkULX+ML737Z + mSm39xVHVsVst06mRsaVBb774A0pAFsKZBlLBfVsDxqeeXVMoSaUphDTL/Vr + ejv1G2Zw1sspHWX1HBGNj0gXT517R6WaWEz6VfalDgPcswBy/UbLM4+AaJF1 + 7T68nxoI8E5x92fenPNRI40XEnoeD1r+7RRXcv/gsaRWFdLWELbM+R9i/Ic2 + 2Qt4Jux00He+QyQXgSt9qCVUrWSAD7lGDGK4bRlwyt99O9et/CPXJ2UYyFVI + R3Lwd6dPIP/u0suX3nKH+3FByngK92G2hbLyhHzk/Dz0g0xs68TtVp4935gN + n4J/BQGP3AnTB55Dn/m/zMagFQugJ4JJyTYGzI9WC9vszzqD94z8H98vcVd6 + F+aB5BEyR2JqNMC/CWnzfo/ZEjTA2voD/ht/8LKMdeEMtYOGGi+IBK2AFzty + ZVbQ45WYG/VWEU0gs4u6n9pfmbeaKQZ7xZADroDvUO+w1/D77AM2U1bJ0Q5m + 4QPfHYZ7A5bcD9xiavXAv3vrO68bZgf2sN0eYyU+6t9f64sPszkJYYdALdqG + XnYCH/DOs4hHvACuChubANdrZO7h/b0jydafuuZl/8nq7NuOQN+7JRtyKAbz + ggedfu60H3Vf32tD3zDAGdVnbogpp9AeHz5f/kU3D59//Uv9CwAA//8DAPs2 + iK/cBgAA + http_version: + recorded_at: Wed, 04 May 2016 18:04:05 GMT +recorded_with: VCR 3.0.1 diff --git a/spec/cassettes/Braintree_checkout/unsuccessful_credit_card_verification.yml b/spec/cassettes/Braintree_checkout/unsuccessful_credit_card_verification.yml new file mode 100644 index 00000000..f4767bc1 --- /dev/null +++ b/spec/cassettes/Braintree_checkout/unsuccessful_credit_card_verification.yml @@ -0,0 +1,192 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token + body: + encoding: UTF-8 + string: | + + + 2 + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.60.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Wed, 04 May 2016 18:03:52 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff + X-Authentication: + - basic_auth + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + Etag: + - W/"2c60f71f9a0b4b1b5a6a021212da98f2" + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - bcc8d43d-8fee-4012-be46-8d30ab09d6cb + X-Runtime: + - '0.237791' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAIg5KlcAA6RV32+bOhR+719R9X0bmNI7pLZTkxSCFZyFJAb8BjZdABty + R4DAX38Pydp1Uu40aQ9WIvv8+r7vnMP9l6OS1236vc6q8uFG/6jdXKclr0RW + fnu42W7sD59vvjxe3XOZpeXhw6Eq0vLx6vr6vo1lkz6mPUYsxEMcWI2bV/1i + inci9KvEwPtU2dp47yvZMER7Psf7pFxly8ztPRQNzCE7bygMb/M0kLzQow2T + EfIV28iCOLSIchv+2zviuObSwXmkPMNTz300bJGHsCIOzshgy+XMH9/0F4f0 + LLA1FvgvUbiyvPzpSDKtI2s49uq4nFWdN1S6t741l7OnozfjcLbfvdlT59lH + HX57onTJFamiwNRCJIuv4T5Lcmqm5bMpZsJIQnFLZpiLDfjkrBMBruOAvMSI + ml9DeVgG/r/CsLvY2GUiJ7cp4AVO8gSZKg4E5aoD/LgSc7/jQ9UuENiuzQHy + FZGybhcK91EgGzHHkgViJxxqRGHRRMg6LPOV5vXWAfjOY8cGG69NFW5IKO/4 + RmrEEAdhfNO8zMoTR8qkHHmY7BdGdFwg0iaK7ZlB+yj09wm6PdUFcerEoaM+ + g5vvk3DdZSwwURxisNflWS/8Vp+bdVmEjnuw0VYQm4a4Bt2zeO5rfO7dLXpr + x52i4chumIPbdGpmXNmguw/a0BJyS4Fsc6Ggnk2lkZnXJgHUhHY7sBkWxiW+ + 3fY1Z3jiy61dZQ8cUY3rtE+m7p2rdpqYT4Zl9rmNQjKwEGL9hssTjpBqsX3J + H+6nJoJ8h6T/M21O8QJzl8wl9DwZufzHLS/E/oFjEdhNFBxN4cic/2GO/+Em + ewHNhLMb+X3eIpqLEEsfaonUUTLID7F0BjbcsU049e/eTnUrf8+NSR2FchkF + uhz13RoTiL899/K5t/Don5S0TqbgD7MtlJ2n9D3mp7EfZOrYB+4c5UnztdXx + KehXUtAIT5gx4hz7zP9lNkauWAg9EU5qtjZhfrRWONZw4hm0Z/RvdD/bXehd + mAeax8jSxdTsAH8XBd2bH3MkcEC01bv8r/hByzoxhDvWDhxqvKQSuAJcbM+V + 1UCPN+LZbDeKagJZfdz/5P7CvLVMMdgrphzzCniHese9Rt5mH3IzZdccbWEW + 3uHdEvAbc8lixJYE9gD4+9e+8/pxdmAPO8d9osR7/odLffFuNicR7BCoRVsH + 553Ax3ynWSQ6LwGrIuY6JO0KWQXc37mSbvwpts77TzYn3bYU+h7XbIyhGMwL + GXn6udN+1H15r419wyCP3p6wIabcUnu4/3T+Fl3df/r1K/UfAAAA//8DAD3i + uhPcBgAA + http_version: + recorded_at: Wed, 04 May 2016 18:03:52 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + Han + Solo + han@example.com + + Han Solo + + Han + Solo + YT-1300 + + Mos Eisley + AL + US + 12010 + + 3c3cfcc3-d0ce-4064-a46a-91a2ecc9754d + + true + + + {"device_session_id":"f29573944537e6a65b299159a0842e79","fraud_merchant_id":"600000"} + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.60.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 422 + message: Unprocessable Entity + headers: + Date: + - Wed, 04 May 2016 18:03:55 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff + X-Authentication: + - basic_auth + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + Cache-Control: + - no-cache + X-Request-Id: + - 0c57c406-a2f7-457b-95ae-f9cf0bce886f + X-Runtime: + - '0.522538' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAIs5KlcAA6xXS2/bOBC+51cIvrN6WJbtQlG3wO6ihzYokGSBzaWgybHN + jURqScqN/32Hetuyi6RoTuY3Dw7n8Y2Sfngpcu8A2gglb2fhu2DmgWSKC7m7 + nT0+/E1Wsw/ZTUpLQUBrpYkGUyppILvxvLSGjPvZHzx7LOF2RrWmx5lfa/mD + WlpSTYvOglXGqgJ0c0SAw0EwIAaMi4cInm2j9WI5X8fxYr6EhCaLTbReh4s1 + DVZxBMt16k9tOm9bTStO0D/bU2mdJAncX+pPJb2N0MYSSQvIPlGJmsO5U8lp + h9yrXKX+cO40oKAiz9D1H/BCizKHd0wVmIYa7pSYBi4sYVT3tzsUj3uVc9B9 + EF5zzblksNmIPMd6Eco5VscMkle953VvqrWM1QC2v+ffBxLOXTrP8LEJvFiQ + HHgn9KTIb2dWV9A0xxCBYjQX9ph9Ucb7S5gcjhhGB441Neyw0NnHz6nf/hxL + maqk1UeCPQyE5uWeRtnjPabvAj62K5WxNK/FWRgFIT5rDA3Z9q+mG5v7WAD2 + UwF2rziRSjLI5mzOtozNCQ+wTeMgiQmNE0rWIY2AsfVyEXO865Lp4FmVFh96 + mlqcWrE9Ng3kEpr6Y2QU8MT4987ZL06aPxkAhEaE4HLScUVa4K10B9mfyrtT + 1vukpNKp36E3XTYEo7ZvCGxXaiuTlVoxVFT6GweGlQPuOrYWtTR0OPS01lT7 + C4YyARtlejBnTFhLp31da45aaHrFzxUGJ6fjddnPT3UaVztq4Ts9ouw/YC5N + +IsaJS+E3teLsnpuXN1MiTe4nE9FjVGf57Pbo7oRrkmv2lqkjrN6X9NqfGAg + u+2qlCz1+5jaWf299I5kXlJ5vERlb6TIV9Hj66jxOi2+ktp65qzf+iiFBe7d + 45yA8dTW+4iFx/EaiHRISU+J3TxNN1tq1TNc6LS6RDKLsUXC0PmRp3WIszAM + F20R4iFUdE3ch0b2jzC02Y3NeUhsKXRNBqRQ0u7x4biAz8EL2kegGls2Ck7U + a7S/vWUp4mpQ8029YCboONo37fS0kuL/Coisig2KBMfNgOSGvMhpwpbAomS5 + 2vBtsoqidZDgOYg434ZukVw17btBQ0lxQB7ls1TfpZuqBugU9kBzu8fQYNAZ + YcO32kbYQaM59sJKYy1xTHdVjh00um0iGU2V4xZB80F5hPXh06NW+UinAzoF + YUzl1vOGyudB6wQ973i1JU5O3c4d3T0VDjlUvGI1943S2GPdNpssOETcmwm1 + 7Wcyx6MVBcyw5cKEBAsSxA/h6n0wf79YPNUuWoPWQ1Xyt3kYDFoPWphnghgd + Msazr3dfk2DxFK+fPt8N9FlXmQlT80qJDzyAK3SLtK888dd+g/R7GJfThf8c + fgAAAP//AwBdg0CpdgwAAA== + http_version: + recorded_at: Wed, 04 May 2016 18:03:55 GMT +recorded_with: VCR 3.0.1 diff --git a/spec/features/checkout_spec.rb b/spec/features/checkout_spec.rb index 892e0df5..352784a9 100644 --- a/spec/features/checkout_spec.rb +++ b/spec/features/checkout_spec.rb @@ -12,7 +12,7 @@ create(:free_shipping_method) end - it "Accepts a CC payment" do + it "accepts a CC payment" do using_wait_time(5) do visit "/products/#{product.slug}" end @@ -55,6 +55,77 @@ expect(card.gateway_payment_profile_id).to be_present end + it "unsuccessful credit card verification" do + using_wait_time(5) do + visit "/products/#{product.slug}" + end + click_on 'Add To Cart' + click_on 'Checkout' + + fill_in_address + click_on 'Save and Continue' + click_on 'Save and Continue' + + # Payment + expect(page).to have_content(gateway.name) + + braintree_fill_in 'Card Number', with: '4000111111111115' + braintree_fill_in 'Expiration', with: "12/20" + braintree_fill_in 'Card Code', with: '123' + + click_on 'Save and Continue' + expect(page).to have_content('Do Not Honor') + expect(page).to_not have_content('Place Order') + + # Assert the payment details were not stored + order = Spree::Order.first + expect(order.state).to eq("payment") + expect(order.payments.count).to be(0) + end + + it "unsuccessful credit card transaction (amount >= 2000)" do + product = create(:product, name: "Millenium Falcon", price: 2500.00, cost_price: 2000.00) + using_wait_time(5) do + visit "/products/#{product.slug}" + end + click_on 'Add To Cart' + click_on 'Checkout' + + fill_in_address + click_on 'Save and Continue' + click_on 'Save and Continue' + + # Payment + expect(page).to have_content(gateway.name) + + braintree_fill_in 'Card Number', with: '4111111111111111' + braintree_fill_in 'Expiration', with: "12/20" + braintree_fill_in 'Card Code', with: '123' + + click_on 'Save and Continue' + click_on 'Place Order', wait: 30 + expect(page).to have_content('processor_declined') + + # Assert the order is not confirmed + order = Spree::Order.first + expect(order.state).to eq "payment" + expect(order.payments.count).to be(1) + + # Assert payment failed (because of amount) + payment = order.payments.first + expect(payment).to be_failed + + # Assert payment details are saved even when processor fails + card = payment.source + expect(card).to be_a(Spree::CreditCard) + expect(card.year).to eq("2020") + expect(card.month).to eq("12") + expect(card.last_digits).to eq("1111") + expect(card.cc_type).to eq("visa") + expect(card.gateway_customer_profile_id).to be_present + expect(card.gateway_payment_profile_id).to be_present + end + it "denies a fraudulent card" do using_wait_time(5) do visit "/products/#{product.slug}" From d45973926991f64e6bcf664e5d734a7b354069c9 Mon Sep 17 00:00:00 2001 From: "Hector E. Gomez Morales" Date: Wed, 4 May 2016 14:39:16 -0500 Subject: [PATCH 094/163] Add test to check payment step requires the expiration date and cvv field. --- .../expiration_and_cvv_are_required.yml | 88 +++++++++++++++++++ spec/features/checkout_spec.rb | 29 ++++++ 2 files changed, 117 insertions(+) create mode 100644 spec/cassettes/Braintree_checkout/expiration_and_cvv_are_required.yml diff --git a/spec/cassettes/Braintree_checkout/expiration_and_cvv_are_required.yml b/spec/cassettes/Braintree_checkout/expiration_and_cvv_are_required.yml new file mode 100644 index 00000000..503c188f --- /dev/null +++ b/spec/cassettes/Braintree_checkout/expiration_and_cvv_are_required.yml @@ -0,0 +1,88 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token + body: + encoding: UTF-8 + string: | + + + 2 + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.60.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Wed, 04 May 2016 19:35:24 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff + X-Authentication: + - basic_auth + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + Etag: + - W/"ee4d2d3b6ba2c1dfcf00fc7a0987c572" + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 200f74ec-aafd-4a41-973b-5c2eb07e23cf + X-Runtime: + - '0.237916' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAPxOKlcAA6RVXW+bShB9z6+I8t5bvJjcIiWpYidgkFnXGO/CvsEuCeBd + 7FvM56+/g92kqeRbVboPCGmZnTPnnJnh7mun5HWTfq/yfXl/M/lLu7lOS74X + efl6f7MNrE9fbr4+XN1xmafl8dNxv0vLh6vr67smlnX6kPYuYqE7xNSsnWLf + L+duJkJ/n+juIVWWNp77StYMkZ4v3ENSrvNV7nSMen1EiWTF67AKnN4bmMTF + K4qK3RQP2Q4X26mHPC2i3uAN2w5TN/OedmhlO533tJ6uArHzgmcNU6dntmdE + RSZfbNwzammM+i9RuDa94rHDudbiDTzWulsF+wEH+x7PpwMeoinka3Gw/u49 + Pbae1U3g3WM1kVzhfUQNLURy9y085ElBjLR8NsST0JNQTPGTy0UAdwrWCupW + McUvMSLGt1AeV9T/R+hWG+tZLgo8TYEvaFIkyFAxFYSrFvi7e7HwWz7smyWC + 2I0xAN4uUuZ0qVzQRdZi4UpGRSZsokfhro6QeVwVa83rzSPoXcS2BTFekyq3 + xqG85YHUsC6OQn/VvNwsElvKpBx1mB2WetQtEW4SxQ5MJ30U+ocETU91QZ4q + scnoz+AUhyTctDmjBopDF+In8uyX+16fk7d5hLoDxGhryE1CtwLf83jha3zh + 3S57M+P2rubIqpntNuncyLmywHcfvCElYEuBLGOpoJ5gr+Enr0ko1ISyDGKG + pX5Jb6d5wwxPejmVo6yBI6LxCemTuXPrqEwTi9mwyr80UYgHFkKu32h54hES + LbYu3YfzuYEA75j0f+bNKR81smQhoefxqOXfTnkh9w8eS2rVEe0MYcuC/yHG + f2iTv4Bnws5GfZ+3iBQidKUPtUSqkwzwIdeEQQy3LQOe6nffTnUr/8D1WRWF + chXRiRz93eozyL899/K5t9zxflKSKpnDfZhtoawiJR85P479IFPbOnK7kyfP + N2bL5+BfScAjd8b0kefYZ/4vszFqxULoiXBWsY0B86M1wjaHk87gPSP/x/dz + 3IXehXkgRYzMiZgbLfBvI9q+32O2BA2wtv6A/8YfvKwSXThj7aChxksiQSvg + xQ5cmTX0eC2ejSZQRBPI7OP+p/YX5q1hisFeMeSIK+A71DvuNfw++4DNlFVx + tIVZ+MB3i+HeiCV3I7eEWgPw79/6zuvH2YE9bHeHRImP+g+X+uLDbM4i2CFQ + i7ah553AR7zTLOIJL4GrwsYmxM0amTs4v3UkCfy5a573n6xPvm0J9L1bsTGH + YjAveNTp5077UfflvTb2DQOcSXPihphySu3+7vP5X3R19/nXv9S/AAAA//8D + AHdVbl3cBgAA + http_version: + recorded_at: Wed, 04 May 2016 19:35:24 GMT +recorded_with: VCR 3.0.1 diff --git a/spec/features/checkout_spec.rb b/spec/features/checkout_spec.rb index 352784a9..cb4f3c39 100644 --- a/spec/features/checkout_spec.rb +++ b/spec/features/checkout_spec.rb @@ -154,6 +154,35 @@ expect(order.payments.count).to be(0) end + it "expiration and cvv are required" do + using_wait_time(5) do + visit "/products/#{product.slug}" + end + click_on 'Add To Cart' + click_on 'Checkout' + + fill_in_address + click_on 'Save and Continue' + click_on 'Save and Continue' + + # Payment + expect(page).to have_content(gateway.name) + + braintree_fill_in 'Card Number', with: '4111111111111111' + braintree_fill_in 'Expiration', with: '' + braintree_fill_in 'Card Code', with: '' + + click_on 'Save and Continue' + expect(page).to have_content('cvv is required') + expect(page).to have_content('expirationDate is required') + expect(page).to_not have_content('Place Order') + + # Assert the payment details were not stored + order = Spree::Order.first + expect(order.state).to eq("payment") + expect(order.payments.count).to be(0) + end + def fill_in_address fill_in "Customer E-Mail", with: "han@example.com" within("#billing") do From 777ab2721f740950b8db97f23dd096af1c507017 Mon Sep 17 00:00:00 2001 From: "Hector E. Gomez Morales" Date: Wed, 4 May 2016 18:33:42 -0500 Subject: [PATCH 095/163] Add test for unsuccesssful verification and fraud. --- .../fraudulent_purchase/fails.yml | 105 +++++++++++++++++ .../unsuccessful_card_verification/fails.yml | 106 ++++++++++++++++++ .../solidus/gateway/braintree_gateway_spec.rb | 20 ++++ 3 files changed, 231 insertions(+) create mode 100644 spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/fraudulent_purchase/fails.yml create mode 100644 spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/unsuccessful_card_verification/fails.yml diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/fraudulent_purchase/fails.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/fraudulent_purchase/fails.yml new file mode 100644 index 00000000..7b2a8752 --- /dev/null +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/fraudulent_purchase/fails.yml @@ -0,0 +1,105 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + Card + Holder + mohamed_moore@mayert.us + + Card Holder + + John + Doe + 10 Lovely Street + Northwest + Herndon + AL + US + 66086-5882 + + fake-gateway-rejected-fraud-nonce + + true + + + + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.60.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 422 + message: Unprocessable Entity + headers: + Date: + - Wed, 04 May 2016 23:13:23 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff + X-Authentication: + - basic_auth + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + Cache-Control: + - no-cache + X-Request-Id: + - 059ed4fc-ee3b-4088-94a8-9a6ec84044c7 + X-Runtime: + - '0.252607' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIABOCKlcAA5xWS3PbNhC++1dwdGoPCEm9rHpoJpl20kwn00MT99BLZkWs + RMQkwACgHPbXdwk+JVKNnRvx7bfYxT4Zvf6WZ94JtRFK3i/CV8HCQ5koLuTx + fvHw6R3bLV7HNxEUgqHWSjONplDSYHzjeZGDTP3ZHzxbFXi/AK2hWviO5Q+0 + qAANeaeRlMaqHHVzJOAgtLFMQo7xr6B55I+AjpNBh7xXGUcd+QPScTAHkcW5 + Sgnkn3OlNL7JoUJtX5WG/HHijpxo5MKyhAx2WI3SMXUGBn+8zuKlcFDbiyyj + 2DHgnCJlBsn56/5QqZx73cULf1M48zxHMlYj2t5OGHgf1AmzyvvoBJF/QRjr + 4jeLkiPvhX8qbdMnNKQ2kZ15phLIhK3i96glV/SEHhnTNB6pnOK3HyK//RxL + E1VKqytGVYYMsiKFZfzwkYI6g4/1CmUsZE4cb7fBbss2u90y8sf4kAj/aiao + BqscpWU52lRxJpVMMD7AI7IjWHyCior8CyaWgnDQULYMMjSnN1yrCktPPQ8Y + dZY4VE1tWV3SJWNk5O1EOeJ4EgkyQ76ThAnuSZHdL+pbmr7qqsq5SF2UpEDO + zfMoupdVTtCo/erXdZ0Z5WQTjhj/3oTD+6sNx53njEV+R7jpnigSsH2eqTbB + liZuo/m5i2Zdk07Qdv/p1E8Tl72p4xGczMXc+T/mqBKexT9vke+qnFdHnRSN + YOjVbVSuyhv1PkWQuFKnVMWmIA/qeE5FjVKhVUK+PSMAM0xLzRw/yEepnqT3 + 08+U4yuc5gYyuvqXb/PbyO/tt100N6GvzbDvzi+aAHkBspot1B+caz80054x + z67PspfMo37muTA8SEHdQA+iejGeOnhvKf/UQcMIHKLVz7GuaabLKrLqEeVs + MPdCxusgCMKwvkeeZ2gdh5ta0B56V+lqVi/x+G9hoNl1zXkIdSG063eWK2nT + OFzWMb4AZ9gVgo6XwTI4ozu0t97OJFYnwo0Utxom6Njbl67pqJTia4lMlvme + RILTUKcRRoMQ1/tlsNvwcLVdJcntOrz9Zb8/bMPwkECy3hwi/6pqXxUaC6D2 + aduu7rkG6AgpQmZTcg0HzgjraBz3wg6M5tgLS03ppCY+lhkV0cjaRDLquXrK + CMgG8gjr3YdKq2zE6YCOIIwp67W6B/k4sM7Qy6JXB1bLoV6XI9tT4RBDxcvE + TcFRGHusW1+TjUZI/WYGtv0L5XS0IscFVV24ZcGGBetPy9VduLpbrv5xV7QK + 7Q1lwV92w6DQbNHzbRj5cz/O/wEAAP//AwAANc9xdQsAAA== + http_version: + recorded_at: Wed, 04 May 2016 23:13:23 GMT +recorded_with: VCR 3.0.1 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/unsuccessful_card_verification/fails.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/unsuccessful_card_verification/fails.yml new file mode 100644 index 00000000..d96d247e --- /dev/null +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/unsuccessful_card_verification/fails.yml @@ -0,0 +1,106 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + Card + Holder + alfredo@carroll.com + + Card Holder + + John + Doe + 10 Lovely Street + Northwest + Herndon + AL + US + 31456 + + fake-processor-declined-visa-nonce + + true + + + + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.60.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 422 + message: Unprocessable Entity + headers: + Date: + - Wed, 04 May 2016 23:01:13 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff + X-Authentication: + - basic_auth + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + Cache-Control: + - no-cache + X-Request-Id: + - 259c91af-a8c8-408d-b7a8-5c1e74982de7 + X-Runtime: + - '1.130491' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIADl/KlcAA5xWbW/bNhD+nl8h+DtrSXGctFDUFS22YOuCAm06YF8Gmjzb + nCVSIymn+vc7Ui+ULbnL+k28e+54rw+Vvf1WFtERtBFK3i+SV/EiAskUF3J3 + v3j68jO5W7zNrzJaCQJaK000mEpJA/lVFGVeZNzncIhsU8H9gmpNm8XSo5YB + llVU07K3YLWxqgTdHlGwFdpYImkJ+XuqebYcCXpMQXvJgyo46GwZJD0GSiqK + nBZbDVz9xDAYVRSvmCoxFq/qgQwBwhJE8F7mpHjce+chlqi/7VwZzDaiKLBu + hHKOVTJBc5rZr2ov5zI7y+6DgpnUPMhYDWCHe5I4+qiOUDTRZ6/IlmeAsS18 + syA58EH5qLTdP4NBs4nuJDLFaCFskz+AllxhCoNkDNOww1HK333Mlt3nWMtU + La1uCE4YEFpUe5rmT5+xqDPysV2ljKWFV+fXyepmnS3HotCD5cUm4Og1JUhL + SrB7xYlUkkG+pQcglVYMsTjdHBhaYwWOwtAWgjfNGQa/qrKY5mmxcKPEtmnn + yuoanYwlo3AnxhmHo2BADAaEGiJ4JEVxv3Be2n3qJ0rTmmNMmu0pBjePw8qe + TziKRmvnsus3MivxTrpzoxc9KosTLxUOfC+96vMSjNqhsTiM1NYmH2r4V19D + N4Ze1S378TiQR9u13zGUibAF06M54xuvnabokaNRmF7xfUBwcroz836+i2ld + 7aiFZ9qg7m9grkz4RY2SM6EPvaPMzz/2MDcV3uBqPlW1RmFWT29P4zjGZl7Q + XrS1uPNn/b6Ean1gIK93/O75NlsOMXU7N0fjl8juP4kOqaKsqGxmp/oHCfCH + yO8FxHeZ9F5IXAMv+go8SWGBYy44SiZS2+gdjgMuXaDJUKiB8Potmz5omVUH + mJk/3ziZr3BwksT5kafNWeVJktx0rVmFUNE1cY98/hU5sn0P23OociW0pwhS + Kmn3eZK68p4JZ9ANUI2DnMYncC8dbu+4i7geeBbyz8dEOo72/z7lWS3FPzUQ + WZcbVAmO5I+sh4TJ6ZrdAkvXt3cbvl3fpenreI3nOOV8m6yQ8i6aDgOhoaK4 + OU/yINWzdOvWCnrAHmhh9xgaBMxI1sM4bIQNiPY4KGuN7cT93dUFDtHotolm + tG6OdAQtAngkG8KnjfuXGoXfCXqAMKZ27++GykNAnUjPh15tidNT96yO7p4q + Qw0Vr5knxVEZB1n/zE1ePpS4nAm13V8qx6MVJSxw6pI1iW9IvPqSXr+JkzdJ + +qd30Rl0HuqKv9zDNXoIBp0HLcyBoIyGivH80+OnD/H1H799fXj/S+BV32Um + jKeWChM8gmt0J+myPPHX/WYMDzS+WjM/7v8CAAD//wMANaxU+fULAAA= + http_version: + recorded_at: Wed, 04 May 2016 23:01:12 GMT +recorded_with: VCR 3.0.1 diff --git a/spec/solidus/gateway/braintree_gateway_spec.rb b/spec/solidus/gateway/braintree_gateway_spec.rb index 5b5c332e..5fc3c3ef 100644 --- a/spec/solidus/gateway/braintree_gateway_spec.rb +++ b/spec/solidus/gateway/braintree_gateway_spec.rb @@ -40,6 +40,26 @@ end end + context 'unsuccessful card verification' do + let(:nonce) { Braintree::Test::Nonce::ProcessorDeclinedVisa } + + it 'fails' do + expect{ + payment_method.create_profile(payment) + }.to raise_error(Spree::Core::GatewayError, 'Do Not Honor') + end + end + + context 'fraudulent purchase' do + let(:nonce) { Braintree::Test::Nonce::GatewayRejectedFraud } + + it 'fails' do + expect{ + payment_method.create_profile(payment) + }.to raise_error(Spree::Core::GatewayError, 'Gateway Rejected: fraud') + end + end + context 'payment has associated device_data' do it 'sends it to Braintree' do payment = FactoryGirl.build(:payment, From c377dab4374b91e5b4480b331a5c59446a735985 Mon Sep 17 00:00:00 2001 From: "Hector E. Gomez Morales" Date: Thu, 5 May 2016 09:33:26 -0500 Subject: [PATCH 096/163] Add a longer wait time to unsuccessful verification. --- spec/features/checkout_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/features/checkout_spec.rb b/spec/features/checkout_spec.rb index cb4f3c39..f64887d6 100644 --- a/spec/features/checkout_spec.rb +++ b/spec/features/checkout_spec.rb @@ -74,7 +74,7 @@ braintree_fill_in 'Card Code', with: '123' click_on 'Save and Continue' - expect(page).to have_content('Do Not Honor') + expect(page).to have_content('Do Not Honor', wait: 30) expect(page).to_not have_content('Place Order') # Assert the payment details were not stored From 197599c33737d742115f4e3bb0123612b27f41fa Mon Sep 17 00:00:00 2001 From: "Hector E. Gomez Morales" Date: Thu, 5 May 2016 10:38:53 -0500 Subject: [PATCH 097/163] Spree::OrderUpdateAttributes only defined for solidus 1.2+. --- .../solidus/gateway/braintree_gateway_spec.rb | 62 ++++++++++--------- 1 file changed, 32 insertions(+), 30 deletions(-) diff --git a/spec/solidus/gateway/braintree_gateway_spec.rb b/spec/solidus/gateway/braintree_gateway_spec.rb index 5fc3c3ef..bdfae642 100644 --- a/spec/solidus/gateway/braintree_gateway_spec.rb +++ b/spec/solidus/gateway/braintree_gateway_spec.rb @@ -92,39 +92,41 @@ end end - context 'order gets updated with device_data' do - it 'order passes device_data to create_profile' do - order = FactoryGirl.create(:order_with_line_items, user: user) + if Spree.respond_to?(:solidus_version) && Spree.solidus_version > "1.1" + context 'order gets updated with device_data' do + it 'order passes device_data to create_profile' do + order = FactoryGirl.create(:order_with_line_items, user: user) - bill_address = order.bill_address - expected_address = payment_method.send(:map_address, bill_address.try(:active_merchant_hash)) - expected_params = { - first_name: "John", - last_name: "Doe", - email: user.email, - credit_card: { - cardholder_name: "John Doe", - billing_address: expected_address, - payment_method_nonce: nonce, - options: { - verify_card: true - } - }, - device_data: device_data - } - - update_params = { braintree_device_data: device_data, - payments_attributes: [ - { amount: order.total, - payment_method_id: payment_method.id, + bill_address = order.bill_address + expected_address = payment_method.send(:map_address, bill_address.try(:active_merchant_hash)) + expected_params = { + first_name: "John", + last_name: "Doe", + email: user.email, + credit_card: { + cardholder_name: "John Doe", + billing_address: expected_address, payment_method_nonce: nonce, - source_attributes: - { cc_type: "", - name: "John Doe", - address_attributes: bill_address.attributes.except("id", "created_at", "updated_at") }}]} + options: { + verify_card: true + } + }, + device_data: device_data + } - expect_any_instance_of(::Braintree::CustomerGateway).to receive(:create).with(expected_params).and_call_original - Spree::OrderUpdateAttributes.new(order, update_params, request_env: nil).apply + update_params = { braintree_device_data: device_data, + payments_attributes: [ + { amount: order.total, + payment_method_id: payment_method.id, + payment_method_nonce: nonce, + source_attributes: + { cc_type: "", + name: "John Doe", + address_attributes: bill_address.attributes.except("id", "created_at", "updated_at") }}]} + + expect_any_instance_of(::Braintree::CustomerGateway).to receive(:create).with(expected_params).and_call_original + Spree::OrderUpdateAttributes.new(order, update_params, request_env: nil).apply + end end end From fa1ebc380accc2d8c848a1de16ee91069b3e1d61 Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Thu, 5 May 2016 16:12:37 -0700 Subject: [PATCH 098/163] Increase poltergeist timeout --- spec/spec_helper.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 2c3ab0ac..4c9dedac 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -23,7 +23,11 @@ require 'capybara/rspec' require 'capybara-screenshot/rspec' require 'capybara/poltergeist' +Capybara.register_driver(:poltergeist) do |app| + Capybara::Poltergeist::Driver.new app, timeout: 90 +end Capybara.javascript_driver = :poltergeist +Capybara.default_max_wait_time = 10 module SolidusGateway module Helpers From 868fe990cdfcdc183ca1b6334d1935e2d0120f47 Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Thu, 5 May 2016 16:13:19 -0700 Subject: [PATCH 099/163] Remove using_wait_time --- spec/features/checkout_spec.rb | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/spec/features/checkout_spec.rb b/spec/features/checkout_spec.rb index f64887d6..a8129bf6 100644 --- a/spec/features/checkout_spec.rb +++ b/spec/features/checkout_spec.rb @@ -13,9 +13,7 @@ end it "accepts a CC payment" do - using_wait_time(5) do - visit "/products/#{product.slug}" - end + visit "/products/#{product.slug}" click_on 'Add To Cart' click_on 'Checkout' @@ -56,9 +54,7 @@ end it "unsuccessful credit card verification" do - using_wait_time(5) do - visit "/products/#{product.slug}" - end + visit "/products/#{product.slug}" click_on 'Add To Cart' click_on 'Checkout' @@ -85,9 +81,7 @@ it "unsuccessful credit card transaction (amount >= 2000)" do product = create(:product, name: "Millenium Falcon", price: 2500.00, cost_price: 2000.00) - using_wait_time(5) do - visit "/products/#{product.slug}" - end + visit "/products/#{product.slug}" click_on 'Add To Cart' click_on 'Checkout' @@ -127,9 +121,7 @@ end it "denies a fraudulent card" do - using_wait_time(5) do - visit "/products/#{product.slug}" - end + visit "/products/#{product.slug}" click_on 'Add To Cart' click_on 'Checkout' @@ -155,9 +147,7 @@ end it "expiration and cvv are required" do - using_wait_time(5) do - visit "/products/#{product.slug}" - end + visit "/products/#{product.slug}" click_on 'Add To Cart' click_on 'Checkout' From 8beab3e00717170607e234b679377b946ee1cd03 Mon Sep 17 00:00:00 2001 From: "Hector E. Gomez Morales" Date: Fri, 6 May 2016 18:50:33 -0500 Subject: [PATCH 100/163] Enable collect of device_data for paypal flow. --- .../javascripts/spree/frontend/braintree/solidus_braintree.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/assets/javascripts/spree/frontend/braintree/solidus_braintree.js b/lib/assets/javascripts/spree/frontend/braintree/solidus_braintree.js index a3a70e65..35bece2e 100644 --- a/lib/assets/javascripts/spree/frontend/braintree/solidus_braintree.js +++ b/lib/assets/javascripts/spree/frontend/braintree/solidus_braintree.js @@ -61,7 +61,8 @@ var initializeBraintree = function(data) { } }, dataCollector: { - kount: {environment: braintree.environment} + kount: {environment: braintree.environment}, + paypal: true }, paypal: { container: "#braintree_paypal_container", From e78fb0c10f83c127af818e928d68d187c5721e8d Mon Sep 17 00:00:00 2001 From: "Hector E. Gomez Morales" Date: Mon, 9 May 2016 12:59:12 -0500 Subject: [PATCH 101/163] Add simplecov and added test for paypal flow. --- solidus_braintree.gemspec | 2 + .../Braintree_checkout/accepts_Paypal.yml | 298 ++++++++++++++++++ spec/features/checkout_spec.rb | 47 +++ spec/spec_helper.rb | 11 + 4 files changed, 358 insertions(+) create mode 100644 spec/cassettes/Braintree_checkout/accepts_Paypal.yml diff --git a/solidus_braintree.gemspec b/solidus_braintree.gemspec index 508ceab1..a5d9b5e9 100644 --- a/solidus_braintree.gemspec +++ b/solidus_braintree.gemspec @@ -32,9 +32,11 @@ Gem::Specification.new do |spec| spec.add_development_dependency 'ffaker' spec.add_development_dependency "rspec" spec.add_development_dependency "pry" + spec.add_development_dependency "pry-byebug" spec.add_development_dependency "byebug" spec.add_development_dependency 'sqlite3' spec.add_development_dependency 'database_cleaner', '~> 1.2' spec.add_development_dependency "vcr" spec.add_development_dependency "webmock" + spec.add_development_dependency 'simplecov' end diff --git a/spec/cassettes/Braintree_checkout/accepts_Paypal.yml b/spec/cassettes/Braintree_checkout/accepts_Paypal.yml new file mode 100644 index 00000000..584ae289 --- /dev/null +++ b/spec/cassettes/Braintree_checkout/accepts_Paypal.yml @@ -0,0 +1,298 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token + body: + encoding: UTF-8 + string: | + + + 2 + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.60.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Mon, 09 May 2016 17:45:28 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff + X-Authentication: + - basic_auth + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + Etag: + - W/"26b750a365028c85bd4a387367cfe27c" + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 026e4ad2-46df-4254-9a1f-cf3f7db4107b + X-Runtime: + - '0.240828' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIALjMMFcAA6RV0W6bShB9z1dEee8tXkxukZJUsRMwyKxrjJdl32CXBPAu + 5hYDhq+/g92kqeRbVboPCGmZnTPnnJnh7utRyes2/V7n+/L+ZvKXdnOdlnwv + 8vL1/mYbWJ++3Hx9uLrjMk/Lw6fDfpeWD1fX13dtLJv0Ie1dxKg7xKHZOMW+ + X87dTFB/n+hulSpLG899JRuGSM8XbpWU63yVO1MWyF2kIgTvzCuYxEW2W9nu + LkK+ikKcwZPjIeq94HHAoYewDefBTHrK06NiZzAb7havgxfMclyIAg+O/mLj + noWWxkL/JaJr0ysejzjXOrzRuhVZH/Gw13Cw73E/NVbBM1o9OQYO+Hfv6bHz + rOME3j1WE8kV3kehoVEkd99olScFMdLy2RBPQk+omOInl4sA7hSsE6FbxyF+ + iRExvlF5WIX+P0K3uljPcqhqmgJf0KRIkKHiUBCuOuDv7sXC7/iwb5cIYjfG + AHighzldKrePQtmIhStZKDJhEz2iuyZC5mFVrDWvNw+gdxHbFsR4barcBlN5 + ywOpYV0chP6qeblZJLaUSTnqMKuWenRcItwmilVMJ31E/SpB01NdkKdObDL6 + MzhFldBNl7PQQDF1IX4iz3657/U5eZdH6FhBjLaG3IS6Nfiexwtf4wvvdtmb + Gbd3DUdWw2y3TedGzpUFvvvgDSkBWwpkGUsF9QTgx5PXJiHUhLIMYoalfklv + p33DpCe9nNpR1sAR0fiE9MncuXVUponFbFjlX9qI4oFRyPUbLU88KNFi69J9 + OJ8bCPAOSf9n3pzyhUaWLCT0PB61/NspL+T+wWMZWk0UHg1hy4L/IcZ/aJO/ + gGfCzkZ9n7eIFIK60odaInWUDPAh14RBDLctA576d99OdSu/4vqsjqhcReFE + jv5u9Rnk3557+dxb7ng/KUmdzOE+zLZQVpGSj5wfx36QqW0duH2UJ883Zsfn + 4F9JwCN3xvSR59hn/i+zMWrFKPQEndVsY8D8aK2wzeGkM3jPyP/x/Rx3oXdh + HkgRI3Mi5kYH/Lso7N7vMVuCBlhbf8B/4w9e1okunLF20FDjJZGgFfBiFVdm + Az3eiGejDRTRBDL7uP+p/YV5a5lisFcMOeIK+A71jnsNv88+YDNl1RxtYRY+ + 8N1iuDdiyd3ILQmtAfj3b33n9ePswB62j1WixEf9h0t98WE2ZxHsEKhF24Tn + ncBHvNMs4gkvgavCxobido3MHZzfOpIE/tw1z/tPNifftgT63q3ZmEMxmBc8 + 6vRzp/2o+/JeG/uGAc6kPXFDTDmldn/3+fwvurr7/Otf6l8AAAD//wMAilua + 29wGAAA= + http_version: + recorded_at: Mon, 09 May 2016 17:45:28 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + Han + Solo + han@example.com + + Han Solo + + Han + Solo + YT-1300 + + Mos Eisley + AL + US + 12010 + + 52bcfea6-cf34-4ab0-8371-7cd098f42592 + + true + + + {"device_session_id":"c3bd671c0f79864c01c0836a4419b21a","fraud_merchant_id":"600000","correlation_id":"dc281142abe60c2964fbd9593dcee18f"} + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.60.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Mon, 09 May 2016 17:45:35 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff + X-Authentication: + - basic_auth + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + Etag: + - W/"a48a00e9147ec7f2ad8af49d83a397e2" + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 5f3a1796-a35b-4779-b3e5-ceaf536f4fa9 + X-Runtime: + - '0.334550' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAL/MMFcAA6RTTXPaMBC98ys8vgtBykfCCJN22kw7PTa99OJZW2ujiSy5 + khxwfn0lGwMBLp0c9723u9LuW7bZVzJ6RWOFVut4Op7EEapcc6HKdfz7+Ync + x5tkxPLGOl2hSUZRxARPFvfL2ex+smTUBwHzXL4F5YiP3zI1b9/+Prjlrtrt + Z3eMnrNBXQhjHVFQYfIdFKNncaAlDNEvLTWjpziwua5qUG2khFzHzjQY0w7H + CoRMfJtH3ENVSxx7JaM9HAT1Viu8Sitgf4XtMLPCXWtzg+CQE3CRa2tcx9yH + TlQYJ3eT6YJM5mTy8Dxdrmbz1af5H0ZPCV1+U/P/yz8l9P27NZBCoOT2+CQu + HMnBcHsoCsZAe3hxDW0NkkCe60a594oguJL0oIczIaV3AYHSIFbYL+9L+vT5 + 57f0x1dGb/JD8gcH1dc4eI6889s5Oig5FtDIoVWmtURQcRIWx+iBPIp7P2Qu + zZoWTdrYx34AF27ptKKCEkljvK2cq+2KUrAWnR1nBoRy/uOlf/UO2pBMfZ0w + h7RCt9U8lbrU9FC7VuUG1aswWgXJ2oLimd778zl2GHraJrO5EbXzF3ljo53G + 6RdUyfalLfiC0T4auA96rP+3JeFeFUoilHAi8JfTLUBaP95b0mMd//uwKVXo + y1PyJL023iVmOxA4N+jnfjWNkxuS0T8AAAD//wMATpKI38oEAAA= + http_version: + recorded_at: Mon, 09 May 2016 17:45:35 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + body: + encoding: UTF-8 + string: | + + + R389658362-74HTEQQU + + + 19.99 + Solidus + + Han + Solo + YT-1300 + + Mos Eisley + AL + US + 12010 + + hkyfd6 + 68744807 + sale + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.60.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Mon, 09 May 2016 17:45:38 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff + X-Authentication: + - basic_auth + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + Etag: + - W/"6e699c1a57b930ee557eb296a3be2048" + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 88b97e8f-d527-460c-a7ae-669e613c382a + X-Runtime: + - '0.460333' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + http_version: + recorded_at: Mon, 09 May 2016 17:45:38 GMT +recorded_with: VCR 3.0.1 diff --git a/spec/features/checkout_spec.rb b/spec/features/checkout_spec.rb index a8129bf6..604f3f84 100644 --- a/spec/features/checkout_spec.rb +++ b/spec/features/checkout_spec.rb @@ -53,6 +53,53 @@ expect(card.gateway_payment_profile_id).to be_present end + it "accepts Paypal" do + visit "/products/#{product.slug}" + click_on 'Add To Cart' + click_on 'Checkout' + + fill_in_address + click_on 'Save and Continue' + click_on 'Save and Continue' + + # Payment + expect(page).to have_content(gateway.name) + + click_on 'braintree-paypal-button' + + paypal_popup = page.driver.window_handles.last + + within_window(paypal_popup) do + expect(page).to have_content('Proceed with Sandbox Purchase') + click_on 'Proceed with Sandbox Purchase' + end + + expect(page).to_not have_content('Enter a credit_card') + expect(page).to have_content('Cancel') + + click_on 'Save and Continue' + + # Previous step can take a long time, so we allow an extra delay + click_on 'Place Order', wait: 30 + expect(page).to have_content('Your order has been processed successfully') + + # # Assert the payment details were stored correctly + order = Spree::Order.first + expect(order).to be_complete + expect(order.payments.count).to be(1) + + payment = order.payments.first + expect(payment).to be_pending + expect(payment.response_code).to be_present + + card = payment.source + + expect(card).to be_a(Spree::CreditCard) + expect(card.cc_type).to eq("paypal") + expect(card.gateway_customer_profile_id).to be_present + expect(card.gateway_payment_profile_id).to be_present + end + it "unsuccessful credit card verification" do visit "/products/#{product.slug}" click_on 'Add To Cart' diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 4c9dedac..59e9b8dd 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,3 +1,14 @@ +require 'simplecov' +SimpleCov.start do + add_filter 'spec/dummy' + add_group 'Controllers', 'app/controllers' + add_group 'Helpers', 'app/helpers' + add_group 'Mailers', 'app/mailers' + add_group 'Models', 'app/models' + add_group 'Views', 'app/views' + add_group 'Libraries', 'lib' +end + $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__) ENV["RAILS_ENV"] = "test" From 19054fec8501ee535528bfb4b708ce9b7ff5f571 Mon Sep 17 00:00:00 2001 From: "Hector E. Gomez Morales" Date: Mon, 9 May 2016 13:15:52 -0500 Subject: [PATCH 102/163] Remove whitespace and remove redundant dependency to byebug. --- lib/assets/stylesheets/spree/frontend/solidus_braintree.scss | 1 - solidus_braintree.gemspec | 1 - 2 files changed, 2 deletions(-) diff --git a/lib/assets/stylesheets/spree/frontend/solidus_braintree.scss b/lib/assets/stylesheets/spree/frontend/solidus_braintree.scss index 3dc66535..398a8775 100644 --- a/lib/assets/stylesheets/spree/frontend/solidus_braintree.scss +++ b/lib/assets/stylesheets/spree/frontend/solidus_braintree.scss @@ -24,4 +24,3 @@ width: 6em; } } - diff --git a/solidus_braintree.gemspec b/solidus_braintree.gemspec index a5d9b5e9..deb51067 100644 --- a/solidus_braintree.gemspec +++ b/solidus_braintree.gemspec @@ -33,7 +33,6 @@ Gem::Specification.new do |spec| spec.add_development_dependency "rspec" spec.add_development_dependency "pry" spec.add_development_dependency "pry-byebug" - spec.add_development_dependency "byebug" spec.add_development_dependency 'sqlite3' spec.add_development_dependency 'database_cleaner', '~> 1.2' spec.add_development_dependency "vcr" From cf6fd4c90ec25c1f9f6f453de9d521403b36b4f1 Mon Sep 17 00:00:00 2001 From: "Hector E. Gomez Morales" Date: Mon, 9 May 2016 14:52:43 -0500 Subject: [PATCH 103/163] Ensure device_data is added to the gateway_options hash. --- app/models/payment_decorator.rb | 1 + spec/models/spree/payment_spec.rb | 12 +++++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/app/models/payment_decorator.rb b/app/models/payment_decorator.rb index b40be741..0b8acb76 100644 --- a/app/models/payment_decorator.rb +++ b/app/models/payment_decorator.rb @@ -1 +1,2 @@ Spree::Payment.include SolidusBraintree::PaymentBraintreeNonceConcern +Spree::Payment.include SolidusBraintree::InjectDeviceDataConcern diff --git a/spec/models/spree/payment_spec.rb b/spec/models/spree/payment_spec.rb index e9cd7dd4..246bd570 100644 --- a/spec/models/spree/payment_spec.rb +++ b/spec/models/spree/payment_spec.rb @@ -1,9 +1,19 @@ require 'spec_helper' describe Spree::Payment, type: :model do - let(:payment) { Spree::Payment.new } + let(:device_data){"{\"device_session_id\":\"75197918b634416368241bb8996b560c\",\"fraud_merchant_id\":\"600000\"}"} + it "has a payment_method_nonce accessor" do + payment = Spree::Payment.new + expect { payment.payment_method_nonce = "abc123" }.not_to raise_error expect(payment.payment_method_nonce).to eq("abc123") end + + it 'adds device_data from the associated order to gateway_options hash' do + payment = create(:payment) + + payment.order.update_attribute(:braintree_device_data, device_data) + expect(payment.gateway_options[:device_data]).to be_present + end end From 3563fc0c8a7cf95c8e8a9c0a2102e1cdef635c31 Mon Sep 17 00:00:00 2001 From: "Hector E. Gomez Morales" Date: Mon, 9 May 2016 14:52:43 -0500 Subject: [PATCH 104/163] Ensure device_data is added to the gateway_options hash. --- app/models/payment_decorator.rb | 1 + spec/models/spree/payment_spec.rb | 12 +++++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/app/models/payment_decorator.rb b/app/models/payment_decorator.rb index b40be741..0b8acb76 100644 --- a/app/models/payment_decorator.rb +++ b/app/models/payment_decorator.rb @@ -1 +1,2 @@ Spree::Payment.include SolidusBraintree::PaymentBraintreeNonceConcern +Spree::Payment.include SolidusBraintree::InjectDeviceDataConcern diff --git a/spec/models/spree/payment_spec.rb b/spec/models/spree/payment_spec.rb index e9cd7dd4..246bd570 100644 --- a/spec/models/spree/payment_spec.rb +++ b/spec/models/spree/payment_spec.rb @@ -1,9 +1,19 @@ require 'spec_helper' describe Spree::Payment, type: :model do - let(:payment) { Spree::Payment.new } + let(:device_data){"{\"device_session_id\":\"75197918b634416368241bb8996b560c\",\"fraud_merchant_id\":\"600000\"}"} + it "has a payment_method_nonce accessor" do + payment = Spree::Payment.new + expect { payment.payment_method_nonce = "abc123" }.not_to raise_error expect(payment.payment_method_nonce).to eq("abc123") end + + it 'adds device_data from the associated order to gateway_options hash' do + payment = create(:payment) + + payment.order.update_attribute(:braintree_device_data, device_data) + expect(payment.gateway_options[:device_data]).to be_present + end end From 6152389c2f841f1398fe6a8a9c01bb07493f1133 Mon Sep 17 00:00:00 2001 From: "Hector E. Gomez Morales" Date: Mon, 9 May 2016 20:07:44 -0500 Subject: [PATCH 105/163] Add tests for #purchase and #voidable? --- .../purchase/succeeds.yml | 221 ++++++++++++ .../with_authorized_payment/is_voidable.yml | 317 ++++++++++++++++++ .../solidus/gateway/braintree_gateway_spec.rb | 23 ++ 3 files changed, 561 insertions(+) create mode 100644 spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/purchase/succeeds.yml create mode 100644 spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_authorized_payment/is_voidable.yml diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/purchase/succeeds.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/purchase/succeeds.yml new file mode 100644 index 00000000..bbb93df2 --- /dev/null +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/purchase/succeeds.yml @@ -0,0 +1,221 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + Card + Holder + sammie@harris.name + + Card Holder + + John + Doe + 10 Lovely Street + Northwest + Herndon + AL + US + 38766-4319 + + fake-valid-nonce + + true + + + + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.60.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Tue, 10 May 2016 00:00:30 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff + X-Authentication: + - basic_auth + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + Etag: + - W/"3db6fc93786422bd44e3d22567778988" + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - b9f3018f-ae95-4926-9653-71ab4e4e2a9e + X-Runtime: + - '1.455105' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAJ4kMVcAA7RY227jNhB9z1cYflck2Y5jLxRtgxZFsNgGBXa3BfqyoKRx + zEYitSTlxPn6DqkbJfmeLZAA5swZasi5HSn4+Jqlow0ISTm7G/vX3ngELOYJ + ZU93429ff3cW44/hVRAXUvEMRHg1GgU0Cf3ZbDmfLBeBiwstQ128Jkw5uH6L + 2M327cdS3b5kL6+zSeDaWo1eUSGVw0gG4a9EJIFrCbQ+JfXqgacJiMBtJVof + 8ywnbDtiNL0bK1HA2DVyyAhNQ0myjMIvayIEldfaKHBLjcbka85gYLkirwPZ + C0SSqiE2FkAUJA5RI7XN4W6c4FLRDMbhxPPnjnfj+N5Xz/uAf5PlP4HbGhj7 + Ik/Os28NyuebYDgrCmkiG5cSqpwYL1NWm+LpyXastV19KUFZRNMUw+yQJBEg + ZS0vA5xP6tBWsjoDnE70bWmLtaL5ia9ZP7wVqg3pbxx6Ea4fujvOlVYqAaAa + /31v9JlvIN2OvhhF4PYArSW8KmCJvtFK9ciFWr+ARKOBzvKYxySlahs+gGAJ + x4M1khYk4AlrKbz/HLjVz1aXc6lI6mB9QThd3M7nzmzqLwPXltunL5gSWyN2 + SJqvyST89gUvfYf8kNUUre53mU33mbECY0rjcDHzena1ZmhoQveNYcEkGADM + Vzniq9G9gZN2l36E31dL1S7vrCizh7unHrBOWDjz/MlioTFNOANdTI5+XPgX + lfqEzdpGrE0Da3vdqO5ofWVjxDPdLilJ8TafGX9h+vIaWQsr75OvHCplQVgM + YXvLtrSxeP9Vn94FWqQuEaXLwKTuQFrjE4ioak9cLlvlihRp7XfEeQqEjUPd + ETTUKFtwITBMDhZfkWr/rU37mtoEXnMqjD9Oxplah/5EN4KecAd6C0Tg7U28 + DtxIO2isiZ7vK5JKqKwsT9ZAUrXG3IDWbUtWw2hGnsApRBqulcrlB9clUoKS + 15EglOm294QHfCHba0wdNyfbDJj6noFa8+R7yp+4u8Gcvc7Z00dgGyo404A7 + SVgS8Vds/c3+zRMxnXR1RIQ9t651pDXUdPJZ6C8WftXWZ40OXRE8tVK7FjQA + ATnBPHrkqKt+1zpZRDIWNNeX3B1zzVgIFH8GFs7jeC4xhuWq1hWM/ihMD4tM + suKRKU5REc6S6ewmvoVZ5Pu3kylJJrBa3UTJLYk8H/+xYewzbfb+CS1oAyzj + jkye9yRLo7csBLpRltKuwT8AtWIzQIkqZFjqIdED0whsTLzZYMHIHPeHckD9 + gWU8ENomZCMdEIKLLmb3FK/w1gQcPu4woL9Vd+rv3u0gxt6wKiNE/AuxKW5s + ipKzvYdpqC6JTTPWPVFiIoPFgi2VbZoLHqM3/XtDYuN5uhh2a4/soJDPhPc5 + ajY6wvsQ9i7oVrJ8my+nXQrYUkZbdirdM8jjlK/MuUO0r8rcC6mfsb6M/pUn + OIECGuABGliG6hwqWN3KO4iWRXC65T18Mag0Bxppkw07iZEd691ToH72MQLV + hOuM6Ty0OT6ja3/OoyzWKc4leZXp/ziP6izbP00rxGmEowIfImk15Gz2Vd/j + Sby3PtcRGlHBTictjRNnsurmnnlSxKajty61sk4Z7im58/j5Ys+r0M9hImYf + QeWzgxrSv9Qk/PPTo+d9eriZ/v34pT8kTJrEVJruV84dnSmVpHMTO56gSc6Q + rXSlVU8e3GRHYEBB1cRh50eR/ove4LPHGa87J8zAo9Pv0Ny7dOJdNOtOmHL7 + 59s5k+2STxwXfeC48PPGe2buT3nffnctI91tY9ssAJdtHodX/wEAAP//AwAe + eZgnBxYAAA== + http_version: + recorded_at: Tue, 10 May 2016 00:00:30 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + body: + encoding: UTF-8 + string: | + + + + true + + 3.00 + Solidus + 6cc6s2 + 14496298 + sale + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.60.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Tue, 10 May 2016 00:00:31 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff + X-Authentication: + - basic_auth + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + Etag: + - W/"dee2462d6f76fab11fa60b1cb5d94878" + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - d33d64bd-fd0d-4407-85b3-6d7073b9e438 + X-Runtime: + - '1.217556' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + hmQnxicx6kzpm38AAAD//wMATl5SWGUUAAA= + http_version: + recorded_at: Tue, 10 May 2016 00:00:31 GMT +recorded_with: VCR 3.0.1 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_authorized_payment/is_voidable.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_authorized_payment/is_voidable.yml new file mode 100644 index 00000000..a2b631ab --- /dev/null +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_authorized_payment/is_voidable.yml @@ -0,0 +1,317 @@ +--- +http_interactions: +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + Card + Holder + theresa_walter@bernier.biz + + Card Holder + + John + Doe + 10 Lovely Street + Northwest + Herndon + AL + US + 25443-0660 + + fake-valid-nonce + + true + + + + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.60.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Tue, 10 May 2016 01:04:46 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff + X-Authentication: + - basic_auth + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + Etag: + - W/"8eab05abc433bab693cf97df294b8263" + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - d31f4ff8-d744-43da-8e94-dba52a58a2cd + X-Runtime: + - '0.842043' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAK4zMVcAA7RYWY/bNhB+z68w/K6V5PWxDbTaLlIUQZoEAZK0QF8WlDS2 + WEukQlI+8uszpG7J9tre7YMBc+ab0XBuyXvYpcloA0JSzu7H7o0zHgELeUTZ + 6n78/duf1t34wX/jhblUPAXhvxmNPBr5M9e9nU9nC8/Gg6YhL4wJUxaefwZs + tv/54ze12Kbb3XTi2W2uRi+pkMpiJAX/HRGRZ7cImp+Q6vSeJxEIz24omh/y + NCNsP2I0uR8rkcPYNnRICU18FYMASZ62JFEgfg9AMAriJqA/PbtAaGwWcwYD + DUuyG9C2EEiqhthQAFEQWUSN1D6D+3GER0VTGPsTx51bzsxynW+O+9aZvp3O + //XsRsDI51l0mXwjUDzfBMVaUkgiWZsUUWWF6FRZKiVCkP1Yc7v8goK0gCYJ + htsiUYRukxW9CPR6UoW4pFWZYHWyoE1tsK2ofuAx64e5RDWh/YNDL9LVQw/H + u+RKJQBUbb/rjD7yDST70VfD8OweoJGEnQIWaY+WrM9cqHgLEoUGvJbFPCQJ + VXv/PaZWxPFiNaUBCVhhTfmPHz27/NvwMi4VSSysM/Ans+n01nLmc8ez2/T2 + 7XOmxN6QLZJkMZn437+i0w/QT0ndotTjIbHbY2Isx5jS0L+bOj25ijMUNKH7 + zrBgIgwA5qsc8eXo0cBJo6Uf4ZfVUqnlhRVldNhH6gHrhPlTx53c3WlMHU5P + F5OlH+f/TaW+YX1uI2LTyJqeN6o6W59ZC/FUt01KEvTmmvEt086raQ2s8Cdf + WlTKnLAQ/MbLbWot8XJXn98FGqQuEaXLwKTugFrhIwioam5cHBvmkuRJZXfA + eQKEjX3dETTUMBtwLjBMFhZfnmj7W0r7nEoEdhkVxh4r5UzFvjvRjaBHPIDe + AxHovYnTgRtqB4010bN9SRIJpVTLkhhweMWYG9CY3aJVMJqSFVi5SPxYqUy+ + tW0iJSh5EwhCmW57K7zgluxvMHXsjOxTYOopBRXz6CnhK25vMGdvMrZ6ALah + gjMNuJeERQHfYeuv9ddPxHTS1REQtm5M61ArqOnkU9+9u3PLtj6teWiK4Ekr + tStCDRCQEcyjzxx55f+KJ/NAhoJm2sndMVePBU/xNTA/nqe7HcawOFW8nNEf + uelhgUlWvDLFKSr8aXQ7nYULmAauu5jckmgCy+UsiBYkcFz8YcM4JlrrfoUW + tAGWcktG6yPJUvNbEgLNKErp0OAfgBqyGaBE5dIv+BDpgWkIbUy42WDByAz1 + QzGgPmEZD4htEbKRFgjBRRdzeIqX+NYEHD7uNKCvqjv1D2s7iWkrLMsIEf9B + aIobm6Lk7Ohl6pWXhKYZ654oMZGhtQ23WG3RTPAQren7DRcbR+8IR7jPaFC4 + z/iPGXI2OsLHEG0taNZitQ7msrsCNitjm3buumeQz698Rc6dWvvKzL1y9TPS + 161/xQ3OWAEN8MQaWITqklWw9MoLFq3WgtMt7+GLQck50UjrbDi4GLVjfXgK + VM9+boGqw3XBdB7KPD+jK3suW1lat7h0yStF/8d5VGXZ8WlaIs5bOErwqSWt + gly8fVV+PGvvre71zBpRws5fWmojLtyqaz/zKA9NR29MamidMjxScq/zKvQ6 + m4jRI6hcW8ghfadG/pcPn985/3z6y/3wZdEfEiZNQipN9yvmjs6UktLxxIEn + 6CVnuK10qWVPHniyQzAgr2zicPCjSP9Fb/DZ44LXnTNm4LPT79Tcu3biXTXr + zphyx+fbJZPtmk8cV33guPLzxktm7qu8b7+4lnHdbWJbHwCPTR77b34BAAD/ + /wMACmq2+A8WAAA= + http_version: + recorded_at: Tue, 10 May 2016 01:04:47 GMT +- request: + method: post + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + body: + encoding: UTF-8 + string: | + + + + + 50.00 + Solidus + h6mxx2 + + + + Card + Holder + + sale + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.60.0 + X-Apiversion: + - '4' + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Tue, 10 May 2016 01:04:47 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff + X-Authentication: + - basic_auth + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + Etag: + - W/"f7261bc9e4c35101343f71e6c5fee81a" + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - d0f68677-f8fe-492f-af1f-9c24cdafe8c0 + X-Runtime: + - '0.625374' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + WBMAAA== + http_version: + recorded_at: Tue, 10 May 2016 01:04:48 GMT +- request: + method: get + uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/h8xg93 + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.60.0 + X-Apiversion: + - '4' + response: + status: + code: 200 + message: OK + headers: + Date: + - Tue, 10 May 2016 01:04:48 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff + X-Authentication: + - basic_auth + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + Etag: + - W/"0a2397f9ec044f72af1fb3fd50e20442" + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 59bfa45e-04d3-4f15-875d-befd6f3fa7fd + X-Runtime: + - '0.137514' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + WBMAAA== + http_version: + recorded_at: Tue, 10 May 2016 01:04:48 GMT +recorded_with: VCR 3.0.1 diff --git a/spec/solidus/gateway/braintree_gateway_spec.rb b/spec/solidus/gateway/braintree_gateway_spec.rb index bdfae642..72e63650 100644 --- a/spec/solidus/gateway/braintree_gateway_spec.rb +++ b/spec/solidus/gateway/braintree_gateway_spec.rb @@ -184,6 +184,17 @@ end end + context 'purchase' do + it 'succeeds' do + card.gateway_customer_profile_id = nil + auth = payment_method.purchase(300, card, {}) + + expect(auth).to be_success + expect(auth.authorization).to be_present + expect(auth.avs_result["code"]).to eq "M" + end + end + context 'decline' do it "fails" do card.gateway_customer_profile_id = nil @@ -207,6 +218,18 @@ end end + context 'with authorized payment' do + let!(:auth) do + card.gateway_customer_profile_id = nil + payment_method.authorize(5000, card, {}) + end + let(:auth_code){ auth.authorization } + + it 'is voidable' do + expect(payment_method.voidable?(auth_code)) + end + end + context 'with completed payment' do let!(:auth) do card.gateway_customer_profile_id = nil From 8a982136500144f27ef77ad03520c545dbb550db Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Tue, 24 May 2016 14:26:01 -0700 Subject: [PATCH 106/163] Remove pry-byebug --- solidus_braintree.gemspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/solidus_braintree.gemspec b/solidus_braintree.gemspec index deb51067..0a6398dd 100644 --- a/solidus_braintree.gemspec +++ b/solidus_braintree.gemspec @@ -32,7 +32,7 @@ Gem::Specification.new do |spec| spec.add_development_dependency 'ffaker' spec.add_development_dependency "rspec" spec.add_development_dependency "pry" - spec.add_development_dependency "pry-byebug" + spec.add_development_dependency "byebug" spec.add_development_dependency 'sqlite3' spec.add_development_dependency 'database_cleaner', '~> 1.2' spec.add_development_dependency "vcr" From 942071a0ec432977235a3fd66c92780b29f9a4d2 Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Tue, 24 May 2016 15:19:34 -0700 Subject: [PATCH 107/163] Re-record all cassettes Required with the upgrade to vcr 3 --- solidus_braintree.gemspec | 2 +- .../Accepts_a_CC_payment.yml | 312 ------------- .../Braintree_checkout/accepts_Paypal.yml | 205 +++++---- .../accepts_a_CC_payment.yml | 320 +++++++++++++ .../denies_a_fraudulent_card.yml | 213 +++------ .../expiration_and_cvv_are_required.yml | 64 +-- ...l_credit_card_transaction_amount_2000_.yml | 305 +++++++------ .../unsuccessful_credit_card_verification.yml | 131 +++--- .../PayPal/credits_a_completed_payment.yml | 390 ++++++++-------- ...fails_capture_with_settlement_declined.yml | 276 ++++++------ .../should_have_the_correct_attributes.yml | 66 +-- .../succeeds_authorization_and_capture.yml | 284 ++++++------ ...succeeds_capture_on_pending_settlement.yml | 283 ++++++------ .../PayPal/voids_a_authorized_payment.yml | 280 ++++++------ .../should_raise_exception.yml | 59 +-- .../fraudulent_purchase/fails.yml | 64 +-- ...r_passes_device_data_to_create_profile.yml | 84 ++-- .../sends_it_to_Braintree.yml | 86 ++-- .../unsuccessful_card_verification/fails.yml | 66 +-- .../fails.yml | 64 +-- .../should_have_the_correct_attributes.yml | 104 +++-- .../decline/fails.yml | 213 ++++----- .../purchase/succeeds.yml | 181 ++++---- .../successful/succeeds.yml | 307 ++++++------- .../should_have_the_correct_attributes.yml | 104 ++--- .../with_authorized_payment/is_voidable.yml | 262 +++++------ .../with_checkout_payment/can_be_voided.yml | 87 ++-- .../can_be_fully_credited.yml | 363 +++++++-------- .../with_completed_payment/can_be_voided.yml | 424 +++++++++--------- .../on_a_payment/PayPal/failure/fails.yml | 375 ++++++++-------- .../PayPal/success/can_be_voided.yml | 372 +++++++-------- .../on_a_payment/PayPal/success/succeeds.yml | 372 +++++++-------- .../returns_a_client_token.yml | 66 +-- .../json.yml | 66 +-- .../returns_an_http_success.yml | 75 ++-- .../returns_a_client_token.yml | 66 +-- .../json.yml | 75 ++-- .../returns_an_http_success.yml | 75 ++-- 38 files changed, 3668 insertions(+), 3473 deletions(-) delete mode 100644 spec/cassettes/Braintree_checkout/Accepts_a_CC_payment.yml create mode 100644 spec/cassettes/Braintree_checkout/accepts_a_CC_payment.yml diff --git a/solidus_braintree.gemspec b/solidus_braintree.gemspec index 0a6398dd..92568a07 100644 --- a/solidus_braintree.gemspec +++ b/solidus_braintree.gemspec @@ -35,7 +35,7 @@ Gem::Specification.new do |spec| spec.add_development_dependency "byebug" spec.add_development_dependency 'sqlite3' spec.add_development_dependency 'database_cleaner', '~> 1.2' - spec.add_development_dependency "vcr" + spec.add_development_dependency "vcr", '~> 3.0' spec.add_development_dependency "webmock" spec.add_development_dependency 'simplecov' end diff --git a/spec/cassettes/Braintree_checkout/Accepts_a_CC_payment.yml b/spec/cassettes/Braintree_checkout/Accepts_a_CC_payment.yml deleted file mode 100644 index 46381136..00000000 --- a/spec/cassettes/Braintree_checkout/Accepts_a_CC_payment.yml +++ /dev/null @@ -1,312 +0,0 @@ ---- -http_interactions: -- request: - method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token - body: - encoding: UTF-8 - string: | - - - 2 - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.60.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Thu, 21 Apr 2016 19:14:41 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - X-Frame-Options: - - SAMEORIGIN - - SAMEORIGIN - X-Xss-Protection: - - 1; mode=block - X-Content-Type-Options: - - nosniff - X-Authentication: - - basic_auth - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - Etag: - - W/"32a0ccd4799ffbc65c88acd7cf0d624f" - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - e08b4405-8f0e-4de5-a9e1-998b7963d140 - X-Runtime: - - '0.235167' - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - body: - encoding: ASCII-8BIT - string: !binary |- - H4sIAKEmGVcAA6RVXW+bShB9z6+I8t5bvJjcIjmpYjtgkFnXGC+wb7BLavAu - 9i3m89ffWTtJU8m3qnQfLEswM2fOOTPD5GsnxW2T/ajyQ/lwN/pLu7vNSnbg - efn94W4bWJ++3H19vJkwkWfl6dPpsM/Kx5vb20mTiDp7zHoX0cgdktCsneLQ - L2fujkf+IdXdYyYtTT33pagpIj1buMe0XOer3M29geSrIO5pIAoqcYFDp/XQ - s44Lv/CKp25lO71nY0Hn7t4L2DgecI6HZ7QKnY7OY+QhT/eCGNG5gFpc4mHb - vti4p6Gl0dB/iaO1qergXGvxTOs9su5WwaHD84Pmbca6V3gjL9iOvfn2hzd/ - aj2rG8F/j+VIMIkPcWhoERL7b9ExTwtiZOWzwedcTyM+xnOX8QByCtry0K2S - EL8kiBjfInFahf4/XLfaRN/lvMDjDPiCJkWKDJmEnDDZKv4HvvBbNhyaJYLY - jTEA3j6W5ngp3T4ORc0XrqAh33Gb6HG0r2NknlbFWvN68wR6F4ltQYzXZNKt - cSTuWSA0rPMT179rXm4WqS1EWiodpselHndLhJtU0iPVSR9H/jFF43NfUKdK - baL8GZzimEabNqehgZLIhfiRePXrvT8nb/MYdUeI0dZQm0RuBb7nycLX2MK7 - X/bmjtn7miGrprbbZDMjZ9IC333whpSALTiyjKWEfoKDhudek4bQE9rtIGZY - 6tf0dpo3zOisl1M50hoYIhobkT6dOfeO3Gl8MR1W+ZcmjvBAI6j1Gy3PPCKi - Jda1fHg+MxDgndL+z7w51wuNXboQMPNYafm3U16p/cpjGVp1HHYGt0XB/hDj - P7TJX8Azbu+Uvs9bRAoeucKHXmLZCQr4UGtEIYbZlgG/6nfvzn1L/8j0aRVH - YhWHI6H83epTqL+9zPJltlyVn5akSmeQD7vNpVVk5CPnJzUPIrOtE7M7cfZ8 - Y7ZsBv6VBDxyp1RXPNWc+b/shtKKRjAT0bSiGwP2R2u4bQ5nncF7Sv6P75e4 - K7ML+0CKBJkjPjNa4N/GYfueR20BGmBt/QH/jT94WaU6d1TvoKHGSiJAK+BF - j0yaNcx4zZ+NJpBE48jsk/6n9lf2raGSwl0xhMLl8B76VXcNv+8+YFNpVQxt - YRc+8N1iyFNYYq+4paE1AP/+be68Xu0O3GG7O6aSf9R/uDYXH3ZzGsMNgV60 - TXi5CUzhnXcRj1gJXCU2NhFu1sjcw/N7R5DAn7nm5f6J+uzblsDcuxVVNSSF - fcFKp5837bXv63dNzQ0FnFFz5oaodErtYfL58i26mXz+9Sv1LwAAAP//AwB3 - vu0G3AYAAA== - http_version: - recorded_at: Thu, 21 Apr 2016 19:14:16 GMT -- request: - method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers - body: - encoding: UTF-8 - string: | - - - Han - Solo - han@example.com - - Han Solo - - Han - Solo - YT-1300 - - Mos Eisley - AL - US - 12010 - - 9fafa6c5-8235-4bf6-a7ad-d35660c80a30 - - true - - - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.60.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Thu, 21 Apr 2016 19:14:43 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - X-Frame-Options: - - SAMEORIGIN - - SAMEORIGIN - X-Xss-Protection: - - 1; mode=block - X-Content-Type-Options: - - nosniff - X-Authentication: - - basic_auth - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - Etag: - - W/"348516ba4bafdcf4d9e9c1fa3e908be4" - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - f0d369d2-d5ab-4d12-af74-c3c3f5dade70 - X-Runtime: - - '0.863485' - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - body: - encoding: ASCII-8BIT - string: !binary |- - H4sIAKMmGVcAA7RYW3OrNhB+z6/w+J1gbJI4GUKa6fTy0NM5M0lOp305I0C2 - 1YBEJOHY59d3JRAI8AXHaZ6i3W+llfb2meBhk6WjNeaCMHo/9i4n4xGmMUsI - Xd6PX55/debjh/AiiAshWYZ5eDEaBSQJPf/m+np2PQ1cWCgZ6OIVotKB9Y+I - Xm1/vN3Km/fsfeMDyNYq9IJwIR2KMhz+jmjgWmulTpFZPbGUBW6zVtqYZTmi - 2xEl6f1Y8gKPXS3HGSJpCMf8hDcoy1N8CcjALcUKkK8YxT2zBdr0ZO84EkT2 - sTHHSOLEQXIktzm+HyewlCTD43A68a6die9MvWfv9s7z7/zZP4HbGGj7Ik9O - s28MyvN1GJwFwWkiapcSIp0Y8URUmyLO0XastG19KQFZRNIUAuygJOFYCCMv - Q7t+M0GtZCb2TivutrTBHg5sBToYXnPo7iBXWiE5xrL2/+9nx5tNJoHbkTcG - eCMxTdRDlqo9+6YsRimR2/ALE6NfiEjxFtwzwgbH8RLqJXz8I3CrfxtdzoRE - qQM1hEMPogpu2SL7igWVfKvFDkrzFZqGL0/wsjvkh6xmYPW4y2y2z4wWEDgS - h3N/0rEzmr6hjs8LhapIRk8SklKM2GL0qOGo2aUbxvMKptrlzLLRe7h7kh6K - gYa+p/4Upo5koCrGUceF34hQN6zXNmLF0gSKwGT8qMzorqa2YJlqhQSl8JSv - lL1T9XK1rIGVj8kWDhGiQDTGNr6vrA3Pf+7h5d4gVYVIVQU6fXtSg09wRGRz - kXLZKBeoSI3fEWMpRnQcqhJVUK1swAWHUDlQe0Wq/Lc27WqMCd7khGt/nIxR - uYLahNnQFe5AbzHi8HrTSQuupS001EXH9wVKBa6sLE9WGKVyBSliBdWSGRjJ - 0BI7BYeRJmUu7lwXCYGluIw4IlQ1uiVc8B1t1Zhzc7TNMJXfMyxXLPmesiVz - 15C3lzldPmC6JpxRBbgXiCYR20CPr/evT4R0UhUSIfrauNaSGqhu2X5YVk21 - MDpwhbPUynAjqAEc54hYQTMCAxBFJGJOcvXS7aFWN+tAsldMw+u36E3AkC9X - RldQ8lboZhbpjIV7E5iZPJxHV7Oryfzqdu7jaXLlT3Gc3Hgzz/fwZHI1jaFz - 7DOt9/6EXrTGNGOOSF73ZEyttyw4uFHW064x3wM1Yj0ukSxEWOpxouakFtiY - eL2GqhE57I/LSfUFarkntE3QWjiYc8bbmN2ztcJbo7B/3GFAd6v2sN+920GM - vWFVS4D4F8e6wqEzCkb3XqamtCjWHVk1RgGJjC22a6ls05yzGLzpvlvoTRSH - 2ac9soMEihM+5qBZqwjvQ9i7gFuzfEnnszbhawiiLRtI7jRwAMErc+4Qyasy - 9zSip42Gkb3S02GET2MPkL4yKAOJX3X1M2iVRWfaNdzn+pXmQLesQ76TBtkR - 3d3vzdnH6FIdnBPmcN/m+DQ2/pxGTqxbnETpKrv/ceKY7DoyNCvYMHJRgQ8R - MgM5mWmZlxxEdc3ljlCGCjacoNROfIxI12/OkiLW/dt69lrWqsc9tfc5v4A+ - h3fofTgRrw5oUPdtk/Drn9+8yV/P89/8n2+6I0FnS0yE7oDllFEJU0laL7Hj - BEVp+tykLa26eO8lWwINCqq+jnd+8Oj+vut90jjhF87xiXd81h2acifOt0GT - bdhM2z/NBs6xj3y++NDHiw9+ujhnwn7K7+izCxYYbBP+eoFh2SRrePEfAAAA - //8DALbkGTbCFQAA - http_version: - recorded_at: Thu, 21 Apr 2016 19:14:18 GMT -- request: - method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions - body: - encoding: UTF-8 - string: | - - - R639166486-EANZ2MN8 - - - 19.99 - Solidus - - Han - Solo - YT-1300 - - Mos Eisley - AL - US - 12010 - - 6qbqsm - 14766362 - sale - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.60.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Thu, 21 Apr 2016 19:14:45 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - X-Frame-Options: - - SAMEORIGIN - - SAMEORIGIN - X-Xss-Protection: - - 1; mode=block - X-Content-Type-Options: - - nosniff - X-Authentication: - - basic_auth - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - Etag: - - W/"76bde6fab371f39702d534117d0f9e67" - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 5521479d-3016-4ee3-9709-1ac098ac7537 - X-Runtime: - - '0.800524' - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - body: - encoding: ASCII-8BIT - string: !binary |- - H4sIAKUmGVcAA+xYTY/bNhC951cYvnNl2V7HDrRKt2iKFEgWRZNN21wCShzb - 7EqklqS8dn99hyIlS5a0SS49FPXJnHkckvPFR0Wvj3k2OYDSXIqbaXg1m05A - pJJxsbuZ3n/8maynr+MXkVFUaJoaRMUvJpOIs3i+SzeHl1GAf61EG2pKHdPS - 7KXifwOLAi+yWnMqINY0gyio/lpZWiqFa50I15LgkhDff/gpCvpiC6a5LIWJ - w83VZhMFfmQVOah0T4UhNE2tkOB+dKEAVxpSVVstEzKgmwie3UyNKmEaONNU - G1DfBJWKIRLt/7ZabMLVarlekTe3d5/n7+/WUdBoq2MroAYYoWZiXXEzZTg0 - PIdpPJ+FKzJbknn4Mdy8Cpevltef0SHNhGp+WbDvm3+e4N2ujcQz2YGLZLh8 - uVotVvM6lijdcqUNETSH+C0VUdAaO0BG6/EHmckoOI+dPpV5QcXp0lGogZzy - LEaH/gBHmhcZXCE2CpzYQZ4g0dzAwORiL8WQfEuPvZgE7ZNGCc8yTOrzqQ+P - /855tcFkxORhTIHW8Z8fSbiYzWx1dOTeOUcDgtlgOfGAvUymNOPmFL+XevKG - 6wxOuJ1a6DAKdrZSb99Fgf/r3SexJjNXVSFmC26jLaqPgkmuTu509wIDwSYf - sJRBT+R2cosO5SlF77Zh3ZnWGKFZsadzrOkztC0fm7HAGbdDUxZDU0RZbSde - L2cXc2pNlQmt4KNvtqVgQ0XcaLSvLKoUPXWUGJlWKxwyUlBlODpUgzEZ5ID9 - ojtjyPi5a37NfMtsQk26H8TseVG0c32oYP5P+P9ywrdTwHd8suWQMe0T7qAJ - KCUVQacXUmiojPRSyeJaDuui4/d4Ez8LqE10Qz9s5VlMdYzD4UL6C7qgJ7TQ - HQbviZ5Q8xe4UsI7VEvRr1YlU1wN/VCXIK3glaXVu7e/f/oRM+Y5UNdKdyvh - zOb9mHZkpsGSiG8L1BwsiRpDVK5ljNudoPP7sN5ZD5KnNkBbDDzOwHxJQPU9 - Ulq2g6s40jKCMvRIHAkbVMER8qLmJ4mUGVAxjbc005YANoCaD+EpSEpVfRkb - +QAiXj0mjxqJgRs5TcJFvAztz/Z00W5Vy9iJ/cCXDholFeH8xLUt4WZcd5+C - KxfMXAqzxx6BTORS2MOegCokW/NZB1xJ/bqeeRDbpirSXHWFnvS8y73MKnf7 - hjxxTfdS4xt6TndASoUsyphCvwoCqvFe0FeJolzYMvL5b5lVUNCTvS6+5IC5 - y75kcieDA3rjqhC71yAOXElhATeaCpbII7Kixr5vogoKilTpXjwI+SRsTjqB - U++BZmaPW4UzoiVzIAYJN2e9G3pVqTCWmJi7MrNEtYW61DRXj+XkeMueoS2Z - 3zQ9KZm1ELXA+1DrEvsjXqLi4YzpSLvdV26J1VKRQnvVvrL2mWRlWj05Wm5r - ZA5UCv5Ygq8xFGMUOHZpFa+T68X1bH29WS9hzq6Xc0jZy3ARLkOYza7nKZL6 - sanO8gFELolmDyM12Og9U+7WoH/MkT3HhFWnDmFpLvkKAWjIx9EWLr5CUJEX - 3/gyafCNhWdfkRVi7CHoHKrRAyynYgd4obhXYCVrdthiV1piq4OYFhx30pe7 - cwaXB20k3jmuaWZ0mK2ViU4VL0bZXEvftLiKqpICL3PJCJIjYt04wIsukLgt - ZQaxuOWLdezNQfCSGKCijOsqqwd14KzIOs1sU/qOVxq2lP7eukaRydkPAHiu - kcxt9O7ywHekgMxyVM5KjZnsBY4rq4O98rYAY5eVXVs+ERfSnhZ9kZRKO7rN - wOALteatXdVwgFpcfXj5Lqb34eMb4XC0h8aOrYa3Yd8tmK5I/oYMlmk6QLsx - LCNntycvSsuN+/nhrxrCBZK50r197GXr2ssX216iYAzUpUOtg3ZZU5sRjYK+ - bqviUF+z1RAtxfWDjTI9fz749e5TOPv8brm6W/7R+pDAIOW6eoo4Bmfz20sq - t3YsRWaPLYpg7dqkBnTJVnYj0elM8Yt/AAAA//8DAPmkIQavEwAA - http_version: - recorded_at: Thu, 21 Apr 2016 19:14:20 GMT -recorded_with: VCR 3.0.1 diff --git a/spec/cassettes/Braintree_checkout/accepts_Paypal.yml b/spec/cassettes/Braintree_checkout/accepts_Paypal.yml index 584ae289..ada144be 100644 --- a/spec/cassettes/Braintree_checkout/accepts_Paypal.yml +++ b/spec/cassettes/Braintree_checkout/accepts_Paypal.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token body: encoding: UTF-8 string: | @@ -16,9 +16,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.60.0 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -27,7 +29,7 @@ http_interactions: message: Created headers: Date: - - Mon, 09 May 2016 17:45:28 GMT + - Tue, 24 May 2016 22:16:01 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -48,46 +50,46 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"26b750a365028c85bd4a387367cfe27c" + - W/"e500db3dd9ec0db3a8be0e57c5fd8030" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 026e4ad2-46df-4254-9a1f-cf3f7db4107b + - 54571b6b-14e4-45b0-a509-987349b6887c X-Runtime: - - '0.240828' + - '0.237871' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIALjMMFcAA6RV0W6bShB9z1dEee8tXkxukZJUsRMwyKxrjJdl32CXBPAu - 5hYDhq+/g92kqeRbVboPCGmZnTPnnJnh7utRyes2/V7n+/L+ZvKXdnOdlnwv - 8vL1/mYbWJ++3Hx9uLrjMk/Lw6fDfpeWD1fX13dtLJv0Ie1dxKg7xKHZOMW+ - X87dTFB/n+hulSpLG899JRuGSM8XbpWU63yVO1MWyF2kIgTvzCuYxEW2W9nu - LkK+ikKcwZPjIeq94HHAoYewDefBTHrK06NiZzAb7havgxfMclyIAg+O/mLj - noWWxkL/JaJr0ysejzjXOrzRuhVZH/Gw13Cw73E/NVbBM1o9OQYO+Hfv6bHz - rOME3j1WE8kV3kehoVEkd99olScFMdLy2RBPQk+omOInl4sA7hSsE6FbxyF+ - iRExvlF5WIX+P0K3uljPcqhqmgJf0KRIkKHiUBCuOuDv7sXC7/iwb5cIYjfG - AHighzldKrePQtmIhStZKDJhEz2iuyZC5mFVrDWvNw+gdxHbFsR4barcBlN5 - ywOpYV0chP6qeblZJLaUSTnqMKuWenRcItwmilVMJ31E/SpB01NdkKdObDL6 - MzhFldBNl7PQQDF1IX4iz3657/U5eZdH6FhBjLaG3IS6Nfiexwtf4wvvdtmb - Gbd3DUdWw2y3TedGzpUFvvvgDSkBWwpkGUsF9QTgx5PXJiHUhLIMYoalfklv - p33DpCe9nNpR1sAR0fiE9MncuXVUponFbFjlX9qI4oFRyPUbLU88KNFi69J9 - OJ8bCPAOSf9n3pzyhUaWLCT0PB61/NspL+T+wWMZWk0UHg1hy4L/IcZ/aJO/ - gGfCzkZ9n7eIFIK60odaInWUDPAh14RBDLctA576d99OdSu/4vqsjqhcReFE - jv5u9Rnk3557+dxb7ng/KUmdzOE+zLZQVpGSj5wfx36QqW0duH2UJ883Zsfn - 4F9JwCN3xvSR59hn/i+zMWrFKPQEndVsY8D8aK2wzeGkM3jPyP/x/Rx3oXdh - HkgRI3Mi5kYH/Lso7N7vMVuCBlhbf8B/4w9e1okunLF20FDjJZGgFfBiFVdm - Az3eiGejDRTRBDL7uP+p/YV5a5lisFcMOeIK+A71jnsNv88+YDNl1RxtYRY+ - 8N1iuDdiyd3ILQmtAfj3b33n9ePswB62j1WixEf9h0t98WE2ZxHsEKhF24Tn - ncBHvNMs4gkvgavCxobido3MHZzfOpIE/tw1z/tPNifftgT63q3ZmEMxmBc8 - 6vRzp/2o+/JeG/uGAc6kPXFDTDmldn/3+fwvurr7/Otf6l8AAAD//wMAilua - 29wGAAA= + H4sIAKHSRFcAA6RVXW+bShB9z6+I8t52WUJukZJUsR0wyKwLthfYN9glNXgX + +xbz+evvYDdpKvlWlfqAbC2zc+acMzPcf+mUvG6y71W+Lx9utI/o5jor+V7k + 5beHm83a+vD55svj1T2XeVYePxz3u6x8vLq+vm8SWWePWe9iFrlDEpq1U+z7 + xdTdiijYp7p7yJSFxvNAyZph2vO5e0hLP1/mTsfWQR5jH3vY2rKCY/iPluun + YTl7wsu137MZzT3lt/HgdV7oFmTguhf6Blk78I5rXmEVcRhsPRUjb+Z3y5m7 + e7FJz0ILsTB4iSPf9IqnjuSoJSvUE8vvvWLfkWLfeqtbncyeNTLb9N7s6Ts8 + rWd1Gvz2RGmSK7KPQwNFWO6+Roc8LaiRlc+GmAk9jcQtmblcrOFOwVoRulUS + kpcEU+NrJI/LMPhX6Fab6NtcFOQ2A76gSZFiQyWhoFy1wN/di3nQ8mHfLDDE + rowB8HaxMm8Xyu3jUNZi7koWiq2wqR5HuzrG5nFZ+MjrzSPoXSS2BTFekym3 + JpG842uJiC6OQv+GvNwsUlvKtBx1mBwWetwtMGlSxQ5Mp30cBYcU357qgjxV + atPRn8EpDmm0anMWGjiJXIjX5Nkv960+J2/Bt+4AMciH3DRyK/A9T+YB4nPv + btGbW27vao6tmtluk02NnCsLfA/AG1oCthTYMhYK6lnvEZl5TRpCTXi7hZhh + oV/S22leMaOTXk7lKGvgmCKu0T6dOneO2iIxnwzL/HMTR2RgEeT6jZYnHhFF + iXXpPpxPDQx4x7T/M29O+UJjm84l9DwZtfzHKS/k/sFjEVp1HHaGsGXB/xDj + f7TJX8AzYW9HfZ83mBYicmUAtcSqkwzwIZfGIIbblgFP9bt3p7pVcOD6pIoj + uYxDTY7+bvQJ5N+ce/ncW+54Py1plU7hPsy2UFaR0fecn8Z+kJltHbndyZPn + K7PlU/CvpOCRO2H6yHPss+CX2Ri1YhH0RDSp2MqA+UGNsM3hpDN4z+jf+H6O + u9C7MA+0SLCpianRAv82Dtu3e8yWoAFB/jv8V/7gZZXqwhlrBw0RL6kErYAX + O3Bl1tDjtXg2mrWiSGCzT/qf2l+Yt4YpBnvFkCOugPdQ77jXyNvsAzZTVsXx + BmbhHd8NgXsjltyN3NLQGoB//9p3Xj/ODuxhuzukSrzXf7jUF+9mcxLDDoFa + 0Co87wQ+4p1mkWi8BK6KGKuIND42d3B+50i6Dqaued5/sj75tqHQ927FxhyK + wbyQUaefO+1H3Zf32tg3DHC05sQNM+WU6OH+0/lbdHX/6dev1H8AAAD//wMA + 5UrjudwGAAA= http_version: - recorded_at: Mon, 09 May 2016 17:45:28 GMT + recorded_at: Tue, 24 May 2016 22:16:01 GMT - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers body: encoding: UTF-8 string: | @@ -108,12 +110,12 @@ http_interactions: US 12010 - 52bcfea6-cf34-4ab0-8371-7cd098f42592 + c2f19568-ce41-4544-8534-4c7122dd4827 true - {"device_session_id":"c3bd671c0f79864c01c0836a4419b21a","fraud_merchant_id":"600000","correlation_id":"dc281142abe60c2964fbd9593dcee18f"} + {"device_session_id":"884659d65db61c90a3f61fbc575e2946","fraud_merchant_id":"600000","correlation_id":"cb9c9c6cd0803d2ab6318dcb423acf7e"} headers: Accept-Encoding: @@ -121,9 +123,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.60.0 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -132,7 +136,7 @@ http_interactions: message: Created headers: Date: - - Mon, 09 May 2016 17:45:35 GMT + - Tue, 24 May 2016 22:16:10 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -153,41 +157,42 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"a48a00e9147ec7f2ad8af49d83a397e2" + - W/"0d1f3af530c895c8eb4405cfdbc5c5b2" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 5f3a1796-a35b-4779-b3e5-ceaf536f4fa9 + - d3b82a92-bcf3-4af9-8e1d-71a28896b365 X-Runtime: - - '0.334550' + - '0.463754' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAL/MMFcAA6RTTXPaMBC98ys8vgtBykfCCJN22kw7PTa99OJZW2ujiSy5 - khxwfn0lGwMBLp0c9723u9LuW7bZVzJ6RWOFVut4Op7EEapcc6HKdfz7+Ync - x5tkxPLGOl2hSUZRxARPFvfL2ex+smTUBwHzXL4F5YiP3zI1b9/+Prjlrtrt - Z3eMnrNBXQhjHVFQYfIdFKNncaAlDNEvLTWjpziwua5qUG2khFzHzjQY0w7H - CoRMfJtH3ENVSxx7JaM9HAT1Viu8Sitgf4XtMLPCXWtzg+CQE3CRa2tcx9yH - TlQYJ3eT6YJM5mTy8Dxdrmbz1af5H0ZPCV1+U/P/yz8l9P27NZBCoOT2+CQu - HMnBcHsoCsZAe3hxDW0NkkCe60a594oguJL0oIczIaV3AYHSIFbYL+9L+vT5 - 57f0x1dGb/JD8gcH1dc4eI6889s5Oig5FtDIoVWmtURQcRIWx+iBPIp7P2Qu - zZoWTdrYx34AF27ptKKCEkljvK2cq+2KUrAWnR1nBoRy/uOlf/UO2pBMfZ0w - h7RCt9U8lbrU9FC7VuUG1aswWgXJ2oLimd778zl2GHraJrO5EbXzF3ljo53G - 6RdUyfalLfiC0T4auA96rP+3JeFeFUoilHAi8JfTLUBaP95b0mMd//uwKVXo - y1PyJL023iVmOxA4N+jnfjWNkxuS0T8AAAD//wMATpKI38oEAAA= + H4sIAKrSRFcAA6RTwXKbMBC95ysY7rIwE6eOB+O002ba6bHppRdmQQvWREhU + ErbJ11cCYzvGl06O+97bXWn3bbI51CLYoTZcyXU4n0VhgLJQjMtqHf5+eSbL + cJPeJUVrrKpRp3dBkHCWxstltFw+Rgl1gcccV2xBWuLit1wuure/j/bTvt4f + 7uOEXrJeXXJtLJFQY/odZEIvYk8LGKNfSqiEnmPPFqpuQHaB5GIdWt1iSHsc + a+AidW2e8AB1I3DmlAkdYC9otkriJK2EwwTbY264nWoLjWCREbCB7Rpch8yF + ltcYpnE0fyDRgsT3L3G8mj+s5tGfhJ4T+vy2Yf+Xf04Y+vdrICVHwczpSYxb + UoBm5lgUtIbu+OIGugYEgaJQrbTvFV4wkQygg3MuhHMBgUoj1jgs70v2/Pnn + t+zH14Te5MfkDw5qqHH0HHnnt0t0VDIsoRVjq1wpgSDD1C8uoUfyJB78kNss + bzvUWWuehgFcuaXX8hoqJK12trK2MStKwRi0ZpZr4NK6j1fu1XvofDJ1dfwc + shrtVrFMqErRY+1GVhuUO66V9JK1AclydXDnc+ow9jRtbgrNG+su8sZGe41V + ryjT14XZ7/KEDtHIfdBjw78N8fcqURAuueWev55uCcK48d6Snuq43/tNyVJd + n5Ij6dR415jpQWBMo5v7ZBpnN6R3/wAAAP//AwBw2z7qygQAAA== http_version: - recorded_at: Mon, 09 May 2016 17:45:35 GMT + recorded_at: Tue, 24 May 2016 22:16:10 GMT - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions body: encoding: UTF-8 string: | - R389658362-74HTEQQU + R764274475-5PMMUQP7 + {"device_session_id":"884659d65db61c90a3f61fbc575e2946","fraud_merchant_id":"600000","correlation_id":"cb9c9c6cd0803d2ab6318dcb423acf7e"} 19.99 @@ -202,8 +207,8 @@ http_interactions: US 12010 - hkyfd6 - 68744807 + k5swvb + 28808890 sale headers: @@ -212,9 +217,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.60.0 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -223,7 +230,7 @@ http_interactions: message: Created headers: Date: - - Mon, 09 May 2016 17:45:38 GMT + - Tue, 24 May 2016 22:16:11 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -244,55 +251,55 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"6e699c1a57b930ee557eb296a3be2048" + - W/"2253f5275719a030fc1a6dc07103134d" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 88b97e8f-d527-460c-a7ae-669e613c382a + - c54af76c-1e10-4ce4-9aae-4bcd06910fd6 X-Runtime: - - '0.460333' + - '0.478509' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 http_version: - recorded_at: Mon, 09 May 2016 17:45:38 GMT -recorded_with: VCR 3.0.1 + recorded_at: Tue, 24 May 2016 22:16:11 GMT +recorded_with: VCR 3.0.3 diff --git a/spec/cassettes/Braintree_checkout/accepts_a_CC_payment.yml b/spec/cassettes/Braintree_checkout/accepts_a_CC_payment.yml new file mode 100644 index 00000000..96d1b4aa --- /dev/null +++ b/spec/cassettes/Braintree_checkout/accepts_a_CC_payment.yml @@ -0,0 +1,320 @@ +--- +http_interactions: +- request: + method: post + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token + body: + encoding: UTF-8 + string: | + + + 2 + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.62.0 + X-Apiversion: + - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Tue, 24 May 2016 22:15:53 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff + X-Authentication: + - basic_auth + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + Etag: + - W/"e318d212615cb9350faecc4256e8f20c" + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - c1e130f3-f4ae-44d6-af24-4f4fde7ef9ec + X-Runtime: + - '0.081962' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAJnSRFcAA6RVXW+bShB976+I8t7bBUxukZJUsR0wyKwLxnzsG+ySAt4F + bjGfv/4OdpOmkm9V6T5YlmBmzpxzZob7L4PgN136vcmr8uFW+gvd3qQlrVhe + fnu4PXj6x8+3Xx4/3FOep+Xp46k6puXjh5ub+y7mbfqYjpZMQmuKA601i2rc + rqyMhW6VKFadCh3Nz13BWyL7I91YdVI6+S43F9iIBhJgQQL3GHl6gdfPEjb0 + PJqsHIvnHnuHKSqcAXtHhNeOahc2IoEz7bxlZnussD0udusnZE8HCXssw160 + eDHwSAId4tyXKHQ0u3gacI56vEcj1p3RLiqoV0n2uOjx5CzsiU54/fTdXj/1 + tj5I8D9iIXEqcBUFKgplfvwa1nlS+GpaPqtszZQkZAu8tijzIKcgPQusJg7w + Syz76teQn3aB+w9T9D5WspwVeJECX9CkSGRVxAHzqeiBv1WxjdvTqeq2MsTu + 1QnwjpHQFlthjVHAW7axOAlYxgxficJjG8naaVc4yB61E+hdxIYOMXaXCqvF + Ib+jHkdYYSemfEN2rhWJwXlSzjos660SDVsZd4kgNVH8MQrdOpEX576gTpMY + /uzPZBZ1Eu77nASqHIcWxEv84pf11p+Z93kkDzXEIAdq+6HVgO95vHER3dh3 + 21HLqHFsqay3xLC6dKXmVOjguwve+CVgcybr6lZAP14F3tpdEkBPcpZBzLRV + rultdq+Y4VkvszGFPlHZR1Tyx2Rl3pkiQ2yznHb55y4K8URCqPUbLc88Qh/F + +rV8eL5SZcA7JeOfeXOuF6hZsuEw83jW8m+zvFL7B49toLdRMKjM4AX9Q4z/ + 0CZ/Ac+Ykc36Ph9kv2ChxV3oJRIDJ4APtSQCMdTQVfg1v3t37lu4NVWWTRTy + XRRIfPb3oCyh/uEyy5fZsub8pPSbZAX5sNtM6EXqv+f8NM8DTw39RI2Bnz3f + az1dgX+lDx5ZS6LMPOc5c3/ZjVkrEsJMhMuG7FXYH9QxQ5vOOoP3xP8/vl/i + rswu7INfxLImsZXaA/8+Cvq3PGJw0AAj5x3+K3/wskkUZs69g4aIlj4HrYAX + qanQWpjxlj2rnSd8xGRtjMef2l/Zt44IAndF5TMug/fQ73zX8NvuAzYRekPl + A+zCO74HDHkzFj/O3JJAn4D/+Dp39jjvDtxhY6gTwd7rP12bi3e7uYzghkAv + aB9cbgKd8c67iCVaAleB1X2IO0fWjvD8zuS+564s7XL/eHv27eDD3FsNmWsI + AvuCZ51+3rQffV+/a/PcEMCRujM3mQizRA/3ny7fog/3n379Sv0LAAD//wMA + sgW8j9wGAAA= + http_version: + recorded_at: Tue, 24 May 2016 22:15:53 GMT +- request: + method: post + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + body: + encoding: UTF-8 + string: | + + + Han + Solo + han@example.com + + Han Solo + + Han + Solo + YT-1300 + + Mos Eisley + AL + US + 12010 + + bd4aec9f-1518-401e-93c0-1d435318686a + + true + + + {"device_session_id":"c91b199e14f546b77b413e4d1472dcfc","fraud_merchant_id":"600000","correlation_id":"0f530e35f607d50c26d8ec473a819e3e"} + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.62.0 + X-Apiversion: + - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Tue, 24 May 2016 22:15:56 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff + X-Authentication: + - basic_auth + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + Etag: + - W/"19ed150642f272b2601c0e6bd064fc8d" + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - a229b858-f4b8-4087-91ad-1ec1253d7ecd + X-Runtime: + - '1.312361' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAJzSRFcAA7RYWW/jNhB+319h+F2R7Fi5oCgNkBbFogsUSFKgfVlQIm0z + kUgtSTn2/vodUhd12JaTNE/hzDfD4dxWcLdNk8mGCEk5u53OzrzphLCYY8pW + t9Pnpz+cq+ld+CWIc6l4SkT4ZTIJKA4vF/Nr7/piHrhw0DTgxWvElAPnnxHz + dz9/XKvLt/RtuwCQzdXoJRVSOQylJPwTscC1zpqdoOr0yBMeuM1Zc2OeZojt + Jowmt1MlcjJ1DZ2kiCYhXPMb2aI0S8gZIAO3IGtAtuaM9MSWaNujvZFIUtXH + xoIgRbCD1ETtMnI7xXBUNCXTcO7NLhzPd+aLp/n8Zubf+P5/gdsIGPk8w+Pl + L0C+ESjuN2FwlpQkWNYmYaqcGAksS6VICLSbam6bX1CAFtEkgQA7CGNBpKzo + RWhfWBXUklbF3mnF3aY22MOBLUEHw1tdOhzkkiuVIETV9v/75MzOPS9wO/RG + gGwVYVg7smDt0ZvwGCVU7cJvXE5+pzIhOzCvIjY4QVZQL+H9X4Fb/tvwMi4V + ShyoIRLOIKpglk2yn5gzJXaG7KAkW6N5+PwInh2gH5I6B6n7IbHzfWIsh8DR + OLxaeB25itMXNPF5ZlAVePKoICnlhC8n9waOGi3dMH6sYEotJ5WN3ysbo8Pd + k/RQDCxczPSfxtSRDHTFOPq68B8q9Qvrs41Y8wRDEVQZPykyusupJXiqWyFF + CbjylfE3pj1X0xpY4Uy+dKiUOWIxsfF9Zi14irsvBt09vtwbpK4QpavApG+P + WuExiahqHlIcG+YS5Ulld8R5QhCbhrpENdQwG3AuIFQO1F6eaPstpV1OJUK2 + GRXGHiflTK2hNmE2dIkD6B1BArw391pwQ22hoS46ti9RIkkpZVmyJihRa0gR + K6gWrYLRFK2IkwsYaUpl8sZ1kZREybNIIMp0o1vBA9/QTo85N0O7lDD1PSVq + zfH3hK+4u4G8PcvY6o6wDRWcacCtRAxHfAs9vtZf3wjppCskQuy1Ma1FraCm + ZS/ComrKQ8UDUwRPrAyvCDVAkAxRK2gVoQLIPJKxoJn2dHuo1c06UPyVsPDF + v1RXF4FbnCpezuiP3DSzyGQsvJvCzBThVeSf+96Vf321IHPsL+Ykxpez89li + RjzPn8fQOfaJ1ro/NsKNjg1hKXckft2TMTXfkhBgRlFPQ2O+B2rIZlwilcuw + 4BOs56Qh2Jh4s4GqkRnoJ8Wk+ga13CPaImgjHSIEF23M8Gwt8dYo7F93GNBV + 1R72w9oOYmyFZS0B4oXEpsKhM0rO9j6mXmlRbDqybowSEplY267FskUzwWOw + puu3cObpHWYf94gGBStOeJ8BZ6MjvA9hawGzcBat8Lq98DULok0budwZ4IgF + r8i5Q0tembmnLXpGaNyyV1g6buEz2ANLXxGUkYtf+fQPrFXWOtOu4f6uX3IO + dMs65INrkB3R4X5f3X1sXaqDc8Ic7sscn8aVPactJ9YrTlrpSrn/ceJU2XVk + aJawcctFCT60kFWQkzetypOjVt3qcUdWhhI2fkGpjXjfIl37nOM8Nv3bcntN + a9Xjntr7nF9An7N3GD2CylcHOKjrWxz+/dV79B4fHvzZw9fuSDDZElNpOmAx + ZXTClJSWJwZu0CtNfzdpU8su3vNki2BAQdnXyeAHj+7vu94njRN+4RyfeMdn + 3aEpd+J8GzXZxs20/dNs5Bx7z+eLd328eOeni49M2M8o2o9/tIANtgl/fSBw + bJI1/PILAAD//wMA1xBJjsIVAAA= + http_version: + recorded_at: Tue, 24 May 2016 22:15:56 GMT +- request: + method: post + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + body: + encoding: UTF-8 + string: | + + + R617859651-TCF7BYBB + {"device_session_id":"c91b199e14f546b77b413e4d1472dcfc","fraud_merchant_id":"600000","correlation_id":"0f530e35f607d50c26d8ec473a819e3e"} + + + 19.99 + Solidus + + Han + Solo + YT-1300 + + Mos Eisley + AL + US + 12010 + + j57t86 + 74290962 + sale + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.62.0 + X-Apiversion: + - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Tue, 24 May 2016 22:15:58 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff + X-Authentication: + - basic_auth + X-User: + - s8282g6qcjgm2dfk + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + Etag: + - W/"55e0e393e3825404767b8569b0e18f79" + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 51d8f898-3b3e-48b7-b71e-4a4a08bd064a + X-Runtime: + - '1.056880' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: ASCII-8BIT + string: !binary |- + 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 + http_version: + recorded_at: Tue, 24 May 2016 22:15:58 GMT +recorded_with: VCR 3.0.3 diff --git a/spec/cassettes/Braintree_checkout/denies_a_fraudulent_card.yml b/spec/cassettes/Braintree_checkout/denies_a_fraudulent_card.yml index 8001926a..0d2269b6 100644 --- a/spec/cassettes/Braintree_checkout/denies_a_fraudulent_card.yml +++ b/spec/cassettes/Braintree_checkout/denies_a_fraudulent_card.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token body: encoding: UTF-8 string: | @@ -16,9 +16,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.60.0 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -27,7 +29,7 @@ http_interactions: message: Created headers: Date: - - Mon, 25 Apr 2016 16:30:52 GMT + - Tue, 24 May 2016 22:16:28 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -48,46 +50,46 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"ebdb0f1c0fd3a67155160e55c7122742" + - W/"01227c2ea22796b02bb255fedf13e889" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 28d4ba69-05a4-464b-b964-284efc8440f4 + - 7a9d6155-f27f-4b74-9b15-af3c82212918 X-Runtime: - - '0.231296' + - '0.084034' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIADxGHlcAA6RV0W6jOhB936+o+r53jQm9i9R21SSFgIK7IYkBv4FNG4hN - cpcAga+/46TtdqXc1Ur3ASGZ8Zw558wMt9+OSl61+Y+62FV318Zf6Poqr/hO - FNXL3fV65Xz+ev3t/tMtl0VeHT4fdtu8uv90dXXbprLJ7/Pexyz2hzSyG6/c - 9fOJvxFxuMtMf58rB+nzUMmGYdrzmb/PqkXxVPhFMCxG8KBA0ZIMDx1ZbYoE - Ezj3N2T6gpPV45GoBJGVKINpYBBMZVAGAxnINigfDTLQMoh0jI73OjJdo2eX - 9CxyEIvC5yRe2EH5cCQF6sgE9YQujqTcDcF0ZwTFyAwGjoPp1iTD9kcwfegC - 52jAuyfKkFyRXRJZKMZy+z3eF1lJrbx6tMRUmFksRmTqc7GCOyXrROTXaUSe - U0yt77E8PEXhP8J0utTcFKIkoxz4giZlhi2VRoJy1Wn+OzELOz7s2jmG2KU1 - AN42UfZorvw+iWQjZr5kkdgIl5pJvG0SbB+eStCrtw+gd5m6DsQEba78hsTy - hq8kIqY4CPMFBYVdZq6UWaV1GO/nZnKcY9Jmiu2ZSfskDvcZHp3qgjx15lLt - z+CV+yxedgWLLJzGPsQb8tWv9/q8ogOfjnuIQQvITWO/Bt+LdBYiPgtu5r29 - 4e624dhpmOu3+cQquHLA9xC8oRVgS4Eda66gntUOkWnQZhHUhDcbiBnm5iW9 - vfYNMz7p5dWecsBBirhB+2zi3Xhqg8RsPDwVX9skJgOLIddvtDzxiClKnUv3 - 4XxiYcA7ZP2feXPKF1mbbCah54nW8m+vupD7lcc8cpokOlrClSX/Q4z/0KZ4 - Bs+Eu9H6Pq4xLUXsyxBqSdRRMsCHXAaDGO46Fjz1776d6lbhnpvjOonlUxIZ - Uvu7NseQf33u5XNv+fp+VtE6m8B9mG2hnDKnHzk/6H6QuescuHuUJ8+Xdscn - 4F9FwSN/zEzNU/dZ+MtsaK1YDD0Rj2u2tGB+UCtcezjpDN4z+n98P8dd6F2Y - B1qm2DbExOqAf5dE3fs95krQgKDFB/w3/uBlnZnC07WDhohXVIJWwIvtubIb - 6PFGPFrtSlEksN2n/U/tL8xbyxSDvWJJjSvgO9Sr9xp5n33AZsqpOV7DLHzg - uyZwT2PJreaWRc4A/Pu3vgt6PTuwh93jPlPio/7Dpb74MJtj2M8t1IKW0Xkn - cI13mkVi8Aq4KmItY9IusL2F8xtP0lU48e3z/pPNybc1hb73a6ZzKAbzQrRO - P3faa92X95ruGwY4RnvihpnyKnR3++X8L/p0++XXv9S/AAAA//8DAElGXWDc - BgAA + H4sIALzSRFcAA6RVXW+bShB976+I8t5bWExukZJUsR0wyKxrjFl232CX1OBd + 7FvM56+/g92kqeRbVboPliWYmTPnnJnh/kun5E2Tfa/yQ/lwq/+l3d5kJT+I + vPz2cLsN7Y+fb788frjnMs/K08fTYZ+Vjx9ubu6bRNbZY9Z7iMXekBCrdotD + v5x5OxEHh9TwjpmytfF5oGTNUNTzhXdMy3W+yt12Nfd1RoKchk8mJcHOJzin + ZN37c2rikA4+sguKPIWdNaIhVjjcIxbybkW2HSNu58+5RhE1mVp3frjv/dDL + XxzcM2JrUPeFxmvLL546nGst3mg9tqF2cegw9LiaTSZ+sdf8uavj4vm7P39q + fbvT4b/HSpdc4QMlphYjuf8aH/O0iMysfDbFXBhpLCZ47nERQk7BWkG8KiH4 + JUGR+TWWpxUJ/hGG3SbGLhcFnmTAFzQpUmSqhIiIqxb4ewexCFo+HJolgtiN + OQDeniprslReT4msxcKTjIidcCKDxvuaIuu0Ktaa31sn0LtIHBti/CZTXo1j + ecdDqWFDnITxTfNzq0gdKdNy1GF6XBq0WyLcpIodmRH1NA6OKZqc+4I6VepE + oz+DWxzTeNPmjJgoiT2I1+XFL++tPzdvc4q6I8Roa6gdxV4FvufJItD4wr9b + 9taOO/uaI7tmjtdkMzPnygbfA/AmKgFbCmSbSwX9hAcNz/0mJdAT2u0gZlga + 1/R2m1fM+KyXW7nKHjiKNK5HfTpz71y108RiOqzyzw2N8cBiqPUbLc884khL + 7Gv58HxmIsA7pf2feXOuR8xdupAw83jU8m+3vFL7B48lsWtKOlM4suB/iPEf + 2uQv4JlwdqO+z1sUFSL2ZAC9UNVJBvhQS2cQwx3bhF/1u3fnvlVw5Ma0orFc + UaLL0d+tMYX628ssX2bLG/PTMqrSGeTDbgtlF1n0nvPTOA8yc+wTdzp59nxj + tXwG/pUReORNmTHyHOcs+GU3Rq1YDDMRTyu2MWF/tEY41nDWGbxn0f/x/RJ3 + ZXZhH6IiQZYuZmYL/FtK2rc85kjQAGvrd/iv/MHLKjWEO/YOGmq8jCRoBbzY + kSurhhmvxbPZhCrSBLL6pP+p/ZV9a5hicFdMOeIKeA/9jncNv+0+YDNlVxxt + YRfe8d1iyBux5H7klhJ7AP7969z5/bg7cIed7pgq8V7/4dpcvNvNKYUbAr1o + G3K5CXzEO+8i1nkJXBU2NzFu1sjaw/M7V0ZhMPOsy/2T9dm3bQRz71VsrKEY + 7Asedfp50370ff2ujXPDAEdvztwQU26pPdx/unyLPtx/+vUr9S8AAAD//wMA + +doQCtwGAAA= http_version: - recorded_at: Mon, 25 Apr 2016 16:30:52 GMT + recorded_at: Tue, 24 May 2016 22:16:28 GMT - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers body: encoding: UTF-8 string: | @@ -108,12 +110,12 @@ http_interactions: US 12010 - bb56ebba-9e09-441e-866a-af336aac9cf5 + 97749aa8-06d0-4e80-bfe5-2f1e715387a7 true - {"device_session_id":"dd15c7f582acef102b0ed6c7b7321522","fraud_merchant_id":"600000"} + {"device_session_id":"c5b422d3e53f52caf09b085ee42b438a","fraud_merchant_id":"600000","correlation_id":"b108a167ff7616e9fcf1b8b1cf0bba05"} headers: Accept-Encoding: @@ -121,9 +123,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.60.0 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -132,7 +136,7 @@ http_interactions: message: Unprocessable Entity headers: Date: - - Mon, 25 Apr 2016 16:30:55 GMT + - Tue, 24 May 2016 22:16:30 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -155,122 +159,37 @@ http_interactions: Cache-Control: - no-cache X-Request-Id: - - 9b05a4f7-b396-4e26-8d61-7b96a23c00e5 + - 95770f47-e641-439b-8177-847b2e42f8ad X-Runtime: - - '0.239868' + - '0.284859' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAD9GHlcAA6xWS3PjNgy+51dofGoPXD1sOY9RtN1DH4f20iSdaS8diIJi - NhKpJals9O8X1NuR0zqd9ckEPhAgHh+UfHypSu8ZtRFK3m7CD8HGQ8lVLuTj - 7ebh/id2tfmYXiRQC4ZaK800mlpJg+mF5yWdyLi/08GzbY23G9Aa2o3fofwZ - ltSgoRoteGOsqlD3RxLk+Cw4MoPGxcNEnuZ5GPPLIr6KgGMRBlEWYL7nl9nl - NgrjKEr8tc14W6GhyRndzw8grdPsA/dL/LVmshHaWCahwvQXkISczyOkhFFy - p0qV+PN5RGAFokzp6h/wBaq6xA9cVZSGTjyCuMZcWMZBT96dlI4HVeaopyC8 - 3s1rzWyTibKkejHIc6qOmTVnvee8N3UoYzWinfz8ec/CrUvnK/nSBF8syhzz - UelJUd5urG6wb445AsWhFLZNf1PG+1GYElsKYxQukRofqdDpp18Tf/i71HLV - SKtbRj2MDMr6AFH6cEfpOyFf2tXKWCg7dRpGQUjPWormbPtvppuau62Q+qlC - e1A5k0pyTLMs3mOWAbvG4JrtdiGyq/0eGBTb7R6AX/MiJl+nTOebVW3pocep - pakVRds3kEto4i8li4BXxt92zv7npPmrASDRghBcTkauSCryCo+Y/gwWv0Dr - /Y7/ILeY33idg8QfARdjYgQHO/UGdS7YxqSPvfnfejB3rdspBj56fp74rSv7 - ulsTeDavmPDfkIsWOgt/PEn/aTK8h/XvcWXRCIZePWTlTX1vPpUFeDcerjym - pghcPteq3qjWilNsZyTgBNISH6QP8kmqL9L77nuq8RuY/gZyGmv7+eWQ+JP/ - Yfy+LWMTP9cg21Ps9E7WO4vxzmO7t5nuTLaayLB764MU1PLeHXU8Gk8V3icq - Mo3JzI1zSiaWGydjvawSq55QnnxdJmS6o/EPQ3ePPK7DLg1jpxgOU6h0NXPf - DukfwkC/7vrznNha6G6oWaWkPdDDaae+Fp5Atwg6jYIoOIJ30sn7QDzM1aDj - jW5nrKTLaN+1ppNGis8NMtlUGalETmRPJEVUh7ssCq7iPNzut5xf7sLL6ywr - 9mFYcOC7uEj8N02nbtBYAw3IMFhuqnrBCDgglPZAoeGMWcjmz69M2BnRHydl - o6mWNKaPTUkdtPC20iymyvGIgHIGL2RT+NBqVS4wo2AECGMat3EzkE8z6kj6 - uuNVwZwe3Bpd+F4r5xyqvOEdzy3SOMnGBbXaWSRxb2Zghy/fnI5WVLihlgv3 - LNixKL4P9zfb4CaO/+quGAyGG5o6f98Ns0G/J4/3XeKf+lj/CgAA//8DAJ2B - +kvpCwAA + H4sIAL7SRFcAA6xWyXLjNhC9+ytYOiUHDBdRm4vmZA5ZDskltlOVXFJNsmlh + TAIMANrDv58Gd4lyIqdGJ6H39TWjj1/KwnlBpbkUdyv/g7dyUKQy4+LpbvX4 + 8BPbrz7GNxFUnKFSUjGFupJCY3zjOFFL0vbv+HBMU+HdCpSCZuW2Uu4kFlWg + oBw00lobWaLqnpYglcICDAXDeBYnvrcHf7vL893W3+IhT3M/2Sd+mntJAt4m + cs8UBjsZvvAUmUate066ScIgyNa4WeebIIXcOyTefoMYBkm43kPkLnUGa7mC + OmMUZ3oEYSxn69lf5C45ow5X2jABJca/gCDJ6T2IFDBQ7mUhI3d6DxJYAi9i + Mv0DfoGyKvBDKksqZ0sea6Yw44aloEbvlkrPoywyVGMQTufmnDPpJLwoqO8M + soy6rCfOVflcl1MrpY1CNKOfPx+Yv7blPKPPVfCLQZFhNjAdwYu7lVE1dkM2 + RSBTKLhp4t+kdn7kusCGwhiIc0mFT9To+NOvkdv/nXNTWQujGka7gAyK6ghB + /HhvJ25Jn+tVUhsoWnbsB55Pac1JU7XdN8tNS9KUSPNUojnKjAkpUowPu114 + ANgzb5t5LMS9x5IcNyzIfdz5m/V+BzvydUl1siwruyqnpaXt53nTDZAtaOTO + KbOAF8rfds/+56a5iwUg0gxYbE0GzIlK8gpPGP8MBl+hcX7Hz5gazG6d1kHk + DgI3Q2F42qJLb5kaaWodP3Xqf6te3Y5uy+hx7eVlxMm27ctpjeBFnyHqv0nO + Rugq+dNN+k+VPh/W5WPbohA0Zd1X5U1+pz62BdJ2PWx7dEUR2HouWZ1SpWRK + sV1RgAuShvAgfhTPQr4K57vvqcdvyHQWyOlnsTu86sgd/ffr920Rm/C5AtFc + Qqd3ot5ViHcd2r2NdFei1QiGba6PgtPIO/c08agdmTufqMm0JhM2TiUZUW7Y + jOWxiox8RnExu4SLOKT1931rR5z2IYz9jWX0jzFUMs3sN0j8B9fQnbvuPRW2 + 4qr7ZCilMEdKnG7qOfGCdIOg4sALvBPxljp674GH2R60uNHejAV1Hu27znRU + C/5PjUzUZUIsnhHYE0gR1GGYBIS0mb/ertN0F/q7Q5LkW9/PU0jDTR65b6qO + 06CwAlqQfrHsVnWEQeCIUJgjhYaTzIw2fX4l3EwS3XNk1op6SWv6VNOHG868 + LTizrbI4wqGYhGe0MXxolCxmMgNhEOBa1/biJiCeJ6kT6vnEy5xZPtgzOvO9 + ZE41lFmdtjg3K+NIGw7U4mYRxebMwPRf0Bk9DS9xRSPnb5lHlz58CIJbf3u7 + 9v5qTfQKvYW6yt5nYVLo7uTpvYvcSx/9XwEAAP//AwAYHeWlMQwAAA== http_version: - recorded_at: Mon, 25 Apr 2016 16:30:54 GMT -- request: - method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token - body: - encoding: UTF-8 - string: | - - - 2 - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.60.0 - X-Apiversion: - - '4' - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Mon, 25 Apr 2016 16:30:56 GMT - Content-Type: - - application/xml; charset=utf-8 - Transfer-Encoding: - - chunked - X-Frame-Options: - - SAMEORIGIN - - SAMEORIGIN - X-Xss-Protection: - - 1; mode=block - X-Content-Type-Options: - - nosniff - X-Authentication: - - basic_auth - X-User: - - s8282g6qcjgm2dfk - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - Etag: - - W/"bd3eadd6ecaa46e38bf599da7c376639" - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 242ac731-45c2-4d3f-b8f4-afde52e4e95c - X-Runtime: - - '0.224942' - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - body: - encoding: ASCII-8BIT - string: !binary |- - H4sIAEBGHlcAA6RVW2+bShB+z6+I8t4WFpNTpCSVb2CQWdfYXmDfYJfEwC72 - Keb6689gJ2kq+VSV+oCQltmZ+S4zPHxrpbitkx9leige79TPyt1tUrADT4uX - x7vd1vz09e7b080DE2lSnD6dDnlSPN3c3j7UkaiSp6RzEA2cPvKNys4O3XLq - 7HngHWLNOSbSVIZzT4qKItKxhXOMi3W6Sp18tRV56IeNu+UZ3Y6b1SzX3WyS - UR9n1JqP3H7XujMzp7N5h9FcDbM5ohCPLTMP+1yDGB1vxyrNxojO1o3bv6jP - Fu6obyrU957DYG242bjFqdLgqdJhsm5xdujd2UHF6ahdzdYqnrk97u0f7mzc - uGarwrvDUhVM4kPo60qARP49OKZxRvSkmOt8xrU44CM8cxiHnt2MNtx3ysjH - zxEi+vdAnFa+9y/XzCbS9inP8CgBvMBJFiNdRj4nTDYD/gNfeA3rD/USQexG - 76FeHkpjtJROF/qi4gtHUJ/vuUW0MMirEBmnVbZW3M44Ad9ZZJkQ49aJdCoc - iHu2FQrW+IlrL4qbGllsCREXAw+T41IL2yXCdSzpkWqkCwPvGKPRuS/IU8YW - GfTp7ewYB5smpb6OosCBeFW86vXen502aYjaI8Qoa8hNAqcE3dNo4Sls4d4v - O2PPrLxiyKyo5dTJVE+ZNEF3D7QhBdQWHJn6UkI/24MCGtSxDz2h/R5i+qV2 - jW+7fqsZnPmyS1uaPUNEYSrp4ql9b8u9wheTfpV+rcMA9zSAXL/h8owjIEpk - XrsP51Md/Kaf4u7PtDnn8/V9vBDgeTxw+Y9dXMn9imPpm1Xotzq3RMb+sMb/ - cJM+g2bc2g/8zneIZDxwhAe9hLIVFOpDLpVCDLNMHZ7yd9/OfUvvyLRJGQZi - FfqqGPTdaRPIv7t4+eItZ7gfF6SMp3AfZptLM0vIR8zjwQ8iscwTs1px1nxj - NGwK+hUENHImVBtwDj7zfpmNgSsagCeCSUk3OsyPUnPL6M88g/aU/I3ul7gr - 3oV5IFmEDJVP9QbwN6HfvN+jlgAOsLL+UP8NP2hZxhq3h96BQ4UVRABXgIse - mTQq8HjF53q9lUThyOii7if3V+atppLCXtHFUJfDd+h32Gv4ffahNpVmydAO - ZuED3h2Ge0MtkQ/YYt/sAX/35ju3G2YH9rDVHmPJP/LfX/PFh9mchLBDoBdl - 4192AhvqnWcRq6wArBLrmwDXa2TkcH5vC7L1po5x2X+iOuu2I+B7p6RDDklh - XvDA08+d9tr39b02+IZCHbU+Y0NU2oXy+PDl8i+6efjy61/qPwAAAP//AwDU - Q4g73AYAAA== - http_version: - recorded_at: Mon, 25 Apr 2016 16:30:55 GMT -recorded_with: VCR 3.0.1 + recorded_at: Tue, 24 May 2016 22:16:30 GMT +recorded_with: VCR 3.0.3 diff --git a/spec/cassettes/Braintree_checkout/expiration_and_cvv_are_required.yml b/spec/cassettes/Braintree_checkout/expiration_and_cvv_are_required.yml index 503c188f..8828552c 100644 --- a/spec/cassettes/Braintree_checkout/expiration_and_cvv_are_required.yml +++ b/spec/cassettes/Braintree_checkout/expiration_and_cvv_are_required.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token body: encoding: UTF-8 string: | @@ -16,9 +16,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.60.0 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -27,7 +29,7 @@ http_interactions: message: Created headers: Date: - - Wed, 04 May 2016 19:35:24 GMT + - Tue, 24 May 2016 22:16:33 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -48,41 +50,41 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"ee4d2d3b6ba2c1dfcf00fc7a0987c572" + - W/"87bcb4bd52eebce6db6dc6d8a1b217da" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 200f74ec-aafd-4a41-973b-5c2eb07e23cf + - 5d5c76dd-18fd-473e-8632-4d5e88ef20af X-Runtime: - - '0.237916' + - '0.084467' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAPxOKlcAA6RVXW+bShB9z6+I8t5bvJjcIiWpYidgkFnXGO/CvsEuCeBd - 7FvM56+/g92kqeRbVboPCGmZnTPnnJnh7mun5HWTfq/yfXl/M/lLu7lOS74X - efl6f7MNrE9fbr4+XN1xmafl8dNxv0vLh6vr67smlnX6kPYuYqE7xNSsnWLf - L+duJkJ/n+juIVWWNp77StYMkZ4v3ENSrvNV7nSMen1EiWTF67AKnN4bmMTF - K4qK3RQP2Q4X26mHPC2i3uAN2w5TN/OedmhlO533tJ6uArHzgmcNU6dntmdE - RSZfbNwzammM+i9RuDa94rHDudbiDTzWulsF+wEH+x7PpwMeoinka3Gw/u49 - Pbae1U3g3WM1kVzhfUQNLURy9y085ElBjLR8NsST0JNQTPGTy0UAdwrWCupW - McUvMSLGt1AeV9T/R+hWG+tZLgo8TYEvaFIkyFAxFYSrFvi7e7HwWz7smyWC - 2I0xAN4uUuZ0qVzQRdZi4UpGRSZsokfhro6QeVwVa83rzSPoXcS2BTFekyq3 - xqG85YHUsC6OQn/VvNwsElvKpBx1mB2WetQtEW4SxQ5MJ30U+ocETU91QZ4q - scnoz+AUhyTctDmjBopDF+In8uyX+16fk7d5hLoDxGhryE1CtwLf83jha3zh - 3S57M+P2rubIqpntNuncyLmywHcfvCElYEuBLGOpoJ5gr+Enr0ko1ISyDGKG - pX5Jb6d5wwxPejmVo6yBI6LxCemTuXPrqEwTi9mwyr80UYgHFkKu32h54hES - LbYu3YfzuYEA75j0f+bNKR81smQhoefxqOXfTnkh9w8eS2rVEe0MYcuC/yHG - f2iTv4Bnws5GfZ+3iBQidKUPtUSqkwzwIdeEQQy3LQOe6nffTnUr/8D1WRWF - chXRiRz93eozyL899/K5t9zxflKSKpnDfZhtoawiJR85P479IFPbOnK7kyfP - N2bL5+BfScAjd8b0kefYZ/4vszFqxULoiXBWsY0B86M1wjaHk87gPSP/x/dz - 3IXehXkgRYzMiZgbLfBvI9q+32O2BA2wtv6A/8YfvKwSXThj7aChxksiQSvg - xQ5cmTX0eC2ejSZQRBPI7OP+p/YX5q1hisFeMeSIK+A71DvuNfw++4DNlFVx - tIVZ+MB3i+HeiCV3I7eEWgPw79/6zuvH2YE9bHeHRImP+g+X+uLDbM4i2CFQ - i7ah553AR7zTLOIJL4GrwsYmxM0amTs4v3UkCfy5a573n6xPvm0J9L1bsTGH - YjAveNTp5077UfflvTb2DQOcSXPihphySu3+7vP5X3R19/nXv9S/AAAA//8D - AHdVbl3cBgAA + H4sIAMHSRFcAA6RVXW+bShB9z6+I8t4WlpBbpCRV/AEGmXWN7QX2DXZJAO9i + bjGfv/4OdpKmkm9VqQ+WJZiZM+ecmeH+WyfFdZP8qLJD8XCjflZurpOCHXhW + vDzc7Lbmp6833x6v7pnIkuL46XjYJ8Xj1fX1fROJOnlMegfRwBki36jt/NAv + p07KA+8Qa06ZSFMZn3tS1BSRni2cMi7W2SpzMozmCA+hFg48ozOSUmveU0nz + 1czbY7TWV7P5gAcvxRbEzkjuyrmGZ2xwc1t1B1dz/V0Xbvk+zF/61TaVdBu2 + zxbuqW8q1Peew2BtuPlThzOlxRulx+a6d/NDh/PD4Pa3A97Oe8AfcP70w509 + ta7ZqfDfY6kKJvEh9HUlQGL/PSizOCd6Usx1PuNaHPBbPHMY30JOTlvuO1Xk + 4+cIEf17II4r3/uXa2YbaWnGc3ybAF/QJI+RLiOfEybbkf+BL7yWDYdmiSB2 + ow+Atw+lcbuUTh/6ouYLR1Cfp9wiWhjs6xAZx1W+VtzeOILeeWSZEOM2iXRq + HIg7thUK1viRay+Kmxl5bAkRF6MOk3Kphd0S4SaWtKQa6cPAK2N0e+oL6lSx + RUZ/Bjsv42DTZtTXURQ4EK+KV7/e+7OzNgtRV0KMsobaJHAq8D2LFp7CFu7d + sjdSZu1rhsyaWk6TTPWMSRN898AbUgC24MjUlxL62R4UPHOb2IeeUJpCzLDU + LultN2+YwUkvu7KlOTBEFKaSPp7ad7ZMFb6YDKvsaxMGeKAB1PqNliceAVEi + 81I+PJ/qCPCOcf9n3pzq+XoaLwTMPB61/McuLtR+5bH0zTr0O51bImd/iPE/ + 2mTP4Bm30lHf+Q6RnAeO8KCXUHaCAj7UUinEMMvU4Vf97t2pb+mVTJtUYSBW + oa+K0d+dNoH6u/Msn2fLGfPjglTxFPJht7k084R85Pw0zoNILPPIrE6cPN8Y + LZuCfwUBj5wJ1Uae45x5v+zGqBUNYCaCSUU3OuyP0nDLGE46g/eU/I3v57gL + swv7QPIIGSqf6i3wb0O/fc+jlgANsLL+gP/GH7ysYo3bY++gocIKIkAr4EVL + Jo0aZrzmc73ZSqJwZPRR/1P7C/vWwC2Eu6KLEZfDe+h3vGv4ffcBm0qzYmgH + u/CB7w5D3ogl9iO32DcH4N+/zZ3bj7sDd9jqyljyj/oPl+biw25OQrgh0Iuy + 8c83gY14p13EKiuAq8T6JsDNGhl7eH5nC7L1po5xvn+iPvm2IzD3TkXHGpLC + vuBRp5837bXvy3dtnBsKOGpz4oaotAvl4f7L+Vt0df/l16/UfwAAAP//AwDa + iUBj3AYAAA== http_version: - recorded_at: Wed, 04 May 2016 19:35:24 GMT -recorded_with: VCR 3.0.1 + recorded_at: Tue, 24 May 2016 22:16:33 GMT +recorded_with: VCR 3.0.3 diff --git a/spec/cassettes/Braintree_checkout/unsuccessful_credit_card_transaction_amount_2000_.yml b/spec/cassettes/Braintree_checkout/unsuccessful_credit_card_transaction_amount_2000_.yml index a72f7375..ab06711c 100644 --- a/spec/cassettes/Braintree_checkout/unsuccessful_credit_card_transaction_amount_2000_.yml +++ b/spec/cassettes/Braintree_checkout/unsuccessful_credit_card_transaction_amount_2000_.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token body: encoding: UTF-8 string: | @@ -16,9 +16,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.60.0 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -27,7 +29,7 @@ http_interactions: message: Created headers: Date: - - Wed, 04 May 2016 18:03:57 GMT + - Tue, 24 May 2016 22:16:20 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -48,46 +50,46 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"b275de874c0c26753f98e879a2ee1462" + - W/"55650d011ef25af04737eb30637fd436" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 26c82bd4-8eed-4384-a2e9-d408dba70b66 + - 3d1c1903-a583-4c18-9441-263f3f16a7fe X-Runtime: - - '0.221783' + - '0.268337' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAI05KlcAA6RVXW+bShB976+I8t5bWExukZJU8QcYZNY1thfYN9glMXgX - fIsBw6+/s3aSppJvVenK4sHL7Jw558wM999OUty02Y86r8qHW/0v7fYmK1nF - 8/Ll4Xa7sT9/vf32+OmeiTwrj5+P1T4rHz/d3Ny3iWiyx6z3EI28IQmtxi2q - fjHxdjwKqtTwDpm0NXUeSNFQRHo29w5pucqXuZf7w2xEp1jEYWz4aNv7zkzD - U9fww5kRDy8jXMC7gqEYfv70qYtDssOFq/ubF0Q3KwMXMVo6286X9h5iC+pQ - +ezgnoa2RsPgOY5Wll88nXCudXgNj706LadV5w+VjvuR7hdM96ds5G/2P1R+ - 3z7B/6ceS10wias4NLUIif336JCnBTGzcmbyKTfSiI/w1GN8A3cK2vHQq5MQ - PyeImN8jcVyGwT/csLvE2OW8wKMM+IImRYpMmYScMNkp/hWfBx0bqnaBIHZt - DoC3j6U1Wkivj0PR8LknaMh33CFGHO2bGFnHZbHS/N46gt5F4tgQ47eZ9Boc - iTu2ERo2+JEbL5qfW0XqCJGWSofxYWHEpwXCbSrpgRqkj6PgkKLRuS7IU6cO - Uf4MbnFIo3WX09BESeRBvC5e/Xqvz827PEanA8RoK8hNIq8G3/NkHmhs7t8t - emvHnH3DkN1Qx2uziZkzaYPvAXhDSsAWHNnmQkI9mwo899s0hJrQbgcxw8K4 - prfbvmFGZ73c2pX2wBDRmE76dOLeuXKn8fl4WOZf2zjCA40g12+0PPOIiJbY - 1+7D+cREgHdM+z/z5pwvNHfpXEDPY6Xl3255Jfcrj0VoN3F4MrkjCvaHGP+h - Tf4MnnFnp/SdbREpeOSJAGqJ5UlQwIdcOoUY5tgmPPXv3p3rlsGBGeM6jsQy - DnWh/N0aY8i/vfTypbc8dT8tSZ1O4D7MNpd2kZGPnJ9UP4jMsY/MOYmz52ur - YxPwryTgkTemhuKp+iz4ZTaUVjSCnojGNV2bMD9ayx1rOOsM3lPyf3y/xF3p - XZgHUiTI0vnE7IA/7J3u/R51BGiAtdUH/Df+4GWdGtxVtYOGGiuJAK2AFz0w - aTXQ4w2fme1GEo0jq0/6n9pfmbeWSgp7xRQKl8N7qFftNfw++4BNpV0ztIVZ - +MB3i+GewhJ7xS0N7QH492995/dqdmAPO6dDKvlH/YdrffFhNscx7BCoRVuH - l53AFN55FrHOSuAqsbmOcLtC1h7O71xBNsHEsy77TzRn37YE+t6rqcohKcwL - Vjr93GmvdV/fa6pvKODo7ZkbotIttYf7L5dv0af7L79+pf4FAAD//wMATUIw - KdwGAAA= + H4sIALTSRFcAA6RV0W6bShB9z1dEeW+7XkxukZJUsR0wyKxrjBfYN9glAbyL + fYsBw9ffwU7SVPKtKvXBsrQ7O2fOOTPD3bejktdN+qPKd+X9zegzurlOS74T + eflyf7PxzU9fb749XN1xmafl4dNht03Lh6vr67smlnX6kHYOZqHTx4FR28Wu + W0ydTITeLtGcfapMNJx7StYM047PnX1SrvJl7myJ5aKlv22ZoorM3N4tbMSK + zTjyo47NbI0UWcZ8rrl+NGaK5JH/0ke92MI9YrMXzAqimC8ks9zWxZ4kfbZ9 + tkjHAhOxwHuOwpXhFo9HkqOWrFFHzFXnFrsjgRrd6bhzZ3YLmLpbuD/c2WPr + mscR/HdEjSRXZBcFOgqx3H4P93lSUD0tn3QxE1oSijGZOVz48KZgrQicKg7I + c4yp/j2Uh2Xg/Ss0s421LBcFGafAFzQpEqyrOBCUq3bgvxNzr+X9rllgiF3r + PeBtI2WMF8rpokDWYu5IFohMWFSLwm0dYeOwLFbI7YwD6F3ElgkxbpMqpyah + vOW+REQTB6G9IDc3isSSMikHHSb7hRYdF5g0iWJ7ptEuCr19gsenuiBPlVh0 + 8Ke3i30SrtucBTqOQwfiR/LVr/f67LzNI3zcQwxaQW4aOhX4nsdzD/G5e7vo + jIxb25pjs2aW06RTPefKBN898IaWgC0FNvWFgnr8HQLvmySAmnCWQUy/0C7p + bTdvmOFJL7uyldlzTBEf0S6Z2re2ypCYT/pl/rWJQtKzEHL9RssTj5Ci2Lz0 + Hs6nOga8Q9L9mTenfIGeJXMJPU8GLf+xywu5X3ksArOOgqMuLFnwP8T4H23y + Z/BMWNmg79MG00KEjvSglkgdJQN8yDViEMMtU4df9bu7U93K23NtUkWhXEbB + SA7+brQJ5N+ce/ncW87wPilplUzhPcy2UGaR0o+cH4d+kKllHrh1lCfP10bL + p+BfScEjZ8K0gefQZ94vszFoxULoiXBSsbUO84MaYRn9SWfwntG/8f0cd6F3 + YR5oEWNjJKZ6C/zbKGjf3zFLggYErT7gv/EHL6tEE/ZQO2iIeEklaAW82J4r + o4Yer8WT3viKIoGNLu5+an9h3hqmGOwVXQ64Au6h3mGvkffZB2ymzIrjDczC + B74bAu8GLLkduCWB2QP/7q3v3G6YHdjD1nGfKPFR//5SX3yYzUkEOwRqQevg + vBP4gHeaRTLiJXBVRF+HpFlhYwvnt7akvjd1jPP+k/XJtw2FvncqNuRQDOaF + DDr93GmvdV/ea0PfMMAZNSdumCm7RPd3X87foqu7L79+pf4DAAD//wMA7Bus + 69wGAAA= http_version: - recorded_at: Wed, 04 May 2016 18:03:57 GMT + recorded_at: Tue, 24 May 2016 22:16:20 GMT - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers body: encoding: UTF-8 string: | @@ -108,12 +110,12 @@ http_interactions: US 12010 - 9ab3d281-9300-4e01-908b-fe21e0d0a30b + b7fe938c-5ba9-453e-9866-7d153d59aaf8 true - {"device_session_id":"c9f24a7149bf37858d70cfd9d678bebd","fraud_merchant_id":"600000"} + {"device_session_id":"153aa36891b5b155dc64ad550eb02bc8","fraud_merchant_id":"600000","correlation_id":"1a620a96ae4838906e09d86deeafe57f"} headers: Accept-Encoding: @@ -121,9 +123,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.60.0 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -132,7 +136,7 @@ http_interactions: message: Created headers: Date: - - Wed, 04 May 2016 18:04:02 GMT + - Tue, 24 May 2016 22:16:23 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -153,59 +157,60 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"f7223d2129f36d863f67c7a1f2b7c96c" + - W/"645e7179a5de72ad5cb129f77921ad99" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - fc6b3eb9-dfcb-47e4-b0d5-574519adf416 + - 70639224-2348-4c00-8549-d7b30549bbcf X-Runtime: - - '1.189160' + - '1.329462' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAJI5KlcAA7RY227jNhB9z1cYflck2fLaCRSlAdqiKLrFAkkKdF8WtETb - 3EiklqQce7++Q0qUKMkXOUnzFM6cIYec27HC+12WjraYC8Lo3di/9sYjTGOW - ELq+Gz8//e4sxvfRVRgXQrIM8+hqNApJEi28YL4I5vPQhYWSgS7eICodWP9c - 0tn+548bOX/NXnfBJHRtrUKvCBfSoSjD0R+Ihq61VuoUmdUjS1noNmuljVmW - I7ofUZLejSUv8NjVcpwhkkZwzC94h7I8xdeADN1SrAD5hlHcM1uhXU/2ipeC - yD425hhJnDhIjuQ+x3fjBJaSZHgcTTz/k+PNHC948he3XnDr+V9DtzHQ9kWe - DLefgH1jUJ6vw+CsCE4TUbuUEOnEiCei2hRxjvZjpW3rSwnIliRNIcAOShKO - hTDyMrTx1gS1kpnYO62429IGezqwFehkeM2hh4NcaYXkGMva/3+fHH/qeaHb - kTcGeCcxTdRDlqoj+6YsRimR++gzE6PfiEjxHtwzwgbH8RrqJXr4K3Srfxtd - zoREqQM1hCMfogpu2SL7igWVfK/FDkrzDZpEz4/wsgfkp6ymYPVwyGx6zIwW - EDgSR4vA69gZTd9Qx+eZQlUko0cJSSlGbDV60HDU7NIN4/sKptrlorLxe2Wj - 93CPJD0UA40CX/0pTB3JUFWMo46L/iFC3bBe24gNSxMoApPxozKju5ragmWq - FRKUwlO+UPZK1cvVsgZWPiZbOUSIAtEY2/i+sjZ8/3MPL/cGqSpEqirQ6duT - GnyCl0Q2FymXjXKFitT4vWQsxYiOI1WiCqqVDbjgECoHaq9Ilf/Wpl2NMcG7 - nHDtj5MxKjdQmzAbusID6D1GHF5v4rXgWtpCQ110fF+hVODKyvJkg1EqN5Ai - VlAtmYGRDK2xU3AYaVLm4tZ1kRBYiuslR4SqRreGC76ivRpzbo72GabyW4bl - hiXfUrZm7hby9jqn63tMt4QzqgB3AtFkyXbQ4+v96xMhnVSFLBF9aVxrSQ1U - t+wgKqumWhgduMJZamW4EdQAjnNErKAZgQGIYiliTnL10u2hVjfrULIXTKP5 - ehJMYciXK6MrKPlR6Ga21BkL9yYwM3m0WM6mM28xu1kEeJLMggmOk7k/9QMf - e95sEkPnOGZa7/0BvWiLacYckbwcyZhab1lwcKOsp0NjvgdqxHpcIlmIqNTj - RM1JLbAx8XYLVSNy2B+Xk+oz1HJPaJugrXAw54y3MYdna4W3RmH/uNOA7lbt - YX94t5MYe8OqlgDxHce6wqEzCkaPXqamtCjWHVk1RgGJjC22a6ls05yzGLzp - vlvke4rDHNOe2UECxYkectBsVYSPIexdwK3vs8lMxG3C1xBEWzaQ3GngAIJX - 5twpkldl7mVETxsNI3ulp8MIn8aeIH1lUAYSv+rq76BVFp1p13Cf61eaE92y - DvlBGmRH9HC/N2efo0t1cC6Yw32b89PY+HMZObFucRGlq+z+x4ljsuvM0Kxg - w8hFBT5FyAzkYqZlXnIQ1TWXO0MZKthwglI78TYiXb85S4pY92/r2WtZqx6P - 1N7H/AL6GN6h9+FEvDigQd23TaIvf3/55P06+/qnP7vpjgSdLTERugOWU0Yl - TCVpvcSBExSl6XOTtrTq4r2XbAk0KKz6Oj74waP7+673SeOCXzjnJ975WXdq - yl043wZNtmEz7fg0GzjH3vL54k0fL9746eI9E/ZDfke/u2CBwTbhrxcYlk2y - Rlf/AQAA//8DACn7genCFQAA + H4sIALfSRFcAA7RYS2/jNhC+768wfFcky3biBIrSHFoUiy5QNEnR9rKgpbHN + RiIVknLs/fUdUi9K8jNOcwpnviGHnNdnBQ+bNBmsQUjK2f1wdOUNB8AiHlO2 + vB++PP/izIYP4ZcgyqXiKYjwy2AQ0DiczabX/nQyC1xcaBnqohVhysH1jzmb + bn+83aqb9/R9M/ED19Zq9IIKqRxGUgh/JSxwrbVWJ6RaPfGEB26z1tqIpxlh + 2wGjyf1QiRyGrpFDSmgS4jE/wYakWQJXiAzcQqwB2Yoz6JktyKYne4e5pKqP + jQQQBbFD1EBtM7gfxrhUNIVh6Huja8ebOv7k2ffvRtd3vv9P4DYGxj7P4vPs + G4PifBMGZ0EhiWXtUkyVExERy3JTIgTZDrW2rS8kKJvTJMEAOySOBUhZyYvQ + 3myqoJayKvZOK+62tMEeDmwJOhje6tDdQS61UgkAVfv/97MzGnte4HbkjQFs + FLBYP2Sh2rNvwiOSULUNv3E5+JnKBLboXiVscAKWWC/h42+BW/7b6DIuFUkc + rCEIRxhVdMsW2VfMmRJbI3ZIkq2IH7484cvukB+yGqPV4y6z8T4zlmPgaBTO + Jl7HrtL0DU18XhhWRTx4UpiUcsAXg0cDJ80u3TBeVjDlLheWjdnD3ZP0WAws + nIz0n8bUkQx0xTj6uPBPKvUN67WNWPEkxiKoMn5QZHRXU1vwVLdCShJ8ylfG + 35l+uVrWwIrH5AuHSpkTFoGN7ytrw8uf+/Ryb5C6QpSuApO+PWmFj2FOVXOR + YtkoFyRPKr/nnCdA2DDUJaqhRtmAc4GhcrD28kT7b23a1VQmsMmoMP44KWdq + hbWJs6Er3IHeAhH4er7XghtpC4110fF9QRIJpZXlyQpIolaYIlZQLVkFoylZ + gpMLHGlKZfLOdYmUoOTVXBDKdKNb4gXfyVaPOTcj2xSY+p6CWvH4e8KX3F1j + 3l5lbPkAbE0FZxpwLwmL51z3+Hr/+kRMJ10hc8JeG9da0gpqWvYkLKqmXFQ6 + dEXwxMrwSlADBGSEWkGrBBVA5nMZCZrpl24PtbpZB4q/Agt9eb0d45AvVpUu + Z/QtN81sbjIW701xZopwNp+Op95sejubgB9PJz5E8c1oPJqMwPOmfoSdY59p + vfcn9KI1sJQ7Mn7dkzG13rIQ6EZRT7vGfA/UiM24JCqXYaGHWM9JI7Ax0XqN + VSMz3B+KSfUNa7kntE3IWjogBBdtzO7ZWuKtUdg/7jCgu1V72O/e7SDG3rCs + JUT8C5GpcOyMkrO9l6kpLYlMR9aNUWIig8V2LZVtmgkeoTfddwtHnuYw+7RH + dlBIccLHDDVrHeF9CHsXTfbSN7VgbcLXEERbdiK5M8ATCF6Rc4dIXpm55xE9 + Y3Qa2Ss8PY3wGewB0lcE5UTiV179Alpl0Zl2Dfe5fqk50C3rkO+kQXZEd/f7 + 6uxjdKkOzhlzuG9zfBpX/pxHTqxbnEXpSrv/ceJU2XVkaJaw08hFCT5EyCrI + 2UyresmTqG51uSOUoYSdTlBqJz5GpOs353Eemf5tPXsta9Xjnto7j5KP9vwC + +hzeYfYRVL46qCHdt43D3796T970+evNX7d/dEeCyZaIStMBiymjE6aUtF5i + xwma0vS5SVtadvHeS7YEBhSUfR12fvDo/r7rfdI44xfO8Yl3fNYdmnJnzreT + JttpM23/NDtxjn3k88WHPl588NPFJRP2U35HX1ywyGCb8NcLwGWTrOGX/wAA + AP//AwBJB6UawhUAAA== http_version: - recorded_at: Wed, 04 May 2016 18:04:02 GMT + recorded_at: Tue, 24 May 2016 22:16:23 GMT - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions body: encoding: UTF-8 string: | - R369273730-W7P26W87 + R185884576-JDDJB9HY + {"device_session_id":"153aa36891b5b155dc64ad550eb02bc8","fraud_merchant_id":"600000","correlation_id":"1a620a96ae4838906e09d86deeafe57f"} 2500.00 @@ -220,8 +225,8 @@ http_interactions: US 12010 - 7g243m - 80478477 + 2s6y3m + 88562548 sale headers: @@ -230,9 +235,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.60.0 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -241,7 +248,7 @@ http_interactions: message: Unprocessable Entity headers: Date: - - Wed, 04 May 2016 18:04:04 GMT + - Tue, 24 May 2016 22:16:24 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -264,57 +271,59 @@ http_interactions: Cache-Control: - no-cache X-Request-Id: - - 16baa6d2-73ec-4a3d-90ac-3f2cc5f87bef + - 43f8f00c-c4d6-4f28-9d59-f7827944f288 X-Runtime: - - '1.087636' + - '1.151251' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAJQ5KlcAA+xYS3PjNgy+51d4fGckv2JvRtF2Z7adtrO7kzab7rSXDC3B - NhuJVEnKsfvrC0qiXqYc59JL65MFfARJEAA/MHh/SJPRHqRigt+NJ9f+eAQ8 - EjHj27vx49cfyGr8PrwKaMYISCkkkaAywRWEV6NRUIiU+Vt/jPQxg7sxlZIe - x16B8hpYkFFJUztCS8oVjTTOXUpQJmQMkrA4/HV28266nC1nPvm2vJ/efFst - A6/W1vDMjFYjzpK7sZY5lHMWOpqKnOtwuvD9a98PvOrbqqMd5RyS8EEkLM5V - 4FmBBagdyzJ0hBWgaMOk0oTTFMIfKQ+81ncDSqiVoWkReM13g1FaAmhC4xgd - qsLfv5LJzKyxJ28GwEEDjyG2KteOzdwiognTx/CzUKPvmUrgiAuwwgYnYWu8 - /uFT4FV/G11k3CSPBMMACE2yHZ2Gjw/oH4e8GZUJpWlSKMPJ1J/gZtoi61Sv - 71UMiWMKXJMU9E7ERItn4OFyO53PUjThUtYnmCst0jIgVv58uZovMUbaUos0 - QRkqmkDgFX/L+PN6AWims+EZpOhkuoXwXooI/wo5+ghRwjjEgWd1V64gDnDe - zXIRrXaBZ5eA5011rsLMGnuKa2OV6urMQqNcSkzLI2FKlO58fPhodtoXX70a - +LgvaQIdYywqDtS4SWUYdWZbp6pq+fmaOLSnQRikGOzo+8vAb0n2IJJAtUkA - XdWYGD81S2EcYrjdEH9B/PnXyerWn9/6sz/QPfWAykKexZdbmKOFZkB9EGVs - 1YHVibxWwL1eKF4vE5iIaUb50VncIKUsCdHF38GBplkC14jGUluILegF1opp - cBrIdoK7NRt6cJyV1917sGZJ0k5j3Hy0/3d98LYielEJvayADpfPS8ugraXF - Xh85HlI8esBCAGokNqMP6GYW0abk9lzy5vrsGDPDMR9cg2buQTwvFhWu5n5v - lNVUcdIJDPTUJuexO/1rnYM11Go8r1aJdRvCsq0ZuliB1gkUF0Z3jHsCmuOl - Itnfl0zRMr2mOtoNoPqXmwv1f2r8V1OjGx7VbUI2DJJY1UG5Vz2qXZhyBJtB - thzYxYef8d4/C2iMdIPCbecsptrOft+T/4TuOBGW4C0e6As9ou5PKNMOb2sl - uCu7LWkiNmFpMWDALQ28O6+hQxhxA9rBsRpzw0kCh7CVX+OYmVWi70+BxVpG - txgR52Glqb1gkTm8DYYF4jCm1iBdG88N58JllMRpEKfpgZSUcEAJB0gzy5HW - QiRA+Tjc0EQZWloDGl6GeyARlS2+3SHxXda+ZjycT8zP3BW8W/DmYamoPup0 - Q+OkIMS/MWWSv/5uKljGZBkXqeB6hxUG2VBf6EAfgUqkf1O/Ay+kJ32GKXYF - 0S9qyom0vdqdSIpDqEr8qCzifU19TaTYTpBcIqPTOlO3nkcV3jjqei0p4yb1 - qnwxLM82RU9lU/SUiK3w9uiX64xv3wPfMym4AdwpyuO1OCArq+3XxVhCRpGs - PfJnLl64CedSYAE7oIne4YKhwbRkFhbDmukGUX7WylziCWPobvPEEOkWrq9p - XWqmd8DbvAG3ZK2mUYqkhbGC2qNK5Vhp8bLmzw2qI+3XcrEhRk95BO25T5WN - D0WcR0Wb1HJjLbOwnLO/cqjyERV4MgxrvgxX68Vs4a8W71ZzmMaL+RSieDmZ - TeYT8P3FNMIGZGiotb0Hngqi4ueBbK31NYvvZ2vVmpIdw3CWxw5RatGJAgNo - rj5dk+bYO6EqzS7sp2p85yXkos64LKpnX3SMqxX6Jk4p3wJeWWVXW8haa24x - PSWwZEJIM9Z5C7Dy5s3iZPu1rHKbLcEJHeKP+VpFkmVnGGYL0SqWBZkmGdII - ERMkacQ42cnPelhcoNQDaFz+yWzmyiLmLc1FlWOmikwY0EJpSzSBacrbG/tO - LE+ulfaNI8M0Dx+404GYr/X2gjr70IfMXu7NBbsBGL4WzRrECykP3aFH/6xz - qcoGIQaNXXjDrrvKoeNrdRhDy+iiTp5/Lh4AB+MCvBHk0GJM54XBjcTUbTSP - ImebgMc16Anjhyw3PN4VQ/alj3GkmnnZw5kLvixYT6ZgNc+BfVCfvbU23aV5 - bdo2CLrEWkH1XrPW4oOSqWdz9rT9YHL/5f7G/+XTp8XHm587TydYA5l5kg8r - ummyoJJUbu7ZC/QOix3BrDfBD+igjeifTu+9E8un41X/HwAAAP//AwBN50QE - EhgAAA== + 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 + ++n33BgAAA== http_version: - recorded_at: Wed, 04 May 2016 18:04:04 GMT + recorded_at: Tue, 24 May 2016 22:16:24 GMT - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token body: encoding: UTF-8 string: | @@ -328,9 +337,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.60.0 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -339,7 +350,7 @@ http_interactions: message: Created headers: Date: - - Wed, 04 May 2016 18:04:05 GMT + - Tue, 24 May 2016 22:16:25 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -360,41 +371,41 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"2000db203cafcccbf457987ae3d6f2f5" + - W/"2bd189fff01998ef0c61f21c9f7915db" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 3f6c5282-e70a-49e5-af8b-097011e31550 + - 6f6d6188-e240-495e-96ac-11faf313ed00 X-Runtime: - - '0.228220' + - '0.094170' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAJU5KlcAA6RVXW+bShB9z6+I8t5bvJjcIiWp4g8wyKxrbO/CvsEuCeBd - 7FvM56+/g92kqeRbVboPKySYnTPnnJnh4Wur5G2dfC+zQ/F4N/pLu7tNCn4Q - WfH6eLfbWp++3H19unngMkuK06fTYZ8UTze3tw91JKvkKelcxAK3j6hZOfmh - W07dVAT+IdbdY6IsbXjvK1kxRDq+cI9xsc5WmTNmuZWyWZpjSvYeZTlTOx3b - Xs9yroX9rsM2ST3l6autrzzFlEe9Ptzy8Wr7CsfRPXvee3Tespm1D6mDsD0f - vdi4Y9TSGPVfwmBtevlzizOtwRs41rpdzQ4NHs5m3OF+jXC+bvH29bs3e248 - qx3Bs8NqJLnCh5AaWoDk/ltwzOKcGEkxN8RM6HEgxnjmcrGFOzlrBHXLiOKX - CBHjWyBPK+r/I3SrifQ0EzkeJ8AXNMljZKiICsJVA/zdg1j4De8P9RJB7Mbo - AW8fKnO8VG4XUlmJhSsZFamwiR4G+ypE5mmVrzWvM0+gdx7ZFsR4daLcCgfy - nm+lhnVxEvqr5mVmHttSxsWgw+S41MN2iXAdK3ZkOunCwD/GaHyuC/KUsU0G - f3onP8bBpskYNVAUuBA/khe/3Pf6nKzJQtQeIUZbQ24SuCX4nkULX+ML737Z - mSm39xVHVsVst06mRsaVBb774A0pAFsKZBlLBfVsDxqeeXVMoSaUphDTL/Vr - ejv1G2Zw1sspHWX1HBGNj0gXT517R6WaWEz6VfalDgPcswBy/UbLM4+AaJF1 - 7T68nxoI8E5x92fenPNRI40XEnoeD1r+7RRXcv/gsaRWFdLWELbM+R9i/Ic2 - 2Qt4Jux00He+QyQXgSt9qCVUrWSAD7lGDGK4bRlwyt99O9et/CPXJ2UYyFVI - R3Lwd6dPIP/u0suX3nKH+3FByngK92G2hbLyhHzk/Dz0g0xs68TtVp4935gN - n4J/BQGP3AnTB55Dn/m/zMagFQugJ4JJyTYGzI9WC9vszzqD94z8H98vcVd6 - F+aB5BEyR2JqNMC/CWnzfo/ZEjTA2voD/ht/8LKMdeEMtYOGGi+IBK2AFzty - ZVbQ45WYG/VWEU0gs4u6n9pfmbeaKQZ7xZADroDvUO+w1/D77AM2U1bJ0Q5m - 4QPfHYZ7A5bcD9xiavXAv3vrO68bZgf2sN0eYyU+6t9f64sPszkJYYdALdqG - XnYCH/DOs4hHvACuChubANdrZO7h/b0jydafuuZl/8nq7NuOQN+7JRtyKAbz - ggedfu60H3Vf32tD3zDAGdVnbogpp9AeHz5f/kU3D59//Uv9CwAA//8DAPs2 - iK/cBgAA + H4sIALnSRFcAA6RVXW+bShB976+I8t7bZTG5RUpSxXbAILOusc3HvsEuKR+7 + mFvM56+/g92kqeRbVboPFtYyO2fOOTPD/Zdeips2+V5nx/LhVvkL3d4kJTvy + rPz2cHvYGx8/3355/HDPRJaUp4+nY5GUjx9ubu7bSDTJYzLYmAb2GPl6Y+XH + Yb2wUx64x1i1q0QaaDp3pWgo9ga2squ43GabzOqcvSvI8kkhy1TQvEAb3y3I + OM+p3KokN3Kak2yzZypZOr2zLFRnf+gc8xmHvgvxdkqwURD5PHOWB2WztDD8 + V15MMlDfQNR3X8Jgqzv5U08y1JEdGoixHZz82BOokexmyBmt0clZ7+Tb787y + qXOMXoHnQKQimCTH0NdQgEXxNaiyOPe0pHzW+JKrccBnZGkzvoc7Oe24b9eR + T14i7GlfA3ECHv9w1egiNc14TmYJ8AVN8hhrMvK5x2QH/O0jX7kdG4/tGkPs + ThsBrwilPltLewh90fCVLajPU256ahgUTYj10ybfImfQT6B3HpkGxDhtIu2G + BOKO7QUiKj9x9RtyMj2PTSHictJhXq3VsF9j0saSVlT1hjBwqxjPznVBnjo2 + vcmf0cqrONh1GfU1HAU2xCvi4pf9Vp+VdVmI+wpi0BZye4Fdg+9ZtHIRWzl3 + 60FPmVk0DBsNNe02WWgZkwb47oI3XgnYgmNDW0uoZ39E4G8b+1ATTlOIGdfq + Nb2t9hUzOOtl1ZY0RoY9xBRviBfWnSVTxFfzcZN9bsOAjDSAXL/R8swj8FBk + XLsP5wsNA94pHv7Mm3M+X0vjlYCeJ5OWf1vlldw/eKx9own9XuOmyNkfYvyH + NtkLeMbNdNL3+YC9nAe2cKGWUPaCAj7kUijEMNPQ4Ff/7t25bulWTJ3XYSA2 + oa+Iyd+DOof8h0svX3rLnu7HpVfHC7gPs82lkSfee85PUz+IxDROzOzF2fOd + 3rEF+Fd64JE9p+rEc+oz95fZmLSiAfREMK/pToP5QS039fGsM3hPvf/j+yXu + Su/CPHh5hHWFL7QO+Heh373do6YADQjavsN/5Q9e1rHKral20BCx0hOgFfCi + FZN6Az3e8Get3UsPcawP0fBT+yvz1lJJYa9oYsLl8B7qnfYaeZt9wKbSqBk+ + wCy843sgcG/CEsXELfaNEfgPr33nDNPswB42+yqW/L3+47W+eDeb8xB2CNSC + dv5lJ7AJ7zyLRGElcJVE2wWk3WK9gPM7S3h7d2Hrl/0nmrNvBw/63q7plENS + mBcy6fRzp/2o+/pem/qGAo7SnrlhKq0SPdx/unyLPtx/+vUr9S8AAAD//wMA + j3iL4twGAAA= http_version: - recorded_at: Wed, 04 May 2016 18:04:05 GMT -recorded_with: VCR 3.0.1 + recorded_at: Tue, 24 May 2016 22:16:25 GMT +recorded_with: VCR 3.0.3 diff --git a/spec/cassettes/Braintree_checkout/unsuccessful_credit_card_verification.yml b/spec/cassettes/Braintree_checkout/unsuccessful_credit_card_verification.yml index f4767bc1..a29490fd 100644 --- a/spec/cassettes/Braintree_checkout/unsuccessful_credit_card_verification.yml +++ b/spec/cassettes/Braintree_checkout/unsuccessful_credit_card_verification.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token body: encoding: UTF-8 string: | @@ -16,9 +16,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.60.0 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -27,7 +29,7 @@ http_interactions: message: Created headers: Date: - - Wed, 04 May 2016 18:03:52 GMT + - Tue, 24 May 2016 22:16:14 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -48,46 +50,46 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"2c60f71f9a0b4b1b5a6a021212da98f2" + - W/"4bdca08f50d0d04f8e0ba12bdd3e156e" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - bcc8d43d-8fee-4012-be46-8d30ab09d6cb + - 86a0e1ba-5c29-49d6-97df-88cd0d02ee4a X-Runtime: - - '0.237791' + - '0.224805' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAIg5KlcAA6RV32+bOhR+719R9X0bmNI7pLZTkxSCFZyFJAb8BjZdABty - R4DAX38Pydp1Uu40aQ9WIvv8+r7vnMP9l6OS1236vc6q8uFG/6jdXKclr0RW - fnu42W7sD59vvjxe3XOZpeXhw6Eq0vLx6vr6vo1lkz6mPUYsxEMcWI2bV/1i - inci9KvEwPtU2dp47yvZMER7Psf7pFxly8ztPRQNzCE7bygMb/M0kLzQow2T - EfIV28iCOLSIchv+2zviuObSwXmkPMNTz300bJGHsCIOzshgy+XMH9/0F4f0 - LLA1FvgvUbiyvPzpSDKtI2s49uq4nFWdN1S6t741l7OnozfjcLbfvdlT59lH - HX57onTJFamiwNRCJIuv4T5Lcmqm5bMpZsJIQnFLZpiLDfjkrBMBruOAvMSI - ml9DeVgG/r/CsLvY2GUiJ7cp4AVO8gSZKg4E5aoD/LgSc7/jQ9UuENiuzQHy - FZGybhcK91EgGzHHkgViJxxqRGHRRMg6LPOV5vXWAfjOY8cGG69NFW5IKO/4 - RmrEEAdhfNO8zMoTR8qkHHmY7BdGdFwg0iaK7ZlB+yj09wm6PdUFcerEoaM+ - g5vvk3DdZSwwURxisNflWS/8Vp+bdVmEjnuw0VYQm4a4Bt2zeO5rfO7dLXpr - x52i4chumIPbdGpmXNmguw/a0BJyS4Fsc6Ggnk2lkZnXJgHUhHY7sBkWxiW+ - 3fY1Z3jiy61dZQ8cUY3rtE+m7p2rdpqYT4Zl9rmNQjKwEGL9hssTjpBqsX3J - H+6nJoJ8h6T/M21O8QJzl8wl9DwZufzHLS/E/oFjEdhNFBxN4cic/2GO/+Em - ewHNhLMb+X3eIpqLEEsfaonUUTLID7F0BjbcsU049e/eTnUrf8+NSR2FchkF - uhz13RoTiL899/K5t/Don5S0TqbgD7MtlJ2n9D3mp7EfZOrYB+4c5UnztdXx - KehXUtAIT5gx4hz7zP9lNkauWAg9EU5qtjZhfrRWONZw4hm0Z/RvdD/bXehd - mAeax8jSxdTsAH8XBd2bH3MkcEC01bv8r/hByzoxhDvWDhxqvKQSuAJcbM+V - 1UCPN+LZbDeKagJZfdz/5P7CvLVMMdgrphzzCniHese9Rt5mH3IzZdccbWEW - 3uHdEvAbc8lixJYE9gD4+9e+8/pxdmAPO8d9osR7/odLffFuNicR7BCoRVsH - 553Ax3ynWSQ6LwGrIuY6JO0KWQXc37mSbvwpts77TzYn3bYU+h7XbIyhGMwL - GXn6udN+1H15r419wyCP3p6wIabcUnu4/3T+Fl3df/r1K/UfAAAA//8DAD3i - uhPcBgAA + H4sIAK7SRFcAA6RV0W6bShB971dEee8tLCa3SEmq2A4YZNY1xgvsG+ySAt7F + vsWA4evvrN2kqeRbVboPCImdnTPnnJnh/stJipsu/96U+/rhVv9Lu73Ja7bn + Zf3t4XYb2h8/3355/HDPRJnXx4/H/S6vHz/c3Nx3qWjzx3zwEI29MY2s1q32 + w3LmFTwO9pnhHXJpa+p7IEVLERnYwjtk9bpclS5KwqcxQUTScIdWc7rDEgt/ + DIokLGQSbgc6n6ozM5H+uJq7mu88T/xxO9KQl6uwKP1qbfjjGmHkG6s5m/jh + Wn9x8EAjW6NR8JLEa8uvnk641Hq80QZsrwe/2p+wemYTYwW5cfhk4Dn77s+f + et8+6fAesNQFk3ifRKYWI7H7Gh/KrCJmXj+bfM6NLOYTPPcYD+FORXseeU0a + 4ZcUEfNrLI6rKPiHG3afGkXJKzzJgS9oUmXIlGnECZM98Pf2fBH0bNx3SwSx + G3MEvF0irclSekMSiZYvPEEjXnCHGEm8axNkHVfVWvMH6wh6V6ljQ4zf5dJr + cSzuWCg0bPAjN75pfmlVmSNEVisdpoelkZyWCHeZpAdqkCGJg0OGJue6IE+T + OUT5M7rVIYs3fUkjE6WxB/G6uPjlvdXnln2ZoNMBYrQ15Cax14DvZboINLbw + 75aDVTBn1zJkt9Txunxmlkza4HsA3pAasAVHtrmUUE+41/Dc77IIakJFATHj + 0rimt9u9YsZnvdzGlfbIENGYToZs5t65stD4Yjquys9dEuORxpDrN1qeecRE + S+1r9+H7zESAd8yGP/PmnC8yi2whoOex0vJvt76S+wePZWS3SXQyuSMq9ocY + /6FN+QKecadQ+j5vEal47IkAaknkSVDAh1w6hRjm2CY8ze/OznXL4MCMaZPE + YpVEulD+bo0p5N9eevnSW566n9WkyWZwH2abS7vKyXvOT6ofRO7YR+acxNnz + jdWzGfhXE/DIm1JD8VR9FvwyG0orGkNPxNOGbkyYH63jjjWedQbvKfk/vl/i + rvQuzAOpUmTpfGb2wL9Pov7tHnUEaIC19Tv8V/7gZZMZ3FW1g4Yaq4kArYAX + PTBptdDjLX82u1ASjSNrSIef2l+Zt45KCnvFFAqXwznUq/Yafpt9wKbSbhja + wiy847vFcE9hiZ3ilkX2CPyH177zBzU7sIed0yGT/L3+47W+eDeb0wR2CNSi + baLLTmAK7zyLWGc1cJXY3MS4WyNrB9/vXEHCYOZZl/0n2rNvWwJ97zVU5ZAU + 5gUrnX7utB91X99rqm8o4OjdmRui0q21h/tPl3/Rh/tPv/6l/gUAAP//AwAL + yrEM3AYAAA== http_version: - recorded_at: Wed, 04 May 2016 18:03:52 GMT + recorded_at: Tue, 24 May 2016 22:16:14 GMT - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers body: encoding: UTF-8 string: | @@ -108,12 +110,12 @@ http_interactions: US 12010 - 3c3cfcc3-d0ce-4064-a46a-91a2ecc9754d + 7d6101bf-2a23-464f-a61c-a4a649cba3c6 true - {"device_session_id":"f29573944537e6a65b299159a0842e79","fraud_merchant_id":"600000"} + {"device_session_id":"d4af8ebca228871c0841c5597cc59d86","fraud_merchant_id":"600000","correlation_id":"9e9010668fe003a1deccbd8e2b08d6f8"} headers: Accept-Encoding: @@ -121,9 +123,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.60.0 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -132,7 +136,7 @@ http_interactions: message: Unprocessable Entity headers: Date: - - Wed, 04 May 2016 18:03:55 GMT + - Tue, 24 May 2016 22:16:17 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -155,38 +159,39 @@ http_interactions: Cache-Control: - no-cache X-Request-Id: - - 0c57c406-a2f7-457b-95ae-f9cf0bce886f + - 5afe4234-7e96-4d8d-a8cc-bd9abe6116a0 X-Runtime: - - '0.522538' + - '0.778150' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAIs5KlcAA6xXS2/bOBC+51cIvrN6WJbtQlG3wO6ihzYokGSBzaWgybHN - jURqScqN/32Hetuyi6RoTuY3Dw7n8Y2Sfngpcu8A2gglb2fhu2DmgWSKC7m7 - nT0+/E1Wsw/ZTUpLQUBrpYkGUyppILvxvLSGjPvZHzx7LOF2RrWmx5lfa/mD - WlpSTYvOglXGqgJ0c0SAw0EwIAaMi4cInm2j9WI5X8fxYr6EhCaLTbReh4s1 - DVZxBMt16k9tOm9bTStO0D/bU2mdJAncX+pPJb2N0MYSSQvIPlGJmsO5U8lp - h9yrXKX+cO40oKAiz9D1H/BCizKHd0wVmIYa7pSYBi4sYVT3tzsUj3uVc9B9 - EF5zzblksNmIPMd6Eco5VscMkle953VvqrWM1QC2v+ffBxLOXTrP8LEJvFiQ - HHgn9KTIb2dWV9A0xxCBYjQX9ph9Ucb7S5gcjhhGB441Neyw0NnHz6nf/hxL - maqk1UeCPQyE5uWeRtnjPabvAj62K5WxNK/FWRgFIT5rDA3Z9q+mG5v7WAD2 - UwF2rziRSjLI5mzOtozNCQ+wTeMgiQmNE0rWIY2AsfVyEXO865Lp4FmVFh96 - mlqcWrE9Ng3kEpr6Y2QU8MT4987ZL06aPxkAhEaE4HLScUVa4K10B9mfyrtT - 1vukpNKp36E3XTYEo7ZvCGxXaiuTlVoxVFT6GweGlQPuOrYWtTR0OPS01lT7 - C4YyARtlejBnTFhLp31da45aaHrFzxUGJ6fjddnPT3UaVztq4Ts9ouw/YC5N - +IsaJS+E3teLsnpuXN1MiTe4nE9FjVGf57Pbo7oRrkmv2lqkjrN6X9NqfGAg - u+2qlCz1+5jaWf299I5kXlJ5vERlb6TIV9Hj66jxOi2+ktp65qzf+iiFBe7d - 45yA8dTW+4iFx/EaiHRISU+J3TxNN1tq1TNc6LS6RDKLsUXC0PmRp3WIszAM - F20R4iFUdE3ch0b2jzC02Y3NeUhsKXRNBqRQ0u7x4biAz8EL2kegGls2Ck7U - a7S/vWUp4mpQ8029YCboONo37fS0kuL/Coisig2KBMfNgOSGvMhpwpbAomS5 - 2vBtsoqidZDgOYg434ZukVw17btBQ0lxQB7ls1TfpZuqBugU9kBzu8fQYNAZ - YcO32kbYQaM59sJKYy1xTHdVjh00um0iGU2V4xZB80F5hPXh06NW+UinAzoF - YUzl1vOGyudB6wQ973i1JU5O3c4d3T0VDjlUvGI1943S2GPdNpssOETcmwm1 - 7Wcyx6MVBcyw5cKEBAsSxA/h6n0wf79YPNUuWoPWQ1Xyt3kYDFoPWphnghgd - Msazr3dfk2DxFK+fPt8N9FlXmQlT80qJDzyAK3SLtK888dd+g/R7GJfThf8c - fgAAAP//AwBdg0CpdgwAAA== + H4sIALHSRFcAA6xXWW/jNhB+z68Q/M7VEVuWC0XbRQ8s2u6iaJIC7UtBk2Ob + jUSqJOWN/v0OdduyF95igzyE3xwczvGNkr59LXLvCNoIJR8W4Ztg4YFkigu5 + f1g8P/1MksXb7C6lpSCgtdJEgymVNJDdeV7aQMb9ORw8W5fwsKBa03rhN1r+ + qJaWVNOit2CVsaoA3R4doLSGnFoMhgiebWAThEEcJzsIgnsacmBsyxOItkHC + 412S+mcGvR8OR8GAGDCmk/Al3SWwZTSKkmQdsiBZhmy12qwZW214Eqf+3Kb3 + ttO04gTjZAcqrZPEgftJ/blksBHaWCJpAdl7KlFzPPcqOe2RR5Wr1B/PvQYU + VOQZuv4eXmlR5vCGqQLT2cBDzjRwYQmjerjdoXg8qJyDHoLw2mvOJaPNVuQ5 + 1p1QzrHKZpTc9J7b3tRoGasB7HDPX08kvHfpPMOnJvBqQXLgvdCTIn9YWF1B + 22RjBIrRXNg6+6CM95MwOdQYRg9ONTXssdDZu99Sv/tzKmWqklbXBGcBCM3L + A42y50fXcXN8alcqY2neiLMwwvZN/Sk0Ztu/mm4ckroA7KcC7EFxIpVkkK15 + HAbhdkciGt2TZbzcERqHjNAljZcbtqX3DLv4ounoWZVuVE5Ti9MvdnXbQC6h + qT9FJgHPjL/tnP3PSfNnA4DQhFhcTnrOSQu8le4h+1F5H5X13iupdOr36F2f + DcEaSuncYfVsZbJSK4aKSv+DPISVA+46thF1dHY8DvTYVvsDhjIDW2V6NGeM + 2kjnfd1oTlpofsWXFUYnp+N12c8XdVpXe2rhE61R9i+whnk1UKPkhdCHelHW + zI2rmynxBpfzuag1GvJ8dnvUNMI16VVbi9RxVu9rWq0PDCRKCra6T/0hpm5W + vy29I5mXVNaXqOwrKfImeryNGq/T4o3UNjBn89ZnKSxw7xHnBIyndt47LDyO + 10ikY0oGSuznab7ZUqte4EKnNSWS2RJbJAydH3lah2UWhuGqK8JyDBVdE/fB + kv0pDG13Y3seE1sK3X5fFEraAz4cF/A5eEG7BqqxZaPgRL1Bh9s7liKuBg3f + NAtmhk6j/aqdnlZS/FcBkVWxRZHguBmQ3JAXOY3ZGlgUr5Mt38VJFG2CGM9B + xPkuXCKzXTUdukFDSXFAnuWLVJ+km6oW6BUOQHN7wNBg1Jlg47faVthRoz0O + wkpjLXFM9xV+5cHktplkMlWOWwTNR+UJNoRPa63yiU4P9ArCmMqt5y2VL6PW + CXre8WpHnJy6nTu5ey4cc6h4xRrum6RxwPptNltwiLg3E2q7z22ORysKWGDL + hTEJViRaPkXRd2GMv383LjqDzkNV8ts9rNHDaNB50MK8EMTomDGe/f5L8Bh8 + /HUd//BHONJnU2UmTMMrJT7wCK7QHdK98sRf9w0y7GFcThf+A/kMAAD//wMA + PpnkIL4MAAA= http_version: - recorded_at: Wed, 04 May 2016 18:03:55 GMT -recorded_with: VCR 3.0.1 + recorded_at: Tue, 24 May 2016 22:16:17 GMT +recorded_with: VCR 3.0.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/credits_a_completed_payment.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/credits_a_completed_payment.yml index 4ae76d4c..6419049f 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/credits_a_completed_payment.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/credits_a_completed_payment.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers body: encoding: UTF-8 string: | @@ -10,22 +10,25 @@ http_interactions: Card Holder - santina_osinski@windlerprosacco.com + melyna@schinner.ca Card Holder + John + Doe 10 Lovely Street Northwest Herndon AL US - 35005 + 10264 fake-paypal-future-nonce true + headers: Accept-Encoding: @@ -33,9 +36,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -44,56 +49,56 @@ http_interactions: message: Created headers: Date: - - Mon, 14 Sep 2015 16:43:52 GMT + - Tue, 24 May 2016 22:17:06 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"04725a8fa0584b1b9d755f3e7a9e98e8"' + - W/"1284c0fa78aa0aa843067f4d626a73b5" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - cf1873975fd5d1f35b8216489f017648 + - 5ce1eb53-f103-40a7-9427-826c1ca537d1 X-Runtime: - - '0.201532' - X-Frame-Options: - - SAMEORIGIN + - '0.317905' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAEj59lUAA6RUyW7bMBC95ysE3WlaruU0hiwHKFD0A9JLL8ZIHMusuZWk - IitfX1Lykli9FDnOmzfbmyGL7UmK5BWt41pt0mw2TxNUtWZcNZv058t38jXd - lg9F3TqvJdryIUkKzso8y1ePq8WqoMGIWPDVB1CeBPutUnn/9ufJP3ayOy0X - BX3vjew9t84TBRLLb2BZQd8B0S/gYv3QgqEt6A2J/lpLA6pPFBeb1NsWUzrg - KIGL0oVKXMFOO67ckT93XDGB1ljtoK71LEQXdKTGIHPQCiep9nCaYB1Wjvsp - t7YIHhkBn/je4CZlwfRcYlou5llO5k8kW75kq/Xyyzpf/CroLWCIbw37v/hb - wFh/2A7ZcxTMXVti3JM6qOvOScFa6M8dG+gNCBLlaJX/yIiECWUEA+z1EVW5 - z495F9YyWhffqOlvUDhjGp/xBNIIvNN7YDLcQysu41ZaCwSVllHTgp6dVzKX - 0CBprSgP3hu3phScQ+9mlQWuvEVsghod9LESDX1LVH4n0R802wndaDrOMjOq - 2aJ65VarSNmEQ2GVPoUjvla41PzkSoccn1zrkMO1lastNz68z38scuBUXIjw - Xgk0QYo4WHhm9zcaaHS60XvMDSAwZjEoPKkXprz+A38BAAD//wMA2Os/NjoE - AAA= + H4sIAOLSRFcAA6RTy27bMBC8+ysE3Snaiu04hiwHKFD0A9JLL8FKXMtsqaVK + UrGVry8p+RUrlyLHnZkll7PDbHusVfSGxkpNm3iWTOMIqdRCUrWJf758Z6t4 + m0+ysrVO12jySRRlUuTpfLWcPawWGfdFwDxX7oEc8/V7QYvu/e+TezzUh+M8 + zfgtG9Q7aaxjBDXm38CIjN8AgVdwrn5oJdBk/IoEvtR1A9RFJNUmdqbFmPc4 + 1iBVXqPqCJ5tuZdEaJISMj4wQdPsNeGocwfHEXbAwko31pYGwaFg4CLXNbiJ + hS+drDHO0+lsyaYLls5f0nQ9e1xPl78yfm3o+9tG/F//tWG4v18G20lUwl5G + EtKx0ptpT4eCMdCdJm6ga0AxKEvdkvuoCIKRZAA9XEilfBYYVAaxxn6F94b0 + wi+aMpxxShn7kLBb9KwUuINWna8qtFYIFOdhpoyfyIt42P1vIEyExmc8Qt0o + THyIbnLRK2UNFbLWqHzvXGPXnIO16GxSGJDkvAWVn/kAXWjm3rLgyGuNbq/F + q9KV5oONSUPVFulNGk1BsrFAotBH/10uN5zvtG1hSyMb53/gJ7vrNU7/QcpX + Rswf/MxDdea+mKbh3ZaF/0momCTpZODvvd2Bst7cz6SXc/zrw55op8cZyfg4 + YveY7UEQwqD3feTGNQv55B8AAAD//wMAc54zDroEAAA= http_version: - recorded_at: Mon, 14 Sep 2015 16:43:52 GMT + recorded_at: Tue, 24 May 2016 22:17:06 GMT - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions body: encoding: UTF-8 string: | @@ -103,12 +108,12 @@ http_interactions: 50.00 Solidus - f5k5wr + 8rd43m - paypal - + Card + Holder sale @@ -118,9 +123,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -129,79 +136,79 @@ http_interactions: message: Created headers: Date: - - Mon, 14 Sep 2015 16:43:53 GMT + - Tue, 24 May 2016 22:17:07 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"4d342edb968d9c5e3eecc6105a118e6c"' + - W/"af516722c058bcb24bb5dcf901cd3906" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - d8dfca0c4646a2ed29e3c62e7b3a323d + - 2827c171-5af0-4893-98df-98c4e1d1c5da X-Runtime: - - '0.315232' - X-Frame-Options: - - SAMEORIGIN + - '0.412655' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 - /wMAH5hsJg8VAAA= + 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 + OsM3fvc3AAAA//8DABgYsVpZFQAA http_version: - recorded_at: Mon, 14 Sep 2015 16:43:53 GMT + recorded_at: Tue, 24 May 2016 22:17:07 GMT - request: method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/jcdn28/submit_for_settlement + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/7rs8xc/submit_for_settlement body: encoding: UTF-8 string: | @@ -215,9 +222,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -226,80 +235,81 @@ http_interactions: message: OK headers: Date: - - Mon, 14 Sep 2015 16:43:54 GMT + - Tue, 24 May 2016 22:17:07 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"ca8dab12e8c0dec40ab1a2cd860a7a0e"' + - W/"fcc216b8374bff3a41a468ddf3d691a8" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 7f5fb0451aceb6fcf8065403a4f3ed13 + - ea80ed6d-c293-4944-906b-f7755173c40b X-Runtime: - - '0.332794' - X-Frame-Options: - - SAMEORIGIN + - '0.371940' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 + +Z8XAAA= http_version: - recorded_at: Mon, 14 Sep 2015 16:43:53 GMT + recorded_at: Tue, 24 May 2016 22:17:07 GMT - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/jcdn28/refund + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/7rs8xc/refund body: encoding: UTF-8 string: | @@ -313,9 +323,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -324,75 +336,75 @@ http_interactions: message: Created headers: Date: - - Mon, 14 Sep 2015 16:43:54 GMT + - Tue, 24 May 2016 22:17:08 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"967de72cdc826dcdf7616630e1c3c21c"' + - W/"fa6476086d0251ae5faf42a4faeea634" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 0d55fda672381a162f92aaf45566ca3c + - edfc503e-2554-47b4-bbd4-308b32174e00 X-Runtime: - - '0.360054' - X-Frame-Options: - - SAMEORIGIN + - '0.445609' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 - AwD/YlmdGBYAAA== + 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 + 5G8AAAD//wMApV3dgGIWAAA= http_version: - recorded_at: Mon, 14 Sep 2015 16:43:54 GMT -recorded_with: VCR 2.9.3 + recorded_at: Tue, 24 May 2016 22:17:08 GMT +recorded_with: VCR 3.0.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/fails_capture_with_settlement_declined.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/fails_capture_with_settlement_declined.yml index 6446c8a8..91b6b3e3 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/fails_capture_with_settlement_declined.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/fails_capture_with_settlement_declined.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers body: encoding: UTF-8 string: | @@ -10,22 +10,25 @@ http_interactions: Card Holder - mac@roob.name + eula@heaney.co.uk Card Holder + John + Doe 10 Lovely Street Northwest Herndon AL US - 35005 + 08091 fake-paypal-future-nonce true + headers: Accept-Encoding: @@ -33,9 +36,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -44,13 +49,11 @@ http_interactions: message: Created headers: Date: - - Mon, 14 Sep 2015 16:43:50 GMT + - Tue, 24 May 2016 22:17:04 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close X-Frame-Options: - SAMEORIGIN - SAMEORIGIN @@ -58,13 +61,8 @@ http_interactions: - 1; mode=block X-Content-Type-Options: - nosniff - X-Ua-Compatible: - - chrome=1 X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: @@ -72,32 +70,35 @@ http_interactions: Content-Encoding: - gzip Etag: - - '"75ee513ce9ddd0e974ab18e5df96b649"' + - W/"b70e02cc21cb449ee41d7239734121c7" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 9986c644-3d21-4e4b-853b-f93106ab149f + - 58250c92-ff98-41e9-8b0d-ed2f71f18924 X-Runtime: - - '1.016289' + - '0.329496' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAEb59lUAA6RTy27bMBC85ysE3SlaiWLHhiQHKFD0A9JLL8FKXMtM+VBJ - ypby9SUlvxL1UuS4s7Pc3Rluvu2liA5oLNeqiNNkEUeoas24aor458t38hRv - y7u87qzTEk15F0U5Z+Vy8ZQuH1ZZTn0QMJ+r96Ac8fF7pR6H9z9rtzrKY5/d - 5/Q2G9g7bqwjCiSW38CwnN4AIS/gHP3QgqHJ6RUJ+VrLFtQQKS6K2JkOYzri - KIGLUkL9bLSuksDP6QSGdLvXCmdFO+hn2BEry92cWxsEh4yAi9zQYhEzHzou - MS7vF+kjWaxJmr2ky032sMnWv3J6LRjru5b9X/21YOo/+kB2HAWzl5EYd6T2 - OtrTo2AMDKeJWxhaEATqWnfKfWQEwowygR52+jeqcrW2bwdv4RSdc5Omb6Aw - YRqfsQfZCky8Lzd6j0yGO+jEed1Ka4Gg4jJomtNT8kLmEhoknRHl3rnWbigF - a9HZpDLAlTOIjVfjCEPoRP3cEpV7lej2mr0K3Wg67ZK0qtmiOnCjVaAUFhSr - dO+/66XDuecXLR3f+KKt4xu2q2xteOv8Jf7DyJFTcSH8ZRJovBRhMX9Qn/+o - p9G5o58xO4LAmEGv8Kyf3/Jy8X8BAAD//wMAjl/sQSQEAAA= + H4sIAODSRFcAA6RTy27bMBC8+ysE3Snagh2nBi0HKFD0A9JLL8FKXMls+FBJ + Krby9SUlv2LlUuS4M7PkcnbIdkclkze0Thi9TRfZPE1QV4YL3WzTX88/yGO6 + K2as6pw3Cm0xSxImeLFa5/l8vXxkNBQRC1y1B+1JqN9Lverf/37z64M6HJc5 + o7dsVNfCOk80KCy+g+WM3gCRl3CufhrJ0TJ6RSJfGdWC7hMt5Db1tsOUDjgq + ELLATsLTHkFjn1Um614ZHYkoafdG46SxhuMEO2DphJ9qK4vgkRPwie9b3KY8 + lF4oTIt8vngg8xXJl895vlmsN/Plb0avDUN/1/L/6782jPcPuyC1QMndZSQu + PKmCl+50KFgL/WniFvoWJIGqMp32HxVRMJGMYIBLIWWIAoHGIiocNnhvyCD8 + oinjGaeQkQ8Bu0XPSo41dPJ8VWmMDNtOizgToyfyIh53/yfEIeMGn/AIqpUY + kqFucjEohYIGSWdlsfe+dRtKwTn0ListCO2DBU2Y+QAxVooGy6IjLwr93vAX + aRpDRxuzVjc71G/CGh0lWweal+YYfsvlhvOdritdZUXrwwf8ZHeDxptX1EXZ + 9nr5wOhYnbkvpml8tyPxe2qURGjhReTvva1BumDuZ9LLOeH1cU+6NtOMMDqN + 2D3mBhA4txh8n7hxzUIx+wcAAP//AwB0WScquQQAAA== http_version: - recorded_at: Mon, 14 Sep 2015 16:43:49 GMT + recorded_at: Tue, 24 May 2016 22:17:04 GMT - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions body: encoding: UTF-8 string: | @@ -107,12 +108,12 @@ http_interactions: 4001.00 Solidus - 79sjv2 + bpyn46 - paypal - + Card + Holder sale @@ -122,9 +123,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -133,78 +136,79 @@ http_interactions: message: Created headers: Date: - - Mon, 14 Sep 2015 16:43:50 GMT + - Tue, 24 May 2016 22:17:05 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"ec2aa2995b2abba89c21f7d321862191"' + - W/"c009de6eac737ed70f977fb0df5dd40c" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 24e1381d8625cb9c7dce336eff76d97d + - 9900e670-a5c3-4da6-b4ea-139575ca0d5b X-Runtime: - - '0.245372' - X-Frame-Options: - - SAMEORIGIN + - '0.474180' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 + S2/4Jm/+BgAA//8DADBhs+JcFQAA http_version: - recorded_at: Mon, 14 Sep 2015 16:43:50 GMT + recorded_at: Tue, 24 May 2016 22:17:05 GMT - request: method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/gdt3zp/submit_for_settlement + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/bpp3g7/submit_for_settlement body: encoding: UTF-8 string: | @@ -218,9 +222,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -229,76 +235,76 @@ http_interactions: message: Unprocessable Entity headers: Date: - - Mon, 14 Sep 2015 16:43:51 GMT + - Tue, 24 May 2016 22:17:05 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Cache-Control: - no-cache X-Request-Id: - - 30e29ceb2fa15ae4182a9d8fb6634738 + - a3f45cd8-4fa5-42e8-b445-b668ba1c20e1 X-Runtime: - - '0.403563' - X-Frame-Options: - - SAMEORIGIN + - '0.376846' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 - //8DAMYwuuVOGwAA + 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 http_version: - recorded_at: Mon, 14 Sep 2015 16:43:51 GMT -recorded_with: VCR 2.9.3 + recorded_at: Tue, 24 May 2016 22:17:05 GMT +recorded_with: VCR 3.0.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/should_have_the_correct_attributes.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/should_have_the_correct_attributes.yml index b144ad83..cae964a6 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/should_have_the_correct_attributes.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/should_have_the_correct_attributes.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers body: encoding: UTF-8 string: | @@ -10,22 +10,25 @@ http_interactions: Card Holder - pasquale@langosh.name + rubie.ankunding@luettgen.us Card Holder + John + Doe 10 Lovely Street Northwest Herndon AL US - 35005 + 02998-0440 fake-paypal-future-nonce true + headers: Accept-Encoding: @@ -33,9 +36,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -44,50 +49,51 @@ http_interactions: message: Created headers: Date: - - Mon, 14 Sep 2015 16:43:43 GMT + - Tue, 24 May 2016 22:17:00 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"3268f9e4dea837368f47e9dd7d4f09fa"' + - W/"3d9cc2afb26e5484a8d8e3c743580555" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - e2027e76b2ed19f701fb1884facdbd17 + - ca95f77c-becd-466d-acf6-7b9278748d38 X-Runtime: - - '0.229547' - X-Frame-Options: - - SAMEORIGIN + - '0.376237' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAD/59lUAA6RTTW/bMAy991cYvstK0nRpCsUpMGDYD+guuxS0xTjaJEqV - 5Cbur59sNx+rdxkK6ML3HkXxURTbo9HZK/qgLG3yeTHLM6TaSkXNJv/x9I3d - 59vyRtRtiNagL2+yTChZ3t6vlqvFei54CnoscfUeKLIUv1V01729rOPqYA7H - 5ULwa7ZX75QPkREYLL+Cl4JfAT2v4RR9t1qiF/yC9HxtjQPqMlJ6k0ffYs4H - HA0oXToILy1ofNRAjQ37os8TfCR7mdtbwknyDo4T7IBVUHGqrT1CRMkgZrFz - uMllCqMymJeL2fyOzdZsvnyaf3lY3qbzU/BLwpDfOvl/+ZeEsf4wD7ZTqGU4 - P0mqyOrkZ3i/FLyH7v3FDjoHmkFd25bi34peMJGMYIKj/Y1U7mi1poPgY3Ti - Rk9/AWEhLT7iEYzTWKT5XPk9KCXuoNWnditrNQLlZe+p4O/kWawMNMhar8t9 - jC48cA4hYAxF5UFR9IhNcuMAXV+Jp3cbpPhsMO6tfNa2sXzspXDUbJFelbfU - SzYBSFb2mL7tucKp5idHOtzxybEOd4S2CrVXLqaN/McgB02ltE4byqBJVvSN - pcX6+EeTjE8n+hELAwhSekwOT+qlLs+b/wcAAP//AwDyEz8mLAQAAA== + H4sIANzSRFcAA6RTy27bMBC8+ysE3Snaqu3WgSwHKFD0A9JLL8FKXMlsqKVK + UrGVry8p+RUrlyLHnZ19cHaY7Y6Nil7RWKlpGy+SeRwhlVpIqrfxr6cf7Fu8 + y2dZ2VmnGzT5LIoyKfJ1Ol9vVst5xn0QMJ8r90CO+fitoFX/9nfjvh6aw3GZ + Zvw2G9iVNNYxggbz72BExm+AkFdwjn5qJdBk/IqEfKmbFqiPSKpt7EyHMR9w + bECq3HSFxATopaPwjkfVoXM1UtLZjI+UQG73mnDSooLjBDtgYaWbckuD4FAw + cJHrW9zGwodONhjn6XyxZvMVS5dPafqwWD+sNr8zfi0Y6rtW/F/9tWCcP1yF + VRKVsJeVhHSs9KraU1MwBvrTxi30LSgGZak7cu8ZgTChjKCHC6mUF5NBbRAb + HG55L8hA/KQoY4+T3dg7q92iZ6bACjp1HlVorRAozsNOGT8lL+Tx9n+AMBEa + H/EITasw8W668cXAlA3UyDqj8r1zrX3gHKxFZ5PCgCTnJaj9zgfoQzH3kgVF + nht0ey2ela41H2VMWqp3SK/SaAqUrQUShT76f3OZcJ5pu8KWRrbOf8UPbjdw + nH5Bysvjl37vv9UYnXOfdNP4bsvCRyVUTJJ0MuTvta1AWS/uR9RLH//6cCeq + 9NQjGZ9a7B6zAwhCGPS6T9S4eiGf/QMAAP//AwAvGWphwwQAAA== http_version: - recorded_at: Mon, 14 Sep 2015 16:43:43 GMT -recorded_with: VCR 2.9.3 + recorded_at: Tue, 24 May 2016 22:17:00 GMT +recorded_with: VCR 3.0.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/succeeds_authorization_and_capture.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/succeeds_authorization_and_capture.yml index 1cb6f6d1..ffe3619b 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/succeeds_authorization_and_capture.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/succeeds_authorization_and_capture.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers body: encoding: UTF-8 string: | @@ -10,22 +10,25 @@ http_interactions: Card Holder - celestine@kling.co.uk + timmothy.bartell@reinger.ca Card Holder + John + Doe 10 Lovely Street Northwest Herndon AL US - 35005 + 67130-1526 fake-paypal-future-nonce true + headers: Accept-Encoding: @@ -33,9 +36,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -44,56 +49,56 @@ http_interactions: message: Created headers: Date: - - Mon, 14 Sep 2015 16:43:44 GMT + - Tue, 24 May 2016 22:17:00 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"982610f99ced0427065e1bfd003a7c2a"' + - W/"d9c338a974b19139e1dc9f864fb99928" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 763e3d01ee30823d44204aca8c2f8fda + - a2479001-81f6-4a5f-8326-136641423436 X-Runtime: - - '0.238701' - X-Frame-Options: - - SAMEORIGIN + - '0.338192' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAED59lUAA6RTy27bMBC85ysE3Snajp3EgSQHKFD0A9JLL8GKXMuM+VBI - Kpby9SUlvxL10KIALzszy92dJfNNp2TyjtYJo4t0ns3SBDUzXOi6SH8+fycP - 6aa8yVnrvFFoy5skyQUvF6vVw3p2f5fTEEQscGwH2pMQf1R61X+8rf39QR26 - 5SKn12xUb4V1nmhQWH4Dy3N6BURewin6YSRHm9MLEnlmVAO6T7SQReptiykd - cFQgZMlQovNC49NehjkyZrJ2n9ORjLJmZzROkrfQTbADVk74qZZZBI+cgE98 - 32CR8hB6oTAtF7P5iszWZL58nt89Lm/D+ZXTS8KQ3zb87/OXIf+SMNYf9kG2 - AiV355a48IQFP93xUrAW+mPHDfQNSAKMmVb7z4oomEhGMMDe7FGX+1fO3sIq - x+jEjZ6+gsaMG3zCDlQjMTiurvwelBy30MrTuJUxEkGnZfQ0p0fyLBYKaiSt - leXO+8Y9UgrOoXdZZUFobxHr4MYB+liJhr4Vav+i0O8Mf5GmNnScJWt0vUH9 - LqzRUVI40LwyXXi25wqnmv+50uGOf1rr7WStwx2urRyzovHhR/5hkYOmEjK+ - bAJ1sCIOFj7W1zcaZHS60a+YG0Dg3GJweFIvTHn++b8BAAD//wMAVXWc7SwE - AAA= + H4sIANzSRFcAA6RTyW7bMBC9+ysE3SlayuLWoOUABYp+QHrpJRiJI5ktF5Wk + YitfX1LyFiuXIsd582bhm0e2PSiZvKJ1wuhNmmfLNEFdGy50u0l/Pn8nX9Jt + uWB177xRaMtFkjDBy7t8lRdFXjAagoiFXL0D7UmI3yr9MLz9/epXe7U/3AfS + dTayG2GdJxoUlt/AckavgJiXcIp+GMnRMnpBYr42qgM9JFrITeptjykdcVQg + ZOmFUsbvhqwC61HKJ4vhOWizGhidKJHc7YzGWYsGDjNsj5UTfs6tLYJHTsAn + fuhwk/IQhumYlsUyfyTLB1LcPxfFOl+tl8tfjF4Kxvq+4/9XfymY5o9XIY1A + yd15JS48qYOq7tgUrIXhuHEHQweSQF2bXvv3jEiYUSYwwJWQMqhIoLWICsdb + 3goyEj8pytTjaDfyzmrX6InJsYFenkZVxkgEnZZxJ0aPyTN5uv1v0Jhxg094 + ANVJzIKbrnwxMoWCFklvZbnzvnNrSsE59C6rLAjtgwRt2HkPQyymQbKoyItC + vzP8RZrW0EnGrNPtFvWrsEZHysaB5pU5hH9znnCa6frK1VZ0PnzFD243crz5 + g7p8vKvqpmJ0ik65T7ppercj8aNqlERo4UXM32rbgHRB3I+o5z7h9fFOujFz + jzA6t9gt5kYQOLcYdJ+pcfFCufgHAAD//wMAuJ6zf8MEAAA= http_version: - recorded_at: Mon, 14 Sep 2015 16:43:43 GMT + recorded_at: Tue, 24 May 2016 22:17:00 GMT - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions body: encoding: UTF-8 string: | @@ -103,12 +108,12 @@ http_interactions: 50.00 Solidus - kjdcq2 + 63bcfb - paypal - + Card + Holder sale @@ -118,9 +123,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -129,79 +136,79 @@ http_interactions: message: Created headers: Date: - - Mon, 14 Sep 2015 16:43:45 GMT + - Tue, 24 May 2016 22:17:01 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"24630c2425af435837eb816db2782867"' + - W/"15c869be5e934afc13bca6b6532087fb" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 557d85408275fd68336a10513be9b82e + - 8b0e17d2-2faa-4ade-9723-22728794b0a6 X-Runtime: - - '0.325392' - X-Frame-Options: - - SAMEORIGIN + - '0.413607' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 - ARUAAA== + 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 + ZRkN3/jd3wAAAP//AwBaCxaaYhUAAA== http_version: - recorded_at: Mon, 14 Sep 2015 16:43:44 GMT + recorded_at: Tue, 24 May 2016 22:17:01 GMT - request: method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/55hjny/submit_for_settlement + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/69tvnx/submit_for_settlement body: encoding: UTF-8 string: | @@ -215,9 +222,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -226,75 +235,76 @@ http_interactions: message: OK headers: Date: - - Mon, 14 Sep 2015 16:43:45 GMT + - Tue, 24 May 2016 22:17:02 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"eede2a008edcf345b2106633bf8f235f"' + - W/"0d2305b67b11bf3a3f8f6a283efd5846" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 87771e4c30df2f0c93df1b09275809d7 + - 6fa73222-55ee-4b51-bf84-7ea258f682a8 X-Runtime: - - '0.283838' - X-Frame-Options: - - SAMEORIGIN + - '0.450364' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 + AA== http_version: - recorded_at: Mon, 14 Sep 2015 16:43:45 GMT -recorded_with: VCR 2.9.3 + recorded_at: Tue, 24 May 2016 22:17:02 GMT +recorded_with: VCR 3.0.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/succeeds_capture_on_pending_settlement.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/succeeds_capture_on_pending_settlement.yml index a23af8f7..9b92f742 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/succeeds_capture_on_pending_settlement.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/succeeds_capture_on_pending_settlement.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers body: encoding: UTF-8 string: | @@ -10,22 +10,25 @@ http_interactions: Card Holder - beverly_kozey@schinnerkovacek.co.uk + alexane@prohaska.us Card Holder + John + Doe 10 Lovely Street Northwest Herndon AL US - 35005 + 32316-5958 fake-paypal-future-nonce true + headers: Accept-Encoding: @@ -33,9 +36,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -44,56 +49,56 @@ http_interactions: message: Created headers: Date: - - Mon, 14 Sep 2015 16:43:46 GMT + - Tue, 24 May 2016 22:17:02 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"fb98b77abeffc2bb8e115e75c0ce001a"' + - W/"28528e0cef16e5ee5c7da3d8aff65910" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 415ad3654a4e678affe57fc51f80ded8 + - cbcf3e95-1963-48ae-9bfe-0b4fea07e118 X-Runtime: - - '0.223078' - X-Frame-Options: - - SAMEORIGIN + - '0.344004' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAEL59lUAA6RUyW7bMBC95ysE3Sl6T2zQcoACRT8gvfRijMixzJqLSlK2 - 5a8vJcVLol6KHOfNm+0Nh2xz1io5ovPSmnU6zkZpgoZbIU25Tn++fScv6SZ/ - Yrz2wWp0+VOSMCny+XSyeHmeLBmNRotFH9+DCSTal8LMm8ufZXg+6dN5NmH0 - 0duyd9L5QAxozL+BE4w+AK1fwdX6YZVAx+gdaf3c6gpMkxip1mlwNaa0w1GD - VHmBcSDVbA/2gs2r53tpDLqDPQLHQ8ZtVh8Y7altULW3BgepdnAeYCcsvAxD - LncIAQWBkISmwnUqohmkxjSfjMZzMlqS8extvFjNpqvZ4hej94Auvq7E/8Xf - A/r63XbITqIS/taSkIHwqK5/TwrOQfPecQVNBYoA57Y24SOjJQwoPRjhYA9o - 8qnQpT8x2ltXX6/pbzCYCYuveAZdKYyK6we9O6bAHdTqOm5hrUIwad5qyui7 - 80aWGkoktVP5PoTKrygF7zH4rHAgTXCIZVTjBE1bica+NZqw1Rj2VmyVLS3t - Z8kqU27QHKWzpqWsPRhR2HN8xLcK15pfXGmX44tr7XL4uvDcySrE+/zHIjtO - IZWK90qgjFK0g8Uz+/xGI40ON/oZ8x0IQjiMCg/qxSlv/8BfAAAA//8DANCt - d7M6BAAA + H4sIAN7SRFcAA6RTy27bMBC8+ysE3SnaghPXhiwHCFD0A9JLL8FKXElsKJIh + KdvK15eU/IqVS5HjzsySy9lhtju2ItqjsVzJbbxI5nGEslSMy3ob/375SX7E + u3yWlZ11qkWTz6Io4yxfLFfrxeM6zagvAua5sgHpiK8/CvnQf7yv3erQHo5L + L7plg7rixjoiocX8GQzL6A0QeAHn6pcSDE1Gr0jgS9VqkH0kudjGznQY0wHH + FrjIQeARJD5poxqwb5B0NqMjFUS6URInrRUcJ9gBC8vdVFsaBIeMgItcr3Eb + M1863mKcp/PFI5k/kHT5kqabxWozT/9k9Now9Hea/V//tWG8f9gGqTgKZi8j + Me5I6d20p0PBGOhPE2voNQgCZak66T4rgmAiGUEPF1wIHwYCtUFscdjhvSGD + 8JumjGecYkY+RewWPSsZVtCJ81WFUgJBxnmYKaMn8iIed//XZyJhCp98Olot + MPEpusnFoOQt1Eg6I/LGOW03lIK16GxSGODSeQtqP/MB+tBMvWXBkdcWXaPY + q1C1oqONiZb1DuWeGyWDZGtBskId/X+53HC+03aFLQ3Xzn/BL3Y3aJx6Q5lX + e900fuaxOnPfTNP4bkvCB5UoCJfc8cDfe1uBsN7cr6SXc/zrw55kpaYZyeg0 + YveYHUBgzKD3feLGNQv57B8AAAD//wMAoPUktLsEAAA= http_version: - recorded_at: Mon, 14 Sep 2015 16:43:46 GMT + recorded_at: Tue, 24 May 2016 22:17:02 GMT - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions body: encoding: UTF-8 string: | @@ -103,8 +108,8 @@ http_interactions: 4002.00 Solidus - 3dmgsw - 53268729 + fvphhm + 14791692 sale headers: @@ -113,9 +118,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -124,79 +131,79 @@ http_interactions: message: Created headers: Date: - - Mon, 14 Sep 2015 16:43:47 GMT + - Tue, 24 May 2016 22:17:03 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"4f5e92a408249dfa9a54b78ad782e363"' + - W/"ed5973abf9e3a2ecf4db6fd71369833e" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 060518fdfee93f4e82295cdcd431249c + - 9827810c-cac3-48ca-8349-570f936f71e5 X-Runtime: - - '0.525286' - X-Frame-Options: - - SAMEORIGIN + - '0.468228' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 - b/jmHwAAAP//AwD5YufSExUAAA== + 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 + WHrDN3nzNwAAAP//AwBaa1IhXhUAAA== http_version: - recorded_at: Mon, 14 Sep 2015 16:43:47 GMT + recorded_at: Tue, 24 May 2016 22:17:03 GMT - request: method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/jv2rsd/submit_for_settlement + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/795567/submit_for_settlement body: encoding: UTF-8 string: | @@ -210,9 +217,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -221,76 +230,76 @@ http_interactions: message: OK headers: Date: - - Mon, 14 Sep 2015 16:43:48 GMT + - Tue, 24 May 2016 22:17:04 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"4b11e265a988f0c7d0b185ae894f40af"' + - W/"0118c4d7f2c09917ce5bd7dc102fe2bb" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 1fd8f4501a157ec23c77c95e225f4f76 + - a1b3219a-182d-423b-92b6-a85c39cd46f6 X-Runtime: - - '0.518692' - X-Frame-Options: - - SAMEORIGIN + - '0.414540' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 - 3wAAAP//AwDbpeeIdhgAAA== + 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 + /wMArnwKUMEYAAA= http_version: - recorded_at: Mon, 14 Sep 2015 16:43:48 GMT -recorded_with: VCR 2.9.3 + recorded_at: Tue, 24 May 2016 22:17:04 GMT +recorded_with: VCR 3.0.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/voids_a_authorized_payment.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/voids_a_authorized_payment.yml index 29f3d8de..b9631ea2 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/voids_a_authorized_payment.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/PayPal/voids_a_authorized_payment.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers body: encoding: UTF-8 string: | @@ -10,22 +10,25 @@ http_interactions: Card Holder - meggie.jewess@marks.com + floy@walter.co.uk Card Holder + John + Doe 10 Lovely Street Northwest Herndon AL US - 35005 + 88841-1815 fake-paypal-future-nonce true + headers: Accept-Encoding: @@ -33,9 +36,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -44,55 +49,56 @@ http_interactions: message: Created headers: Date: - - Mon, 14 Sep 2015 16:43:55 GMT + - Tue, 24 May 2016 22:17:09 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"bffd4711212ce4adc2dcc4a98446aa28"' + - W/"b1b1e389a79e100d4118afed8145b92b" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 19f7b47054ab58ef8cb06a3d387c99db + - cd8badde-5132-4acb-97f8-dce6a0ee1f25 X-Runtime: - - '0.216714' - X-Frame-Options: - - SAMEORIGIN + - '0.320942' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAEv59lUAA6RTy27bMBC85ysE3Slajp3UBiUHKFD0A9JLL8FKXMuM+VBJ - KpLy9aUkPxKrlyLHnZnl7s5y2a5TMnpD64TRWZwmizhCXRoudJXFv55/kG/x - Lr9jZeO8UWjzuyhigufperHcbB7uGQ3BgAWuPID2JMTvhV737382/rFVbbda - MvqRHdR7YZ0nGhTm38FyRj8AAy/hHP00kqNl9IoMfGlUDbqPtJBZ7G2DMR1x - VCBkrrCqBCav2KJzTwrs0SUhg9GJHoT1wWicpe+hm2EtFk74uba0CB45AR/5 - vsYs5iH0QmGcLxfpmiw2JF09pw/b1f12vf7N6DVhzG9q/n/514Sp/rgRshco - ubu0xIUnZXDUnR4Fa6E/dVxDX4MkUJam0f6zYhDMJBMYYG+OqPPj0j52LaNT - dOYmT19BY8INPmEHqpZ44/eo5LiHRp7HLYyRCDrOB08ZPZEXsVBQIWmszA/e - 125LKTiH3iWFBaG9RayCGy30QyUa+lao/YtCfzD8RZrK0GmWpNbVDvWbsEYP - ksyB5oXpwse9VDjX/OJKxze+uNbxDdcUrrSi9uEm/7HIUVMIKcONEqiCFcNg - 4bRu/2iQ0flGbzE3gsC5DdeCs3physvt/wUAAP//AwAXUsgOLgQAAA== + H4sIAOXSRFcAA6RTy27bMBC8+ysE3SnaShQnBi0HKFD0A9JLL8FKXMlMKFIl + KdvK15eU/IqVS5HjzsySy9kh2xwaGe3QWKHVOl4k8zhCVWouVL2Of7/8JI/x + Jp+xsrNON2jyWRQxwfMsy+7SbL5k1BcB81y5BeWIrz8KlfUff5/cct/sD/cp + o9dsUFfCWEcUNJj/AMMZvQICL+FU/dKSo2H0ggS+1E0Lqo+UkOvYmQ5jOuDY + gJB5JXX/vAfp0CSlTrp3RkciSNqtVjhprOAwwfZYWOGm2tIgOOQEXOT6Ftcx + 96UTDcZ5Ol88kHlG0vuXNF0tlqv54x9GLw1Df9fy/+u/NIz3D7sglUDJ7Xkk + LhwpvZf2eCgYA/1x4hb6FiSBstSdcp8VQTCRjKCHCyGljwKB2iA2OGzw1pBB + +E1TxjOOISOfAnaNnpQcK+jk6apCa4mg4jzMxOiRPIvH3b+BwoRrfMYDNK1E + n4zmKheDUjRQI+mMzLfOtXZFKViLziaFAaGct6D2M++hD83UWxYceW3QbTV/ + lbrWdLQxaVW9QbUTRqsgWVtQvNAH/1vON5zutF1hSyNa5z/gF7sbNE6/o8rv + dnvz9sDoWJ24b6ZpfLcl4XsqlEQo4UTgb72tQFpv7lfS8zn+9WFPqtLTjDA6 + jdgtZgcQODfofZ+4cclCPvsHAAD//wMAWWOd87kEAAA= http_version: - recorded_at: Mon, 14 Sep 2015 16:43:55 GMT + recorded_at: Tue, 24 May 2016 22:17:09 GMT - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions body: encoding: UTF-8 string: | @@ -102,12 +108,12 @@ http_interactions: 50.00 Solidus - k2r7xw + 3vwrj6 - paypal - + Card + Holder sale @@ -117,9 +123,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -128,79 +136,79 @@ http_interactions: message: Created headers: Date: - - Mon, 14 Sep 2015 16:43:56 GMT + - Tue, 24 May 2016 22:17:09 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"74c4d2bb443ca49bd7f9d70ed6369984"' + - W/"a01e876d7f71ac4fdb230d6058ebf341" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - d47c957cadebeb1d15d4d626f8f62742 + - dbc830d6-f374-4d10-84a3-ee0185e853bd X-Runtime: - - '0.324912' - X-Frame-Options: - - SAMEORIGIN + - '0.471495' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 - iwMVAAA= + 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 + 8E3e/A0AAP//AwDHEfJAWBUAAA== http_version: - recorded_at: Mon, 14 Sep 2015 16:43:56 GMT + recorded_at: Tue, 24 May 2016 22:17:09 GMT - request: method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/cgx9gt/void + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/fsp6dh/void body: encoding: UTF-8 string: '' @@ -210,9 +218,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -221,74 +231,74 @@ http_interactions: message: OK headers: Date: - - Mon, 14 Sep 2015 16:43:57 GMT + - Tue, 24 May 2016 22:17:10 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"1fa071798186db07ff3b2012e818c8c0"' + - W/"44a19af2c4a0178f5d28654dfe441c44" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 2519241026fae42f94ccc266e655e7fb + - 303aa72c-4baf-4305-b4b5-ae64e1c6264f X-Runtime: - - '0.211915' - X-Frame-Options: - - SAMEORIGIN + - '0.311236' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 - D2kPg+aw9Jpv9OZvAAAA//8DAFkn+yD3FQAA + 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 http_version: - recorded_at: Mon, 14 Sep 2015 16:43:56 GMT -recorded_with: VCR 2.9.3 + recorded_at: Tue, 24 May 2016 22:17:10 GMT +recorded_with: VCR 3.0.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/Previously_consumed_nonce/should_raise_exception.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/Previously_consumed_nonce/should_raise_exception.yml index afb12e82..f0fa15ab 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/Previously_consumed_nonce/should_raise_exception.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/Previously_consumed_nonce/should_raise_exception.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers body: encoding: UTF-8 string: | @@ -10,22 +10,25 @@ http_interactions: Card Holder - johnathan_halvorson@prohaskamaggio.us + brooklyn.gibson@bernhardrunolfsdottir.biz Card Holder + John + Doe 10 Lovely Street Northwest Herndon AL US - 35005 + 66646-9501 fake-consumed-nonce true + headers: Accept-Encoding: @@ -33,9 +36,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -44,13 +49,11 @@ http_interactions: message: Unprocessable Entity headers: Date: - - Mon, 14 Sep 2015 16:43:42 GMT + - Tue, 24 May 2016 22:16:59 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close X-Frame-Options: - SAMEORIGIN - SAMEORIGIN @@ -58,13 +61,8 @@ http_interactions: - 1; mode=block X-Content-Type-Options: - nosniff - X-Ua-Compatible: - - chrome=1 X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: @@ -74,25 +72,28 @@ http_interactions: Cache-Control: - no-cache X-Request-Id: - - 50ab942e-6dba-45f4-9b01-db0fb1c3fb56 + - d871ebb3-2f4b-4d25-8d6c-0d8812589e98 X-Runtime: - - '0.113054' + - '0.059307' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAD759lUAA9xVTW/bMAy951cIvjtOFhTdAMXdMGDoodil6zlgLCbWqg+D - krP630927ERxkrbYdtpNeo+kqCeS4ncvWrEdkpPWLJP5dJYwNIUV0myXydOP - b+nH5C6fcKhkikSWUkJXWeMwnzDGO8i1y8OG+abCZQJE0CRZTxW181Yj7bev - 2gaygkaj8alGX1oxwJe9juzAx0h7tBWYf1rMZ7c869anNHhPcl177KO6Rq+t - SvI+h9U+h5WxpkCeHaxHUTQ6B1vMv4Ix1rPaIQN2KQTTlsJRJRjWbqc8G1zj - e2Sji/SAOyiUXZaIF4RC+rQA+jeyzW8X8/9HtoCspVKhtFMQIhSyO5fhSk22 - wa74Bn3GqgcoKvg4jVDbBNpda4uNJOdTA7rVhATPImCwUTAg91YJJJ4dkUN7 - aZAq/2lLA61oqxLULmRgzeeKbAnuGTRst9JOaxey64xfL6F2W3bHHbNjw/lj - 8n1yO0+I/kDNZ+zB7lA17LEjeDYyOHmqF49GoDiQ3y358he64HbGxY7KFqCk - b/J7JCOsCeINSGxGGMQx+ZcHnvXLmC1sbTw1adsXKaiqhA/502PbJ+d47FdZ - 50F1dL64mc1uQh9H0NuldjYb06478g08Y4hhXK2xx8Yjorc8BrKVD/c6VSf8 - A3LT7N/eUx2CxEiU35kzF7iTBaYuZBuYVApmpFombZSTLtoQ1CLkREWoS3/F - 7h0tdeyjP58ik7+ZO2GqXfgTfwMAAP//AwBqsz9rUAcAAA== + H4sIANvSRFcAA9xVwW7bMAy95ysE3xUn65augOJu2DAUQ7FL13MhW0wsVBYN + Ss7qff1k13YcJ+mKbafdpPdIinwmaXH9VBi2A3Ia7TpazhcRA5uh0na7ju6/ + f+Hvo+tkJmSpORAhcQJXonWQzBgTLeSa43Bhvi5hHUkiWUdxR2WV81gAPV9f + tA1kKesCrOcF+BxVD5/22rM9P0aap1FBcnWxXFyKuD0f0tJ70mnloYvq6iJF + EyVdDg/POTxYtBmIeLCeRCnAObmF5JO0Fj2rHDDJToVgBVJ4KpeWNde5iHvX + cR3xpJAOcINC8WmJREagtOeZpH8j2/LyYvn/yBaQVBsTWptLpUIju2MZzvRk + E+yMb9BnqnqARg0/TiP0NsnCnRuLjSbnuZVFowkpEY+A3sbIHrlBo4BEvEeG + 8SqkNklKiI+mtvOtTh3aDymQzUNYqiyajVPovaZ5qn+GDFuHl9uouebtk/sM + WZ/DlHyd5KPyvmJuT9U7qfkzwomCWyPnCcAP7ywX7BZ3YGp21xIinhgcfPsn + D1aBGshvSD7/AS64HXEHmWEmjfZ1chPEVRhKGJCxGcE2LNjk462Iu+OYzbCy + nmreDBqXpszlm+T+rhm8Y3zsV6Lz0rR0slqt3q741btFGNgx/vsGPtq4vJ25 + ZCMfIcSwriqgw6aLp7PcB8LSh+IOJQp/F72pn7vJUxWCjJFRfkfOQsFOZ8Bd + yDYwXCtmtVlHTZSD2dyQrFTIibKwIvwZu1cM6n46/3w3zf5mm4VdeeJP+wsA + AP//AwCx8vEbpgcAAA== http_version: - recorded_at: Mon, 14 Sep 2015 16:43:42 GMT -recorded_with: VCR 2.9.3 + recorded_at: Tue, 24 May 2016 22:16:59 GMT +recorded_with: VCR 3.0.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/fraudulent_purchase/fails.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/fraudulent_purchase/fails.yml index 7b2a8752..d4717edd 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/fraudulent_purchase/fails.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/fraudulent_purchase/fails.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers body: encoding: UTF-8 string: | @@ -10,7 +10,7 @@ http_interactions: Card Holder - mohamed_moore@mayert.us + marjory@williamsonkub.us Card Holder @@ -21,7 +21,7 @@ http_interactions: Herndon AL US - 66086-5882 + 61378 fake-gateway-rejected-fraud-nonce @@ -36,9 +36,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.60.0 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -47,7 +49,7 @@ http_interactions: message: Unprocessable Entity headers: Date: - - Wed, 04 May 2016 23:13:23 GMT + - Tue, 24 May 2016 22:16:36 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -70,36 +72,36 @@ http_interactions: Cache-Control: - no-cache X-Request-Id: - - 059ed4fc-ee3b-4088-94a8-9a6ec84044c7 + - a4cfd14c-7d69-4107-9a60-193749cf8885 X-Runtime: - - '0.252607' + - '0.204329' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 http_version: - recorded_at: Wed, 04 May 2016 23:13:23 GMT -recorded_with: VCR 3.0.1 + recorded_at: Tue, 24 May 2016 22:16:36 GMT +recorded_with: VCR 3.0.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/order_gets_updated_with_device_data/order_passes_device_data_to_create_profile.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/order_gets_updated_with_device_data/order_passes_device_data_to_create_profile.yml index 55bc1902..40dd4501 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/order_gets_updated_with_device_data/order_passes_device_data_to_create_profile.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/order_gets_updated_with_device_data/order_passes_device_data_to_create_profile.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers body: encoding: UTF-8 string: | @@ -10,7 +10,7 @@ http_interactions: John Doe - domenico@bernier.com + karson@lueilwitz.us John Doe @@ -21,14 +21,14 @@ http_interactions: Herndon AL US - 47525-1563 + 03335 fake-valid-nonce true - + {"device_session_id":"75197918b634416368241bb8996b560c","fraud_merchant_id":"600000"} headers: Accept-Encoding: @@ -36,9 +36,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.60.0 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -47,7 +49,7 @@ http_interactions: message: Created headers: Date: - - Fri, 29 Apr 2016 22:36:23 GMT + - Tue, 24 May 2016 22:16:38 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -68,48 +70,48 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"c85f44c108c008d1202fc2d557693dd5" + - W/"be672a7fc9b907227bec6f32ec637e78" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 43528971-4a29-49c4-bfd5-a5b4fe45dd01 + - e5e94303-c584-425c-b925-4f3adbf6da98 X-Runtime: - - '0.813903' + - '0.908530' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAOfhI1cAA7RYS2/jNhC+768wfFdkyXbsBArTLIqiaLvpArvpoZcFJdIx - NzKpJSnH3l/fIfWiJL+THgyYM99QQ87rk6L7zSodrKlUTPC7YXA1Gg4oTwRh - /Plu+PT1N28+vEcfoiRXWqyoRB8Gg4gRNJ8F0+lkPI98WBgZ6JIl5tqD9c+Y - T7c/f9zo2evqdTMJI9/VGvSCSaU9jlcU/SGWPPIdgdGnuFr9KmjkN0ujTMQq - w3w74Cy9G2qZ06Fv5XSFWYoIuMlZIn6JqeSMyiuAR36hM6hsKTjt2S7wpid7 - pbFiuo9NJMWaEg/rgd5m9G5IYKnZig5ROAquvdHEC2++huHt+Po2HP8b+Y2B - tc8zcp59Y1A838bCWzCaElW7RJj2EiyJKjfFUuLt0Gjb+kICspilKUTZw4RI - qlQlL+L7sq4iW8qqBPBawXelDfZIdEvUoRhXD90d6VKrtKRU1/5//nvwUWwG - wXg8i/yOrjGiG005MZdZqh6F1MtXqjQkSVfnOCsSnDK9Rb9DVhEBZ6olDUjS - Z6gi9PBX5Jd/G10mlMapB5VF0WQ2DadeML0eR74rdw+ecy23VuzhNFviED19 - gfveIT9kNQarh11m431mPIdwsgTNJ6OOXaXpG9qoPXGoFTL4oiFV1UAsBg8W - jptdusF9WxmVu7yxmOwe/p5SgBLhaDIKwvncYOpwRqaOPPM49A9T5oT12kUs - RUqgNOo6GNg872pqC7EyXZLhFK7yhYtXbm6uljWw4jLFwmNK5ZgnFDVX7Epr - i7ff8+nV3yBNfWhTAzZve9IKT2jMdHPiYtkoFzhPK79jIVKK+RCZTmCgVtmA - cwkx8qDy8tT472za1VQmdJMxaf3xVoLrJQpC0wU6wh3oLcUSbi8cteBW2kJD - QXR8X+BU0dLK8WRJcaqXkBu0cduRVTC2ws/Uy2WKllpn6tb3sVJUq6tYYsZN - z3uGA77irZl6foa3MAv1txXVS0G+peJZ+GtI2KuMP99TvmZScAO4U5iTWGyg - 5df710+EdDKlEWP+0rjWklZQ28EnKJjPg7KdT2oduCJF6qR2JagBkmYY8uhR - gK78X+lUHqtEssxccnu81eMg0uKFckS+T8fZdeQXq0qXc/Yjtw0stskKR2Yw - PSWakPFkmszoJA6CWTjGJKSLxTQmMxyPAvhBt9hnWu/9Dv1nTflKeIq87EmW - Wu9YSHCjKKVdA78HasR2cGKdK1ToKTHT0gpcTLJeQ8GoDPanxXT6BGXcE7om - eK08KqWQbczu6V3infHXf9xhQHer9sjfvdtBjLthWUaA+E4TW9zQFJXgew9T - M1yc2GZseqKCRKYO+XVUrmkmRQLedO8NBaPRyBTDbu2RHTSQGfSQgWZtIrwP - 4e4Cbl3PkvUNb1O/hiq6slNpnkUep3pFzh2ie2Xmnk/5rOFltK9w/gTqZ4EH - 6F8RpXMoYHkhbyBYDrFpV3b/XaDUHOihdSLsJERumHcPgOrZx4hTHa4zBnPf - 5vh4rvw5j604pziL3JV2/+McqlJs/xQtEacRjRJ8iJxVkLNZV3WJJ/Hd6lxH - 6EMJO52s1E6cyabrexYkT2wnb1xqZK0a3FNv5/HycM/7z/swELuPZOrFAw3u - XipBnx/hdTD49HH+5+SxOxxsmiRM2dZXzBuTKaWkdRM7nmDITZ+ltKVlQ+7d - ZEtgQVHZwenOjyDdt7veZ44zXnNOmH1Hp96heXfBpLtoxp0w3fbPtXMm2iWf - NC76oHHh54y3zNp3ecV+cxkDw21iWy8oLJsURh/+AwAA//8DAGMwtn7xFQAA + H4sIAMbSRFcAA7RYWY/bNhB+z68w/K6V5CN2Ai3TLYqiCHIBmxRFXgJKpNfs + SqRCUj7213dIXZTkczd9MGDOfEMNOdcnRe92WTraUKmY4Lfj8CYYjyhPBGH8 + 4Xb87euf3nL8Dr2KkkJpkVGJXo1GESNoHs6X0zfhMvJhYWSgS9aYaw/WTzGf + 759+vtGLbbbdzSaR72oNesWk0h7HGUXvxZpHviMw+hTXqz8Ejfx2aZSJyHLM + 9yPO0tuxlgUd+1ZOM8xS9IilEvy3tKAs3TL9dFOoyC9VBpSvBacD0xXeDWRb + Giumh9hEUqwp8bAe6X1Ob8cElppldIwmQfjaC+beZPZ1Mnkbvn47XX6P/NbA + 2hc5uc6+NSifb0PhrRhNiWpcIkx7CZZEVZtiKfF+bLRdfSkBWczSFILsYUIk + VaqWl+Hdz+vAVrI6/l4n9q60xZ4JboU6FeL6oYcDXWmVlpTqxv8vn0e/i90o + nE4Xkd/TtUZ0pykn5jIr1Sch9XpLlYYk6escZ0WCU6b36C8qORFwpkbSgiR9 + gCJCdx8iv/rb6nKhNE49KCyKgul0CvfritwzF1zLvRV7OM3XeIK+3cNVH5Cf + spqC1d0hs+kxM15AJFmClrOgZ1drhoY2YN84lAkZ3WvIUjUSq9GdheN2l35c + X1ZB1S4vrCO7h3+kCqA6OJoF4WS5NJgmkpEpIc88Dv3NlDlhs3YRa5ESqIqm + BEY2xfuaxkJkpj8ynMJVPnKx5ebmGlkLKy9TrDymVIF5QlF7xa60sXj5PV9e + +C3SlIY26W/zdiCt8YTGTLcnLpetcoWLtPY7FiKlmI+RaQIGapUtuJAQIw+K + rkiN/86mfU1tQnc5k9YfLxNcr1E4MQ2gJzyA3lMs4fYmQQdupR00FETP9xVO + Fa2sHE/WFKd6DblBW7cdWQ1jGX6gXiFTtNY6V299HytFtbqJJWbctLsHOOAW + 728gdfwc7zPK9Y+M6rUgP1LxIPwNJOxNzh/eUb5hUnADuFWYk1jsoNs3+zdP + hHQypRFj/ti61pHWUNu8ZyhcLsOqk88aHbgiReqkdi1oAJLmGPLokwBd9b/W + qSJWiWS5ueTuZGsmQaTFI+Vovlhlmzjyy1WtKzj7WdgGFttkhSMzGJwSzch0 + Nk8WdBaH4WIyxWRCV6t5TBY4DkL4Qbc4Ztrs/Qv6z4byTHiKPB5JlkbvWEhw + oyylQ7N+AGrFdmZiXShU6ikxg9IKXEyy2UDBqBz2p+V0+ghlPBC6JnijPCql + kF3M4cFd4Z3xN3zcaUB/q+60P7zbSYy7YVVGgPiXJra4oSkCozx6mIbb4sQ2 + Y9MTFSQydWivo3JNcykS8KZ/bygMgsAUw2HtmR008Bh0l4NmYyJ8DOHuAm4R + mc9X0y7ra1miK7uU4VnkeZZX5twppldl7vVszxo+j/GVzl/A+izwBPMro3Qh + +6vu4gXcyuE03aIevgFUmhPts8mBg1zIjfDh3l8/+xxnaiJ1xUwe2pyfzLU/ + 1xEV5xRX8brK7n8cQXV2HR+gFeIyjlGBT/GyGnI14aov8SKqW5/rDHOoYJfz + lMaJK4l0c8+CFIlt4q1LraxTg0fq7TpKvjjy6vNryIfdRzL16IEG9y+VoC/v + g/vgw+T9P9/vP/bngk2ThCnb9cpRYzKlknRu4sATDK8ZEpSutOrFg5vsCCwo + qpo3Pfjpo/9iN/i4ccUbzgVj7+zAOzXqnjHknjXeLhhsx0fahcPsOR8ynvUZ + 45kfMV4yZn/Ji/WLKxh4bRvWZkFh2WYvevUfAAAA//8DANdvH4fhFQAA http_version: - recorded_at: Fri, 29 Apr 2016 22:36:23 GMT -recorded_with: VCR 3.0.1 + recorded_at: Tue, 24 May 2016 22:16:38 GMT +recorded_with: VCR 3.0.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/payment_has_associated_device_data/sends_it_to_Braintree.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/payment_has_associated_device_data/sends_it_to_Braintree.yml index 08c9531f..335764f0 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/payment_has_associated_device_data/sends_it_to_Braintree.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/payment_has_associated_device_data/sends_it_to_Braintree.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers body: encoding: UTF-8 string: | @@ -10,7 +10,7 @@ http_interactions: Card Holder - carmella@sanfordpfeffer.co.uk + davon_moen@ondrickapollich.info Card Holder @@ -21,14 +21,14 @@ http_interactions: Herndon AL US - 21671-9798 + 68545 fake-valid-nonce true - + {"device_session_id":"75197918b634416368241bb8996b560c","fraud_merchant_id":"600000"} headers: Accept-Encoding: @@ -36,9 +36,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.60.0 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -47,7 +49,7 @@ http_interactions: message: Created headers: Date: - - Mon, 25 Apr 2016 15:00:37 GMT + - Tue, 24 May 2016 22:16:37 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -68,49 +70,49 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"61828e38f3e6ec0e3f2b0851143011ef" + - W/"e84d976b461e03436b1e7b8dccfac8c7" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 72f44c6f-2976-4d40-92a9-228aae1a6eb3 + - ecbfe84b-b8f8-4e5c-bbcf-bf5194149330 X-Runtime: - - '0.888998' + - '0.901217' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIABUxHlcAA7RY247bNhB9z1cYftdK8mXtDbRKFw2KoEiDFkmKIC8BJY5t - ZSVSISmvna/vkLpRku21vemDAXPmDDXk3I4UvNll6WgLQiac3Y/9G288AhZz - mrD1/fjzpz+c5fhN+CqIC6l4BiJ8NRoFCQ2nd3fzpT/1AhcXWoa6eEOYcnD9 - M2Lz/c8fd2rxlD3tZpPAtbUavUqEVA4jGYS/E0ED1xJofUrq1TueUhCB20q0 - PuZZTth+xJL0fqxEAWPXyCEjSRrGRGSQpuQ3SdiKC5qvYLUCcRPzm+IxcEuQ - hucbzmCwyYrsBrIniGSihthYAFFAHaJGap/D/ZjiUiUZjMOJ59863syZzD/5 - 89ee93q6+Bq4rYGxL3J6mX1rUD7fxMVZJZBS2bhEE+XgJVBZbUqEIPux1nb1 - pQRlUZKmGHGHUCpAylpexlps6yhXsjoZnE4i2NIWawX2T75h/UhXqDa6bzn0 - gl0/9HDIK61UAkA1/vve6D3fQroffTSKwO0BWkvYKWBU32il+sCF2jyBRKOB - zvKYxyRN1D58B4JRjgdrJC1IwBrLKnx4H7jV31aXc6lI6mCpQTjxbxe+c7e4 - WwauLbdPXzAl9kbskDTfkEn4+SNe+gH5KaspWj0cMpseM2MFxjSJw+XM69nV - mqGhCd1nhgVDMQCYr3LEV6MHAyftLv0Iv6yWql1eWFFmD/dIPWCdsHDm+ZPl - UmOacAa6mBz9uPDfROoTNmsbsTG9rG17o7q59ZWNEc9050xIirf5yPgT05fX - yFpYeZ985SRSFoTFELa3bEsbi5df9fldoEXqElG6DEzqDqQ1nkKUqPbE5bJV - rkiR1n5HnKdA2DjUHUFDjbIFFwLD5GDxFan239q0r6lNYJcnwvjjZJypTehP - dCPoCQ+g90AE3t7E68CNtIPGmuj5viKphMrK8mQDJFUbzA1o3bZkNSzJyBqc - QqThRqlcvnZdIiUoeRMJkjDd9tZ4wCeyx/mXuTnZZ8DUtwzUhtNvKV9zd4s5 - e5Oz9Rtg20RwpgH3ODtpxHfY+pv9mydiOunqiAh7bF3rSGuo6eSz0F8u/aqt - zxoduiJ4aqV2LWgAAnKCefSBo676X+tkEclYJLm+5O6Ya8ZCoPgjsPD75pZG - 68AtV7WuYMmPwvSwyCQrHjnBKSrCGZ3O5vECZpHvLyZTQidIHuYRXZDI8/GH - DeOYabP3L2hBW2AZdyR9PJIsjd6yEOhGWUqHBv8A1IrNACWqkGGpB6oHphHY - mHi7xYKROe4P5YD6C8t4ILRNyFY6IAQXXczhKV7hrQk4fNxpQH+r7tQ/vNtJ - jL1hVUaI+A6xKW5sipKzo4dpWC+JTTPWPVFiIoNFiC2VbZoLHqM3/XtDYuN5 - uhgOa5/ZQSGfCR9y1Gx1hI8h7F3Qrdv8drXbdClgSxlt2bl0zyCfp3xlzp2i - fVXmXkn9jPV19K88wRkU0ABP0MAyVJdQwepWXkC0LILTLe/hi0GlOdFIm2w4 - SIzsWB+eAvWznyNQTbgumM5Dm+dndO3PZZTFOsWlJK8y/R/nUZ1lx6dphTiP - cFTgUySthlzMvup7PIv31ud6hkZUsPNJS+PEhay6uWdOi9h09NalVtYpwyMl - dxk/vz3yKvRrmIjZRyTy0UEN6V8qDf/+8G7uffn65Z+7t1/6Q8KkSZxI0/3K - uaMzpZJ0buLAEzTJGbKVrrTqyYOb7AgMKKiaOBz8KNJ/0Rt89rjgdeeMGfjs - 9Ds1966deFfNujOm3PH5dslku+YTx1UfOK78vPGSmftL3rdfXMtId9vYNgvA - ZZvH4av/AAAA//8DAO/QERUSFgAA + H4sIAMXSRFcAA7RYS2/bOBC+91cYviuSHb8aKOqmu1gURbYokHYPvRSUOLbZ + SKRKUnbcX79D6i3Zjh/dgwFz5pvRcN6S/+4liQcbkIoJfj8c3XjDAfBIUMZX + 98OvX/52FsN3wRs/ypQWCcjgzWDgMxrMvIk3m0znvosHQ0NetCZcO3j+FfLp + 7tfPt3q+TbYvk7HvNrkGvWRSaYeTBII/iaS+2yAYfkzK0wcRU5C+W1MMPxJJ + SvhuwFl8P9Qyg6Fr6ZAQFgeUbAT/ngjgfwhOJYueSSrimEXrG8aXwndzmBFI + 14JDT82SvPRoWwgV031sJIFooA7RA71L4X5I8ahZAsNg7I1mjjd1xpMv4/Hd + aHZ3O//mu7WAlc9Sep58LZA/30bGWTKIqapMokw7EXpWFUqJlGQ3NNw2P6cg + LWToIL5yCKUSlCrpebTnqzLOBa1MB6eVCk1qjW2E9qNY826sC1Qd378EdMJd + PnR/0Auu0hJAV/aPvMGj2EC8GzxZhu92ALUkvGjg1Hi0YH0SUq+3oFCox2tY + LCISM70LPoDkVODFKkoNkrDCwgoeHn23+FvzUqE0iR0sNghmi+lk6rtNUvPi + GddyZ8kOidM1GQdfn9Dfe+jHpG5R6mGf2O0hMZ5hOFkULCZeR67k9AVt1L5y + rBWKvsdUVQOxHDxYOKm1dIN7XRkVWq4sJqvDPVAKWCI8mHij8WJhMFUkfVNH + jnlc8C9T5obVuYlY20ZW97xB2dm6zEpIJKZtMhKjN5+52HLjvIpWw3J/iqXD + lMoIjyCovdykVhLXu/r0BlAjTXVoUwE2dXvUEk8hZLq+cX6smUuSxaXdoRAx + ED4MTDMwUMuswZnEMDlYd1ls7G8o7XJKEXhJmbT2OIngeh2MxqYHdIh70Dsg + Er039lpwS22hsSY6ti9JrKCQaliyBhLrNeYG1GY3aCWMJWQFTibjYK11qu5c + lygFWt2EkjBuOt4KL7gluxtMHTcluwS4/p6AXgv6PRYr4W4wZ29SvnoHfMOk + 4AZwrwinoXjBrl/pr56I6WSqIyT8uTatRS2htolPgtFiMSo6+qTioSkSZ3Kt + oSRUAAkpwTz6hPO6/F/yVBaqSLLUOLk94aqJ4GvxDDxY7ejb3cx381PJyzj7 + mdkeFtpkxSszHKAymNDbyTSawyQcjebjW0LHsFxOQzonoTfCHzaMQ6KV7t/Q + gjbAE+Eo+nwgWSp+Q0KiGXkp7Zv5PVBNtrOT6EwFOR+omZWW0MREmw0WjEpR + P+QD6h8s4x6xKUI2ygEphWxj9g/wAt+YgP3HHQd0VbUH/n5tRzFNhUUZIeIH + RLa4sSkqwQ9eplp5SWSbsemJChMZGttwg9UUTaWI0Jqu33Cn8TxTDPu5r2jQ + uMoEDylyNibChxBNLaa3b7c/oqi9/dXbYpN26qZnka9ve3nOHdv4isy9cOuz + 0pdtfvkNTtj+LPDIBpiH6sQtsHDIFTtWY7dpV3b/daDgHOmhVSLs3YmaYd4/ + AMpnv7Y7VZE6YzD3ZV4fz6U9520rjVucu98Vov/jKCoT7PAgLRCn7RoF+Nh+ + VkLOXrxKP5608pb3emWDKGCn7yuVEWcu1JWfBc0i28xrk2paqwwPlNx5q/ns + wFvQ71lCrB7J1LODHNJ1Kg0+f/SevPH7z4+P779154NNk4gp2/jykWMypaC0 + PLHnCWa/6S8qbWrRjnuebBEsyC/6N+z9FNJ9x+t97DjjTeeE8ffq4Ds28i4d + dheNuRMG3OHRduJQu+TDxkWfNS78qHHNuP0tb9lXlzEuuXVYqwPgsU7h4M1/ + AAAA//8DAI3fEBYFFgAA http_version: - recorded_at: Mon, 25 Apr 2016 15:00:37 GMT -recorded_with: VCR 3.0.1 + recorded_at: Tue, 24 May 2016 22:16:37 GMT +recorded_with: VCR 3.0.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/unsuccessful_card_verification/fails.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/unsuccessful_card_verification/fails.yml index d96d247e..04d7bd37 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/unsuccessful_card_verification/fails.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/unsuccessful_card_verification/fails.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers body: encoding: UTF-8 string: | @@ -10,7 +10,7 @@ http_interactions: Card Holder - alfredo@carroll.com + grayce@ondrickanicolas.ca Card Holder @@ -21,7 +21,7 @@ http_interactions: Herndon AL US - 31456 + 90815 fake-processor-declined-visa-nonce @@ -36,9 +36,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.60.0 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -47,7 +49,7 @@ http_interactions: message: Unprocessable Entity headers: Date: - - Wed, 04 May 2016 23:01:13 GMT + - Tue, 24 May 2016 22:16:35 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -70,37 +72,37 @@ http_interactions: Cache-Control: - no-cache X-Request-Id: - - 259c91af-a8c8-408d-b7a8-5c1e74982de7 + - f48d8c29-9f78-4196-a19e-fab275f60902 X-Runtime: - - '1.130491' + - '0.599575' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 http_version: - recorded_at: Wed, 04 May 2016 23:01:12 GMT -recorded_with: VCR 3.0.1 + recorded_at: Tue, 24 May 2016 22:16:35 GMT +recorded_with: VCR 3.0.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_user_with_an_invalid_email/fails.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_user_with_an_invalid_email/fails.yml index ff7aab61..735e2c19 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_user_with_an_invalid_email/fails.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_user_with_an_invalid_email/fails.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers body: encoding: UTF-8 string: | @@ -14,18 +14,21 @@ http_interactions: Card Holder + John + Doe 10 Lovely Street Northwest Herndon AL US - 35005 + 02888-7519 fake-valid-nonce true + headers: Accept-Encoding: @@ -33,9 +36,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -44,49 +49,50 @@ http_interactions: message: Unprocessable Entity headers: Date: - - Mon, 14 Sep 2015 16:43:22 GMT + - Tue, 24 May 2016 22:16:34 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Cache-Control: - no-cache X-Request-Id: - - 90dba0b3bba5f345d64333950a864d2e + - 1751ebdf-eb23-45da-a940-6a245d74bd87 X-Runtime: - - '0.140704' - X-Frame-Options: - - SAMEORIGIN + - '0.073294' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIACr59lUAA5RUTW/bMAy991cIvitOtnXoQVE3DBt6KHbpeh4Ui06E6cOj - 5Cz+96Pd+CtJ1+wmvkdSFKlHcX9wlu0Bowl+na0Wy4yBL4I2frvOnn9843fZ - vbwRqjIcEANyhFgFH0HeMCY6KLbHwWCpqWCdKUTVZPmRKuqYggN8MS/79lzP - jnabIGiQd6uPyw8i785TUqWEZlMnOOaLjdsEm0lwyliRD/QsyEGMagvya+vE - TGTKM+P3yhrNyoBOpYXIe6extHxW29GMg12pxoFP3EHaBX36pIvNabNcDhMF - gjaJFwqvTUX0xlhL0+NKa5pVnD36jdD8lVjq+WklBE1mOu0D9QCVi69NvjQY - E/fKgfxC2UQ+AXofq3rkIVgNKPIRGX5QOzf5u64Pn8oQfm4ULorgqJAO/3cH - W3PXZR4LYf1Vp+R1nY0JAdJArZbsMezBNuypI0R+4jCbyiGB16AH8nvAtPsD - kcLOuGmgDQX919TIB0Cvg6c+9cjUDWFL6pafH0V+PM6lVfuEDW9lxZWtduqd - fH5qZXaOT+OqEJOyHS3f3y6Xt/SNJ9Dbv+pMLtwHX4As1S/gnRBfgFN5HN3G - LKFK9Kh5a2ilmbJ5GXzCmpJMkUlxZ8FCw94UwCOVSgynfeCNXWdtlplaSlS1 - ppqw2Ckq7rLfFdIZ9fKfS4lW24W1/BcAAP//AwDqfmK70wUAAA== + H4sIAMLSRFcAA5RU227bMAx971cIfleUFLtkgKJ22AXFUOyl63OhWHQsVJY8 + Ss7iv5/sxLfEXbs38RySOqRE8ptDYcge0GtnN8lqsUwI2NQpbXeb5PHXd7pO + bsQVl6WmgOiQIvjSWQ/iihDeQr459gYJdQmbRCLKOmEnKq18cAXg0Zz37biO + HewmgVMg1qsPy3ectecxKUNAva0CnPL5utg6kwgopDac9fQkqADv5Q7Et8aJ + aE+kJdrupdGKZA4LGRacdU6DNDbRdjJ9b6cISgeaSlTn9cx2pqW32pjYbyqV + it31E5mvhLIXYmOXzpVEaPQKY+W8lCgL/9JbZRp9oFYWIL7EbJyNgM7HyA65 + c0YBcjYg/Zs3nRa/q+pwmzn3tJW4SF0RhbT4vzvYmHmbeRBCuqvOybd1dlTF + D5fbubLOSvvqYKau1skHBAj9PasluXd7MDV5aAnOzhwmT3wIYBWonvzpMOR/ + wMewC26izKXxu4Za3AFa5WIJPTJ2Q9jF4Raf7zk7HaeTVdmANW2mikpT5vJa + PD40U3aJj+NK54M0LS2W1+v1mn58v/rE2Rh//Z+2n68uwAZaQMidotbZFEQm + n4G2w3gEYt45tyGLK0OsbNqfuNZ0Vh+/UsAqJhkjI3EXwVzBXqdAfZQaGRp3 + gtVmkzRZJvOXoaxU1IRpLqO4eb83DOMwgf+5mOJ6m1nNfwEAAP//AwCSs0nZ + 1wUAAA== http_version: - recorded_at: Mon, 14 Sep 2015 16:43:21 GMT -recorded_with: VCR 2.9.3 + recorded_at: Tue, 24 May 2016 22:16:34 GMT +recorded_with: VCR 3.0.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/amex/should_have_the_correct_attributes.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/amex/should_have_the_correct_attributes.yml index 40ea0d66..69ca5a13 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/amex/should_have_the_correct_attributes.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/amex/should_have_the_correct_attributes.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers body: encoding: UTF-8 string: | @@ -10,22 +10,25 @@ http_interactions: Card Holder - stella@durgan.com + jasper.hyatt@walkerstrosin.name Card Holder + John + Doe 10 Lovely Street Northwest Herndon AL US - 35005 + 58376-3251 fake-valid-amex-nonce true + headers: Accept-Encoding: @@ -33,9 +36,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -44,69 +49,70 @@ http_interactions: message: Created headers: Date: - - Mon, 14 Sep 2015 16:43:25 GMT + - Tue, 24 May 2016 22:16:41 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"1f3b77fd6907149073d92a2ce68819d0"' + - W/"3b7e00dfe22ac8996610b7b06830d8c9" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 76051b680b119a905c68af5572209374 + - 6ae837ed-b06e-4994-b33c-ebe8ac71b73f X-Runtime: - - '0.964755' - X-Frame-Options: - - SAMEORIGIN + - '0.975057' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 + cfzuFwAAAP//AwA789hjUBYAAA== http_version: - recorded_at: Mon, 14 Sep 2015 16:43:25 GMT -recorded_with: VCR 2.9.3 + recorded_at: Tue, 24 May 2016 22:16:41 GMT +recorded_with: VCR 3.0.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/decline/fails.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/decline/fails.yml index 26186702..c458b051 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/decline/fails.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/decline/fails.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers body: encoding: UTF-8 string: | @@ -10,22 +10,25 @@ http_interactions: Card Holder - zander.stroman@hagenes.com + crawford@nolan.co.uk Card Holder + John + Doe 10 Lovely Street Northwest Herndon AL US - 35005 + 47879 fake-valid-nonce true + headers: Accept-Encoding: @@ -33,9 +36,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -44,74 +49,75 @@ http_interactions: message: Created headers: Date: - - Mon, 14 Sep 2015 16:43:32 GMT + - Tue, 24 May 2016 22:16:47 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"317ba42f1ad8b879a0eed4a1571cb0e0"' + - W/"dfe956b6a23a3d4f0933ba5b9136fe4c" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 0ec1c62cc7f3b0a9949af2842daaa945 + - c1344ce6-aa3d-4dde-b013-b5708ee718d7 X-Runtime: - - '1.285652' - X-Frame-Options: - - SAMEORIGIN + - '0.943239' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIADT59lUAA7RYS2/bOBC+91cYviuybLlJA0XZoMCih26xQJMFtpeCEscx - NxKpkpRj59d3SL0oy3ZsJ3tIYM58MxrOW4pu13k2WoFUTPCbcXAxGY+Ap4Iy - /ngzfrj/07sa38YforRUWuQg4w+jUcRoPA+DaYj/Ih8Phoa8dEm49vD8kvD5 - 5uXXJ335nD+vw2nku1yDXjCptMdJDvFnImnkOwTDz0hz+iIyCjLyO4rhpyIv - CN+MOMtuxlqWMPYtHXLCsviFcJS5UFqKnPA/luQROKgLFIr8CmGwxVJwGGhY - kPWA9gyJYnqITSUQDdQjeqQ3BdyMKR41y2EcTyfB3Jt88oLwPvh4Hc6uZ9Mf - kd8JWPmyoKfJdwLV821QvAWDjKrWJMq0l6JTVa2USEk2Y8Pt8ysK0hKWZRhu - j1AqQamGXgVaySbENa3JBK+XBS61w3ZR3fZdDWijuoe/J841FwMMoFu7g8no - q1hBthl9t4zI3wJ0krDWgDlCW9Y3IfXyGRQKDXiOuSIlGdOb+AtITgXHtGwo - HUjCI9ZSfPc18uufHa8QSpPMw/qCeDafTOaR75Lci5dcy40leyQrlmQaP3xH - P++gH5KaodTdLrHZPjFeYhhZGl+Fky25hjMUtHX5wLFGKPoeU1SNxGJ0Z+Gk - 09KUbyP9tvKptbyxiKwOf08JYGnwOJwE06srg2kjGZn68czj4n+YMjdszy5i - aXtX1+ZGTTPbZrZCIjedkpEMvfnExTM3zmtpHazyp1h4TKmS8BT6YXYZrdDb - vX187XdIUyDaFIHN3gG1wVNImO4uXR075oKUWWN3IkQGhI9j0w8M1DI7cCkx - Uh6WXpkZ+x2l25xGBNYFk9YeLxdcL+NgatrAFnEHegNEovemkx7cUntoLIst - 2xckU1BLOZYsgWR6iekBndkOrYGxHEeaV8osXmpdqGvfJ0qBVheJJIybpveI - F3wmGzPz/IJscuD6Zw56KejPTDwKf4Vpe1Hwx1vgKyYFN4AbhXMzEWts+K3+ - 9omYTqZAEsKfOtN61AZqe3oYB1dXQT22w5aHpkiROdndEFqAhIJgHn0TyKt/ - NzxVJiqVrDBO7g+3dihEWjwBjylfT+c47KtTwys5+1XaNpbYZMUrM5ydMg7p - LJynlxAmQXA5nRE6hcVintBLkkwC/MOesU+01f0OXWgFPBeeok97kqXlOxIS - zahKade4H4A6sh2fRJcqrvhAzbi0BBeTrlZYMKpA/VDNqL+wjAdEV4SslAdS - CtnH7J7hNd4ZgsPHHQZsq+rP/N3aDmJchXUZIeI/SG1xY1NUgu+9TLvoktQ2 - Y9MTFSYyODuww3JFCylStGbbb7jWTCamGHZzX9GgcZuJ7wrkrEyE9yFcLWgW - feKzNe0vft2i6NKOWPIs6JVFr8q1Q8tenbFnLnxW+rylrzL/iMXPAg8sf1WI - jlwAa4e8Yb1y1pp+RQ/fAGrOgd7ZJsDOdciN8e7G3zz7tbWpjdQJA3ko8/pY - buw5bUtxbnHqaleL/o8jqEmw/QO0Rhy3Y9TgQ3tZAzl54Wr8eNS229zrlc2h - hh2/p7RGnL5Lt64WtExtH++s6mi9StxTdadt5cGed6D32T+sHsnUk4ccsu1X - Gs8+4iC6/xFOP//97/ZosJmSMmV7XzVtTLLUlJ4ndjzBrDbDHaVPrTvywJM9 - ggVFdQuHnR9Att/wBp84TnjJOTz5Ds+8Q9Pu3Dl31oQ7Yrbtn2pHzrNzPmec - 9THjzE8Zb5m07/Ji/ebyxb22C2t7ADx2qRt/+A0AAP//AwDuMKOU7hUAAA== + H4sIAM/SRFcAA7RY3W/bNhB/719h+F2Rrdi1Uyjqgg1DUGzBgLYbtpeCEs8x + F4lUScqO+9fvSH1Rku3YTvZgwLz73el431L48TlLRxuQigl+O55eTcYj4Img + jD/ejr9++dVbjj9G78KkUFpkIKN3o1HIaLS8ub4J5vN56OPB0JCXrAnXHp5/ + xHy++/H9Ri+22fZ5FoS+yzXoFZNKe5xkEP1MJA19h2D4KalP9yKlIEO/pRh+ + IrKc8N2Is/R2rGUBY9/SISMsjRJJtish6U9cpIRfJeKqeAr9kmdQ+VpwGMiu + yPOAtoVYMT3EJhKIBuoRPdK7HG7HFI+aZTCOgsn0vTeZe8HsSxB8mL7/MFv8 + E/qtgJUvcnqefCtQPt+Gw1sxSKlqTKJMewm6U1VKiZRkNzbcLr+kIC1maYqB + 9gilEpSq6WWI5bIObkWrc8DrxN+ltlgnnp/EmvcDXKHaoP4ioBfj+qH7I11x + lZYAurF/Ohn9JjaQ7kafLSP0e4BWEp41cGo8WrEehNTrLSgUGvAci0VCUqZ3 + 0T1ITgVerKG0IAmPWE3R3W+hX/1teblQmqQeVhhEs8VycRP6Lsm9eMG13Fmy + R9J8TYLo62f09x76MalrlLrbJ3Z9SIwXGE6WRMvZpCdXc4aCNmpfOdYKRd9j + qqqRWI3uLJy0WvrBfV0ZVVpeWUxWh3+gFLBEeDSbTIPl0mCaSIamjjzzuOhP + pswNm7OLWNvu1Ta6Ud3O+sxGSGSmVzKSojefuNhy47yG1sJKf4qVx5QqCE8g + ar3sUhuJ17v69AbQIk11aFMBNnUH1BpPIWa6vXF5bJkrUqS13bEQKRA+jkwz + MFDLbMGFxDB5WHdFaux3lPY5tQg850xae7xMcL2OpoHpAT3iHvQOiETvBZMO + 3FI7aKyJnu0rkiqopBxL1kBSvcbcgNZsh1bDWEYewStkGq21ztUH3ydKgVZX + sSSMm473iBfckh2OvszPyS4Drr9loNeCfkvFo/A3mLNXOX/8CHzDpOAGcKsI + p7F4xq7f6G+eiOlkqiMm/Kk1rUOtobaJz6LpcjmtOvqs4aEpUqROateEBiAh + J5hHDwJ51f+ap4pYJZLlxsndCddMhFCLJ+ARlvBs+T70y1PNKzj7XtgeFttk + xSszHKAymtHr2TxZwCyeThfBNaEBrFbzmC5IPJniDxvGIdFG9xu0oA3wTHiK + Ph1IlobvSEg0oyylfTN/AGrJdnYSXaio5AM1s9ISXEyy2WDBqBz1Qzmgfscy + HhBdEbJRHkgpZBezf4BXeGcCDh93HNBX1R34+7UdxbgKqzJCxL+Q2OLGpqgE + P3iZZs8liW3GpicqTGRwVmCH5YrmUiRoTd9vuNNMJqYY9nNf0KBxlYnucuRs + TIQPIVwtaFYgt3TFu9tfuy26tFM3PYt8edsrc+7Yxldl7oVbn5W+bPMrb3DC + 9meBRzbAMlQnboGVQ16xYzm7Tbeyh68DFedID20SYe9O5IZ5/wCon/3S7tRE + 6ozBPJR5eTzX9py3rTi3OHe/q0T/x1FUJ9jhQVohTts1KvCx/ayGnL141X48 + aeWt7/XCBlHBTt9XGiPOXKgbPwtaJLaZtya1tE4ZHii5t3kLepslxOqRTD15 + yCF9p9Loj0+Tz5O/7x+u7/966M8HmyYJU7bxlSPHZEpF6XhizxPMfjNcVLrU + qh0PPNkhWFBY9W/Y+ymk/443+NhxxpvOCePvxcF3bORdOuwuGnMnDLjDo+3E + oXbJh42LPmtc+FHjNeP2Td6yX13GuOS2YW0OgMc2haN3/wEAAP//AwA64IBX + +hUAAA== http_version: - recorded_at: Mon, 14 Sep 2015 16:43:32 GMT + recorded_at: Tue, 24 May 2016 22:16:47 GMT - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions body: encoding: UTF-8 string: | @@ -121,7 +127,7 @@ http_interactions: 2001.00 Solidus - dnx25m + ddr486 @@ -136,9 +142,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -147,74 +155,75 @@ http_interactions: message: Unprocessable Entity headers: Date: - - Mon, 14 Sep 2015 16:43:33 GMT + - Tue, 24 May 2016 22:16:48 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Cache-Control: - no-cache X-Request-Id: - - da7c49cd42b8415840fa268697dfadb6 + - ec2f14fc-cb4e-443f-9802-0b08565e90f5 X-Runtime: - - '0.737194' - X-Frame-Options: - - SAMEORIGIN + - '0.716064' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 + yGl0Ju+T2D4dL83/AwAA//8DADU7e0umFgAA http_version: - recorded_at: Mon, 14 Sep 2015 16:43:33 GMT -recorded_with: VCR 2.9.3 + recorded_at: Tue, 24 May 2016 22:16:48 GMT +recorded_with: VCR 3.0.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/purchase/succeeds.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/purchase/succeeds.yml index bbb93df2..0f5c260e 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/purchase/succeeds.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/purchase/succeeds.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers body: encoding: UTF-8 string: | @@ -10,7 +10,7 @@ http_interactions: Card Holder - sammie@harris.name + johnathan_harvey@shanahan.us Card Holder @@ -21,7 +21,7 @@ http_interactions: Herndon AL US - 38766-4319 + 15425 fake-valid-nonce @@ -36,9 +36,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.60.0 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -47,7 +49,7 @@ http_interactions: message: Created headers: Date: - - Tue, 10 May 2016 00:00:30 GMT + - Tue, 24 May 2016 22:16:45 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -68,54 +70,54 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"3db6fc93786422bd44e3d22567778988" + - W/"53c0ba45d96ded259f61364a5d502e04" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - b9f3018f-ae95-4926-9653-71ab4e4e2a9e + - 90ffc929-116f-43a3-9957-e21277315e12 X-Runtime: - - '1.455105' + - '1.365805' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAJ4kMVcAA7RY227jNhB9z1cYflck2Y5jLxRtgxZFsNgGBXa3BfqyoKRx - zEYitSTlxPn6DqkbJfmeLZAA5swZasi5HSn4+Jqlow0ISTm7G/vX3ngELOYJ - ZU93429ff3cW44/hVRAXUvEMRHg1GgU0Cf3ZbDmfLBeBiwstQ128Jkw5uH6L - 2M327cdS3b5kL6+zSeDaWo1eUSGVw0gG4a9EJIFrCbQ+JfXqgacJiMBtJVof - 8ywnbDtiNL0bK1HA2DVyyAhNQ0myjMIvayIEldfaKHBLjcbka85gYLkirwPZ - C0SSqiE2FkAUJA5RI7XN4W6c4FLRDMbhxPPnjnfj+N5Xz/uAf5PlP4HbGhj7 - Ik/Os28NyuebYDgrCmkiG5cSqpwYL1NWm+LpyXastV19KUFZRNMUw+yQJBEg - ZS0vA5xP6tBWsjoDnE70bWmLtaL5ia9ZP7wVqg3pbxx6Ea4fujvOlVYqAaAa - /31v9JlvIN2OvhhF4PYArSW8KmCJvtFK9ciFWr+ARKOBzvKYxySlahs+gGAJ - x4M1khYk4AlrKbz/HLjVz1aXc6lI6mB9QThd3M7nzmzqLwPXltunL5gSWyN2 - SJqvyST89gUvfYf8kNUUre53mU33mbECY0rjcDHzena1ZmhoQveNYcEkGADM - Vzniq9G9gZN2l36E31dL1S7vrCizh7unHrBOWDjz/MlioTFNOANdTI5+XPgX - lfqEzdpGrE0Da3vdqO5ofWVjxDPdLilJ8TafGX9h+vIaWQsr75OvHCplQVgM - YXvLtrSxeP9Vn94FWqQuEaXLwKTuQFrjE4ioak9cLlvlihRp7XfEeQqEjUPd - ETTUKFtwITBMDhZfkWr/rU37mtoEXnMqjD9Oxplah/5EN4KecAd6C0Tg7U28 - DtxIO2isiZ7vK5JKqKwsT9ZAUrXG3IDWbUtWw2hGnsApRBqulcrlB9clUoKS - 15EglOm294QHfCHba0wdNyfbDJj6noFa8+R7yp+4u8Gcvc7Z00dgGyo404A7 - SVgS8Vds/c3+zRMxnXR1RIQ9t651pDXUdPJZ6C8WftXWZ40OXRE8tVK7FjQA - ATnBPHrkqKt+1zpZRDIWNNeX3B1zzVgIFH8GFs7jeC4xhuWq1hWM/ihMD4tM - suKRKU5REc6S6ewmvoVZ5Pu3kylJJrBa3UTJLYk8H/+xYewzbfb+CS1oAyzj - jkye9yRLo7csBLpRltKuwT8AtWIzQIkqZFjqIdED0whsTLzZYMHIHPeHckD9 - gWU8ENomZCMdEIKLLmb3FK/w1gQcPu4woL9Vd+rv3u0gxt6wKiNE/AuxKW5s - ipKzvYdpqC6JTTPWPVFiIoPFgi2VbZoLHqM3/XtDYuN5uhh2a4/soJDPhPc5 - ajY6wvsQ9i7oVrJ8my+nXQrYUkZbdirdM8jjlK/MuUO0r8rcC6mfsb6M/pUn - OIECGuABGliG6hwqWN3KO4iWRXC65T18Mag0Bxppkw07iZEd691ToH72MQLV - hOuM6Ty0OT6ja3/OoyzWKc4leZXp/ziP6izbP00rxGmEowIfImk15Gz2Vd/j - Sby3PtcRGlHBTictjRNnsurmnnlSxKajty61sk4Z7im58/j5Ys+r0M9hImYf - QeWzgxrSv9Qk/PPTo+d9eriZ/v34pT8kTJrEVJruV84dnSmVpHMTO56gSc6Q - rXSlVU8e3GRHYEBB1cRh50eR/ove4LPHGa87J8zAo9Pv0Ny7dOJdNOtOmHL7 - 59s5k+2STxwXfeC48PPGe2buT3nffnctI91tY9ssAJdtHodX/wEAAP//AwAe - eZgnBxYAAA== + H4sIAM3SRFcAA7RYS2/bOBC+91cYviuSHLl2C0XdYBeLotstij720EtBSeOY + jUSqJGXH/fUdUi9Ksh3byR4MmDPfjIbzlsI3D3k22YCQlLObqX/lTSfAEp5S + dncz/frlb2c5fRO9CJNSKp6DiF5MJiFNI38RLObey2Xo4kHTkJesCVMOnn/F + bL779fOVWmzz7UMwC12bq9ErKqRyGMkh+pOINHQtguZnpDm95VkKInQ7iuYn + PC8I200YzW6mSpQwdQ0dckKz6AdfM6Lwed/XRGxg94fE/wR/V6UM3Qqj0cWa + MxjpWJGHEW0LsaRqjE0EEAWpQ9RE7Qq4maZ4VDSHaTTz/JeON3dmwZfZ7LX/ + 8nUQfAvdTsDIl0V6nnwnUD3fhMVZUchS2ZqUUuUk6FZZKyVCkN1Uc/v8ioK0 + mGYZBtwhaSpAyoZehVqxJsg1rckFp5cHNrXDWnF9h1EZBrpGdcH9i8Mg1s1D + 90e85kolAFRrv+9N3vMNZLvJZ8MI3QGgk4QHBSzVHq1ZH7hQ6y1IFBrxLIt5 + QjKqdtFbECzleLGW0oEE3GFVRbfvQ7f+2/EKLhXJHKw0iPx5MJuHrk2yL14y + JXaG7JCsWJNZ9PUz+nsP/ZjUNUrd7hO7PiTGSgwnTaJl4A3kGs5Y0ETtK8Na + SdH3mKpywleTWwMnnZZhcJ9WRrWWJxaT0eEeKAUsERYFnj9bLjWmjWSo68jR + j4v+o1LfsD3biLXpYl3DmzRtbchshXiueyYlGXrznvEt085raR2s8idfOVTK + krAEos7LNrWVeLqrT28AHVJXh9IVYFJ3RG3wKcRUdTeujh1zRcqssTvmPAPC + ppFuBhpqmB24FBgmB+uuzLT9ltIhpxGBh4IKY4+Tc6bWkT/TPWBA3IPeARHo + vZnXgxtqD401MbB9RTIJtZRlyRpIptaYG9CZbdEaGM3JHTilyKK1UoV87bpE + SlDyKhaEMt3x7vCCW7K7wtRxC7LLganvOag1T79n/I67G8zZq4LdvQG2oYIz + DbiRhKUxf8Cu3+pvn4jppKsjJuy+M61HbaCmiQeRv1z6dUcPWh6aInhmpXZD + aAECCoJ59IEjr/7f8GQZy0TQQju5P+HaiRAqfg8siq+3uxSLrDo1vJLRn6Xp + YbFJVrwyxQEqoiC9DubJAoLY9xeza5LOYLWax+mCxJ6PP2wYh0Rb3c/QgjbA + cu7I9P5AsrR8S0KgGVUp7Zv5I1BHNrOTqFJGFR9SPSsNwcYkmw0WjCxQP1QD + 6l8s4xHRFiEb6YAQXPQx+wd4jbcm4PhxxwFDVf2Bv1/bUYytsC4jRPyAxBQ3 + NkXJ2cHLtPsuSUwz1j1RYiKDtQpbLFu0EDxBa4Z+w53G83Qx7Oc+okHhKhPd + FsjZ6AgfQtha0KxgoeTP6/72122LNu3UTc8gH9/2qpw7tvHVmXvh1mekL9v8 + qhucsP0Z4JENsArViVtg7ZAn7FjWbtOv7PHrQM050kPbRNi7E9lh3j8Ammc/ + tju1kTpjMI9lHh/PjT3nbSvWLc7d72rR/3EUNQl2eJDWiNN2jRp8bD9rIGcv + Xo0fT1p5m3s9skHUsNP3ldaIMxfq1s88LRPTzDuTOlqvDA+U3PO8BT3PEmL0 + CCrvHeSQoVPT6OM777P36sPHb5/++TScDyZNEipN46tGjs6UmtLzxJ4n6P1m + vKj0qXU7HnmyRzCgsO7fsPdTyPAdb/Sx44w3nRPG36OD79jIu3TYXTTmThhw + h0fbiUPtkg8bF33WuPCjxlPG7bO8ZT+5jHHJ7cLaHgCPXQpHL34DAAD//wMA + Za7g9wIWAAA= http_version: - recorded_at: Tue, 10 May 2016 00:00:30 GMT + recorded_at: Tue, 24 May 2016 22:16:45 GMT - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions body: encoding: UTF-8 string: | @@ -126,8 +128,13 @@ http_interactions: 3.00 Solidus - 6cc6s2 - 14496298 + b3wydr + + + + Card + Holder + sale headers: @@ -136,9 +143,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.60.0 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -147,7 +156,7 @@ http_interactions: message: Created headers: Date: - - Tue, 10 May 2016 00:00:31 GMT + - Tue, 24 May 2016 22:16:46 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -168,54 +177,54 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"dee2462d6f76fab11fa60b1cb5d94878" + - W/"9da4b1a240810816eeacb090bf24fa74" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - d33d64bd-fd0d-4407-85b3-6d7073b9e438 + - 2312f143-e8b0-456f-b6c3-27d8efeb7422 X-Runtime: - - '1.217556' + - '0.813403' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 - hmQnxicx6kzpm38AAAD//wMATl5SWGUUAAA= + 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 + BgzJToxPYtSZklf/AgAA//8DAHikfMFqFAAA http_version: - recorded_at: Tue, 10 May 2016 00:00:31 GMT -recorded_with: VCR 3.0.1 + recorded_at: Tue, 24 May 2016 22:16:46 GMT +recorded_with: VCR 3.0.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/successful/succeeds.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/successful/succeeds.yml index 847dda7c..f99f815c 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/successful/succeeds.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/successful/succeeds.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers body: encoding: UTF-8 string: | @@ -10,22 +10,25 @@ http_interactions: Card Holder - angel@thiel.com + kirstin@connoga.com Card Holder + John + Doe 10 Lovely Street Northwest Herndon AL US - 35005 + 11296-9211 fake-valid-nonce true + headers: Accept-Encoding: @@ -33,9 +36,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -44,74 +49,75 @@ http_interactions: message: Created headers: Date: - - Mon, 14 Sep 2015 16:43:27 GMT + - Tue, 24 May 2016 22:16:42 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"556e2043a1b98bfa7161f66f718d5411"' + - W/"ca3ada17c4f3ed61a224b86faf32c319" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 9c8530c614bc11a08591d8974fb585d1 + - 6ed3e9e4-dcf4-4075-986b-e6535fc07ce6 X-Runtime: - - '0.812977' - X-Frame-Options: - - SAMEORIGIN + - '0.983401' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 + J9+bVAgWAAA= http_version: - recorded_at: Mon, 14 Sep 2015 16:43:26 GMT + recorded_at: Tue, 24 May 2016 22:16:42 GMT - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions body: encoding: UTF-8 string: | @@ -121,7 +127,7 @@ http_interactions: 50.00 Solidus - 2wyc2r + 85bfd6 @@ -136,9 +142,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -147,13 +155,11 @@ http_interactions: message: Created headers: Date: - - Mon, 14 Sep 2015 16:43:29 GMT + - Tue, 24 May 2016 22:16:43 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close X-Frame-Options: - SAMEORIGIN - SAMEORIGIN @@ -161,13 +167,8 @@ http_interactions: - 1; mode=block X-Content-Type-Options: - nosniff - X-Ua-Compatible: - - chrome=1 X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: @@ -175,56 +176,58 @@ http_interactions: Content-Encoding: - gzip Etag: - - '"1e1597288f83f6e3acb0862a501007d4"' + - W/"fa4deaf6782fef0e2d4c3e4675665537" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - c9abaed6-beea-40e8-bbf7-07aebc52b1f8 + - a917887b-5bc7-42a3-92ca-04090816e171 X-Runtime: - - '2.213001' + - '0.729829' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 - AwCSRrS/6BIAAA== + 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 http_version: - recorded_at: Mon, 14 Sep 2015 16:43:29 GMT + recorded_at: Tue, 24 May 2016 22:16:43 GMT - request: method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/jyg9qp/submit_for_settlement + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/k5hc7c/submit_for_settlement body: encoding: UTF-8 string: | @@ -238,9 +241,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -249,75 +254,75 @@ http_interactions: message: OK headers: Date: - - Mon, 14 Sep 2015 16:43:30 GMT + - Tue, 24 May 2016 22:16:44 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"22d5c42dc42872616376654a27ca47d2"' + - W/"fa38bef629508fac65d0b5064064a4a6" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - cb0033a72004cda9f3f764e654ff0a5d + - 48840e48-2206-4574-aa25-4c44406044a8 X-Runtime: - - '0.273001' - X-Frame-Options: - - SAMEORIGIN + - '0.283272' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIADL59lUAA8xY227cNhB9z1cs9l2W9uY4gazUaFGkRRogSNIAeTEocXbF - WCIVklrv9us7FKnbinJcFAVqwMBq5nDEGc7lUPGbU1ksjiAVE/x2ubqKlgvg - maCMH26Xnz/9Gtws3yQvYi0JVyTTiEpeLBYxo8m38+HV9yoO8aeRKE10rRJV - pyXTGuj9Xsh7BVoXUALXcegABqvPFSSKFBCHzU8jy2op8c3ngCkR4AYg+fzx - lzicig2YlKLmOtlFV1EUh+7JKEqQWU64DkiWGWGAu1OVBHyTT2WWCElB4sOC - s+J2qWUNy9DuSAJBRwKiF2aXt0uKj5qVsEzW0WoXRK+C1fbT6vr1dvN6ffMV - 99otaNbXFX32+k2E6/sFLiJKC9y1ebAh313j32a7aYOO0j2TSgeclJD8TCSN - w4HAIgrSPr8VBboah73EIjJRVoSfLwOAGigJKxLCD1D8pHMGxRVi49CKLeQR - UsU0eBZXueA++Z6cJrEOh87GKSsKTMDe8eOj12WP8c43j27eT6UxRTAzKJWg - VLKKFu/EEYrz4mOjMMk7ArjonDRwag7Mid8LqfNHULhgonPbExkpmD4nb0Fy - KjgeRiuxAAkHU2N37+LQ/XTBFFg/ha2AzS6KdnE4FLUOYl7Lsz3bzxyPhaIH - mFNqIfaLOwwvywjGeggbrzTGAlJUOVlj/fXQoXxuxQZX3PmWbHxLeN1sJ7nZ - RhdrWk2TF4NUwNjsa059pdpplCs1IiU5j5R4FIMm5jPSN6sLpM8oqXUuJPvr - H5lNic5yLyZnVTXMeF/Z/Ndp76v/iyz2vdnlr0dlE9jXGfrM9e63T88n1IOU - fBZq8yOUy7tpbxqejuvKwR6bIVUuF44qACmFDDBGleAKvK41uIHrY3TyBw6y - JwGtifGp+a08iWncOB4vpL9hGU6EBnrABvJIzqj5BjbLcc6p6cHGlRQZvg3j - 0FYHaeCNpffbD1/e/o5d6ynQ2Mp4K6vIzPo57cxKjRmc3FWoOQL1rm4QTWgp - ZWYnGPwpbOLrUbDMHNAeDx5XYO6kIKcRqQ3nwLdYkjGD0uQUWA7jVcEJyqrl - EKkQBRC+TPakUIY/dYCWs6AXQYZUwKW4Fg/Ak/XjOVvj6LdPVpMynmyj1frm - xrRZPuwk22R1c7NyTGHbFgsaDRq+9idTZox0z22zqJi0h1kKrvNktTZz8EI4 - wZ6BSCRE62gEbqTuvY4aBKbVNAy0mUwTab/LvCE6PStatMznUunabUkOENSy - SHKtK/U6DInCrq2uUkkYN5XkSsCwn7AiZ9PM70vA9KX3hTiI8IgBuar44Q3w - I5OCG8CtIpym4oTMpbPv2p+EiiCdeS9MRtrfVpMDKXSOuzTj+4GLRyQIA5kF - UUiZ7vX20alqiSeJaXmoC0MlB6hLTTcbDC9mpOihA5nbLzlLUQwQrcCFT6ka - uyNON/7QY0bScbcV+8BoCc9gTBmGijZUgtZZw9X7t/cyC6o5+16Dqy4UY/AZ - 9meZbOlmu8tewjZdrV6uN4SuYb/fpfQlSaMV/iPlnltqLR+BlyJQ9GGm+jq9 - I7Hj6nN3oiBnmKryPGIR3QRuEICG3BmaksU7AirK6hn3jld4b+jwnQV31+pJ - yvD61SDmblA2oAojQEvD+3GU2OtTI+t2OKA8SmCTg4RUDHcylVs/w6mj/9r3 - 5s406/tzLqL/i0h0EpcmdnAUxE8m61RlklWzZHOg79p8w6CDCsmNoAHyucAE - 1cOGLpC4Lam9WNzyxXvM9AxwUHqYMmWqqW+vDqwV0RbcDOebu0piT53ubWwU - Waj5hoB+zdRwp7cDNCecQ5F8FAWjtcKadgJL5eXRjP09wNzANu8Wj4E90okW - Y5HWUtnbAAWN1+j2ZjhW+Q9ocJXwv36MmXw7eSYcTsZpHFnSvw1zncJ0RQLs - M1hnmeemgMcy47vxvKrNHXWaH27WBowjoa3t1cwQDtto77Pmi8ccaEwJB46O - meOQFc6Cfmyr4ZE/stWRTcnUgzll0n/j2Fwjwd1++HD96cvXwdcOChlTzScB - y2JNfjtJE9aRpVjn2KICrF2T1IAh2YvxSYw6U/LibwAAAP//AwBE/2HNABQA - AA== + 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 + ISR7MT6JUWdKXv0DAAD//wMADYt63mkUAAA= http_version: - recorded_at: Mon, 14 Sep 2015 16:43:30 GMT -recorded_with: VCR 2.9.3 + recorded_at: Tue, 24 May 2016 22:16:43 GMT +recorded_with: VCR 3.0.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/visa/should_have_the_correct_attributes.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/visa/should_have_the_correct_attributes.yml index f7ec4602..7ab83f2d 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/visa/should_have_the_correct_attributes.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/visa/should_have_the_correct_attributes.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers body: encoding: UTF-8 string: | @@ -10,22 +10,25 @@ http_interactions: Card Holder - viva_schinner@brekkejohnston.name + orrin@heaney.name Card Holder + John + Doe 10 Lovely Street Northwest Herndon AL US - 35005 + 30534 fake-valid-nonce true + headers: Accept-Encoding: @@ -33,9 +36,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -44,70 +49,69 @@ http_interactions: message: Created headers: Date: - - Mon, 14 Sep 2015 16:43:23 GMT + - Tue, 24 May 2016 22:16:39 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"4b4d59072cfb46704baec852c7963817"' + - W/"07f4d7a673d8ce3bfde7d21db3a72062" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 7eaf0b90325b715b360846d060a11725 + - b82688fc-2b5c-478c-b8e6-595585a5cd85 X-Runtime: - - '0.770596' - X-Frame-Options: - - SAMEORIGIN + - '1.000683' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIACv59lUAA7RYW2/qOBB+769AvKchQAut0nSrlVZH2rOVVj3dh32pnGQA - l8TOsR0u59fv2Lk5BCjQ7gMSnvlmMp574j9u0qS3AiEpZw9973rQ7wGLeEzZ - /KH/+uMPZ9p/DK78KJeKpyCCq17Pp3EwHniTu8md57t40DTkRQvClIPnXyG7 - 2f76eacm63S9GQ991+Zq9IwKqRxGUgh+JyL2XYug+QmpTt94EoPw3Yai+RFP - M8K2PUaTh74SOfRdQ4eU0CRY0RV5k9GCMgbit1DAcgnvfMHwCuxa6/DdAqhF - sgVn0FE0I5sObQ2hpKqLjQQQBbFDVE9tM3jox3hUNIV+MBx4N87gzvHGP7zb - +/Hofjj613cbASOfZ/F58o1A8XwTG2dGIYllbVJMlROhb2WplAhBtn3NbfML - CtJCmiQYdYfEsQApK3oR73lURbqkVQnhtJLBpjbYJri7visBdXAP8A+Eu+RK - JQBUbbc36H3nK0i2vRfD8N0dQCMJGwUs1p4sWc9cqMUaJAp1eJa5PCIJVdvg - GwgWc4bZWVEakIA5llTw9N13y78NL+NSkcTBMoNgdDMY3PiuTbIvnjMltobs - kCRbkGHw+oJ+3kM/JjVCqad9YqNDYizHMNIomI4HO3IVpytoyvOVYY3E6HtM - Udnjs96TgZNGS1XFlfTnyqfU8skiMjrcAyWApcF0kg+nU42pI+nr+nH044J/ - qNQ3rM82YmFaWNPtelVP22XWQjzVDZOSBL25ZHzNtPNqWgMr/MlnDpUyJyyC - dphtRi30eW+fXvsNUheI0kVgsrdDrfAxhFQ1ly6ODXNG8qSyO+Q8AcL6ge4H - GmqYDTgXGCkHSy9PtP2W0l1OJQKbjApjj5NyphaBN9RtYIe4B70FItB7w0EL - bqgtNJbFju0zkkgopSxLFkAStcD0gMZsi1bBaErm4OQiCRZKZfLedYmUoOR1 - KAhluunN8YJrsr3G7HEzsk2BqbcU1ILHbwmfc3eFaXudsfkjsBUVnGnAgyQs - DvkGG36tv34ippMukJCwZWNai1pBTU8fB9506pXTe1zz0BTBEyu7K0INEJAR - zKNnjrzyf8WTeSgjQTPt5PZwq4eCr/gSWDAdTsUc66w4Vbyc0Z+5aWOhSVa8 - MsXZKYJxPBrfRBMYh543GY5IPITZ7CaMJyQcePjDnnFItNb9BV1oBSzljoyX - B5Kl5lsSAs0oSmnfuO+AGrIZn0TlMij4EOtxaQg2JlqtsGBkhvqhmFF/YRl3 - iLYIWUkHhOCijdk/w0u8NQS7jzsO2FXVnvn7tR3F2ArLMkLEO0SmuLEpSs4O - Xqbed0lkmrHuiRITGaxV2GLZopngEVqz6zdcawYDXQz7uR9oULjNBE8ZclY6 - wocQthY063Y6icbv7cWvWRRt2glLngF9sOgVuXZs2Ssz9sKFz0hftvQV5p+w - +BngkeWvCNGJC2DpkE+sV9Za067o7htAyTnSO+sE2LsO2THe3/irZ3+0NtWR - OmMgd2U+HsuVPedtKdYtzl3tStH/cQRVCXZ4gJaI03aMEnxsL6sgZy9clR9P - 2nare32wOZSw0/eU2ojzd+na1TzOI9PHG6saWqsSD1TdeVv58MA70NfsH0aP - oHLpIIfs+jUORrc4iP6eTKcvfz7vjgaTKRGVpvcV00YnS0lpeWLPE/Rq091R - 2tSyI3c82SIYkF+2cNj7AWT3Da/zieOMl5zjk+/4zDs27S6dcxdNuBNm2+Gp - duI8u+RzxkUfMy78lPGZSfslL9afLl/ca5uw1gfAY5O6wdV/AAAA//8DANJo - rtr1FQAA + H4sIAMfSRFcAA7RYS2/bOBC+51cYviuS/GicQlE3u4tFUHSLBZLuYS8FJY1j + NhKpkpRj59d3SL0oyXZsJ3swYM58MxrOWwo+bbJ0tAYhKWc3Y//SG4+AxTyh + 7PFm/O3hL2cx/hReBHEhFc9AhBejUUCT0J97/rW/mAcuHjQNefGKMOXg+SVi + 8+3Lz2t19Zw9b2aTwLW5Gr2kQiqHkQzCP4hIAtciaH5K6tMdTxMQgdtSND/m + WU7YdsRoejNWooCxa+iQEZqGXAjKflsBYbC91DKBWzI0JF9xBgPBJdkMaM8Q + SaqG2FgAUZA4RI3UNoebcYJHRTMYhxPP/+B4c2cye5hMPvofPk6v/wvcVsDI + F3lymnwrUD7fxMJZUkgT2ZiUUOXE6EtZKSVCkO1Yc7v8koK0iKYpRtkhSSJA + yppexnc5qyNb0eoEcDrBt6kt1grmZ75i/ehWqDaif3LoBbh+6O4wV1ypBIBq + 7Pe90Re+hnQ7ujeMwO0BWknYKGCJ9mjF+sqFWj2DRKEBz7KYxySlahvegWAJ + x4s1lBYk4BFLKbz9ErjV35aXc6lI6mB5QTj15lN0sk2yL14wJbaG7JA0X5FJ + +O0e/b2DfkhqilK3u8Sm+8RYgeGkcbiYeT25mjMUNFH7xrBWEvQ9pqoc8eXo + 1sBJq6Uf3LeVUaXljcVkdLh7SgFLhIUzz58sFhrTRDLQdeTox4X/Uqlv2Jxt + xMq0rrbLjepe1mc2QjzTjZKSFL35xPgz085raC2s9CdfOlTKgrAYwtbLNrWR + eLurj28ALVJXh9IVYFJ3QK3xCURUtTcujy1zSYq0tjviPMW2Pg51M9BQw2zB + hcAwOVh3Rartt5T2ObUIbHIqjD1Oxplahf5E94AecQd6C0Sg9yZeB26oHTTW + RM/2JUklVFKWJTivUrXC3IDWbItWw2hGHsEpRBqulMrlR9clUoKSl5EglOmO + 94gXfCbbS0wdNyfbDJj6noFa8eR7yh+5u8acvczZ4ydgayo404AbSVgS8Q12 + /UZ/80RMJ10dEWFPrWkdag01TXwW+ouFX3X0WcNDUwRPrdSuCQ1AQE4wj75y + 5FX/a54sIhkLmmsndydcMxECxZ+AhcmLFJsscMtTzSsY/VmYHhaZZMUrUxyg + Ipwl09k8voJZ5PtXkylJJrBczqPkikSejz9sGPtEG93v0ILWwDLuyORpT7I0 + fEtCoBllKe2a+QNQSzazk6hChiUfEj0rDcHGxOs1FozMUT+UA+pvLOMB0RYh + a+mAEFx0MbsHeIW3JuDwcYcBfVXdgb9b20GMrbAqI0T8gNgUNzZFydneyzRL + LolNM9Y9UWIig7X/WixbNBc8Rmv6fsOdxvN0MezmvqJB4SoT3ubIWesI70PY + WtCsyY9p9DTtbn/ttmjTjt30DPL1ba/MuUMbX5W5Z259Rvq8za+8wRHbnwEe + 2ADLUB25BVYOecOOZe023coevg5UnAM9tEmEnTuRHebdA6B+9mu7UxOpEwbz + UOb18Vzbc9q2Yt3i1P2uEv0fR1GdYPsHaYU4bteowIf2sxpy8uJV+/Golbe+ + 1ysbRAU7fl9pjDhxoW78zJMiNs28NamldcpwT8m9z1vQ+ywhRo+g8slBDuk7 + NQn/+ezde7/7D3fXH/z+fDBpElNpGl85cnSmVJSOJ3Y8Qe83w0WlS63a8cCT + HYIBBVX/hp2fQvrveIOPHSe86Rwx/l4dfIdG3rnD7qwxd8SA2z/ajhxq53zY + OOuzxpkfNd4ybt/lLfvNZYxLbhvW5gB4bFM4vPgFAAD//wMAAVVNkvcVAAA= http_version: - recorded_at: Mon, 14 Sep 2015 16:43:22 GMT -recorded_with: VCR 2.9.3 + recorded_at: Tue, 24 May 2016 22:16:39 GMT +recorded_with: VCR 3.0.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_authorized_payment/is_voidable.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_authorized_payment/is_voidable.yml index a2b631ab..5f67a4c8 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_authorized_payment/is_voidable.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_authorized_payment/is_voidable.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers body: encoding: UTF-8 string: | @@ -10,7 +10,7 @@ http_interactions: Card Holder - theresa_walter@bernier.biz + eudora_lakin@binsbode.co.uk Card Holder @@ -21,7 +21,7 @@ http_interactions: Herndon AL US - 25443-0660 + 25475-4419 fake-valid-nonce @@ -36,9 +36,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.60.0 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -47,7 +49,7 @@ http_interactions: message: Created headers: Date: - - Tue, 10 May 2016 01:04:46 GMT + - Tue, 24 May 2016 22:16:51 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -68,54 +70,54 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"8eab05abc433bab693cf97df294b8263" + - W/"ded80a15e388f9b9461adc6364c07d54" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - d31f4ff8-d744-43da-8e94-dba52a58a2cd + - 0546bbc0-0e46-4993-bf7a-e9f0d3c055f9 X-Runtime: - - '0.842043' + - '0.958715' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAK4zMVcAA7RYWY/bNhB+z68w/K6V5PWxDbTaLlIUQZoEAZK0QF8WlDS2 - WEukQlI+8uszpG7J9tre7YMBc+ab0XBuyXvYpcloA0JSzu7H7o0zHgELeUTZ - 6n78/duf1t34wX/jhblUPAXhvxmNPBr5M9e9nU9nC8/Gg6YhL4wJUxaefwZs - tv/54ze12Kbb3XTi2W2uRi+pkMpiJAX/HRGRZ7cImp+Q6vSeJxEIz24omh/y - NCNsP2I0uR8rkcPYNnRICU18FYMASZ62JFEgfg9AMAriJqA/PbtAaGwWcwYD - DUuyG9C2EEiqhthQAFEQWUSN1D6D+3GER0VTGPsTx51bzsxynW+O+9aZvp3O - //XsRsDI51l0mXwjUDzfBMVaUkgiWZsUUWWF6FRZKiVCkP1Yc7v8goK0gCYJ - htsiUYRukxW9CPR6UoW4pFWZYHWyoE1tsK2ofuAx64e5RDWh/YNDL9LVQw/H - u+RKJQBUbb/rjD7yDST70VfD8OweoJGEnQIWaY+WrM9cqHgLEoUGvJbFPCQJ - VXv/PaZWxPFiNaUBCVhhTfmPHz27/NvwMi4VSSysM/Ans+n01nLmc8ez2/T2 - 7XOmxN6QLZJkMZn437+i0w/QT0ndotTjIbHbY2Isx5jS0L+bOj25ijMUNKH7 - zrBgIgwA5qsc8eXo0cBJo6Uf4ZfVUqnlhRVldNhH6gHrhPlTx53c3WlMHU5P - F5OlH+f/TaW+YX1uI2LTyJqeN6o6W59ZC/FUt01KEvTmmvEt086raQ2s8Cdf - WlTKnLAQ/MbLbWot8XJXn98FGqQuEaXLwKTugFrhIwioam5cHBvmkuRJZXfA - eQKEjX3dETTUMBtwLjBMFhZfnmj7W0r7nEoEdhkVxh4r5UzFvjvRjaBHPIDe - AxHovYnTgRtqB4010bN9SRIJpVTLkhhweMWYG9CY3aJVMJqSFVi5SPxYqUy+ - tW0iJSh5EwhCmW57K7zgluxvMHXsjOxTYOopBRXz6CnhK25vMGdvMrZ6ALah - gjMNuJeERQHfYeuv9ddPxHTS1REQtm5M61ArqOnkU9+9u3PLtj6teWiK4Ekr - tStCDRCQEcyjzxx55f+KJ/NAhoJm2sndMVePBU/xNTA/nqe7HcawOFW8nNEf - uelhgUlWvDLFKSr8aXQ7nYULmAauu5jckmgCy+UsiBYkcFz8YcM4JlrrfoUW - tAGWcktG6yPJUvNbEgLNKErp0OAfgBqyGaBE5dIv+BDpgWkIbUy42WDByAz1 - QzGgPmEZD4htEbKRFgjBRRdzeIqX+NYEHD7uNKCvqjv1D2s7iWkrLMsIEf9B - aIobm6Lk7Ohl6pWXhKYZ654oMZGhtQ23WG3RTPAQren7DRcbR+8IR7jPaFC4 - z/iPGXI2OsLHEG0taNZitQ7msrsCNitjm3buumeQz698Rc6dWvvKzL1y9TPS - 161/xQ3OWAEN8MQaWITqklWw9MoLFq3WgtMt7+GLQck50UjrbDi4GLVjfXgK - VM9+boGqw3XBdB7KPD+jK3suW1lat7h0yStF/8d5VGXZ8WlaIs5bOErwqSWt - gly8fVV+PGvvre71zBpRws5fWmojLtyqaz/zKA9NR29MamidMjxScq/zKvQ6 - m4jRI6hcW8ghfadG/pcPn985/3z6y/3wZdEfEiZNQipN9yvmjs6UktLxxIEn - 6CVnuK10qWVPHniyQzAgr2zicPCjSP9Fb/DZ44LXnTNm4LPT79Tcu3biXTXr - zphyx+fbJZPtmk8cV33guPLzxktm7qu8b7+4lnHdbWJbHwCPTR77b34BAAD/ - /wMACmq2+A8WAAA= + H4sIANPSRFcAA7RY3Y/aOBB/71+BeM8mYcMurbLpra46VVWvqtT2Hu6lcuIB + fCR2ajuw9K/v2PlOgAW294CEZ34zGc93Er59ytLJFqRigj9M/RtvOgGeCMr4 + 6mH67etfzmL6NnoVJoXSIgMZvZpMQkajxd2dtwh8L3TxYGjIS9aEawfPP2M+ + 3//88Vrf77LdUzAL3S7XoJdMKu1wkkH0J5E0dDsEw09JfXovUgoydFuK4Sci + ywnfTzhLH6ZaFjB1LR0ywtIICiok+Z6SDeN/xIyrWFC4ScRNsQndEmLA+Vpw + GKlYkqcRbQexYnqMTSQQDdQheqL3OTxMKR41y2AazTz/zvHmziz4Opu98e/e + zL1/Q7cVsPJFTs+X91G+FSifb6PiLBmkVDUmUaadBL2qKqVESrKfGm6fX1KQ + FrM0xXg7hFIJStX0MtKbVR3jilangtNLgy61xXbC+kGs+TDOFaqN7TsBg1DX + Dz0c8IqrtATQjf2+N/kotpDuJ18sI3QHgFYSnjRwajxasT4Jqdc7UCg04nUs + FglJmd5H70FyKvBiDaUFSVhhUUWPH0O3+tvycqE0SR0sNIhm8+B+7gSB/zp0 + u/Tu7Quu5d6SHZLmazKLvn1Bpx+gn5K6RanHQ2K3x8R4gTFlSbQIvIFczRkL + 2tB941gwFAOA+aomYjl5tHDSahlG+GW1VGm5qKK8UUVZHe6ResA64VHg+bPF + wmCacIammBzzuOgfpswNm3MXsbadrG16k7q1DZmNkMhM32QkRW9uuNhx47yG + 1sJKf4qlw5QqCE8gar3cpTYSl7jaP+jq87tAizQlok0Z2NQdUWs8hZjp9sbl + sWUuSZHWdsdCpED4NDIdwUAtswUXEsPkYPEVqbG/o3TIqUXgKWfS2uNkgut1 + 5M9MIxgQD6D3QCR6b+b14JbaQ2NNDGxfklRBJdWxZA0k1WvMDWjN7tBqGMvI + CpxCptFa61y9cV2iFGh1E0vCuGl7K7zgjuxx/mVuTvYZcP09A70W9HsqVsLd + Ys7e5Hz1FviWScEN4EERTmPxhK2/0d88EdPJVEdM+KY1rUetobaTB5G/WPhV + Ww8aHpoiRdpJ7ZrQACTkBPPok0Be9b/mqSJWiWS5cXJ/zDVjIdRiAzxax9lO + YQzLU80rOPtR2B4W22TFKzOcojIK6G0wT+4hiH3/fnZL6AyWy3lM70ns+fjD + hnFMtNH9sqFudWyBZ8JRdHMkWRp+R0KiGWUpHRr8I1BLtgOU6EJFJR+oGZiW + 0MUk2y0WjMpRP5QD6m8s4xGxK0K2ygEphexjDk/xCt+ZgOPHnQYMVfWn/mFt + JzFdhVUZIeI/SGxxY1NUgh+9TLPzksQ2Y9MTFSYydNbhDqsrmkuRoDVDv+Fi + 43mmGA5zn9GgcZ+JHnPkbE2EjyG6WtCs15v94ifvr4DtytilnbvuWeTzK1+Z + c6fWvipzr1z9rPR16195gzNWQAs8sQaWobpkFay88oJFq7Pg9Mt7/GJQcU40 + 0iYbDi5G3VgfngL1s59boJpwXTCdxzLPz+janstWls4tLl3yKtH/cR7VWXZ8 + mlaI8xaOCnxqSashF29ftR/P2nvrez2zRlSw85eWxogLt+rGz4IWie3orUkt + rVeGR0ru97wK/Z5NxOqRTG0c5JChU2n0+YP3xft8+/nD/ad3wyFh0yRhyna/ + cu6YTKkoPU8ceIJZcsbbSp9a9eSRJ3sECwqrJg4HP4oMX/RGnz0ueN05YwY+ + O/1Ozb1rJ95Vs+6MKXd8vl0y2a75xHHVB44rP2+8ZOb+jnp++YcNXHfb2DYH + wGObx9GrXwAAAP//AwCpNJrCEBYAAA== http_version: - recorded_at: Tue, 10 May 2016 01:04:47 GMT + recorded_at: Tue, 24 May 2016 22:16:51 GMT - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions body: encoding: UTF-8 string: | @@ -125,7 +127,7 @@ http_interactions: 50.00 Solidus - h6mxx2 + hbmws2 @@ -140,9 +142,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.60.0 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -151,7 +155,7 @@ http_interactions: message: Created headers: Date: - - Tue, 10 May 2016 01:04:47 GMT + - Tue, 24 May 2016 22:16:52 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -172,59 +176,59 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"f7261bc9e4c35101343f71e6c5fee81a" + - W/"d208d08626105b3a423c31c54c29a969" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - d0f68677-f8fe-492f-af1f-9c24cdafe8c0 + - 67cba158-7007-40be-8120-d03094d740e7 X-Runtime: - - '0.625374' + - '0.749199' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAK8zMVcAA5RYS3PbNhC+51dodIdJ6mG7GZmpm0wnzWvasdNDLx6QXImo - SYAFQFnKr++CgPgQQds5eEbc/bDALvbxwZt3h7KY7UEqJvjNPLoI5zPgqcgY - 393Mv9//Tq7n7+I3Gy0pVzTViIrfzGYblsX59WH3y3IT4E8jUZrqWsW01rmQ - 7Adkm8CJjFYfK4gVLWATND+NLK2lxL2OhClBcEuIv9992ARjsQHTUtRcx+vw - Igw3gfsyihJkmlOuCU1TIyR4HlVJwJ18quaodUI8uhlnxc1cyxrmgTVNlQb5 - KqiQGSI9ilQC1ZARqmfG8Zt5hp+alTCPF2F0ScI1icL7MHobrt6urv5B99sF - zfq6yn5ufbfABVlpgR6YD3tv6yhaXq7WV6ebQ+mWSaUJpyXE76nEm+sJLKKg - p++PokBXN0EnsYhUlBXlx/MAoAZKyopY5yBB0YcnWmBQf01AcgbyImE/NoFF - WPQTJIpp8NipcsF98i09jMIe9P3eJKwoMKG7GDwu/N5/Ejl/1vsPAn7GdaUx - ETFxsgx9V3EUzr6IPRTH2V2jMCUyALiAHTTwzNyhE38TUudPoHDBSOdOKFJa - MH2MP2JcM4FOtBILkLAztXv7ZRO4ny6oAqu0sHW2WK9WSxJeXmKF9eUnLzH3 - 5dE6/p3jHWXoBuaamont7BZjzVKKge/DhiuNMUKLKqcLLPUO2pdPrVjiilvf - kqVvCa+b48TXq/BszUnTJEkvLzBA25pnvhJuNcqVIJWSHgdKvI9eh/QZqajU - DAOqQOsCSsA2MlzhM94105fM98wmVKe5F5OzquqXga+W2tT3KNu89+heWwO+ - /nCW0r6dXTJ7VDabfe2iy2Dvebs0fUbdS81XoZYvoVz+jRtW/3Zc1yZbBkWm - XC7sFQEphSQYo0pwBV7XGlzP9SE6/oqz81nAycTw1vxWnsU0buz3Z9I/sBxH - QgPdYSN5okfU/As2y3EOqvHFbiopUtwN43CqDtrAG0uXv13dffmM3es50NDK - 8ChRaOjFlHZipcYMjm8r1OwN7ZlCNKHNMmZOgsEfw0a+7gVLzQVt8eJxBeYO - js1xRGrDT3AXS0ImUJoeiKVNXhUcoKxOHCMRogDK5/GWFspQthZw4jToBUmR - KrgU1+IReJxflocDTlb7ZTUJ4/EqjBbX16bd8n4nWcXR9XXkxunqVCxolDQU - 8W+mzDhpv0/NomLSXmYpuM7jaGGG4plwhD0ClUiYFuEA3Ejdvo4vENNqGprb - TKiRtDtl3hChjjXNTszoXOnabUl3QGpZxLnWlXobBFRh11YXiaSMm0pyJXCB - rTSo6NE084cSMH2zh0LsRLDHgFxUfPcO+J5JwQ3gRlGeJeKAdKa179qfhIoi - x/kmTEba31aTA1KwHE9pxvgjF0/IFnoyC8ogYbrT20+nqiXeJKblri4M1eyh - zjXtbDAcGsdfB+3J3HnpUYqihzgJXPiUqrE74nTjjx1mIB12W7ElRkt5CnHH - AfrSU5xEVqfN26DbupNZUM3ZfzW40kIxRp5hc5bxKluu1ukVrJIoulosabaA - 7XadZFc0CSP8Qz4+tdRa3gMvBVHZ40TptXpHa4el515dJGeYp/I4oBDt+G0Q - gIbcBZp6xQcEKsrqlY+KFt9aePa51yCmXmw2oAojkJWU7wDniH2uNbL2hD2+ - owR2OIhpxfAkY7n1Mzh3tJW44NheWVA/f6oTlUpWTfKrnr7tbA15JBXOc5ER - pDDEhNFDAM6QeCypvVg88tk+ZmAQnA0ecpgx1WS1VwfWijil2QTNmXpSYRsZ - n21oFImXeamjXxOZ2+rtzMAXNIcivhMFy2qFmewElr3KvZl0W4CpGWX2Fk/E - XulIi7FIaqksAc5A43Py9DIaqvwX1GPP/u2HmNF/KF4Jh4NxGru09B/DvCQw - XZHz+QzWaeohx3gtE74bz6vaPM/G+eHGC2EcOVxtXyNmxtr28pA2/wSYAg1Z - UM/RIVnqE6FJ0Mu2Gur0kq2WX0mmHs0t0+6t/+enb+/D+8/R+q/7971XfwYp - U82T2BI3k99O0oR1YGmjc2xRBGvXJDVgSLZieBODzhS/+R8AAP//AwDnwDoz - WBMAAA== + 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 + Ts+vcFkTAAA= http_version: - recorded_at: Tue, 10 May 2016 01:04:48 GMT + recorded_at: Tue, 24 May 2016 22:16:52 GMT - request: method: get - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/h8xg93 + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/9y6vth body: encoding: US-ASCII string: '' @@ -234,16 +238,18 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.60.0 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 response: status: code: 200 message: OK headers: Date: - - Tue, 10 May 2016 01:04:48 GMT + - Tue, 24 May 2016 22:16:52 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -264,54 +270,54 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"0a2397f9ec044f72af1fb3fd50e20442" + - W/"d208d08626105b3a423c31c54c29a969" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 59bfa45e-04d3-4f15-875d-befd6f3fa7fd + - 598bc95b-635a-431c-bed6-db115383eb05 X-Runtime: - - '0.137514' + - '0.272404' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 - WBMAAA== + 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 + Ts+vcFkTAAA= http_version: - recorded_at: Tue, 10 May 2016 01:04:48 GMT -recorded_with: VCR 3.0.1 + recorded_at: Tue, 24 May 2016 22:16:52 GMT +recorded_with: VCR 3.0.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_checkout_payment/can_be_voided.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_checkout_payment/can_be_voided.yml index f0218f6d..77f47168 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_checkout_payment/can_be_voided.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_checkout_payment/can_be_voided.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers body: encoding: UTF-8 string: | @@ -10,7 +10,7 @@ http_interactions: Card Holder - rasheed@wuckert.us + arnaldo_strosin@robel.ca Card Holder @@ -21,13 +21,14 @@ http_interactions: Herndon AL US - 91870 + 04914 fake-valid-nonce true + headers: Accept-Encoding: @@ -35,9 +36,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.59.0 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -46,13 +49,11 @@ http_interactions: message: Created headers: Date: - - Tue, 05 Apr 2016 16:55:12 GMT + - Tue, 24 May 2016 22:16:50 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close X-Frame-Options: - SAMEORIGIN - SAMEORIGIN @@ -69,49 +70,49 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"9e7547248c8d0543ff4fcd1080bc4977" + - W/"78633d17090da35cd58719c498dd66f5" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 2d3881d3-36c0-42fe-87ee-158d32e6ad08 + - 18d94378-a195-4314-92cc-3e233238f212 X-Runtime: - - '1.785785' + - '0.983198' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAPDtA1cAA7RY247bNhB9z1cYftdK8tprJ9Aq3bZogzYJCiRpgbwElDi2 - lZVIhaR8yddnSN0oyfba3vTBgDlzhiLneqTg9S5LRxsQMuHsfuzfeOMRsJjT - hK3ux58+/uEsxq/DF0FcSMUzEOGL0ShIaHg7ndzN/Nk8cHGhZaiL14QpB9ff - Izbbf//2Us232XY3nQSurdXoZSKkchjJIPyNCBq4lkDrU1Kv3vCUggjcVqL1 - Mc9ywvYjlqT3YyUKGLtGDhlJ0lAQuQagv2yL+BGEuilk4JYajcnXnMHAckl2 - A9kWIpmoITYWQBRQh6iR2udwP6a4VEkG43Di+XeON3W82Uf/7tVs9sr3Pwdu - a2Dsi5yebz9B+9agfL4JhrNMIKWyORJNlBOjM2W1KRGC7Mda29WXEpRFSZpi - mB1CqQApa3kZ4K95HdpKVmeA04m+LW2xVjT/4mvWD2+FakP6O4dehOuHHo5z - pZVKAKjm/L43ess3kO5HH4wicHuA1hJ2ChjVHq1U77lQ6y1INBrorBPzmKSJ - 2odvQDDK8WKNpAUJWGEthQ9vA7f62+pyLhVJHawvCF/6i7kXuLbIvnjBlNgb - sUPSfE0m4acP6O8D8lNWt2j1cMjs9pgZKzCcSRwupl7PrtYMDU3UPjGsFYq+ - x1SVI74cPRg4aXfpB/d5ZVTtclEx+YNiMnu4R0oBS4SFU8+fLBYa00Qy0HXk - 6MeF/yZS37BZ24i16V1tmxvVzayvbIx4pjtlQlL05iPjW6ad18haWOlPvnQS - KQvCYghbL9vSxuL5rj6/AbRIXR1KV4BJ3YG0xlOIEtXeuFy2yiUp0vrcEecp - EDYOdTPQUKNswYXAMDlYd0Wqz29t2tfUJrDLE2HO42ScqXXoT3QP6AkPoPdA - BHpv4nXgRtpBY030zr4kqYTKyjrJGkiq1pgb0B7bktWwJCMrcAqRhmulcvnK - dYmUoORNJEjCdMdb4QW3ZH+DqePmZJ8BU18yUGtOv6R8xd0N5uxNzlavgW0S - wZkG3EvCaMR32PWb/ZsnYjrp6ogIe2yP1pHWUNPEp6G/WPhVR582OjyK4KmV - 2rWgAQjICebRe4666n+tk0UkY5Hk2sndCddMhEDxR2Ahna1Yfhe45arWFSz5 - VpgeFplkxSsnOEBFOKW301k8h2nk+/PJLaETWC5nEZ2TyPPxhw3jmGmz909o - QRtgGXckfTySLI3eshB4jLKUDs38AagVm9lJVCHDUg9Uz0ojsDHxZoMFI3Pc - H8oB9Q7LeCC0TchGOiAEF13M4QFe4a0JOHzcaUB/q+7AP7zbSYy9YVVGiPgK - sSlubIqSs6OXaVguiU0z1j1RYiKDRYAtlW2aCx7jafp+Q07jaY5wRPvEDgqp - TPiQo2ajI3wMYe+Cx5q8FLvvssv+WrZoy85legb5NNsrc+4U46sy90rWZ6yv - Y37lDc5gfwZ4ggGWoTqTBVYOeQbHsrhNt7KHrwOV5kQPbRLhICeyw3x4ANTP - foo7NZG6YDAPbZ4ez/V5LmMr1i0u5XeV6f84iuoEOz5IK8R5XKMCn+JnNeRi - 4lX78SzKW9/rCQZRwc7nK80hLiTUjZ85LWLTzNsjtbJOGR4pucuouXfkLej5 - HxWafUQiHx3UkL5TafjP37dz78Piv18/v/uzPx9MmsSJNI2vHDk6UypJxxMH - nqD5zZCodKVVOx54siMwoKDq33DwU0j/HW/wseOCN50zxt+Tg+/UyLt22F01 - 5s4YcMdH25lD7ZoPG1d91rjyo8Zzxu1Pect+9rsEktw2rM0CcNmmcPjiBwAA - AP//AwBjPDmY+BUAAA== + H4sIANLSRFcAA7RYWW/jNhB+z68w/K7osHNsoGgbbFEstttggd20aF8WlDSO + 2UikQlJOnF/fIXVRku3YTvpgwJz5ZjScWwo/PufZZAVCUs6up/6pN50AS3hK + 2f319O7Hb87l9GN0EialVDwHEZ1MJiFNo7PgfOYH517o4kHTkJcsCVMOnl9i + drZ+efygLp7yp+d5ELo2V6MXVEjlMJJD9ImINHQtguZnpDl95lkKInQ7iuYn + PC8IW08Yza6nSpQwdQ0dckKziAhGspT/lEpwSdkvgseQnSYkdCu+RhZLzmAk + vyDPI9oTxJKqMTYRQBSkDlETtS7gepriUdEcplHg+eeOd+YE8x9BcOWfX80/ + /BO6nYCRL4v0MPlOoHq+CYmzoJClsjUppcpJ0KWyVkqEIOup5vb5FQVpMc0y + DLZD0lSAlA29CvNs1QS4pjV54PRywKZ2WCumX/iSDYNco7rA/sphEOfmoZuj + XXMxygCqtd/3Jl/5CrL15LthhO4A0EnCswKWao/WrFsu1PIJJAqNeJbFPCEZ + VevoMwiWcrxYS+lAAu6xoqKbr6Fb/+14BZeKZA5WGUTe/IM/D12bZF+8ZEqs + DdkhWbEkQXT3Hf29gb5LaoZSN5vEZtvEWInhpEl0OfcGcg1nLGiidsewVlL0 + PaaqnPDF5MbASadlGNy3lVGt5Y3FZHS4W0oBS4RFc88PLi81po1kqOvI0Y+L + /qRS37A924il6WBds5s0LW3IbIV4rvslJRl684HxJ6ad19I6WOVPvnColCVh + CUSdl21qK/F2V+/fADqkrg6lK8Ck7oja4FOIqepuXB075oKUWWN3zHkGhE0j + 3Qw01DA7cCkwTA7WXZlp+y2lQ04jAs8FFcYeJ+dMLSM/0D1gQNyAXgMR6L3A + 68ENtYfGmhjYviCZhFrKsmQJJFNLzA3ozLZoDYzm5B6cUmTRUqlCXrkukRKU + PI0FoUx3vHu84BNZn2LquAVZ58DUzxzUkqc/M37P3RXm7GnB7j8CW1HBmQZc + S8LSmD9j12/1t0/EdNLVERP20JnWozZQ08TnkX956dcdfd7y0BTBMyu1G0IL + EFAQzKNbjrz6f8OTZSwTQQvt5P6EaydCqPgDsGjGZgXLQ7c6NbyS0cfS9LDY + JCtemeIAFdE8nc3PkguYx75/EcxIGsBicRanFyT2fPxhw9gm2up+hxa0ApZz + R6YPW5Kl5VsSAs2oSmnTzB+BOrKZnUSVMqr4kOpZaQg2JlmtsGBkgfqhGlB/ + YBmPiLYIWUkHhOCij9k8wGu8NQHHj9sNGKrqD/zN2nZibIV1GSHiX0hMcWNT + lJxtvUy765LENGPdEyUmMlhrsMWyRQvBE7Rm6DfcaTxPF8Nm7isaFK4y0U2B + nJWO8DaErQXNumDJ48usv/1126JN23fTM8jXt70q53ZtfHXmHrn1GenjNr/q + Bntsfwa4YwOsQrXnFlg75A07lrXb9Ct7/DpQc3b00DYRNu5Edpg3D4Dm2a/t + Tm2kDhjMY5nXx3Njz2HbinWLQ/e7WvR/HEVNgm0fpDViv12jBu/azxrIwYtX + 48e9Vt7mXq9sEDVs/32lNeLAhbr1M0/LxDTzzqSO1ivDLSX3Pm9B77OEGD2C + ygcHOWTo1DT69sX77p3/fvvp779G88GkSUKlaXzVyNGZUlN6ntjwBL3fjBeV + PrVuxyNP9ggGFNb9GzZ+Chm+440+dhzwprPH+Ht18O0aeccOu6PG3B4Dbvto + 23OoHfNh46jPGkd+1HjLuH2Xt+w3lzEuuV1Y2wPgsUvh6OQ/AAAA//8DACWx + heX+FQAA http_version: - recorded_at: Tue, 05 Apr 2016 16:55:12 GMT -recorded_with: VCR 3.0.1 + recorded_at: Tue, 24 May 2016 22:16:50 GMT +recorded_with: VCR 3.0.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_completed_payment/can_be_fully_credited.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_completed_payment/can_be_fully_credited.yml index df88be16..8019c6ff 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_completed_payment/can_be_fully_credited.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_completed_payment/can_be_fully_credited.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers body: encoding: UTF-8 string: | @@ -10,22 +10,25 @@ http_interactions: Card Holder - regan@cruickshank.com + lucious_mohr@cummeratastiedemann.name Card Holder + John + Doe 10 Lovely Street Northwest Herndon AL US - 35005 + 75530 fake-valid-nonce true + headers: Accept-Encoding: @@ -33,9 +36,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -44,75 +49,75 @@ http_interactions: message: Created headers: Date: - - Mon, 14 Sep 2015 16:43:35 GMT + - Tue, 24 May 2016 22:16:53 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"0c021cdb641b43bc354f3456e346a18c"' + - W/"be97ec84dfddba5862833f18b5121216" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 0effb66748caa4c3471e0a1b0c4b5247 + - eafdde85-8609-4804-a8a7-2f8bc5f13c88 X-Runtime: - - '0.798033' - X-Frame-Options: - - SAMEORIGIN + - '0.907366' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIADf59lUAA7RYS2/bOBC+51cYviuybDlxC0XdIMCih26B3ba7wF4KShzH - rCVSJSkn7q/fIfWiLNuxnezBgDnzDTUczuOTog/PeTbagFRM8LtxcD0Zj4Cn - gjL+eDf+9vV3bzH+EF9Faam0yEHGV6NRxGg8nd4sZotgFvm4MDLUpSvCtYfr - Xwmfb3/9fKdvn/Kn53Aa+a7WoJdMKu1xkkP8QCSNfEdg9BlpVh9FRkFGficx - +lTkBeHbEWfZ3VjLEsa+lUNOWBZLeCT8t1SWLF0rfOz6GvGRXykNrFgJDgPj - JXkeyJ4gUUwPsakEooF6RI/0toC7McWlZjmM4+kkmHuTd14Qfg1u3oez97Pw - 38jvDKx9WdDT7edo3xlUz7f34S0ZZFS1LlGmvRTjqepNiZRkOzbavr6SoCxh - WYY37RFKJSjVyKs7vuHN7dayJgm8XgK40g7bXehu7GpAe6EH9AeuuNYqLQF0 - 63cwGX0SG8i2oy9WEfk7gM4SnjVwaiJZqz4LqVdPoNBooHPcFSnJmN7GH0Fy - KjA0raQDYeJhGcX3nyK//tvpCqE0yTwsLYhn88lkHvmuyD14ybXcWrFHsmJF - pvG3LxjnPfJjVjO0ut9nNjtkxku8RpbGi3CyY9dohoa2JL9xrBGKsccUVSOx - HN1bOOl2aSq3sX5d+dS7nFVE4aCI7B7+gRLA0uBxOAmmi4XBtDcZmfrxzOPi - v5kyJ2zXLmJl21bX4UZNH9tVtkYiN02SkQyjuebiiZvgtbIOVsVTLD2mVEl4 - Cv1rdhWt0eujfXrtd0hTINoUgc3egbTBU0iY7g5dLTvlkpRZ43ciRAaEj2PT - DwzUKjtwKfGmPCy9MjP+O5vuahoTeC6YtP54ueB6FQdT0wZ2hHvQWyASozed - 9OBW2kNjWez4viSZgtrK8WQFJNMrTA/o3HZkDYzl5BG8UmbxSutCvfd9ohRo - dZ1Iwrhpeo94wCeyNTPPL8g2B66/56BXgn7PxKPwN5i21wV//AB8w6TgBnCn - CKeJeMaG3+7fPhHTyRRIgoO0c60nbaC2p4dxsFgE9cQOWx26IkXmZHcjaAES - CoJ59Fmgrv7f6FSZqFSywgS5P9zaoRBpsQYe/1iH4Q3WWbVqdCVnP0vbxhKb - rHhkhrNTxiGdhfP0FsIkCG6nM0KnsFzOE3pLkkmAP+wZh0zbvd+gC22A58JT - dH0gWVq9YyHRjaqU9o37AagT2/FJdKniSg/UjEsrcDHpZoMFowrcH6oZ9QeW - 8UDompCN8kBKIfuY/TO8xjtDcPi444Ddrfozf/9uRzHuhnUZIeIHpLa4sSkq - wQ8epuW4JLXN2PREhYkMDv11VK5pIUWK3uzGDWnNZGKKYb/2hR00spn4vkDN - xtzwIYS7C7o1l+vblPaJX0cUXdkJJM+CXiB6Va4dI3t1xl5I+Kz1ZaSvcv8E - 4meBR8hfdUUnEsA6IK+gVw6t6Vf08A2g1hzpnW0C7KVD7h3vb/zNs1+iTe1N - nTGQhzYvj+XGn/NYinOKc6ldbfo/jqAmwQ4P0BpxGseowcd4WQM5m3A1cTyJ - 7TbneoE51LDTeUrrxPlcug21oGVq+3jnVSfrVeKBqnubd6C34R92H8nU2kMN - 2Y0rjWc3OIgewj//+evrw+5osJmSMmV7XzVtTLLUkl4k9jzBUJshR+lL6448 - iGRPYEFR3cJh7weQ3Te8wSeOM15yjk++4zPv2LS7dM5dNOFOmG2Hp9qJ8+yS - zxkXfcy48FPGaybtm7xYv7p8kdd219ouAJdd6sZX/wEAAP//AwC1v+qG6RUA - AA== + H4sIANXSRFcAA7RYS2/bOBC+91cYviuy/GicQlE22MWi6LZFgbR72EtASWOL + G4lUScqO++t3SL0oyXZsJ3swYM58MxrOW/LvnrN0tAEhKWe3Y+9qMh4Bi3hM + 2fp2/OP7n85yfBe886NCKp6BCN6NRj6Ng8XSm91476e+iwdNQ16UEKYcPP8K + 2WL36+eNut5m2+c5gmyuRq+okMphJIPgdyJi37UImp+S+vSRpzEI320pmh/x + LCdsN2I0vR0rUcDYNXTICE2DtIgoL+RjxhPxW1Rk+HSiUJ5CjADGrrQe3y3B + WixPOIOBshV5HtC2EEqqhthIAFEQO0SN1C6H23GMR0UzGAfTiffemSyc6fz7 + dPrBe/9hMfvHd1sBI1/k8XnyrUD5fBMfZ0UhjWVjUkyVE6F/ZaWUCEF2Y83t + 8ksK0kKaphh5h8SxAClrehnzbFdHu6LVSeF0EsKmtlgrwJ94wvoRr1BtlP/g + 0At6/dD9oa+4UgkA1djvTUaf+QbS3ejBMHy3B2gl4VkBi7VHK9ZXLlSyBYlC + A55lMY9IStUu+AiCxRwv1lBakIA1lldw/9l3q78tL+dSkdTBkoPgerGYTXzX + JtkXL5gSO0N2SJonZBr8eEB/76Efk5qh1P0+sdkhMVZgOGkULOeTnlzNGQqa + qP1gWCsx+h5TVY74anRv4KTV0g/u68qo0vLKYjI63AOlgCXCgvnEmy6XGtNE + 0td15OjHBX9TqW/YnG1EYtpZ2/lGdX/rMxshrttXREmK3nxifMu08xpaCyv9 + yVcOlbIgLIKg9bJNbSRe7+rTG0CL1NWhdAWY1B1Qa3wMIVXtjctjy1yRIq3t + DjlPgbBxoJuBhhpmCy4EhsnBuitSbb+ltM+pReA5p8LY42ScqSTwproH9Ih7 + 0DsgAr03nXTghtpBY030bF+RVEIlZVmSAElVgrkBrdkWrYbRjKzBKUQaJErl + 8oPrEilByatQEMp0x1vjBbdkd4Wp4+ZklwFTjxmohMePKV9zd4M5e5Wz9R2w + DRWcacCtJCwO+TN2/UZ/80RMJ10dIWFPrWkdag01TXweeMulV3X0ecNDUwRP + rdSuCQ1AQE4wj75y5FX/a54sQhkJmmsndydcMxF8xZ+ABTfrzc3P0HfLU80r + GP1ZmB4WmmTFK1McoCKYx7P5IrqGeeh519MZiaewWi3C+JqEEw9/2DAOiTa6 + 36AFbYBl3JHx04FkafiWhEAzylLaN/MHoJZsZidRhQxKPsR6VhqCjYk2GywY + maN+KAfUFyzjAdEWIRvpgBBcdDH7B3iFtybg8HHHAX1V3YG/X9tRjK2wKiNE + /AuRKW5sipKzg5dpFl8SmWase6LERAZrJ7ZYtmgueITW9P2GO81E7wgHuC9o + ULjKBPc5cjY6wocQthY0K5G79fa6u/2126JNO3XTM8iXt70y545tfFXmXrj1 + GenLNr/yBidsfwZ4ZAMsQ3XiFlg55BU7lrXbdCt7+DpQcY700CYR9u5Edpj3 + D4D62S/tTk2kzhjMQ5mXx3Ntz3nbinWLc/e7SvR/HEV1gh0epBXitF2jAh/b + z2rI2YtX7ceTVt76Xi9sEBXs9H2lMeLMhbrxM4+LyDTz1qSW1inDAyX3Nm9B + b7OEGD2CyicHOaTv1Dj49mnyMJl+/PbX/NOX/nwwaRJRaRpfOXJ0plSUjif2 + PEHvN8NFpUut2vHAkx2CAflV/4a9n0L673iDjx1nvOmcMP5eHHzHRt6lw+6i + MXfCgDs82k4capd82Ljos8aFHzVeM27f5C371WWMS24b1uYAeGxTOHj3HwAA + AP//AwAPZV1ECxYAAA== http_version: - recorded_at: Mon, 14 Sep 2015 16:43:34 GMT + recorded_at: Tue, 24 May 2016 22:16:53 GMT - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions body: encoding: UTF-8 string: | @@ -122,7 +127,7 @@ http_interactions: 50.00 Solidus - jk446r + 9gv9qb @@ -137,9 +142,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -148,79 +155,80 @@ http_interactions: message: Created headers: Date: - - Mon, 14 Sep 2015 16:43:36 GMT + - Tue, 24 May 2016 22:16:54 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"dd28eae9ecc3cf90398d639185624b53"' + - W/"433f30f866271545ab01b0f8b4a0f594" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 909d8c829a557d0dad4c9b82aa7cf28c + - d311aac2-d00c-425e-a241-89166e4d82d6 X-Runtime: - - '0.665885' - X-Frame-Options: - - SAMEORIGIN + - '0.711860' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 - AP//AwCDdylG7hIAAA== + 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 + ulRYXhMAAA== http_version: - recorded_at: Mon, 14 Sep 2015 16:43:36 GMT + recorded_at: Tue, 24 May 2016 22:16:54 GMT - request: method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/kg4fgt/submit_for_settlement + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/dw3pcc/submit_for_settlement body: encoding: UTF-8 string: | @@ -234,9 +242,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -245,79 +255,80 @@ http_interactions: message: OK headers: Date: - - Mon, 14 Sep 2015 16:43:37 GMT + - Tue, 24 May 2016 22:16:55 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"a3590a9c480f9b4d0690987d0ffd9330"' + - W/"7cc11969ea4aa6633792586d030df86f" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - b34e7f6aa912cac31647796dce8cc787 + - a3bfbac2-74e0-4cdc-8f21-f72a70d21185 X-Runtime: - - '0.224278' - X-Frame-Options: - - SAMEORIGIN + - '0.273636' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 http_version: - recorded_at: Mon, 14 Sep 2015 16:43:36 GMT + recorded_at: Tue, 24 May 2016 22:16:55 GMT - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/kg4fgt/refund + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/dw3pcc/refund body: encoding: UTF-8 string: | @@ -331,9 +342,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -342,45 +355,45 @@ http_interactions: message: Unprocessable Entity headers: Date: - - Mon, 14 Sep 2015 16:43:37 GMT + - Tue, 24 May 2016 22:16:55 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Cache-Control: - no-cache X-Request-Id: - - 92c59e14b2e38ebb6cc1ce3e0d084150 + - aa628ad8-7281-476e-a58b-d75419de348c X-Runtime: - - '0.104492' - X-Frame-Options: - - SAMEORIGIN + - '0.127686' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIADn59lUAA6xSQW6DMBC85xUWd2JSJW0jOc6hUl/QPmCBDbUKNl0vTcjr - awIEUkU99bazM7veGVntT1UpvpG8cXYXrZZJJNBmLje22EXvb6/xc7TXCwW1 - iZHIUUzoa2c96oUQ6tLyXXkFgtsadxEQQRvJgWIC6yHj8EjfuS8fuZGdcOiE - o1BvV5vkUclLPSeBmUzaMA77fFulrox0Ch6VvLI3MxV6DwXqF7DWsSA8NDYX - IGbHisaWQSUMC+OFR+YS86WS4+h0r7w5eIBjMvKX/zmtaiCo/B9BQeUay3qT - LJMkeOnR/cWduge9myCfc5mzTK4skfRs0Hd5XonFkA1lH2A5Nrk+p3bTnr+2 - /HSsjqf1Q2d/Ynt9KD6L9aFgJfuekpOvf0k6WLnzB38AAAD//wMAn5uhfMAC + H4sIANfSRFcAA6xSQU7DMBC89xVW7qlToEAlxz0g8QJ4wCZZiqXYDusNbfp6 + 3CZpUlRx4razs7ueGVltD7YW30jBeJcnq2WWCHSlr4zb5cn722v6nGz1QkFj + UiTylBKGxruAeiGEOrfCqbwAwV2DeQJE0CVyoJjABSg5PtJ3bo+P3MhOOHai + KNSb1Tp7VPJcz0lgJlO0jMO90NnC14kuIKCSF/Zqx2IIsEP9As55FoQfrasE + iJlY0bo6TgnDwgQRkLnGaqnkuDrplVeCBzgmI3/5n9OqAQIb/ggKrG8d63W2 + zLLopUe3D59jcky+rpH0jAynzC5EPzms9b7j4fkVi1R+guPUVPpYuHV3/Nrw + 097uDw93J/sT28/HotrfN2WpZN9TcvL1L0lHgTf+4A8AAAD//wMA6nQFW8AC AAA= http_version: - recorded_at: Mon, 14 Sep 2015 16:43:37 GMT -recorded_with: VCR 2.9.3 + recorded_at: Tue, 24 May 2016 22:16:55 GMT +recorded_with: VCR 3.0.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_completed_payment/can_be_voided.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_completed_payment/can_be_voided.yml index 2e310cd0..2570e275 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_completed_payment/can_be_voided.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/a_customer_profile/with_a_valid_credit_card/with_completed_payment/can_be_voided.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers body: encoding: UTF-8 string: | @@ -10,22 +10,25 @@ http_interactions: Card Holder - tyler.blick@olson.biz + jazmyn.sanford@corkerysporer.biz Card Holder + John + Doe 10 Lovely Street Northwest Herndon AL US - 35005 + 15661 fake-valid-nonce true + headers: Accept-Encoding: @@ -33,9 +36,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -44,74 +49,75 @@ http_interactions: message: Created headers: Date: - - Mon, 14 Sep 2015 16:43:38 GMT + - Tue, 24 May 2016 22:16:56 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"d168b5018e719a4c1b20ca9dc039efeb"' + - W/"6d912691f7e8b076d0298ac3382916d9" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - a9bb12cb7e8ce93562610455c6ee325a + - 826e4a20-042d-4a70-8f93-ba0cec4f0ce6 X-Runtime: - - '0.736856' - X-Frame-Options: - - SAMEORIGIN + - '0.906410' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 + AQAA//8DAGix3z0GFgAA http_version: - recorded_at: Mon, 14 Sep 2015 16:43:38 GMT + recorded_at: Tue, 24 May 2016 22:16:56 GMT - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions body: encoding: UTF-8 string: | @@ -121,7 +127,7 @@ http_interactions: 50.00 Solidus - cpmrnb + 5423x2 @@ -136,9 +142,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -147,79 +155,80 @@ http_interactions: message: Created headers: Date: - - Mon, 14 Sep 2015 16:43:39 GMT + - Tue, 24 May 2016 22:16:57 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"b003ac2477cfb7b49a30765c7de45016"' + - W/"f5cd7478f6178842bf03692f1ec9b00d" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 1cc493a49017fbe4e1c7aff99c8e3555 + - 21d70e70-c803-4203-939f-a07b3deca9f0 X-Runtime: - - '0.680049' - X-Frame-Options: - - SAMEORIGIN + - '0.854686' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIADv59lUAA7RYS4/bOAy+91cEuTu285hH4XF30GLRBboFirb7uhSyxSTa - sSVXkjOT/vqlLPkVy9P2sIcBYvITRVIU+WmSV09lsTiBVEzwu2W8ipYL4Lmg - jB/ulp8//RrcLF+lLxItCVck14hKXywWCaPp9ur6dlclIf40EqWJrlVKan0U - kn0DmoROZLT6XEGqSAFJ2Pw0sryWEvc6B0yJALeE9PPHN0k4FRswKUXNdbqL - VlGUhO7LKEqQ+ZFwHZA8N8IA/VGVBNzJpzJLhKQg8WPBWXG31LKGZWg9kkA0 - 0IDohfHybknxU7MSluk6indBdBvE20/x1cvt5uXm9h/0tVvQrK8r+nPr+wUu - I0oL9Np82CRfxzfRbncVt2lG6Z5JpQNOSkhfE4lpHggsoiDt91tRYKhJ2Ess - IhdlRfj5MgGogZKwItXnAuQqK1j+8IsolOCrjH1LQqu0wEfIFNPgMVEdBffJ - 9+RpkvFwGHKSsaLAwuvD/3rlDdxjvIvQo5uPVmksFKwPSiUolcbR4p04QXFe - fGwUpoRHAJejJw2cmmNz4vdC6uMjKFww0Tn3RE4Kps/pW5CcCo5H0kosQMLB - 3K37d0nofrpkCrxFhb0Hm10U7ZJwKGoDxOqWZ3vCnzkeC8UIsLLUQuwX95he - lhPM9RA2XmmMBaSojmSNt7CHDuVzKza44t63ZONbwuvGnfRmG12saTVNXQxK - AXOzrzn1XdhOo9yFI1KS80iJRzFoXj4jCrQuoARsEGOkz2jf337CbEZ0fvRi - jqyqhhXvuzb/d9n7usBFFft2dvXrUdkC9nWGvnK9/vbl+Yx6UJI/hNp8D+Xq - btqbhqfjenOwZ1BQ5WrhpAKQUsgAc1QJrsAbWoMbhD5Gp7/jOHsW0JoYn5rf - yrOYJozT6UL6G17DidBAD9hAHskZNf+CrXKcdmp6sEklRY67YR7a20EaeGPp - 05vt6z+vsWs9BxpbGbsSR2biz2lnVmqs4PS+Qs3JMJE5RJNaSpnxBJM/hU1i - PQmWmwPa48HjCqydDOQ0I7VhHriLpRozKE2eAstkvCp4grJqmUQmRAGEL9M9 - KZRhUR2gZS4YRZAjIXAlrsUD8DSvSskzhDdfVpMxnm6jeH1zY9osH3aSbRrf - 3MSOL2zby4JGg4a1/cGUGSPdd9ssKibtYZaC62Mar80cvBBOsGcgEmnROhqB - G6nb11GDwLSahnk2k2ki7b08NnSn50aLlv9cKl27LckBgloW6VHrSr0MQ6Kw - a6tVJgnj5ia5K7DCVhpW5Gya+ZcSsHzpl0IcRHjChKwqfngF/MSk4AZwpwin - mXhC5tLZd+1PQkWQzrwXpiLtb6s5Ain0Eb004/uBi0ckCAOZBVHImO719tOp - aokniWV5qAtDKAeoS003Gww7ZqTooQOZ85ecpSgGiFbg0qdUjd0Rpxt/6DEj - 6bjbin1gtITnMKYMQ0WbKkHrvGHs/e69zIJqzr7W4G4XijH5DPuzTLd0s93l - 17DN4vh6vSF0Dfv9LqPXJIti/EPiPbfUWj4BL0Wg6MPM7ev0jsSOb597CwVH - hqUqzyMW0U3gBgFoyJ2hubL4UkBFWf3g66HDdxaefYQ1iLl3lE2owgzQkvAD - 4Cixj6hG1nk4oDxKYJODlFQMPZnKbZzhZaCdxCXHtsuC+ClUnalcsmqWYg30 - XXNreGNQ4UgXNEAWE5g0ejjABRLdktqLRZcv9jEzI8Dx4OGHlKmmqr06sFZE - W2YzTGfuAYWdZOrb2ChyL/N+xrhmKrfT27GBz2MORfpRFIzWCivZCSyBlScz - 7PYAc2PK7C0eA3ukEy3mIqulshyYgsbHY/seGqv8BzQg0P7tx5jJ/w1+EA5P - Jmhs1NLvhnlEYLki7fMZrPPcw4/xWGZiN5FXtXmZTevDTZiAcaRxtX2QmDFr - 28uXvHntz4HGRGgQ6JgvDbnQLOj7thr29D1bHcWSTD2YUyb9y35zhbRu8+bD - 7frvvwZvfAo5U81D2HI3U99O0qR1ZCnRR2xRAd5dU9SAKdmL8UmMOlP64j8A - AAD//wMA95o7Ve4SAAA= + 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 + 36GquFkTAAA= http_version: - recorded_at: Mon, 14 Sep 2015 16:43:40 GMT + recorded_at: Tue, 24 May 2016 22:16:57 GMT - request: method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/46795p/submit_for_settlement + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/7hy72s/submit_for_settlement body: encoding: UTF-8 string: | @@ -233,9 +242,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -244,80 +255,80 @@ http_interactions: message: OK headers: Date: - - Mon, 14 Sep 2015 16:43:41 GMT + - Tue, 24 May 2016 22:16:58 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"b40d491345f8a927649390a876108c32"' + - W/"1d98c78ee55be5a3b20dc1a63718215a" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 437fb8f37110a97f09ff4220ea8ffc6d + - 1ba74b64-a3e1-4f8a-a2fd-376e507b0704 X-Runtime: - - '0.324729' - X-Frame-Options: - - SAMEORIGIN + - '0.440571' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 - 0QYUAAA= + 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 http_version: - recorded_at: Mon, 14 Sep 2015 16:43:41 GMT + recorded_at: Tue, 24 May 2016 22:16:58 GMT - request: method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/46795p/void + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/7hy72s/void body: encoding: UTF-8 string: '' @@ -327,9 +338,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -338,75 +351,76 @@ http_interactions: message: OK headers: Date: - - Mon, 14 Sep 2015 16:43:42 GMT + - Tue, 24 May 2016 22:16:59 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"3146baa5844f97f743e3804f169e450b"' + - W/"2c2b74b50a8efac8c9b8bf9250baf545" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 0a2b3de389c2b26a2af94fbe4d976682 + - fa4e3bde-f202-45b7-abe2-dc450be22686 X-Runtime: - - '0.221451' - X-Frame-Options: - - SAMEORIGIN + - '0.270154' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 - FwAAAP//AwDmHZhp7BQAAA== + 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 + VxUAAA== http_version: - recorded_at: Mon, 14 Sep 2015 16:43:41 GMT -recorded_with: VCR 2.9.3 + recorded_at: Tue, 24 May 2016 22:16:59 GMT +recorded_with: VCR 3.0.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/failure/fails.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/failure/fails.yml index 47145986..b3d62118 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/failure/fails.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/failure/fails.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers body: encoding: UTF-8 string: | @@ -10,22 +10,25 @@ http_interactions: Card Holder - maria_powlowski@keebler.co.uk + kristy@moen.biz Card Holder + John + Doe 10 Lovely Street Northwest Herndon AL US - 35005 + 73050-8234 fake-paypal-future-nonce true + headers: Accept-Encoding: @@ -33,9 +36,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -44,79 +49,82 @@ http_interactions: message: Created headers: Date: - - Mon, 14 Sep 2015 22:34:16 GMT + - Tue, 24 May 2016 22:17:15 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"84759288b11dbd70f7a4c14aa4164ffa"' + - W/"f6ec33fc57354c130818116ababbe452" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 4d9be758536b03acad4c07765f1061c2 + - 42581646-c0d5-4350-b5e1-94df1a5928b3 X-Runtime: - - '0.258493' - X-Frame-Options: - - SAMEORIGIN + - '0.322738' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAGhL91UAA6RUyW7bMBC95ysE3SlajtzUhiwHCBD0A9JLL8ZIHMusuZWk - IstfX0rylqiXIsd582Z7w2G+OUoRvaN1XKt1nCazOEJVacZVvY5/vr2S7/Gm - eMirxnkt0RYPUZRzVqRZtnzMnpY5DUaPBV+1B+VJsE+lWnSnP0v/1Mr2mM1z - eu/t2TtunScKJBYvYFlO74DeL+Bi/dCCoc3pDen9lZYGVBcpLtaxtw3GdMBR - AheFBMtha3QrdOsO/PmAWAq0SaWT5pDTkdTTzV4rnCTZwXGCtVg67qfcyiJ4 - ZAR85DuD65gF03OJcTGfpQsyW5I0e5vPV4/ZKv32K6e3gCG+Mez/4m8BY/1h - L2THUTB3bYlxT6qgqzsnBWuhO3dsoDMgCFSVbpT/yOgJE8oIBtjrA6qCLdju - FFY6WhffqOlvUJgwjc94BGkEBsXlnd4Dk+EOGnEZt9RaIKi46DXN6dl5JXMJ - NZLGimLvvXErSsE59C4pLXDlLWId1Gih6yvR0LdE5bcS/V6zrdC1puMsiVH1 - BtU7t1r1lLUDxUp9DM/3WuFS84srHXJ8ca1DDteUrrLc+HCZ/1jkwCm5EOFS - CdRBin6wcGCf32ig0elGP2NuAIExi0HhSb0w5fUH+AsAAP//AwDC1HUcNAQA - AA== + H4sIAOvSRFcAA6RTy27bMBC85ysE3Snarh27Bi0HKFD0A9JLL8FKXMls+FBI + Krb89SUlv2LlUuS4s7Pc5ews2x6UTN7ROmH0Jp1mkzRBXRoudL1Jfz//JKt0 + mz+wsnXeKLT5Q5IwwfNvy8VqMX+cMRqCiIVcuQPtSYiPhV50x7fvfrlX+8M8 + kG6zkV0J6zzRoDD/AZYzegPEvIRz9MtIjpbRKxLzpVEN6C7RQm5Sb1tMaY+j + AiHzVyuc756UQZ0V4sjoAEdCszMaR2UVHEbYHgsn/JhbWgSPnIBPfNfgJuUh + 9EJhms8m00cyWZDZ/Hk2W0+X6+niD6PXgr6+bfj/1V8Lhv79JkglUHJ3GYkL + T8qgpDs9CtZCd5q4ga4BSaAsTav9R0YkjCgDGOBCSBmMQKC2iAr7/d0L0hO/ + KMrwxsli5IO9btEzk2MFrTy3KoyRCDrN40yMnpIX8rD7v6Ax4waf8ACqkZgF + B934omcKBTWS1sp8533j1pSCc+hdVlgQ2gcJ6jDzHrpYTINkUZEXhX5n+Is0 + taGDjFmj6y3qd2GNjpSNA80Lcwi3culw7unawpVWND6c3ye76znevKLOV6u3 + rqgZHaJz7otuGv7tSDxOjZIILbyI+XttK5AuiPsZ9fJO+H3ck67M2COMji12 + j7keBM4tBt1Haly9kD/8AwAA//8DAMNjWcS3BAAA http_version: - recorded_at: Mon, 14 Sep 2015 22:34:16 GMT + recorded_at: Tue, 24 May 2016 22:17:15 GMT - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers body: encoding: UTF-8 string: | - paypal - - maria_powlowski@keebler.co.uk + Card + Holder + kristy@moen.biz - paypal + Card Holder + John + Doe 10 Lovely Street Northwest Herndon AL US - 35005 + 73050-8234 fake-paypal-future-nonce true + headers: Accept-Encoding: @@ -124,9 +132,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -135,75 +145,78 @@ http_interactions: message: Created headers: Date: - - Mon, 14 Sep 2015 22:34:18 GMT + - Tue, 24 May 2016 22:17:16 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"7576cb187ed2c8a5e72aaf23944e70af"' + - W/"a508a78a32ae685f7be26a82354bf1db" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 6d7941ad0db458c155749b240f88b64d + - cc2bfd2d-7a0c-42de-981f-d7b63a4c2e11 X-Runtime: - - '0.359161' - X-Frame-Options: - - SAMEORIGIN + - '0.324350' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAGpL91UAA6RTy3ajMAzd9ys47I0TmkzTHCBd9Qs6m9nkCKwQT/yqbQr0 - 68dAkqalmzld6urqdSVlu06K6A2t41rl8TJZxBGqSjOu6jz+/fJMNvGuuMuq - xnkt0RZ3UZRxVqTr+1+rdLPKaDAGLPiqIyhPgv1eqnX//vroH1rZdqs0o7fe - gX3g1nmiQGJhoDcgMnoDDQwBZytSXOSxtw3GdPRUWhpQ/QxHCVwUEiyHvdGt - 0K078acTYinQJpVOmlNGJ9JAN0et5skP0M2wFkvH/TeNWASPjICPfG8wj1kw - PZcYF+liuSaLR7JcvaTp9n61XW7+ZPQjYIxvDPu/+I+Aqf64E3LgKJi7tsS4 - JxVY5s5JwVrozx1PWhOoKt0o/5kxEGaUCQyw1ydUxWbzUHVtRifr4ps0/QsK - E6bxCTuQRmBQXN7oPTIZHqARl3FLrQWCiotB04yenVcyl1Ajaawojt4bt6UU - nEPvktICV94i1kGNFvqhEg19S1R+L9EfNdsLXWs6zZIYVe9QvXGr1UDJHShW - 6i6c7rXCpeYPVzrm+OFaxxyuKV1lufHhK79Z5MgpuRDhSwnUQYphsPBcX280 - 0Oh8o18xN4LAmMWg8KxemPL6/f8AAAD//wMANfNjrDAEAAA= + H4sIAOzSRFcAA6RTy27jMAy89ysM32Ul2aRpA8UpsMBiP6B72UtBW7SjVg+v + JDdxvn4lO6/GvRQ9cjgUqeGQbfZKJu9onTB6nU6zSZqgLg0Xul6nf55/kYd0 + k9+xsnXeKLT5XZIwwfOH6fJxOZ8sGA1BxEKu3IL2JMSHQi+6w79Hv9yp3X4+ + Y/Q6G9mVsM4TDQrzn2A5o1dAzEs4Rb+N5GgZvSAxXxrVgO4SLeQ69bbFlPY4 + KhAyf7PC+e5JGdRZIQ6MDnAkNFujcVRWwX6E7bBwwo+5pUXwyAn4xHcNrlMe + Qi8UpvlsMr0nkwWZzZ9ns9V0uZre/2X0UtDXtw3/Wv2lYOjfb4JUAiV355G4 + 8KQMSrrjo2AtdMeJG+gakATK0rTaf2REwogygAEuhJTBCARqi6iw39+tID3x + m6IMbxwtRj7Y6xo9MTlW0MpTq8IYiaDTPM7E6DF5Jg+7fwWNGTf4hHtQjcQs + OOjKFz1TKKiRtFbmW+8bt6IUnEPvssKC0D5IUIeZd9DFYhoki4q8KPRbw1+k + qQ0dZMwaXW9QvwtrdKSsHWhemH24lXOHU0/XFq60ovHh/D7ZXc/x5g11/vpj + PufhEIbolPumm4Z/OxKPU6MkQgsvYv5W2wqkC+J+Rj2/E34f96QrM/YIo2OL + 3WKuB4Fzi0H3kRoXL+R3/wEAAP//AwAY4kVItwQAAA== http_version: - recorded_at: Mon, 14 Sep 2015 22:34:18 GMT + recorded_at: Tue, 24 May 2016 22:17:16 GMT - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions body: encoding: UTF-8 string: | - R447239196-V3ZPASHA + R688932189-Y9BNDXG7 - 45.75 + 4001.00 Solidus + John + Doe A Different Road Northwest Herndon AL US - 35005 + 58479 - 887cxw - 25364284 + j344dr + 81797405 sale headers: @@ -212,9 +225,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -223,82 +238,82 @@ http_interactions: message: Created headers: Date: - - Mon, 14 Sep 2015 22:34:19 GMT + - Tue, 24 May 2016 22:17:16 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"92ba9a206897682da43b5469e494bfc8"' + - W/"108afb48a5ce97ff47c17cd006e199e4" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 6f70a6570e12a6d541a383dd1bfaa1bb + - d95dcb49-7c9f-477f-8010-3c130da3e47a X-Runtime: - - '0.341943' - X-Frame-Options: - - SAMEORIGIN + - '0.433630' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 - AA== + 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 + dIZv8O4/AAAA//8DAK++pE/nFQAA http_version: - recorded_at: Mon, 14 Sep 2015 22:34:20 GMT + recorded_at: Tue, 24 May 2016 22:17:16 GMT - request: method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/87nz3d/submit_for_settlement + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/g2h893/submit_for_settlement body: encoding: UTF-8 string: | @@ -312,9 +327,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -323,79 +340,79 @@ http_interactions: message: Unprocessable Entity headers: Date: - - Mon, 14 Sep 2015 22:34:20 GMT + - Tue, 24 May 2016 22:17:17 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Cache-Control: - no-cache X-Request-Id: - - 6c9255c91f3d8388364b0da22e4a7cbe + - b0f8b6e5-fe14-485e-9c66-363d1b201f78 X-Runtime: - - '0.117582' - X-Frame-Options: - - SAMEORIGIN + - '0.430655' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 - AP//AwDCuOOnQBkAAA== + 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 http_version: - recorded_at: Mon, 14 Sep 2015 22:34:20 GMT -recorded_with: VCR 2.9.3 + recorded_at: Tue, 24 May 2016 22:17:17 GMT +recorded_with: VCR 3.0.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/success/can_be_voided.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/success/can_be_voided.yml index 6b7df514..6a5ba46f 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/success/can_be_voided.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/success/can_be_voided.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers body: encoding: UTF-8 string: | @@ -10,22 +10,25 @@ http_interactions: Card Holder - sam_grant@kautzer.co.uk + adeline_fay@lang.com Card Holder + John + Doe 10 Lovely Street Northwest Herndon AL US - 35005 + 28088 fake-paypal-future-nonce true + headers: Accept-Encoding: @@ -33,9 +36,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -44,78 +49,82 @@ http_interactions: message: Created headers: Date: - - Mon, 14 Sep 2015 22:34:13 GMT + - Tue, 24 May 2016 22:17:13 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"dda46bc88022034fe64f44f1b44b04da"' + - W/"82d732732c55e17f7ee6c934716d887d" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - bfc6cae8258e9c911bac2c98f2df967d + - 7298e221-1542-4e7f-ade6-07d842e21e8d X-Runtime: - - '0.221793' - X-Frame-Options: - - SAMEORIGIN + - '0.312856' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAGVL91UAA6RTy27bMBC85ysE3SlaitMmBi0HKFD0A9JLL8ZKXMuM+QpJ - xZa/vpTkV6Neghx3Zpa7O8tlq4OSyTs6L4xepnk2SxPUteFCN8v098tP8piu - yjtWtz4Yha68SxImePmtyIvH2TxnNAY9Frl6CzqQGB8r/dAd357C973aH+YF - o7dsr94I5wPRoLD8AY4zegP0vIRz9MtIjo7RK9LztVEWdJdoIZdpcC2mdMBR - gZClB7VuXCz3vIM2HNFltcnaHaMj3Qvt1micpG/gMMH2WHkRptraIQTkBEIS - OovLlMcwCIVpWczyBzJ7Ivn8pSgW9/NFfv+H0WvCkN9a/rn8a8JYf9gI2QiU - 3F9a4iKQOjrqT4+Cc9CdOrbQWZAE6tq0Ovyr6AUTyQhGOJgd6nIzt2/bitEx - OnOjp6+gMeMGn/EAykqMjqsbvwclxw208jxuZYxE0GnZe8roibyIhYIGSetk - uQ3B+gWl4D0Gn1UOhA4OsYlu7KHrK9HYt0Id1grD1vC1NI2h4yyZ1c0K9btw - RveSpQfNK3OIH/dS4Vzziysd3vjiWoc3fFv52gkb4k3+Z5GDphJSxhsl0EQr - +sHiaX38o1FGpxv9iPkBBM4dRocn9eKUl9v/CwAA//8DABOC32IuBAAA + H4sIAOnSRFcAA6RTTW/bMAy951cYvitK3GRZA8cpMGDYD+guuwS0RTtaZcqV + 5Cbur59k56txL0OPfO9RpB7JdHusVfSGxkpNm3g+ncURUqGFpGoT/37+yb7H + 22ySFq11ukaTTaIolSKbJ8vVYrFIUu6DgHmu2AM55uP3nJbd++ujWx3qwzGI + btmgLqWxjhHUmP0AI1J+AwRewTn6pZVAk/IrEvhC1w1QF5FUm9iZFmPe41iD + VBkIVJJwV0L3pICqqZenfOCCqtlrwlFuCccRdsDcSjfWFgbBoWDgItc1uImF + D52sMc6S2fwbmy1ZsnhOkvV8tZ4//En5NaHPbxvxf/nXhKF+Pw5WSlTCXloS + 0rHC22lPj4Ix0J06bqBrQDEoCt2S+6gIgpFkAD2cS+XdrBhUBrHGfoj3hvTC + L5oyvHHaM/Zhx27Rs1JgCa06l8q1VggUZ6GnlJ/Ii3iY/V8gnAqNT3iEulF4 + txe9UtZQIWuNyvbONXbNOViLzk5zA5Kct6DyPR+gC8ncWxYc2dXo9lrslK40 + H2ycNlRtkd6k0RQkGwskcn30B3OpcK5p29wWRjbO3+Ans+s1Tr8gZfsH6w5V + yofozH1xm4Z/WxYulFAxSdLJwN97W4Ky3tzPpJd3/O/DnKjU4x1J+XjF7jHb + gyCEQe/7yI3rLmSTfwAAAP//AwCGrIN6vAQAAA== http_version: - recorded_at: Mon, 14 Sep 2015 22:34:13 GMT + recorded_at: Tue, 24 May 2016 22:17:13 GMT - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers body: encoding: UTF-8 string: | - paypal - - sam_grant@kautzer.co.uk + Card + Holder + adeline_fay@lang.com - paypal + Card Holder + John + Doe 10 Lovely Street Northwest Herndon AL US - 35005 + 28088 fake-paypal-future-nonce true + headers: Accept-Encoding: @@ -123,9 +132,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -134,75 +145,78 @@ http_interactions: message: Created headers: Date: - - Mon, 14 Sep 2015 22:34:13 GMT + - Tue, 24 May 2016 22:17:13 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"2da5a822492be65ba46e58a880f01672"' + - W/"1297624b27064184bbcfc4cf77d74cb2" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 6a748acd7bcef3c6a45f0411ac47b899 + - 83ae41df-6093-4d2d-b8f3-aebcf3c1d337 X-Runtime: - - '0.240197' - X-Frame-Options: - - SAMEORIGIN + - '0.334250' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAGVL91UAA6RTy3baQAzd5yt8vB8PrySFY5us+gXpphuO7BFmYB7ujAyY - r+/YBkLjbHqy1NXV60pK12etoiM6L63J4mkyiSM0pRXSVFn86/0n+xGv86e0 - bDxZjS5/iqJUiny6fHl9mS/nKQ9GhwVfuQNDLNiXwjy3lz9Lej3p03kxS/mj - t2NvpfPEDGjMa2hrUCl/gDqGgqsVGamymFyDMe89pdU1mHaEowapcg96U7lQ - 6u0ADV3QJaVNmkPKB3dHrHfWjNNu4TzCTlh4SV+04BAIBQOKqK0xi0UwSWqM - 89lk+swmSzZdvM9mq/liNZ3/TvlHQB/f1OL/4j8Chvr9NthWohL+3pKQxEpw - wl+TgnPQXjseVGZQlrYx9C+jI4woAxhgsgc0+f5y9Psq5YN18w2a7sFgIiy+ - 4Rl0rTAorh/07pkCt9Co27iFtQrBxHmnacqvzjtZaqiQNU7lO6LarzgH75F8 - UjiQhhxiFdQ4QdtV4qFvjYY2GmlnxUbZyvJhlqQ21RrNUTprOkrmwYjCnsPR - 3ivcan5zpX2Ob661z+GbwpdO1hT+8YtF9pxCKhX+k0EVpOgGC2/1+UYDjY83 - +hnzPQhCOAwKj+qFKe9//xcAAP//AwCydAT3KgQAAA== + H4sIAOnSRFcAA6RTTW/bMAy951cYvitK3KZZA8cpMGDYD+guuwS0RTtaZcqT + 5CTur59k56txL0OPfO9RpB7JdHOsVbRHY6WmdTyfzuIIqdBCUrWOf73+YN/i + TTZJi9Y6XaPJJlGUSpElz7P509NimXIfBMxzxQ7IMR+/57To3v8+u+WhPhwf + k5TfskFdSmMdI6gx+w5GpPwGCLyCc/RTK4Em5Vck8IWuG6AuIqnWsTMtxrzH + sQapMhCoJOG2hO5FAVVTL0/5wAVVs9OEo9wSjiPsgLmVbqwtDIJDwcBFrmtw + HQsfOlljnCXeGDZbsOTxNUlW8+Vq/vA75deEPr9txP/lXxOG+v04WClRCXtp + SUjHCm+nPT0KxkB36riBrgHFoCh0S+6jIghGkgH0cC6Vd7NiUBnEGvsh3hvS + C79oyvDGac/Yhx27Rc9KgSW06lwq11ohUJyFnlJ+Ii/iYfZ/gHAqNL7gEepG + 4d1e9EpZQ4WsNSrbOdfYFedgLTo7zQ1Ict6Cyvd8gC4kc29ZcGRbo9tpsVW6 + 0nywcdpQtUHaS6MpSNYWSOT66A/mUuFc07a5LYxsnL/BT2bXa5x+Q8oW+X5h + fc9DdOa+uE3Dvy0LF0qomCTpZODvvS1BWW/uZ9LLO/73YU5U6vGOpHy8YveY + 7UEQwqD3feTGdReyyT8AAAD//wMAn4PgMbwEAAA= http_version: - recorded_at: Mon, 14 Sep 2015 22:34:14 GMT + recorded_at: Tue, 24 May 2016 22:17:13 GMT - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions body: encoding: UTF-8 string: | - R445425343-DGELLGKA + R430641416-MTPWMFJK - 45.75 + 50.00 Solidus + John + Doe A Different Road Northwest Herndon AL US - 35005 + 48570-2300 - jzvsjg - 19676393 + 5bv5sm + 29016657 sale headers: @@ -211,9 +225,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -222,87 +238,88 @@ http_interactions: message: Created headers: Date: - - Mon, 14 Sep 2015 22:34:14 GMT + - Tue, 24 May 2016 22:17:14 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"1af9a659213d2f448f535551d9e48fc5"' + - W/"adc4b8fae20db2dbb6398ff8633a4d2c" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - acf135c43acbf1b2a765a250550f0488 + - b43d6221-216b-4fd5-bb9e-792d4f96983c X-Runtime: - - '0.301379' - X-Frame-Options: - - SAMEORIGIN + - '0.467184' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 + XsOgKpbW8I3e/AcAAP//AwBJs2yA7RUAAA== http_version: - recorded_at: Mon, 14 Sep 2015 22:34:15 GMT + recorded_at: Tue, 24 May 2016 22:17:14 GMT - request: method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/b68j3y/submit_for_settlement + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/dbqs53/submit_for_settlement body: encoding: UTF-8 string: | - 45.75 + 50.00 headers: Accept-Encoding: @@ -310,9 +327,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -321,78 +340,79 @@ http_interactions: message: OK headers: Date: - - Mon, 14 Sep 2015 22:34:15 GMT + - Tue, 24 May 2016 22:17:15 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"1407175a924b1cb48580acdf7a1125fa"' + - W/"033065b3126c37375f8b76d895910729" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 3257e464b74bb9e3a0f605b754c7f85e + - 8c10cad5-596a-43e0-9635-5bfd9f125df2 X-Runtime: - - '0.296463' - X-Frame-Options: - - SAMEORIGIN + - '0.376259' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 - oK5c3SRV3bHWdMG7PwAAAP//AwAniJIXyhcAAA== + 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 + O2RaMxgAAA== http_version: - recorded_at: Mon, 14 Sep 2015 22:34:16 GMT -recorded_with: VCR 2.9.3 + recorded_at: Tue, 24 May 2016 22:17:15 GMT +recorded_with: VCR 3.0.3 diff --git a/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/success/succeeds.yml b/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/success/succeeds.yml index e62c0bf6..befc0453 100644 --- a/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/success/succeeds.yml +++ b/spec/cassettes/Solidus_Gateway_BraintreeGateway/on_a_payment/PayPal/success/succeeds.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers body: encoding: UTF-8 string: | @@ -10,22 +10,25 @@ http_interactions: Card Holder - lamont.langosh@russel.info + sebastian.simonis@kohler.ca Card Holder + John + Doe 10 Lovely Street Northwest Herndon AL US - 35005 + 55933 fake-paypal-future-nonce true + headers: Accept-Encoding: @@ -33,9 +36,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -44,78 +49,82 @@ http_interactions: message: Created headers: Date: - - Mon, 14 Sep 2015 22:34:10 GMT + - Tue, 24 May 2016 22:17:10 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"ec0d6e8f4b2959fdd26ab4b73825f015"' + - W/"407da596ae449af9541ae6466b25d5b8" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 3c8e4cd4b717f6b62726950a3641f614 + - adaaacf7-5f48-4013-bcc2-8c2c72c0b054 X-Runtime: - - '0.261179' - X-Frame-Options: - - SAMEORIGIN + - '0.309033' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAGJL91UAA6RTy27cMAy85ysM323tM8kutN4ABYp+QHrpJaAt2qtGohxJ - ztr5+sr2vhr3UuTI4ZAUZ0S+b7WK3tE6aWgXz9NZHCEVRkiqdvHP5+/JY7zP - 7njROG802uwuirgU2XozW67u75echaDHQq44APkkxB85rbuPt41/OOpju1pw - dpvt2aW0zicEGrNvYAVnN0CfV3COfhgl0HJ2Rfp8YXQN1EUk1S72tsGYDThq - kCpToA35VAFVxh2ebOMcqlRSaTgbGT23PhjCSYcS2gl2xNxJP+UWFsGjSMBH - vqtxF4sQeqkxzhaz+TqZbZL56nmx2C5X29nmF2fXgqG+qcX/1V8LxvmDKUkp - UQl3eZKQPimCqO7UFKyF7vTiGroaVAJFYRryfzN6woQyggH25hUpe3hsV6Xm - bIzOuVHT30CYCoNP2IKuFabBpBu9B6bAEhp1Xjc3RiFQnPWacnZKXshSQ4VJ - Y1V28L52W8YgGOldmluQ5C1iFdQ4QtdPYuHdGsm/aPQHI16UqQwbd0lrqvZI - 79Ia6ik7ByRy04a/e5lwnvlFS4ceX7R16OGa3BVW1j6c5T+MHDi5VCqcaQJV - kKJfLFzX5z8aaGzq6GfMDSAIYTEoPJkXtryc/x8AAAD//wMAq04AmTEEAAA= + H4sIAObSRFcAA6RTy27bMBC8+ysE3SlaQtw4hiwHKFD0A9JLL8FKXEms+VBJ + Krby9SUlv2LlUuS4s7MPzg7z3VGK6A2N5Vpt4zRZxhGqSjOumm386+UHWce7 + YpFXvXVaoikWUZRzVmRP2Wqdpuuc+iBgPle1oBzx8XupVsP73yf3eJCH40OW + 09tsYNfcWEcUSCy+g2E5vQFCXsA5+qkFQ5PTKxLylZYdqCFSXGxjZ3qM6Yij + BC4Ki6Vnc1CJ5VIrbp/3uhVokgpyOlECuWu1wlmLGo4z7ICl5W7OrQyCQ0bA + RW7ocBszHzouMS6yZfqNLFcke3jJsk36uEmXv3N6LRjr+479X/21YJo/XoXU + HAWzl5UYd6TyqtpTUzAGhtPGHQwdCAJVpXvlPjICYUaZQA+XXAhvCgKNQZQ4 + 3vJekJH4RVGmHie7kQ9Wu0XPTIY19OI8qtRaIKi4CDvl9JS8kKfb/wGFCdP4 + jEeQncDEu+nGFyOTS2iQ9EYUrXOd3VAK1qKzSWmAK+claPzOBxhCMfWSBUVe + JbpWs1ehG00nGZNONTtUb9xoFShbC4qV+uj/zWXCeabtS1sZ3jn/FT+53chx + eo+qaPf1oPzOU3TOfdFN07stCR9VoSBccf+HfP5e2xqE9eJ+Rr308a8Pd1K1 + nnskp3OL3WN2BIExg173mRpXLxSLfwAAAP//AwCtuDzfwwQAAA== http_version: - recorded_at: Mon, 14 Sep 2015 22:34:10 GMT + recorded_at: Tue, 24 May 2016 22:17:10 GMT - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers body: encoding: UTF-8 string: | - paypal - - lamont.langosh@russel.info + Card + Holder + sebastian.simonis@kohler.ca - paypal + Card Holder + John + Doe 10 Lovely Street Northwest Herndon AL US - 35005 + 55933 fake-paypal-future-nonce true + headers: Accept-Encoding: @@ -123,9 +132,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -134,75 +145,78 @@ http_interactions: message: Created headers: Date: - - Mon, 14 Sep 2015 22:34:10 GMT + - Tue, 24 May 2016 22:17:11 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"d54d5017e08a215ab39ca223c4f02efd"' + - W/"4a531c7f254f1cf8ef4fe71db36fff03" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - f90ce8f4a6e0e32f434f5a95a1189423 + - b7138621-0349-4269-ab6f-b0dcbe109bb1 X-Runtime: - - '0.289195' - X-Frame-Options: - - SAMEORIGIN + - '0.351483' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAGJL91UAA6RTy3KjMBC85yso7kK246yNC+Oc9guyl72kBjSAEmnESiI2 - +foVYDvekMtWjtPT8+qWssNJq+gNrZOG9vEyWcQRUmmEpHof/3r6ybbxIb/L - ys55o9Hmd1GUSZFvlqvtj3STZjwEAxZyZQPkWYjfC3ro3/+kfnPUx9N6lfHb - 7MCupHWeEWjMW+hbUBm/gQaGgnMUkVT72NsOYz5mSqNboH6GowapcgXakE8U - UG1c82g751AlkiqT8YkxcNvG0LxzBacZdsTCSf/FFhbBo2DgI9+3uI9FCL3U - GOerxfKBLVK2XD+tVrv79W65+J3xj4KxvmvF/9V/FEzzR0NYJVEJd11JSM9K - sMKdm4K10J83noRmUJamI/8vYyDMKBMYYG9ekfLmPt02x4xP0SU3afoChIkw - +Ign0K3CJJh0o/fIFFhBpy7nFsYoBIrzQdOMn5NXstRQI+usyhvvW7fjHIKR - 3iWFBUneItZBjSP0wyQe9tZI/lmjb4x4VqY2fLolaak+IL1Ja2ig7B2QKMwp - vNvrhMvMb1o69vimrWMP1xWutLL14Ut+YeTIKaRS4YsyqIMUw2HhZ31+o4HG - 545+xtwIghAWg8KzeeHK69f/CwAA//8DALTaeVYtBAAA + H4sIAOfSRFcAA6RTy27bMBC8+ysE3Snagh03Bi0HKFD0A9JLL8FKXNms+VBI + Krby9SUlv2LlEuS4s7MPzg7Z5qhk8obWCaPX6SybpgnqynCht+v0z/Mv8iPd + FBNWtc4bhbaYJAkTvFjmi/njw2LJaAgiFnLVDrQnIX4v9aJ7f330y4M6HOc5 + o7fZyK6FdZ5oUFj8BMsZvQFiXsI5+m0kR8voFYn5yqgGdJdoIdepty2mtMdR + gZCFwzKwBejMCWW0cE97s5NoswoYHSiR3OyMxlGLGo4j7IClE37MrSyCR07A + J75rcJ3yEHqhMC3y6eyBTBcknz/n+Wq2XM1mfxm9FvT1bcO/Vn8tGOb3VyG1 + QMndZSUuPKmCqu7UFKyF7rRxA10DkkBVmVb7j4xIGFEGMMClkDKYgsDWIirs + b3kvSE/8pihDj5PdyAer3aJnJscaWnkeVRojEXRaxJ0YPSUv5OH2/0Bjxg0+ + 4RFUIzELbrrxRc8UCrZIWiuLnfeNW1EKzqF3WWlBaB8k2IadD9DFYhoki4q8 + KPQ7w1+k2Ro6yJg1ertB/Sas0ZGydqB5aY7h31wmnGe6tnSVFY0PX/GT2/Uc + b/aoi8fXptofGB2ic+6bbhre7Uj8qBolEVqEPxTy99rWIF0Q9zPqpU94fbyT + rs3YI4yOLXaPuR4Ezi0G3UdqXL1QTP4DAAD//wMA3aky8MMEAAA= http_version: - recorded_at: Mon, 14 Sep 2015 22:34:11 GMT + recorded_at: Tue, 24 May 2016 22:17:11 GMT - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions body: encoding: UTF-8 string: | - R683011820-VGXH7FSZ + R088986822-TQNNXT9U - 45.75 + 50.00 Solidus + John + Doe A Different Road Northwest Herndon AL US - 35005 + 82722-2878 - h398hw - 71286979 + 9qpckw + 72549657 sale headers: @@ -211,9 +225,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -222,87 +238,88 @@ http_interactions: message: Created headers: Date: - - Mon, 14 Sep 2015 22:34:11 GMT + - Tue, 24 May 2016 22:17:12 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"7d31e00fd3e73331fbf133e0825bdf00"' + - W/"9634c5f0ce3a9f2934158d2a139046df" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - e605389f6104907e761f855205a3b554 + - bbe4ff80-9b3e-4fe5-9fcf-bf0306d1cb1f X-Runtime: - - '0.305350' - X-Frame-Options: - - SAMEORIGIN + - '0.491132' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 http_version: - recorded_at: Mon, 14 Sep 2015 22:34:11 GMT + recorded_at: Tue, 24 May 2016 22:17:12 GMT - request: method: put - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/5jm8f4/submit_for_settlement + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/transactions/jqjyxc/submit_for_settlement body: encoding: UTF-8 string: | - 45.75 + 50.00 headers: Accept-Encoding: @@ -310,9 +327,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -321,78 +340,79 @@ http_interactions: message: OK headers: Date: - - Mon, 14 Sep 2015 22:34:12 GMT + - Tue, 24 May 2016 22:17:12 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"ae193a7f6a2efb68ddc99fce87be7399"' + - W/"f2d5fb01b3b3d3f9744531734bceddfb" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - dc45692e06bc266acc5f2e6f2e0df451 + - 1d9fec3f-f068-4924-95ae-7cd4d6e0ec1f X-Runtime: - - '0.308121' - X-Frame-Options: - - SAMEORIGIN + - '0.379971' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAGRL91UAA+RY227cNhB9z1cs9p2Wdr2218FaiRM7lyIogjgu2r4YlDha - MZFIlaRsb7++Q1HSSisqcS9AC/RNmjm8zHA4c4abF49FPrsHpbkUF/PFUTif - gUgk42J7Mb/9/Ias5y+iZxujqNA0MYiKns1mG86iky/FOl1tAvy0Em2oqXSk - wZgcB2+CRmB1ZldCpGkOm6D+tLKkUgpX2hGuJcEFIbq9udoEY7EF00JWwkSr - k6Ozk03Q/FlFASrJqDCEJokVEtyNLhXgSj6VHSIVA2V/Pp2uj8PFYr0MyU9v - f3539ubm103Qaes9KqAGGKFmZvd9MWf4a3gB82gZLk5IeE4Wq8/L5fPj1fPF - AkfvB9Tjq5I9ffwSx+8HND7SRqId9sc5/WyxXJ+en523bkdpypU2RNACopLu - Sppvgp7IYXLa/M8Ezy/mRlUwDxpdIouSip1HAwXleZSju4U5yqnYSp29VJXW - kB9xkcpN4BAO/QCx5sa3QplJ4ZOn9PFQagNgb/Mm5rkNps5+3ySdrR7lX7Nb - GwwgjBvGFGjtc8yjAcHsOU1CcpnQnBvf9Aq2eI18fpJ4Z/I66r37xSBWu2lz - nNqOJjQvM7p8Eur4eyhR4WnwZHxSvcNBm9JKMDI+ob1GN3eAKkV3AyU6spdf - fJPUWQUKwFs8RPompZXJpOK//6lpY2qSzIvJeFn+2zEYXc6ueJoCpkYz+yQp - s+l1APAHZvSjVCZ7AG3wrh7qhoEavQMlmBSboJP0wzW6/LAJms9RtEbHJ2GI - ibkvGgdtdCswP7DZDRYG0DOZzi7ryKJ46fuwyXjGCrGH9uWTsY0jLn1Djr8R - 6NF6FR6MaTV12PcDosnQJOWQM92E370moJRUBL1cSqHBe6NrXM9hQ3T0Hsvc - NwHtFMM48M/yTUxtxv39eORYaKFbPLwHukPNF3AXC2ueHuezTalkgquhH9oL - SWu41xl78HDFRRjiYUxpJ0YaDPXoskTNPTDv6BpRe5AxbneFPh7DRru8lzyx - 54AXUeEIDIsY1NiWyhIPXMVxiQmUoY/EERmvCh6hKFvaEEuZAxXzKKW5tiSq - A7Q0Ba0gCVUtJzDyK4goOz5fZw8Ir/+cJua+ylPnqJUvQeGcxG7CWwVLrtyZ - WoaQRTbHHIhGyB1QNQTWkma1pvYTm4KMv0jaHWUyrz3rT6q8oFsglcqjzJhS - Pw8CipTF6KNYUS7sVWhi+AjTb4CcyRaAuwIwSNldLrcyqMRXIR/EUSm2L0Dc - cyWFxVxoKlgsH5F8dUs0uVBBSZGR3bqBNuacwKkzoLnJcOewR/RkDsQg5mav - d7+NqlJ4bhh42yq3/LCHOtR0dcXSX07zPbQnazZNd0rmPUQraNyodYVpDiuj - +LrHDKTDJCpTYrVUJNBfdaxsfSZZldS0vOe2TuZAleC/VdDcIRTjKXBMtqPr - ZC8niEISzb5OXJpO3/DM4aVp+heScQxBtRvQiq4k1wjAiZqDsTcN2TwqivKJ - HUKH72Zo+qQ9a+m3TjViqvtxHtLIlVmB7Bww0bvWp5Z1O+xxIC0xN0FES447 - GcudncHY0L9v+/JbtusqLrjB8L1Lpbrbs7L/oSc87fN/wvJO0lwQV+mwKfRy - 5irWieLlJO/u6bu6VDcTpESiJRlBpkqsEz33/ACJ21LGi8UtH6xjyz3Byu5p - GhjXdary6sDNIts6NVF4pvpcrBPjvQ0nRZZtXz7Qrons1eldxc+oEJBHNzLn - rNKYzRqB62rUveUpKcAUw7BrywfijnSkRV/EldKuMWJgsMdvu4Whyn9Ava7K - v/wQM3rxeSIcHq3RWIaVfxu2s8RwRWLum7BKEk/jjscyYbu1vKxs3zKOj4ZC - EC6QaFeuS7XPXO455q55f9oEU7ghje3ZOmS7qwMuPAn8/nw1/30tBTauxZAi - T6JrYpphaiF452wwArFvQGP2Wxv9XR6KMCzo7v2o/n4Jj5gPc7CkrHZVp+4G - OOex6OPlL2SRxCGNz9Oz09MwSeJ0tVqcLmF52vNyyyGG7QeKby4/XBMIl4yd - nsRJug4XNEbPjnD/FJ10Lnk6m0TqV23tBq6uX92+Javw5CQ5h3SV2sa0U+79 - CM5RPrLca099Cav2svPo9ae791cEluskPmXHFChd0RVrT2KwniK9B8YfZCZa - 1Ojd0Ym7F5DoSkKL3QvbK57nKMZINE1f2VTA6w/v375/9eEa0/kUpO0MSlOH - JYteX378fPvpGi3C1LgXtw8aE29VB4Vynz+j8ChcDKtlT+kfOfG+/X1YGwNd - 5RonqfaODaaLnv0BAAD//wMAqLxdHM0XAAA= + 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 + hkWqybHedvG7/wEAAP//AwCdWQbqOhgAAA== http_version: - recorded_at: Mon, 14 Sep 2015 22:34:12 GMT -recorded_with: VCR 2.9.3 + recorded_at: Tue, 24 May 2016 22:17:12 GMT +recorded_with: VCR 3.0.3 diff --git a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/with_a_payment_method_id/returns_a_client_token.yml b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/with_a_payment_method_id/returns_a_client_token.yml index f7e489d5..b5c76bd4 100644 --- a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/with_a_payment_method_id/returns_a_client_token.yml +++ b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/with_a_payment_method_id/returns_a_client_token.yml @@ -2,12 +2,13 @@ http_interactions: - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token body: encoding: UTF-8 string: | + 2 headers: Accept-Encoding: @@ -15,9 +16,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -26,13 +29,11 @@ http_interactions: message: Created headers: Date: - - Mon, 14 Sep 2015 19:38:23 GMT + - Tue, 24 May 2016 22:15:47 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close X-Frame-Options: - SAMEORIGIN - SAMEORIGIN @@ -40,13 +41,8 @@ http_interactions: - 1; mode=block X-Content-Type-Options: - nosniff - X-Ua-Compatible: - - chrome=1 X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: @@ -54,31 +50,41 @@ http_interactions: Content-Encoding: - gzip Etag: - - '"e0970b4b548ebcfd8f8a22d7875abc4c"' + - W/"4f90b3341aa7bd49aaed55661eee770f" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 7c09e8af-2964-4d91-a294-a9186bf4a1f6 + - e50ac1b7-7441-4284-88fd-064ebc5d90eb X-Runtime: - - '0.392126' + - '0.085118' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 + 8BvcBgAA http_version: - recorded_at: Mon, 14 Sep 2015 19:38:23 GMT -recorded_with: VCR 2.9.3 + recorded_at: Tue, 24 May 2016 22:15:47 GMT +recorded_with: VCR 3.0.3 diff --git a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/with_a_payment_method_id/returns_a_content_type_of_application/json.yml b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/with_a_payment_method_id/returns_a_content_type_of_application/json.yml index dba433d3..1cc6aca3 100644 --- a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/with_a_payment_method_id/returns_a_content_type_of_application/json.yml +++ b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/with_a_payment_method_id/returns_a_content_type_of_application/json.yml @@ -2,12 +2,13 @@ http_interactions: - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token body: encoding: UTF-8 string: | + 2 headers: Accept-Encoding: @@ -15,9 +16,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -26,13 +29,11 @@ http_interactions: message: Created headers: Date: - - Mon, 14 Sep 2015 19:38:22 GMT + - Tue, 24 May 2016 22:15:46 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close X-Frame-Options: - SAMEORIGIN - SAMEORIGIN @@ -40,13 +41,8 @@ http_interactions: - 1; mode=block X-Content-Type-Options: - nosniff - X-Ua-Compatible: - - chrome=1 X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: @@ -54,31 +50,41 @@ http_interactions: Content-Encoding: - gzip Etag: - - '"24eda6b83c8f33053954ead04a5c7dc3"' + - W/"b0dccb7e5f91b3882609a2e0791c3e9e" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - c611f258-78a2-4223-aa6f-d83f2b7276e4 + - 9c09ad7d-d7b1-4e11-a542-1192489976f1 X-Runtime: - - '0.257911' + - '0.248164' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAC4i91UAA7RUTW/aQBC951egvRbwtwELEqVJo+aQXJKc2gqtdwfYst51 - 9sNg0vz3rjHQgtJIlVofx2/ee/NmtOOLdcE7FSjNpJigoO+jDggiKRPzCXp6 - vOkN0cX52ZhwBsL0jFyCOD/rdMYV5hbOX9CuFWVBF2FrFlKxDTaucuMYQJWK - CYMyBDjEcQg0J0mapjAbkAHEPo3oLB0k4TCHIY6CAAOlSUwgHYQEXHWYgJ9E - JIiHP4gCbIBOsZmEfpD0/FEviB+DURYNszDsp+kw9ZNBGn3w3ffV+n6YFqDI - AgszZXSyyUVSb55HZrAqVus4bBGlzTkj0yXUk7oY0e+r53K5zqtovTGoi4gU - MzZ/Utz5XxhT6szzcMn6Gguay3U/V9gNpwDmztkK130iiyyOI28vrL1TWa/N - cepovCrwWgWrtoE1igvMObjcNMq+fOsiEBVTUhSwzXCn2+C2LJcl+1/mnAbW - Gow+EdjW3uRG7fpP8K7Sr0AU8l1fTa/AvDaMuMFfkD0i2Z3eAfE+1WsXmYWr - XT8AsQo+CZxzoCgzysLxr0aJS7m05b9NcasxpVO9VfFaicZXiesS8xNHbbHx - QpkuOa7vceGsoYfSsRxWfevwwnLu8IpVmNS/LDvHsMZFyaEx55Wla7Ia1OXc - ETSX80eokdphc6zhr7b8xl2QBZCltKbfTrNDUqaAmI97/ta/O3C5+uz69gH8 - duP38h7MSqrlG/+cmpzNOBNNKFZUYNxrcLfbAspmmGvXcPB8dYgNFVgbh9sW - omZgxh3N/JCPPmxkR7Lf7SUh0u5I9H4dVin3Pta3Wl5J2izq6eG6WS6RTDRR - HpO9jr32oTwbe8dP6E8AAAD//wMARsrGQ3kFAAA= + H4sIAJLSRFcAA6RVXW+bShB976+I8t5bWEJukZJUsR0wyKxrbC+wb7BLAngX + +xbz+evvrJ2kqeRbVboPFvIyO2fOOTPD3bdeiqs2+1EX++r+Wv9Lu77KKrbn + RfVyf73d2J+/Xn97+HTHRJFVx8/H/S6rHj5dXd21iWiyh2zwEI28MQmtxi33 + w2Lq5TwK9qnhHTJpa+o8kKKhiAxs7h3SalUsC0/ScDvG42OHxycDb9weh76G + pTv4pRD+bKv7o9/FIZV4fNHxjBY09HbxuDPhP/LD7UBLWuANz/2RFDHCxXIz + yZ8dPNDQ1mgYPMfRyvLLxx4XWofX2oDtFeTe93iz13BxYyw3u245c3u/3P3w + Z4+db/c6PAcsdcEk3sehqUVI7L5HhyItiZlVTyafcSON+A2eeYxv4E5JOx56 + dRLi5wQR83skjssw+IcbdpcYecFLfJMBX9CkTJEpk5ATJjvFf8/nQcfGfbtA + ELs2R8DbxdK6WUhviEPR8LknaMhz7hAjjnZNjKzjslxp/mAdQe8ycWyI8dtM + eg2OxC3bCA0b/MiNF80vrDJ1hEgrpcPksDDifoFwm0p6oAYZ4ig4pOjmVBfk + qVOHKH9Gtzyk0boDrU2URB7E6+LVr/f63KIDvfsDxGgryE0irwbfi2QeaGzu + 3y4GK2fOrmHIbqjjtdnULJi0wfcAvCEVYAuObHMhoR7lxcxv0xBqQnkOMePC + uKS3275hRie93NqV9sgQ0ZhOhnTq3roy1/h8Mi6Lr20c4ZFGkOs3Wp54RERL + 7Ev34XxqIsA7psOfeXPKF5p5OhfQ81hp+bdbXcj9ymMR2k0c9iZ3RMn+EOM/ + tCmewTPu5Erfpy0iJY88EUAtsewFBXzIpVOIYY5twq/+3btT3TI4MGNSx5FY + xqEulL9bYwL5t+dePveWp+6nFanTKdyH2ebSLjPykfOj6geROfaROb04eb62 + OjYF/yoCHnkTaiieqs+CX2ZDaUUj6IloUtO1CfOjtdyxxpPO4D0l/8f3c9yF + 3oV5IGWCLJ1PzQ74ww7q3u9RR4AGWFt9wH/jD17WqcFdVTtoqLGKCNAKeNED + k1YDPd7wJ7PdSKJxZA3J8FP7C/PWUklhr5hC4XJ4D/WqvYbfZx+wqbRrhrYw + Cx/4bjHcU1hip7iloT0C/+Gt7/xBzQ7sYac/pJJ/1H+81BcfZnMCe7aFWrR1 + eN4JTOGdZhHrrAKuEpvrCLcrZO3g/NYVZBNMPeu8/0Rz8m1LoO+9mqocksK8 + YKXTz532Wvflvab6hgKO3p64ISrdSru/+3L+Fn26+/LrV+pfAAAA//8DAJas + sAvcBgAA http_version: - recorded_at: Mon, 14 Sep 2015 19:38:22 GMT -recorded_with: VCR 2.9.3 + recorded_at: Tue, 24 May 2016 22:15:46 GMT +recorded_with: VCR 3.0.3 diff --git a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/with_a_payment_method_id/returns_an_http_success.yml b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/with_a_payment_method_id/returns_an_http_success.yml index 0ba6e526..01703110 100644 --- a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/with_a_payment_method_id/returns_an_http_success.yml +++ b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/with_a_payment_method_id/returns_an_http_success.yml @@ -2,12 +2,13 @@ http_interactions: - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token body: encoding: UTF-8 string: | + 2 headers: Accept-Encoding: @@ -15,9 +16,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -26,54 +29,62 @@ http_interactions: message: Created headers: Date: - - Mon, 14 Sep 2015 19:38:22 GMT + - Tue, 24 May 2016 22:15:46 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"114b836af38ebadd15f19c51ca9cb106"' + - W/"092f7279640d1445197515946b3ced79" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 291d71752b63cfac034c5818e1d3e9ce + - eec86d64-fa74-4e31-bb3d-957e5419a238 X-Runtime: - - '0.119904' - X-Frame-Options: - - SAMEORIGIN + - '0.338640' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 + 7+TcBgAA http_version: - recorded_at: Mon, 14 Sep 2015 19:38:22 GMT -recorded_with: VCR 2.9.3 + recorded_at: Tue, 24 May 2016 22:15:46 GMT +recorded_with: VCR 3.0.3 diff --git a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/without_a_payment_method_id/returns_a_client_token.yml b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/without_a_payment_method_id/returns_a_client_token.yml index c5583c56..81a26994 100644 --- a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/without_a_payment_method_id/returns_a_client_token.yml +++ b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/without_a_payment_method_id/returns_a_client_token.yml @@ -2,12 +2,13 @@ http_interactions: - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token body: encoding: UTF-8 string: | + 2 headers: Accept-Encoding: @@ -15,9 +16,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -26,13 +29,11 @@ http_interactions: message: Created headers: Date: - - Mon, 14 Sep 2015 19:38:25 GMT + - Tue, 24 May 2016 22:15:48 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close X-Frame-Options: - SAMEORIGIN - SAMEORIGIN @@ -40,13 +41,8 @@ http_interactions: - 1; mode=block X-Content-Type-Options: - nosniff - X-Ua-Compatible: - - chrome=1 X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: @@ -54,31 +50,41 @@ http_interactions: Content-Encoding: - gzip Etag: - - '"65b37080f7126ea9c3c54bdc07e790f5"' + - W/"540338fd5f35651602b0b0a483fd4443" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - e365c9a0-bc90-4add-bd27-bc89ac447dff + - 68ed77fc-2a77-4934-af8f-1db106d006b4 X-Runtime: - - '0.549933' + - '0.080440' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 + s0T+3AYAAA== http_version: - recorded_at: Mon, 14 Sep 2015 19:38:25 GMT -recorded_with: VCR 2.9.3 + recorded_at: Tue, 24 May 2016 22:15:48 GMT +recorded_with: VCR 3.0.3 diff --git a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/without_a_payment_method_id/returns_a_content_type_of_application/json.yml b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/without_a_payment_method_id/returns_a_content_type_of_application/json.yml index 4c8dc7f9..a652aa17 100644 --- a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/without_a_payment_method_id/returns_a_content_type_of_application/json.yml +++ b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/without_a_payment_method_id/returns_a_content_type_of_application/json.yml @@ -2,12 +2,13 @@ http_interactions: - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token body: encoding: UTF-8 string: | + 2 headers: Accept-Encoding: @@ -15,9 +16,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -26,54 +29,62 @@ http_interactions: message: Created headers: Date: - - Mon, 14 Sep 2015 19:38:24 GMT + - Tue, 24 May 2016 22:15:48 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"8d3ef251dfb3b3a82dab8495665ccc5c"' + - W/"82aac4f66208d904a7c6ab0f42638667" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 6577f0925af104edfffa91b1b5849af6 + - 7398c5b8-5714-4d11-8019-0f69a0e0d144 X-Runtime: - - '0.133121' - X-Frame-Options: - - SAMEORIGIN + - '0.081022' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 + XVHcBgAA http_version: - recorded_at: Mon, 14 Sep 2015 19:38:24 GMT -recorded_with: VCR 2.9.3 + recorded_at: Tue, 24 May 2016 22:15:48 GMT +recorded_with: VCR 3.0.3 diff --git a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/without_a_payment_method_id/returns_an_http_success.yml b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/without_a_payment_method_id/returns_an_http_success.yml index a7442765..d416a48f 100644 --- a/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/without_a_payment_method_id/returns_an_http_success.yml +++ b/spec/cassettes/Spree_Api_BraintreeClientTokenController/POST_create/without_a_payment_method_id/returns_an_http_success.yml @@ -2,12 +2,13 @@ http_interactions: - request: method: post - uri: https://ym9djwqpkxbv3xzt:4ghghkyp2yy6yqc8@api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token body: encoding: UTF-8 string: | + 2 headers: Accept-Encoding: @@ -15,9 +16,11 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.48.1 + - Braintree Ruby Gem 2.62.0 X-Apiversion: - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 Content-Type: - application/xml response: @@ -26,54 +29,62 @@ http_interactions: message: Created headers: Date: - - Mon, 14 Sep 2015 19:38:24 GMT + - Tue, 24 May 2016 22:15:47 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - Connection: - - close + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff X-Authentication: - basic_auth - Strict-Transport-Security: - - max-age=31536000 - - max-age=31536000; includeSubDomains X-User: - s8282g6qcjgm2dfk Vary: - Accept-Encoding Content-Encoding: - gzip - X-Ua-Compatible: - - IE=Edge,chrome=1 Etag: - - '"e476ac28f6a84e2b6b1a3c1695e63aa8"' + - W/"f8970d59e8656c94b5e56d8f1ee112ef" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - e87efcc242becd386443e450e135eed1 + - a03be3f2-2acb-4dca-b81a-f90d69ea2568 X-Runtime: - - '0.096052' - X-Frame-Options: - - SAMEORIGIN + - '0.304431' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIADAi91UAA7RUTW/aQBC951egvRb8bWwsSJQmjZpDcklyaiu0Xg+wZb3r - 7IfBpPnvXWOgBaWRKrU+jt+89+bNaMcX65L1apCKCj5BvuOhHnAiCsrnE/T0 - eDNI0cX52ZgwClwPtFgCPz/r9cY1ZgbOX9CuFWV+H2GjF0LSDda2cmMZQFaS - co0yFCcQpcMQe1Ecpb4XB8MEJxEJvdRP/dHQBwIe5GmaeCEh2M+HoVfEOA7S - osBhEvg/iASsoZhiPQk8Px54o4EfPfqjLEyzIHJCPwiSZJiEHzz7fTWeFwxL - kGSBuZ7SYrLJedxsnkc6WZWrdRR0iMrkjJLpEppJU46K76vnarnO63C90aiP - iOAzOn+SzPpfaF2pzHVxRR2FeZGLtZNLbIeTAHPrbIUbh4gyi6LQ3Qsr91TW - 7XKcWhq39t1OwchtYK3iAjMGNjeFsi/f+gh4TaXgJWwz3Om2uC3LZUX/lzmr - gZUCrU4EtrU3uVG3/hO8rTg18FK866vt5Zg1mhI7+AsyRyS70zsg3qd67SO9 - sLXrByBGwieOcwYFyrQ0cPyrVWJCLE31b1PcakyLqdqquJ1E66vCTYXZiaOu - 2HopqKoYbu5xaa2hh8qyHFZ9a/HcMGbxktaYNL8sW8ewxmXFoDXnVpVtMgrk - 5dwStJfzR6gWymJzrOCvtvzGXZAFkKUw2umm2SELKoHoj3v+zr89cLH6bPv2 - Afx24/fiHvRKyOUb/6yamM0Y5W0ohteg7Wtwt9sCymaYKdtw8Hx1iA2VWGmL - 2xbCdmDKLM38kI86bGRHst/tJSHC7EjUfh1GSvs+NrdKXImiXdTTw3W7XCIo - b6M8Jnsdu91DeTZ2j5/QnwAAAP//AwBZy6breQUAAA== + H4sIAJPSRFcAA6RVX2+bSBB/z6eI8t4rXkyuSE6q2A4YZNY1xgu7b7BLAngX + +4oBw6e/wW7SVPJVle4BWV5mZ+b3Z4bJ15OSt036vcr35cPd6C/t7jYt+V7k + 5evD3TawPn25+/p4M+EyT8vjp+N+l5aPN7e3kyaWdfqYdi5ikdvHoVk7xb5b + ztxMRP4+0d1DqixtOPeVrBkiHV+4h6Rc56vc6VfBWsPI0XHxhFbzp7Fnb3UP + bVtavJ5oIAovwMMjaZBJjIiigSuZYhncQazAGVV0RAOS4R7+9WvN67fdi407 + FloaC/0XGq1Nr3g64Vxr8UbrsLXuvGJ/wsFew90YefOd5gUUzl6/e/On1rNO + I/jtsBpJrvCehoYWIbn7Fh3ypCBGWj4bYi70JBJjPHe5COBOwVoRulUc4pcY + EeNbJI+r0P9H6FYb61kuCjxOAS9wUiTIUHEoCFct4Hf3YuG3vN83SwSxG6OH + ejuqzPFSuR0NZS0WgDcUmbCJTqNdTZF5XBWAszOPwHcR2xbEeE2q3BpH8p4H + UsO6OAr9VfNys0hsKZNy4GF6WOr0tES4SRQ7MJ10NPIPCRqf+4I8VWKTQZ/e + KQ5JtGlzFhoojlyIH8mLXu57f07e5hSdDhCjrSE3idwKdM/jha/xhXe/7MyM + 27uaI6tmttukMyPnygLdfdCGlFBbCmQZSwX9DFrMvSYJoSeUZRDTL/VrfDvN + W83ozJdTOcrqOSIaH5EumTn3jso0sZj2q/xLQyNwRQS5fsPlGUdEtNi6dh/O + ZwaCesek+zNtzvlCI0sWEjyPBy7/dsoruX/gWIZWTcOTIWxZ8D+s8R/c5C+g + mbCzgd/nLSKFiFzpQy9UnSSD+pBrxCCG25YBT/W7d+e+lX/g+rSikVzRcCQH + fbf6FPJvL16+eMsd7iclqZIZ3IfZFsoqUvIR89PgB5na1pHbJ3nWfGO2fAb6 + lQQ0cqdMH3AOPvN/mY2BKxaBJ6JpxTYGzI/WCNvszzyD9oz8H90vcVe8C/NA + ihiZIzEzWsDf0rB9v8dsCRxgbf2h/ht+0LJKdOEMvQOHGi+JBK4AFztwZdbg + 8Vo8G02giCaQ2cXdT+6vzFsDuw72iiGHugLeQ7/DXsPvsw+1mbIqjrYwCx/w + bjHcG2rJ3YAtCa0e8HdvvvO6YXZgD9unQ6LER/77a774MJtTCjsEetE24WUn + 8KHeeRbxiJeAVWFjE+FmjcwdnN87kgT+zDUv+0/WZ922BHzvVmzIAfs8WeCB + p5877Uff1/fa4BsGdUbNGRtiyim1h8nny7foZvL516/UvwAAAP//AwD2D/Ua + 3AYAAA== http_version: - recorded_at: Mon, 14 Sep 2015 19:38:24 GMT -recorded_with: VCR 2.9.3 + recorded_at: Tue, 24 May 2016 22:15:47 GMT +recorded_with: VCR 3.0.3 From 9ce68c8cf12d994cda0b3931a312b3280db0d0ad Mon Sep 17 00:00:00 2001 From: "Hector E. Gomez Morales" Date: Thu, 12 May 2016 21:14:18 -0500 Subject: [PATCH 108/163] Ignore AVS response code in Paypal transactions. --- .../solidus/gateway/braintree_gateway.rb | 21 ++++++++++++------- .../solidus/gateway/braintree_gateway_spec.rb | 4 ++-- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/app/models/solidus/gateway/braintree_gateway.rb b/app/models/solidus/gateway/braintree_gateway.rb index 3a1e7157..9655bd28 100644 --- a/app/models/solidus/gateway/braintree_gateway.rb +++ b/app/models/solidus/gateway/braintree_gateway.rb @@ -167,16 +167,21 @@ def message_from_result(result) end def build_results_hash(result) - if result.success? - { - authorization: result.transaction.id, - avs_result: { - code: result.transaction.avs_street_address_response_code - } - } + return {} unless result.success? + + # We ignore avs response when doing a Paypal transaction + if result.transaction.paypal_details.authorization_id.present? + avs_code = nil else - {} + avs_code = result.transaction.avs_street_address_response_code end + + { + authorization: result.transaction.id, + avs_result: { + code: avs_code + } + } end def handle_result(result) diff --git a/spec/solidus/gateway/braintree_gateway_spec.rb b/spec/solidus/gateway/braintree_gateway_spec.rb index 72e63650..b36bd0aa 100644 --- a/spec/solidus/gateway/braintree_gateway_spec.rb +++ b/spec/solidus/gateway/braintree_gateway_spec.rb @@ -280,12 +280,12 @@ auth = payment_method.authorize(5000, card, {}) expect(auth).to be_success expect(auth.authorization).to be_present - expect(auth.avs_result["code"]).to eq "I" + expect(auth.avs_result["code"]).to be_nil capture = payment_method.capture(5000, auth.authorization, {}) expect(capture).to be_success expect(capture.authorization).to be_present - expect(capture.avs_result["code"]).to eq "I" + expect(capture.avs_result["code"]).to be_nil end it "succeeds capture on pending settlement" do From f3e149a6718c0207e1a83477135e4308442aba15 Mon Sep 17 00:00:00 2001 From: "Hector E. Gomez Morales" Date: Wed, 25 May 2016 12:07:26 -0500 Subject: [PATCH 109/163] Get client token from braintree only in the payment page. --- .../backend/braintree/solidus_braintree.js | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/lib/assets/javascripts/spree/backend/braintree/solidus_braintree.js b/lib/assets/javascripts/spree/backend/braintree/solidus_braintree.js index 3e3840a8..0f84d25c 100644 --- a/lib/assets/javascripts/spree/backend/braintree/solidus_braintree.js +++ b/lib/assets/javascripts/spree/backend/braintree/solidus_braintree.js @@ -3,6 +3,7 @@ Spree.routes.payment_client_token_api = Spree.pathFor("api/payment_client_token") var braintreeDropinIntegration; +var paymentForm = "#new_payment"; var cardSelector = "#new_payment [name=card]"; var getClientToken = function(onSuccess) { @@ -40,17 +41,19 @@ var attachDropIn = function(data) { }; $(document).ready(function() { - if ($(cardSelector).length) { - $(cardSelector).on("change", function() { - if ($(cardSelector + ":checked").val() === "new") { - getClientToken(attachDropIn); - } else { - if (braintreeDropinIntegration) { - braintreeDropinIntegration.teardown(); + if ($(paymentForm).length) { + if ($(cardSelector).length) { + $(cardSelector).on("change", function() { + if ($(cardSelector + ":checked").val() === "new") { + getClientToken(attachDropIn); + } else { + if (braintreeDropinIntegration) { + braintreeDropinIntegration.teardown(); + } } - } - }); - } else { - getClientToken(attachDropIn); + }); + } else { + getClientToken(attachDropIn); + } } }); From 2c083f45abac515d45d47a800589737a773f91b5 Mon Sep 17 00:00:00 2001 From: "Hector E. Gomez Morales" Date: Fri, 27 May 2016 18:08:53 -0500 Subject: [PATCH 110/163] Add placeholder text for each of the credit card inputs. --- app/models/solidus/gateway/braintree_gateway.rb | 12 ++++++++++++ .../payment/_braintree_initialization.html.erb | 5 +++++ .../spree/frontend/braintree/solidus_braintree.js | 9 ++++++--- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/app/models/solidus/gateway/braintree_gateway.rb b/app/models/solidus/gateway/braintree_gateway.rb index 3a1e7157..88fe5c4b 100644 --- a/app/models/solidus/gateway/braintree_gateway.rb +++ b/app/models/solidus/gateway/braintree_gateway.rb @@ -153,6 +153,18 @@ def voidable?(response_code) ].include?(transaction.status) end + def card_number_placeholder + '4141 4141 4141 4141' + end + + def expiration_date_placeholder + '01/2020' + end + + def card_code_placeholder + '123' + end + private def message_from_result(result) if result.success? diff --git a/app/views/spree/checkout/payment/_braintree_initialization.html.erb b/app/views/spree/checkout/payment/_braintree_initialization.html.erb index 8b541b48..16aa4527 100644 --- a/app/views/spree/checkout/payment/_braintree_initialization.html.erb +++ b/app/views/spree/checkout/payment/_braintree_initialization.html.erb @@ -1,6 +1,11 @@ <% content_for :head do %> <%= javascript_tag do %> braintree.environment = "<%= payment_method.preferred_environment %>" + braintree.placeholders = { + "number": "<%= payment_method.card_number_placeholder %>", + "expirationDate": "<%= payment_method.expiration_date_placeholder %>", + "cvv": "<%= payment_method.card_code_placeholder %>" + } <% end %> <% end %> diff --git a/lib/assets/javascripts/spree/frontend/braintree/solidus_braintree.js b/lib/assets/javascripts/spree/frontend/braintree/solidus_braintree.js index 35bece2e..1819e3cc 100644 --- a/lib/assets/javascripts/spree/frontend/braintree/solidus_braintree.js +++ b/lib/assets/javascripts/spree/frontend/braintree/solidus_braintree.js @@ -51,13 +51,16 @@ var initializeBraintree = function(data) { hostedFields: { styles: SolidusBraintree.getFrontendStyles(), number: { - selector: "#braintree_card_number" + selector: "#braintree_card_number", + placeholder: braintree.placeholders["number"] }, cvv: { - selector: "#braintree_card_code" + selector: "#braintree_card_code", + placeholder: braintree.placeholders["cvv"] }, expirationDate: { - selector: "#braintree_card_expiry" + selector: "#braintree_card_expiry", + placeholder: braintree.placeholders["expirationDate"] } }, dataCollector: { From fd75e4629115739c0c3f1f87cdcd9a49e5029bc7 Mon Sep 17 00:00:00 2001 From: Gregor MacDougall Date: Wed, 22 Jun 2016 11:05:27 -0400 Subject: [PATCH 111/163] Change solidus dependency to components The gem currently depends on solidus (which is a meta gem for all solidus modules). This means that even if the site does not use solidus_frontend, this gem will require it to be installed. This changes the dependency to only include solidus_core and solidus_api which are the components this actually requires. --- solidus_braintree.gemspec | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/solidus_braintree.gemspec b/solidus_braintree.gemspec index 92568a07..a3b05c15 100644 --- a/solidus_braintree.gemspec +++ b/solidus_braintree.gemspec @@ -19,7 +19,8 @@ Gem::Specification.new do |spec| spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) } spec.require_paths = ["lib"] - spec.add_dependency "solidus", [">= 1.0.0", "< 2"] + spec.add_dependency "solidus_api", [">= 1.0.0", "< 2"] + spec.add_dependency "solidus_core", [">= 1.0.0", "< 2"] spec.add_dependency "braintree", "~> 2.46" spec.add_development_dependency "bundler", "~> 1.10" From 60bc41359388b24ad230415997932ba84d5806cf Mon Sep 17 00:00:00 2001 From: Clarke Brunsdon Date: Fri, 24 Jun 2016 15:49:53 -0700 Subject: [PATCH 112/163] Set version to 1.0.0 for a release --- lib/solidus_braintree/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/solidus_braintree/version.rb b/lib/solidus_braintree/version.rb index f985bf9a..e2f47717 100644 --- a/lib/solidus_braintree/version.rb +++ b/lib/solidus_braintree/version.rb @@ -1,3 +1,3 @@ module SolidusBraintree - VERSION = "1.0.0.alpha" + VERSION = "1.0.0" end From 83bed5e26e7c2596100bce765bf8bd96221cd3fc Mon Sep 17 00:00:00 2001 From: Gregor MacDougall Date: Mon, 4 Jul 2016 11:37:14 -0400 Subject: [PATCH 113/163] Add support for cancel Spree::PaymentMethod expects payment methods (like BraintreeGateway) to implement the cancel method. This implements the cancel method to either void or refund the payment depending upon what is appropriate. --- .../solidus/gateway/braintree_gateway.rb | 10 +++ .../solidus/gateway/braintree_gateway_spec.rb | 65 +++++++++++++++++++ 2 files changed, 75 insertions(+) diff --git a/app/models/solidus/gateway/braintree_gateway.rb b/app/models/solidus/gateway/braintree_gateway.rb index 88fe5c4b..8ddf7cad 100644 --- a/app/models/solidus/gateway/braintree_gateway.rb +++ b/app/models/solidus/gateway/braintree_gateway.rb @@ -165,6 +165,16 @@ def card_code_placeholder '123' end + def cancel(response) + if voidable?(response) + void(response) + else + handle_result( + braintree_gateway.transaction.refund(response) + ) + end + end + private def message_from_result(result) if result.success? diff --git a/spec/solidus/gateway/braintree_gateway_spec.rb b/spec/solidus/gateway/braintree_gateway_spec.rb index 72e63650..78b551bf 100644 --- a/spec/solidus/gateway/braintree_gateway_spec.rb +++ b/spec/solidus/gateway/braintree_gateway_spec.rb @@ -619,4 +619,69 @@ end end end + + describe '#cancel' do + let(:transaction_gateway) do + instance_double(Braintree::TransactionGateway) + end + + let(:braintree_transaction) do + instance_double( + Braintree::Transaction, + status: status + ) + end + + let(:cancel_transaction) do + instance_double( + Braintree::Transaction, + id: 'id', + avs_street_address_response_code: 'avs-code' + ) + end + + let(:response) { 'my-braintree-code' } + let(:result) { double(success?: true, transaction: cancel_transaction) } + + before do + allow(payment_method.braintree_gateway).to receive( + :transaction + ).and_return( + transaction_gateway + ) + allow(transaction_gateway).to receive(:find).with( + response + ).and_return( + braintree_transaction + ) + end + + subject { payment_method.cancel(response) } + + context 'when the payment is voidable' do + let(:status) { Braintree::Transaction::Status::Authorized } + + it 'voids the payment' do + expect(transaction_gateway).to receive(:void).once.with( + response + ).and_return( + result + ) + subject + end + end + + context 'when the payment is not voidable' do + let(:status) { Braintree::Transaction::Status::Settled } + + it 'refunds the payment' do + expect(transaction_gateway).to receive(:refund).once.with( + response + ).and_return( + result + ) + subject + end + end + end end From 44c2c5eef93a62dd32002fc025a3d0ed2998f782 Mon Sep 17 00:00:00 2001 From: Gregor MacDougall Date: Wed, 6 Jul 2016 15:48:16 -0400 Subject: [PATCH 114/163] Add config to disable ship address verification Braintree supports address verification if an address is present, however, this can sometimes lead to addresses being declined because they don't match the address on file with the PayPal account or credit card. As some people may wish to disable this, I have added this configuration to be able to disable sending the adderss to Braintree. --- .../solidus/gateway/braintree_gateway.rb | 11 +- .../solidus/gateway/braintree_gateway_spec.rb | 136 ++++++++++++------ 2 files changed, 101 insertions(+), 46 deletions(-) diff --git a/app/models/solidus/gateway/braintree_gateway.rb b/app/models/solidus/gateway/braintree_gateway.rb index 8ddf7cad..6bf7b7ff 100644 --- a/app/models/solidus/gateway/braintree_gateway.rb +++ b/app/models/solidus/gateway/braintree_gateway.rb @@ -7,6 +7,7 @@ class Gateway::BraintreeGateway < ::Spree::Gateway preference :public_key, :string preference :private_key, :string preference :always_send_bill_address, :boolean, default: false + preference :transmit_shipping_address, :boolean, default: true CARD_TYPE_MAPPING = { 'American Express' => 'american_express', @@ -254,7 +255,9 @@ def transaction_authorize_or_purchase_params(cents, creditcard, options = {}) params[:options] ||= {} params[:amount] = amount(cents) params[:channel] ||= "Solidus" - params[:shipping] = map_address(options[:shipping_address]) if options[:shipping_address] + if (options[:shipping_address] && preferred_transmit_shipping_address) + params[:shipping] = map_address(options[:shipping_address]) + end if options[:payment_method_nonce] params[:payment_method_nonce] = options[:payment_method_nonce] @@ -264,8 +267,10 @@ def transaction_authorize_or_purchase_params(cents, creditcard, options = {}) # Send the bill address if we're using a nonce (i.e. doing a one-time # payment) or if we're configured to always send the bill address - if options[:payment_method_nonce] || preferred_always_send_bill_address - params[:billing] = map_address(options[:billing_address]) if options[:billing_address] + if ( + options[:payment_method_nonce] || preferred_always_send_bill_address + ) && options[:billing_address] + params[:billing] = map_address(options[:billing_address]) end # if has profile, set the customer_id to the profile_id and delete the customer key diff --git a/spec/solidus/gateway/braintree_gateway_spec.rb b/spec/solidus/gateway/braintree_gateway_spec.rb index 78b551bf..058287e1 100644 --- a/spec/solidus/gateway/braintree_gateway_spec.rb +++ b/spec/solidus/gateway/braintree_gateway_spec.rb @@ -61,32 +61,57 @@ end context 'payment has associated device_data' do - it 'sends it to Braintree' do - payment = FactoryGirl.build(:payment, - order: FactoryGirl.create(:order, - user: user, - braintree_device_data: device_data), - source: FactoryGirl.create(:credit_card, - name: "Card Holder", - user: user), + let(:payment) do + FactoryGirl.build( + :payment, + order: FactoryGirl.create( + :order, + user: user, + braintree_device_data: device_data + ), + source: FactoryGirl.create( + :credit_card, + name: "Card Holder", + user: user + ), payment_method: payment_method, - payment_method_nonce: nonce) - address = (payment.source.address || payment.order.bill_address).try(:active_merchant_hash) + payment_method_nonce: nonce + ) + end - expected_params = { + let(:address) do + ( + payment.source.address || payment.order.bill_address + ).try(:active_merchant_hash) + end + + let(:expected_params) do + { first_name: payment.source.first_name, last_name: payment.source.last_name, email: user.email, credit_card: { + billing_address: { + first_name: "John", + last_name: "Doe", + street_address: "10 Lovely Street", + extended_address: "Northwest", + locality: "Herndon", + region: "AL", + country_code_alpha2: "US", + postal_code: address[:zip] + }, cardholder_name: payment.source.name, payment_method_nonce: payment.payment_method_nonce, - billing_address: payment_method.send(:map_address, address), options: { verify_card: true, }, }, device_data: device_data } + end + + it 'sends it to Braintree' do expect_any_instance_of(::Braintree::CustomerGateway).to receive(:create).with(expected_params).and_call_original payment_method.create_profile(payment) end @@ -493,11 +518,12 @@ context 'when preferred_always_send_bill_address is true' do before do payment_method.update!(preferred_always_send_bill_address: true) + allow(payment_method).to receive(:handle_result) end - it 'sends a bill address' do - expected_params = { - billing: { + let(:expected_params) do + { + billing: { first_name: bill_address.first_name, last_name: bill_address.last_name, street_address: bill_address.address1, @@ -513,9 +539,13 @@ amount: "5.00", channel: "Solidus" } + end + + it 'sends a bill address' do + expect_any_instance_of( + ::Braintree::TransactionGateway + ).to receive(:sale).with(expected_params) - allow(payment_method).to receive(:handle_result) - expect_any_instance_of(::Braintree::TransactionGateway).to receive(:sale).with(expected_params) payment_method.authorize(500, creditcard, options) end end @@ -544,7 +574,11 @@ end context "with billing or shipping address" do - before { creditcard.update_attributes(gateway_customer_profile_id: 5) } + before do + creditcard.update_attributes(gateway_customer_profile_id: 5) + expect(payment_method).to receive(:handle_result) + end + let(:options) { { customer_id: user.id, payment_method_nonce: nonce, @@ -554,38 +588,54 @@ customer: user.email } } - it "should send billing and shipping address" do - expected_params = { + let(:expected_address) do + { + first_name: address.first_name, + last_name: address.last_name, + street_address: address.address1, + extended_address: address.address2, + locality: address.city, + region: address.state_text, + country_code_alpha2: address.country.iso, + postal_code: address.zipcode, + } + end + + let(:expected_params) do + { + billing: expected_address, customer_id: creditcard.gateway_customer_profile_id, options: {}, amount: "5.00", - shipping: { - first_name: address.first_name, - last_name: address.last_name, - street_address: address.address1, - extended_address: address.address2, - locality: address.city, - region: address.state_text, - country_code_alpha2: address.country.iso, - postal_code: address.zipcode, - }, - billing: { - first_name: address.first_name, - last_name: address.last_name, - street_address: address.address1, - extended_address: address.address2, - locality: address.city, - region: address.state_text, - country_code_alpha2: address.country.iso, - postal_code: address.zipcode, - }, payment_method_nonce: nonce, channel: "Solidus" } + end - expect(payment_method).to receive(:handle_result) - expect_any_instance_of(::Braintree::TransactionGateway).to receive(:sale).with(expected_params) - payment_method.authorize(500, creditcard, options) + context 'when transmit_shipping_address is true' do + let(:expected_params) do + super().tap do |params| + params[:shipping] = expected_address + end + end + + it "should send billing and shipping address" do + expect_any_instance_of( + ::Braintree::TransactionGateway + ).to receive(:sale).with(expected_params) + payment_method.authorize(500, creditcard, options) + end + end + + context 'when transmit_shipping_address is false' do + before { payment_method.preferred_transmit_shipping_address = false } + + it "should only send billing address" do + expect_any_instance_of( + ::Braintree::TransactionGateway + ).to receive(:sale).with(expected_params) + payment_method.authorize(500, creditcard, options) + end end end end From fa6542866b87bee2523ce9359c01b35b704c71ed Mon Sep 17 00:00:00 2001 From: Murphy Stroppa Date: Tue, 2 Aug 2016 15:39:46 -0700 Subject: [PATCH 115/163] Add in authorization_helpers from spree We are going to be testing an admin view so we need to stub authorization. --- spec/spec_helper.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 59e9b8dd..ec10ee23 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -25,6 +25,7 @@ Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} +require 'spree/testing_support/authorization_helpers' require 'spree/testing_support/factories' require 'spree/testing_support/order_walkthrough' require 'spree/testing_support/preferences' From 083444af1bfcc57d3c6cdba13a5d5a0b3154312b Mon Sep 17 00:00:00 2001 From: Murphy Stroppa Date: Tue, 2 Aug 2016 15:42:09 -0700 Subject: [PATCH 116/163] Add spec testing ability to add new card Currently we are unable to add a new card unless there are previous cards. This appears to be a one line typo. This spec ensures that the build will not pass unless we can see this radio button. --- spec/features/admin/orders/payments_spec.rb | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 spec/features/admin/orders/payments_spec.rb diff --git a/spec/features/admin/orders/payments_spec.rb b/spec/features/admin/orders/payments_spec.rb new file mode 100644 index 00000000..83f7b379 --- /dev/null +++ b/spec/features/admin/orders/payments_spec.rb @@ -0,0 +1,13 @@ +require 'spec_helper' + +describe 'payments', type: :feature do + stub_authorization! + + let(:order) { create(:order) } + let!(:gateway) { create_braintree_payment_method } + + it 'allows you to create a new credit card' do + visit spree.admin_order_payments_path(order) + choose('Use a new card') + end +end From 923d1ec1d2bebc17cc3e79d772efc32ab91e6f34 Mon Sep 17 00:00:00 2001 From: Eric Saupe Date: Fri, 15 Jul 2016 11:19:09 -0600 Subject: [PATCH 117/163] Moved new card radio out so it can be clicked if no payments are found --- app/views/spree/admin/payments/source_forms/_braintree.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/spree/admin/payments/source_forms/_braintree.html.erb b/app/views/spree/admin/payments/source_forms/_braintree.html.erb index 46651c5f..913a33b2 100644 --- a/app/views/spree/admin/payments/source_forms/_braintree.html.erb +++ b/app/views/spree/admin/payments/source_forms/_braintree.html.erb @@ -4,8 +4,8 @@ <% previous_cards.each do |card| %> <% end %> - <% end %> +
From bf1e8afd93065d22d1529cfbc554aaffef12b5ca Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Mon, 22 Aug 2016 16:21:34 -0700 Subject: [PATCH 118/163] Add support for Solidus 2.0 and Rails 5.0 --- .travis.yml | 26 ++++++++++++-------------- Gemfile | 11 +++++++++-- Rakefile | 8 +++++++- solidus_braintree.gemspec | 4 ++-- 4 files changed, 30 insertions(+), 19 deletions(-) diff --git a/.travis.yml b/.travis.yml index 410ab0cc..568a4754 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,20 +1,18 @@ sudo: false -cache: bundler language: ruby -addons: - postgresql: "9.3" +rvm: + - 2.3.1 env: matrix: - - SOLIDUS_BRANCH=v1.1 DB=postgres - - SOLIDUS_BRANCH=v1.2 DB=postgres - - SOLIDUS_BRANCH=v1.3 DB=postgres + - SOLIDUS_BRANCH=v1.1 DB=postgres + - SOLIDUS_BRANCH=v1.2 DB=postgres + - SOLIDUS_BRANCH=v1.3 DB=postgres + - SOLIDUS_BRANCH=v1.4 DB=postgres + - SOLIDUS_BRANCH=v2.0 DB=postgres - SOLIDUS_BRANCH=master DB=postgres - - SOLIDUS_BRANCH=v1.1 DB=mysql - - SOLIDUS_BRANCH=v1.2 DB=mysql - - SOLIDUS_BRANCH=v1.3 DB=mysql + - SOLIDUS_BRANCH=v1.1 DB=mysql + - SOLIDUS_BRANCH=v1.2 DB=mysql + - SOLIDUS_BRANCH=v1.3 DB=mysql + - SOLIDUS_BRANCH=v1.4 DB=mysql + - SOLIDUS_BRANCH=v2.0 DB=mysql - SOLIDUS_BRANCH=master DB=mysql -script: - - bundle exec rake test_app - - bundle exec rspec -rvm: - - 2.1.8 diff --git a/Gemfile b/Gemfile index 6d758bfa..ebca1558 100644 --- a/Gemfile +++ b/Gemfile @@ -1,10 +1,17 @@ -source 'https://rubygems.org' +source "https://rubygems.org" -# Specify your gem's dependencies in solidus_braintree.gemspec branch = ENV.fetch('SOLIDUS_BRANCH', 'master') gem "solidus", github: "solidusio/solidus", branch: branch +if branch == 'master' || branch >= "v2.0" + gem "rails-controller-testing", group: :test +end + gem 'pg' gem 'mysql2' +group :development, :test do + gem "pry-rails" +end + gemspec diff --git a/Rakefile b/Rakefile index 21c576b2..b20c649c 100644 --- a/Rakefile +++ b/Rakefile @@ -6,7 +6,13 @@ RSpec::Core::RakeTask.new(:spec) Bundler::GemHelper.install_tasks -task default: :spec +task :default do + if Dir["spec/dummy"].empty? + Rake::Task[:test_app].invoke + Dir.chdir("../../") + end + Rake::Task[:spec].invoke +end desc "Generates a dummy app for testing" task :test_app do diff --git a/solidus_braintree.gemspec b/solidus_braintree.gemspec index a3b05c15..f6fcc7da 100644 --- a/solidus_braintree.gemspec +++ b/solidus_braintree.gemspec @@ -19,8 +19,8 @@ Gem::Specification.new do |spec| spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) } spec.require_paths = ["lib"] - spec.add_dependency "solidus_api", [">= 1.0.0", "< 2"] - spec.add_dependency "solidus_core", [">= 1.0.0", "< 2"] + spec.add_dependency "solidus_api", [">= 1.0.0", "< 3"] + spec.add_dependency "solidus_core", [">= 1.0.0", "< 3"] spec.add_dependency "braintree", "~> 2.46" spec.add_development_dependency "bundler", "~> 1.10" From 0570e598c41d30b101fa26ea0cb5ea9f1fb4c9f5 Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Thu, 22 Sep 2016 15:25:16 -0700 Subject: [PATCH 119/163] Fix duplication of bundler rake tasks --- Rakefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Rakefile b/Rakefile index b20c649c..70223169 100644 --- a/Rakefile +++ b/Rakefile @@ -1,9 +1,9 @@ -require "bundler/gem_tasks" require "rspec/core/rake_task" require 'spree/testing_support/extension_rake' RSpec::Core::RakeTask.new(:spec) +require 'bundler' Bundler::GemHelper.install_tasks task :default do From ace716dfb30be8d7c107a404b2a019a8e1fb9f44 Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Thu, 22 Sep 2016 15:22:20 -0700 Subject: [PATCH 120/163] Version 1.1.0 --- lib/solidus_braintree/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/solidus_braintree/version.rb b/lib/solidus_braintree/version.rb index e2f47717..ab5ef40e 100644 --- a/lib/solidus_braintree/version.rb +++ b/lib/solidus_braintree/version.rb @@ -1,3 +1,3 @@ module SolidusBraintree - VERSION = "1.0.0" + VERSION = "1.1.0" end From 676de265b5bc3c78e29aec296920e4c3572c5d33 Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Tue, 4 Oct 2016 14:39:41 -0700 Subject: [PATCH 121/163] Fix spec failures due to missing address last_name --- .../solidus/gateway/braintree_gateway_spec.rb | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/spec/solidus/gateway/braintree_gateway_spec.rb b/spec/solidus/gateway/braintree_gateway_spec.rb index 058287e1..a2ec0a32 100644 --- a/spec/solidus/gateway/braintree_gateway_spec.rb +++ b/spec/solidus/gateway/braintree_gateway_spec.rb @@ -72,7 +72,8 @@ source: FactoryGirl.create( :credit_card, name: "Card Holder", - user: user + user: user, + address: create(:address, last_name: "Doe") ), payment_method: payment_method, payment_method_nonce: nonce @@ -405,7 +406,7 @@ let(:creditcard) do FactoryGirl.create(:credit_card, gateway_payment_profile_id: 'abc123') end - let(:address) { FactoryGirl.create(:address) } + let(:address) { FactoryGirl.create(:address, last_name: "Doe") } context "with a credit card" do let(:options) { { @@ -505,7 +506,7 @@ context 'when a billing address is provided' do let(:bill_address) do - create(:address, address1: '1234 bill address') + create(:address, address1: '1234 bill address', last_name: "Doe") end let(:options) do @@ -648,6 +649,18 @@ # than nothing. let(:mapped_address) { payment_method.send(:map_address, {name: name}) } + context "single name" do + let(:name) { "Teller" } + + it "splits" do + # This is "wrong", but braintree accepts it, and it splits in the + # same way that ActiveMerchant does. + address = mapped_address + expect(address[:first_name]).to eq "" + expect(address[:last_name]).to eq "Teller" + end + end + context "simple 2 word name" do let(:name) { "Luke Skywalker" } From d3aa60d1f36cd49a4f112d6bf23492586bd27a13 Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Mon, 5 Dec 2016 15:01:49 -0800 Subject: [PATCH 122/163] Add Solidus v2.1 to .travis.yml --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index 568a4754..5785b3af 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,10 +9,12 @@ env: - SOLIDUS_BRANCH=v1.3 DB=postgres - SOLIDUS_BRANCH=v1.4 DB=postgres - SOLIDUS_BRANCH=v2.0 DB=postgres + - SOLIDUS_BRANCH=v2.1 DB=postgres - SOLIDUS_BRANCH=master DB=postgres - SOLIDUS_BRANCH=v1.1 DB=mysql - SOLIDUS_BRANCH=v1.2 DB=mysql - SOLIDUS_BRANCH=v1.3 DB=mysql - SOLIDUS_BRANCH=v1.4 DB=mysql - SOLIDUS_BRANCH=v2.0 DB=mysql + - SOLIDUS_BRANCH=v2.1 DB=mysql - SOLIDUS_BRANCH=master DB=mysql From c6dcfb9ab2a9e1fc864ad92369ca109035f06487 Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Tue, 13 Dec 2016 17:18:08 -0800 Subject: [PATCH 123/163] Add --ssl-protocol=any to phantomjs_options As of this afternoon the spec suite fails with SSL errors when hitting the braintree sandbox API. This also adds --ignore-ssl-errors=true and --load-images=false --- spec/spec_helper.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index ec10ee23..9880082b 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -36,7 +36,10 @@ require 'capybara-screenshot/rspec' require 'capybara/poltergeist' Capybara.register_driver(:poltergeist) do |app| - Capybara::Poltergeist::Driver.new app, timeout: 90 + Capybara::Poltergeist::Driver.new app, { + phantomjs_options: %w[--ssl-protocol=any --ignore-ssl-errors=true --load-images=false], + timeout: 90 + } end Capybara.javascript_driver = :poltergeist Capybara.default_max_wait_time = 10 From d92ddbdb2535b4afdc19f9f780b0b153e51b7c95 Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Wed, 14 Dec 2016 07:46:38 -0800 Subject: [PATCH 124/163] Use phantomjs 2.1 on travis.ci --- .travis.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/.travis.yml b/.travis.yml index 5785b3af..9ba26975 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,18 @@ sudo: false language: ruby +cache: + directories: + - "travis_phantomjs" + +before_install: + - "phantomjs --version" + - "export PATH=$PWD/travis_phantomjs/phantomjs-2.1.1-linux-x86_64/bin:$PATH" + - "phantomjs --version" + - "if [ $(phantomjs --version) != '2.1.1' ]; then rm -rf $PWD/travis_phantomjs; mkdir -p $PWD/travis_phantomjs; fi" + - "if [ $(phantomjs --version) != '2.1.1' ]; then wget https://assets.membergetmember.co/software/phantomjs-2.1.1-linux-x86_64.tar.bz2 -O $PWD/travis_phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2; fi" + - "if [ $(phantomjs --version) != '2.1.1' ]; then tar -xvf $PWD/travis_phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2 -C $PWD/travis_phantomjs; fi" + - "phantomjs --version" + rvm: - 2.3.1 env: From b1a883f2f3717303283022ac9758c0aa21503615 Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Wed, 14 Dec 2016 14:10:37 -0800 Subject: [PATCH 125/163] Fix warning about within_window with string ref --- spec/features/checkout_spec.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spec/features/checkout_spec.rb b/spec/features/checkout_spec.rb index 604f3f84..02158fbc 100644 --- a/spec/features/checkout_spec.rb +++ b/spec/features/checkout_spec.rb @@ -65,9 +65,9 @@ # Payment expect(page).to have_content(gateway.name) - click_on 'braintree-paypal-button' - - paypal_popup = page.driver.window_handles.last + paypal_popup = window_opened_by do + click_on 'braintree-paypal-button' + end within_window(paypal_popup) do expect(page).to have_content('Proceed with Sandbox Purchase') From 0663b7f9c9f0045d749735cdc07ac7a3a83a7c34 Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Wed, 14 Dec 2016 14:56:22 -0800 Subject: [PATCH 126/163] Update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c41cb07c..0e042d65 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ -# solidus_braintree +# Solidus Braintree + +[![Build Status](https://travis-ci.org/solidusio/solidus_braintree.svg?branch=master)](https://travis-ci.org/solidusio/solidus_braintree) `solidus_braintree` is a gem that adds [Braintree v.zero](https://www.braintreepayments.com/v.zero) support to the [solidus](http://solidus.io/) E-commerce platform. From aec8136b282c10d4d56c5176d91f9fa2106c9d66 Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Thu, 16 Mar 2017 13:48:44 -0700 Subject: [PATCH 127/163] Download PhantomJS from github mirror The existing mirror is often very slow, and the official mirror (bitbucket) will occasionally error from TravisCI. This semi-official mirror (Medium maintain the "phantomjs" npm wrapper) should be more reliable. --- .travis.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 9ba26975..570cd484 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,14 +2,12 @@ sudo: false language: ruby cache: directories: - - "travis_phantomjs" + - travis_phantomjs before_install: - - "phantomjs --version" - "export PATH=$PWD/travis_phantomjs/phantomjs-2.1.1-linux-x86_64/bin:$PATH" - - "phantomjs --version" - "if [ $(phantomjs --version) != '2.1.1' ]; then rm -rf $PWD/travis_phantomjs; mkdir -p $PWD/travis_phantomjs; fi" - - "if [ $(phantomjs --version) != '2.1.1' ]; then wget https://assets.membergetmember.co/software/phantomjs-2.1.1-linux-x86_64.tar.bz2 -O $PWD/travis_phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2; fi" + - "if [ $(phantomjs --version) != '2.1.1' ]; then wget https://github.com/Medium/phantomjs/releases/download/v2.1.1/phantomjs-2.1.1-linux-x86_64.tar.bz2 -O $PWD/travis_phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2; fi" - "if [ $(phantomjs --version) != '2.1.1' ]; then tar -xvf $PWD/travis_phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2 -C $PWD/travis_phantomjs; fi" - "phantomjs --version" From 1cf614470d5b6e61f5b9dc05344272bd9829f212 Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Tue, 18 Apr 2017 15:34:58 -0700 Subject: [PATCH 128/163] Add Solidus v2.2 to .travis.yml --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index 9ba26975..fbf9d8c6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,6 +23,7 @@ env: - SOLIDUS_BRANCH=v1.4 DB=postgres - SOLIDUS_BRANCH=v2.0 DB=postgres - SOLIDUS_BRANCH=v2.1 DB=postgres + - SOLIDUS_BRANCH=v2.2 DB=postgres - SOLIDUS_BRANCH=master DB=postgres - SOLIDUS_BRANCH=v1.1 DB=mysql - SOLIDUS_BRANCH=v1.2 DB=mysql @@ -30,4 +31,5 @@ env: - SOLIDUS_BRANCH=v1.4 DB=mysql - SOLIDUS_BRANCH=v2.0 DB=mysql - SOLIDUS_BRANCH=v2.1 DB=mysql + - SOLIDUS_BRANCH=v2.2 DB=mysql - SOLIDUS_BRANCH=master DB=mysql From 64b74250b6ef5c99db7886d1b732c6c56dbdc3a1 Mon Sep 17 00:00:00 2001 From: Thomas von Deyen Date: Tue, 25 Apr 2017 09:03:41 +0200 Subject: [PATCH 129/163] Fixes link to Braintree v.zero docs The link was leading to 404 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0e042d65..ca139776 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![Build Status](https://travis-ci.org/solidusio/solidus_braintree.svg?branch=master)](https://travis-ci.org/solidusio/solidus_braintree) -`solidus_braintree` is a gem that adds [Braintree v.zero](https://www.braintreepayments.com/v.zero) support to the [solidus](http://solidus.io/) E-commerce platform. +`solidus_braintree` is a gem that adds [Braintree v.zero](https://www.braintreepayments.com/v-zero) support to the [solidus](http://solidus.io/) E-commerce platform. It provides support for credit card and Paypal payment methods via the `Spree::CreditCard` From 5475508a4790aa8db817abad9dfd62d07cb2778a Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Fri, 9 Jun 2017 09:55:16 -0700 Subject: [PATCH 130/163] Support Rails 5.1 --- Gemfile | 2 ++ db/migrate/20150910170527_add_data_to_credit_card.rb | 2 +- .../20160426221931_add_braintree_device_data_to_order.rb | 2 +- lib/solidus_braintree.rb | 1 + solidus_braintree.gemspec | 1 + .../spree/api/braintree_client_token_controller_spec.rb | 4 ++-- 6 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Gemfile b/Gemfile index ebca1558..e9078c59 100644 --- a/Gemfile +++ b/Gemfile @@ -5,6 +5,8 @@ gem "solidus", github: "solidusio/solidus", branch: branch if branch == 'master' || branch >= "v2.0" gem "rails-controller-testing", group: :test +else + gem "rails_test_params_backport", group: :test end gem 'pg' diff --git a/db/migrate/20150910170527_add_data_to_credit_card.rb b/db/migrate/20150910170527_add_data_to_credit_card.rb index 67ee8904..1373ecf6 100644 --- a/db/migrate/20150910170527_add_data_to_credit_card.rb +++ b/db/migrate/20150910170527_add_data_to_credit_card.rb @@ -1,4 +1,4 @@ -class AddDataToCreditCard < ActiveRecord::Migration +class AddDataToCreditCard < SolidusSupport::Migration[4.2] def change add_column :spree_credit_cards, :data, :text end diff --git a/db/migrate/20160426221931_add_braintree_device_data_to_order.rb b/db/migrate/20160426221931_add_braintree_device_data_to_order.rb index 2eb431c9..f205658e 100644 --- a/db/migrate/20160426221931_add_braintree_device_data_to_order.rb +++ b/db/migrate/20160426221931_add_braintree_device_data_to_order.rb @@ -1,4 +1,4 @@ -class AddBraintreeDeviceDataToOrder < ActiveRecord::Migration +class AddBraintreeDeviceDataToOrder < SolidusSupport::Migration[4.2] def change add_column :spree_orders, :braintree_device_data, :text end diff --git a/lib/solidus_braintree.rb b/lib/solidus_braintree.rb index 6abb96e4..a65c2c35 100644 --- a/lib/solidus_braintree.rb +++ b/lib/solidus_braintree.rb @@ -1,3 +1,4 @@ require "solidus_core" +require 'solidus_support' require "solidus_braintree/version" require 'solidus_braintree/engine' diff --git a/solidus_braintree.gemspec b/solidus_braintree.gemspec index f6fcc7da..2592b557 100644 --- a/solidus_braintree.gemspec +++ b/solidus_braintree.gemspec @@ -21,6 +21,7 @@ Gem::Specification.new do |spec| spec.add_dependency "solidus_api", [">= 1.0.0", "< 3"] spec.add_dependency "solidus_core", [">= 1.0.0", "< 3"] + spec.add_dependency "solidus_support" spec.add_dependency "braintree", "~> 2.46" spec.add_development_dependency "bundler", "~> 1.10" diff --git a/spec/controllers/spree/api/braintree_client_token_controller_spec.rb b/spec/controllers/spree/api/braintree_client_token_controller_spec.rb index bffb0eff..aef665a2 100644 --- a/spec/controllers/spree/api/braintree_client_token_controller_spec.rb +++ b/spec/controllers/spree/api/braintree_client_token_controller_spec.rb @@ -11,7 +11,7 @@ context "with a payment method id" do before do gateway = create_braintree_payment_method - post :create, payment_method_id: gateway.id, token: current_api_user.spree_api_key + post :create, params: { payment_method_id: gateway.id, token: current_api_user.spree_api_key } end it "returns an http success" do @@ -32,7 +32,7 @@ context "without a payment method id" do before do create_braintree_payment_method - post :create, token: current_api_user.spree_api_key + post :create, params: { token: current_api_user.spree_api_key } end it "returns an http success" do From 0b7115b4c82c41c25e8236ff75192aa00d67be8f Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Wed, 21 Jun 2017 11:46:16 -0700 Subject: [PATCH 131/163] Revert "Ignore AVS response code in Paypal transactions." --- .../solidus/gateway/braintree_gateway.rb | 21 +++++++------------ .../solidus/gateway/braintree_gateway_spec.rb | 4 ++-- 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/app/models/solidus/gateway/braintree_gateway.rb b/app/models/solidus/gateway/braintree_gateway.rb index 45f2a0c8..6bf7b7ff 100644 --- a/app/models/solidus/gateway/braintree_gateway.rb +++ b/app/models/solidus/gateway/braintree_gateway.rb @@ -190,21 +190,16 @@ def message_from_result(result) end def build_results_hash(result) - return {} unless result.success? - - # We ignore avs response when doing a Paypal transaction - if result.transaction.paypal_details.authorization_id.present? - avs_code = nil + if result.success? + { + authorization: result.transaction.id, + avs_result: { + code: result.transaction.avs_street_address_response_code + } + } else - avs_code = result.transaction.avs_street_address_response_code + {} end - - { - authorization: result.transaction.id, - avs_result: { - code: avs_code - } - } end def handle_result(result) diff --git a/spec/solidus/gateway/braintree_gateway_spec.rb b/spec/solidus/gateway/braintree_gateway_spec.rb index a8c9e0bd..a2ec0a32 100644 --- a/spec/solidus/gateway/braintree_gateway_spec.rb +++ b/spec/solidus/gateway/braintree_gateway_spec.rb @@ -306,12 +306,12 @@ auth = payment_method.authorize(5000, card, {}) expect(auth).to be_success expect(auth.authorization).to be_present - expect(auth.avs_result["code"]).to be_nil + expect(auth.avs_result["code"]).to eq "I" capture = payment_method.capture(5000, auth.authorization, {}) expect(capture).to be_success expect(capture.authorization).to be_present - expect(capture.avs_result["code"]).to be_nil + expect(capture.avs_result["code"]).to eq "I" end it "succeeds capture on pending settlement" do From a7f6e1ededa8ceb92e6b329c13c80cb833e8c457 Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Thu, 13 Jul 2017 16:58:33 -0700 Subject: [PATCH 132/163] Support Solidus 2.3 --- .../solidus/gateway/braintree_gateway.rb | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/app/models/solidus/gateway/braintree_gateway.rb b/app/models/solidus/gateway/braintree_gateway.rb index 6bf7b7ff..52c39133 100644 --- a/app/models/solidus/gateway/braintree_gateway.rb +++ b/app/models/solidus/gateway/braintree_gateway.rb @@ -1,7 +1,14 @@ require "braintree" module Solidus - class Gateway::BraintreeGateway < ::Spree::Gateway + gateway_superclass = + if SolidusSupport.solidus_gem_version < Gem::Version.new('2.3.x') + ::Spree::Gateway + else + ::Spree::PaymentMethod::CreditCard + end + + class Gateway::BraintreeGateway < gateway_superclass preference :environment, :string preference :merchant_id, :string preference :public_key, :string @@ -22,8 +29,14 @@ class Gateway::BraintreeGateway < ::Spree::Gateway 'Visa' => 'visa', } - def method_type - 'braintree' + if SolidusSupport.solidus_gem_version < Gem::Version.new('2.3.x') + def method_type + 'braintree' + end + else + def partial_name + 'braintree' + end end def gateway_options From 7fdf80226d7660f233c3604396e59226f29815dd Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Wed, 19 Jul 2017 14:08:06 -0700 Subject: [PATCH 133/163] Add Solidus v2.3 to .travis.yml --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index 0decc0ac..bf594f37 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,6 +22,7 @@ env: - SOLIDUS_BRANCH=v2.0 DB=postgres - SOLIDUS_BRANCH=v2.1 DB=postgres - SOLIDUS_BRANCH=v2.2 DB=postgres + - SOLIDUS_BRANCH=v2.3 DB=postgres - SOLIDUS_BRANCH=master DB=postgres - SOLIDUS_BRANCH=v1.1 DB=mysql - SOLIDUS_BRANCH=v1.2 DB=mysql @@ -30,4 +31,5 @@ env: - SOLIDUS_BRANCH=v2.0 DB=mysql - SOLIDUS_BRANCH=v2.1 DB=mysql - SOLIDUS_BRANCH=v2.2 DB=mysql + - SOLIDUS_BRANCH=v2.3 DB=mysql - SOLIDUS_BRANCH=master DB=mysql From a6a8236e08b39bff71ba4c287756f17500d86f43 Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Tue, 10 Oct 2017 13:48:54 -0700 Subject: [PATCH 134/163] Re-record failing VCR cassettes For unknown reasons these were failing against 2.4 and master. After re-recording they seem to work fine. --- .../denies_a_fraudulent_card.yml | 155 +++++++++-------- .../unsuccessful_credit_card_verification.yml | 157 ++++++++++-------- 2 files changed, 170 insertions(+), 142 deletions(-) diff --git a/spec/cassettes/Braintree_checkout/denies_a_fraudulent_card.yml b/spec/cassettes/Braintree_checkout/denies_a_fraudulent_card.yml index 0d2269b6..4fd419fb 100644 --- a/spec/cassettes/Braintree_checkout/denies_a_fraudulent_card.yml +++ b/spec/cassettes/Braintree_checkout/denies_a_fraudulent_card.yml @@ -8,7 +8,7 @@ http_interactions: string: | - 2 + 2 headers: Accept-Encoding: @@ -16,7 +16,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.62.0 + - Braintree Ruby Gem 2.78.0 X-Apiversion: - '4' Authorization: @@ -28,65 +28,40 @@ http_interactions: code: 201 message: Created headers: + Server: + - nginx Date: - - Tue, 24 May 2016 22:16:28 GMT + - Tue, 10 Oct 2017 20:59:05 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - X-Frame-Options: - - SAMEORIGIN - - SAMEORIGIN - X-Xss-Protection: - - 1; mode=block - X-Content-Type-Options: - - nosniff + Status: + - 201 Created X-Authentication: - - basic_auth - X-User: - - s8282g6qcjgm2dfk + - server_to_server + Braintree-Service-Origin: + - clientauth Vary: - Accept-Encoding Content-Encoding: - gzip Etag: - - W/"01227c2ea22796b02bb255fedf13e889" + - W/"947332c5a33b0d015c2646dc893f4fb6" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 7a9d6155-f27f-4b74-9b15-af3c82212918 + - 41d23e25-4860-4574-94f4-ac3225d122f8 X-Runtime: - - '0.084034' + - '0.430118' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIALzSRFcAA6RVXW+bShB976+I8t5bWExukZJUsR0wyKxrjFl232CX1OBd - 7FvM56+/g92kqeRbVboPliWYmTPnnJnh/kun5E2Tfa/yQ/lwq/+l3d5kJT+I - vPz2cLsN7Y+fb788frjnMs/K08fTYZ+Vjx9ubu6bRNbZY9Z7iMXekBCrdotD - v5x5OxEHh9TwjpmytfF5oGTNUNTzhXdMy3W+yt12Nfd1RoKchk8mJcHOJzin - ZN37c2rikA4+sguKPIWdNaIhVjjcIxbybkW2HSNu58+5RhE1mVp3frjv/dDL - XxzcM2JrUPeFxmvLL546nGst3mg9tqF2cegw9LiaTSZ+sdf8uavj4vm7P39q - fbvT4b/HSpdc4QMlphYjuf8aH/O0iMysfDbFXBhpLCZ47nERQk7BWkG8KiH4 - JUGR+TWWpxUJ/hGG3SbGLhcFnmTAFzQpUmSqhIiIqxb4ewexCFo+HJolgtiN - OQDeniprslReT4msxcKTjIidcCKDxvuaIuu0Ktaa31sn0LtIHBti/CZTXo1j - ecdDqWFDnITxTfNzq0gdKdNy1GF6XBq0WyLcpIodmRH1NA6OKZqc+4I6VepE - oz+DWxzTeNPmjJgoiT2I1+XFL++tPzdvc4q6I8Roa6gdxV4FvufJItD4wr9b - 9taOO/uaI7tmjtdkMzPnygbfA/AmKgFbCmSbSwX9hAcNz/0mJdAT2u0gZlga - 1/R2m1fM+KyXW7nKHjiKNK5HfTpz71y108RiOqzyzw2N8cBiqPUbLc884khL - 7Gv58HxmIsA7pf2feXOuR8xdupAw83jU8m+3vFL7B48lsWtKOlM4suB/iPEf - 2uQv4JlwdqO+z1sUFSL2ZAC9UNVJBvhQS2cQwx3bhF/1u3fnvlVw5Ma0orFc - UaLL0d+tMYX628ssX2bLG/PTMqrSGeTDbgtlF1n0nvPTOA8yc+wTdzp59nxj - tXwG/pUReORNmTHyHOcs+GU3Rq1YDDMRTyu2MWF/tEY41nDWGbxn0f/x/RJ3 - ZXZhH6IiQZYuZmYL/FtK2rc85kjQAGvrd/iv/MHLKjWEO/YOGmq8jCRoBbzY - kSurhhmvxbPZhCrSBLL6pP+p/ZV9a5hicFdMOeIKeA/9jncNv+0+YDNlVxxt - YRfe8d1iyBux5H7klhJ7AP7969z5/bg7cIed7pgq8V7/4dpcvNvNKYUbAr1o - G3K5CXzEO+8i1nkJXBU2NzFu1sjaw/M7V0ZhMPOsy/2T9dm3bQRz71VsrKEY - 7Asedfp50370ff2ujXPDAEdvztwQU26pPdx/unyLPtx/+vUr9S8AAAD//wMA - +doQCtwGAAA= + H4sIAJk03VkAA6RVXW+bShB976+I8t5bWEJukZJU8QcYZJYaYxb2DXZJDd4F32I+f/0d7CZNJd+q0n1ASOzsnDnnzAwPX3opbtrse51X5eOt+pdye5OVrOJ5+e3xdheYHz/ffnn68MBEnpWnj6fqkJVPH25uHtpENNlTNjiIRs6YEKOxi2pYz509j/wq1ZxjJk1l+u5L0VAUDmzlHNNyk3u5PdKFmeNFPHpkObjWcogD5+Atlp1rOcJbuHAeChrgAhN39Ky4w8Uzcot9Hgf2HV64WlzYY1wcOs+ye0pcjS42w4uFB0pMhRL/JY42hls893hQencOj7kZ3EWlekHV4e1d7wZu544bhBfL7+7iuXPNXoX3gKUqmMRVTHQlQuLwNTrmaRHqWbnU+YJracQB32E8gDsF7Thx6oTglwSF+tdInDzi/8M1s0u0fc4LfJcBX9CkSJEuE8JDJjvg71R85XdsrNo1gtitPgLeIZbG3Vo6Q0xEw1eOoITvuRVqcXRoYmScvGKjuINxAr2LxDIhxm0z6TQ4EvcsEArW+Ilr3xQ3N4rUEiItJx1mx7UW92uE21TSI9XCIY78Y4ruznVBnjq1wsmf0S6OabTtckp0lEQOxKvi4pfzVp+dd3mM+iPEKBvIHUZODb7nycpX2Mq9Xw/GnlmHhiGzoZbTZnM9Z9IE333wJiwBW3Bk6msJ9QSVAl62KYGa0H4PMeNau6a33b5iRme97NqW5shQqDA1HNK5fW/LvcJXs9HLP7dxhEcaQa7faHnmEYVKYl67D9/nOgK8Uzr8mTfnfETfpysBPY8nLf+2yyu5f/BYE7OJSa9zSxTsDzH+Q5v8BTzj1n7Sd7lDYcEjR/hQSyx7QQEfcqkUYphl6vDUvzs71y39I9NmdRwJLyaqmPzdaTPIv7v08qW3nOl+WoZ1Oof7MNtcmkUWvuf8PPWDyCzzxKxenD3fGh2bg39lCB45M6pNPKc+83+ZjUkrGkFPRLOabnWYH6XlljGedQbvafh/fL/EXeldmIewSJCh8rneAf8uJt3bPWoJ0AArm3f4r/zByzrVuD3VDhoqrAwFaAW86JFJo4Eeb/hSbwMZKhwZQzL81P7KvLVUUtgruphwOZxDvdNew2+zD9hUmjVDO5iFd3x3GO5NWOIwcUuJOQL/4bXv3GGaHdjDVn9MJX+v/3itL97N5iyGHQK1KFty2QlswjvPIlZZCVwl1rcRbjfIOMD3e1uEgT93DNDh5876Udf1vTX1BYU8anuuHVFpl8rjw6fLv+bDw6df/0L/AgAA//8DACWOpFW8BgAA http_version: - recorded_at: Tue, 24 May 2016 22:16:28 GMT + recorded_at: Tue, 10 Oct 2017 20:59:05 GMT - request: method: post uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers @@ -110,12 +85,12 @@ http_interactions: US 12010 - 97749aa8-06d0-4e80-bfe5-2f1e715387a7 + e0457745-b10f-07fe-0c08-d85b86be695b true - {"device_session_id":"c5b422d3e53f52caf09b085ee42b438a","fraud_merchant_id":"600000","correlation_id":"b108a167ff7616e9fcf1b8b1cf0bba05"} + {"device_session_id":"443c79727355744bec34e9d21de53b26","fraud_merchant_id":"600000","correlation_id":"8e44dc7385d9a8927aab194012c5e203"} headers: Accept-Encoding: @@ -123,7 +98,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.62.0 + - Braintree Ruby Gem 2.78.0 X-Apiversion: - '4' Authorization: @@ -136,7 +111,7 @@ http_interactions: message: Unprocessable Entity headers: Date: - - Tue, 24 May 2016 22:16:30 GMT + - Tue, 10 Oct 2017 20:59:06 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -159,37 +134,77 @@ http_interactions: Cache-Control: - no-cache X-Request-Id: - - 95770f47-e641-439b-8177-847b2e42f8ad + - 8705bc55-9a51-4fdf-ac7b-88ca663eb290 + X-Runtime: + - '0.260947' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAJo03VkAA6xXSW/jNhS+51cIPk0PHC2WLDtQNB2g26FzaeICnUtBUc8xG4lUSSqJ/n0ftdtyWqcYwwfzbXzr9+jk02tZOM+gNJfibuV/9FYOCCZzLh7vVvuHn8h29Sm9SWjFCSglFVGgKyk0pDeOk7QkbX+OB8c0FdytqFK0WbmtlDuJJRVVtBw0WK2NLEF1R0uQSkFBDTpDeJ5uIQxzFq+3Ub6j210QU5r5u9DzAxZB4K0T90xhsJPDM2dANGjdc8JwzeJdHMTrKIrDMAO2DmGXB34O0ToLNom71BmsHRStc4J+siMVxnI2nv0k7pIz6nClDRG0hPQXKlByOg8iBR0o97KQiTudBwkoKS9SNP09vNKyKuAjkyWmsyWPOVOQc0MYVePtlorHoyxyUKMTTnfNOWfSyXhRYN0JzXOssp44V8VzXUytlDYKwIz3/PFA/LVN5xl9rgKvBkQO+cB0BC/uVkbV0DXZ5IFktOCmSb9I7fzIdQENujEQ55IKHrHQ6edfE7f/OecyWQujGoKzAIQW1ZEG6f7edtySPterpDa0aNmpH3g+hjUnTdl230w3DklTAvZTCeYocyKkYJCCF0ZxHEYk870D8eIDEI95W5Jvo2y7yWCzizK865LqZFlWdlROU4vTzw9N10A2oYk7p8wcXih/2zn7n5PmLgYASTNgsTkZMCcp8Vb6COnP1MALbZzf4C9gBvJbp70gcQeBmyExnLXo0lvGQppap4+d+p+qV7et2zJ6XHt+HnGyLfuyWxP6rM8Q9d8kZy10lfzpJP2nSh8P6eKxZVFANUbdZ+VNfqc+loWydjxseXSFHth8LlmdUqUkQ9+uSMAFSYN4kO7Fk5AvwvnwHdb4DZk+JaW9+4JpVuP+EKwhXMtuQPf3P9j+OSd34m1DRi85HF8Sd4ykH+Rvi/2I9BUVzSWceyd+XoWd1+Hm25h5Je6NsNrGuhcch8e5x9kB7ciD8xnbBQduQtkpJSNeDpVbrr3EyCcQF6PLuEhDBBLft3bEaR3C1I8soz+MrqJpYl8z6e9c025xducpsRVX3eOjlMIcMXDczufEC9INUJUGXuCdiLfU8fYewoitQYtA7fZZUOfevmvhJ7Xgf9dARF1myOI5rg2EOwRNCLPAwzeXv96sGYtDP95l2WHj+wdGWRgdEvdN1bEbFFQUB6QfUTufHWEQOAItzBFdg0lmRpsechk3k0R3HJm1wlriwD/W+ASE2W0LzmyqLCJxWkzCM9roPm2ULGYyA2EQ4FrXdndnVDxNUifU846XB2L51C7k2d1L5pRDmdesRcxZGkfasOoW2w8pNmZCTf8Wz/FoeAkrbDk/Jr6H34fAu412t97ma2uiV+gt1FX+PguTQrdxTzdn4l76+/APAAAA//8DAIE6wZR7DAAA + http_version: + recorded_at: Tue, 10 Oct 2017 20:59:06 GMT +- request: + method: post + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token + body: + encoding: UTF-8 + string: | + + + 2 + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.78.0 + X-Apiversion: + - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Server: + - nginx + Date: + - Tue, 10 Oct 2017 20:59:07 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Status: + - 201 Created + X-Authentication: + - server_to_server + Braintree-Service-Origin: + - clientauth + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + Etag: + - W/"9e3dc9fd47ca65e1ba7fdb70a1113d49" + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - f7620f8e-e22a-4a15-9dda-b8c9445ac908 X-Runtime: - - '0.284859' + - '0.346855' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 http_version: - recorded_at: Tue, 24 May 2016 22:16:30 GMT + recorded_at: Tue, 10 Oct 2017 20:59:07 GMT recorded_with: VCR 3.0.3 diff --git a/spec/cassettes/Braintree_checkout/unsuccessful_credit_card_verification.yml b/spec/cassettes/Braintree_checkout/unsuccessful_credit_card_verification.yml index a29490fd..67311a41 100644 --- a/spec/cassettes/Braintree_checkout/unsuccessful_credit_card_verification.yml +++ b/spec/cassettes/Braintree_checkout/unsuccessful_credit_card_verification.yml @@ -8,7 +8,7 @@ http_interactions: string: | - 2 + 2 headers: Accept-Encoding: @@ -16,7 +16,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.62.0 + - Braintree Ruby Gem 2.78.0 X-Apiversion: - '4' Authorization: @@ -28,65 +28,40 @@ http_interactions: code: 201 message: Created headers: + Server: + - nginx Date: - - Tue, 24 May 2016 22:16:14 GMT + - Tue, 10 Oct 2017 20:50:23 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: - chunked - X-Frame-Options: - - SAMEORIGIN - - SAMEORIGIN - X-Xss-Protection: - - 1; mode=block - X-Content-Type-Options: - - nosniff + Status: + - 201 Created X-Authentication: - - basic_auth - X-User: - - s8282g6qcjgm2dfk + - server_to_server + Braintree-Service-Origin: + - clientauth Vary: - Accept-Encoding Content-Encoding: - gzip Etag: - - W/"4bdca08f50d0d04f8e0ba12bdd3e156e" + - W/"bfa605a41963c45064ce1206936775c6" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 86a0e1ba-5c29-49d6-97df-88cd0d02ee4a + - 9f726583-f011-48ee-87a0-f4170426531b X-Runtime: - - '0.224805' + - '0.391281' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAK7SRFcAA6RV0W6bShB971dEee8tLCa3SEmq2A4YZNY1xgvsG+ySAt7F - vsWA4evvrN2kqeRbVboPCImdnTPnnJnh/stJipsu/96U+/rhVv9Lu73Ja7bn - Zf3t4XYb2h8/3355/HDPRJnXx4/H/S6vHz/c3Nx3qWjzx3zwEI29MY2s1q32 - w3LmFTwO9pnhHXJpa+p7IEVLERnYwjtk9bpclS5KwqcxQUTScIdWc7rDEgt/ - DIokLGQSbgc6n6ozM5H+uJq7mu88T/xxO9KQl6uwKP1qbfjjGmHkG6s5m/jh - Wn9x8EAjW6NR8JLEa8uvnk641Hq80QZsrwe/2p+wemYTYwW5cfhk4Dn77s+f - et8+6fAesNQFk3ifRKYWI7H7Gh/KrCJmXj+bfM6NLOYTPPcYD+FORXseeU0a - 4ZcUEfNrLI6rKPiHG3afGkXJKzzJgS9oUmXIlGnECZM98Pf2fBH0bNx3SwSx - G3MEvF0irclSekMSiZYvPEEjXnCHGEm8axNkHVfVWvMH6wh6V6ljQ4zf5dJr - cSzuWCg0bPAjN75pfmlVmSNEVisdpoelkZyWCHeZpAdqkCGJg0OGJue6IE+T - OUT5M7rVIYs3fUkjE6WxB/G6uPjlvdXnln2ZoNMBYrQ15Cax14DvZboINLbw - 75aDVTBn1zJkt9Txunxmlkza4HsA3pAasAVHtrmUUE+41/Dc77IIakJFATHj - 0rimt9u9YsZnvdzGlfbIENGYToZs5t65stD4Yjquys9dEuORxpDrN1qeecRE - S+1r9+H7zESAd8yGP/PmnC8yi2whoOex0vJvt76S+wePZWS3SXQyuSMq9ocY - /6FN+QKecadQ+j5vEal47IkAaknkSVDAh1w6hRjm2CY8ze/OznXL4MCMaZPE - YpVEulD+bo0p5N9eevnSW566n9WkyWZwH2abS7vKyXvOT6ofRO7YR+acxNnz - jdWzGfhXE/DIm1JD8VR9FvwyG0orGkNPxNOGbkyYH63jjjWedQbvKfk/vl/i - rvQuzAOpUmTpfGb2wL9Pov7tHnUEaIC19Tv8V/7gZZMZ3FW1g4Yaq4kArYAX - PTBptdDjLX82u1ASjSNrSIef2l+Zt45KCnvFFAqXwznUq/Yafpt9wKbSbhja - wiy847vFcE9hiZ3ilkX2CPyH177zBzU7sIed0yGT/L3+47W+eDeb0wR2CNSi - baLLTmAK7zyLWGc1cJXY3MS4WyNrB9/vXEHCYOZZl/0n2rNvWwJ97zVU5ZAU - 5gUrnX7utB91X99rqm8o4OjdmRui0q21h/tPl3/Rh/tPv/6l/gUAAP//AwAL - yrEM3AYAAA== + H4sIAI8y3VkAA6RVTXObOhTd51dksm+LhckrM0k68QcYxpJrbCOkHUikBkvYrxgw/Pp3sZs0nfHrdKYLbaT7dc659+rhy0mr2zr9Xmb74vFu8NG4u00LsZdZ8e3xbrN2Pny++/J08yBUlhbHD8f9Li2ebm5vH+pYVelT2vqIR34XU7vy8n07H/tbGQX7xPQPqXaM/j7QquIobMXMPyTFMltkHuIu0UR7Jzwhiqw3DV872YIyi+XOluWbIc7llk+YyTpfY+rscIct1i3bBV0OMJ0i3I1y3HkWQ6FarKdgH+xeXNJy6hicBi8sWto4fz6R1jjhMRxn2eLJfgCnxe2wwd0UkU50eDL9jifPDXZO8PbcEj1QQpM9o5YRIbX7Gh2yJA+ttJhaciLNJJJDMvGFXINPzhtJ/TKm5CVGofU1UscFDf6VptPE5jaTORmmgBc4yRNk6ZjKUOgG8Pt7OQsa0e3rOQLbldVBvh3T9nCu/ZZRVcmZrziVW+mGJot2FUP2cZEvDdzaR+A7j10HbHCdar8ikboXa2UQUx6l+c3AmZ0nrlJJ0fMwOsxNdpojUieaH7gZtiwKDgkanuuCOGXihr0+nZcfkmjVZJxaKI58sB+oi17+W31e1mQMnQ5gYywhdhj5JeiexbPAEDN8P2/trXB3lUBOxV2/TsdWJrQDugegTVhAbiWRY8011LPeG2SC64RCTWi7BZtubl7j26tfc0ZnvrzS004nUGiIQdgmY+/e01tDzkbdIvtcs4h0PIJYv+HyjCMKjdi55g/3YwtBvmPS/pk253jU2iYzBT1Pei7/8YorsX/gmFOnYvRkSVfl4g9z/A832QtoJt1tz+90g8JcRr4KoBamT4pDfog14GAjXMeCU/7u7Vy3Dg7CHJUsUgtGB6rXd2OOIP7m0suX3vJ7/6QIy2QM/jDbUjt5Gr7H/Nz3g0pd5yjckzprvrIbMQb9ihA08kfc7HH2fRb8Mhs9VzyCnohGJV9ZMD9GLV27O/MM2vPwb3S/2F3pXZiHMI+RPZBjqwH8DaPNmx93FXBAjOW7/K/4QcsyMaXX1w4cGqIIFXAFuPhBaLuCHq/k1KrXOjQkstu4/cn9lXmrueawVyzV55XwDvX2e428zT7k5topBdrALLzDuyHg1+dSux5bQp0O8LevfYfbfnZgD7unQ6Lle/67a33xbjZHDHYI1GKs6GUniD7feRbJQBSAVRNrFZF6iewd3N97KlwHY98GHn7urB91Xd9bfV9wiDOoz7Ujrr3CeHz4dPlrbh4+/foL/QcAAP//AwA6jLoUvAYAAA== http_version: - recorded_at: Tue, 24 May 2016 22:16:14 GMT + recorded_at: Tue, 10 Oct 2017 20:50:23 GMT - request: method: post uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/customers @@ -110,12 +85,12 @@ http_interactions: US 12010 - 7d6101bf-2a23-464f-a61c-a4a649cba3c6 + fe66c359-38bf-0ef6-0f78-e0adbf64ef24 true - {"device_session_id":"d4af8ebca228871c0841c5597cc59d86","fraud_merchant_id":"600000","correlation_id":"9e9010668fe003a1deccbd8e2b08d6f8"} + {"device_session_id":"7bc8b8b8acf41af4cc119f2011d654ee","fraud_merchant_id":"600000","correlation_id":"7466463a57b5c10affce4c43c90f2771"} headers: Accept-Encoding: @@ -123,7 +98,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.62.0 + - Braintree Ruby Gem 2.78.0 X-Apiversion: - '4' Authorization: @@ -136,7 +111,7 @@ http_interactions: message: Unprocessable Entity headers: Date: - - Tue, 24 May 2016 22:16:17 GMT + - Tue, 10 Oct 2017 20:50:25 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -159,39 +134,77 @@ http_interactions: Cache-Control: - no-cache X-Request-Id: - - 5afe4234-7e96-4d8d-a8cc-bd9abe6116a0 + - 0e3ea4e5-7fdc-4c8a-8fdd-ab3d957a262d + X-Runtime: + - '0.740244' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAJEy3VkAA6xXW2/bNhR+768Q/M5YUmTZKRR1BbqhKNZhW5Jh2ctAk0c2F4nUSMqN/v0OdbdlF+5Qxw/md648VyZ591rk3gG0EUreL4Ibf+GBZIoLubtfPD3+RDaLd+mbhJaCgNZKEw2mVNJA+sbzkgYy7udw8Gxdwv2Cak3rxbLhWo5sSUk1LXoJVhmrCtDt0QFKa8ipRWeI4Ok6iuMovqWr9XbFAp9mGYOIRbfszs/C9TpIlicCvR4OB8GAGDCmV7Vlmy3+UZZFAc0ixoLgLgv9IODxKgJIlnOZXlumacUJ+sn2VFpHiX33SZZzyiAjtLFE0gLSj1Qi53juWXLaIw8qV8lyPPccUFCRp6j6B3ilRZnDDVMFhrOBh5hp4MISRvVg3aF43Kucgx6c8Fozp5RRZivyHPNOKOeYZTNSrrrPdXdquIzVAHaw8/xIglsXzhN8KgKvFiQH3hM9KfL7hdUVtEU2eqAYzYWt08/KeD8Kk0ONbvTglFPDDhOdvv85WXY/p1SmKml1TbAXgNC83NMwfXpwFTfHp3KlMpbmDTkNsL7wWlNojPbyYrixSeoCsJ4KsHvFiVSSQZpBHLPb1R253Wwz4kMWEz9bbwj4lG+zOIIsjNDWOdFRsypdqxyHFrtfZHVbQC6gyXKKTByeCX/fPvufnbacNQBCk8HiYtLPnKRAq3QH6Qfl/aKs91FJpZNlj77poyFYM1I6dZg9W5m01Ioho9J/c2CYOeCuYhtSN84Oh2E8ttn+jK7MwJaZHszJRG2o87puOCclNDfxdYZRyXF7ndfzVZ5W1Y5a+EJrpP0DrJm8GqhR8ozrQ74oa/rG5c2U2pXBOVIrNMT5xHrYFMIl6kVZi6PjJN+XuLpQFc6f1L9x5rpDv69w20hWE2FUa/Xp4YOrtlO4Zccb+XFcmrvdIVkO1+va/vtuCtwLJZX1uan4jdP2qkl73ZS9PGGvnJLDEG7u+iSFBe49YMuB8VTmvccawk4dZ/IYkmG69pmbL8nEqhc4U7RNimQaYbUFgdMjj/MQpUEQrLokRKOrqJq4t0/6hzC0XbPteQxsKXT7VCmUtHu8OO7yU/AMdw1UY/WH/hF7gw7Wu4FHXA6a0dXsqhk69fabngdJJcW/FRBZFVskCY5LBuckjlhOY7YGFsbrzZZn8SYM7/wYz37IeRZEOCQvig7VoKGk2CBP8kWqL9I1aAv0DHugud2jazDyTLDx2bcVduRojwOx0phL7PhdhQ9GmFibUSZd5caUoPnIPMEG92mtVT7h6YGeQRhTuU2/pfJl5DpCTyteZcTRqVvfE9tz4hhDxSvWjNFJGAesX4yzXYmIuzOhtnu5czxaUcACSy5Yk8DH72Pov135b8Por0ZFJ9BpqEp+vYYVahgFOg1amBeCGB0jxtNfg8dn/9On3+Ln3/8cx2eTZSZMM1dKvOCheVJ0yMn736nEu5a2wmt3zm2VyoHKRffUOcfZB+vIre5VNLwMcDWc+Z/oPwAAAP//AwAsu2jZUA0AAA== + http_version: + recorded_at: Tue, 10 Oct 2017 20:50:25 GMT +- request: + method: post + uri: https://api.sandbox.braintreegateway.com/merchants/zbn5yzq9t7wmwx42/client_token + body: + encoding: UTF-8 + string: | + + + 2 + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.78.0 + X-Apiversion: + - '4' + Authorization: + - Basic eW05ZGp3cXBreGJ2M3h6dDo0Z2hnaGt5cDJ5eTZ5cWM4 + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Server: + - nginx + Date: + - Tue, 10 Oct 2017 20:50:25 GMT + Content-Type: + - application/xml; charset=utf-8 + Transfer-Encoding: + - chunked + Status: + - 201 Created + X-Authentication: + - server_to_server + Braintree-Service-Origin: + - clientauth + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + Etag: + - W/"5602ddd7305eec905701d5cb8e47293c" + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - ed910c3e-1c8d-457f-87c3-adb6281c49e4 X-Runtime: - - '0.778150' + - '0.009467' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIALHSRFcAA6xXWW/jNhB+z68Q/M7VEVuWC0XbRQ8s2u6iaJIC7UtBk2Ob - jUSqJOWN/v0OdduyF95igzyE3xwczvGNkr59LXLvCNoIJR8W4Ztg4YFkigu5 - f1g8P/1MksXb7C6lpSCgtdJEgymVNJDdeV7aQMb9ORw8W5fwsKBa03rhN1r+ - qJaWVNOit2CVsaoA3R4doLSGnFoMhgiebWAThEEcJzsIgnsacmBsyxOItkHC - 412S+mcGvR8OR8GAGDCmk/Al3SWwZTSKkmQdsiBZhmy12qwZW214Eqf+3Kb3 - ttO04gTjZAcqrZPEgftJ/blksBHaWCJpAdl7KlFzPPcqOe2RR5Wr1B/PvQYU - VOQZuv4eXmlR5vCGqQLT2cBDzjRwYQmjerjdoXg8qJyDHoLw2mvOJaPNVuQ5 - 1p1QzrHKZpTc9J7b3tRoGasB7HDPX08kvHfpPMOnJvBqQXLgvdCTIn9YWF1B - 22RjBIrRXNg6+6CM95MwOdQYRg9ONTXssdDZu99Sv/tzKmWqklbXBGcBCM3L - A42y50fXcXN8alcqY2neiLMwwvZN/Sk0Ztu/mm4ckroA7KcC7EFxIpVkkK15 - HAbhdkciGt2TZbzcERqHjNAljZcbtqX3DLv4ounoWZVuVE5Ti9MvdnXbQC6h - qT9FJgHPjL/tnP3PSfNnA4DQhFhcTnrOSQu8le4h+1F5H5X13iupdOr36F2f - DcEaSuncYfVsZbJSK4aKSv+DPISVA+46thF1dHY8DvTYVvsDhjIDW2V6NGeM - 2kjnfd1oTlpofsWXFUYnp+N12c8XdVpXe2rhE61R9i+whnk1UKPkhdCHelHW - zI2rmynxBpfzuag1GvJ8dnvUNMI16VVbi9RxVu9rWq0PDCRKCra6T/0hpm5W - vy29I5mXVNaXqOwrKfImeryNGq/T4o3UNjBn89ZnKSxw7xHnBIyndt47LDyO - 10ikY0oGSuznab7ZUqte4EKnNSWS2RJbJAydH3lah2UWhuGqK8JyDBVdE/fB - kv0pDG13Y3seE1sK3X5fFEraAz4cF/A5eEG7BqqxZaPgRL1Bh9s7liKuBg3f - NAtmhk6j/aqdnlZS/FcBkVWxRZHguBmQ3JAXOY3ZGlgUr5Mt38VJFG2CGM9B - xPkuXCKzXTUdukFDSXFAnuWLVJ+km6oW6BUOQHN7wNBg1Jlg47faVthRoz0O - wkpjLXFM9xV+5cHktplkMlWOWwTNR+UJNoRPa63yiU4P9ArCmMqt5y2VL6PW - CXre8WpHnJy6nTu5ey4cc6h4xRrum6RxwPptNltwiLg3E2q7z22ORysKWGDL - hTEJViRaPkXRd2GMv383LjqDzkNV8ts9rNHDaNB50MK8EMTomDGe/f5L8Bh8 - /HUd//BHONJnU2UmTMMrJT7wCK7QHdK98sRf9w0y7GFcThf+A/kMAAD//wMA - PpnkIL4MAAA= + H4sIAJEy3VkAA6RVW3ObOBR+z6/I5L1bECFbZpJ0fAkYxsg1xiD0BhIpYAmzxVx//R6cS9MZb6cz+6AX6dy+7zvn6P5rL8V1m/6o82P5cKP+pdxcpyU78rz8/nCz981PX26+Pl7dM5Gn5enT6XhIy8er6+v7NhZN+pgODqLEGePQaOziOKwXTsaJd0w0p0qlqUz3nhQNRcHAVk6VlNt8kzuZi5yChvsOyz3a+DOEiy2KfHtwl5HiFjzfWO6A/YOGfRfR4qC6vgl3kbqx9nrkHzoqnRwvs4wuZ2Cz7fEoimcLDzQ0FRp6zxHZGm4x6/Gg9O4CjrmF2EcVzoB3t8gd9+rGdxVc2D/c5axzzR7eZgOWqmASH6NQVwgSh2+kypMi0NPySedLriWE3+Klw7gPPgXteOjUcYifYxTo34g4bULvH66ZXaxlOS/wbQp4gZMiQbqMQx4w2U34j3zldWw8tmsEtjt9hHyHSBq3a+kMUSgavnIEDXnGrUCLyKGJkHHaFFvFHYwT8F3Elgk2bptKp8FE3DFfKFjjJ659V9zcKBJLiKSceJhXay3q1wi3iaQV1YIhIl6VoNtzXRCnTqxg0me0iyohuy6noY5i4oC9Kl71eq/Pzrs8Qn0FNsoWYgfEqUH3PF55Clu5d+vByJh1aBgyG2o5bbrQcyZN0N0DbYIScguOTH0toR7/qOCl2yYh1ISyDGzGtXaJb7t9y0nOfNm1Lc2RoUBhajAkC/vOlpnCV/Nxk39pI4JHSiDWb7g84yCBEpuX/OF+oSPId0qGP9PmHC/Us2QloOfxxOXfdnkh9iuOdWg2Udjr3BIF+8Mc/8FN/gyacSub+H3ao6DgxBEe1BLJXlDID7FUCjbMMnU49e/eznVLr2LavI6I2EShKiZ999oc4u9fevmlt5zJPymDOlmAP8w2l2aRBh8xz6Z+EKllnpjVi7PmO6NjC9CvDEAjZ061CefUZ94vszFxRQn0BJnXdKfD/Cgtt4zxzDNoT4P/o/uL3YXehXkIihgZKl/oHeDvorB796OWAA6wsv2Q/w0/aFknGren2oFDhZWBAK4AF62YNBro8YY/6a0vA4UjY4iHn9xfmLeWSgp7RRdTXg7vUO+01/D77ENuKs2aoT3Mwge8ewx+Uy5xmLAloTkC/uGt79xhmh3Yw1ZfJZJ/5H+81BcfZnMewQ6BWpRd+LIT2JTvPItYZSVglVjfEdxukXGA+ztbBL63cAzg4efOeq3r8t6a+oJCHLU9146otEvl4f7zy19zdf/511/oXwAAAP//AwAF3bjnvAYAAA== http_version: - recorded_at: Tue, 24 May 2016 22:16:17 GMT + recorded_at: Tue, 10 Oct 2017 20:50:25 GMT recorded_with: VCR 3.0.3 From f723007b0708f9f8fe194ad6f1dc0f5ffb0666f7 Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Mon, 23 Oct 2017 11:52:55 -0700 Subject: [PATCH 135/163] Add Solidus v2.4 to .travis.yml --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index bf594f37..cf4d4521 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,6 +23,7 @@ env: - SOLIDUS_BRANCH=v2.1 DB=postgres - SOLIDUS_BRANCH=v2.2 DB=postgres - SOLIDUS_BRANCH=v2.3 DB=postgres + - SOLIDUS_BRANCH=v2.4 DB=postgres - SOLIDUS_BRANCH=master DB=postgres - SOLIDUS_BRANCH=v1.1 DB=mysql - SOLIDUS_BRANCH=v1.2 DB=mysql @@ -32,4 +33,5 @@ env: - SOLIDUS_BRANCH=v2.1 DB=mysql - SOLIDUS_BRANCH=v2.2 DB=mysql - SOLIDUS_BRANCH=v2.3 DB=mysql + - SOLIDUS_BRANCH=v2.4 DB=mysql - SOLIDUS_BRANCH=master DB=mysql From a99e488b948d090331198f456b1a0248dfd10fb3 Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Wed, 25 Oct 2017 16:04:22 -0700 Subject: [PATCH 136/163] Update to new FactoryBot name --- solidus_braintree.gemspec | 2 +- spec/models/spree/credit_card_spec.rb | 2 +- .../solidus/gateway/braintree_gateway_spec.rb | 20 +++++++++---------- spec/spec_helper.rb | 4 ++-- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/solidus_braintree.gemspec b/solidus_braintree.gemspec index 2592b557..badfa70b 100644 --- a/solidus_braintree.gemspec +++ b/solidus_braintree.gemspec @@ -26,7 +26,7 @@ Gem::Specification.new do |spec| spec.add_development_dependency "bundler", "~> 1.10" spec.add_development_dependency "rake", "~> 10.0" - spec.add_development_dependency 'factory_girl', '~> 4.4' + spec.add_development_dependency 'factory_bot', '~> 4.4' spec.add_development_dependency 'rspec-rails' spec.add_development_dependency 'capybara' spec.add_development_dependency 'capybara-screenshot' diff --git a/spec/models/spree/credit_card_spec.rb b/spec/models/spree/credit_card_spec.rb index 18421a88..e6e56466 100644 --- a/spec/models/spree/credit_card_spec.rb +++ b/spec/models/spree/credit_card_spec.rb @@ -10,7 +10,7 @@ end it "validate presence of name on create" do expect do - FactoryGirl.create(:credit_card, + FactoryBot.create(:credit_card, payment_method: payment_method, name: nil ) diff --git a/spec/solidus/gateway/braintree_gateway_spec.rb b/spec/solidus/gateway/braintree_gateway_spec.rb index a2ec0a32..bf67bec5 100644 --- a/spec/solidus/gateway/braintree_gateway_spec.rb +++ b/spec/solidus/gateway/braintree_gateway_spec.rb @@ -2,16 +2,16 @@ describe Solidus::Gateway::BraintreeGateway, :vcr do let(:payment_method){ create_braintree_payment_method } - let(:user){ FactoryGirl.create :user } + let(:user){ FactoryBot.create :user } # #create_profile doesn't support options, does it need to? let(:device_data){"{\"device_session_id\":\"75197918b634416368241bb8996b560c\",\"fraud_merchant_id\":\"600000\"}"} let(:payment) do - FactoryGirl.create(:payment, - order: FactoryGirl.create(:order, + FactoryBot.create(:payment, + order: FactoryBot.create(:order, user: user ), - source: FactoryGirl.create(:credit_card, + source: FactoryBot.create(:credit_card, name: "Card Holder", user: user, ), @@ -62,14 +62,14 @@ context 'payment has associated device_data' do let(:payment) do - FactoryGirl.build( + FactoryBot.build( :payment, - order: FactoryGirl.create( + order: FactoryBot.create( :order, user: user, braintree_device_data: device_data ), - source: FactoryGirl.create( + source: FactoryBot.create( :credit_card, name: "Card Holder", user: user, @@ -121,7 +121,7 @@ if Spree.respond_to?(:solidus_version) && Spree.solidus_version > "1.1" context 'order gets updated with device_data' do it 'order passes device_data to create_profile' do - order = FactoryGirl.create(:order_with_line_items, user: user) + order = FactoryBot.create(:order_with_line_items, user: user) bill_address = order.bill_address expected_address = payment_method.send(:map_address, bill_address.try(:active_merchant_hash)) @@ -404,9 +404,9 @@ context "braintree attributes" do let(:nonce) { Braintree::Test::Nonce::Transactable } let(:creditcard) do - FactoryGirl.create(:credit_card, gateway_payment_profile_id: 'abc123') + FactoryBot.create(:credit_card, gateway_payment_profile_id: 'abc123') end - let(:address) { FactoryGirl.create(:address, last_name: "Doe") } + let(:address) { FactoryBot.create(:address, last_name: "Doe") } context "with a credit card" do let(:options) { { diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 9880082b..9a632dcb 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -65,7 +65,7 @@ def create_braintree_payment_method Braintree::Configuration.logger = Rails.logger -FactoryGirl.find_definitions +FactoryBot.find_definitions VCR.configure do |c| c.cassette_library_dir = "spec/cassettes" @@ -81,7 +81,7 @@ def create_braintree_payment_method #config.filter_run focus: true #config.filter_run_excluding slow: true - config.include FactoryGirl::Syntax::Methods + config.include FactoryBot::Syntax::Methods config.include Spree::TestingSupport::Preferences config.include Spree::TestingSupport::ControllerRequests, type: :controller config.include Spree::TestingSupport::UrlHelpers, type: :controller From 4fc813fc9b71c321c68655690083a033294f8d64 Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Thu, 11 Jan 2018 11:25:11 -0800 Subject: [PATCH 137/163] Use pg ~> 0.21 --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index e9078c59..d28f67b4 100644 --- a/Gemfile +++ b/Gemfile @@ -9,7 +9,7 @@ else gem "rails_test_params_backport", group: :test end -gem 'pg' +gem 'pg', '~> 0.21' gem 'mysql2' group :development, :test do From ba7a5e28179cc9e1c0d482b8aa81f526028515e1 Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Thu, 15 Feb 2018 14:59:27 -0800 Subject: [PATCH 138/163] Add Solidus v2.5 to .travis.yml --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index cf4d4521..a73a3f6a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -24,6 +24,7 @@ env: - SOLIDUS_BRANCH=v2.2 DB=postgres - SOLIDUS_BRANCH=v2.3 DB=postgres - SOLIDUS_BRANCH=v2.4 DB=postgres + - SOLIDUS_BRANCH=v2.5 DB=postgres - SOLIDUS_BRANCH=master DB=postgres - SOLIDUS_BRANCH=v1.1 DB=mysql - SOLIDUS_BRANCH=v1.2 DB=mysql @@ -34,4 +35,5 @@ env: - SOLIDUS_BRANCH=v2.2 DB=mysql - SOLIDUS_BRANCH=v2.3 DB=mysql - SOLIDUS_BRANCH=v2.4 DB=mysql + - SOLIDUS_BRANCH=v2.5 DB=mysql - SOLIDUS_BRANCH=master DB=mysql From bd41f09918b91b7f8b25d196c2baa5b7ad62b5fe Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Mon, 26 Feb 2018 10:57:21 -0800 Subject: [PATCH 139/163] Specify Rails versions in Gemfile Without this bundler needs 36 minutes to resolve dependencies for Solidus 2.0, 2.1, or 2.2. --- Gemfile | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index e9078c59..11d061cf 100644 --- a/Gemfile +++ b/Gemfile @@ -3,9 +3,14 @@ source "https://rubygems.org" branch = ENV.fetch('SOLIDUS_BRANCH', 'master') gem "solidus", github: "solidusio/solidus", branch: branch -if branch == 'master' || branch >= "v2.0" +if branch == 'master' || branch >= "v2.3" + gem "rails", "~> 5.1.0" + gem "rails-controller-testing", group: :test +elsif branch >= "v2.0" + gem "rails", "~> 5.0.0" gem "rails-controller-testing", group: :test else + gem "rails", "~> 4.2.0" gem "rails_test_params_backport", group: :test end From e53fc559a6df9b3dbcb3eb170eb1696521148a8c Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Mon, 26 Mar 2018 11:25:41 -0700 Subject: [PATCH 140/163] Lock mysql2 to 0.4.x --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 082474cf..dc351c97 100644 --- a/Gemfile +++ b/Gemfile @@ -15,7 +15,7 @@ else end gem 'pg', '~> 0.21' -gem 'mysql2' +gem 'mysql2', '~> 0.4.10' group :development, :test do gem "pry-rails" From 23d69bd5b799b8ed14c666008fdea311abb8770c Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Mon, 7 May 2018 15:34:56 -0700 Subject: [PATCH 141/163] Add Solidus v2.6 to .travis.yml --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index a73a3f6a..0d1dde75 100644 --- a/.travis.yml +++ b/.travis.yml @@ -25,6 +25,7 @@ env: - SOLIDUS_BRANCH=v2.3 DB=postgres - SOLIDUS_BRANCH=v2.4 DB=postgres - SOLIDUS_BRANCH=v2.5 DB=postgres + - SOLIDUS_BRANCH=v2.6 DB=postgres - SOLIDUS_BRANCH=master DB=postgres - SOLIDUS_BRANCH=v1.1 DB=mysql - SOLIDUS_BRANCH=v1.2 DB=mysql @@ -36,4 +37,5 @@ env: - SOLIDUS_BRANCH=v2.3 DB=mysql - SOLIDUS_BRANCH=v2.4 DB=mysql - SOLIDUS_BRANCH=v2.5 DB=mysql + - SOLIDUS_BRANCH=v2.6 DB=mysql - SOLIDUS_BRANCH=master DB=mysql From 341864982a602bd4b861a8f1c34c07bfe0b528d9 Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Tue, 8 May 2018 13:57:02 -0700 Subject: [PATCH 142/163] Lock capybara to 2.x Capybara 3.0 has an undeclared dependency on puma, which is breaking the build. --- solidus_braintree.gemspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/solidus_braintree.gemspec b/solidus_braintree.gemspec index badfa70b..c4024632 100644 --- a/solidus_braintree.gemspec +++ b/solidus_braintree.gemspec @@ -28,7 +28,7 @@ Gem::Specification.new do |spec| spec.add_development_dependency "rake", "~> 10.0" spec.add_development_dependency 'factory_bot', '~> 4.4' spec.add_development_dependency 'rspec-rails' - spec.add_development_dependency 'capybara' + spec.add_development_dependency 'capybara', '~> 2.18' spec.add_development_dependency 'capybara-screenshot' spec.add_development_dependency 'poltergeist', '~> 1.9' spec.add_development_dependency 'ffaker' From 6bb6960c27cd6aa834242cf56632500dfdae6119 Mon Sep 17 00:00:00 2001 From: Gregor MacDougall Date: Fri, 25 May 2018 11:55:42 -0400 Subject: [PATCH 143/163] Version 1.2.0 --- lib/solidus_braintree/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/solidus_braintree/version.rb b/lib/solidus_braintree/version.rb index ab5ef40e..8324c1d3 100644 --- a/lib/solidus_braintree/version.rb +++ b/lib/solidus_braintree/version.rb @@ -1,3 +1,3 @@ module SolidusBraintree - VERSION = "1.1.0" + VERSION = "1.2.0" end From b957baf7d60a51f64cc1067730c495d72ba077c9 Mon Sep 17 00:00:00 2001 From: jacob Date: Mon, 24 Sep 2018 07:00:35 -0500 Subject: [PATCH 144/163] Add Solidus 2.7 to .travis.yml --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index 0d1dde75..cee7056a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -26,6 +26,7 @@ env: - SOLIDUS_BRANCH=v2.4 DB=postgres - SOLIDUS_BRANCH=v2.5 DB=postgres - SOLIDUS_BRANCH=v2.6 DB=postgres + - SOLIDUS_BRANCH=v2.7 DB=postgres - SOLIDUS_BRANCH=master DB=postgres - SOLIDUS_BRANCH=v1.1 DB=mysql - SOLIDUS_BRANCH=v1.2 DB=mysql @@ -38,4 +39,5 @@ env: - SOLIDUS_BRANCH=v2.4 DB=mysql - SOLIDUS_BRANCH=v2.5 DB=mysql - SOLIDUS_BRANCH=v2.6 DB=mysql + - SOLIDUS_BRANCH=v2.7 DB=mysql - SOLIDUS_BRANCH=master DB=mysql From f9844f03e3a9b507b63980989d96495bd345e6b1 Mon Sep 17 00:00:00 2001 From: jacob Date: Tue, 25 Sep 2018 10:33:24 -0500 Subject: [PATCH 145/163] Remove versions past EOL from .travis.yml Refs https://github.com/solidusio/solidus/issues/2866#issuecomment-424385411 There is no reason to invest resources in testing extensions against Solidus versions that have passed EOL. [Solidus Version Maintenance/EOL policy](https://solidus.io/blog/2018/01/04/maintenance-eol-policy.html) --- .travis.yml | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/.travis.yml b/.travis.yml index cee7056a..bf5897e8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,12 +15,6 @@ rvm: - 2.3.1 env: matrix: - - SOLIDUS_BRANCH=v1.1 DB=postgres - - SOLIDUS_BRANCH=v1.2 DB=postgres - - SOLIDUS_BRANCH=v1.3 DB=postgres - - SOLIDUS_BRANCH=v1.4 DB=postgres - - SOLIDUS_BRANCH=v2.0 DB=postgres - - SOLIDUS_BRANCH=v2.1 DB=postgres - SOLIDUS_BRANCH=v2.2 DB=postgres - SOLIDUS_BRANCH=v2.3 DB=postgres - SOLIDUS_BRANCH=v2.4 DB=postgres @@ -28,12 +22,6 @@ env: - SOLIDUS_BRANCH=v2.6 DB=postgres - SOLIDUS_BRANCH=v2.7 DB=postgres - SOLIDUS_BRANCH=master DB=postgres - - SOLIDUS_BRANCH=v1.1 DB=mysql - - SOLIDUS_BRANCH=v1.2 DB=mysql - - SOLIDUS_BRANCH=v1.3 DB=mysql - - SOLIDUS_BRANCH=v1.4 DB=mysql - - SOLIDUS_BRANCH=v2.0 DB=mysql - - SOLIDUS_BRANCH=v2.1 DB=mysql - SOLIDUS_BRANCH=v2.2 DB=mysql - SOLIDUS_BRANCH=v2.3 DB=mysql - SOLIDUS_BRANCH=v2.4 DB=mysql From 8fabd434a3222b1f4124275fe5e76197afb1528f Mon Sep 17 00:00:00 2001 From: andrea longhi Date: Fri, 23 Nov 2018 17:44:51 +0100 Subject: [PATCH 146/163] Fix Travis issue with Solidus old versions (Factory Bot gem) For Solidus versions older than `v2.5` gem `factory_bot 4.10.0` must be used for compatibility reasons. --- Gemfile | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/Gemfile b/Gemfile index dc351c97..e5c5df71 100644 --- a/Gemfile +++ b/Gemfile @@ -14,10 +14,20 @@ else gem "rails_test_params_backport", group: :test end -gem 'pg', '~> 0.21' -gem 'mysql2', '~> 0.4.10' +case ENV['DB'] +when 'mysql' + gem 'mysql2' +when 'postgres' + gem 'pg', '< 1.0' +end group :development, :test do + if branch < "v2.5" + gem 'factory_bot', '4.10.0' + else + gem 'factory_bot', '> 4.10.0' + end + gem "pry-rails" end From 6605e11c141a511e72a8c3da9e67966d2fb0f345 Mon Sep 17 00:00:00 2001 From: Jacob Herrington Date: Mon, 17 Dec 2018 09:10:54 -0600 Subject: [PATCH 147/163] Remove 2.2 from CI (EOL) --- .travis.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index bf5897e8..428a59a3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,14 +15,12 @@ rvm: - 2.3.1 env: matrix: - - SOLIDUS_BRANCH=v2.2 DB=postgres - SOLIDUS_BRANCH=v2.3 DB=postgres - SOLIDUS_BRANCH=v2.4 DB=postgres - SOLIDUS_BRANCH=v2.5 DB=postgres - SOLIDUS_BRANCH=v2.6 DB=postgres - SOLIDUS_BRANCH=v2.7 DB=postgres - SOLIDUS_BRANCH=master DB=postgres - - SOLIDUS_BRANCH=v2.2 DB=mysql - SOLIDUS_BRANCH=v2.3 DB=mysql - SOLIDUS_BRANCH=v2.4 DB=mysql - SOLIDUS_BRANCH=v2.5 DB=mysql From 5f8e07f657c78b3d8a1cfb34ae8e6e8819d74de2 Mon Sep 17 00:00:00 2001 From: Taylor Scott Date: Mon, 28 Jan 2019 15:30:55 -0800 Subject: [PATCH 148/163] Fix references to Spree.t `Spree.t` is deprecated and should be replaced with `I18n.t('spree.XXXXX')`. --- .../payments/source_forms/_braintree.html.erb | 4 ++-- .../payments/source_views/_braintree.html.erb | 6 +++--- .../spree/checkout/payment/_braintree.html.erb | 16 ++++++++-------- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/app/views/spree/admin/payments/source_forms/_braintree.html.erb b/app/views/spree/admin/payments/source_forms/_braintree.html.erb index 913a33b2..73f15163 100644 --- a/app/views/spree/admin/payments/source_forms/_braintree.html.erb +++ b/app/views/spree/admin/payments/source_forms/_braintree.html.erb @@ -5,7 +5,7 @@ <% end %> <% end %> - +
@@ -27,7 +27,7 @@
- <%= label_tag "card_address#{payment_method.id}", Spree.t(:billing_address) %> + <%= label_tag "card_address#{payment_method.id}", t('spree.billing_address') %> <% address = @order.bill_address || @order.ship_address || Spree::Address.build_default %> <%= fields_for "#{param_prefix}[address_attributes]", address do |f| %> <%= render :partial => 'spree/admin/shared/address_form', :locals => { :f => f, :type => "billing" } %> diff --git a/app/views/spree/admin/payments/source_views/_braintree.html.erb b/app/views/spree/admin/payments/source_views/_braintree.html.erb index bb8ae033..8067cd9c 100644 --- a/app/views/spree/admin/payments/source_views/_braintree.html.erb +++ b/app/views/spree/admin/payments/source_views/_braintree.html.erb @@ -4,13 +4,13 @@
-
<%= Spree.t(:identifier) %>:
+
<%= t('spree.identifier') %>:
<%= payment.number %>
-
<%= Spree.t(:response_code) %>:
+
<%= t('spree.response_code') %>:
<%= braintree_transaction_link(payment.response_code) %>
-
<%= Spree.t(:name_on_card) %>:
+
<%= t('spree.name_on_card') %>:
<%= payment.source.name %>
<%= Spree::CreditCard.human_attribute_name(:cc_type) %>:
diff --git a/app/views/spree/checkout/payment/_braintree.html.erb b/app/views/spree/checkout/payment/_braintree.html.erb index 9255f0bc..5968722d 100644 --- a/app/views/spree/checkout/payment/_braintree.html.erb +++ b/app/views/spree/checkout/payment/_braintree.html.erb @@ -7,7 +7,7 @@
- +
<%= t('solidus_braintree.creditcard_header_html') %> @@ -16,31 +16,31 @@ <% param_prefix = "payment_source[#{payment_method.id}]" %>

- <%= label_tag "name_on_card_#{payment_method.id}", Spree.t(:name_on_card) %>*
+ <%= label_tag "name_on_card_#{payment_method.id}", t('spree.name_on_card') %>*
<%= text_field_tag "#{param_prefix}[name]", "#{@order.billing_firstname} #{@order.billing_lastname}", { id: "name_on_card_#{payment_method.id}", :autocomplete => "cc-name" } %>

- <%= label_tag "braintree_card_number", Spree.t(:card_number) %>*
+ <%= label_tag "braintree_card_number", t('spree.card_number') %>*
 

- <%= label_tag "braintree_card_expiry", Spree.t(:expiration) %>*
+ <%= label_tag "braintree_card_expiry", t('spree.expiration') %>*

- <%= label_tag "braintree_card_code", Spree.t(:card_code) %>*
+ <%= label_tag "braintree_card_code", t('spree.card_code') %>*
- <%= link_to "(#{Spree.t(:what_is_this)})", spree.cvv_path, :target => '_blank', "data-hook" => "cvv_link", :id => "cvv_link" %> + <%= link_to "(#{t('spree.what_is_this')})", spree.cvv_path, :target => '_blank', "data-hook" => "cvv_link", :id => "cvv_link" %>

From 2372bbcc9c86b5a646b300562ce302cfbfdcac83 Mon Sep 17 00:00:00 2001 From: Angel Perez Date: Thu, 7 Feb 2019 12:42:31 -0400 Subject: [PATCH 149/163] Update Travis build matrix It introduces the following changes: * Add Solidus v2.8 * Remove Solidus v2.3 --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 428a59a3..943f8b7a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,15 +15,15 @@ rvm: - 2.3.1 env: matrix: - - SOLIDUS_BRANCH=v2.3 DB=postgres - SOLIDUS_BRANCH=v2.4 DB=postgres - SOLIDUS_BRANCH=v2.5 DB=postgres - SOLIDUS_BRANCH=v2.6 DB=postgres - SOLIDUS_BRANCH=v2.7 DB=postgres + - SOLIDUS_BRANCH=v2.8 DB=postgres - SOLIDUS_BRANCH=master DB=postgres - - SOLIDUS_BRANCH=v2.3 DB=mysql - SOLIDUS_BRANCH=v2.4 DB=mysql - SOLIDUS_BRANCH=v2.5 DB=mysql - SOLIDUS_BRANCH=v2.6 DB=mysql - SOLIDUS_BRANCH=v2.7 DB=mysql + - SOLIDUS_BRANCH=v2.8 DB=mysql - SOLIDUS_BRANCH=master DB=mysql From 89331040423707e6688fc258bd91aa8b11d80b4c Mon Sep 17 00:00:00 2001 From: Angel Perez Date: Thu, 7 Feb 2019 12:44:04 -0400 Subject: [PATCH 150/163] Lock SQLite3 to version 1.3 SQLite3 v1.4 was released on February 4th, which breaks compatibility with ActiveRecord's adapter for said DB engine. --- solidus_braintree.gemspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/solidus_braintree.gemspec b/solidus_braintree.gemspec index c4024632..46e91e79 100644 --- a/solidus_braintree.gemspec +++ b/solidus_braintree.gemspec @@ -35,7 +35,7 @@ Gem::Specification.new do |spec| spec.add_development_dependency "rspec" spec.add_development_dependency "pry" spec.add_development_dependency "byebug" - spec.add_development_dependency 'sqlite3' + spec.add_development_dependency 'sqlite3', '~> 1.3.6' spec.add_development_dependency 'database_cleaner', '~> 1.2' spec.add_development_dependency "vcr", '~> 3.0' spec.add_development_dependency "webmock" From 07faeb7b6b1b3d49d8b8860d0e192475c5f3d433 Mon Sep 17 00:00:00 2001 From: Angel Perez Date: Fri, 19 Apr 2019 11:28:07 -0400 Subject: [PATCH 151/163] Use feature_helper from Solidus Support --- Gemfile | 1 + solidus_braintree.gemspec | 2 +- spec/spec_helper.rb | 31 ++----------------------------- 3 files changed, 4 insertions(+), 30 deletions(-) diff --git a/Gemfile b/Gemfile index e5c5df71..b7486a23 100644 --- a/Gemfile +++ b/Gemfile @@ -2,6 +2,7 @@ source "https://rubygems.org" branch = ENV.fetch('SOLIDUS_BRANCH', 'master') gem "solidus", github: "solidusio/solidus", branch: branch +gem "solidus_support", github: "solidusio/solidus_support" if branch == 'master' || branch >= "v2.3" gem "rails", "~> 5.1.0" diff --git a/solidus_braintree.gemspec b/solidus_braintree.gemspec index 46e91e79..6cbbcbba 100644 --- a/solidus_braintree.gemspec +++ b/solidus_braintree.gemspec @@ -30,7 +30,7 @@ Gem::Specification.new do |spec| spec.add_development_dependency 'rspec-rails' spec.add_development_dependency 'capybara', '~> 2.18' spec.add_development_dependency 'capybara-screenshot' - spec.add_development_dependency 'poltergeist', '~> 1.9' + spec.add_development_dependency 'selenium-webdriver', '~> 3.11.0' spec.add_development_dependency 'ffaker' spec.add_development_dependency "rspec" spec.add_development_dependency "pry" diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 9a632dcb..c1f20aeb 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,4 +1,5 @@ require 'simplecov' + SimpleCov.start do add_filter 'spec/dummy' add_group 'Controllers', 'app/controllers' @@ -15,34 +16,16 @@ require 'solidus_braintree' require_relative "dummy/config/environment" -require 'rspec/rails' -require 'database_cleaner' -require 'ffaker' require 'vcr' require 'webmock' require 'pry' require 'byebug' +require 'solidus_support/extension/feature_helper' Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} -require 'spree/testing_support/authorization_helpers' -require 'spree/testing_support/factories' require 'spree/testing_support/order_walkthrough' -require 'spree/testing_support/preferences' require 'spree/testing_support/controller_requests' -require 'spree/testing_support/url_helpers' - -require 'capybara/rspec' -require 'capybara-screenshot/rspec' -require 'capybara/poltergeist' -Capybara.register_driver(:poltergeist) do |app| - Capybara::Poltergeist::Driver.new app, { - phantomjs_options: %w[--ssl-protocol=any --ignore-ssl-errors=true --load-images=false], - timeout: 90 - } -end -Capybara.javascript_driver = :poltergeist -Capybara.default_max_wait_time = 10 module SolidusGateway module Helpers @@ -75,27 +58,17 @@ def create_braintree_payment_method end RSpec.configure do |config| - config.mock_with :rspec config.use_transactional_fixtures = false - - #config.filter_run focus: true - #config.filter_run_excluding slow: true - - config.include FactoryBot::Syntax::Methods - config.include Spree::TestingSupport::Preferences config.include Spree::TestingSupport::ControllerRequests, type: :controller config.include Spree::TestingSupport::UrlHelpers, type: :controller config.include SolidusGateway::Helpers::BraintreeGateway config.before :suite do DatabaseCleaner.strategy = :transaction - DatabaseCleaner.clean_with :truncation end config.before do |example| - DatabaseCleaner.strategy = example.metadata[:js] ? :truncation : :transaction DatabaseCleaner.start - reset_spree_preferences end config.after do From 4b1b11fba42ac2ff6edfb7fed01b362499b99c45 Mon Sep 17 00:00:00 2001 From: Angel Perez Date: Fri, 19 Apr 2019 11:30:14 -0400 Subject: [PATCH 152/163] Clean up spec helper --- spec/spec_helper.rb | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index c1f20aeb..20109c7a 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -20,10 +20,8 @@ require 'webmock' require 'pry' require 'byebug' -require 'solidus_support/extension/feature_helper' - -Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} +require 'solidus_support/extension/feature_helper' require 'spree/testing_support/order_walkthrough' require 'spree/testing_support/controller_requests' @@ -47,7 +45,6 @@ def create_braintree_payment_method end Braintree::Configuration.logger = Rails.logger - FactoryBot.find_definitions VCR.configure do |c| From 7af5e6d12c1a8395ebdbc02e07411dd63d3c0418 Mon Sep 17 00:00:00 2001 From: Angel Perez Date: Fri, 19 Apr 2019 11:38:23 -0400 Subject: [PATCH 153/163] Setup CI to use ChromeDriver --- .travis.yml | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/.travis.yml b/.travis.yml index 943f8b7a..4c0cdb1a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,16 +1,12 @@ sudo: false language: ruby -cache: - directories: - - travis_phantomjs - +addons: + chrome: stable + apt: + packages: + - chromium-chromedriver before_install: - - "export PATH=$PWD/travis_phantomjs/phantomjs-2.1.1-linux-x86_64/bin:$PATH" - - "if [ $(phantomjs --version) != '2.1.1' ]; then rm -rf $PWD/travis_phantomjs; mkdir -p $PWD/travis_phantomjs; fi" - - "if [ $(phantomjs --version) != '2.1.1' ]; then wget https://github.com/Medium/phantomjs/releases/download/v2.1.1/phantomjs-2.1.1-linux-x86_64.tar.bz2 -O $PWD/travis_phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2; fi" - - "if [ $(phantomjs --version) != '2.1.1' ]; then tar -xvf $PWD/travis_phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2 -C $PWD/travis_phantomjs; fi" - - "phantomjs --version" - + - ln -s /usr/lib/chromium-browser/chromedriver ~/bin/chromedriver rvm: - 2.3.1 env: From 460e2f7aa121ec66611d794c79e70a8e4c95615f Mon Sep 17 00:00:00 2001 From: Angel Perez Date: Fri, 19 Apr 2019 13:20:22 -0400 Subject: [PATCH 154/163] Use strings when selecting an element Using Capybara 'select' with an argument other than a string or a symbol will raise an error on future Capybara versions --- spec/features/checkout_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/features/checkout_spec.rb b/spec/features/checkout_spec.rb index 02158fbc..bdf45233 100644 --- a/spec/features/checkout_spec.rb +++ b/spec/features/checkout_spec.rb @@ -228,7 +228,7 @@ def fill_in_address fill_in "Street Address", with: "YT-1300" fill_in "City", with: "Mos Eisley" select country.name, from: "Country" - select country.states.first, from: "order_bill_address_attributes_state_id" + select country.states.first.name, from: "order_bill_address_attributes_state_id" fill_in "Zip", with: "12010" fill_in "Phone", with: "(555) 555-5555" end From 8985f58a06964accd40f5f88fb566289ee8fdbe6 Mon Sep 17 00:00:00 2001 From: Maurizio De Santis Date: Tue, 4 Jun 2019 13:13:54 +0200 Subject: [PATCH 155/163] Suggest setting a value for environment preference Leaving environment preference unset or setting it with a wrong value (a wrong value is a value that is not listed [here](https://github.com/braintree/braintree_ruby/blob/7660ae6f6d228acee8eaedd1830afafbaf91820f/lib/braintree/configuration.rb#L235)) leads to unexpected errors, like the following: ``` Errno::ECONNREFUSED (Failed to open TCP connection to :80 (Connection refused - connect(2) for nil port 80)): /home/maurizio/.asdf/installs/ruby/2.6.2/lib/ruby/2.6.0/net/http.rb:949:in `rescue in block in connect' /home/maurizio/.asdf/installs/ruby/2.6.2/lib/ruby/2.6.0/net/http.rb:946:in `block in connect' /home/maurizio/.asdf/installs/ruby/2.6.2/lib/ruby/2.6.0/timeout.rb:76:in `timeout' /home/maurizio/.asdf/installs/ruby/2.6.2/lib/ruby/2.6.0/net/http.rb:945:in `connect' /home/maurizio/.asdf/installs/ruby/2.6.2/lib/ruby/2.6.0/net/http.rb:930:in `do_start' /home/maurizio/.asdf/installs/ruby/2.6.2/lib/ruby/2.6.0/net/http.rb:919:in `start' braintree (2.96.0) lib/braintree/http.rb:111:in `_http_do' braintree (2.96.0) lib/braintree/http.rb:37:in `post' braintree (2.96.0) lib/braintree/client_token_gateway.rb:19:in `generate' /home/maurizio/Sviluppo/Nebulab/solidus_braintree/app/models/solidus/gateway/braintree_gateway.rb:61:in `generate_client_token' /home/maurizio/Sviluppo/Nebulab/solidus_braintree/app/controllers/spree/api/braintree_client_token_controller.rb:11:in `create' ``` --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ca139776..d0b989ed 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ Control Panel. This gem extends your solidus application by adding a `POST /api/payment_client_token` endpoint to you application to generate Braintree payment client token. This endpoint requires an authentication token in your request header. -It creates a new `PaymentMethod` class called `Solidus::Gateway::BraintreeGateway`. You can configure this payment method in the admin and add your Braintree public/private keys and merchant id. The admin will render a Braintree dropin container when prompting you to create an order payment. +It creates a new `PaymentMethod` class called `Solidus::Gateway::BraintreeGateway`. You can configure this payment method in the admin and add your Braintree public/private keys, merchant id, and the proper environment. Please ensure that the environment value is included among the values listed [here](https://github.com/braintree/braintree_ruby/blob/7660ae6f6d228acee8eaedd1830afafbaf91820f/lib/braintree/configuration.rb#L235), otherwise you will encounter unexpected errors. The admin will render a Braintree dropin container when prompting you to create an order payment. It adds a json or text `data` field on `Spree::CreditCard` for storing additional information received from Braintree for addtional payment methods. From 3a0b165e16f1acc0b77f110bba118f6a9a994a67 Mon Sep 17 00:00:00 2001 From: Alessandro Desantis Date: Fri, 13 Sep 2019 15:32:47 +0200 Subject: [PATCH 156/163] Adopt CircleCI instead of Travis --- .circleci/config.yml | 35 +++++++++++++++++++++++++++++++++++ .travis.yml | 25 ------------------------- README.md | 2 +- 3 files changed, 36 insertions(+), 26 deletions(-) create mode 100644 .circleci/config.yml delete mode 100644 .travis.yml diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 00000000..12bb10ef --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,35 @@ +version: 2.1 + +orbs: + # Always take the latest version of the orb, this allows us to + # run specs against Solidus supported versions only without the need + # to change this configuration every time a Solidus version is released + # or goes EOL. + solidusio_extensions: solidusio/extensions@volatile + +jobs: + run-specs-with-postgres: + executor: solidusio_extensions/postgres + steps: + - solidusio_extensions/run-tests + run-specs-with-mysql: + executor: solidusio_extensions/mysql + steps: + - solidusio_extensions/run-tests + +workflows: + "Run specs on supported Solidus versions": + jobs: + - run-specs-with-postgres + - run-specs-with-mysql + "Weekly run specs against master": + triggers: + - schedule: + cron: "0 0 * * 4" # every Thursday + filters: + branches: + only: + - master + jobs: + - run-specs-with-postgres + - run-specs-with-mysql diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 4c0cdb1a..00000000 --- a/.travis.yml +++ /dev/null @@ -1,25 +0,0 @@ -sudo: false -language: ruby -addons: - chrome: stable - apt: - packages: - - chromium-chromedriver -before_install: - - ln -s /usr/lib/chromium-browser/chromedriver ~/bin/chromedriver -rvm: - - 2.3.1 -env: - matrix: - - SOLIDUS_BRANCH=v2.4 DB=postgres - - SOLIDUS_BRANCH=v2.5 DB=postgres - - SOLIDUS_BRANCH=v2.6 DB=postgres - - SOLIDUS_BRANCH=v2.7 DB=postgres - - SOLIDUS_BRANCH=v2.8 DB=postgres - - SOLIDUS_BRANCH=master DB=postgres - - SOLIDUS_BRANCH=v2.4 DB=mysql - - SOLIDUS_BRANCH=v2.5 DB=mysql - - SOLIDUS_BRANCH=v2.6 DB=mysql - - SOLIDUS_BRANCH=v2.7 DB=mysql - - SOLIDUS_BRANCH=v2.8 DB=mysql - - SOLIDUS_BRANCH=master DB=mysql diff --git a/README.md b/README.md index ca139776..01956b66 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Solidus Braintree -[![Build Status](https://travis-ci.org/solidusio/solidus_braintree.svg?branch=master)](https://travis-ci.org/solidusio/solidus_braintree) +[![CircleCI](https://circleci.com/gh/solidusio/solidus_braintree.svg?style=svg)](https://circleci.com/gh/solidusio/solidus_braintree) `solidus_braintree` is a gem that adds [Braintree v.zero](https://www.braintreepayments.com/v-zero) support to the [solidus](http://solidus.io/) E-commerce platform. From d27b8cde80109dfb15bf10d49a0dc107f0170843 Mon Sep 17 00:00:00 2001 From: Alessandro Desantis Date: Fri, 13 Sep 2019 17:25:28 +0200 Subject: [PATCH 157/163] Use solidus_support to configure the test environment --- .gitignore | 1 + solidus_braintree.gemspec | 2 +- spec/spec_helper.rb | 75 ++++++-------------------------- spec/support/braintree_helper.rb | 22 ++++++++++ spec/support/vcr.rb | 9 ++++ 5 files changed, 47 insertions(+), 62 deletions(-) create mode 100644 spec/support/braintree_helper.rb create mode 100644 spec/support/vcr.rb diff --git a/.gitignore b/.gitignore index 79a1f313..bc246b46 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ /spec/reports/ /tmp/ /spec/dummy +/spec/examples.txt diff --git a/solidus_braintree.gemspec b/solidus_braintree.gemspec index 6cbbcbba..6ad7a3f1 100644 --- a/solidus_braintree.gemspec +++ b/solidus_braintree.gemspec @@ -30,7 +30,7 @@ Gem::Specification.new do |spec| spec.add_development_dependency 'rspec-rails' spec.add_development_dependency 'capybara', '~> 2.18' spec.add_development_dependency 'capybara-screenshot' - spec.add_development_dependency 'selenium-webdriver', '~> 3.11.0' + spec.add_development_dependency 'webdrivers' spec.add_development_dependency 'ffaker' spec.add_development_dependency "rspec" spec.add_development_dependency "pry" diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 20109c7a..fffbfcf8 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,74 +1,27 @@ -require 'simplecov' +# frozen_string_literal: true -SimpleCov.start do - add_filter 'spec/dummy' - add_group 'Controllers', 'app/controllers' - add_group 'Helpers', 'app/helpers' - add_group 'Mailers', 'app/mailers' - add_group 'Models', 'app/models' - add_group 'Views', 'app/views' - add_group 'Libraries', 'lib' -end - -$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__) -ENV["RAILS_ENV"] = "test" +require "simplecov" +SimpleCov.start "rails" -require 'solidus_braintree' +ENV["RAILS_ENV"] ||= "test" -require_relative "dummy/config/environment" -require 'vcr' -require 'webmock' -require 'pry' -require 'byebug' +require File.expand_path('dummy/config/environment.rb', __dir__) -require 'solidus_support/extension/feature_helper' -require 'spree/testing_support/order_walkthrough' +require 'webdrivers' +require "solidus_support/extension/feature_helper" require 'spree/testing_support/controller_requests' +require 'spree/testing_support/capybara_ext' -module SolidusGateway - module Helpers - module BraintreeGateway - def create_braintree_payment_method - gateway = Solidus::Gateway::BraintreeGateway.create!( - name: 'Braintree Gateway', - active: true - ) - gateway.set_preference(:environment, 'sandbox') - gateway.set_preference(:merchant_id, 'zbn5yzq9t7wmwx42') - gateway.set_preference(:public_key, 'ym9djwqpkxbv3xzt') - gateway.set_preference(:private_key, '4ghghkyp2yy6yqc8') - gateway.save! - gateway - end - end - end -end +Dir[File.join(File.dirname(__FILE__), "support/**/*.rb")].each { |f| require f } -Braintree::Configuration.logger = Rails.logger FactoryBot.find_definitions -VCR.configure do |c| - c.cassette_library_dir = "spec/cassettes" - c.hook_into :webmock - c.ignore_localhost = true - c.configure_rspec_metadata! -end - RSpec.configure do |config| - config.use_transactional_fixtures = false - config.include Spree::TestingSupport::ControllerRequests, type: :controller - config.include Spree::TestingSupport::UrlHelpers, type: :controller - config.include SolidusGateway::Helpers::BraintreeGateway + config.infer_spec_type_from_file_location! + config.raise_errors_for_deprecations! - config.before :suite do - DatabaseCleaner.strategy = :transaction - end + config.example_status_persistence_file_path = "./spec/examples.txt" - config.before do |example| - DatabaseCleaner.start - end - - config.after do - DatabaseCleaner.clean - end + config.include Spree::TestingSupport::UrlHelpers + config.include Spree::TestingSupport::ControllerRequests, type: :controller end diff --git a/spec/support/braintree_helper.rb b/spec/support/braintree_helper.rb new file mode 100644 index 00000000..2e5e9873 --- /dev/null +++ b/spec/support/braintree_helper.rb @@ -0,0 +1,22 @@ +module SolidusGateway + module Helpers + module BraintreeGateway + def create_braintree_payment_method + gateway = Solidus::Gateway::BraintreeGateway.create!( + name: 'Braintree Gateway', + active: true + ) + gateway.set_preference(:environment, 'sandbox') + gateway.set_preference(:merchant_id, 'zbn5yzq9t7wmwx42') + gateway.set_preference(:public_key, 'ym9djwqpkxbv3xzt') + gateway.set_preference(:private_key, '4ghghkyp2yy6yqc8') + gateway.save! + gateway + end + end + end +end + +RSpec.configure do |config| + config.include SolidusGateway::Helpers::BraintreeGateway +end diff --git a/spec/support/vcr.rb b/spec/support/vcr.rb new file mode 100644 index 00000000..30658aa7 --- /dev/null +++ b/spec/support/vcr.rb @@ -0,0 +1,9 @@ +require 'vcr' + +VCR.configure do |c| + c.cassette_library_dir = "spec/cassettes" + c.hook_into :webmock + c.ignore_localhost = true + c.configure_rspec_metadata! + c.ignore_hosts 'chromedriver.storage.googleapis.com' +end From 080a9eb4b4cc6adc5b8fd5275facd6e889f50f10 Mon Sep 17 00:00:00 2001 From: Alessandro Desantis Date: Fri, 13 Sep 2019 17:29:42 +0200 Subject: [PATCH 158/163] Clean up Gemfile for testing --- Gemfile | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/Gemfile b/Gemfile index b7486a23..ae42b7d7 100644 --- a/Gemfile +++ b/Gemfile @@ -2,33 +2,26 @@ source "https://rubygems.org" branch = ENV.fetch('SOLIDUS_BRANCH', 'master') gem "solidus", github: "solidusio/solidus", branch: branch -gem "solidus_support", github: "solidusio/solidus_support" -if branch == 'master' || branch >= "v2.3" - gem "rails", "~> 5.1.0" - gem "rails-controller-testing", group: :test -elsif branch >= "v2.0" - gem "rails", "~> 5.0.0" - gem "rails-controller-testing", group: :test +# Needed to help Bundler figure out how to resolve dependencies, +# otherwise it takes forever to resolve them +if branch == 'master' || Gem::Version.new(branch[1..-1]) >= Gem::Version.new('2.10.0') + gem 'rails', '~> 6.0' else - gem "rails", "~> 4.2.0" - gem "rails_test_params_backport", group: :test + gem 'rails', '~> 5.0' end case ENV['DB'] when 'mysql' gem 'mysql2' when 'postgres' - gem 'pg', '< 1.0' + gem 'pg' end -group :development, :test do - if branch < "v2.5" - gem 'factory_bot', '4.10.0' - else - gem 'factory_bot', '> 4.10.0' - end +gem "rails-controller-testing", group: :test +group :development, :test do + gem 'factory_bot', '> 4.10.0' gem "pry-rails" end From 60b97f85b1bd44a620b7e439d4082b42af9fd797 Mon Sep 17 00:00:00 2001 From: Alessandro Desantis Date: Fri, 20 Sep 2019 15:44:42 +0200 Subject: [PATCH 159/163] Relax sqlite3 dependency for Rails 6 compatibility --- solidus_braintree.gemspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/solidus_braintree.gemspec b/solidus_braintree.gemspec index 6ad7a3f1..996309eb 100644 --- a/solidus_braintree.gemspec +++ b/solidus_braintree.gemspec @@ -35,7 +35,7 @@ Gem::Specification.new do |spec| spec.add_development_dependency "rspec" spec.add_development_dependency "pry" spec.add_development_dependency "byebug" - spec.add_development_dependency 'sqlite3', '~> 1.3.6' + spec.add_development_dependency 'sqlite3' spec.add_development_dependency 'database_cleaner', '~> 1.2' spec.add_development_dependency "vcr", '~> 3.0' spec.add_development_dependency "webmock" From 57d6619cb5f8391dccb98a37e4de4673b79a619e Mon Sep 17 00:00:00 2001 From: Alessandro Desantis Date: Fri, 20 Sep 2019 15:51:54 +0200 Subject: [PATCH 160/163] Move decorators to app/decorators --- .../solidus_braintree/spree}/permitted_attributes_decorator.rb | 0 .../models/solidus_braintree/spree}/credit_card_decorator.rb | 0 .../models/solidus_braintree/spree}/payment_decorator.rb | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename app/{models => decorators/lib/solidus_braintree/spree}/permitted_attributes_decorator.rb (100%) rename app/{models => decorators/models/solidus_braintree/spree}/credit_card_decorator.rb (100%) rename app/{models => decorators/models/solidus_braintree/spree}/payment_decorator.rb (100%) diff --git a/app/models/permitted_attributes_decorator.rb b/app/decorators/lib/solidus_braintree/spree/permitted_attributes_decorator.rb similarity index 100% rename from app/models/permitted_attributes_decorator.rb rename to app/decorators/lib/solidus_braintree/spree/permitted_attributes_decorator.rb diff --git a/app/models/credit_card_decorator.rb b/app/decorators/models/solidus_braintree/spree/credit_card_decorator.rb similarity index 100% rename from app/models/credit_card_decorator.rb rename to app/decorators/models/solidus_braintree/spree/credit_card_decorator.rb diff --git a/app/models/payment_decorator.rb b/app/decorators/models/solidus_braintree/spree/payment_decorator.rb similarity index 100% rename from app/models/payment_decorator.rb rename to app/decorators/models/solidus_braintree/spree/payment_decorator.rb From e548c6136c8c648f9fe237e5038fefb8fb6bd1a8 Mon Sep 17 00:00:00 2001 From: Alessandro Desantis Date: Fri, 20 Sep 2019 15:51:59 +0200 Subject: [PATCH 161/163] Fix RSpec expectations on response content type for Rails 6 In Rails 6, the response's content type includes the charset, so we need to check for inclusion rather than equality. --- .../spree/api/braintree_client_token_controller_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/controllers/spree/api/braintree_client_token_controller_spec.rb b/spec/controllers/spree/api/braintree_client_token_controller_spec.rb index aef665a2..15050785 100644 --- a/spec/controllers/spree/api/braintree_client_token_controller_spec.rb +++ b/spec/controllers/spree/api/braintree_client_token_controller_spec.rb @@ -19,7 +19,7 @@ end it "returns a content type of application/json" do - expect(response.content_type).to eq("application/json") + expect(response.content_type).to include("application/json") end it "returns a client_token" do @@ -40,7 +40,7 @@ end it "returns a content type of application/json" do - expect(response.content_type).to eq("application/json") + expect(response.content_type).to include("application/json") end it "returns a client_token" do From 1b8c401e2bbe1c5fa38e2976c524b6913434d9fc Mon Sep 17 00:00:00 2001 From: Sean Denny Date: Thu, 5 Nov 2020 14:31:03 -0600 Subject: [PATCH 162/163] Add deprecation notice to README This is a legacy project, so we should notify potential new adopters in the README that there is another, more active and up-to-date extension. --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 1399181f..bc924c51 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,10 @@ It provides support for credit card and Paypal payment methods via the `Spree::C It will add the braintree-drop-in form for payment methods in the payment form of spree/backend. Spree front-end is currently unsupported. +## DEPRECATION NOTICE :warning: :construction: + +This extension is deprecated in favor of [Solidus Paypal Braintree](https://github.com/solidusio/solidus_paypal_braintree). + ## Installation Add this line to your solidus application's Gemfile: From d255daf6c3180c6389a6017d1812e7d636587de9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Busqu=C3=A9?= Date: Fri, 29 Jul 2022 05:49:40 +0200 Subject: [PATCH 163/163] Update to use forked solidus_frontend when needed --- Gemfile | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index ae42b7d7..4621bb44 100644 --- a/Gemfile +++ b/Gemfile @@ -1,7 +1,13 @@ source "https://rubygems.org" branch = ENV.fetch('SOLIDUS_BRANCH', 'master') -gem "solidus", github: "solidusio/solidus", branch: branch +solidus_git, solidus_frontend_git = if (branch == 'master') || (branch >= 'v3.2') + %w[solidusio/solidus solidusio/solidus_frontend] + else + %w[solidusio/solidus] * 2 + end +gem 'solidus', github: solidus_git, branch: branch +gem 'solidus_frontend', github: solidus_frontend_git, branch: branch # Needed to help Bundler figure out how to resolve dependencies, # otherwise it takes forever to resolve them