diff --git a/.rubocop.yml b/.rubocop.yml index 6e6a7b45..0aba40a8 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -233,3 +233,6 @@ Metrics/ParameterLists: Metrics/PerceivedComplexity: Enabled: false + +Bundler/OrderedGems: + Enabled: false diff --git a/.travis.yml b/.travis.yml index 65a25925..370ae330 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,6 @@ sudo: false language: ruby +dist: trusty cache: directories: - "travis_phantomjs" diff --git a/Gemfile b/Gemfile index 94bbb9f8..41065c13 100644 --- a/Gemfile +++ b/Gemfile @@ -13,9 +13,9 @@ end gem 'solidus_auth_devise', '~> 1.0' group :development, :test do - gem "chromedriver-helper" gem "pry-rails" - gem "selenium-webdriver" + gem 'selenium-webdriver', require: false + gem 'chromedriver-helper', require: false end gemspec diff --git a/app/assets/javascripts/spree/backend/solidus_paypal_braintree.js b/app/assets/javascripts/spree/backend/solidus_paypal_braintree.js index 8aa3b014..1f3a4ef9 100644 --- a/app/assets/javascripts/spree/backend/solidus_paypal_braintree.js +++ b/app/assets/javascripts/spree/backend/solidus_paypal_braintree.js @@ -1,2 +1,42 @@ -// Placeholder manifest file. -// the installer will append this file to the app vendored assets here: vendor/assets/javascripts/spree/backend/all.js' \ No newline at end of file +//= require spree/braintree_hosted_form.js + +$(function() { + var $paymentForm = $("#new_payment"), + $hostedFields = $("[data-braintree-hosted-fields]"); + + function onError (err) { + var msg = err.name + ": " + err.message; + show_flash("error", msg); + console.error(err); + } + + // exit early if we're not looking at the New Payment form, or if no + // SolidusPaypalBraintree payment methods have been configured. + if (!$paymentForm.length || !$hostedFields.length) { return; } + + $hostedFields.each(function() { + var $this = $(this), + $new = $("[name=card]", $this); + + var id = $this.data("id"); + + var hostedFieldsInstance; + + $new.on("change", function() { + var isNew = $(this).val() === "new"; + + function setHostedFieldsInstance(instance) { + hostedFieldsInstance = instance; + return instance; + } + + if (isNew && hostedFieldsInstance == null) { + braintreeForm = new BraintreeHostedForm($paymentForm, $this, id); + braintreeForm.initializeHostedFields(). + then(setHostedFieldsInstance). + then(braintreeForm.addFormHook(onError)). + fail(onError) + } + }); + }); +}); diff --git a/app/assets/javascripts/spree/braintree_hosted_form.js b/app/assets/javascripts/spree/braintree_hosted_form.js new file mode 100644 index 00000000..30e68835 --- /dev/null +++ b/app/assets/javascripts/spree/braintree_hosted_form.js @@ -0,0 +1,101 @@ +//= require vendor/braintree/client.js +//= require vendor/braintree/hosted_fields.js + +function BraintreeHostedForm($paymentForm, $hostedFields, paymentMethodId) { + this.paymentForm = $paymentForm; + this.hostedFields = $hostedFields; + this.paymentMethodId = paymentMethodId; +} + +BraintreeHostedForm.prototype.initializeHostedFields = function() { + return this.getToken(). + then(this.createClient.bind(this)). + then(this.createHostedFields()) +} + +BraintreeHostedForm.prototype.promisify = function (fn, args, self) { + var d = $.Deferred(); + + fn.apply(self || this, (args || []).concat(function (err, data) { + err && d.reject(err); + d.resolve(data); + })); + + return d.promise(); +} + +BraintreeHostedForm.prototype.getToken = function () { + var opts = { + url: "/solidus_paypal_braintree/client_token", + method: "POST", + data: { + payment_method_id: this.paymentMethodId + }, + }; + + function onSuccess(data) { + return data.client_token; + } + + return Spree.ajax(opts).then(onSuccess); +} + +BraintreeHostedForm.prototype.createClient = function (token) { + var opts = { authorization: token }; + return this.promisify(braintree.client.create, [opts]); +} + +BraintreeHostedForm.prototype.createHostedFields = function () { + var self = this; + var id = this.paymentMethodId; + + return function(client) { + var opts = { + client: client, + + fields: { + number: { + selector: "#card_number" + id + }, + + cvv: { + selector: "#card_code" + id + }, + + expirationDate: { + selector: "#card_expiry" + id + } + } + }; + + return self.promisify(braintree.hostedFields.create, [opts]); + } +} + +BraintreeHostedForm.prototype.addFormHook = function (errorCallback) { + var self = this; + var shouldSubmit = false; + + function submit(payload) { + shouldSubmit = true; + + $("#payment_method_nonce", self.hostedFields).val(payload.nonce); + self.paymentForm.submit(); + } + + return function(hostedFields) { + self.paymentForm.on("submit", function(e) { + if (self.hostedFields.is(":visible") && !shouldSubmit) { + e.preventDefault() + + hostedFields.tokenize(function(err, payload) { + if (err) { + errorCallback(err); + } else { + submit(payload); + } + }) + } + }); + } +} diff --git a/app/assets/javascripts/spree/checkout/braintree.js b/app/assets/javascripts/spree/checkout/braintree.js new file mode 100644 index 00000000..f0f1d6eb --- /dev/null +++ b/app/assets/javascripts/spree/checkout/braintree.js @@ -0,0 +1,35 @@ +$(function() { + /* This provides a default error handler for Braintree. Since we prevent + * submission if tokenization fails, we need to manually re-enable the + * submit button. */ + function braintreeError (err) { + alert(err.name + ": " + err.message); + + $submitButton = $("input[type='submit']", $paymentForm); + /* If we're using jquery-ujs on the frontend, it will automatically disable + * the submit button, but do so in a setTimeout here: + * https://github.com/rails/jquery-rails/blob/master/vendor/assets/javascripts/jquery_ujs.js#L517 + * The only way we can re-enable it is by delaying longer than that timeout + * or stopping propagation so their submit handler doesn't run. */ + if ($.rails) { + setTimeout(function () { + $.rails.enableFormElement($submitButton); + }, 100); + } + /* This reverses Spree.disableSaveOnClick() */ + $submitButton.attr("disabled", false).addClass("primary").removeClass("disabled"); + } + + var $paymentForm = $("#checkout_form_payment"), + $hostedFields = $("[data-braintree-hosted-fields]"); + + $hostedFields.each(function() { + var $this = $(this); + var id = $this.data("id"); + + var braintreeForm = new BraintreeHostedForm($paymentForm, $this, id); + braintreeForm.initializeHostedFields(). + then(braintreeForm.addFormHook(braintreeError)). + fail(braintreeError); + }); +}); diff --git a/app/assets/javascripts/spree/frontend/paypal_button.js b/app/assets/javascripts/spree/frontend/paypal_button.js index df8a1586..cb29ca4e 100644 --- a/app/assets/javascripts/spree/frontend/paypal_button.js +++ b/app/assets/javascripts/spree/frontend/paypal_button.js @@ -1,3 +1,5 @@ +//= require braintree/3.5.0/paypal + /** * Constructor for PayPal button object * @constructor diff --git a/app/assets/javascripts/spree/frontend/solidus_paypal_braintree.js b/app/assets/javascripts/spree/frontend/solidus_paypal_braintree.js index 7a3708c6..e2dfe355 100644 --- a/app/assets/javascripts/spree/frontend/solidus_paypal_braintree.js +++ b/app/assets/javascripts/spree/frontend/solidus_paypal_braintree.js @@ -1,5 +1,6 @@ -// Placeholder manifest file. -// the installer will append this file to the app vendored assets here: vendor/assets/javascripts/spree/frontend/all.js' +//= require braintree/3.5.0/client +//= require braintree/3.5.0/data-collector +//= require spree/braintree_hosted_form.js window.SolidusPaypalBraintree = { APPLE_PAY_API_VERSION: 1, diff --git a/app/assets/javascripts/vendor/braintree/client.js b/app/assets/javascripts/vendor/braintree/client.js new file mode 100644 index 00000000..fc93b90b --- /dev/null +++ b/app/assets/javascripts/vendor/braintree/client.js @@ -0,0 +1 @@ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,(t.braintree||(t.braintree={})).client=e()}}(function(){return function e(t,n,r){function o(a,s){if(!n[a]){if(!t[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var l=n[a]={exports:{}};t[a][0].call(l.exports,function(e){var n=t[a][1][e];return o(n?n:e)},l,l.exports,e,t,n,r)}return n[a].exports}for(var i="function"==typeof require&&require,a=0;a=500?e(new a(c.CLIENT_GATEWAY_NETWORK),null,r):200>r||r>=400?e(new a({type:c.CLIENT_REQUEST_ERROR.type,code:c.CLIENT_REQUEST_ERROR.code,message:c.CLIENT_REQUEST_ERROR.message,details:{originalError:t}}),null,r):e(null,n,r)}},t.exports=r},{"../lib/add-metadata":13,"../lib/deferred":16,"../lib/error":18,"../lib/is-whitelisted-domain":19,"./errors":2,"./request":7}],2:[function(e,t,n){"use strict";var r=e("../lib/error");t.exports={CLIENT_GATEWAY_CONFIGURATION_INVALID_DOMAIN:{type:r.types.MERCHANT,code:"CLIENT_GATEWAY_CONFIGURATION_INVALID_DOMAIN"},CLIENT_OPTION_REQUIRED:{type:r.types.MERCHANT,code:"CLIENT_OPTION_REQUIRED"},CLIENT_MISSING_GATEWAY_CONFIGURATION:{type:r.types.INTERNAL,code:"CLIENT_MISSING_GATEWAY_CONFIGURATION",message:"Missing gatewayConfiguration."},CLIENT_INVALID_AUTHORIZATION:{type:r.types.MERCHANT,code:"CLIENT_INVALID_AUTHORIZATION",message:"Authorization is invalid. Make sure your client token or tokenization key is valid."},CLIENT_GATEWAY_NETWORK:{type:r.types.NETWORK,code:"CLIENT_GATEWAY_NETWORK",message:"Cannot contact the gateway at this time."},CLIENT_REQUEST_TIMEOUT:{type:r.types.NETWORK,code:"CLIENT_REQUEST_TIMEOUT",message:"Request timed out waiting for a reply."},CLIENT_REQUEST_ERROR:{type:r.types.NETWORK,code:"CLIENT_REQUEST_ERROR",message:"There was a problem with your request."},CLIENT_RATE_LIMITED:{type:r.types.MERCHANT,code:"CLIENT_RATE_LIMITED",message:"You are being rate-limited; please try again in a few minutes."},CLIENT_AUTHORIZATION_INSUFFICIENT:{type:r.types.MERCHANT,code:"CLIENT_AUTHORIZATION_INSUFFICIENT",message:"The authorization used has insufficient privileges."}}},{"../lib/error":18}],3:[function(e,t,n){(function(n){"use strict";function r(e,t){var r,l,f,d,p=a(),E={merchantAppId:n.location.host,platform:s.PLATFORM,sdkVersion:s.VERSION,source:s.SOURCE,integration:s.INTEGRATION,integrationType:s.INTEGRATION,sessionId:p};try{l=u(e.authorization)}catch(I){return void t(new o(c.CLIENT_INVALID_AUTHORIZATION))}f=l.attrs,d=l.configUrl,f._meta=E,f.braintreeLibraryVersion=s.BRAINTREE_LIBRARY_VERSION,f.configVersion="3",i({url:d,method:"GET",data:f},function(n,i,a){var s;return n?(s=403===a?c.CLIENT_AUTHORIZATION_INSUFFICIENT:c.CLIENT_GATEWAY_NETWORK,void t(new o({type:s.type,code:s.code,message:s.message,details:{originalError:n}}))):(r={authorization:e.authorization,authorizationType:f.tokenizationKey?"TOKENIZATION_KEY":"CLIENT_TOKEN",analyticsMetadata:E,gatewayConfiguration:i},void t(null,r))})}var o=e("../lib/error"),i=e("./request"),a=e("../lib/uuid"),s=e("../lib/constants"),u=e("../lib/create-authorization-data"),c=e("./errors");t.exports={getConfiguration:r}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../lib/constants":14,"../lib/create-authorization-data":15,"../lib/error":18,"../lib/uuid":25,"./errors":2,"./request":7}],4:[function(e,t,n){"use strict";function r(e,t){return s(t,"create"),t=c(t),e.authorization?void a(e,function(e,n){var r;if(e)return void t(e);try{r=new i(n)}catch(o){return void t(o)}t(null,r)}):void t(new o({type:l.INSTANTIATION_OPTION_REQUIRED.type,code:l.INSTANTIATION_OPTION_REQUIRED.code,message:"options.authorization is required when instantiating a client."}))}var o=e("../lib/error"),i=e("./client"),a=e("./get-configuration").getConfiguration,s=e("../lib/throw-if-no-callback"),u="3.5.0",c=e("../lib/deferred"),l=e("../errors");t.exports={create:r,VERSION:u}},{"../errors":12,"../lib/deferred":16,"../lib/error":18,"../lib/throw-if-no-callback":24,"./client":1,"./get-configuration":3}],5:[function(e,t,n){(function(n){"use strict";function r(){return u?new XMLHttpRequest:new XDomainRequest}function o(e,t){var n,o,c=e.method,l=e.url,f=e.data,d=e.timeout,p=e.headers||{},E=r(),I=t;"GET"===c&&(l=i.queryify(l,f),f=null),u?E.onreadystatechange=function(){4===E.readyState&&(n=E.status,o=s(E.responseText),n>=400||200>n?I(o||"error",null,n||500):I(null,o,n))}:(E.onload=function(){I(null,s(E.responseText),E.status)},E.onerror=function(){I("error",null,500)},E.onprogress=function(){},E.ontimeout=function(){I("timeout",null,-1)}),E.open(c,l,!0),E.timeout=d,u&&"POST"===c&&(E.setRequestHeader("Content-Type","application/json"),Object.keys(p).forEach(function(e){E.setRequestHeader(e,p[e])}));try{E.send(a(c,f))}catch(T){}}var i=e("../../lib/querystring"),a=e("./prep-body"),s=e("./parse-body"),u=n.XMLHttpRequest&&"withCredentials"in new n.XMLHttpRequest;t.exports={request:o}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../../lib/querystring":23,"./parse-body":10,"./prep-body":11}],6:[function(e,t,n){(function(e){"use strict";t.exports=function(){return e.navigator.userAgent}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],7:[function(e,t,n){"use strict";function r(){return null==o&&(o=!(c()&&/MSIE\s(8|9)/.test(u()))),o}var o,i=e("../../lib/once"),a=e("./jsonp-driver"),s=e("./ajax-driver"),u=e("./get-user-agent"),c=e("./is-http");t.exports=function(e,t){t=i(t||Function.prototype),e.method=(e.method||"GET").toUpperCase(),e.timeout=null==e.timeout?6e4:e.timeout,e.data=e.data||{},r()?s.request(e,t):a.request(e,t)}},{"../../lib/once":21,"./ajax-driver":5,"./get-user-agent":6,"./is-http":8,"./jsonp-driver":9}],8:[function(e,t,n){(function(e){"use strict";t.exports=function(){return"http:"===e.location.protocol}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],9:[function(e,t,n){(function(n){"use strict";function r(e){e&&e.parentNode&&e.parentNode.removeChild(e)}function o(e,t){var r=document.createElement("script"),o=!1;return r.src=e,r.async=!0,r.onerror=function(){n[t]({message:"error",status:500})},r.onload=r.onreadystatechange=function(){o||this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState||(o=!0,r.onload=r.onreadystatechange=null)},r}function i(e){try{delete n[e]}catch(t){n[e]=null}}function a(e,t){d[t]=setTimeout(function(){d[t]=null,n[t]({error:"timeout",status:-1}),n[t]=function(){i(t)}},e)}function s(e,t,o){n[o]=function(n){var a=n.status||500,s=null,u=null;delete n.status,a>=400||200>a?s=n:u=n,i(o),r(e),clearTimeout(d[o]),t(s,u,a)}}function u(e,t){var n,r="callback_json_"+l().replace(/-/g,""),i=e.url,u=e.data,d=e.method,p=e.timeout;i=f.queryify(i,u),i=f.queryify(i,{_method:d,callback:r}),n=o(i,r),s(n,t,r),a(p,r),c||(c=document.getElementsByTagName("head")[0]),c.appendChild(n)}var c,l=e("../../lib/uuid"),f=e("../../lib/querystring"),d={};t.exports={request:u}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../../lib/querystring":23,"../../lib/uuid":25}],10:[function(e,t,n){"use strict";t.exports=function(e){try{e=JSON.parse(e)}catch(t){}return e}},{}],11:[function(e,t,n){"use strict";t.exports=function(e,t){if("string"!=typeof e)throw new Error("Method must be a string");return"get"!==e.toLowerCase()&&null!=t&&(t="string"==typeof t?t:JSON.stringify(t)),t}},{}],12:[function(e,t,n){"use strict";var r=e("./lib/error");t.exports={CALLBACK_REQUIRED:{type:r.types.MERCHANT,code:"CALLBACK_REQUIRED"},INSTANTIATION_OPTION_REQUIRED:{type:r.types.MERCHANT,code:"INSTANTIATION_OPTION_REQUIRED"},INCOMPATIBLE_VERSIONS:{type:r.types.MERCHANT,code:"INCOMPATIBLE_VERSIONS"},METHOD_CALLED_AFTER_TEARDOWN:{type:r.types.MERCHANT,code:"METHOD_CALLED_AFTER_TEARDOWN"},BRAINTREE_API_ACCESS_RESTRICTED:{type:r.types.MERCHANT,code:"BRAINTREE_API_ACCESS_RESTRICTED",message:"Your access is restricted and cannot use this part of the Braintree API."}}},{"./lib/error":18}],13:[function(e,t,n){"use strict";function r(e,t){var n,r=t?i(t):{},s=o(e.authorization).attrs,u=i(e.analyticsMetadata);r.braintreeLibraryVersion=a.BRAINTREE_LIBRARY_VERSION;for(n in r._meta)r._meta.hasOwnProperty(n)&&(u[n]=r._meta[n]);return r._meta=u,s.tokenizationKey?r.tokenizationKey=s.tokenizationKey:r.authorizationFingerprint=s.authorizationFingerprint,r}var o=e("./create-authorization-data"),i=e("./json-clone"),a=e("./constants");t.exports=r},{"./constants":14,"./create-authorization-data":15,"./json-clone":20}],14:[function(e,t,n){"use strict";var r="3.5.0",o="web";t.exports={ANALYTICS_REQUEST_TIMEOUT_MS:2e3,INTEGRATION_TIMEOUT_MS:6e4,VERSION:r,INTEGRATION:"custom",SOURCE:"client",PLATFORM:o,BRAINTREE_LIBRARY_VERSION:"braintree/"+o+"/"+r}},{}],15:[function(e,t,n){"use strict";function r(e){return/^[a-zA-Z0-9]+_[a-zA-Z0-9]+_[a-zA-Z0-9_]+$/.test(e)}function o(e){var t=e.split("_"),n=t[0],r=t.slice(2).join("_");return{merchantId:r,environment:n}}function i(e){var t,n,i={attrs:{},configUrl:""};return r(e)?(n=o(e),i.attrs.tokenizationKey=e,i.configUrl=s[n.environment]+"/merchants/"+n.merchantId+"/client_api/v1/configuration"):(t=JSON.parse(a(e)),i.attrs.authorizationFingerprint=t.authorizationFingerprint,i.configUrl=t.configUrl),i}var a=e("../lib/polyfill").atob,s={production:"https://api.braintreegateway.com:443",sandbox:"https://api.sandbox.braintreegateway.com:443"};t.exports=i},{"../lib/polyfill":22}],16:[function(e,t,n){"use strict";t.exports=function(e){return function(){var t=arguments;setTimeout(function(){e.apply(null,t)},1)}}},{}],17:[function(e,t,n){"use strict";function r(e,t){return t=null==t?"":t,e.reduce(function(e,n){return e[n]=t+n,e},{})}t.exports=r},{}],18:[function(e,t,n){"use strict";function r(e){if(!r.types.hasOwnProperty(e.type))throw new Error(e.type+" is not a valid type.");if(!e.code)throw new Error("Error code required.");if(!e.message)throw new Error("Error message required.");this.name="BraintreeError",this.code=e.code,this.message=e.message,this.type=e.type,this.details=e.details}var o=e("./enumerate");r.prototype=Object.create(Error.prototype),r.prototype.constructor=r,r.types=o(["CUSTOMER","MERCHANT","NETWORK","INTERNAL","UNKNOWN"]),t.exports=r},{"./enumerate":17}],19:[function(e,t,n){"use strict";function r(e){return e.split(".").slice(-2).join(".")}function o(e){var t;return e=e.toLowerCase(),/^https:/.test(e)?(i=i||document.createElement("a"),i.href=e,t=r(i.hostname),a.hasOwnProperty(t)):!1}var i,a={"paypal.com":1,"braintreepayments.com":1,"braintreegateway.com":1};t.exports=o},{}],20:[function(e,t,n){"use strict";t.exports=function(e){return JSON.parse(JSON.stringify(e))}},{}],21:[function(e,t,n){"use strict";function r(e){var t=!1;return function(){t||(t=!0,e.apply(null,arguments))}}t.exports=r},{}],22:[function(e,t,n){(function(e){"use strict";function n(e){var t,n,r,o,i,a,s,u,c=new RegExp("^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})([=]{1,2})?$"),l="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",f="";if(!c.test(e))throw new Error("Non base64 encoded input passed to window.atob polyfill");u=0;do o=l.indexOf(e.charAt(u++)),i=l.indexOf(e.charAt(u++)),a=l.indexOf(e.charAt(u++)),s=l.indexOf(e.charAt(u++)),t=(63&o)<<2|i>>4&3,n=(15&i)<<4|a>>2&15,r=(3&a)<<6|63&s,f+=String.fromCharCode(t)+(n?String.fromCharCode(n):"")+(r?String.fromCharCode(r):"");while(u=0;r--)i=T[r],i.closed===!0?T=T.slice(r,1):n!==i&&_(i.top,e,t)}function y(e,t){function n(i,o){e(i,o),D.target(t).unsubscribe(r,n)}var r=f();return D.target(t).subscribe(r,n),r}function I(e,t,n){return a(e)?!0:"function"!=typeof t?!0:a(n)?!0:!1}var m,D,T=[],g={},S="/*framebus*/";return u(),D={target:n,include:t,publish:r,pub:r,trigger:r,emit:r,subscribe:i,sub:i,on:i,unsubscribe:o,unsub:o,off:o}})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],3:[function(e,t,n){"use strict";var r=e("./lib/set-attributes"),i=e("./lib/default-attributes"),o=e("./lib/assign");t.exports=function(e){var t=document.createElement("iframe"),n=o({},i,e);return n.style&&"string"!=typeof n.style&&(o(t.style,n.style),delete n.style),r(t,n),t.getAttribute("id")||(t.id=t.name),t}},{"./lib/assign":4,"./lib/default-attributes":5,"./lib/set-attributes":6}],4:[function(e,t,n){"use strict";t.exports=function(e){var t=Array.prototype.slice.call(arguments,1);return t.forEach(function(t){"object"==typeof t&&Object.keys(t).forEach(function(n){e[n]=t[n]})}),e}},{}],5:[function(e,t,n){t.exports={src:"about:blank",frameBorder:0,allowtransparency:!0,scrolling:"no"}},{}],6:[function(e,t,n){"use strict";t.exports=function(e,t){var n;for(var r in t)t.hasOwnProperty(r)&&(n=t[r],null==n?e.removeAttribute(r):e.setAttribute(r,n))}},{}],7:[function(e,t,n){"use strict";var r=e("./lib/error");t.exports={CALLBACK_REQUIRED:{type:r.types.MERCHANT,code:"CALLBACK_REQUIRED"},INSTANTIATION_OPTION_REQUIRED:{type:r.types.MERCHANT,code:"INSTANTIATION_OPTION_REQUIRED"},INCOMPATIBLE_VERSIONS:{type:r.types.MERCHANT,code:"INCOMPATIBLE_VERSIONS"},METHOD_CALLED_AFTER_TEARDOWN:{type:r.types.MERCHANT,code:"METHOD_CALLED_AFTER_TEARDOWN"},BRAINTREE_API_ACCESS_RESTRICTED:{type:r.types.MERCHANT,code:"BRAINTREE_API_ACCESS_RESTRICTED",message:"Your access is restricted and cannot use this part of the Braintree API."}}},{"./lib/error":28}],8:[function(e,t,n){"use strict";var r=e("../shared/constants");t.exports=function(e,t){return e+"/web/"+r.VERSION+"/html/hosted-fields-frame.min.html#"+t}},{"../shared/constants":12}],9:[function(e,t,n){"use strict";function r(e){return function(t){var n,r=t.merchantPayload,i=r.emittedBy,o=e[i].containerElement;Object.keys(r.fields).forEach(function(t){r.fields[t].container=e[t].containerElement}),n=r.fields[i],s.toggle(o,f.externalClasses.FOCUSED,n.isFocused),s.toggle(o,f.externalClasses.VALID,n.isValid),s.toggle(o,f.externalClasses.INVALID,!n.isPotentiallyValid),this._state={cards:r.cards,fields:r.fields},this._emit(t.type,r)}}function i(e){var t,n,_=this,h={},y=0,g=E();if(!e.client)throw new l({type:A.INSTANTIATION_OPTION_REQUIRED.type,code:A.INSTANTIATION_OPTION_REQUIRED.code,message:"options.client is required when instantiating Hosted Fields."});if(n=e.client.getConfiguration().analyticsMetadata.sdkVersion,n!==S)throw new l({type:A.INCOMPATIBLE_VERSIONS.type,code:A.INCOMPATIBLE_VERSIONS.code,message:"Client (version "+n+") and Hosted Fields (version "+S+") components must be from the same SDK version."});if(!e.fields)throw new l({type:A.INSTANTIATION_OPTION_REQUIRED.type,code:A.INSTANTIATION_OPTION_REQUIRED.code,message:"options.fields is required when instantiating Hosted Fields."});m.call(this),this._injectedNodes=[],this._destructor=new o,this._fields=h,this._state={fields:{},cards:v("")},this._bus=new c({channel:g,merchantUrl:location.href}),this._destructor.registerFunctionForTeardown(function(){_._bus.teardown()}),this._client=e.client,T.sendEvent(this._client,"web.custom.hosted-fields.initialized"),Object.keys(e.fields).forEach(function(t){var n,r,i;if(!f.whitelistedFields.hasOwnProperty(t))throw new l({type:d.HOSTED_FIELDS_INVALID_FIELD_KEY.type,code:d.HOSTED_FIELDS_INVALID_FIELD_KEY.code,message:'"'+t+'" is not a valid field.'});if(n=e.fields[t],r=document.querySelector(n.selector),!r)throw new l({type:d.HOSTED_FIELDS_INVALID_FIELD_SELECTOR.type,code:d.HOSTED_FIELDS_INVALID_FIELD_SELECTOR.code,message:d.HOSTED_FIELDS_INVALID_FIELD_SELECTOR.message,details:{fieldSelector:n.selector,fieldKey:t}});if(r.querySelector('iframe[name^="braintree-"]'))throw new l({type:d.HOSTED_FIELDS_FIELD_DUPLICATE_IFRAME.type,code:d.HOSTED_FIELDS_FIELD_DUPLICATE_IFRAME.code,message:d.HOSTED_FIELDS_FIELD_DUPLICATE_IFRAME.message,details:{fieldSelector:n.selector,fieldKey:t}});i=a({type:t,name:"braintree-hosted-field-"+t,style:f.defaultIFrameStyle}),this._injectedNodes=this._injectedNodes.concat(D(i,r)),this._setupLabelFocus(t,r),h[t]={frameElement:i,containerElement:r},y++,this._state.fields[t]={isEmpty:!0,isValid:!1,isPotentiallyValid:!0,isFocused:!1,container:r},setTimeout(function(){i.src=u(_._client.getConfiguration().gatewayConfiguration.assetsUrl,g)},0)}.bind(this)),t=setTimeout(function(){T.sendEvent(_._client,"web.custom.hosted-fields.load.timed-out")},p),this._bus.on(I.FRAME_READY,function(n){y--,0===y&&(clearTimeout(t),n(e),_._emit("ready"))}),this._bus.on(I.INPUT_EVENT,r(h).bind(this)),this._destructor.registerFunctionForTeardown(function(){var e,t,n;for(e=0;e<_._injectedNodes.length;e++)t=_._injectedNodes[e],n=t.parentNode,n.removeChild(t),s.remove(n,f.externalClasses.FOCUSED,f.externalClasses.INVALID,f.externalClasses.VALID)}),this._destructor.registerFunctionForTeardown(function(){var e=O(i.prototype).concat(O(m.prototype));N(_,e)})}var o=e("../../lib/destructor"),s=e("../../lib/classlist"),a=e("iframer"),c=e("../../lib/bus"),l=e("../../lib/error"),u=e("./compose-url"),f=e("../shared/constants"),d=e("../shared/errors"),p=e("../../lib/constants").INTEGRATION_TIMEOUT_MS,E=e("../../lib/uuid"),_=e("../shared/find-parent-tags"),h=e("../../lib/throw-if-no-callback"),y=e("../../lib/is-ios"),I=f.events,m=e("../../lib/event-emitter"),D=e("./inject-frame"),T=e("../../lib/analytics"),g=f.whitelistedFields,S="3.5.0",O=e("../../lib/methods"),N=e("../../lib/convert-methods-to-error"),L=e("../../lib/deferred"),A=e("../../errors"),v=e("credit-card-type");i.prototype=Object.create(m.prototype,{constructor:i}),i.prototype._setupLabelFocus=function(e,t){function n(){s.emit(I.TRIGGER_INPUT_FOCUS,e)}var r,i,o=y(),s=this._bus;if(!o&&null!=t.id){for(r=Array.prototype.slice.call(document.querySelectorAll('label[for="'+t.id+'"]')),r=r.concat(_(t,"label")),i=0;io;o++)r(e[o],n)}},{"./once":34}],18:[function(e,t,n){"use strict";function r(e,t){var n,r,o=document.createElement("a");return o.href=t,r="https:"===o.protocol?o.host.replace(/:443$/,""):"http:"===o.protocol?o.host.replace(/:80$/,""):o.host,n=o.protocol+"//"+r,n===e?!0:(o.href=e,i(e))}var i=e("../is-whitelisted-domain");t.exports={checkOrigin:r}},{"../is-whitelisted-domain":31}],19:[function(e,t,n){"use strict";var r=e("../enumerate");t.exports=r(["CONFIGURATION_REQUEST"],"bus:")},{"../enumerate":27}],20:[function(e,t,n){"use strict";function r(e){if(e=e||{},this.channel=e.channel,!this.channel)throw new a({type:a.types.INTERNAL,code:"MISSING_CHANNEL_ID",message:"Channel ID must be specified."});this.merchantUrl=e.merchantUrl,this._isDestroyed=!1,this._isVerbose=!1,this._listeners=[],this._log("new bus on channel "+this.channel,[location.href])}var i=e("framebus"),o=e("./events"),s=e("./check-origin").checkOrigin,a=e("../error");r.prototype.on=function(e,t){var n,r,o=t,a=this;this._isDestroyed||(this.merchantUrl&&(o=function(){s(this.origin,a.merchantUrl)&&t.apply(this,arguments)}),n=this._namespaceEvent(e),r=Array.prototype.slice.call(arguments),r[0]=n,r[1]=o,this._log("on",r),i.on.apply(i,r),this._listeners.push({eventName:e,handler:o,originalHandler:t}))},r.prototype.emit=function(e){var t;this._isDestroyed||(t=Array.prototype.slice.call(arguments),t[0]=this._namespaceEvent(e),this._log("emit",t),i.emit.apply(i,t))},r.prototype._offDirect=function(e){var t=Array.prototype.slice.call(arguments);this._isDestroyed||(t[0]=this._namespaceEvent(e),this._log("off",t),i.off.apply(i,t))},r.prototype.off=function(e,t){var n,r,i=t;if(!this._isDestroyed){if(this.merchantUrl)for(n=0;n>4&3,n=(15&o)<<4|s>>2&15,r=(3&s)<<6|63&a,f+=String.fromCharCode(t)+(n?String.fromCharCode(n):"")+(r?String.fromCharCode(r):"");while(c { joins(:customer) } + # we are not currenctly supporting an "imported" flag def imported false diff --git a/app/views/spree/admin/payments/source_forms/_paypal_braintree.html.erb b/app/views/spree/admin/payments/source_forms/_paypal_braintree.html.erb new file mode 100644 index 00000000..b7d23648 --- /dev/null +++ b/app/views/spree/admin/payments/source_forms/_paypal_braintree.html.erb @@ -0,0 +1,16 @@ +<% id = payment_method.id %> + +
+
+ <% if previous_cards.any? %> + <% previous_cards.each do |card| %> + + <% end %> + + <% end %> +
+ + +
diff --git a/app/views/spree/shared/_braintree_hosted_fields.html.erb b/app/views/spree/shared/_braintree_hosted_fields.html.erb new file mode 100644 index 00000000..c7d24e56 --- /dev/null +++ b/app/views/spree/shared/_braintree_hosted_fields.html.erb @@ -0,0 +1,25 @@ +<% prefix = "payment_source[#{id}]" %> + +
+
+ <%= label_tag "card_number#{id}", Spree::CreditCard.human_attribute_name(:number), class: "required" %> +
+
+ +
+ <%= label_tag "card_expiry#{id}", Spree::CreditCard.human_attribute_name(:expiration), class: "required" %> +
+
+ +
+ <%= label_tag "card_code#{id}", Spree::CreditCard.human_attribute_name(:card_code), class: "required" %> +
+ + + (<%= Spree.t(:what_is_this) %>) + +
+ +
+ +
diff --git a/db/migrate/20170203191030_add_credit_card_to_braintree_configuration.rb b/db/migrate/20170203191030_add_credit_card_to_braintree_configuration.rb new file mode 100644 index 00000000..7dd34476 --- /dev/null +++ b/db/migrate/20170203191030_add_credit_card_to_braintree_configuration.rb @@ -0,0 +1,6 @@ +class AddCreditCardToBraintreeConfiguration < ActiveRecord::Migration + def change + add_column :solidus_paypal_braintree_configurations, :credit_card, + :boolean, null: false, default: false + end +end diff --git a/lib/controllers/backend/solidus_paypal_braintree/configurations_controller.rb b/lib/controllers/backend/solidus_paypal_braintree/configurations_controller.rb index 410f0908..9e86361b 100644 --- a/lib/controllers/backend/solidus_paypal_braintree/configurations_controller.rb +++ b/lib/controllers/backend/solidus_paypal_braintree/configurations_controller.rb @@ -24,7 +24,7 @@ def update def configurations_params params.require(:configurations). - permit(configuration_fields: [:paypal, :apple_pay]) + permit(configuration_fields: [:paypal, :apple_pay, :credit_card]) end end end diff --git a/lib/solidus_paypal_braintree/engine.rb b/lib/solidus_paypal_braintree/engine.rb index 5a2c9b2e..b912b780 100644 --- a/lib/solidus_paypal_braintree/engine.rb +++ b/lib/solidus_paypal_braintree/engine.rb @@ -10,6 +10,7 @@ class Engine < Rails::Engine initializer "register_solidus_paypal_braintree_gateway", after: "spree.register.payment_methods" do |app| app.config.spree.payment_methods << SolidusPaypalBraintree::Gateway + Spree::PermittedAttributes.source_attributes << :nonce end def self.activate @@ -18,6 +19,8 @@ def self.activate end end + config.assets.precompile += ["spree/backend/solidus_paypal_braintree"] + config.to_prepare(&method(:activate).to_proc) def self.frontend_available? @@ -31,7 +34,8 @@ def self.backend_available? if frontend_available? config.assets.precompile += [ 'spree/frontend/solidus_paypal_braintree', - 'spree/frontend/paypal_button' + 'spree/frontend/paypal_button', + 'spree/checkout/braintree' ] paths["app/controllers"] << "lib/controllers/frontend" paths["app/views"] << "lib/views/frontend" diff --git a/lib/views/backend/solidus_paypal_braintree/configurations/list.html.erb b/lib/views/backend/solidus_paypal_braintree/configurations/list.html.erb index 12128af2..bf6c6cd7 100644 --- a/lib/views/backend/solidus_paypal_braintree/configurations/list.html.erb +++ b/lib/views/backend/solidus_paypal_braintree/configurations/list.html.erb @@ -17,6 +17,10 @@ <%= c.label :apple_pay %> <%= c.check_box :apple_pay %> +
+ <%= c.label :credit_card %> + <%= c.check_box :credit_card %> +
<% end %> diff --git a/lib/views/frontend/spree/checkout/payment/_paypal_braintree.html.erb b/lib/views/frontend/spree/checkout/payment/_paypal_braintree.html.erb index eb97dc0c..f5f667e0 100644 --- a/lib/views/frontend/spree/checkout/payment/_paypal_braintree.html.erb +++ b/lib/views/frontend/spree/checkout/payment/_paypal_braintree.html.erb @@ -1,38 +1,46 @@ <% address = current_order.ship_address %> +<% id = payment_method.id %> - - - - - - - - +<% if current_store.braintree_configuration.paypal? %> + + + +<% end %> + +<% if current_store.braintree_configuration.credit_card? %> +
+ <%= render "spree/shared/braintree_hosted_fields", id: id %> +
+<% end %> diff --git a/spec/features/braintree_credit_card_checkout_spec.rb b/spec/features/braintree_credit_card_checkout_spec.rb new file mode 100644 index 00000000..760ed868 --- /dev/null +++ b/spec/features/braintree_credit_card_checkout_spec.rb @@ -0,0 +1,97 @@ +require 'spec_helper' +require 'spree/testing_support/order_walkthrough' + +shared_context "checkout setup" do + let(:braintree) { new_gateway(active: true) } + let!(:gateway) { create :payment_method } + + before(:each) do + braintree.save! + create(:store, payment_methods: [gateway, braintree]).tap do |store| + store.braintree_configuration.update!(credit_card: true) + end + order = OrderWalkthrough.up_to(:delivery) + + user = create(:user) + order.user = user + order.number = "R9999999" + order.update! + + allow_any_instance_of(Spree::CheckoutController).to receive_messages(current_order: order) + allow_any_instance_of(Spree::CheckoutController).to receive_messages(try_spree_current_user: user) + allow_any_instance_of(Spree::Payment).to receive(:number) { "123ABC" } + allow_any_instance_of(SolidusPaypalBraintree::Source).to receive(:nonce) { "fake-valid-nonce" } + + visit spree.checkout_state_path(:delivery) + click_button "Save and Continue" + choose("Braintree") + expect(page).to have_selector("#payment_method_#{braintree.id}", visible: true) + expect(page).to have_selector("iframe#braintree-hosted-field-number") + end + + around(:each) do |example| + Capybara.using_wait_time(20) { example.run } + end +end + +describe 'entering credit card details', type: :feature, js: true do + context "with valid credit card data", vcr: { cassette_name: 'checkout/valid_credit_card' } do + include_context "checkout setup" + + it "checks out successfully" do + within_frame("braintree-hosted-field-number") do + fill_in("credit-card-number", with: "4111111111111111") + end + within_frame("braintree-hosted-field-expirationDate") do + fill_in("expiration", with: "02/2020") + end + within_frame("braintree-hosted-field-cvv") do + fill_in("cvv", with: "123") + end + click_button("Save and Continue") + click_button("Place Order") + expect(page).to have_content("Your order has been processed successfully") + end + end + + context "with invalid credit card data" do + include_context "checkout setup" + + # Attempt to submit an empty form once + before(:each) do + message = accept_prompt do + click_button "Save and Continue" + end + expect(message).to eq "BraintreeError: All fields are empty. Cannot tokenize empty card fields." + expect(page).to have_selector("input[type='submit']:enabled") + end + + # Same error should be produced when submitting an empty form again + context "user tries to resubmit an empty form", vcr: { cassette_name: "checkout/invalid_credit_card" } do + it "displays an alert with a meaningful error message" do + message = accept_prompt do + click_button "Save and Continue" + end + expect(message).to eq "BraintreeError: All fields are empty. Cannot tokenize empty card fields." + end + end + + # User should be able to checkout after submit fails once + context "user enters valid data", vcr: { cassette_name: "checkout/resubmit_credit_card" } do + it "allows them to resubmit and complete the purchase" do + within_frame("braintree-hosted-field-number") do + fill_in("credit-card-number", with: "4111111111111111") + end + within_frame("braintree-hosted-field-expirationDate") do + fill_in("expiration", with: "02/2020") + end + within_frame("braintree-hosted-field-cvv") do + fill_in("cvv", with: "123") + end + click_button("Save and Continue") + click_button("Place Order") + expect(page).to have_content("Your order has been processed successfully") + end + end + end +end diff --git a/spec/features/paypal_checkout_spec.rb b/spec/features/paypal_checkout_spec.rb index ba97d0a9..e99bcc10 100644 --- a/spec/features/paypal_checkout_spec.rb +++ b/spec/features/paypal_checkout_spec.rb @@ -2,7 +2,11 @@ describe "Checkout", type: :feature, js: true do Capybara.default_max_wait_time = 30 - let!(:store) { create(:store, payment_methods: [payment_method]) } + let!(:store) do + create(:store, payment_methods: [payment_method]).tap do |s| + s.braintree_configuration.update!(paypal: true) + end + end let!(:country) { create(:country, states_required: true) } let!(:state) { create(:state, country: country, abbr: "CA", name: "California") } let!(:shipping_method) { create(:shipping_method) } diff --git a/spec/fixtures/cassettes/braintree/create_profile.yml b/spec/fixtures/cassettes/braintree/create_profile.yml index e0fdd23e..275b09ba 100644 --- a/spec/fixtures/cassettes/braintree/create_profile.yml +++ b/spec/fixtures/cassettes/braintree/create_profile.yml @@ -16,7 +16,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.68.1 + - Braintree Ruby Gem 2.72.0 X-Apiversion: - '4' Authorization: @@ -29,7 +29,7 @@ http_interactions: message: Created headers: Date: - - Mon, 24 Oct 2016 23:13:28 GMT + - Thu, 02 Feb 2017 00:47:41 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -50,38 +50,38 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"b45f821c71f9ade9b8b6a9a1dd3b4f1d" + - W/"8f41b1a022dfdbf117b0b81bb196cea5" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 5d0d9ff4-c932-4346-8942-de6d81a21bf0 + - b9517a0d-1e73-4c49-8fba-74f6e9614a6b X-Runtime: - - '0.420233' + - '0.413956' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAJiVDlgAA6xVTXPiMAy991cwuZuQACXtBPe2x71su4e97DixQlwcO2s7 - Lfz7tUO+KITSobf46clWpCcpftoVfPIGSjMp1l4wnXkTEKmkTGzW3svzDxR5 - T/guTittZAEK300mMaN4tQxmi3A1i317cJi1pTkRBjmjopuH8HWVFKtsu8zn - sT+0OnbGlDZIkAImgvG1Z1QFnl+bOBmzpLIoidif4FAQxk/QMpfi9I6M7E6w - d0g0M2feU0AMUETMxOxLWHvUHg0rwMPhLLhHwQyFi+dw/hjMH8PoT+z3DrV/ - VdKv+fcOh/frnKOMAae6C4kyg1KiqG4uJUqRveesx/YDYrGEcW6riQilCrRu - 8UMd51FbwQZrC42OijxEe+54FRvCaC3bx85XtLFqowBMG/cICXYGBHVJu0jj - MiWcmbGnFGys/keMpdSGcGSbAvDDIpitYn8IDX+nEkbtaxgRXuYkHP3xj8z5 - NUxR2Rqw9BPqpYTfJunmlhuFXd/hj8jSylXgxSwIo8hxRIc7TSP3HP7NNLGR - dechI5ecWpmOpcApzs0iRjh+EVsh34W9qcd62iGVMkNM64qIFLAjnqKdx+2Z - vb73eqbTtbHSxS+/BswObfkUEmb6Pz4ce2NGKt7GnUjJgQgPu8w5am3syZWy - VUG2YSru4h9c+tHSusCuZKqOBxVSmBwHYeyfgGfYeyDKZi+cHdFr9IgN9GPs - GeEaGq9BJDkQbnKrE+jDHmAtjRVkA6hSHOfGlPrR94nWYPQ0UYQJN5U29gff - yX5qpeOXZF+AMH8LMLmkf7ncSP/NSnRais0TiDempHCEtSaCJnJnB253f/ei - lZNrhoSIbR/aEdpS65m6wEEUBbHfHFqbDUVJPpB2C3QEBSWxOvopra357m2S - Vmm9onv/Hmtpukp0qljpanG8g/ouM3ILAqfmlQrbxYdTa6sE+1fVoyypNW0z - w+yKU5hky+Vq8ZAtH7Igo/OI3qdZGlggWyyjJLOaGXXt7v6GwfQGopBI0+2I - pjr7wEPZMA4ddzYjdbMP9/IRUI++uBmDcHatf5yRJ4v7C6Pj8tK+vLIvLewr - 1vVVy/riqr6wqK9c09cu6WtX9NUL+tP1/C0r5OYOiP2B2LoD2GMvJ3z3HwAA - //8DAEAr+SE3DAAA + H4sIAK2BklgAA6xVTXPaMBC951cwviu2CRSTMc6tx16a9NBLR7bWWEWWXElO + 4N93ZfxFwJROMsMBvX0rrXff7sZP+1LMXkEbruTGC+8DbwYyU4zL7cZ7ef5K + Iu8puYuz2lhVgk7uZrOYs2QZzR/WURDEPh4chrasoNISPK80267nv1dpucp3 + y+Ih9sdWx865NpZIWsJMcrHxrK7B8xuToFOWTJUVlYczHErKxRlaFUqe35HT + /Rn2Bqnh9sJ7GqgFRqid2UMFG4/h0fISvGQehCsSzPH3HASPi9XjIvgZ+4ND + 419X7P/8B4fj+03OSc5BMNOHxLglGdXMtJdSrenBc9ZT+xFBLOVCYDUJZUyD + MR1+rGNkugq2WFdoclLkMTpwp6vYEiZr2T12uaKt1VgNYLu4J0iwtyCZS9pV + mlAZFdxOPaVhi/qfMFbKWCoINgUk60UYrGJ/DI0/p5ZWHxqYUFEVdD754e+Z + D7cwZY014Nk/qNcS/jFJt7d8UNjNHf6ELFGuMlkE4TyKHEf2uNM0cc8lP7ih + GFl/HjMKJRjKdCoFTnFuFnEqkhe5k+pN4k0DNtCOqVQ54cbUVGaQOOI52nt8 + PLO3997AdLq2KN3k5fuI2aMdn0HK7fDFx+NgzGkturhTpQRQ6SUuc47aGAdy + rbEqBBumFi7+0aXvLZ0L7Cuum3hIqaQtknAe+2fgBfYBqMbszYMTeoOesIG9 + jz2nwkDrNYqkACpsgTqBIewR1tF4SbdAai2SwtrKPPo+NQasuU815dJNpS1+ + 4Bs93KN0/IoeSpD2Vwm2UOyXUFvlv6JE7yu5fQL5yrWSjrAxVLJU7XHg9vf3 + L6KcXDOkVO6G0E7QjtrM1EUSRlEY++2hs2EoWomRtDugJ2ioKOrom0Jb+3+w + KVZnzYoe/Aeso5k6NZnmlavF6Q4ausyqHWAXl8t9uYj946mz1ZL/qZtRljaa + xsxwXHE6oflyuVqs8+U6D3P2ELEvWZ6FCOSLZZTmqJlJ1/7uTxhMryBLRQzb + TWiqt488NIZx7LiLGWmafbyXT4Bm9MXtGISLa/39jDxb3P8xOq4v7esr+9rC + vmFd37Ssr67qK4v6xjV965K+dUXfvKD/uZ4/ZYV8uANifyS2/gB4HOSU3P0F + AAD//wMApBQACzcMAAA= http_version: - recorded_at: Mon, 24 Oct 2016 23:13:27 GMT + recorded_at: Thu, 02 Feb 2017 00:47:41 GMT recorded_with: VCR 3.0.3 diff --git a/spec/fixtures/cassettes/braintree/generate_token.yml b/spec/fixtures/cassettes/braintree/generate_token.yml index 537d95e5..22926713 100644 --- a/spec/fixtures/cassettes/braintree/generate_token.yml +++ b/spec/fixtures/cassettes/braintree/generate_token.yml @@ -16,7 +16,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.68.1 + - Braintree Ruby Gem 2.72.0 X-Apiversion: - '4' Authorization: @@ -29,7 +29,7 @@ http_interactions: message: Created headers: Date: - - Mon, 24 Oct 2016 23:13:29 GMT + - Thu, 02 Feb 2017 00:47:41 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -50,46 +50,46 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"a2dc5b5d7bc007535148d688a8787278" + - W/"42e3c4ccc36002ca1b4eaa2422bc5bd3" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 4a0f0cf1-0c17-4107-94fa-f773d70db558 + - 5fd60577-bb66-44cd-8a69-de41f7f84ed7 X-Runtime: - - '0.094123' + - '0.104856' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAJmVDlgAA6RWW4+bOBR+768YzXt3wQyzjTRt1YRAsILTMMSA38DOLBeb - ZIcEAr9+j0m3nVnNVpX2IYoUjs85/m7k4fNFyZtu/9yWh+bjrfmbcXuzb/hB - lM2fH293kfv+w+3nT+8euCz3zen96VDvm0/vbm4eukye95/2A0YswWMWz85+ - dRjWC1yIJDzkFj7ulWvo30MlzwzRga/wMW+25ab0+2CUZaCoZA4r05FVzKEV - q3yTRcs7MgYj8YgiTtpvnHmxcXw7jUlN1HJgFS1ZVRSk2l0ClF6ICus0cmvm - +Jcnjwwsdg0Wh09psp0F1ZcLKY1LsDAG4m6HYDxc4DNsHu9gPoc5u544/Dlw - vvSBezHheyDKlFyRQxrbRoJk/TUSA/O4HaiDlSrDYqo1M4dwEcGZivUixm0W - k6cMUftrbFqZOj3vV6LiTjCk6HTIVVoCJlWObJXFgnLVw/3xQazCno+Hbo3c - Pnu0R5hXp2p2t1Z4SGN5FissWSwK4VErTepzimanTbU1gmF2AryrzHOhJuiI - hWs21kNWiTKPhMpGeoCaKvekzBuNw/y4ttLLGpEuV+zILDqkSXjM0d20F/Rp - c49qfka/OubJY1+y2EZZgqHelFe+8Pf9/LIvU3Q5Qo2xhd40wS3wXmar0OCr - 4H49zAru1WeO3DPzcLdf2CVXLvAeAje0gdlSINdeK9gnOhjECbo8hp1QUUDN - uB7fwjvo/pmZTHj5ra/ckSNqcJMO+cK/91VhiNV83JQfujQhI0ug10+wnO6R - UCNz3zoPvy9sBPNO+fBr3Ez9YrvIVxI0TzSWf/jNG72/3WMdu+c0vtjCkxX/ - xRn/gU35BJwJr9D4LneIViLBMoRdUnWRDOZDL5NBDfdcGz7tz55Ne6vwyK15 - myZyk8am1PzurFDmMWhitb3q+aovrHv4tVtwxDpSY/AmuadSplRib7c8uptI - 2vESo21zMJlTPNPlB4svQZ8meNV1exHhVbSc0V2FB+5KI9rhIozcr3uPVJul - P4Qo7MQy/IuNeJM5kmicdY4I5VZ7+hLfL1p7cu+5J+5d5KSvx1nPF6CVhoIe - 8JxZGlOt6fCVDzUvLAH9JfOWPdrgVaMT3mycOAWdMfp/NHate8Mn4D1aZWhm - ioXdA9Z9GvffzzFPAp/E2L6Ynze0zRdaZ5c2t4Svdwe+DN5QCZzAvdiRq9kZ - /HQWS7uLFDUEmg3Z4N8z5bYc7cA38EzJAfLopHWod8oRU8DnmT1OWMFzOOfR - OvruS8gAxUDbRM956WfnlQ6UWXDQCeQnZCL0AW3q+gz2zWK72cZCn5nmcoOC - /nHLYugNvUSsd/uRvduYVLml7yFrvSP/l/5A49DLrvY7OeYG6Zi303zSnbGd - /AA4HnOFQZfUzZVbQsZBn6MC7Eat9xeZc929ettbMOtbDuj7zRQrp+zptcZ2 - 4Jmrz4kBuWbyqcYEj7dXj+j9V9jeolkN2N77kkaTJiCDOfCQWtLJUTj5i1Ky - 1M9e7QW5DPkA7w06TDz94ONlvgKekFeA7ystwjsFODxBprSgryPsD9wSk6/m - HW9CyZa2FCvRcXWact/X2kFLvfcJNGvod0ya4Pqaa6bcL7B4SoyPD79f3/vv - Hn5//Y/gbwAAAP//AwBoGt9ZSAgAAA== + H4sIAK2BklgAA6RW246jOBB9n69o9fvsgGl6O1LPjDoXCFZwJoQY8BvY6eZi + k0wuEPj6KdO7fZF6RyPtA0qEy1XH55wqc//9ouRVsz0ci1399dr8y7i+2tZ8 + J4r66ev1JnQ+311///bpnstiW58+n3bVtv726erqvknleftt22HEYtyn0ejs + lbtuMcG5iINdZuH9VjmGfh8oeWaIdnyO91m9KpaFZy9dlpP+wWDRzGAqKPzI + 733XKX131pKyQqT3rOXUyZliVRLi3O/HykdBSRCB/w9d0j/Yy+lDT/oNSkrv + hkVB9eiSjkUO5Awek3g18suHC+mM1i/gkavWn+4M0u8Mf31j+GFlk9LrSPl0 + 8KcPre9cTPjtiDIlV2SXRLYRI1n9CEXHXG77amclyrCYOprplHARwp6StSLC + xzQijymi9o/ItFJ1OmznouRTv0vQaZeppABOygzZKo0E5aqF8+OdmAct73fN + AjlturZ7qFclanSzULhLInkWcyxZJHLhUiuJq3OCRqdluTL8bnQCvsvUdSDG + b4iFK9ZXXVqKIguFSnu6g5gyc6XMas3DeL+wkssCkSZTbM8s2iVxsM/QzYAL + 8hwzl2p9eq/cZ/G6LVhkozTGEG/KZ73wCz6vaIsEXfYQY6wgN43xEXQv0nlg + 8Ll/u+hGOXerM0fOmbm42U7sgisHdA9AG1pDbSmQYy8U4AlBj6nfZBFgQnkO + Mf2i/4hvv/m3Zjzw5R095fQcUYObtMsm3q2nckPMx/2yuGuSmPQshly/4XI4 + R0yN1PloP7yf2AjqnbLuz7QZ8kV2ns0leJ5oLv/26g9y/3OOReSck+hiC1eW + /A9r/Ac3xSNoJtxc8zvbIFqKGMsAsCTqIhnUh1wmgxjuOjY8x9+tDbhVsOfW + +JjEcplEptT6bqxAZhF4Yr569vOzv7DO4VVOzhFrSIULVpJbKmVCJXY3s72z + DKUdzTBa1TuTTfMDnd1ZfAb+NKFXHacVIZ6HsxHdlLjjjjTCDc6D0PmxdUm5 + nHldgIJGzIKfrMfLdCqJ5lnPEaGcckvf8vugvSe3rnPi7kUO/lqPWj4Br9QU + /IDHzNKcak8H7/pQ68Ji8F88PrK1Db1qNMId9YOm4DNG/4/HnuM+6BPoPVqm + aGSKid0C120StS/7mCtBT2Ks3tTPanrMJtpnl2NmCU9jB70MXlMJmsC52J6r + 0Rn66SxmdhMqagg06tLOu2XKOXK0gb6BNSU7mEcn7UONKUNMgZ5nth64gnXY + 59IqfOlLmAGKgbeJrvO2n6fvfKDMnINPYH7CTIQ84E0dnwLeNLLrVST0nqEu + Nyj4Hx9Z9C7362ybOSVwYb7krgnMdROwXoyBV5hjHM6SWBJzNJpmKBh8SimZ + ebUB5yQN1NT8v+uFVx5e5/w6Gu4ki6ugXob4J0H4RBA7kOhp8ADwAZzeab80 + 7Hme53wOXqHjfLv2buEO7IXrGCL2dcwpQ+TwPCcH/N12QxrmbvQa3XR6dhGT + 16CXIvYKjSrg/daTNAy0V9/hCjS3e6ak5MXA78vaoiZ5BvdmZj1pvaXQ+nVv + Z+3mzF979pwCfsDdi3jcwt2s78gl+NKC/wcO/ojgHk9jkmvcWeTAebT2TscG + TA7o8qT3VxBTZhYDPFg8xsbX+y/P3wGf7r+8/0L4BQAA//8DAKeB1OxYCAAA http_version: - recorded_at: Mon, 24 Oct 2016 23:13:27 GMT + recorded_at: Thu, 02 Feb 2017 00:47:41 GMT recorded_with: VCR 3.0.3 diff --git a/spec/fixtures/cassettes/braintree/token.yml b/spec/fixtures/cassettes/braintree/token.yml index eabb9af0..d04c7ef3 100644 --- a/spec/fixtures/cassettes/braintree/token.yml +++ b/spec/fixtures/cassettes/braintree/token.yml @@ -16,7 +16,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.66.0 + - Braintree Ruby Gem 2.72.0 X-Apiversion: - '4' Authorization: @@ -29,7 +29,7 @@ http_interactions: message: Created headers: Date: - - Wed, 19 Oct 2016 21:55:23 GMT + - Thu, 02 Feb 2017 00:45:49 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -50,44 +50,46 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"a335cc3518834be919df2a1c32984cf9" + - W/"fdf7cdda982e4590c67769beceeb3296" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 8a27f62c-7b53-498f-b4dd-576a7f67639c + - c0da35ae-9082-419d-b6b0-a90f067f3ef7 X-Runtime: - - '0.125538' + - '0.231359' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAMvrB1gAA6RVW4+bOhB+769Y7XtPuSw9RdrdqkkWEhSchhCD/QZ2tlxs - iEoCgV/fMdlLKuVUlc5DFAnsme82w/3XkxQ37e5nk9fVw63+j3Z7s6tYzfPq - x8PtNnQ+frn9+vjhnol8Vx0+HupyVz1+uLm5bxNx3D3ues+gsTckkX1cFHW/ - nHoZj4M6Nb39Tjqaeh5IcaQG7tnc26fVOl/lXkZDlNPCy1czVJCCCjQjJop8 - feV6pV+sNTTw3Jc0o7NSJ3J9RwqeocIfaFga/mwi0BDkvkssX667lfuko9lT - 9+yinkaORqPgmcRr2y++nVCunfypdlrhde+HtY7Cuvf7O80Pn/RVSMzV7MdP - f/at852TDv89krpgEtUksrTYEOX3kPfUZdCnNonUTCobPZkhxkO4U9COR16T - ROg5MbD1PdLNRB5+7ua8YDO/J8ahTiXJQZMiNSyZRBwz2Sn+NZ8HHRvqdmk4 - XbKxBuhXEmnfLaXXk0gc+dwTNOIZd7FJ4vJIDPuwAl383j6A3kXiOnDGb5Hp - lXQo+6TgeRpymQy4hjNF6gqRVkqHyX5pktPSQG0q6Z6auCdxsE+NuxEX1GlS - Fyt/hkWxT+NNl9PIMpLYg/O6ePHrDd8i73JinPZwRltDbRx7DfieJ/NAY3P/ - 87K3M+aWR2Y4R+p67W5q5Uw64HsA3uAKegtuONZSAp6w1tDMb9MIMBlZBmeG - 5XBNb7997RmPei2ahXQGZmCN6bhPp4vPC5lpfD4ZVvmXlsRooDHU+oOWI48Y - a4lz7T48n1oG9Duk/d95M9aLrCydC8g8Ulr+u6iu1H7hsYycI4lOFndFwf6y - x39okz+DZ9zNlL5PWwMXPPZEAFiIPAkK/aGWTuEMcx0Lfs2f3o24ZbBn5qQh - sViRSBfK360ZiDSCTMzX5zyf8+WpGmmFm3QKNWC+uXSKHb7k/U1lQuxc58Dc - kxh939gdm4KHFQafvAk1FVeVteC3+VB60RhyEU8aurFghrSWu/Ywag3+U/x/ - vD+fu5JfmAlcJIat86nVgQYdibq3e9QVoDPS1hf9X/mDn01q8oXCDjpqrMIC - tAJedM+kfYScH/mT1YYSa9yw+6R/1//KzLVUUtgtllB9ObwHvGq3obf5h95U - Og0ztjAPF3y3CO6pXqJU3NLIGYB//5o9v1fzA7vYPe1TyS/1H65l42I+JwT2 - CGDRNtF5L0DdA+S24cpPiXRWAV+JrE2M2rVhl3QD/ggcBlPPPu9BcRy922LI - v9dQVQf2fDpHSqv33faC/fp+U9mh0EdvR34GlWdPJx3ssjX4nK+qJmdmkPG5 - 2mtKA/B15H3GzyoxS41gzDbG/phpmBvw1ip2W9RSd6v44a025v03XErDJIJd - Gi/Umfd308s51gVVe1ayI6m8LFE9JeShQuChDphP2lKKVuFmJu6Ya/egZfmW - DdPPV6LJuRQDGfedngEf9W3KmBwxZeDL3ULo9vP64eH+0/l7/OH+0+9f6l8A - AAD//wMACw9eEeAHAAA= + H4sIAD2BklgAA6RW246jOBB9n69o9fvsgGl6O1LPjCYXE1BwOoQY8BvY6eZi + k0wuEPj6LdOzfZF6RyPtA0qEy1XH55wqc//9ouRVsz0ci1399dr8y7i+2tZ8 + J4r66ev1JsSf766/f/t0z2WxrU+fT7tqW3/7dHV136TyvP227TzEYq9Po9HZ + LXfdYuLlIg52meXttwob+n2g5Jkh2vG5t8/qVbEsvIr0/MYvXYNMVx0pNzYL + mWIhVqSUyneCnISVmYRULadjHdslpXtDelYup5XNSlzoNVaS0g+FZOUKkR5X + jw7pWIQNFgWPSbwa+eWPC+mM1i/gkavWn+4MEu6M5frGWIawJ6wsMt0c/OmP + 1scXE347okzJFdklkW3ESFYPoeiYw21f7axEGRZTRzOdEi5C2FOyVkTeMY3I + Y4qo/RCZVqpOh+1clHzqdwk67TKVFMBJmSFbpZGgXLX6/DsxD1re75oFwm26 + tnuoVyVqdLNQXpdE8izmnmSRyIVDrSSuzgkanZblyvC70Qn4LlMHQ4zfEMur + WF91aSmKLBQq7ekOYsrMkTKrNQ/j/cJKLgtEmkyxPbNol8TBPkM3Ay7Ic8wc + qvXp3XKfxeu2YJGN0tiDeFP+0usFn1u0RYIue4gxVpCbxt4RdC/SeWDwuX+7 + 6EY5d6ozR/jMHK/ZTuyCKwy6B6ANraG2FAjbCwV4QAsy9ZssAkwozyGmX/Qf + 8e03/9aMB77co6twzxE1uEm7bOLeuio3xHzcL4u7JonBKTHk+g2XwzliaqT4 + o/3wfmIjqHfKuj/TZsgX2Xk2l+B5orn8260/yP3rHIsIn5PoYgtHlvwPa/wH + N8UjaCacXPM72yBaitiTAWBJ1EUyqA+5TAYx3ME2PMffrQ24VbDn1viYxHKZ + RKbU+m6sQGYReGK+evbzs788ncOtcM4Ra0jlFdCTt1TKhErP2cz2eBlKO5p5 + aFXvTDbND3R2Z/EZ+NOEXsW4FaE3D2cjuim9jmNphBsvD0L8sHVIuZy5XYCC + RsyCn6z3lulUEs2zniNC4XJL3/L7Q3tPbh184s5FDv5aj1o+Aa/UFPzgjZml + OdWeDt71odaFxeC/eHxkaxt61WiEM+oHTcFnjP4fjz3HfdAn0Hu0TNHIFBO7 + Ba7bJGpf9jFHgp7EWL2pn9X0mE20zy7HzBKuxg56GbymEjSBc7E9V6Mz9NNZ + zOwmVNQQaNSlnXvLFD5ytIG+gTUlO5hHJ+1DjSlDTIGeZ7YeuIJ12OfQKnzp + S5gBioG3ia7ztp+n73ygzJyDT2B+wkyEPOBNHZ8C3jSy61Uk9J6hLjco+N87 + suhd7tfZNsMlcGG+5K4JzHUTsF6MgVeYYxzOkljS42g0zVAw+JRSMnNrA85J + Gqip+X/XC688vM75tcZQuBZXQb0MvZ8EeSeC2IFET4MHgA/g9E77pWHP8zzn + c/AKHefbtXsLd2AvHGyI2NcxpwyRw/OcHPB32w1pmLPRa3TT6dlFTF6DXorY + KzSqgPdbV9Iw0F59hyvQ3O6ZkpIXA78va4ua5JkKisx60npLofXr3s7azZm/ + 9uw5BfyAuxfxuIW7Wd+RS/ClBf8PHPwRwT2exiTXuLMIw3m09rhjAyYMujzp + /RXElJnFAI8nHmPj6/2X5++AT/df3n8h/AMAAP//AwCx6EsJWAgAAA== http_version: - recorded_at: Wed, 19 Oct 2016 21:55:23 GMT + recorded_at: Thu, 02 Feb 2017 00:45:49 GMT recorded_with: VCR 3.0.3 diff --git a/spec/fixtures/cassettes/checkout/invalid_credit_card.yml b/spec/fixtures/cassettes/checkout/invalid_credit_card.yml new file mode 100644 index 00000000..6ad2a22e --- /dev/null +++ b/spec/fixtures/cassettes/checkout/invalid_credit_card.yml @@ -0,0 +1,95 @@ +--- +http_interactions: +- request: + method: post + uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/client_token + body: + encoding: UTF-8 + string: | + + + 2 + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.72.0 + X-Apiversion: + - '4' + Authorization: + - Basic bXdqa2t4d2NwMzJja2huZjphOTI5OGY0M2IzMGM2OTlkYjMwNzJjYzRhMDBmN2Y0OQ== + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Fri, 03 Feb 2017 21:10:15 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: + - 3v249hqtptsg744y + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + Etag: + - W/"ba49ab8785c5be4364268585ab5be31e" + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 063042f5-d2ab-416b-8105-ce65ff96266b + X-Runtime: + - '0.184993' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIALfxlFgAA6RWXW+jOBR9n19R9X12wJRuI3VmNE0CwQrOhBADfgM7DRAb + sk3C16/fa7rbD6k7GmkfUCJ8fe/xOedec/+9U/Kq2T2dirr6em3+YVxf7Spe + i6Laf73ehs7nu+vv3z7dc1nsqvPnc33YVd8+XV3dN6m87L7teoxYjIc0mly8 + su6XU5yLOKgzCx93yjH0+0DJC0O05wt8zKp1sSq8joVO6btBkYRYEZTc+JHX + +cP+hpQs992kW814TwbfTgamSITz1Wzd++Xe9sMDxKwRUX6bhGvbn3kGc3Hu + R9v+0SU9ixyDRcFjEq8nfvmjI73R+gU8JuwP686f1R3Z3LQk3A9k8JBfzp/8 + 2Y/WdzoTfnuiTMkVqZPINmIkDz9D0TOX276qrUQZFlMnM50RLkLYU7JWRPiU + RuQxRdT+GZlWqs5Pu4Uo+czvE3SuM5UUwEmZIVulkaBctXB+XItF0PKhbpbI + adONPUC9Q6ImN0uF+ySSF7HAkkUiFy61kvhwSdDkvCrXht9PzsB3mboOxPgN + sfCBDYc+LUWRhUKlA60hpsxcKbNK8/BwXFpJt0SkyRQ7Mov2SRwcM3Qz4oI8 + p8ylWp/BK49ZvGkLFtkojTHEm/JZL/yCzyvaIkHdEWKMNeSmMT6B7kW6CAy+ + 8G+X/STn7uHCkXMBXZrd1C64ckD3ALShFdSWAjn2UgGesDbIzG+yCDChPIeY + YTl8xLff/FszHvnyTp5yBo6owU3aZ1Pv1lO5IRYPw6q4a5KYDCyGXL/gcjxH + TI3U+Wg/vJ/aCOqds/73tBnzRXaeLSR4nmgu//SqD3L/c45l5FySqLOFK0v+ + mzX+g5viETQTbq75nW8RLUWMZQBYEtVJBvUhl8kghruODc/pV2sjbhUcufVw + SmK5SiJTan23ViCzCDyxWD/7+dlfWOfwDk7OEWvIAResJLdUyoRK7G7nR2cV + SjuaY7SuapPN8ic6v7P4HPxpQq86TitCvAjnE7otcc8daYRbnAeh83PnknI1 + 9/oABY2YB3+xAa/SmSSaZz1HhHLKHX3L7w/tPblznTN3Ozn6azNp+RS8UlHw + A35gluZUezp414daFxaD/+KHE9vY0KtGI9zJMGoKPmP0/3jsOe6DPoHeo2WK + JqaY2i1w3SZR+7KPuRL0JMb6Tf2soqdsqn3WnTJLeBo76GXwikrQBM7FjlxN + LtBPFzG3m1BRQ6BJn/beLVPOiaMt9A2sKdnDPDprH2pMGWIK9LywzcgVrMM+ + lx7Cl76EGaAYeJvoOm/7efbOB8rMOfgE5ifMRMgD3tTxKeBNI7taR0LvGety + g4L/8YlF73K/zra5UwIX5kvuisBcNwFrZ4y8whzjcJbEkpijySxDwehTSsnc + qww4J2mgpub/XS+88vA65zfReCdZXAXVKsR/EYTPBLEnEu1HDwAfwOmd9kvD + nud5zhfgFfqQ7zbeLdyBg3AdQ8S+jjlniDw9z8kRf7/bkoa5W71Gt72eXcTk + FeiliL1GkwPwfutJGgbaq+9wBZrbI1NS8mLk92VtWZE8U0GRWXuttxRav/7t + rN1e+GvPXlLAD7gHET+0cDfrO3IFvrTg/xMHf0Rwj6cxyTXuLHLgPFp7p2cj + Jgd02ev9B4gpM4sBHiweY+Pr/Zfn74BP91/efyH8DQAA//8DAKYcJ29YCAAA + http_version: + recorded_at: Fri, 03 Feb 2017 21:10:15 GMT +recorded_with: VCR 3.0.3 diff --git a/spec/fixtures/cassettes/checkout/resubmit_credit_card.yml b/spec/fixtures/cassettes/checkout/resubmit_credit_card.yml new file mode 100644 index 00000000..1646de55 --- /dev/null +++ b/spec/fixtures/cassettes/checkout/resubmit_credit_card.yml @@ -0,0 +1,282 @@ +--- +http_interactions: +- request: + method: post + uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/client_token + body: + encoding: UTF-8 + string: | + + + 2 + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.72.0 + X-Apiversion: + - '4' + Authorization: + - Basic bXdqa2t4d2NwMzJja2huZjphOTI5OGY0M2IzMGM2OTlkYjMwNzJjYzRhMDBmN2Y0OQ== + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Fri, 03 Feb 2017 21:10:16 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: + - 3v249hqtptsg744y + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + Etag: + - W/"45cd5142d5334ed8197cfb02cf8377ad" + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - f16c99ab-9227-4e74-92fd-24f206939064 + X-Runtime: + - '0.133506' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIALjxlFgAA6RW226jSBB9n6+I8j470IRskDIzii9gkGmPMW6g36DbCZdu + 8PgChq/fajKbi5QdjbSKrFh0ddWpc04Vvv9+keKq3R2ORVN/vdb/0q6vdjVr + eFE/fb3ehvbnu+vv3z7dM1Hs6tPnU1Pt6m+frq7u21Scd992vYdo7A1pZJ3d + sumXUy/ncdBkhrffSVtTzwMpzhSRni28fVavi1Xh5X750Pvl1vQdKrB0TR/R + HA80p7PKTIY8x7O8wMNDv5pNch/BXzi/SeAOddaaH7l9grCgkV3hGS1olBgJ + IuWjg3t4ptEoeEzitQU1LrjXOr+Aj77u/bC5+LPmgosbpGqvwmpYhcnBnz10 + vn3R4X+PpS6YxE0SmVqMRPUj5FCTmb5sjERqBpVHPZ1hxkO4U9KOR94xjfBj + ioj5I9KNVJ4OuwUv2cwHjKcmk0kBnJQZMmUaccJkp/pv+CLo2NC0S2R36cYc + oF6VSOtmKb0+icSZLzzoj+fcIUYSV+cEWadVCb331gn4LlPHhhi/xYZX0aHq + 05IXWchlOpAGYsrMESKrFQ+T/dJILkuE20zSPTVIn8TBPkM3Iy7Ic8wcovQZ + 3HKfxZsO+DRRGnsQr4tfer3gc4uuSNBlDzHaGnKT2DuC7kW6CDS28G+XvZUz + pzozZJ+p47W7qVkwaYPuAWhDaqgtOLLNpQQ8YaPhmd9mEWBCeQ4xw3L4iG+/ + /bdmPPLlHl1pDwwRjemkz6burStzjS8mw6q4a5MYnBRDrt9wOfYREy21P7oP + z6cmgnqnrP8zbcZ8kZlnCwGex4rLv936g9y/+lhG9jmJLiZ3RMn+sMZ/cFM8 + gmbcyRW/8y3MAY89EQCWRF4EhfqQS6cQwxzbhM/xd2cjbhnsmTE5JrFYJZEu + lL5bIxBZBJ5YrJ/9/OwvT+VwKztniLa48gpa4lsiREKE52zne3sVCjOae2hd + Nzqd5QcyvzPYHPypw6zadsdDbxHOLbItvZ7ZQgu3Xh6E9o+dg8vV3O0DFLR8 + Hvykg7dKZwIrntUe4dIud+Qtvw/Ke2Ln2CfmXMTor43VsSl4pSbgB29CDcWp + 8nTwbg6VLjQG/8WTI92YMKtayx1rGDUFn1Hyfzz2HPfBnMDskTJFls6nZgdc + d0nUvdyjjgA9sbZ+Uz+ryTGbKp9djpnBXYUd9NJYTQRoAn3RPZPWGebpzOdm + G0qicWT1ae/eUmkfGdrC3MCZFD3so5PyocKUISpBzzPdjFzBOdxzSBW+zCXs + AEnB21jVeTvPs3c+kHrOwCewP2EnQh7wpopPAW8amfU64urOWJdpBPzvHWn0 + LvfrbpvbJXChv+SuMex1HbBetJFX2GMMekkM4TFkzTIUjD4lBM/dWoM+cQs1 + Ff/vZuGVh9c9v1EYCtdgMqhXofcTI++EET3g6Gn0APABnN4pv7T0eZ/nbAFe + IZN8t3Fv4R04cMfWeOyrmFOG8OF5T474+90Wt9TZqjOy7dXuwjqrQS+JzTWy + KuD91hUkDJRX3+EKFLd7KoVgxcjvy9myxnkmgyIznpTegiv9+re7dntmrzN7 + TgE/4B54POng3azekSvwpQHfDwz8EcF7PI1xrnBnkQ39KO3tno6YbNDlSd2v + IKbMDAp4PP4Ya1/vvzz/Dvh0/+X9L4R/AAAA//8DAPp+PzVYCAAA + http_version: + recorded_at: Fri, 03 Feb 2017 21:10:16 GMT +- request: + method: post + uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/customers + body: + encoding: UTF-8 + string: | + + + fake-valid-nonce + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.72.0 + X-Apiversion: + - '4' + Authorization: + - Basic bXdqa2t4d2NwMzJja2huZjphOTI5OGY0M2IzMGM2OTlkYjMwNzJjYzRhMDBmN2Y0OQ== + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Fri, 03 Feb 2017 21:10:17 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: + - 3v249hqtptsg744y + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + Etag: + - W/"b20f948bc9aff9b11600d5b0944a922c" + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - e0046eb2-a15b-414b-a4d5-aa5db64f63a8 + X-Runtime: + - '0.354531' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIALnxlFgAA6xVy3ajMAzd9yty2DtAHiXtIe5ulrOZdhaz6TFYBE+Mzdim + Tf5+bMIrTUjTk+7Q1ZUtpGspftoVfPIGSjMp1l44DbwJiFRSJjZr7+X5B1p5 + T/guTittZAEK300mMaN4HkTR4n4ZxL41HGZ9aU6EQdaOFN08zP5GSRFl22U+ + j/2h17EzprRBghQwEYyvPaMq8PzaxcmYJ5VFScT+BIeCMH6ClrkUp2dkZHeC + vUOimTlznwJigCJiJmZfwtqj1jSsAA/PgjBCwQwF8+dZ+BgGj2H0J/b7gDq+ + KunX4vuAw/11zVHGgFPdpUSZQSlRVDeHEqXI3nPeY/8BsVjCOLfdRIRSBVq3 + +KGPYt52sMHaRqOjJg/RnjvexYYw2sv2svMdbbzaKADT5j1Cgp0BQV3RLtK4 + TAlnZuwqBRur/xFnKbUhHNlHAfhhEQZR7A+h4e9Uwqh9DSPCy5zMRn/8I3N+ + DVNUtgcs/YR6qeC3Sbo55UZh12f4I7K0chV4EYSz1cpxRIc7TSN3Hf7NNLGZ + dfaQkUtOrUzHSuAU52YRIxy/iK2Q78Ke1GM97VBKmSGmdUVECtgRT9Eu4vbK + Xv/2eqbTtbHSxS+/BswObfkUEmb6Pz6YvTMjFW/zTqTkQISHXeUctXb25ErZ + riD7YCru8h8c+tHThsCuZKrOBxVSmByHs9g/Ac+w90CUrd4sOKLX6BEb6Mfc + M8I1NFGDTHIg3ORWJ9CnPcBaGivIBlClOM6NKfWj7xOtwehpoggTbipt7A++ + k/3USscvyb4AYV4LMLmkr1xupP9mJTotxeYJxBtTUjjCWhNBE7mzA7c7v7vR + ysk9hoSIbZ/aEdpS65m6wOFqFcZ+Y7Q+m4qSfCDtFugICkpidfRTWl/z3fsk + rdJ6RffxPdbSdJXoVLHS9eJ4B/WvzMgtCDyfp5mwr/hgtb5KsH9VPcqSWtO2 + MsyuOIVJtlxGi4ds+ZCFGZ2v6H2apaEFssVylWRWM6Oh3dnfMJjeQBQSabod + 0VTnH0Qom8bhxZ2tSP3Yh3v5CKhHX9yMQTi71j/OyJPF/YXRcXlpX17Zlxb2 + Fev6qmV9cVVfWNRXrulrl/S1K/rqBf3pev6WFXLzC4j9gdg6A6zZywnf/QcA + AP//AwDVQHlhNwwAAA== + http_version: + recorded_at: Fri, 03 Feb 2017 21:10:17 GMT +- request: + method: post + uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/transactions + body: + encoding: UTF-8 + string: | + + + 20.00 + R9999999-123ABC + Solidus + + true + + 33cfn8 + 30774650 + sale + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.72.0 + X-Apiversion: + - '4' + Authorization: + - Basic bXdqa2t4d2NwMzJja2huZjphOTI5OGY0M2IzMGM2OTlkYjMwNzJjYzRhMDBmN2Y0OQ== + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Fri, 03 Feb 2017 21:10:19 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: + - 3v249hqtptsg744y + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + Etag: + - W/"d5d092c889dffbb68179a05880c8a89d" + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 6fdf7e53-6323-489a-a1c0-44dc34e8bbe4 + X-Runtime: + - '0.517359' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIALvxlFgAA9xY32+kNhB+v78i2ncH2E0um4hwvV5VqVKvUptLVfXlZPCw + uAGb2maz27++YwwsLCZJHypVzdMy83ns+eGZz4k/HKryYg9KcynuV9FluLoA + kUnGxe5+9fjle7JdfUjexUZRoWlmEJW8u7iIOUs27/OcVjSKA/ywMm2oaXRC + G1NIxf8CFgedyGrNsYZE0xLioP1pZVmjFO52JFxLgptC8vjwXRzMxRZMK9kI + k6zDyzCMg+7LKipQWUGFITTLrJDgebSBKpWliQOftj1tkxKP7kLw8n5lVAOr + wFmnaEu9CSoVQyTa/+XW/ZFovfn47ac4GDSt1wqoAUaoubCRuF8x/DS8ghU6 + F92QcE3CzZd1dBeFd9H2d4zHsKBd39Tsn60/Leiiro1Ef+xHl8rw5ubq/XXY + pxKlOVfaEEErOHcTlSVd1mWyqqk4ejRQUV565M+Qam58tupCCp88p4dZ8IOx + W3HKyxJL+OSi2Py7zmmjALA6GFOgtc/7gwHBbBYWIaXMaMmNz7yCHV49X4gk + 3rHS3ZLbqyi8iYOxqD82Vqw6Lnvl1HYFoWVd0PWbUJvXUKLBfPBsnqtRetC1 + vBHMd58Gje4KnSpFjxMlxnPUmnxGaqoMx3BoMKaECvDqTlf4jJ962GvmR2ZT + arLCiyl4XY+r0VfS/8uSfKFA/jO1OM5O1xtJzqFkuquFvSaglFQEY1RLocHr + WosbuT5FJ59xZL0I6E1Ms3YG+sFZeRHTurHfz1fOhRa6w9HwTI+o+QNcleO0 + 0fPExrWSGe6GcehvB23hraXfPv+4+fQz9p6XQFMr06NEoZ3qS9qFlQYrOPlY + o2Zv2cYSog0tY9yeBIM/h8183Uue2QTlmHhcgbWTgppHpLGcAHdx430BZeiB + OLbiVcEBqrqf5KmUJVCxSnJaasuUBkDPHNALklHVTzIjn0Akm02Wiy3C2y+n + SblIrsJovd3adivGneQqibZb5G3dR3dZ0ChpmdmvXFOsluG7bxY1Vy6ZlRSm + SKJ1HMyEM+wRqEJasg4n4Fba7duNbWJbTcsvHx9Ow/wkPZ2ykGUbbn8D4RXd + AWlUmRTG1PouCKjGJq0vU0W5sBenq/hL7JxBTY+2d3+tAKuVfS3lTgZ79P+y + FrsPIPZcSWEB95oKlsoDkojBftftFNQUmcVP0hag++00BdDSFHhipLXiSchn + EQcjmQMxSLk56d1np2oUJg6rcNeUlr+NUOeaYRRYmorT7gQdybrz0qOS5QjR + C7rwad1gM8RhJp5OmIl02lxlTqyWigwSu91c2sdJsiZr6fdp65PMgRrB/2yg + u0koxshz7MUqofn19c3VbX59m0c522zZ+yzPIhTkV9fbNMdSXFzqLO9BVJJo + 9rRw0wZ9RyanN61725CCY1mq44QxDNO2RQAa6hJoryeyclRU9RuZ+oAfLLz4 + qGoRS+8iF1CNERgq/5v+WWRrH0Om+/DYo454jpbY2SChNccjzeXO4eDc40HS + Rcn1yJL6eVOT6kzxepFXjfRDR2tJI6lxjktGkLoQG09PDzhD4rGU8WLxyGf7 + 2EFBcCZ4SCHjui1vrw6cFdnX20J3WnrRYD+Zn21qFAmXfRijXwslPOjdrMDX + qoAyeZAlZ43Gku4EjrWqvZ1wOcDSbLJ7y2fiUjrTYizSRmlHfBkYfNnpvm1N + VP4EjVizf/spZvYPgTfC4WCdxnat/MewLwgsV+R6PoNNlnlIMaZlwXfred0Y + 8NVHN2cIF8jdGvcKsbPV9Zmvts/EwRJoyn5Gjk5J0pgALYJet9VSptdsDbzK + FNhXCN4xW3yAR8/lNGKTDpK8+xsAAP//AwC1lKvKcRIAAA== + http_version: + recorded_at: Fri, 03 Feb 2017 21:10:19 GMT +recorded_with: VCR 3.0.3 diff --git a/spec/fixtures/cassettes/checkout/update.yml b/spec/fixtures/cassettes/checkout/update.yml index 4de51885..30b4d294 100644 --- a/spec/fixtures/cassettes/checkout/update.yml +++ b/spec/fixtures/cassettes/checkout/update.yml @@ -16,7 +16,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.68.1 + - Braintree Ruby Gem 2.72.0 X-Apiversion: - '4' Authorization: @@ -29,7 +29,7 @@ http_interactions: message: Created headers: Date: - - Mon, 24 Oct 2016 23:12:56 GMT + - Fri, 03 Feb 2017 22:32:31 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -50,30 +50,30 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"9e3c4e78bee8868c9c3739af6b72ef65" + - W/"756227c2770005f5570d050f53efc0a0" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 97e088ec-7ed3-4720-9678-0f4db23cd3f1 + - f6593d10-f361-4f36-81ec-554c784754de X-Runtime: - - '0.271059' + - '0.854604' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAHiVDlgAA6RTTXebMBC8+1fwuAvZuC6xH8Y99Rekl17yFrRgOfqgkkjM - v68Exk6Me+jLUTOzu9LsKD+cpYje0Fiu1T5eJcs4QlVpxlWzj389/yRP8aFY - 5FVnnZZoikUU5ZwVm+16m6XZU079IWCeq46gHPHnzLBmm56yUmb16+a4zulH - NqhrbqwjCiRGiot97EyHMR0oAf9iKi1bUP0MRwlczND2qNW8Rw3nGfaOpeXu - wTyD4JARcJHrW9zHzB8dlxgX6XL1nayWJP32nK53q3S32fzO6a1gqO9a9n/1 - t4Jx/uA5qTkKZq9XYtyRCgyzl6ZgDPTTm6FvQRCoKt0p91kRBDPJCHq45EL4 - lRNoDKLEYVP3hgzCL5oy9riEiXwK0kd0UjKsoRPTqFJrgaDiItwppxfyKh5y - UJxAYcI0/sAzyFZg4mOT05GblFxCg6Qzojg619odpWAtOpuUBrhy3oLG3/kd - +lBMvWXBkReJ7qjZi9CNpqONSauaA6o3brQKkr0FxUp99r/iOmGaabvSVoa3 - zn+0B7sbNE6/oiqqP72pTzkdTxP3xTSN77YkfEOFgnDFHQ/8vbc1COvNfSS9 - 9vGvD3tStX6YEcElD5M7i0QbNqx0LszpPIv3mB1AYMygX9DMtltoisVfAAAA - //8DAMU24cvKBAAA + H4sIAP8ElVgAA6RTwXLjIAy95ys8vhMSZ9s0HcfZ035B97KXjmxkmxaEB3Cb + /P2CHSdtnT3sdIaL3nuS4Enkh6NWyRtaJw3t0/VylSZIlRGSmn36++kXe0gP + xSKveueNRlsskiSXotjsVvf32e4u5yGIWOCqFsizEG+taHbZy7bU2/r1rt3k + /CMb1bW0zjMCjQlJtU+97THlA6XgX0xldAd0muGoQaoZ2rWG5jVqOM6wdyyd + 9Df6WQSPgoFP/KnDfSpC6KXGtMhW6y1bZWy1ecqyx0046z85vyYM+X0n/i// + mjD2HzxntUQl3OVKQnpWgRXuXBSshdP0Zjh1oBhUlenJf1ZEwUwyggEupVJh + 5Awai6hxmNRXQwbhN00Za5yXiX1apI/opBRYQ6+mVqUxCoHSIt4p52fyIh72 + oHgBwqUw+BOPoDuFy7A2OR+5SSk1NMh6q4rW+849cg7OoXfL0oIkHyxowp3f + 4RSTebAsOvKs0bdGPCvTGD7auOyoOSC9SWsoSvYOSJTmGH7FpcPU0/Wlq6zs + fPhoN2Y3aLx5RSq2dPzRPuR8jCbum9s0vtux+A0JFZMkvYz8V29rUC6Ye0t6 + qRNeH+dEtbm5I0pqGTv3DpmxYhjpXJjz+S5+xdwAghAWw4Bmtl2Xplj8BQAA + //8DAGp+2pTKBAAA http_version: - recorded_at: Mon, 24 Oct 2016 23:12:54 GMT + recorded_at: Fri, 03 Feb 2017 22:32:31 GMT recorded_with: VCR 3.0.3 diff --git a/spec/fixtures/cassettes/checkout/valid_credit_card.yml b/spec/fixtures/cassettes/checkout/valid_credit_card.yml new file mode 100644 index 00000000..394d2ef3 --- /dev/null +++ b/spec/fixtures/cassettes/checkout/valid_credit_card.yml @@ -0,0 +1,282 @@ +--- +http_interactions: +- request: + method: post + uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/client_token + body: + encoding: UTF-8 + string: | + + + 2 + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.72.0 + X-Apiversion: + - '4' + Authorization: + - Basic bXdqa2t4d2NwMzJja2huZjphOTI5OGY0M2IzMGM2OTlkYjMwNzJjYzRhMDBmN2Y0OQ== + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Fri, 03 Feb 2017 21:10:10 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: + - 3v249hqtptsg744y + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + Etag: + - W/"50758b9c074776fa4e5447f02831a27d" + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 558ce29d-f7b9-4d9e-b8aa-875726c7e62d + X-Runtime: + - '0.207785' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIALLxlFgAA6RWXW+jOBR9n19R9X12wJRukTozaj4gWMGZEGLAb2CnBWKT + TD4g8Ovnmu72Q+qORtoHlAhf33t8zrnX3H+/KHnVbA7Hcld/vTb/Mq6vNjXf + ibJ++nq9jtzPd9ffv32657Lc1KfPp912U3/7dHV132TyvPm26TBiCe6z2Dn7 + 1a6bj3EhknCXW3i/Ua6h34dKnhmiHZ/hfV4vy0XpX4gKVaqITFGAFtHUDmIf + scm2TStXsopI0vsmi2hB4ulNWvntInroAuQjgtZ9MOFtEKU3ZPLQsii9kIgj + 0gf2o0c6FrsGi8PHNFk6QfVwIZ3RBiU85rILot0lmMAzvrGC3u/IZNnDcwgg + T+BeTPjtiDIlV2SXxraRILn9EYmOedwO1M5KlWExdTSzCeEigj0Va0WMj1lM + HjNE7R+xaWXqdNjMRMUnQZei0y5XaQmcVDmyVRYLylUL58c7MQtb3u+aOXLb + bGX3UG+bKudmrnCXxvIsZliyWBTCo1aabM8pck6LamkEnXMCvqvMcyEmaIiF + t6zfdlklyjwSKuvpDmKq3JMyrzUPo/3cSi9zRJpcsT2zaJcm4T5HNwMuyHPM + Par16f1qnyertmSxjbIEQ7wpn/XCL/j8si1TdNlDjLGE3DTBR9C9zGahwWfB + 7bxzCu5tzxy5Z+bhZjO2S65c0D0EbWgNtaVArj1XgCfaGWQSNHkMmFBRQEw/ + 7z/iO2j+rZkMfPlHX7k9R9TgJu3ysX/rq8IQs1G/KO+aNCE9SyDXb7gczpFQ + I3M/2g/vxzaCeqe8+zNthnyxXeQzCZ4nmsu//fqD3P+cYx675zS+2MKTFf/D + Gv/BTfkImgmv0PxO14hWIsEyBCypukgG9SGXySCGe64Nz/F3awNuFe65NTqm + iVyksSm1vmsrlHkMnpgtn/387C+sc/hbt+CINWSLS+jdWyplSiX21tO9u4ik + HU8xWtY7k02KA53eWXwK/jShV123FRGeRVOHrivccVca0RoXYeT+2HikWkz9 + LkRhI6bhT9bjRTaRRPOs54hQbrWhb/l90N6TG889ce8iB3+tnJaPwSs1BT/g + EbM0p9rT4bs+1LqwBPyXjI5sZUOvGo3wnH7QFHzG6P/x2HPcB30CvUerDDmm + GNstcN2mcfuyj3kS9CTG8k39vKbHfKx9djnmlvA1dtDL4DWVoAmci+25cs7Q + T2cxtZtIUUMgp8s6/5Yp98jRGvoG1pTsYB6dtA81phwxBXqe2WrgCtZhn0e3 + 0UtfwgxQDLxNdJ23/Tx55wNlFhx8AvMTZiLkAW/q+AzwZrFdL2Oh9wx1uUHB + //jI4ne5X2fb1K2AC/Mld01grpuA9WIMvMIc43CW1JKYI2eSo3DwKaVk6tcG + nJM0UFPz/64XXnl4nfOreLiTLK7CehHhnwThE0HsQOKnwQPAB3B6p/3SsOd5 + XvAZeIWOis3Kv4U7sBeea4gk0DGnHJHD85wc8HebNWmYt9ZrdN3p2UVMXoNe + ithL5GyB91tf0ijUXn2HK9Tc7pmSkpcDvy9r85oUuQrL3HrSekuh9eveztr1 + mb/27DkD/IC7F8mohbtZ35EL8KUF/w8c/BHDPZ4lpNC489iF82jt3Y4NmFzQ + 5Unv30JMlVsM8GDxmBhf7788fwd8uv/y/gvhFwAAAP//AwCHSPd7WAgAAA== + http_version: + recorded_at: Fri, 03 Feb 2017 21:10:10 GMT +- request: + method: post + uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/customers + body: + encoding: UTF-8 + string: | + + + fake-valid-nonce + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.72.0 + X-Apiversion: + - '4' + Authorization: + - Basic bXdqa2t4d2NwMzJja2huZjphOTI5OGY0M2IzMGM2OTlkYjMwNzJjYzRhMDBmN2Y0OQ== + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Fri, 03 Feb 2017 21:10:12 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: + - 3v249hqtptsg744y + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + Etag: + - W/"d15fdef02465289f1cf37cf27a7dbc82" + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - b99c9cfd-cb44-47cf-a8e8-d25767c5d549 + X-Runtime: + - '0.440498' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIALTxlFgAA6xVy3bbIBDd5yt8tCd62K7lHJnsuuymTRfd9CAxsqgRqIAS + ++8Lsl5+yHFOuhN3LjCaucxNnvcln72C0kyKjRc+Bt4MRCYpE9uN9/LjK4q9 + Z/yQZLU2sgSFH2azhFG8itfzVRTEiW8XDrOxrCDCIBdUdLuO/qzScpXvlsU8 + 8cdRx86Z0gYJUsJMML7xjKrB85sQJ1ORTJYVEYcLHErC+AVaFVJcnpGT/QX2 + Bqlm5sp9CogBioiZmUMFG4/apWEleDgKwhUKIhTMf0ThUxg8hdGvxB82NPvr + in5s/7DheH9Tc5Qz4FT3KVFmUEYU1e2hRCly8Fz0NH5ELJYyzm03EaFUgdYd + fuzj+kvXwRbrGo1OmjxGB+50F1vCZC+7y653tI1qowBMl/cECfYGBHVFu0nj + MiOcmamrFGyt/ieCldSGcGQfBeD1IgxWiT+Gxr9TC6MODYwIrwoSTf74OXN+ + D1PUtgcse4d6q+Cfk3R7yieF3ZzhT8jSylXgRRBGcew4osedppG7Dv9kmtjM + +vWYUUhOrUynSuAU52YRIxy/iJ2Qb8KeNGAD7VhKmSOmdU1EBtgRL9F+x+cr + e//bG5hO18ZKF798HzF7tONTSJkZ/vi4HII5qXmXdyolByI87CrnqE1wINfK + dgXZB1Nzl//o0PNItwX2FVNNPqiUwhQ4jBL/ArzCPgBRtnpRcEJv0BM20PPc + c8I1tLtGmRRAuCmsTmBIe4R1NFaSLaBacVwYU+kn3ydag9GPqSJMuKm0tT/4 + Rg6PVjp+RQ4lCPO7BFNI+pvLrfRfrUQfK7F9BvHKlBSOsNFE0FTu7cDtz+9v + tHJyjyElYjekdoJ21GamLnAYx2Hit4suZlNRko+k3QE9QUFFrI6+SRtrv4eY + pHXWWPSwf8A6mq5TnSlWuV6cetDwyozcgcBxvn3bm8Q/rrpYLdjfuhllaaNp + WxlmLU5hki+Xq8U6X67zMKfzmH7J8iy0QL5YxmluNTO5tT/7PwymVxClRJru + JjTVx0c7lE3j+OKuVqR57GNfPgGa0Ze0YxCu2vr5jLww7g+Mjtumfduybxn2 + HXZ9l1nftOobRn2nTd9r0vda9N0G/a49/xcL+fQLSPyR2PoF2OUgJ/zwDwAA + //8DADuGuhw3DAAA + http_version: + recorded_at: Fri, 03 Feb 2017 21:10:12 GMT +- request: + method: post + uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/transactions + body: + encoding: UTF-8 + string: | + + + 20.00 + R9999999-123ABC + Solidus + + true + + 8fgwxt + 78937208 + sale + + headers: + Accept-Encoding: + - gzip + Accept: + - application/xml + User-Agent: + - Braintree Ruby Gem 2.72.0 + X-Apiversion: + - '4' + Authorization: + - Basic bXdqa2t4d2NwMzJja2huZjphOTI5OGY0M2IzMGM2OTlkYjMwNzJjYzRhMDBmN2Y0OQ== + Content-Type: + - application/xml + response: + status: + code: 201 + message: Created + headers: + Date: + - Fri, 03 Feb 2017 21:10: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: + - 3v249hqtptsg744y + Vary: + - Accept-Encoding + Content-Encoding: + - gzip + Etag: + - W/"d576a1749ea44f1a80b0a7c9236bfc03" + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - cc872171-246c-4919-bf75-0ba9df7b5603 + X-Runtime: + - '0.518970' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIALXxlFgAA9xY32+kNhB+v78i2ncH2CSX3YiQ3rWq2krXh+ZSVX2JDB4W + N2BT22x2+9d3jIGFYJL0oVLVPC0zn8eeH575nPjuUJVne1CaS3G7is7D1RmI + TDIudrerh6/fk83qLvkQG0WFpplBVPLh7CzmLCme6qw6XudxgB9Wpg01jU5o + Ywqp+F/A4qATWa051pBoWkIctD+tLGuUwt2OhGtJcFNIHu6/i4O52IJpJRth + knV4HoZx0H1ZRQUqK6gwhGaZFRI8jzZQpbI0ceDTtqdtUuLRnQle3q6MamAV + OOsUbal3QaViiET7v2zdH4nWF58+fxsHg6b1WgE1wAg1ZzYStyuGn4ZXsELn + omsSrkl48XUd3UThTXTxO8ZjWNCub2r2z9afFnRR10aiP/bDpfJ6s724Xoeb + PpUozbnShghawUs3UVnSZV0mq5qKo0cDFeWlR/4MqebGZ6supPDJc3qYBT8Y + uxWnvCyxhE8ubj/+u85powCwOhhToLXP+4MBwWwWFiGlzGjJjc+8gh1ePV+I + JN6x0t2S7WUUXsfBWNQfGytWHZe9cmq7gtCyLuj6XaiLt1CiwXzwbJ6rUXrQ + tbwRzHefBo3uCp0qRY8TJcZz1Jp8RmqqDMdwaDCmhArw6k5X+Iyfethb5kdm + U2qywospeF2Pq9FX0v/LknylQP4ztTjOTtcbSc6hZLqrhb0moJRUBGNUS6HB + 61qLG7k+RSdfcGS9CuhNTLP2AvSjs/IqpnVjv5+vnAstdIej4ZkeUfMHuCrH + aaPniY1rJTPcDePQ3w7awltL4Q+/ffn8E/ae10BTK9OjRKGd6kvahZUGKzj5 + VKNmb9nGEqINLWPcngSDP4fNfN1LntkE5Zh4XIG1k4KaR6SxnAB3ceN9AWXo + gTi24lXBAaq6n+SplCVQsUpyWmrLlAZAzxzQC5JR1U8yI59AJJt893xAruO+ + nCblIrkMo/VmY9utGHeSyyTabKI46D66y4JGScvMfuWaYrUM332zqLlyyayk + MEUSreNgJpxhj0AV0pJ1OAG30m7fbmwT22pafvlwfxrmJ+nplIUs23D7Gwiv + 6A5Io8qkMKbWN0FANTZpfZ4qyoW9OF3Fn2PnDGp6tL37sQKsVvZYyp0M9uj/ + eS12dyD2XElhAbeaCpbKA5KIwX7X7RTUFJnFz9IWoPvtNAXQ0hR4YqS14knI + ZxEHI5kDMUi5OendZ6dqFCYOq3DXlJa/jVAvNcMosDQVp90JOpJ156VHJcsR + ohd04dO6wWaIw0w8nTAT6bS5ypxYLRUZJHa7ubSPk2RN1tLv09YnmQM1gv/Z + QHeTUIyR59iLVULzq6vry21+tc2jnF1s2McszyIU5JdXmzTHUlxc6izvQVSS + aPa0cNMGfUcmpzete9uQgmNZquOEMQzTtkUAGuoSaK8nsnJUVPU7mfqAHyy8 + +qhqEUvvIhdQjREYKv+b/llkax9Dpvvw2KOOeI6W2NkgoTXHI83lzuHgpceD + pIuS65El9fOmJtWZ4vUirxrph47WkkZS4xyXjCB1ITaenh7wAonHUsaLxSO/ + 2McOCoIzwUMKGddteXt14KzIvt4WutPSiwb7yfxsU6NIuOzDGP1aKOFB72YF + vlYFlMm9LDlrNJZ0J3CsVe3thMsBlmaT3Vs+E5fSmRZjkTZKO+LLwODLTvdt + a6LyJ2jEmv3bTzGzfwi8Ew4H6zS2a+U/hn1BYLki1/MZbLLMQ4oxLQu+W8/r + xoCvPro5Q7hA7ta4V4idra7PPNo+EwdLoCn7GTk6JUljArQIettWS5nesjXw + KlNgXyF4x2zxAR49l9OITTpI8uFvAAAA//8DAF/OfB5xEgAA + http_version: + recorded_at: Fri, 03 Feb 2017 21:10:13 GMT +recorded_with: VCR 3.0.3 diff --git a/spec/fixtures/cassettes/gateway/authorize.yml b/spec/fixtures/cassettes/gateway/authorize.yml index a92fb028..3ecbbd25 100644 --- a/spec/fixtures/cassettes/gateway/authorize.yml +++ b/spec/fixtures/cassettes/gateway/authorize.yml @@ -22,7 +22,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.69.1 + - Braintree Ruby Gem 2.72.0 X-Apiversion: - '4' Authorization: @@ -35,7 +35,7 @@ http_interactions: message: Created headers: Date: - - Tue, 10 Jan 2017 17:32:43 GMT + - Thu, 02 Feb 2017 00:47:29 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -56,49 +56,49 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"3b7e0b3b941e489be8f77db99e3f0f49" + - W/"54d798d964fd06eaf277f5a6661eaeeb" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 9560cb61-d1d3-462b-8d51-3377fa79d90c + - 3d300059-3ec4-4bac-9138-6ac650099962 X-Runtime: - - '0.482152' + - '0.465756' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIALsadVgAA+RYTW/jNhC951cEvjOyYqdxForSAosCPbSH7qZFe1lQ4sji - hiJVknLs/vodipIsRVSSAj0U6M2aeRxyPjjz6OThWInLA2jDlbxfxVfr1SXI - XDEu9/erx88/kt3qIb1IrKbS0NwiKr24vEw4S+vqme1p8TWJ8MPJjKW2MSlt - bKk0/xtYEnUip7WnGlJDBSRR+9PJ8kZr3O1EuFEEN4X08dPHJJqLHZhWqpE2 - jddX63USdV9OUYHOSyotoXnuhATPYyxUmRI2iULa9rRNRgK6S8nF/crqBlaR - t07Rln4XVGmGyIAi10AtMELtpfP9fsXw0/IKVun1Or4l65jE68/x7YfN9Yft - 5k+MwLCgXd/U7J+tPy/o4mysQg/ch0/ebrfZbra3133yUFpwbSyRtIKX50el - oMu6XFU1laeABirKRUD+DJnhNmSrLpUMyQt6nEU1GruVZFwILNrBxZCRf99D - YzUAFgVjGowJheBoQTKXikWIUDkV3IbMa9jjjQvFSeHVEv5y3G3j9W0SjUX9 - sbFQ9WnZK692KwgVdUmv34XavIWSDSaF5/OEjXKErhWNZKHbMmhMV+1Ua3qa - KDGeo44UMlJTbTmGw4C1AirAGztdETJ+bl1vmR+ZzajNyyCm5HX9vyzJVwrk - P1OL4+x0DZIUHAQzXS0cDAGtlSYYo1pJA0HXWtzI9Sk6/Rkn1auA3sQ0ay9A - P3krr2JaNw6H+f5zoYPucT480xNqvoKvchw5Zp7YpNYqx90wDv3toC28tfT7 - H79+/niHvec10NTK9Cjx2g3zJe3CSosVnP5Qo+bgSMYSog0tY9ydBIM/h818 - PSieuwQVmHhcgbWTgZ5HpHFUAHfx834BZemReJISVMERqrof55lSAqhcpQUV - xhGkAdDTB/SC5FT3s9qqJ5Dp5mZ/3G8R3n55TcZlul3H17uda7dy3Em2abzb - xUnUfXSXBY2SlpD9xg3Fahm++2ZRc+2TWSlpyzRGzjATzrAnoBq5yfV6Am6l - 3b7d7Cau1bS08vHTeaKfpedTlkq04Q43EF7RPZBGi7S0tjYfoogabNLmKtOU - S3dxuoq/ws4Z1fTkeveXCrBa2Reh9io6oP9Xtdw/gDxwraQD3BsqWaaOSJMG - +12301BT5E6/KFeA/rfXlECFLfHEyGblk1TPMolGMg9ikHF71vvPTtVoTBxW - 4b4RjsSNUC81wyhw7BSn3Rk6knXnpSetxAjRC7rwGdNgM8RhJp/OmIl02lxV - QZyWyhxSt91c2sdJsSZvWfd567PMgxrJ/2qgu0koxshz7MU6pcXNze32rri5 - K+KCbXbsu7zIYxQU25tdVmApLi71lg8gK0UMe1q4aYO+Y5TTm9Y9aUjJsSz1 - acIYhmnbIgANdQl01xOpOSqq+p10fcAPFl59S7WIpeeQD6jBCAyV/33/GnK1 - jyEzfXjcUUc8xyjsbJDSmuOR5nLvcPTS40HSRcn3SEHDvKnJTK55vcirRvqh - o7WkkdQ4xxUjSF2Ii2egB7xA4rG0DWLxyC/2cYOC4EwIkELGTVveQR14K6qv - t4XutPSswX4yP9vUKBIu9x5GvxZKeND7WYGPVAki/aQEZ43Bku4EnrXqg5tw - BcDSbHJ7q2fiUzrTYiyyRhtPfBlYfN6Zvm1NVOEEjVhzePspZvY/wDvhcHRO - Y7vW4WO4FwSWK3K9kMEmzwOkGNOy4LvzvG4shOqjmzOES+RujX+FuNnq+8wX - 12eSaAk0ZT8jR6ckaUyAFkFv22op01u2Bl5lS+wrBO+YKz7AoxdqGrFJB0kv - vgEAAP//AwC3kSJ/aBIAAA== + H4sIAKGBklgAA+RYz2+sNhC+56+I9u4Am92XTURIWz1V6qG95KWHXiKDh8UN + 2NQ2m93313eMgYVgklTqoVKlHJaZz2PPD898TvxwrMrLAyjNpbhfRVfh6hJE + JhkX+/vV07efyW71kFzERlGhaWYQlVxcXsacJVv2fXeKrqs4wA8r04aaRie0 + MYVU/DuwOOhEVmtONSSalhAH7U8ryxqlcLcT4VoS3BSSp8evcTAXWzCtZCNM + EoVXYRgH3ZdVVKCyggpDaJZZIcHzaANVKksTBz5te9omJR7dpeDl/cqoBlaB + s07RlvoUVCqGSI8iU0ANMELNpfX9fsXw0/AKVsk6jG5IuMa/b2F4t7m5W9/+ + gREYFrTrm5r9s/XnBV2ctZHogf1wybvebqL1l5uwTx5Kc660IYJW8Pb8qCzp + si6TVU3FyaOBivLSI3+FVHPjs1UXUvjkOT3OohqM3YpTXpZYtIOLPiP/vofa + KAAsCsYUaO0LwdGAYDYVi5BSZrTkxmdewR5vnC9OEq9W6S7H7SYKb+JgLOqP + jYWqTsteObVdQWhZF3T9KdT1RyjRYFJ4Nk/YKEfoWt4I5rstg0Z31U6VoqeJ + EuM56kg+IzVVhmM4NBhTQgV4Y6crfMbPresj8yOzKTVZ4cUUvK7/lyX5ToH8 + Z2pxnJ2uQZKcQ8l0VwsHTUApqQjGqJZCg9e1FjdyfYpOfsVJ9S6gNzHN2hvQ + L87Ku5jWjcNhvv9caKF7nA+v9ISaP8FVOY4cPU9sXCuZ4W4Yh/520BbuzIfr + n75+w97zHmhqZXqUKLTDfEm7sNJgBSc/1qg5WJKxhGhDyxi3J8Hgz2EzXw+S + ZzZBOSYeV2DtpKDmEWksFcBd3LxfQBl6JI6keFVwhKrux3kqZQlUrJKcltoS + pAHQ0wf0gmRU9bPayBcQybY+qHWN8PbLaVIukk0YrXc7227FuJNskmi3i+Kg + ++guCxolLSH7nWuK1TJ8982i5sols5LCFEm0joOZcIY9AVXITdbhBNxKu327 + 2U1sq2lp5dPjeaKfpedTFrJsw+1vILyieyCNKpPCmFrfBQHV2KT1VaooF/bi + dBV/hZ0zqOnJ9u7nCrBa2XMp9zI4oP9Xtdg/gDhwJYUF3GsqWCqPSJMG+123 + U1BT5E6/SVuA7rfTFEBLU+CJkc2KFyFfRRyMZA7EIOXmrHefnapRmDiswn1T + WhI3Qr3VDKPAslOcdmfoSNadl56ULEeIXtCFT+sGmyEOM/Fyxkyk0+Yqc2K1 + VGSQ2O3m0j5OkjVZy7rPW59lDtQI/lcD3U1CMUaeYy9WCc2325vNbb69zaOc + Xe/YlyzPIhTkm+0uzbEUF5c6ywcQlSSavSzctEHfMcrpTeueNKTgWJbqNGEM + w7RtEYCGugTa64nUHBVV/Um6PuAHC+++pVrE0nPIBVRjBIbK/6F/Ddnax5Dp + Pjz2qCOeoyV2NkhozfFIc7lzOHjr8SDpouR6ZEn9vKlJdaZ4vcirRvqho7Wk + kdQ4xyUjSF2IjaenB7xB4rGU8WLxyG/2sYOC4EzwkELGdVveXh04K7Kvt4Xu + tPSswX4yP9vUKBIu+x5GvxZKeNC7WYGPVAFl8ihLzhqNJd0JHGtVBzvhcoCl + 2WT3lq/EpXSmxVikjdKO+DIw+LzTfduaqPwJGrFm//ZTzOz/AJ+Ew9E6je1a + +Y9hXxBYrsj1fAabLPOQYkzLgu/W87ox4KuPbs4QLpC7Ne4VYmer6zPPts/E + wRJoyn5Gjk5J0pgALYI+ttVSpo9sDbzKFNhXCN4xW3yAR8/lNGKTDpJc/A0A + AP//AwD4gd6maBIAAA== http_version: - recorded_at: Tue, 10 Jan 2017 17:32:43 GMT + recorded_at: Thu, 02 Feb 2017 00:47:29 GMT recorded_with: VCR 3.0.3 diff --git a/spec/fixtures/cassettes/gateway/authorize/EUR.yml b/spec/fixtures/cassettes/gateway/authorize/EUR.yml deleted file mode 100644 index 02aa1232..00000000 --- a/spec/fixtures/cassettes/gateway/authorize/EUR.yml +++ /dev/null @@ -1,193 +0,0 @@ ---- -http_interactions: -- request: - method: post - uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/transactions - body: - encoding: UTF-8 - string: | - - - 10.00 - - true - - stembolt_EUR - fake-valid-nonce - sale - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.68.1 - X-Apiversion: - - '4' - Authorization: - - Basic bXdqa2t4d2NwMzJja2huZjphOTI5OGY0M2IzMGM2OTlkYjMwNzJjYzRhMDBmN2Y0OQ== - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Mon, 24 Oct 2016 23:13:15 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: - - 3v249hqtptsg744y - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - Etag: - - W/"e09a8be15b03010e88ba2f77dd0ea29f" - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 0fc97dd6-048d-45d6-b4e7-46eb13e3c879 - X-Runtime: - - '0.519857' - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - body: - encoding: ASCII-8BIT - string: !binary |- - H4sIAIuVDlgAA+RYTW/jNhC9768wfGdkOc6us1CU9tACLdAF2t0UbS8BJY4s - NhKpkpRj7a/vUJRkyaKSFOihQIEcrJnHIeeDM4+J7k9lsTqC0lyKu3V4tVmv - QKSScXG4Wz98+Z7s1/fxu8goKjRNDaLid6tVxFl8fdtkYLImCvDDyrShptYx - rU0uFf8KLAo6kdWapoJY0wKioP1pZWmtFO7WEK4lwU0h/u7hlyiYiy2YlrIW - Jg43V5tNFHRfVlGCSnMqDKFpaoUEz6MNlIkszGNr0IdoT1wnxKNbCV7crY2q - YR24HSjaU2+CSsUQ6VGkCqgBRqhZWf/v1gw/DS9hHW834XsSbsh292V7/THE - v5s/MArDgnZ9XbF/tv68oIu1NhI9sB8ugdvwZr/ZbTd9AlGacaUNEbSEy/Oj - sqDLulSWFRWNRwMl5YVH/gyJ5sZnq8ql8MkzeppFNRi7FSW8KLBwBxd9Rv59 - D7VRAFgUjCnQ2heCkwHBbCoWIYVMacGNz7yCA946X5wkXq/CXZDbXbj5EAVj - UX9sLFTVLHvl1HYFoUWV0+2bUNevoUSNSeHpPGGjHKFrWS2Y77YMGt1VO1WK - NhMlxnPUlXxGKqoMx3BoMKaAEvDGTlf4jJ/b12vmR2YTatLci8l5Vf0vS/KF - AvnP1OI4O12DJBmHgumuFo6agFJSEYxRJYUGr2stbuT6FB3/hNPqRUBvYpq1 - C9APzsqLmNaN43G+/1xooQecD8+0Qc2f4KocR46eJzaqlExxN4xDfztoC28t - /f7j9afffsbe8xJoamV6lHBjB/qSdmGlwQqOv61Qc7REYwnRhpYxbk+CwZ/D - Zr4eJU9tgjJMPK7A2klAzSNSWyqAu7h5v4Ay9EQcUfGq4ARl1Y/zRMoCqFjH - GS20JUkDoKcP6AVJqepntZFPIOI9+3pI9whvv5wm4SLebcLtfm/brRh3kl0c - 7vdhFHQf3WVBo6QlZb9yTbFahu++WVRcuWSWUpg8DrdRMBPOsA1QhdzEEoxL - abdvN7uJbTUttXz4fJ7oZ+n5lLks2nD7Gwgv6QFIrYo4N6bSH4OAamzS+ipR - lAt7cbqKv8LOGVS0sb37sQSsVvZYyIMMjuj/VSUO9yCOXElhAXeaCpbIE9Kk - wX7X7RRUFLnTJ2kL0P12mhxoYXI8McQP4knIZxEFI5kDMUi4OevdZ6eqFSYO - q/BQF5bEjVCXmmEUWHaK0+4MHcm689JGyWKE6AVd+LSusRniMBNPZ8xEOm2u - MiNWS0UKsd1uLu3jJFmdtqz7vPVZ5kC14H/V0N0kFGPkOfZiFdPs5ubD7ja7 - uc3CjF3v2fs0S0MUZLubfZJhKS4udZaPIEpJNHtauGmDvmOU05vWPWtIzrEs - VTNhDMO0bRGAhroE2uuJ1BwVZfVGuj7gBwsvvqdaxNKTyAVUYwSGyv+mfxHZ - 2seQ6T489qgjnqMldjaIacXxSHO5czi49HiQdFFyPbKgft5UJzpVvFrkVSP9 - 0NFa0kgqnOOSEaQuxMbT0wMukHgsZbxYPPLFPnZQEJwJHlLIuG7L26sDZ0X2 - 9bbQnZaeNdhP5mebGkXCZd/E6NdCCQ96NyvwkSpgbhVzfrTDLQNYGkt2W/lM - XDZnWgxDUivtOC8Dgy873XesicqfmxFh9m8/xcz+DfBGOJxsALBTK/8x7OMB - KxVpns9gnaYePowZWfDdel7VBnyl0Y0YwgXStto9QOxYdS3m0baYKFgCTYnP - yNEpPxpzn0XQ67ZatvSarYFSmRxbCsHrZesO8OiZnEZs0jzid38DAAD//wMA - 2/41tGcSAAA= - http_version: - recorded_at: Mon, 24 Oct 2016 23:13:14 GMT -- request: - method: get - uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/transactions/39yfetfy - body: - encoding: US-ASCII - string: '' - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.68.1 - X-Apiversion: - - '4' - Authorization: - - Basic bXdqa2t4d2NwMzJja2huZjphOTI5OGY0M2IzMGM2OTlkYjMwNzJjYzRhMDBmN2Y0OQ== - response: - status: - code: 200 - message: OK - headers: - Date: - - Mon, 24 Oct 2016 23:13:16 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: - - 3v249hqtptsg744y - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - Etag: - - W/"d0f2e2c2652504875375a0ea3b2cdc20" - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 068af0e6-2fea-4d64-9306-d5cfb64cd5c8 - X-Runtime: - - '0.216531' - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - body: - encoding: ASCII-8BIT - string: !binary |- - H4sIAIyVDlgAA+RYTW/jNhC9768wfGdkOc6us1CU9tACLdAF2t0UbS8BJY4s - NhKpkpRj7a/vUJRkyaKSFOihQIEcrJnHIeeDM4+J7k9lsTqC0lyKu3V4tVmv - QKSScXG4Wz98+Z7s1/fxu8goKjRNDaLid6tVxFl8fdtkYLImCvDDyrShptYx - rU0uFf8KLAo6kdWapoJY0wKioP1pZWmtFO7WEK4lwU0h/u7hlyiYiy2YlrIW - Jg43V5tNFHRfVlGCSnMqDKFpaoUEz6MNlIkszGNr0IdoT1wnxKNbCV7crY2q - YR24HSjaU2+CSsUQ6VGkCqgBRqhZWf/v1gw/DS9hHW834XsSbsh292V7/THE - v5s/MArDgnZ9XbF/tv68oIu1NhI9sB8ugdvwZr/ZbTd9AlGacaUNEbSEy/Oj - sqDLulSWFRWNRwMl5YVH/gyJ5sZnq8ql8MkzeppFNRi7FSW8KLBwBxd9Rv59 - D7VRAFgUjCnQ2heCkwHBbCoWIYVMacGNz7yCA946X5wkXq/CXZDbXbj5EAVj - UX9sLFTVLHvl1HYFoUWV0+2bUNevoUSNSeHpPGGjHKFrWS2Y77YMGt1VO1WK - NhMlxnPUlXxGKqoMx3BoMKaAEvDGTlf4jJ/b12vmR2YTatLci8l5Vf0vS/KF - AvnP1OI4O12DJBmHgumuFo6agFJSEYxRJYUGr2stbuT6FB3/hNPqRUBvYpq1 - C9APzsqLmNaN43G+/1xooQecD8+0Qc2f4KocR46eJzaqlExxN4xDfztoC28t - /f7j9afffsbe8xJoamV6lHBjB/qSdmGlwQqOv61Qc7REYwnRhpYxbk+CwZ/D - Zr4eJU9tgjJMPK7A2klAzSNSWyqAu7h5v4Ay9EQcUfGq4ARl1Y/zRMoCqFjH - GS20JUkDoKcP6AVJqepntZFPIOI9+3pI9whvv5wm4SLebcLtfm/brRh3kl0c - 7vdhFHQf3WVBo6QlZb9yTbFahu++WVRcuWSWUpg8DrdRMBPOsA1QhdzEEoxL - abdvN7uJbTUttXz4fJ7oZ+n5lLks2nD7Gwgv6QFIrYo4N6bSH4OAamzS+ipR - lAt7cbqKv8LOGVS0sb37sQSsVvZYyIMMjuj/VSUO9yCOXElhAXeaCpbIE9Kk - wX7X7RRUFLnTJ2kL0P12mhxoYXI8McQP4knIZxEFI5kDMUi4OevdZ6eqFSYO - q/BQF5bEjVCXmmEUWHaK0+4MHcm689JGyWKE6AVd+LSusRniMBNPZ8xEOm2u - MiNWS0UKsd1uLu3jJFmdtqz7vPVZ5kC14H/V0N0kFGPkOfZiFdPs5ubD7ja7 - uc3CjF3v2fs0S0MUZLubfZJhKS4udZaPIEpJNHtauGmDvmOU05vWPWtIzrEs - VTNhDMO0bRGAhroE2uuJ1BwVZfVGuj7gBwsvvqdaxNKTyAVUYwSGyv+mfxHZ - 2seQ6T489qgjnqMldjaIacXxSHO5czi49HiQdFFyPbKgft5UJzpVvFrkVSP9 - 0NFa0kgqnOOSEaQuxMbT0wMukHgsZbxYPPLFPnZQEJwJHlLIuG7L26sDZ0X2 - 9bbQnZaeNdhP5mebGkXCZd/E6NdCCQ96NyvwkSpgbhVzfrTDLQNYGkt2W/lM - XDZnWgxDUivtOC8Dgy873XesicqfmxFh9m8/xcz+DfBGOJxsALBTK/8x7OMB - KxVpns9gnaYePowZWfDdel7VBnyl0Y0YwgXStto9QOxYdS3m0baYKFgCTYnP - yNEpPxpzn0XQ67ZatvSarYFSmRxbCsHrZesO8OiZnEZs0jzid38DAAD//wMA - 2/41tGcSAAA= - http_version: - recorded_at: Mon, 24 Oct 2016 23:13:15 GMT -recorded_with: VCR 3.0.3 diff --git a/spec/fixtures/cassettes/gateway/authorize/merchant_account/EUR.yml b/spec/fixtures/cassettes/gateway/authorize/merchant_account/EUR.yml index 2e0d71e0..f8d7035d 100644 --- a/spec/fixtures/cassettes/gateway/authorize/merchant_account/EUR.yml +++ b/spec/fixtures/cassettes/gateway/authorize/merchant_account/EUR.yml @@ -26,7 +26,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.69.1 + - Braintree Ruby Gem 2.72.0 X-Apiversion: - '4' Authorization: @@ -39,7 +39,7 @@ http_interactions: message: Created headers: Date: - - Tue, 10 Jan 2017 17:34:38 GMT + - Thu, 02 Feb 2017 00:47:30 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -60,54 +60,54 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"beaea1d70d759572ad5305219d8fcd29" + - W/"b9a973fa5da11e6c069afbf6dec3456a" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 0d2da15d-1a9b-4f5c-b653-140560207d21 + - dd95d5b8-647e-4be7-b3ef-b10e38cd740c X-Runtime: - - '0.598435' + - '0.482031' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAC4bdVgAA+RYTW/jNhC9768IfGdkJU7jBIrSAu2iLdA9dDct0EtAiSOL - DUWqJOXY++s7FCVZiqgkBXoo0Js18zjkfHDm0cn9oRJne9CGK3m3is/XqzOQ - uWJc7u5WD18+ku3qPv2QWE2loblFVPrh7CzhLN1p9lybNSQRfjiZsdQ2JqWN - LZXmX4ElUSdyWnusITVUIL796WR5ozXudiTcKIKbQvrDw69JNBc7MK1UI20a - r8/X6yTqvpyiAp2XVFpC89wJCZ7HWKgyJexjazCEaE/cZCSgO5Nc3K2sbmAV - +R0o2tPvgirNEBlQ5BqoBUaoPXP+360YflpewSq9WMfXZB2TeP0lvr693Nxe - bv/AKAwL2vVNzf7Z+tOCLtbGKvTAffgEXm62m/h6e9EnEKUF18YSSSt4eX5U - Crqsy1VVU3kMaKCiXATkz5AZbkO26lLJkLygh1lUo7FbScaFwMIdXAwZ+fc9 - NFYDYFEwpsGYUAgOFiRzqViECJVTwW3IvIYd3rpQnBReL+EvyM0mXl8n0VjU - HxsLVR+XvfJqt4JQUZf04l2oy7dQssGk8HyesFGO0LWikSx0WwaN6aqdak2P - EyXGc9SVQkZqqi3HcBiwVkAFeGOnK0LGT+3rLfMjsxm1eRnElLyu/5cl+UqB - /GdqcZydrkGSgoNgpquFvSGgtdIEY1QraSDoWosbuT5Fp7/gtHoV0JuYZu0F - 6Cdv5VVM68Z+P99/LnTQHc6HZ3pEzZ/gqxxHjpknNqm1ynE3jEN/O2gLby19 - +vn373/8iL3nNdDUyvQo8doN9CXtwkqLFZx+V6Nm74jGEqINLWPcnQSDP4fN - fN0rnrsEFZh4XIG1k4GeR6RxVAB38fN+AWXpgXiiElTBAaq6H+eZUgKoXKUF - FcaRpAHQ0wf0guRU97PaqieQ6dPmqjxYhLdfXpNxmW7W8cV269qtHHeSTRpv - t3ESdR/dZUGjpCVlv3FDsVqG775Z1Fz7ZFZK2jKNkTPMhDPsEahGbnKxnoBb - abdvN7uJazUttXz4fJroJ+nplKUSbbjDDYRXdAek0SItra3NbRRRg03anGea - cukuTlfx59g5o5oeXe9+rACrlT0KtVPRHv0/r+XuHuSeayUd4M5QyTJ1QJo0 - 2O+6nYaaInf6pFwB+t9eUwIVtsQTQ/ogn6R6lkk0knkQg4zbk95/dqpGY+Kw - CneNcCRuhHqpGUaBY6c47U7Qkaw7Lz1qJUaIXtCFz5gGmyEOM/l0wkyk0+aq - CuK0VOaQuu3m0j5OijV5y7pPW59kHtRI/lcD3U1CMUaeYy/WKS2urq43N8XV - TREX7HLLvsmLPEZBsbnaZgWW4uJSb3kPslLEsKeFmzboO0Y5vWnds4aUHMtS - HyeMYZi2LQLQUJdAdz2RmqOiqt9J1wf8YOHV91SLWHoS+YAajMBQ+d/2LyJX - +xgy04fHHXXEc4zCzgYprTkeaS73DkcvPR4kXZR8jxQ0zJuazOSa14u8aqQf - OlpLGkmNc1wxgtSFuHgGesALJB5L2yAWj/xiHzcoCM6EAClk3LTlHdSBt6L6 - elvoTkvPGuwn87NNjSLhcm9i9GuhhAe9nxX4SJUg0s9KcNYYLOlO4Fmr3rsJ - VwAszSa3t3omPqUzLcYia7TxxJeBxeed6dvWRBVO0Ig1h7efYmb/BbwTDgfn - NLZrHT6Ge0FguSLXCxls8jxAijEtC747z+vGQqg+ujlDuETu1vhXiJutvs88 - uj6TREugKfsZOTolSWMCtAh621ZLmd6yNfAqW2JfIXjHXPEBHr1Q04hNOkj6 - 4W8AAAD//wMA7EFoN2wSAAA= + H4sIAKKBklgAA+RYS2/jNhC+768IfGckP7JxFoq2PbRADy3a7qYoegkocWSx + oUiVpBy7v75DUZKliEpy6KFAgRysmY9DzoMzH5N8PlXi6gjacCXvV+vreHUF + MleMy8P96uHr92S/+px+SKym0tDcIir9cHWVcJb+eXum2+ppl0T44WTGUtuY + lDa2VJr/DSyJOpHT2nMNqaECkqj96WR5ozXudibcKIKbQvrdw69JNBc7MK1U + I226jq/jOIm6L6eoQOcllZbQPHdCgucxFqpMCfvYGgwh2hM3GQnoriQX9yur + G1hFfgeK9vS7oEozRAYUuQZqgRFqr5z/9yuGn5ZXsEo38fqWxBv8+xrHn3a3 + nzZ3f2AUhgXt+qZm716/jXH9ZUEXa2MVeuA+fAI3H7c327vbfZ9AlBZcG0sk + reDl+VEp6LIuV1VN5TmggYpyEZA/Q2a4DdmqSyVD8oKeZlGNxm4lGRcCC3dw + MWTk3/fQWA2ARcGYBmNCIThZkMylYhEiVE4FtyHzGg5460JxUni9hL8gd7t1 + fJtEY1F/bCxUfV72yqvdCkJFXdLNu1Dbt1CywaTwfJ6wUY7QtaKRLHRbBo3p + qp1qTc8TJcZz1JVCRmqqLcdwGLBWQAV4Y6crQsYv7est8yOzGbV5GcSUvK7/ + lyX5SoH8Z2pxnJ2uQZKCg2Cmq4WjIaC10gRjVCtpIOhaixu5PkWnP+K0ehXQ + m5hm7QXoB2/lVUzrxvE4338udNADzodnekbNn+CrHEeOmSc2qbXKcTeMQ387 + aAtvLf1y8+Xnj79j73kNNLUyPco6dgN9Sbuw0mIFp9/WqDk6orGEaEPLGHcn + weDPYTNfj4rnLkEFJh5XYO1koOcRaRwVwF38vF9AWXoinqgEVXCCqu7HeaaU + ACpXaUGFcSRpAPT0Ab0gOdX9rLbqCWR6V23s1iK8/fKajMt0F683+71rt3Lc + SXbper9fJ1H30V0WNEpaUvYbNxSrZfjum0XNtU9mpaQt0/UmiWbCGfYMVCM3 + 2cQTcCvt9u1mN3GtpqWWD18uE/0ivZyyVKINd7iB8IoegDRapKW1tfkURdRg + kzbXmaZcuovTVfw1ds6opmfXux8rwGplj0IdVHRE/69refgM8si1kg5wb6hk + mTohTRrsd91OQ02RO/2kXAH6315TAhW2xBND+iCfpHqWSTSSeRCDjNuL3n92 + qkZj4rAKD41wJG6EeqkZRoFjpzjtLtCRrDsvPWslRohe0IXPmAabIQ4z+XTB + TKTT5qoK4rRU5pC67ebSPk6KNXnLui9bX2Qe1Ej+VwPdTUIxRp5jL9YpLW5u + bnd3xc1dsS7Yds8+5kW+RkGxu9lnBZbi4lJv+QiyUsSwp4WbNug7Rjm9ad2z + hpQcy1KfJ4xhmLYtAtBQl0B3PZGao6Kq30n3B/xg4dX3VItYehL5gBqMwFD5 + 3/QvIlf7GDLTh8cddcRzjMLOBimtOR5pLvcORy89HiRdlHyPFDTMm5rM5JrX + i7xqpB86WksaSY1zXDGC1IW4eAZ6wAskHkvbIBaP/GIfNygIzoQAKWTctOUd + 1IG3ovp6W+hOS88a7Cfzs02NIuFyb2L0a6GEB72fFfhIlSDSL0pw1hgs6U7g + Was+uglXACzNJre3eiY+pTMtxiJrtPHEl4HF553p29ZEFU7QiDWHt59iZv8L + eCccTs5pbNc6fAz3gsByRa4XMtjkeYAUY1oWfHee142FUH10c4Zwidyt8a8Q + N1t9n3l0fSaJlkBT9jNydEqSxgRoEfS2rZYyvWVr4FW2xL5C8I654gM8eqGm + EZt0kPTDPwAAAP//AwBYVunXbBIAAA== http_version: - recorded_at: Tue, 10 Jan 2017 17:34:38 GMT + recorded_at: Thu, 02 Feb 2017 00:47:30 GMT - request: method: get - uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/transactions/grdwps0e + uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/transactions/j7ya3mk4 body: encoding: US-ASCII string: '' @@ -117,7 +117,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.69.1 + - Braintree Ruby Gem 2.72.0 X-Apiversion: - '4' Authorization: @@ -128,7 +128,7 @@ http_interactions: message: OK headers: Date: - - Tue, 10 Jan 2017 17:34:39 GMT + - Thu, 02 Feb 2017 00:47:30 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -149,49 +149,49 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"42351ded9e7c8dc5098d2adb44493ac3" + - W/"b9a973fa5da11e6c069afbf6dec3456a" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 74a2971e-eb4c-4889-9f8a-5eaf5e5b9870 + - 11e891cc-ce8c-48fd-9f48-d2c5989c084c X-Runtime: - - '0.194759' + - '0.155768' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAC8bdVgAA+RYTW/jNhC9768IfGdkJU7jBIrSAu2iLdA9dDct0EtAiSOL - DUWqJOXY++s7FCVZiqgkBXoo0Js18zjkfHDm0cn9oRJne9CGK3m3is/XqzOQ - uWJc7u5WD18+ku3qPv2QWE2loblFVPrh7CzhLN1p9lybNSQRfjiZsdQ2JqWN - LZXmX4ElUSdyWnusITVUIL796WR5ozXudiTcKIKbQvrDw69JNBc7MK1UI20a - r8/X6yTqvpyiAp2XVFpC89wJCZ7HWKgyJexjazCEaE/cZCSgO5Nc3K2sbmAV - +R0o2tPvgirNEBlQ5BqoBUaoPXP+360YflpewSq9WMfXZB2TeP0lvr693Nxe - bv/AKAwL2vVNzf7Z+tOCLtbGKvTAffgEXm62m/h6e9EnEKUF18YSSSt4eX5U - Crqsy1VVU3kMaKCiXATkz5AZbkO26lLJkLygh1lUo7FbScaFwMIdXAwZ+fc9 - NFYDYFEwpsGYUAgOFiRzqViECJVTwW3IvIYd3rpQnBReL+EvyM0mXl8n0VjU - HxsLVR+XvfJqt4JQUZf04l2oy7dQssGk8HyesFGO0LWikSx0WwaN6aqdak2P - EyXGc9SVQkZqqi3HcBiwVkAFeGOnK0LGT+3rLfMjsxm1eRnElLyu/5cl+UqB - /GdqcZydrkGSgoNgpquFvSGgtdIEY1QraSDoWosbuT5Fp7/gtHoV0JuYZu0F - 6Cdv5VVM68Z+P99/LnTQHc6HZ3pEzZ/gqxxHjpknNqm1ynE3jEN/O2gLby19 - +vn373/8iL3nNdDUyvQo8doN9CXtwkqLFZx+V6Nm74jGEqINLWPcnQSDP4fN - fN0rnrsEFZh4XIG1k4GeR6RxVAB38fN+AWXpgXiiElTBAaq6H+eZUgKoXKUF - FcaRpAHQ0wf0guRU97PaqieQ6dPmqjxYhLdfXpNxmW7W8cV269qtHHeSTRpv - t3ESdR/dZUGjpCVlv3FDsVqG775Z1Fz7ZFZK2jKNkTPMhDPsEahGbnKxnoBb - abdvN7uJazUttXz4fJroJ+nplKUSbbjDDYRXdAek0SItra3NbRRRg03anGea - cukuTlfx59g5o5oeXe9+rACrlT0KtVPRHv0/r+XuHuSeayUd4M5QyTJ1QJo0 - 2O+6nYaaInf6pFwB+t9eUwIVtsQTQ/ogn6R6lkk0knkQg4zbk95/dqpGY+Kw - CneNcCRuhHqpGUaBY6c47U7Qkaw7Lz1qJUaIXtCFz5gGmyEOM/l0wkyk0+aq - CuK0VOaQuu3m0j5OijV5y7pPW59kHtRI/lcD3U1CMUaeYy/WKS2urq43N8XV - TREX7HLLvsmLPEZBsbnaZgWW4uJSb3kPslLEsKeFmzboO0Y5vWnds4aUHMtS - HyeMYZi2LQLQUJdAdz2RmqOiqt9J1wf8YOHV91SLWHoS+YAajMBQ+d/2LyJX - +xgy04fHHXXEc4zCzgYprTkeaS73DkcvPR4kXZR8jxQ0zJuazOSa14u8aqQf - OlpLGkmNc1wxgtSFuHgGesALJB5L2yAWj/xiHzcoCM6EAClk3LTlHdSBt6L6 - elvoTkvPGuwn87NNjSLhcm9i9GuhhAe9nxX4SJUg0s9KcNYYLOlO4Fmr3rsJ - VwAszSa3t3omPqUzLcYia7TxxJeBxeed6dvWRBVO0Ig1h7efYmb/BbwTDgfn - NLZrHT6Ge0FguSLXCxls8jxAijEtC747z+vGQqg+ujlDuETu1vhXiJutvs88 - uj6TREugKfsZOTolSWMCtAh621ZLmd6yNfAqW2JfIXjHXPEBHr1Q04hNOkj6 - 4W8AAAD//wMA7EFoN2wSAAA= + H4sIAKKBklgAA+RYS2/jNhC+768IfGckP7JxFoq2PbRADy3a7qYoegkocWSx + oUiVpBy7v75DUZKliEpy6KFAgRysmY9DzoMzH5N8PlXi6gjacCXvV+vreHUF + MleMy8P96uHr92S/+px+SKym0tDcIir9cHWVcJb+eXum2+ppl0T44WTGUtuY + lDa2VJr/DSyJOpHT2nMNqaECkqj96WR5ozXudibcKIKbQvrdw69JNBc7MK1U + I226jq/jOIm6L6eoQOcllZbQPHdCgucxFqpMCfvYGgwh2hM3GQnoriQX9yur + G1hFfgeK9vS7oEozRAYUuQZqgRFqr5z/9yuGn5ZXsEo38fqWxBv8+xrHn3a3 + nzZ3f2AUhgXt+qZm716/jXH9ZUEXa2MVeuA+fAI3H7c327vbfZ9AlBZcG0sk + reDl+VEp6LIuV1VN5TmggYpyEZA/Q2a4DdmqSyVD8oKeZlGNxm4lGRcCC3dw + MWTk3/fQWA2ARcGYBmNCIThZkMylYhEiVE4FtyHzGg5460JxUni9hL8gd7t1 + fJtEY1F/bCxUfV72yqvdCkJFXdLNu1Dbt1CywaTwfJ6wUY7QtaKRLHRbBo3p + qp1qTc8TJcZz1JVCRmqqLcdwGLBWQAV4Y6crQsYv7est8yOzGbV5GcSUvK7/ + lyX5SoH8Z2pxnJ2uQZKCg2Cmq4WjIaC10gRjVCtpIOhaixu5PkWnP+K0ehXQ + m5hm7QXoB2/lVUzrxvE4338udNADzodnekbNn+CrHEeOmSc2qbXKcTeMQ387 + aAtvLf1y8+Xnj79j73kNNLUyPco6dgN9Sbuw0mIFp9/WqDk6orGEaEPLGHcn + weDPYTNfj4rnLkEFJh5XYO1koOcRaRwVwF38vF9AWXoinqgEVXCCqu7HeaaU + ACpXaUGFcSRpAPT0Ab0gOdX9rLbqCWR6V23s1iK8/fKajMt0F683+71rt3Lc + SXbper9fJ1H30V0WNEpaUvYbNxSrZfjum0XNtU9mpaQt0/UmiWbCGfYMVCM3 + 2cQTcCvt9u1mN3GtpqWWD18uE/0ivZyyVKINd7iB8IoegDRapKW1tfkURdRg + kzbXmaZcuovTVfw1ds6opmfXux8rwGplj0IdVHRE/69refgM8si1kg5wb6hk + mTohTRrsd91OQ02RO/2kXAH6315TAhW2xBND+iCfpHqWSTSSeRCDjNuL3n92 + qkZj4rAKD41wJG6EeqkZRoFjpzjtLtCRrDsvPWslRohe0IXPmAabIQ4z+XTB + TKTT5qoK4rRU5pC67ebSPk6KNXnLui9bX2Qe1Ej+VwPdTUIxRp5jL9YpLW5u + bnd3xc1dsS7Yds8+5kW+RkGxu9lnBZbi4lJv+QiyUsSwp4WbNug7Rjm9ad2z + hpQcy1KfJ4xhmLYtAtBQl0B3PZGao6Kq30n3B/xg4dX3VItYehL5gBqMwFD5 + 3/QvIlf7GDLTh8cddcRzjMLOBimtOR5pLvcORy89HiRdlHyPFDTMm5rM5JrX + i7xqpB86WksaSY1zXDGC1IW4eAZ6wAskHkvbIBaP/GIfNygIzoQAKWTctOUd + 1IG3ovp6W+hOS88a7Cfzs02NIuFyb2L0a6GEB72fFfhIlSDSL0pw1hgs6U7g + Was+uglXACzNJre3eiY+pTMtxiJrtPHEl4HF553p29ZEFU7QiDWHt59iZv8L + eCccTs5pbNc6fAz3gsByRa4XMtjkeYAUY1oWfHee142FUH10c4Zwidyt8a8Q + N1t9n3l0fSaJlkBT9jNydEqSxgRoEfS2rZYyvWVr4FW2xL5C8I654gM8eqGm + EZt0kPTDPwAAAP//AwBYVunXbBIAAA== http_version: - recorded_at: Tue, 10 Jan 2017 17:34:39 GMT + recorded_at: Thu, 02 Feb 2017 00:47:30 GMT recorded_with: VCR 3.0.3 diff --git a/spec/fixtures/cassettes/gateway/authorize/paypal/EUR.yml b/spec/fixtures/cassettes/gateway/authorize/paypal/EUR.yml index 601d5eed..bd8a81c2 100644 --- a/spec/fixtures/cassettes/gateway/authorize/paypal/EUR.yml +++ b/spec/fixtures/cassettes/gateway/authorize/paypal/EUR.yml @@ -26,7 +26,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.69.1 + - Braintree Ruby Gem 2.72.0 X-Apiversion: - '4' Authorization: @@ -39,7 +39,7 @@ http_interactions: message: Created headers: Date: - - Tue, 10 Jan 2017 17:34:39 GMT + - Thu, 02 Feb 2017 00:47:31 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -60,49 +60,49 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"860690d92af64c505acd7ca848b69ff4" + - W/"d5ecc7a34c40ccbfabe60d3c8300e050" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 45e56308-c113-4062-8268-d0ebc779b9e0 + - 82e92991-8e17-420d-b444-4902f47f1d8c X-Runtime: - - '0.441603' + - '0.542590' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAC8bdVgAA+RYTXOkNhC9769wzV0G7PF67MI4OWRTSVX2kLVzyMUlUDPI - BolIYjyTX78tBAwMwnaqckhVbkP3U0v9oe6nie/3VXm2A6W5FHer6DxcnYHI - JONie7d6fPhCNqv75FNsFBWaZgZRyaezs5izhBWHNcvWz3GAH1amDTWNTmhj - Cqn438DioBNZrTnUkGhaQhy0P60sa5TC3Q6Ea0lwU0h+evw9DuZiC6aVbIRJ - ovA8DOOg+7KKClRWUGEIzTIrJHgebaBKZWmeWoM+RHviJiUe3Zng5d3KqAZW - gduBoj31IahUDJEeRaaAGmCEmjPr/92K4afhFaySizC6JmFEovAhur69XN9e - 3vyJURgWtOubmv2z9ccFXay1keiB/XAJvPocXl3ehJs+gSjNudKGCFrB6flR - WdJlXSarmoqDRwMV5aVH/gqp5sZnqy6k8Mlzup9FNRi7Fae8LLFwBxd9Rv59 - D7VRAFgUjCnQ2heCvQHBbCoWIaXMaMmNz7yCLd46X5wkXq/SXZCbdRRex8FY - 1B8bC1Udlr1yaruC0LIu6MWHUJfvoUSDSeHZPGGjHKFreSOY77YMGt1VO1WK - HiZKjOeoK/mM1FQZjuHQYEwJFeCNna7wGT+2r/fMj8ym1GSFF1Pwuv5fluQb - BfKfqcVxdroGSXIOJdNdLew0AaWkIhijWgoNXtda3Mj1KTr5DafVm4DexDRr - J6BfnJU3Ma0bu918/7nQQrc4H17pATXP4KocR46eJzaulcxwN4xDfztoC28t - /bz+8vXhV+w9b4GmVqZHiUI70Je0CysNVnDyY42anSUaS4g2tIxxexIM/hw2 - 83UneWYTlGPicQXWTgpqHpHGUgHcxc37BZShe+KIilcFe6jqfpynUpZAxSrJ - aaktSRoAPX1AL0hGVT+rjXwBkTyvd5scOZj7cpqUi2QdRhebjW23YtxJ1km0 - 2URx0H10lwWNkpaU/cE1xWoZvvtmUXPlkllJYYokuoiDmXCGPQBVyE0uwgm4 - lXb7drOb2FbTUsvHb8eJfpQeT1nIsg23v4Hwim6BNKpMCmNqfRsEVGOT1uep - olzYi9NV/Dl2zqCmB9u7nyrAamVPpdzKYIf+n9diew9ix5UUFnCnqWCp3CNN - Gux33U5BTZE7fZW2AN1vpymAlqbAE0PyKF6EfBVxMJI5EIOUm6PefXaqRmHi - sAq3TWlJ3Ah1qhlGgWWnOO2O0JGsOy89KFmOEL2gC5/WDTZDHGbi5YiZSKfN - VebEaqnIILHbzaV9nCRrspZ1H7c+yhyoEfyvBrqbhGKMPMderBKaX11dr2/y - q5s8ytnlhn3O8ixCQb6+2qQ5luLiUmd5B6KSRLOXhZs26DtGOb1p3bOGFBzL - Uh0mjGGYti0C0FCXQHs9kZqjoqo/SNcH/GDhzfdUi1h6ErmAaozAUPk/9C8i - W/sYMt2Hxx51xHO0xM4GCa05Hmkudw4Hpx4Pki5KrkeW1M+bmlRniteLvGqk - HzpaSxpJjXNcMoLUhdh4enrACRKPpYwXi0c+2ccOCoIzwUMKGddteXt14KzI - vt4WutPSswb7yfxsU6NIuOybGP1aKOFB72YFPlIFlMk3WXLWaCzpTuBYq9rZ - CZcDLM0mu7d8JS6lMy3GIm2UdsSXgcHnne7b1kTlT9CINfu3n2Jm/wV8EA57 - 6zS2a+U/hn1BYLki1/MZbLLMQ4oxLQu+W8/rxoCvPro5Q7hA7ta4V4idra7P - PNk+EwdLoCn7GTk6JUljArQIet9WS5neszXwKlNgXyF4x2zxAR49l9OITTpI - 8uk7AAAA//8DAE4hUrtsEgAA + H4sIAKOBklgAA+RYQW/rNgy+91cUuau207RNC9fdDhuww3bYe30D3qWQLTrW + akueJKfJfv0oy3bsWG572GHAgB5i8hNFUhT5qfHToSov96A0l+JxFV2Fq0sQ + mWRc7B5Xz19/JtvVU3IRG0WFpplBVHJxeRlzlmyz24Lq/W0c4IeVaUNNoxPa + mEIq/jewOOhEVmuONSSalhAH7U8ryxqlcLcj4VoS3BSSn55/j4O52IJpJRth + kii8CsM46L6sogKVFVQYQrPMCgn6ow1UqSzNS2vQh2g9blLi0V0KXj6ujGpg + FbgdKNpTn4JKxRDpUWQKqAFGqLm08T+uGH4aXsEqWYfRHQnX+Pc1DB82dw/X + 4XfMwrCgXd/U7PPrI1x/WtDlWhuJEdgPd4A3d/fr8Hq97g8QpTlX2hBBKzj3 + H5UlXdZlsqqpOHo0UFFeeuRvkGpufLbqQgqfPKeHWVaDcVhxyssSC3cI0Wfk + 349QGwWARcGYAq19KTgYEMwexSKklBktufGZV7DDW+fLk8TrVboLcr+Jwrs4 + GIt6t7FQ1XE5Kqe2Kwgt64KuP4W6/gglGjwUns0PbHRGGFreCOa7LYNGd9VO + laLHiRLzOepKPiM1VYZjOjQYU0IFeGOnK3zGT+3rI/Mjsyk1WeHFFLyu/5cl + +U6B/GdqcXw6XYMkOYeS6a4W9pqAUlIRzFEthQZvaC1uFPoUnfyK0+pdQG9i + empnoF+clXcxbRj7/Xz/udBCdzgf3ugRNX+Cq3IcOXp+sHGtZIa7YR7620Fb + eGvp+x/30QYn8rugqZWpK1EYTpbPHfXoDFZw8mONmr0lGkuINrWMcesJJn8O + m8W6lzyzB5TjweMKrJ0U1DwjjaUCuIub9wsoQw/EERWvCg5Q1f04T6UsgYpV + ktNSW5I0AHr6gFGQjKp+Vhv5CiJ5Zex4u0F4++U0KRfJJozW261tt2LcSTZJ + tN1GcdB9dJcFjZKWlH3jmmK1DN99s6i5codZSWGKJELOMBPOsEegCrnJOpyA + W2m3bze7iW01LbV8/nKa6CfpyctClm26/Q2EV3QHpFFlUhhT64cgoBqbtL5K + FeXCXpyu4q+wcwY1Pdre/VIBVit7KeVOBnuM/6oWuycQe66ksIBHTQVL5QFp + 0mC/63YKaorc6TdpC9D9dpoCaGkK9BiSZ/Eq5JuIg5HMgRik3Jz07rNTNQoP + Dqtw15SWxI1Q55phFFh2itPuBB3JOn/pUclyhOgFXfq0brAZ4jATryfMRDpt + rjInVktFBondbi7t8yRZk7Ws+7T1SeZAjeB/NdDdJBRj5jn2YpXQ/ObmbnOf + 39znUc6ut+w2y7MIBfnmZpvmWIqLS53lPYhKEs1eF27aoO8Y5fSmdc8aUnAs + S3WcMIZh2rYIQEPdAdrridQcFVX9Sbo/4AcL776nWsTSk8glVGMGhsr/oX8R + 2drHlOk+PdbVEc/REjsbJLTm6NJc7gIOziMeJF2WXI8sqZ83NanOFK8XedVI + P3S0ljSSGue4ZASpC7H59PSAMyS6pYwXiy6f7WMHBcGZ4CGFjOu2vL06cFZk + X28L3WnpWYP9ZO7b1CgSLvsmxrgWSnjQu1mBj1QBZfJFlpw1Gku6EzjWqvZ2 + wuUAS7PJ7i3fiDvSmRZzkTZKO+LLwODzTvdta6LyH9CINfu3n2Jm/wv4JBwO + Nmhs18rvhn1BYLki1/MZbLLMQ4rxWBZit5HXjQFffXRzhnCB3K1xrxA7W12f + ebF9Jg6WQFP2Mwp0SpLGBGgR9LGtljJ9ZGvgVabAvkLwjtniA3Q9l9OMTTpI + cvEPAAAA//8DAOkZ2SRsEgAA http_version: - recorded_at: Tue, 10 Jan 2017 17:34:39 GMT + recorded_at: Thu, 02 Feb 2017 00:47:31 GMT recorded_with: VCR 3.0.3 diff --git a/spec/fixtures/cassettes/gateway/cancel/missing.yml b/spec/fixtures/cassettes/gateway/cancel/missing.yml index 09abdd9f..9f63b102 100644 --- a/spec/fixtures/cassettes/gateway/cancel/missing.yml +++ b/spec/fixtures/cassettes/gateway/cancel/missing.yml @@ -12,7 +12,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.68.1 + - Braintree Ruby Gem 2.72.0 X-Apiversion: - '4' Authorization: @@ -23,7 +23,7 @@ http_interactions: message: Not Found headers: Date: - - Mon, 24 Oct 2016 23:13:28 GMT + - Thu, 02 Feb 2017 00:47:40 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -44,15 +44,15 @@ http_interactions: Cache-Control: - no-cache X-Request-Id: - - 8e14a304-4186-43d9-8e3d-d34e76389ba0 + - afb03281-7a66-4c91-8ba9-0a4f78fb7d11 X-Runtime: - - '0.024553' + - '0.202375' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAJiVDlgAAwAAAP//AwAAAAAAAAAAAA== + H4sIAKyBklgAAwAAAP//AwAAAAAAAAAAAA== http_version: - recorded_at: Mon, 24 Oct 2016 23:13:26 GMT + recorded_at: Thu, 02 Feb 2017 00:47:40 GMT recorded_with: VCR 3.0.3 diff --git a/spec/fixtures/cassettes/gateway/cancel/refunds.yml b/spec/fixtures/cassettes/gateway/cancel/refunds.yml index 9c0a7682..4bece62e 100644 --- a/spec/fixtures/cassettes/gateway/cancel/refunds.yml +++ b/spec/fixtures/cassettes/gateway/cancel/refunds.yml @@ -21,7 +21,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.68.1 + - Braintree Ruby Gem 2.72.0 X-Apiversion: - '4' Authorization: @@ -34,7 +34,7 @@ http_interactions: message: Created headers: Date: - - Mon, 24 Oct 2016 23:13:24 GMT + - Thu, 02 Feb 2017 00:47:37 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -55,53 +55,53 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"bdbba11b8b1f6912e294c0daa84c3017" + - W/"38a28d1b5757cc85cb63a01837d57816" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - a7269552-dfd0-4554-8856-8ae4daf6751b + - 9171e6bd-0749-49d4-8ecb-9f3b418bc23a X-Runtime: - - '0.360035' + - '0.461382' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAJSVDlgAA+RYTXPjNgy951d4fGdkO95umlGUdqaznR62l0320EuGEmGL - DUVq+eHY/fUFJUqWIipJD+3sTG8W8AgCIAg8Or07VmJxAG24krfL9eVquQBZ - KMbl/nb5cP+JXC/vsovUaioNLSyisovFIuUsK799KMyWFWmCH15mLLXOZMbl - FbcW2ONO6UcD1gqoQNo0CQCPtacaMkMFpEnz08sKpzXufSLcKIIuQPbw5Zc0 - mYo9mFbKSZttV5erVZqEL6+oQBcllZbQovBCgt4ZC1WuBLoQ0za+u5xEdAvJ - xe3SagfLpLVO0ZZ+F1RphsiIotBAMT2E2oWP/XbJ8NPyCpbZZrX+gaxXZLO9 - 31zdrK9uNts/MAP9gma9q9k/W39eEPJsrMII/EdzlC89ROGOa2OJpBVElILO - 6wpV1VSeIhqoKBcR+TPkhtuYrbpUMibf0eMkqckwqjTnQmAF/8cRGqsBsCYY - 02BMLAVHC5L5k5iFCFVQwW3MvIY9Xr9YnhTeLNHejR+369XHNBmKOrexTvVp - PqpW7VcQKuqSbt6FunoLJR0eCi+mBzY4Iwxt5ySLXZZeY0KxU63paaTEfA7a - U8xITbXlmI5zM3qxImacOlsqzf962/zAbE5tUUYxJa/r/2VJvlIg300tDk8n - 9Eey4yCYCbVwMAS0VppgjmolDURDa3CD0Mfo7DMOqlcBnYnxqb0A/dZaeRXT - hHE4TPefCj10j+PhmZ5Q8ye0VY4Tx0wPNq21KnA3zEN3O2gDbyx9+Pzx0/2v - 2HteA42tjF1Zr/wsn9POrLRYwdnPNWoOwKKrG0STWsa49wSTP4VNYj0oXvgD - 2uHB4wqsnRz0NCPOMwHcpR33MyhLj6TlKFEVHKGqu2meKyWAymW2o8J4ftQD - OvaAUZCCahZK3KoniN3BnEvkR+vN9bVvtnLYR7bZ+vp6nSbhI1wVNEkaNvaV - G4q10n93raLmuj3KSklbZutNmkyEE+wJqEZislmNwI007BsmN/GNpmGYD1/O - 8/wsPXtZKtEkO94+eEX3QJwWWWltbW6ShBps0eYy15RLf21CvV9i30xqevKd - +7ECrFX2KNReJQeM/7KW+zuQB66V9IBbQyXL1RHpbm8/9DoNNUUe+bvy5df+ - bjUlUGFL9BiprHyS6lmmyUDWghjk3J717WdQOY0HhzW4d8IzuAHqpaYfBJ6a - 4qw7Qwey4C89aSUGiE4Q0meMw1aIo0w+nTEj6bi1qh3xWioLyPx2U2mXJ8Vc - 0VDu89ZnWQtykn9zEO4RijHzHDvx5Er5CwqyUsSwp5mL0+sDQRxfnPBcISXH - OtOnEQHoh2eDADQUTsTfNiTaqKjqd5LvHt9bCM+gM78YvowaxNzjps2QQZLb - l/JP3dvGFzNSfdPxeu/qgLYYhY0KMlpzdGkqbwNOphH/y0l4z2Px+0pJLwmF - 004BQePM0OWm0LyeZY4Dfd+1G1pMamQqihEkZ8RnN9rfR0h0S9soFl1+sY8f - hQSnXoT2Mm6aKxzVQWtFda17pgPPPdywZ059GxtFSukf/BjXzK3u9e00xFe4 - hKlVPPODH987gLnB67dVz6Q9zYkW05A7bVpWz8Di29V0XXmkip/N4EkQ336M - mfzH8U44HH0CcBrpuBv+eYSVikQ2ZtAVRYTx44nMxO4jr52FWGmEMUq4RGLq - 2ieWpw5t1330XTdN5kBjajcIdMwAh+xuFvS2rYYPvmWrJ422xJZC8Hr5ugN0 - fafGGRs1j+zibwAAAP//AwAGWiAVUhMAAA== + H4sIAKmBklgAA+RYTW/zNgy+91cEuatO0gLtCtfdhmHYgG2X9+2A7VLIFhNr + lSVPH2myXz/Klr9que0OG15gQA8x+YgiKYp81PThVInVEbThSt6vt5eb9Qpk + oRiXh/v14+fvye36IbtIrabS0MIiKrtYrVLOstowkFe6ShP88DJjqXUmMy6v + uLXAnvZKPxmwVkAF0qZJAHisPdeQGSogTZqfXlY4rXHvM+FGEXQBssdP36XJ + XOzBtFJO2ux6c7nZpEn48ooKdFFSaQktCi8k6J2xUOVKoAsxbeO7y0lEt5Jc + 3K+tdrBOWusUbekPQZVmiIwoCg0U00OoXfnY79cMPy2vYJ3tNtsbstnh3+fN + 5u765u7q5nfMQL+gWe9q9s/WDwtCno1VGIH/aI7ytYco3HNtLJG0gohS0GVd + oaqaynNEAxXlIiJ/gdxwG7NVl0rG5Ht6miU1GUeV5lwIrOD/OEJjNQDWBGMa + jIml4GRBMn8SixChCiq4jZnXcMDrF8uTwpsl2rvx1fV2c5MmY1HnNtapPi9H + 1ar9CkJFXdLdh1BX76Gkw0PhxfzARmeEoe2dZLHL0mtMKHaqNT1PlJjPUXuK + GampthzTMTSjVytixqmzpdL8r/fNj8zm1BZlFFPyuv5fluQbBfLF1OL4dEJ/ + JHsOgplQC0dDQGulCeaoVtJANLQGNwp9is5+xkH1JqAzMT21V6AfWytvYpow + jsf5/nOhhx5wPLzQM2r+gLbKceKY+cGmtVYF7oZ56G4HbeCNpZ9++G179S32 + nrdAUytTV7YbP8uXtAsrLVZw9k2NmiOw6OoG0aSWMe49weTPYbNYj4oX/oD2 + ePC4AmsnBz3PiPNMAHdpx/0CytITaTlKVAUnqOpumudKCaByne2pMJ4f9YCO + PWAUpKCahRK36hlidzDnEvnRdnd765utHPeR62x7e7tNk/ARrgqaJA0b+5Ub + irXSf3etoua6PcpKSVtm212azIQz7BmoRmKy20zAjTTsGyY38Y2mYZiPn4Z5 + PkgHL0slmmTH2wev6AGI0yIrra3NXZJQgy3aXOaacumvTaj3S+ybSU3PvnM/ + VYC1yp6EOqjkiPFf1vLwAPLItZIecG+oZLk6Id3t7Ydep6GmyCN/Ub782t+t + pgQqbIkeI5WVz1K9yDQZyVoQg5zbQd9+BpXTeHBYgwcnPIMboV5r+kHgqSnO + ugE6kgV/6VkrMUJ0gpA+Yxy2Qhxl8nnATKTT1qr2xGupLCDz282lXZ4Uc0VD + uYetB1kLcpL/6SDcIxRj5jl24tmV8hcUZKWIYc8LF6fXB4I4vTjhuUJKjnWm + zxMC0A/PBgFoKJyIv21ItFFR1R8k3z2+txCeQQO/GL+MGsTS46bNkEGS25fy + 193bxhczUn3T8Xrv6oi2GIWNCjJac3RpLm8DTuYR/8tJ+Mhj8ctKSS8JhdNO + AUHjzNDlptC8XmSOI33ftRtaTGpkKooRJGfEZzfa3ydIdEvbKBZdfrWPH4UE + p16E9jJumisc1UFrRXWte6EDLz3csGfOfZsaRUrpH/wY18Kt7vXtNMRXuIS5 + VTzzox/fe4Clweu3VS+kPc2ZFtOQO21aVs/A4tvVdF15ooqfzehJEN9+ipn9 + j+ODcDj5BOA00nE3/PMIKxWJbMygK4oI48cTWYjdR147C7HSCGOUcInE1LVP + LE8d2q775LtumiyBptRuFOiUAY7Z3SLofVsNH3zPVk8abYktheD18nUH6Ppe + TTM2aR7Zxd8AAAD//wMAl8B4clITAAA= http_version: - recorded_at: Mon, 24 Oct 2016 23:13:23 GMT + recorded_at: Thu, 02 Feb 2017 00:47:37 GMT - request: method: put - uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/transactions/hq5cs4dc/settle + uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/transactions/psden3rm/settle body: encoding: UTF-8 string: '' @@ -111,7 +111,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.68.1 + - Braintree Ruby Gem 2.72.0 X-Apiversion: - '4' Authorization: @@ -124,7 +124,7 @@ http_interactions: message: OK headers: Date: - - Mon, 24 Oct 2016 23:13:26 GMT + - Thu, 02 Feb 2017 00:47:38 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -145,54 +145,54 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"918519a8df59b016065bcea6d41106e9" + - W/"ae39cabf087633fd74bdd017d13d600d" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 9aaf1de7-4eb5-416b-9363-3cf64f1bc2b8 + - cf9a951b-e7c7-486e-a38b-d74c513afda6 X-Runtime: - - '1.916657' + - '0.866141' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAJaVDlgAA+RYS2/jNhC+51cYvjOyHaebDRSlBYotethedtNDLwYlji02 - EqklKcfur+9QpF4RlbiHFkV7s2Y+DjnDeXx0/Hgqi8URlOZSPCzX16vlAkQm - GReHh+XT10/kbvmYXMVGUaFpZhCVXC0WMWdJ/u0201uWxRF+WJk21NQ60WBM - ASyO/LdVmXMFiaYFxFHz08qyWinc6ky4lgR3hOTpy49xNBVbMC1lLUyyXV2v - VnHkv6yiBJXlVBhCs8wKCR5GGyhTWZg4Cmmbo9YpCegWghcPS6NqWEbOOkVb - 6iKoVAyRAUWmgBpghJqF9f1hyfDT8BKWyWa1/o6sV2Sz/bq5uV/f3G+2v2EE - ugXN+rpil6+/xfX9Ah9nbSR6YD+am3t9QhTuudKGCFpCQFnQeV0my4qKc0AD - JeVFQP4CqeYmZKvKpQjJ9/Q0CWo09CpOeVFgwv7DHmqjADAnGFOgdSgEJwOC - 2ZuYhRQyowU3IfMKDlhtoThJrKzC1cbH7Xr1IY6GovbYmKfqPO+VU9sVhBZV - TjcXoW7eQ4kaL4Vn0wsb3BG6tq8FCxVLp9E+2alS9DxSYjwH3ShkpKLKcAyH - 60QlYMGOV4SM09rkUvE/3jc/MJtSk+W2qfSVuGu7z+4jtsAAtDGR86r6X2bs - G/nzr0nV4e349kn2HAqmfaocNQGlpCIYo0oKDUHXGtzA9TE6+Yxz7E1Aa2J8 - a69APzsrb2IaN47H6f5ToYUecHq80DNqfgdXBDiQ9PRi40rJDHfDOLTFQxt4 - Y+n284dPX3/C1vQWaGxlfJT1yo76Oe3MSoMZnPxQoeZoKcgcogktY9yeBIM/ - hU18PUqe2Qva48XjCsydFNQ0IrUlCriLYwMzKENPxFGYoApOUFbtsE+lLICK - ZbKnhbb0qQO05AK9IBlVzKe4kc8QqsGUC6RP683dne3FYthHtsn67m4dR/7D - lwqaJA1Z+5VrirnSfbetouLKXWUphcmT9SaOJsIJ9gxUYbfcrEbgRur39YOd - 2EbT8M2nL/2476X9KXNZNMEOtw9e0gOQWhVJbkyl76OIamzL+jpVlAtbNj7f - r7FvRhU92269KwFzle0KeZDREf2/rsThEcSRKyks4EFTwVJ5QvLb2fe9TkFF - sc3/Im36ud9OkwMtTI4nRqYrnoV8EXE0kDkQg5SbXu8+vapWeHGYg4e6sARv - gHqt6QaBZa44CnvoQObPS89KFgNEK/Dh07rGVojjSzz3mJF03FrlnlgtFRkk - druptI2TZHXWMPJ+617mQLXg32rwdYRijDzHTjwpKVugIEpJNHueKZxO7/nj - uHD844XkHPNMnUf8oBueDQLQkL8RW23Iw1FRVhdy+w7fWfCvpJ5+DB9ODWLu - 7eMipJEDd6n8fUs+bDLjS0C3tN8edcBqtMRGBQmtOB5pKncOR1OP/+Yg4LOs - 5AYTeLeXateTp/92SG7fDMn0NX1ZBKYlEnb4r3jbSXyZuJlX0DBNrlOdKV7N - 0uiBvptRzRuBVMjLJCNIRYkNXHCajZB4LGWCWDzyq33s4Cc44wNvAMZ107CC - OnBWZDuoZubN3CsWJ8T0bGOjSKDtvx/o10wP6/Ru9udUCJhaxcs/WrKyB5ij - GXZb+ULcbU60GIa0Vtq9WxgYfMjrdgaNVOG7GTx6wtuPMZM/fC6Ew8kGAGev - Ch/DvhUxU5G2hwzWWRZ43+CNzPhuPa9qA6HU8KSBcIE0vHbvTUuU3IzZ2RkT - R3OgMZEdODrmu0MuOwt631bDft+z1VFkk2MDJVheNu8Aj76X44iNmkdy9ScA - AAD//wMAQNDnJE4UAAA= + H4sIAKqBklgAA+RY32/7NBB/318x9d1L201ambIMEEIgAS/f75DgpXLia2Pm + 2MZ2upa/nnPipMnibOUBhEDaw3L38dl3vh8fN306VuL6AMZyJR8Xq5vl4hpk + oRiX+8fF8+dvyWbxlF2lzlBpaeEQlV1dX6ecZdoykLemShP88DLrqKttZsE5 + ASxNwrdXuZOGzFIBadL862VFbQxudSLcKoI7Qvb86Zs0mYo9mFaqli67W94s + l2kSvryiAlOUVDpCi8ILCR7GOqhyJVyaxLTNUeucRHTXkovHhTM1LJLWOkVb + 5iKoMgyREUVhgDpghLpr7/vjguGn4xUssvVydU+Wa/z7vFw+3N0/3N7/ihHo + FzTra80uX7/B9ecFIc7WKfTAfzQ39/aEKNxxYx2RtIKIUtB5XaEqTeUpooGK + chGRv0JuuYvZ0qWSMfmOHidBTYZepTkXAhP2H/bQOgOAOcGYAWtjITg6kMzf + xCxEqIIK7mLmDeyx2mJxUlhZoq2NL+5Wy/s0GYq6Y2OemtO8V63aryBU6JKu + L0LdfoSSNV4KL6YXNrgjdG1XSxYrll5jQ7JTY+hppMR4DrpRzIimxnEMR9uJ + KsCCHa+IGae1K5Xhf3xsfmA2p64ofVPpK3G17brPdoWdKoZtbJRc6/9lyr6T + QP+aXB3eTuifZMdBMBty5WAJGKMMwRhpJS1EXWtwA9fH6OxHHGTvAjoT41t7 + A/q+tfIupnHjcJjuPxV66B7Hxys9oeY3aKsAJ5KdXmyqjSpwN4xDVz20gTeW + fvjul9Xt19ib3gONrYyPslr6WT+nnVnpMIOzrzRqDp6DzCGa0DLG/Ukw+FPY + xNeD4oW/oB1ePK7A3MnBTCNSe6aAu7R0YAbl6JG0HCaqgiNUupv2uVICqFxk + Oyqs5089oGMX6AUpqGEhxZ16gVgN5lwif1qtNxvfjOWwj9xlq81mlSbhI5QK + miQNW/uZW4q50n93rUJz015lpaQrs9U6TSbCCfYE1GC7XC9H4EYa9g2TnfhG + 0xDO50/neX+Wnk9ZKtEEO94+eEX3QGojstI5bR+ShFpsy/YmN5RLXzYh32+w + byaanny33laAucq2Qu1VckD/b7TcP4E8cKOkBzxaKlmujsh+e/uh1xnQFNv8 + T8qnX/t/qymBClfiiZHqyhepXmWaDGQtiEHO3VnffgZVbfDiMAf3tfAMb4B6 + q+kHgaeuOAvP0IEsnJeejBIDRCcI4bO2xlaI40u+nDEj6bi1qh3xWioLyPx2 + U2kXJ8XqoqHk563PshZUS/57DaGOUIyR59iJJyXlCxRkpYhlLzOF0+sDgRwX + Tni9kJJjnpnTiCD0w7NBABoKN+KrDYk4Kip9Ibnv8b2F8Ew684/hy6lBzD1+ + 2ghZJMF9Kn/ZsQ+fzPgUsB3v90cd0BqrsFFBRjXHI03lrcPJ1OO/OQj4Lqu4 + wwTe7pTZnsnTfzskm3dDMn1OXxaBaYnEHf4r3vaSUCbtzBM0zpPr3BaG61ke + PdD3M6p5JBCNvEwxglSU+MBFp9kIiccyLorFI7/Zxw9+gjM+8ghg3DYNK6qD + 1orqBtXMvJl7xuKEmJ5tbBQJtP/5A/2a6WG9vp39JZUSplbx8g+erOwA5miG + 31a9kvY2J1oMQ14b275bGDh8ydtuBo1U8bsZPHri248xk198LoTD0QcAZ6+J + H8M/FjFTkbbHDNZFEXnf4I3M+O4917WDWGoE0kC4RBpetw9OT5TaGbP1MyZN + 5kBjIjtwdMx3h1x2FvSxrYb9fmSrp8iuxAZKsLx83gEefafGERs1j+zqTwAA + AP//AwDmg3A4TxQAAA== http_version: - recorded_at: Mon, 24 Oct 2016 23:13:25 GMT + recorded_at: Thu, 02 Feb 2017 00:47:38 GMT - request: method: get - uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/transactions/hq5cs4dc + uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/transactions/psden3rm body: encoding: US-ASCII string: '' @@ -202,7 +202,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.68.1 + - Braintree Ruby Gem 2.72.0 X-Apiversion: - '4' Authorization: @@ -213,7 +213,7 @@ http_interactions: message: OK headers: Date: - - Mon, 24 Oct 2016 23:13:27 GMT + - Thu, 02 Feb 2017 00:47:39 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -234,54 +234,54 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"fe6c3403f08acc32ffc450257fc58ecc" + - W/"2ea5e2bfcfe4e46f4039e57ab28a82d2" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - d296015c-e275-473f-8761-d015d438b547 + - 04e3c0b3-6d1a-4272-b865-9eed4d1bb71a X-Runtime: - - '0.180631' + - '0.133803' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAJeVDlgAA+RYS2/jNhC+51cYvjOyHaebDRSlBYotethedtNDLwYlji02 - EqklKcfur+9QpF4RlbiHFkV7s2Y+DjnDeXx0/Hgqi8URlOZSPCzX16vlAkQm - GReHh+XT10/kbvmYXMVGUaFpZhCVXC0WMWdJ/u0201uWxRF+WJk21NQ60WBM - ASyO/LdVmXMFiaYFxFHz08qyWinc6ky4lgR3hOTpy49xNBVbMC1lLUyyXV2v - VnHkv6yiBJXlVBhCs8wKCR5GGyhTWZg4Cmmbo9YpCegWghcPS6NqWEbOOkVb - 6iKoVAyRAUWmgBpghJqF9f1hyfDT8BKWyWa1/o6sV2Sz/bq5uV/f3G+2v2EE - ugXN+rpil6+/xfX9Ah9nbSR6YD+am3t9QhTuudKGCFpCQFnQeV0my4qKc0AD - JeVFQP4CqeYmZKvKpQjJ9/Q0CWo09CpOeVFgwv7DHmqjADAnGFOgdSgEJwOC - 2ZuYhRQyowU3IfMKDlhtoThJrKzC1cbH7Xr1IY6GovbYmKfqPO+VU9sVhBZV - TjcXoW7eQ4kaL4Vn0wsb3BG6tq8FCxVLp9E+2alS9DxSYjwH3ShkpKLKcAyH - 60QlYMGOV4SM09rkUvE/3jc/MJtSk+W2qfSVuGu7z+4jtsAAtDGR86r6X2bs - G/nzr0nV4e349kn2HAqmfaocNQGlpCIYo0oKDUHXGtzA9TE6+Yxz7E1Aa2J8 - a69APzsrb2IaN47H6f5ToYUecHq80DNqfgdXBDiQ9PRi40rJDHfDOLTFQxt4 - Y+n284dPX3/C1vQWaGxlfJT1yo76Oe3MSoMZnPxQoeZoKcgcogktY9yeBIM/ - hU18PUqe2Qva48XjCsydFNQ0IrUlCriLYwMzKENPxFGYoApOUFbtsE+lLICK - ZbKnhbb0qQO05AK9IBlVzKe4kc8QqsGUC6RP683dne3FYthHtsn67m4dR/7D - lwqaJA1Z+5VrirnSfbetouLKXWUphcmT9SaOJsIJ9gxUYbfcrEbgRur39YOd - 2EbT8M2nL/2476X9KXNZNMEOtw9e0gOQWhVJbkyl76OIamzL+jpVlAtbNj7f - r7FvRhU92269KwFzle0KeZDREf2/rsThEcSRKyks4EFTwVJ5QvLb2fe9TkFF - sc3/Im36ud9OkwMtTI4nRqYrnoV8EXE0kDkQg5SbXu8+vapWeHGYg4e6sARv - gHqt6QaBZa44CnvoQObPS89KFgNEK/Dh07rGVojjSzz3mJF03FrlnlgtFRkk - druptI2TZHXWMPJ+617mQLXg32rwdYRijDzHTjwpKVugIEpJNHueKZxO7/nj - uHD844XkHPNMnUf8oBueDQLQkL8RW23Iw1FRVhdy+w7fWfCvpJ5+DB9ODWLu - 7eMipJEDd6n8fUs+bDLjS0C3tN8edcBqtMRGBQmtOB5pKncOR1OP/+Yg4LOs - 5AYTeLeXateTp/92SG7fDMn0NX1ZBKYlEnb4r3jbSXyZuJlX0DBNrlOdKV7N - 0uiBvptRzRuBVMjLJCNIRYkNXHCajZB4LGWCWDzyq33s4Cc44wNvAMZ107CC - OnBWZDuoZubN3CsWJ8T0bGOjSKDtvx/o10wP6/Ru9udUCJhaxcs/WrKyB5ij - GXZb+ULcbU60GIa0Vtq9WxgYfMjrdgaNVOG7GTx6wtuPMZM/fC6Ew8kGAGev - Ch/DvhUxU5G2hwzWWRZ43+CNzPhuPa9qA6HU8KSBcIE0vHbvTUuU3IzZ2RkT - R3OgMZEdODrmu0MuOwt631bDft+z1VFkk2MDJVheNu8Aj76X44iNmkdy9ScA - AAD//wMAQNDnJE4UAAA= + H4sIAKuBklgAA+RY32/7NBB/318x9d1L201ambIMEEIgAS/f75DgpXLia2Pm + 2MZ2upa/nnPipMnibOUBhEDaw3L38dl3vh8fN306VuL6AMZyJR8Xq5vl4hpk + oRiX+8fF8+dvyWbxlF2lzlBpaeEQlV1dX6ecZdoykLemShP88DLrqKttZsE5 + ASxNwrdXuZOGzFIBadL862VFbQxudSLcKoI7Qvb86Zs0mYo9mFaqli67W94s + l2kSvryiAlOUVDpCi8ILCR7GOqhyJVyaxLTNUeucRHTXkovHhTM1LJLWOkVb + 5iKoMgyREUVhgDpghLpr7/vjguGn4xUssvVydU+Wa/z7vFw+3N0/3N7/ihHo + FzTra80uX7/B9ecFIc7WKfTAfzQ39/aEKNxxYx2RtIKIUtB5XaEqTeUpooGK + chGRv0JuuYvZ0qWSMfmOHidBTYZepTkXAhP2H/bQOgOAOcGYAWtjITg6kMzf + xCxEqIIK7mLmDeyx2mJxUlhZoq2NL+5Wy/s0GYq6Y2OemtO8V63aryBU6JKu + L0LdfoSSNV4KL6YXNrgjdG1XSxYrll5jQ7JTY+hppMR4DrpRzIimxnEMR9uJ + KsCCHa+IGae1K5Xhf3xsfmA2p64ofVPpK3G17brPdoWdKoZtbJRc6/9lyr6T + QP+aXB3eTuifZMdBMBty5WAJGKMMwRhpJS1EXWtwA9fH6OxHHGTvAjoT41t7 + A/q+tfIupnHjcJjuPxV66B7Hxys9oeY3aKsAJ5KdXmyqjSpwN4xDVz20gTeW + fvjul9Xt19ib3gONrYyPslr6WT+nnVnpMIOzrzRqDp6DzCGa0DLG/Ukw+FPY + xNeD4oW/oB1ePK7A3MnBTCNSe6aAu7R0YAbl6JG0HCaqgiNUupv2uVICqFxk + Oyqs5089oGMX6AUpqGEhxZ16gVgN5lwif1qtNxvfjOWwj9xlq81mlSbhI5QK + miQNW/uZW4q50n93rUJz015lpaQrs9U6TSbCCfYE1GC7XC9H4EYa9g2TnfhG + 0xDO50/neX+Wnk9ZKtEEO94+eEX3QGojstI5bR+ShFpsy/YmN5RLXzYh32+w + byaanny33laAucq2Qu1VckD/b7TcP4E8cKOkBzxaKlmujsh+e/uh1xnQFNv8 + T8qnX/t/qymBClfiiZHqyhepXmWaDGQtiEHO3VnffgZVbfDiMAf3tfAMb4B6 + q+kHgaeuOAvP0IEsnJeejBIDRCcI4bO2xlaI40u+nDEj6bi1qh3xWioLyPx2 + U2kXJ8XqoqHk563PshZUS/57DaGOUIyR59iJJyXlCxRkpYhlLzOF0+sDgRwX + Tni9kJJjnpnTiCD0w7NBABoKN+KrDYk4Kip9Ibnv8b2F8Ew684/hy6lBzD1+ + 2ghZJMF9Kn/ZsQ+fzPgUsB3v90cd0BqrsFFBRjXHI03lrcPJ1OO/OQj4Lqu4 + wwTe7pTZnsnTfzskm3dDMn1OXxaBaYnEHf4r3vaSUCbtzBM0zpPr3BaG61ke + PdD3M6p5JBCNvEwxglSU+MBFp9kIiccyLorFI7/Zxw9+gjM+8ghg3DYNK6qD + 1orqBtXMvJl7xuKEmJ5tbBQJtP/5A/2a6WG9vp39JZUSplbx8g+erOwA5miG + 31a9kvY2J1oMQ14b275bGDh8ydtuBo1U8bsZPHri248xk198LoTD0QcAZ6+J + H8M/FjFTkbbHDNZFEXnf4I3M+O4917WDWGoE0kC4RBpetw9OT5TaGbP1MyZN + 5kBjIjtwdMx3h1x2FvSxrYb9fmSrp8iuxAZKsLx83gEefafGERs1j+zqTwAA + AP//AwDmg3A4TxQAAA== http_version: - recorded_at: Mon, 24 Oct 2016 23:13:26 GMT + recorded_at: Thu, 02 Feb 2017 00:47:39 GMT - request: method: post - uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/transactions/hq5cs4dc/refund + uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/transactions/psden3rm/refund body: encoding: UTF-8 string: | @@ -295,7 +295,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.68.1 + - Braintree Ruby Gem 2.72.0 X-Apiversion: - '4' Authorization: @@ -308,7 +308,7 @@ http_interactions: message: Created headers: Date: - - Mon, 24 Oct 2016 23:13:27 GMT + - Thu, 02 Feb 2017 00:47:40 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -329,48 +329,47 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"0d1e02f765c33cfff6e9d64a3214a654" + - W/"fbdbb115fbc07ac0cadc996bf3490d88" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 2966cf1b-ec2a-49ff-b563-9583db311e50 + - 4c34619b-71ac-4eb3-879d-5e9d2f90ce1e X-Runtime: - - '0.283562' + - '0.457229' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAJeVDlgAA+RYS2/jNhC+51cYvjOynLR5QFFaoOixKLCbHvZiUOLYYiOR - Ch+Ovb++Q4l6RVSSvRQFerNmPg5nhsOZj04eT1W5OoLSXIqHdXy5Wa9A5JJx - cXhYP339ndyuH9OLxCgqNM0NotKL1SrhLL15ucvj7893SYQfTqYNNVan2mYV - NwbYbi/VToMxJVQgTBJ5gMOacw1proBxlDcfTppbpXD3M+FaEnQC0qcvvyXR - XOzAtJJWmPR6c7nZJJH/cooKVF5QYQjNcyck6J82UGWyxM1C2sZ7m5GAbiV4 - +bA2ysI6aq1TtKU+BZWKITKgwMApJohQs3KxP6wZfhpewTrdbuKfSbwh2+uv - 26v7+Op+e/MNM9AvaNbbmv3Y+mGBz7M2EiNwH81hvvUQhXuutCGCVhBQlnRZ - l8uqpuIc0EBFeRmQv0KmuQnZqgspQvI9Pc2SGo2jSjJelljD/3KE2igArAnG - FGgdSsHJgGDuJBYhpcxpyU3IvIIDXsBQniTerbK9G3fX8eYmicaizm2sU3Ve - jqpVuxWElnVBt59CXX2EEhYPhefzAxudEYa2t4KFLkuv0b7YqVL0PFFiPkcN - yt3o4uWnXF+zPImWEG51TZXhmKShSb1Bhbak1hRS8e8zkzPPR2YzavIiiCl4 - Xf8vC/WdsvnPVOj4dHzXJHsOJdO+Fo6agFJSEcxRLYWGYGgNbhT6FJ3+iuPr - XUBnYnpqYSvvYpowjsf5yrnQQQ84NF7pGTV/Q1vlOIf0/GCTWskcd8M8dLeD - NvBgMgbwdMd4s9li31rQLqw0WKjpn60cWHB5A2lSyJBuoFuY5Dls5uZR8twd - xB4PGFdgjWSg5sFYxwNwl3bYL6AMPZGWoQRVcIKq7mZ5JmUJVKzTPS01IDvq - AR13wChIThXzpWzkM4TuWsYFsqN4e3vrWq0Y94vrNL69jZPIf/grgSZJw8X+ - 4ppiTfTfXUuouWrPtZLCFGmMxzUTzrBnoAppyXYzATdSv6+f28Q1lIZhPn0Z - pvkgHbwsZNkkO9wmeEUPQKwq08KYWt9HEcXaMPoyU5QLdz18XV9if4xqenYd - elcBFi7blfIgoyPGf1mLwyOII1dSOMCDpoJl8oR0t7fve5qCmuJE+UO68mt/ - t5oCaGkK9BiJrHgW8lUk0UjWghhk3Az69tOrrMKDwxo82NLxtxHqraZv+I6Y - 4kwboCOZ95eelSxHiE7g06e1xZaHI0s8D5iJdNpC5Z44LRU5pG67ubTLk2Q2 - bwj3sPUga0FW8BcL/h6hGDPPsePOrpS7oCAqSTR7Xrg4vd7Tw+nF8c8VUnCs - M3WeDPp+SDYIQEP+RNxtQ5qNiqr+JPXu8b2FH3gnNfilh06bL42Ety/sX7p3 - jittpP264/jO8RFZ0RLbFqS05ujgXN6GH72Nv5f4nLUNsKRh8mMznSteL5Kj - kb5vWA0fJDUOY8kI8g/ishtsbRMkuqVMEIsuv9nHTQGCDT/A7BjXTfUGddBa - kV3XWmg+Sy8WbBdz36ZGkTW5ly7GNX8w4lNTwNwCnu/RTak9wNJ8cVvIV9Ke - 3EyLIWdW6ZakMjD4QNNd85mowucwYrjh7aeY2UP+k3A4uQRg01VhNxzDx6pE - XhYyaPM8QGAx+wuxu8hrayBUBn5aEC6QZ9n2xTD8lbFzzSWJlkBTCjMKdMp0 - xiRmEfSxrYb2fGSr50amwPZB8Cq5GgR0fS+nGZs0ivTiHwAAAP//AwCIhaaJ - ORIAAA== + H4sIAKyBklgAA+RYS2/jNhC+51cYvjOSnaB5QFFaoOixKLCbHnoxKHFscSOR + XD4cu7++Q71lUUn2UhQokEM083E4MxzOfHTyfKrK1RG04VI8rTfX8XoFIpeM + i8PT+uXrb+R+/ZxeJVZTYWhuEZVerVYJZ2n2TT1UP33fJhF+eJmx1DqTGpdV + 3Fpgu73UOwPWllCBsEnUAjzWnhWkuQbGUV5/eGnutMbdz4QbSdAJSF++/JpE + c7EH00o6YdPb+DqOk6j98ooKdF5QYQnNcy8k6J+xUGWyxM1C2tp7l5GAbiV4 + +bS22sE6aqxTtKU/BZWaITKgwMApJohQu/KxP60ZflpewTrdxps7Em/x72sc + P97ePd48/IUZ6BfU651iP7Z+WNDm2ViJEfiP+jAvPUThnmtjiaAVBJQlXdbl + slJUnAMaqCgvA/I3yAy3IVuqkCIk39PTLKnROKok42WJNfwvR2isBsCaYEyD + MaEUnCwI5k9iEVLKnJbchsxrOOAFDOVJ4t0qm7vxcLuJ75JoLOrcxjrV5+Wo + GrVfQWipCrr9FOrmI5RweCg8nx/Y6IwwtL0TLHRZeo1pi51qTc8TJeZz1KD8 + jVaGgbjRVRItIfxqRbXlmKShSV2gQltSZwup+d8zkzPPR2YzavMiiCm4Uv/L + Qn2nbP4zFTo+nbZrkj2Hkpm2Fo6GgNZSE8yRksJAMLQaNwp9ik5/wfH1LqAz + MT21sJV3MXUYx+N85VzooQccGm/0jJpv0FQ5ziEzP9hEaZnjbpiH7nbQGh5M + xgCe7riJYyQTS9qFlRYLNf2jkQMLLq8hdQoZ0g10C5M8h83cPEqe+4PY4wHj + CqyRDPQ8GOd5AO7SDPsFlKUn0jCUoApOUKlulmdSlkDFOt3T0gCyox7QcQeM + guRUs7aUrXyF0F3LuEB2tNne3/tWK8b94jbd3N9vkqj9aK8EmiQ1F/uTG4o1 + 0X93LUFx3ZxrJYUt0g0e10w4w56BaqQl23gCrqXtvu3cJr6h1Azz5cswzQfp + 4GUhyzrZ4TbBK3oA4nSZFtYq8xhFFGvDmutMUy789Wjr+hr7Y6To2XfoXQVY + uGxXyoOMjhj/tRKHZxBHrqXwgCdDBcvkCelub7/taRoUxYnyu/Tl1/zfaAqg + pS3QYySy4lXIN5FEI1kDYpBxO+ibz1blNB4c1uDBlZ6/jVCXmr7he2KKM22A + jmStv/SsZTlCdII2fcY4bHk4ssTrgJlIpy1U7onXUpFD6rebS7s8SebymnAP + Ww+yBuQE/+6gvUcoxsxz7LizK+UvKIhKEsNeFy5Or2/p4fTitM8VUnCsM32e + DPp+SNYIQEPtifjbhjQbFZX6JPXu8b2FH3gn1filh06TL4OEty/sn7t3ji9t + pP2m4/je8RFZMRLbFqRUcXRwLm/Cjy7j7yVtzpoGWNIw+XGZyTVXi+RopO8b + Vs0HicJhLBlB/kF8doOtbYJEt7QNYtHli338FCDY8APMjnFTV29QB40V2XWt + heaz9GLBdjH3bWoUWZN/6WJc8wcjPjUFzC3g+R79lNoDLM0Xv4V8I83JzbQY + cua0aUgqA4sPNNM1n4kqfA4jhhvefoqZPeQ/CYeTTwA2XR12wzN8rErkZSGD + Ls8DBBazvxC7j1w5C6EyaKcF4QJ5lmteDMNPGTvfXJJoCTSlMKNAp0xnTGIW + QR/bqmnPR7Z6bmQLbB8Er5KvQUDX93KasUmjSK/+AQAA//8DAH58Udw5EgAA http_version: - recorded_at: Mon, 24 Oct 2016 23:13:26 GMT + recorded_at: Thu, 02 Feb 2017 00:47:40 GMT recorded_with: VCR 3.0.3 diff --git a/spec/fixtures/cassettes/gateway/cancel/void.yml b/spec/fixtures/cassettes/gateway/cancel/void.yml index 38f81e47..827ad4da 100644 --- a/spec/fixtures/cassettes/gateway/cancel/void.yml +++ b/spec/fixtures/cassettes/gateway/cancel/void.yml @@ -18,7 +18,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.68.1 + - Braintree Ruby Gem 2.72.0 X-Apiversion: - '4' Authorization: @@ -31,7 +31,7 @@ http_interactions: message: Created headers: Date: - - Mon, 24 Oct 2016 23:13:22 GMT + - Thu, 02 Feb 2017 00:47:36 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -52,52 +52,53 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"439a52fe2feca4e9d1937a360d380712" + - W/"0895792842740b84384f234cbacf6daf" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 81b65123-dfbe-41ae-a889-9f4f35beb249 + - ce59c9bf-288c-42af-8b62-fa0ea190d9f9 X-Runtime: - - '0.446622' + - '0.478775' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAJKVDlgAA+RXTW/0NBC+91es9u5ms62gVGkKAiFA8F7elgOXyolnN6aO - 7dd2trv8esZxkk0apy0XhMQtmXk89nx45nF2f6zF6gDGciXv1unlZr0CWSrG - 5f5u/fjwI7lZ3+cXmTNUWlo6ROUXq1XGWc6+pJqVtMoS/PEy66hrbE4bVynD - /wKWJZ3Ia91JQ26pgCxpP72sbIzB3U6EW0VwU8gfP/+QJXOxB9NaNdLl15vL - zSZLuj+vqMGUFZWO0LL0QoLnsQ7qQgmXJTFte9qmIBHdSnJxt3amgXUSrFO0 - ZT4EVYYhMqIoDVAHjFC38r7frRn+Ol7DOt9u0q9IuiHb64ft1W16dbvd/oER - GBa06xvN/tn684IuztYp9MD/tMl7fUIU7rixjkhaQ0Qp6LKuVLWm8hTRQE25 - iMhfoLDcxWzpSsmYfEePs6AmY6+ygguBNfsve2idAcCaYMyAtbEQHB1I5jOx - CBGqpIK7mHkDe7xwsTgpvFki3I1vrtPN11kyFvXHxjo1p2WvgtqvIFToim4/ - hLp6DyUbTAov5wkb5Qhd2zWSxS7LoLFdsVNj6GmixHiOGlLMiKbGcQyHBecE - 1IAXdroiZvzcud4zPzJbUFdWUUzFtf5fluQbBfKfqcVxdrr+SHYcBLNdLRws - AWOUIRgjraSFqGstbuT6FJ3/hoPqTUBvYpq1V6Cfg5U3Ma0bh8N8/7nQQ/c4 - Hl7oCTV/QqhynDh2nthMG1XibhiH/nbQFt5aevjp0y/f/4q95y3Q1Mr0KOnG - z/Il7cJKhxWcf6dRc/AcYwnRhpYx7k+CwZ/DZr4eFC99gnaYeFyBtVOAmUek - 8UwAdwnjfgHl6JEEjhJVwRFq3U/zQikBVK7zHRXW86MB0LMH9IKU1LCuxJ16 - htgdLLhEfpRub258s5XjPnKdpzc3aZZ0P91VQZOkZWO/c0uxVob/vlVobkIq - ayVdlafbLJkJZ9gTUIPEZLuZgFtpt283uYlvNC2nfPx8nudn6fmUlRJtsOPt - g9d0D6QxIq+c0/Y2SajFFm0vC0O59Nemq/dL7JuJpiffuZ9qwFplT0LtVXJA - /y+13N+DPHCjpAfcWSpZoY5IcAf7Xa8zoCnyyE/Kl1/4DpoKqHAVnhiprHyW - 6kVmyUgWQAwK7s768NupGoOJwxrcN8IzuBHqtWYYBJ6a4qw7Q0ey7rz0ZJQY - IXpBFz5rG2yFOMrk8xkzkU5bq9oRr6WyhNxvN5f2cVKsKVvKfd76LAugRvIv - DXT3CMUYeY6deHal/AUFWSti2fPCxRn0HUGcXpzugUIqjnVmThMCMAzPFgFo - qMuIv21ItFFR6w+S7wE/WHjzZdQilh43IUIWSe5Qyt/2bxtfzEj1bc/r/VFH - tMUqbFSQU83xSHN5cDh57fEg6aIUWp6gcRrUFLY0XC/SpJF+aFEtByQax7Ji - BJkI8fGMNrMJEo9lXBSLR361j+/7BFt8hOMxbtt6jeogWFF9n1poN0uvFGwQ - 87NNjSJ/8q9b9GuhhAd9aP345JQwt4o5P/hZtQNYmjJ+W/VCQjZnWgxD0Rgb - KCwDhw8127egiSqemxH/jW8/xcwe9B+Ew9EHAFuviR/DvwWwUpG1xQw2ZRmh - t5iRBd+957pxECuNbmYQLpGFNeE94edkaDFPvsVkyRJoymNGjk7pzpjKLILe - t9WSn/dsDQzJVdhSCF4vX3eAR9+pacQmzSO/+BsAAP//AwAMBmfkMRIAAA== + H4sIAKiBklgAA+RXTW/jNhC951cYvjOSnTRxA0VpgaJogXYvu2mBXgJKHFts + KFIlKcfqr9+hRMlSRCXppShQwAdr5nHI+eDMY/JwKsXqCNpwJe/Xm8t4vQKZ + K8bl4X79+OVHsls/pBeJ1VQamltEpRerVcJZeqMbeXPFdkmEH05mLLW1SWlt + C6X538CSyIuc1jYVpIYKSKL2r5Pltda4W0O4UQQ3hfTx8w9JNBc7MC1VLW16 + HV/GcRL5L6coQecFlZbQPHdCgucxFspMCZtEIW172jojAd1KcnG/trqGddRZ + p2hLfwiqNENkQJFroBYYoXblfL9fM/y0vIR1uo03tyTe4u9LHN9d395d3fyB + ERgWtOvriv2z9ecFPs7GKvTAfbTJe31CFO65NpZIWkJAKeiyLldlRWUT0EBJ + uQjIXyAz3IZsVYWSIfmenmZBjcZeJRkXAmv2X/bQWA2ANcGYBmNCIThZkMxl + YhEiVE4FtyHzGg544UJxUnizRHc3vr3exLdJNBb1x8Y61c2yV53arSBUVAXd + fgh19R5K1pgUns8TNsoRuravJQtdlkFjfLFTrWkzUWI8Rw0pZKSi2nIMhwFr + BZSAF3a6ImT83LneMz8ym1GbF0FMwavqf1mSbxTIf6YWx9nx/ZHsOQhmfC0c + DQGtlSYYo0pJA0HXWtzI9Sk6/RUH1ZuA3sQ0a69AP3dW3sS0bhyP8/3nQgc9 + 4Hh4oQ1q/oSuynHimHlik0qrHHfDOPS3g7bw1tKn229++uV37D1vgaZWpkfZ + xG6WL2kXVlqs4PT7CjVHxzGWEG1oGePuJBj8OWzm61Hx3CVoj4nHFVg7Geh5 + RGrHBHCXbtwvoCw9kY6jBFVwgrLqp3mmlAAq1+meCuP40QDo2QN6QXKqmS9x + q54hdAczLpEfbba7nWu2ctxHrtPNbrdJIv/hrwqaJC0b+40birUyfPetouK6 + S2WppC3SzTaJZsIZtgGqkZhs4wm4lfp9/eQmrtG0nPLx83men6XnUxZKtMEO + tw9e0gOQWou0sLYyd1FEDbZoc5lpyqW7Nr7eL7FvRhVtXOd+KgFrlT0JdVDR + Ef2/rOThAeSRayUd4N5QyTJ1QoI72Pe9TkNFkUd+Uq78uv+dpgAqbIEnRior + n6V6kUk0knUgBhm3Z3336VW1xsRhDR5q4RjcCPVaMwwCR01x1p2hI5k/L220 + EiNEL/DhM6bGVoijTD6fMRPptLWqPXFaKnNI3XZzaR8nxeq8pdznrc+yDlRL + /lcN/h6hGCPPsRPPrpS7oCBLRQx7Xrg4g94TxOnF8Q8UUnCsM91MCMAwPFsE + oCGfEXfbkGijoqw+SL4H/GDhzZdRi1h63HQRMkhyh1L+rn/buGJGqm96Xu+O + OqItRmGjgpRWHI80l3cOR689HiQ+Sl3LEzRMg+rM5JpXizRppB9aVMsBSYVj + WTGCTIS4eAab2QSJx9I2iMUjv9rH9X2CLT7A8Rg3bb0GddBZUX2fWmg3S68U + bBDzs02NIn9yr1v0a6GEB33X+vHJKWFuFXN+dLNqD7A0Zdy26oV02ZxpMQxZ + rU1HYRlYfKiZvgVNVOHcjPhvePspZvag/yAcTi4A2Hp1+BjuLYCViqwtZLDO + 8wC9xYws+O48r2oLodLwM4NwiSys7t4Tbk52LebJtZgkWgJNeczI0SndGVOZ + RdD7tlry856tgSHZAlsKwevl6g7w6Hs1jdikeaQXXwEAAP//AwCzcrjbMRIA + AA== http_version: - recorded_at: Mon, 24 Oct 2016 23:13:21 GMT + recorded_at: Thu, 02 Feb 2017 00:47:36 GMT - request: method: get - uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/transactions/dq1pdcah + uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/transactions/6ryn63d8 body: encoding: US-ASCII string: '' @@ -107,7 +108,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.68.1 + - Braintree Ruby Gem 2.72.0 X-Apiversion: - '4' Authorization: @@ -118,7 +119,7 @@ http_interactions: message: OK headers: Date: - - Mon, 24 Oct 2016 23:13:23 GMT + - Thu, 02 Feb 2017 00:47:36 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -139,52 +140,53 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"815592219d00688ad8b61f7c660f24db" + - W/"0895792842740b84384f234cbacf6daf" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 15520ebc-dfa8-428b-b00f-4e02b9a56139 + - ce42746e-1718-4e3e-bc4a-7e839b80962a X-Runtime: - - '0.122276' + - '0.127991' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAJOVDlgAA+RXTW/0NBC+91es9u5ms62gVGkKAiFA8F7elgOXyolnN6aO - 7dd2trv8esZxkk0apy0XhMQtmXk89nx45nF2f6zF6gDGciXv1unlZr0CWSrG - 5f5u/fjwI7lZ3+cXmTNUWlo6ROUXq1XGWc6+pJqVtMoS/PEy66hrbE4bVynD - /wKWJZ3Ia91JQ26pgCxpP72sbIzB3U6EW0VwU8gfP/+QJXOxB9NaNdLl15vL - zSZLuj+vqMGUFZWO0LL0QoLnsQ7qQgmXJTFte9qmIBHdSnJxt3amgXUSrFO0 - ZT4EVYYhMqIoDVAHjFC38r7frRn+Ol7DOt9u0q9IuiHb64ft1W16dbvd/oER - GBa06xvN/tn684IuztYp9MD/tMl7fUIU7rixjkhaQ0Qp6LKuVLWm8hTRQE25 - iMhfoLDcxWzpSsmYfEePs6AmY6+ygguBNfsve2idAcCaYMyAtbEQHB1I5jOx - CBGqpIK7mHkDe7xwsTgpvFki3I1vrtPN11kyFvXHxjo1p2WvgtqvIFToim4/ - hLp6DyUbTAov5wkb5Qhd2zWSxS7LoLFdsVNj6GmixHiOGlLMiKbGcQyHBecE - 1IAXdroiZvzcud4zPzJbUFdWUUzFtf5fluQbBfKfqcVxdrr+SHYcBLNdLRws - AWOUIRgjraSFqGstbuT6FJ3/hoPqTUBvYpq1V6Cfg5U3Ma0bh8N8/7nQQ/c4 - Hl7oCTV/QqhynDh2nthMG1XibhiH/nbQFt5aevjp0y/f/4q95y3Q1Mr0KOnG - z/Il7cJKhxWcf6dRc/AcYwnRhpYx7k+CwZ/DZr4eFC99gnaYeFyBtVOAmUek - 8UwAdwnjfgHl6JEEjhJVwRFq3U/zQikBVK7zHRXW86MB0LMH9IKU1LCuxJ16 - htgdLLhEfpRub258s5XjPnKdpzc3aZZ0P91VQZOkZWO/c0uxVob/vlVobkIq - ayVdlafbLJkJZ9gTUIPEZLuZgFtpt283uYlvNC2nfPx8nudn6fmUlRJtsOPt - g9d0D6QxIq+c0/Y2SajFFm0vC0O59Nemq/dL7JuJpiffuZ9qwFplT0LtVXJA - /y+13N+DPHCjpAfcWSpZoY5IcAf7Xa8zoCnyyE/Kl1/4DpoKqHAVnhiprHyW - 6kVmyUgWQAwK7s768NupGoOJwxrcN8IzuBHqtWYYBJ6a4qw7Q0ey7rz0ZJQY - IXpBFz5rG2yFOMrk8xkzkU5bq9oRr6WyhNxvN5f2cVKsKVvKfd76LAugRvIv - DXT3CMUYeY6deHal/AUFWSti2fPCxRn0HUGcXpzugUIqjnVmThMCMAzPFgFo - qMuIv21ItFFR6w+S7wE/WHjzZdQilh43IUIWSe5Qyt/2bxtfzEj1bc/r/VFH - tMUqbFSQU83xSHN5cDh57fEg6aIUWp6gcRrUFLY0XC/SpJF+aFEtByQax7Ji - BJkI8fGMNrMJEo9lXBSLR361j+/7BFt8hOMxbtt6jeogWFF9n1poN0uvFGwQ - 87NNjSJ/8q9b9GuhhAd9aP345JQwt4o5P/hZtQNYmjJ+W/VCQjZnWgxD0Rgb - KCwDhw8127egiSqemxH/jW8/xcwe9B+Ew9EHAFuviR/DvwWwUpG1xQw2ZRmh - t5iRBd+957pxECuNbmYQLpGFNeE94edkaDFPvsVkyRJoymNGjk7pzpjKLILe - t9WSn/dsDQzJVdhSCF4vX3eAR9+pacQmzSO/+BsAAP//AwAMBmfkMRIAAA== + H4sIAKiBklgAA+RXTW/jNhC951cYvjOSnTRxA0VpgaJogXYvu2mBXgJKHFts + KFIlKcfqr9+hRMlSRCXppShQwAdr5nHI+eDMY/JwKsXqCNpwJe/Xm8t4vQKZ + K8bl4X79+OVHsls/pBeJ1VQamltEpRerVcJZeqMbeXPFdkmEH05mLLW1SWlt + C6X538CSyIuc1jYVpIYKSKL2r5Pltda4W0O4UQQ3hfTx8w9JNBc7MC1VLW16 + HV/GcRL5L6coQecFlZbQPHdCgucxFspMCZtEIW172jojAd1KcnG/trqGddRZ + p2hLfwiqNENkQJFroBYYoXblfL9fM/y0vIR1uo03tyTe4u9LHN9d395d3fyB + ERgWtOvriv2z9ecFPs7GKvTAfbTJe31CFO65NpZIWkJAKeiyLldlRWUT0EBJ + uQjIXyAz3IZsVYWSIfmenmZBjcZeJRkXAmv2X/bQWA2ANcGYBmNCIThZkMxl + YhEiVE4FtyHzGg544UJxUnizRHc3vr3exLdJNBb1x8Y61c2yV53arSBUVAXd + fgh19R5K1pgUns8TNsoRuravJQtdlkFjfLFTrWkzUWI8Rw0pZKSi2nIMhwFr + BZSAF3a6ImT83LneMz8ym1GbF0FMwavqf1mSbxTIf6YWx9nx/ZHsOQhmfC0c + DQGtlSYYo0pJA0HXWtzI9Sk6/RUH1ZuA3sQ0a69AP3dW3sS0bhyP8/3nQgc9 + 4Hh4oQ1q/oSuynHimHlik0qrHHfDOPS3g7bw1tKn229++uV37D1vgaZWpkfZ + xG6WL2kXVlqs4PT7CjVHxzGWEG1oGePuJBj8OWzm61Hx3CVoj4nHFVg7Geh5 + RGrHBHCXbtwvoCw9kY6jBFVwgrLqp3mmlAAq1+meCuP40QDo2QN6QXKqmS9x + q54hdAczLpEfbba7nWu2ctxHrtPNbrdJIv/hrwqaJC0b+40birUyfPetouK6 + S2WppC3SzTaJZsIZtgGqkZhs4wm4lfp9/eQmrtG0nPLx83men6XnUxZKtMEO + tw9e0gOQWou0sLYyd1FEDbZoc5lpyqW7Nr7eL7FvRhVtXOd+KgFrlT0JdVDR + Ef2/rOThAeSRayUd4N5QyTJ1QoI72Pe9TkNFkUd+Uq78uv+dpgAqbIEnRior + n6V6kUk0knUgBhm3Z3336VW1xsRhDR5q4RjcCPVaMwwCR01x1p2hI5k/L220 + EiNEL/DhM6bGVoijTD6fMRPptLWqPXFaKnNI3XZzaR8nxeq8pdznrc+yDlRL + /lcN/h6hGCPPsRPPrpS7oCBLRQx7Xrg4g94TxOnF8Q8UUnCsM91MCMAwPFsE + oCGfEXfbkGijoqw+SL4H/GDhzZdRi1h63HQRMkhyh1L+rn/buGJGqm96Xu+O + OqItRmGjgpRWHI80l3cOR689HiQ+Sl3LEzRMg+rM5JpXizRppB9aVMsBSYVj + WTGCTIS4eAab2QSJx9I2iMUjv9rH9X2CLT7A8Rg3bb0GddBZUX2fWmg3S68U + bBDzs02NIn9yr1v0a6GEB33X+vHJKWFuFXN+dLNqD7A0Zdy26oV02ZxpMQxZ + rU1HYRlYfKiZvgVNVOHcjPhvePspZvag/yAcTi4A2Hp1+BjuLYCViqwtZLDO + 8wC9xYws+O48r2oLodLwM4NwiSys7t4Tbk52LebJtZgkWgJNeczI0SndGVOZ + RdD7tlry856tgSHZAlsKwevl6g7w6Hs1jdikeaQXXwEAAP//AwCzcrjbMRIA + AA== http_version: - recorded_at: Mon, 24 Oct 2016 23:13:22 GMT + recorded_at: Thu, 02 Feb 2017 00:47:36 GMT - request: method: put - uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/transactions/dq1pdcah/void + uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/transactions/6ryn63d8/void body: encoding: UTF-8 string: '' @@ -194,7 +196,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.68.1 + - Braintree Ruby Gem 2.72.0 X-Apiversion: - '4' Authorization: @@ -207,7 +209,7 @@ http_interactions: message: OK headers: Date: - - Mon, 24 Oct 2016 23:13:23 GMT + - Thu, 02 Feb 2017 00:47:37 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -228,48 +230,48 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"91c4bf8ed423430571ce4e10ce0ad226" + - W/"0386c8c25494920817fbd1e7fc15576d" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 3f154aec-3244-4171-8e7d-0119c0120f33 + - 93f4fc1c-6f37-459b-8e91-7eaae237ca00 X-Runtime: - - '0.222747' + - '0.284715' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAJOVDlgAA+RYTW/jNhC9768wfGdkOUGbBorSokXRFu1eNumhl4ASxxYb - iuSSlGP31+9QomQpopIABYoFerNmHoec4Xw8Ors71mJ1AGO5krfr9GKzXoEs - FeNyf7t+uP+ZXK/v8g+ZM1RaWjpE5R9Wq4yznH1ONStplSX44WXWUdfY/KA4 - A5Yl4dNr3ElDbqmALGl/elnZGIM7nQi3iuCGkD98+ilL5mIPprVqpMuvNheb - TZaEL6+owZQVlY7QsvRCgmexDupCCZclMW170qYgEd1KcnG7dqaBddJZp2jL - vAuqDENkRFEaoA4YoW7lfb9dM/x0vIZ1vt2k35B0Q7ZX99vLm/TyZrv9CyMw - LGjXN5q9f/0lrj8vCHG2TqEH/qO9uJcnROGOG+uIpDVElIIu60pVaypPEQ3U - lIuI/BkKy13Mlq6UjMl39DgLajL2Kiu4EJiv/7GH1hkAzAnGDFgbC8HRgWT+ - JhYhQpVUcBczb2CPxRaLk8LKEl1tfHeVbr7NkrGoPzbmqTkte9Wp/QpCha7o - 9l2oy7dQssFL4eX8wkZ3hK7tGslixTJobEh2agw9TZQYz1EzihnR1DiO4bDg - nIAasGCnK2LGaeMqZfg/b5sfmS2oK6sopuJa/y9T8pUE+WpycXw7oT+SHQfB - bMiFgyVgjDIEY6SVtBB1rcWNXJ+i8z9wUL0K6E1Mb+0F6NfOyquY1o3DYb7/ - XOihexwPz/SEmr+hy3KcOHZ+sZk2qsTdMA59ddAW3lq6/+Xjbz/+jr3nNdDU - yvQo6cbP8iXtwkqHGZz/oFFz8BxjCdGGljHuT4LBn8NmviJrKf0F7fDicQXm - TgFmHpHGMwHcpRv3CyhHj6TjKFEVHKHW/TQvlBJA5TrfUWE9PxoAPXtAL0hJ - DQsp7tQTxGqw4BL5Ubq9vvbNVo77yFWeXl+nWRI+QqmgSdKysT+5pZgrw3ff - KjQ33VXWSroqT7dZMhPOsCegBonJdjMBt9Kwb5jcxDealk8+fDrP87P0fMpK - iTbY8fbBa7oH0hiRV85pe5Mk1GKLtheFoVz6sgn5foF9M9H05Dv3Yw2Yq+xR - qL1KDuj/hZb7O5AHbpT0gFtLJSvUEcntYD/0OgOaIo/8qHz6db87TQVUuApP - jFRWPkn1LLNkJOtADAruzvruM6gagxeHObhvhGdwI9RLzTAIPDXFWXeGjmTh - vPRklBghekEIn7UNtkIcZfLpjJlIp61V7YjXUllC7rebS/s4KdaULeU+b32W - daBG8s8NhDpCMUaeYyeelZQvUJC1IpY9LRTOoA8EcVo44XFCKo55Zk4TAjAM - zxYBaCjciK82JNqoqPU7yfuAHyyEZ9CZX4xfRi1i6XHTRcgiyR1S+fv+beOT - Gam+7Xm9P+qItliFjQpyqjkeaS7vHE7mHv/7IFy+FoT50/DrCsAgCWnS9XxB - 4zywKWxpuF7kiSP90KNbEkw08hLFCFIx4mMZ7eYTJB7LuCgWj/xiHz/4CM64 - CMll3LYFG9VBZ0X1jXqh3y4907BDzs82NYoE0j/v0a+FGh703ezDN7eEuVW8 - 84Mf1juApTHrt1XPpLvNmRbDUDTGdhyegcOXqu178EQVv5vRAyC+/RQz+0fj - nXA4+gDg7DHxY/jHEGYq0taYwaYsI/web2TBd++5bhzEUiMMTcIl0tCme1B5 - otD12EffY7NkCTQlciNHp3xvzOUWQW/batnfW7YGiugqbCkEy8vnHeDRd2oa - sUnzyD98AQAA//8DAJzBENUuEwAA + H4sIAKmBklgAA+RYTW/jNhC9768wfGckO2niBorSAkXRAu1edtMCvQSUOLbY + UKRKUo7VX79DiZKliErSQ4sFCuRgzTwOOcP5eExyfyrF6gjacCXv1puLeL0C + mSvG5eFu/fD5R7Jb36cfEqupNDS3iEo/rFYJZ+m1buT1JdslEX44mbHU1iY9 + Ks6AJZH/dBrbVJAaKiCJ2p9Oltda404N4UYR3BDSh08/JNFc7MC0VLW06VV8 + EcdJ5L+cogSdF1RaQvPcCQmexVgoMyVsEoW07UnrjAR0K8nF3drqGtZRZ52i + Lf0uqNIMkQFFroFaYITalfP9bs3w0/IS1uk23tyQeIt/n+P49urm9vL6D4zA + sKBdX1fsn60/L/BxNlahB+6jvbiXJ0ThnmtjiaQlBJSCLutyVVZUNgENlJSL + gPwZMsNtyFZVKBmS7+lpFtRo7FWScSEwX/9jD43VAJgTjGkwJhSCkwXJ3E0s + QoTKqeA2ZF7DAYstFCeFlSW62vj2ahPfJNFY1B8b81Q3y151areCUFEVdPsu + 1OVbKFnjpfB8fmGjO0LX9rVkoWIZNMYnO9WaNhMlxnPUjEJGKqotx3AYsFZA + CViw0xUh47S2hdL877fNj8xm1OZFEFPwqvpfpuQrCfLV5OL4dnx/JHsOghmf + C0dDQGulCcaoUtJA0LUWN3J9ik5/xUH1KqA3Mb21F6CfOyuvYlo3jsf5/nOh + gx5wPDzTBjV/QpflOHHM/GKTSqscd8M49NVBW3hr6ePNNz/98jv2ntdAUyvT + o2xiN8uXtAsrLWZw+n2FmqPjGEuINrSMcXcSDP4cNvMVWUvuLmiPF48rMHcy + 0POI1I4J4C7duF9AWXoiHUcJquAEZdVP80wpAVSu0z0VxvGjAdCzB/SC5FQz + n+JWPUGoBjMukR9ttruda7Zy3Eeu0s1ut0ki/+FLBU2Slo39xg3FXBm++1ZR + cd1dZamkLdLNNolmwhm2AaqRmGzjCbiV+n395Cau0bR88uHTeZ6fpedTFkq0 + wQ63D17SA5Bai7SwtjK3UUQNtmhzkWnKpSsbn+8X2Dejijaucz+WgLnKHoU6 + qOiI/l9U8nAP8si1kg5wZ6hkmTohuR3s+16noaLIIz8ql37d705TABW2wBMj + lZVPUj3LJBrJOhCDjNuzvvv0qlrjxWEOHmrhGNwI9VIzDAJHTXHWnaEjmT8v + bbQSI0Qv8OEzpsZWiKNMPp0xE+m0tao9cVoqc0jddnNpHyfF6ryl3Oetz7IO + VEv+Vw2+jlCMkefYiWcl5QoUZKmIYU8LhTPoPUGcFo5/nJCCY57pZkIAhuHZ + IgAN+Rtx1YZEGxVl9U7yPeAHC/4ZdOYX45dRi1h63HQRMkhyh1T+rn/buGRG + qm96Xu+OOqItRmGjgpRWHI80l3cOR3OP/+UgzJ+GX1cABolPk67nCxrmgXVm + cs2rRZ440g89uiXBpEJeohhBKkZcLIPdfILEY2kbxOKRX+zjBh/BGRcguYyb + tmCDOuisqL5RL/TbpWcadsj52aZGkUC65z36tVDDg76bffjmljC3ind+dMN6 + D7A0Zt226pl0tznTYhiyWpuOwzOw+FI1fQ+eqMJ3M3oAhLefYmb/0XgnHE4u + ADh7dPgY7jGEmYq0NWSwzvMAv8cbWfDdeV7VFkKp4Ycm4RJpaN09qBxR6Hrs + o+uxSbQEmhK5kaNTvjfmcougt2217O8tWwNFtAW2FILl5fIO8Oh7NY3YpHmk + H74AAAD//wMAj09S8y4TAAA= http_version: - recorded_at: Mon, 24 Oct 2016 23:13:22 GMT + recorded_at: Thu, 02 Feb 2017 00:47:37 GMT recorded_with: VCR 3.0.3 diff --git a/spec/fixtures/cassettes/gateway/capture.yml b/spec/fixtures/cassettes/gateway/capture.yml index 00000025..f29e03ca 100644 --- a/spec/fixtures/cassettes/gateway/capture.yml +++ b/spec/fixtures/cassettes/gateway/capture.yml @@ -18,7 +18,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.69.1 + - Braintree Ruby Gem 2.72.0 X-Apiversion: - '4' Authorization: @@ -31,7 +31,7 @@ http_interactions: message: Created headers: Date: - - Tue, 10 Jan 2017 17:32:44 GMT + - Thu, 02 Feb 2017 00:47:31 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -52,52 +52,52 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"dcf1b461e4acc9eff70a27eea41ad2ae" + - W/"98b6e389659d30f31c939ecdd111f747" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - d2b6124e-6e2f-4a96-8808-14ba4cad3656 + - bfc9433d-6a7e-47de-af41-ec0c2890b91d X-Runtime: - - '0.444186' + - '0.485616' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 http_version: - recorded_at: Tue, 10 Jan 2017 17:32:44 GMT + recorded_at: Thu, 02 Feb 2017 00:47:31 GMT - request: method: put - uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/transactions/kecn6xkp/submit_for_settlement + uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/transactions/1z70r03e/submit_for_settlement body: encoding: UTF-8 string: | @@ -111,7 +111,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.69.1 + - Braintree Ruby Gem 2.72.0 X-Apiversion: - '4' Authorization: @@ -124,7 +124,7 @@ http_interactions: message: OK headers: Date: - - Tue, 10 Jan 2017 17:32:45 GMT + - Thu, 02 Feb 2017 00:47:32 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -145,48 +145,48 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"2017c70238d2e515ed0f8ae7ed42d778" + - W/"a5b6694458157ff147865c47b1af6b2a" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 6084f954-2473-4d2f-b6b0-73c0d972937c + - 2d893ed0-a6bd-4b32-94ef-bea2f05f3237 X-Runtime: - - '0.219741' + - '0.226954' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 http_version: - recorded_at: Tue, 10 Jan 2017 17:32:45 GMT + recorded_at: Thu, 02 Feb 2017 00:47:32 GMT recorded_with: VCR 3.0.3 diff --git a/spec/fixtures/cassettes/gateway/complete.yml b/spec/fixtures/cassettes/gateway/complete.yml index d429d81e..ce890e95 100644 --- a/spec/fixtures/cassettes/gateway/complete.yml +++ b/spec/fixtures/cassettes/gateway/complete.yml @@ -16,7 +16,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.69.1 + - Braintree Ruby Gem 2.72.0 X-Apiversion: - '4' Authorization: @@ -29,7 +29,7 @@ http_interactions: message: Created headers: Date: - - Tue, 10 Jan 2017 17:33:17 GMT + - Thu, 02 Feb 2017 00:47:26 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -50,40 +50,40 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"64f8f70697b977da04e1558311a3734a" + - W/"8663342e3aec2ea189c6526d5e7fbc71" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 4937a9aa-32bd-4eb1-9fd9-3834e7fffb9f + - 0e97a124-d54d-4e89-8721-9a1821c4e7e6 X-Runtime: - - '0.427325' + - '0.401262' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAN0adVgAA6xVy3LbOgzd5ys82jOy/IidjMzs7rKbNl1004FEyOI1Raok - ldh/X1LWyw+57qQ74eCAhIBDIH7dF2LyjtpwJTdB9DgNJihTxbjcboK3b/+R - dfBKH+K0MlYVqOnDZBJzRpdP69niaTaNQ2d4zPnSHKQlzl5ptn2e/b9KilW2 - W+bzOBx6PTvj2lgiocCJ5GITWF1hENYuAWOeVBUlyMMFjgVwcYGWuZKXZ2Sw - v8A+MDHcXrlPI1hkBOzEHkrcBMyZlhcY0Nk0WpFpRKLpt2j1Mp+/RE8/4rAP - qOOrkv1dfB9wvL+uOck4Cma6lBi3JAXNTHMoaA2HwHtP/UfEYQkXwnWTAGMa - jWnxYx+3WdvBBmsbTU6aPER77ngXG8JoL9vLrne08RqrEW2b9wgJ9xYl80W7 - SRMqBcHt2FUat07/I85SGQuCuEeB9HkRTVdxOISGv1NJqw81TECUOcxGf/yc - Ob+HKSvXA57+gXqr4J+TdHPKJ4VdnxGOyNLJVdLFNJqt154jO9xrmvjr6Hdu - wGXW2UNGrgRzMh0rgVecn0UcBH2TO6k+pDupx3rasZQqI9yYCmSK1BMv0S7i - 85W9/+31TK9r66RL374OmB3a8hkm3PZ/fDR7ZwaVaPNOlBIIMqC+cp5aO3ty - pV1XiHswlfD5Dw4997QhuC+5rvMhhZI2p9EsDi/AK+wDgnbV80U4R0/YyM5z - z0AYbKIGmeQIwuZOJ9inPcBaGi9gi6TSgubWluYlDMEYtOYx0cCln0pb94Mf - cHh00glLOBQo7c8Cba7YT6G2Knx3En0s5fYV5TvXSnrCxoBkidq7gdud393o - 5OQfQwJy16d2grbUeqYuaLReR3HYGK3PpaKVGEi7BTqCxhKcjr4o52u+e59i - VVqv6D6+x1qaqRKTal76XpzuoP6VWbVDSVdmuVoc4vBotb5K8l9VPcqSWtOu - MtytOE0hWzr+c7Z8zqKMzdfsKc3SyAHZYrlOMqeZ0dDu7H8wmN5RFooYthvR - VOcfRGiXxvHFXa1I/diHe/kEqEdf3IxBvLrWz2fkxeL+i9Fxe2nfXtm3FvYd - 6/quZX1zVd9Y1Heu6XuX9L0r+u4F/cf1/E9WyKdfQBwOxNYZ6MxeTvThNwAA - AP//AwCGkwanNwwAAA== + H4sIAJ6BklgAA6xVPXPbMAzd8yt82hlZih07OVnZOnZp0qFLjxIhiTFFqiSV + 2P++oKwvx5bjXnrnwXx4ICHgAYiedqWYvYE2XMmNF9zOvRnIVDEu84338vyN + rL2n+CZKa2NVCTq+mc0izuJwcX8fhHeryMeDw9CWFlRagueVZvlD+LpKylW2 + XRZ3kT+2OnbGtbFE0hJmkouNZ3UNnt+YBJ2ypKqsqNyf4FBSLk7QqlDy9I6M + 7k6wd0gMt2fe00AtMELtzO4r2HgMj5aX4MXhPFiReYi/5/n8cbF6DO9/Rf7g + 0PjXFfs3/8Hh8H6Tc5JxEMz0ITFuSUo1M+2lVGu695z12H5AEEu4EFhNQhnT + YEyHH+q4rLoKtlhXaHJU5DE6cKer2BIma9k9dr6irdVYDWC7uCdIsLMgmUva + RZpQKRXcTj2lIUf9TxgrZSwVBJsC4odFMMd8jKHx59TS6n0DEyqqgoaTH/6R + eXcNU9ZYA55+Qr2U8K9Jur3li8Ju7vAnZIlylfFiHoTrtePIHneaJu65+Cc3 + FCPrz2NGoQRDmU6lwCnOzSJORfwit1K9S7xpwAbaIZUqI9yYmsoUYkc8RXuP + r2f2+t4bmE7XFqUbv/wYMXu04zNIuB2++HAcjBmtRRd3opQAKr3YZc5RG+NA + rjVWhWDD1MLFP7r0o6VzgV3FdRMPKZW0RRyEkX8CnmHvgWrMXjg/ojfoERvY + x9gzKgy0XqNICqDCFqgTGMIeYR2NlzQHUmsRF9ZW5tH3qTFgzW2iKZduKuX4 + ge90f4vS8Su6L0Ha3yXYQrHfQuXKf0OJ3lYyfwL5xrWSjrAxVLJE7XDg9vf3 + L6KcXDMkVG6H0I7QjtrM1EUcrNdB5LeHzoahaCVG0u6AnqChoqij7wpt7f/B + plidNit68B+wjmbqxKSaV64Wxzto6DKrtiDjPH9dSuziw6mz1ZL/qZtRljSa + xsxwXHE6ptlyuVo8ZMuHLMjY3Zrdp1kaIJAtluskQ81MuvZ3/4fB9AayVMSw + 7YSmevvIQ2MYh447m5Gm2cd7+QhoRl/UjkE4u9Y/zsiTxf0Po+Py0r68si8t + 7CvW9VXL+uKqvrCor1zT1y7pa1f01Qv60/X8X1bIlzsg8kdi6w+Ax0FO8c1f + AAAA//8DAONMk0s3DAAA http_version: - recorded_at: Tue, 10 Jan 2017 17:33:17 GMT + recorded_at: Thu, 02 Feb 2017 00:47:26 GMT - request: method: post uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/transactions @@ -99,8 +99,8 @@ http_interactions: true true - 7s574y - 56824620 + ggj5n8 + 24661237 sale headers: @@ -109,7 +109,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.69.1 + - Braintree Ruby Gem 2.72.0 X-Apiversion: - '4' Authorization: @@ -122,7 +122,7 @@ http_interactions: message: Created headers: Date: - - Tue, 10 Jan 2017 17:33:18 GMT + - Thu, 02 Feb 2017 00:47:27 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -143,50 +143,50 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"db0d519f2497fc376573469cae05e7a4" + - W/"1b409ed8ec57f7fb0decb626c9be1484" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 732c5fea-895d-407b-9488-d5b18412f9ce + - 01f08a48-125c-48d9-a694-df1c29a44188 X-Runtime: - - '0.593593' + - '0.578563' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAN4adVgAA9xYUW/bNhB+768I/M7IcuLGKRRlBdoBG9CuaJoB20tAiSeL - i0RqJOXY+/U7ipIsWVSSPRQo9mbdfTzeHY93Hx3d7svibAdKcyluFuH5cnEG - IpWMi+3N4v7bz2SzuI3fREZRoWlqEBW/OTuLOIvXlYBluVtFAX5YmTbU1DrW - dVJyY4A9ZFI9aDCmgBKEiYIWYLHmUEGsaQFR0Py0srRWCvc+EK4lQRcgvr/7 - EAVTsQXTUtbCxOv1+XIZBe2XVZSg0pwKQ2iaWiFB77SBMpEFuuDTNr7XCfHo - zgQvbhZG1bAInHWKttSroFIxRKL9375++Ph1Sb68/+PTx8/f0Nte00StgGKy - CDVnNhM3C4afhpewiFfL8IosQxIuv4VX7y4u3oVXf2I++gXN+rpi/239cUGb - dW0kxmM/2oN9u1ldvl0tu4NFacaVNkTQEk7DRGVB53WpLCsqDh4NlJQXHvkT - JJobn60ql8Inz+h+kvxgGFaU8KLAgj6GuM2+b3DaKACsDsYUaO2Lfm9AMHsK - s5BCprTgxmdewRYvoi9FEu9Y4W7J9WW4vIqCoahzGytWHeajcmq7gtCiyunq - VaiLl1CixvPg6fSsBseDoWW1YL771Gt0W+hUKXoYKTGfg0blM1JRZTim49iW - Tlb4jNPa5FLxf142PzCbUJPmXkzOq2pYjb6S/l+W5DMF8sPU4vB02t5IMg4F - 020t7DQBpaQimKNKCg3e0BrcIPQxOv6EI+tZQGdifGonoF+clWcxTRi73XTl - VGihWxwNT/SAmr/AVTlOGz092KhSMsXdMA/d7aANvLG0+XDx5VckBs+CxlbG - roRLO9XntDMrDVZw/L5CzQ6Yd3WDaFLLGLeeYPKnsEmsO8lTe0AZHjyuwNpJ - QE0zUltOgLu48T6DMnRPHFvxqmAPZdVN8kTKAqhYxBkttGVKPaBjDhgFSanq - JpmRjyDiK72+ujwgvPlymoSL+HIZrjYb227FsJNcxuFmE0ZB+9FeFjRKGmb2 - O9cUq6X/7ppFxZU7zFIKk8chHvdEOMEegCqkJZZbnErbfduxTWyradjm/d1x - mB+lRy9zWTTp9jcQXtItkFoVcW5Mpd8FAdXYpPV5oigX9uK0FX+OnTOo6MH2 - 7ocSsFrZQyG3Mthh/OeV2N6C2HElhQXcaCpYIvdIInr7bbdTUFFkFp+lLUD3 - 22lyoIXJ0WOkteJRyCcRBQOZAzFIuDnq3WerqhUeHFbhti4sfxugTjX9KLA0 - FafdETqQtf7Sg5LFANEJ2vRpXWMzxGEmHo+YkXTcXGVGrJaKFGK73VTa5Umy - Om3o93Hro8yBasH/rqG9SSjGzHPsxSqm2RpL/DpbX2dhxi427G2apSEKssv1 - JsmwFGeXOss7EKUkmj3O3LRe35LJ8U1rXzok51iW6jBiDP20bRCAhtoDtNcT - WTkqyuqVTL3H9xbaF9SRkAwfVQ1i7l3kEqoxA33l/9Q9i2ztY8p0lx7r6oDn - aImdDWJacXRpKncBB9OIv3MSXvPO/LFS0kvawnFjo6B+KlknOlW8mqWaA33f - 5BseTSqkNpIRZHPEZtfTFk+Q6JYyXiy6fLKPnZ0Ex6SHJzOumxvv1YGzIrsr - ONOw5x552GKnvo2NIge1/xVgXDO3ute78YkPeAFFfCcLzmqNt7wVOCKvdnbo - ZwBz49ruLZ+IO9KJFnOR1Eq7twADg49d3XXykcp/QIOHhH/7MWbyH8kr4bC3 - QeMEU3437KMKyxXpr89gnaaedwIey0zsNvKqNuCrj3b0Ei6QztbuYWbphmu9 - D7b1RsEcaEwIB4GOeeOQE86CXrbVsMiXbPVU0+TYVwjeMVt8gK5ncpyxUQeJ - 3/wLAAD//wMASXGQOpITAAA= + H4sIAJ+BklgAA9xY32/bNhB+718R+J2R7dqNWyjqOrQD9tCu6I8N20tAiSeL + DUVqJOXY++t3FCVZiqgkeyhQDMhDdPfxeHc83n10/PpYiosDaMOVvF6sLpeL + C5CZYlzurxdfv/xCdovXybPYaioNzSyikmcXFzFnSWpPZm8PWRzhh5MZS21t + ElOnJbcW2E2u9I0BawWUIG0ctQCHtacKEkMFxFHzr5Nltda494lwowi6AMnX + z2/jaCp2YFqqWtpku71cLuOo/XKKEnRWUGkJzTInJOidsVCmSqALIW3je52S + gO5CcnG9sLqGReStU7SlnwRVmiES7f/26e27T0vy8c2f7999+ILe9pomag0U + k0WovXCZuF4w/LS8hEWyXq6uyHKNf1+Wy1ebq1frq78wH/2CZn1dsf+2/ryg + zbqxCuNxH/5g15sXL1br51fdwaI059pYImkJ98NEpaDzukyVFZWngAZKykVA + fgep4TZkqyqUDMlzepwkPxqGFadcCCzoc4jb6vsGZ6wGwOpgTIMxoeiPFiRz + pzALESqjgtuQeQ17vIihFCm8Y8Lfkpeb1RLPcCjq3MaK1af5qLzarSBUVAVd + Pwn1/DGUrPE8eDY9q8HxYGh5LVnoPvUa0xY61ZqeRkrM56BRhYxUVFuO6Ti3 + pXsrQsZpbQul+T+Pmx+YTanNiiCm4FU1rMZQSf8vS/KBAvlhanF4Om1vJDkH + wUxbCwdDQGulCeaoUtJAMLQGNwh9jE7e48h6ENCZGJ/aPdCv3sqDmCaMw2G6 + cip00D2Ohjt6Qs038FWO08ZMDzautMpwN8xDdztoA28s7T798fNmi73nIdDY + ytiV1dJN9TntzEqLFZy8qVBzABZc3SCa1DLGnSeY/ClsEutB8cwdUI4Hjyuw + dlLQ04zUjhPgLn68z6AsPRLPVoIqOEJZdZM8VUoAlYskp8I4ptQDOuaAUZCM + 6m6SWXULMtnvv23lDuHNl9ekXCab5Wq927l2K4edZJOsdrtVHLUf7WVBo6Rh + Zr9zQ7Fa+u+uWVRc+8MslbRFslrH0UQ4wZ6AaqQl6+UI3EjbfduxTVyradjm + 18/nYX6Wnr0slGjSHW4gvKR7ILUWSWFtZV5FETXYpM1lqimX7uK0FX+JnTOq + 6Mn17psSsFrZjVB7FR0w/stK7l+DPHCtpANcGypZqo5IInr7bbfTUFFkFh+U + K0D/v9cUQIUt0GOktfJWqjsZRwOZBzFIuT3r/WerqjUeHFbhvhaOvw1Q9zX9 + KHA0FafdGTqQtf7Sk1ZigOgEbfqMqbEZ4jCTt2fMSDpurionTktlBonbbirt + 8qRYnTX0+7z1WeZBteR/19DeJBRj5jn2Yp3QfLu92rzMty/zVc6e79iLLM9W + KMg3212aYynOLvWWDyBLRQy7nblpvb4lk+Ob1r50SMGxLPVpxBj6adsgAA21 + B+iuJ7JyVJTVE5l6j+8ttC+oMyEZPqoaxNy7yCfUYAb6yv+pexa52seUmS49 + ztUBzzEKOxsktOLo0lTuA46mEX/nJDzlnfljpaSXtIXjx4agYSpZpybTvJql + mgN93+QbHk0qpDaKEWRzxGU30BbvIdEtbYNYdPnePm52EhyTAZ7MuGlufFAH + 3orqruBMw5575GGLnfo2Nooc1P1WgHHN3Ope78cnPuAliOSzEpzVBm95K/BE + Xh/c0M8B5sa121vdEX+kEy3mIq218W8BBhYfu6br5CNV+IAGD4nw9mPM5DeS + J8Lh6ILGCabDbrhHFZYr0t+QwTrLAu8EPJaZ2F3kVW0hVB/t6CVcIp2t/cPM + 0Q3fem9c642jOdCYEA4CHfPGISecBT1uq2GRj9nqqaYtsK8QvGOu+ABdz9U4 + Y6MOkjz7FwAA//8DADvdQ1OSEwAA http_version: - recorded_at: Tue, 10 Jan 2017 17:33:18 GMT + recorded_at: Thu, 02 Feb 2017 00:47:27 GMT recorded_with: VCR 3.0.3 diff --git a/spec/fixtures/cassettes/gateway/credit.yml b/spec/fixtures/cassettes/gateway/credit.yml index 51a851a4..7edf45e9 100644 --- a/spec/fixtures/cassettes/gateway/credit.yml +++ b/spec/fixtures/cassettes/gateway/credit.yml @@ -21,7 +21,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.68.1 + - Braintree Ruby Gem 2.72.0 X-Apiversion: - '4' Authorization: @@ -34,7 +34,7 @@ http_interactions: message: Created headers: Date: - - Mon, 24 Oct 2016 23:13:18 GMT + - Thu, 02 Feb 2017 00:47:32 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -55,53 +55,53 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"88dba6139804d083b443d915d01f56bc" + - W/"546e7b68a41313079314556c661b7966" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 85421652-2fe0-4cc8-8837-4af4c55fcabc + - 1878aa06-2806-41c6-afb6-9d96c5174c14 X-Runtime: - - '0.357670' + - '0.456901' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAI6VDlgAA+RYTW/jNhC951cYvjOyHWPXu1CUFigK9NBedtPDXgJKHFts - KFLLD8fur+9QomQpohJfWixQIAdr5nE4MxzOPCZ9OFVicQRtuJL3y/XtarkA - WSjG5eF++fj1V7JbPmQ3qdVUGlpYRGU3i0XKWSa/f7rbvhw+pgl+eJmx1DqT - GZdX3FpgT3ulnwxYK6ACadMkADzWnmvIDBWQJs1PLyuc1rj3mXCjCLoA2eOX - X9JkKvZgWiknbbZd3a5WaRK+vKICXZRUWkKLwgsJemcsVLkS6EJM2/juchLR - LSQX90urHSyT1jpFW/oqqNIMkRFFoYFiegi1Cx/7/ZLhp+UVLLPNav2BrFdk - s/26ufu8xr+P3zAD/YJmvavZ9et3uP6yIOTZWIUR+I/mKF97iMI918YSSSuI - KAWd1xWqqqk8RzRQUS4i8hfIDbcxW3WpZEy+p6dJUpNhVGnOhcAK/o8jNFYD - YE0wpsGYWApOFiTzJzELEaqggtuYeQ0HvH6xPCm8WaK9G5+26xVeyaGocxvr - VJ/no2rVfgWhoi7p5irU3Xso6fBQeDE9sMEZYWh7J1nssvQaE4qdak3PIyXm - c9CeYkZqqi3HdFya0asVMePU2VJp/vf75gdmc2qLMoopeV3/L0vyjQL5YWpx - eDqhP5I9B8FMqIWjIaC10gRzVCtpIBpagxuEPkZnv+OgehPQmRif2ivQb62V - NzFNGMfjdP+p0EMPOB5e6Bk1f0Fb5ThxzPRg01qrAnfDPHS3gzbwxtJqd/dh - i3u8CRpbGbuyXvlZPqedWWmxgrOfa9QcgUVXN4gmtYxx7wkmfwqbxHpUvPAH - tMeDxxVYOznoaUacZwK4SzvuZ1CWnkjLUaIqOEFVd9M8V0oAlctsT4Xx/KgH - dOwBoyAF1SyUuFXPELuDOZfIj9ab3c43WznsI9tsvdut0yR8hKuCJknDxv7k - hmKt9N9dq6i5bo+yUtKW2XqTJhPhBHsGqpGYbFYjcCMN+4bJTXyjaRjm45fL - PL9IL16WSjTJjrcPXtEDEKdFVlpbm89JQg22aHOba8qlvzah3m+xbyY1PfvO - /VQB1ip7EuqgkiPGf1vLwwPII9dKesC9oZLl6oR0t7cfep2GmiKP/EP58mt/ - t5oSqLAleoxUVj5L9SLTZCBrQQxybi/69jOonMaDwxo8OOEZ3AD1WtMPAk9N - cdZdoANZ8JeetRIDRCcI6TPGYSvEUSafL5iRdNxa1Z54LZUFZH67qbTLk2Ku - aCj3ZeuLrAU5yb87CPcIxZh5jp14cqX8BQVZKWLY88zF6fWBII4vTniukJJj - nenziAD0w7NBABoKJ+JvGxJtVFT1leS7x/cWwjPowi+GL6MGMfe4aTNkkOT2 - pfxT97bxxYxU33S83rs6oC1GYaOCjNYcXZrK24CTacT/chKueSz+WCnpJaFw - 2ikgaJwZutwUmtezzHGg77t2Q4tJjUxFMYLkjPjsRvv7CIluaRvFosuv9vGj - kODUi9Bexk1zhaM6aK2ornXPdOC5hxv2zKlvY6NIKf2DH+OaudW9vp2G+AqX - MLWKZ37043sPMDd4/bbqhbSnOdFiGnKnTcvqGVh8u5quK49U8bMZPAni248x - k/9xXAmHk08ATiMdd8M/j7BSkcjGDLqiiDB+PJGZ2H3ktbMQK40wRgmXSExd - +8Ty1KHtuk++66bJHGhM7QaBjhngkN3Ngt631fDB92z1pNGW2FIIXi9fd4Cu - 79U4Y6Pmkd38AwAA//8DAOlDi6BSEwAA + H4sIAKSBklgAA+RYTW/jNhC951cYvjOyvUHjDRSlBRZFe2gvu9lDLwElji0m + FKnyw7H76zuUKFmKqCQ97GKBAjlYM4/DmeFw5jHp3bESiwNow5W8Xa4vV8sF + yEIxLve3y/svv5Lt8i67SK2m0tDCIiq7WCxSzrLrx8enLVTXaYIfXmYstc5k + xuUVtxbYw07pBwPWCqhA2jQJAI+1pxoyQwWkSfPTywqnNe59Itwogi5Adv/5 + U5pMxR5MK+Wkza5Wl6tVmoQvr6hAFyWVltCi8EKC3hkLVa4EuhDTNr67nER0 + C8nF7dJqB8uktU7Rln4XVGmGyIii0EAxPYTahY/9dsnw0/IKltlmtb4mqw3+ + fVmtbq6ubz5s/sIM9Aua9a5m/239eUHIs7EKI/AfzVG+9BCFO66NJZJWEFEK + Oq8rVFVTeYpooKJcROTPkBtuY7bqUsmYfEePk6Qmw6jSnAuBFfydIzRWA2BN + MKbBmFgKjhYk8ycxCxGqoILbmHkNe7x+sTwpvFmivRsfr9YrvJJDUec21qk+ + zUfVqv0KQkVd0s27UB/eQkmHh8KL6YENzghD2znJYpel15hQ7FRrehopMZ+D + 9hQzUlNtOabj3IxerIgZp86WSvN/3jY/MJtTW5RRTMnr+n9Zkq8UyA9Ti8PT + Cf2R7DgIZkItHAwBrZUmmKNaSQPR0BrcIPQxOvsDB9WrgM7E+NRegH5vrbyK + acI4HKb7T4Ueusfx8ExPqHmEtspx4pjpwaa1VgXuhnnobgdt4I2ln7afrj/+ + hr3nNdDYytiV9crP8jntzEqLFZz9UqPmACy6ukE0qWWMe08w+VPYJNaD4oU/ + oB0ePK7A2slBTzPiPBPAXdpxP4Oy9EhajhJVwRGqupvmuVICqFxmOyqM50c9 + oGMPGAUpqGahxK16gtgdzLlEfrTebLe+2cphH7nK1tvtOk3CR7gqaJI0bOwr + NxRrpf/uWkXNdXuUlZK2zNabNJkIJ9gTUI3EZLMagRtp2DdMbuIbTcMw7z+f + 5/lZevayVKJJdrx98IrugTgtstLa2twkCTXYos1lrimX/tqEer/EvpnU9OQ7 + 90MFWKvsQai9Sg4Y/2Ut93cgD1wr6QG3hkqWqyPS3d5+6HUaaoo88k/ly6/9 + 3WpKoMKW6DFSWfkk1bNMk4GsBTHIuT3r28+gchoPDmtw74RncAPUS00/CDw1 + xVl3hg5kwV960koMEJ0gpM8Yh60QR5l8OmNG0nFrVTvitVQWkPntptIuT4q5 + oqHc563PshbkJP/bQbhHKMbMc+zEkyvlLyjIShHDnmYuTq8PBHF8ccJzhZQc + 60yfRgSgH54NAtBQOBF/25Boo6Kq30m+e3xvITyDzvxi+DJqEHOPmzZDBklu + X8o/d28bX8xI9U3H672rA9piFDYqyGjN0aWpvA04mUb8jZPwnsfij5WSXhIK + p50CgsaZoctNoXk9yxwH+r5rN7SY1MhUFCNIzojPbrS/j5DolrZRLLr8Yh8/ + CglOvQjtZdw0Vziqg9aK6lr3TAeee7hhz5z6NjaKlNI/+DGumVvd69tpiK9w + CVOreOYHP753AHOD12+rnkl7mhMtpiF32rSsnoHFt6vpuvJIFT+bwZMgvv0Y + M/kfxzvhcPQJwGmk42745xFWKhLZmEFXFBHGjycyE7uPvHYWYqURxijhEomp + a59Ynjq0XffBd900mQONqd0g0DEDHLK7WdDbtho++JatnjTaElsKwevl6w7Q + 9Z0aZ2zUPLKLfwEAAP//AwDC5iYDUhMAAA== http_version: - recorded_at: Mon, 24 Oct 2016 23:13:16 GMT + recorded_at: Thu, 02 Feb 2017 00:47:32 GMT - request: method: put - uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/transactions/nq934wg7/settle + uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/transactions/7jjk8em7/settle body: encoding: UTF-8 string: '' @@ -111,7 +111,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.68.1 + - Braintree Ruby Gem 2.72.0 X-Apiversion: - '4' Authorization: @@ -124,7 +124,7 @@ http_interactions: message: OK headers: Date: - - Mon, 24 Oct 2016 23:13:20 GMT + - Thu, 02 Feb 2017 00:47:33 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -145,54 +145,54 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"a95ab521f52deb66d19aaaad57590510" + - W/"5248e20d5053f009eea7e3b6ba800a97" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 9a7ac746-22a3-450c-b2d0-9921201ab07c + - 9293a239-3964-48db-aa84-c4354e416e3b X-Runtime: - - '1.911977' + - '0.694253' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAJCVDlgAA+RYS2/jNhC+51cYvjOyHWPXWShKCxQFemgvu+mhF4MSxxYb - idSSlGP313coUq+IStzDFosWyCGa+TjkDOfx0fHjuSwWJ1CaS/GwXN+ulgsQ - mWRcHB+WT19+JrvlY3ITG0WFpplBVHKzWMScJeLr/d325fgxjvDDyrShptaJ - BmMKYHHkv63KXCpINC0gjpp/rSyrlcKtLoRrSXBHSJ4+/xRHU7EF01LWwiTb - 1e1qFUf+yypKUFlOhSE0y6yQ4GG0gTKVhYmjkLY5ap2SgG4hePGwNKqGZeSs - U7SlroJKxRAZUGQKqAFGqFlY3x+WDD8NL2GZbFbrD2S9Ipvtl83dpzX+ffwD - I9AtaNbXFbt+/T2u7xf4OGsj0QP70dzc6xOi8MCVNkTQEgLKgs7rMllWVFwC - GigpLwLyF0g1NyFbVS5FSH6g50lQo6FXccqLAhP2X/ZQGwWAOcGYAq1DITgb - EMzexCykkBktuAmZV3DEagvFSWJlFa427rfrFVbgUNQeG/NUXea9cmq7gtCi - yunmKtTdeyhR46XwbHphgztC1w61YKFi6TTaJztVil5GSoznoBuFjFRUGY7h - cJ2oBCzY8YqQcVqbXCr+1/vmB2ZTarLcNpW+Evdt99nvsAUGoI2JnFfV/zJj - 38if7yZVh7fj2yc5cCiY9qly0gSUkopgjCopNARda3AD18fo5FecY28CWhPj - W3sF+sVZeRPTuHE6TfefCi30iNPjhV5Q8ye4IsCBpKcXG1dKZrgbxqEtHtrA - G0ur3d2HLe7xJmhsZXyU9cqO+jntzEqDGZz8WKHmZCnIHKIJLWPcngSDP4VN - fD1JntkLOuDF4wrMnRTUNCK1JQq4i2MDMyhDz8RRmKAKzlBW7bBPpSyAimVy - oIW29KkDtOQCvSAZVcynuJHPEKrBlAukT+vNbmd7sRj2kW2y3u3WceQ/fKmg - SdKQtd+5ppgr3XfbKiqu3FWWUpg8WW/iaCKcYC9AFXbLzWoEbqR+Xz/YiW00 - Dd98+tyP+17anzKXRRPscPvgJT0CqVWR5MZU+lMUUY1tWd+minJhy8bn+y32 - zaiiF9ut9yVgrrJ9IY8yOqH/t5U4PoI4cSWFBTxoKlgqz0h+O/u+1ymoKLb5 - 36RNP/e/0+RAC5PjiZHpimchX0QcDWQOxCDlpte7T6+qFV4c5uCxLizBG6Be - a7pBYJkrjsIeOpD589KLksUA0Qp8+LSusRXi+BLPPWYkHbdWeSBWS0UGid1u - Km3jJFmdNYy837qXOVAt+NcafB2hGCPPsRNPSsoWKIhSEs2eZwqn03v+OC4c - /3ghOcc8U5cRP+iGZ4MANORvxFYb8nBUlNUV3HyH3LzDdxb8K6mnH8OHU4OY - e/u4CGnkwF0q/9CSD5vM+BLQLe23Rx2wGi2xUUFCK45Hmsqdw9HU428cBHyW - ldxgAu8PUu178vTfDsn9myGZvqavi8C0RMIO/xNvO4kvEzfzChqmyXWqM8Wr - WRo90HczqnkjkAp5mWQEqSixgQtOsxESj6VMEItHfrWPHfwEZ3zgDcC4bhpW - UAfOimwH1cy8mXvF4oSYnm1sFAm0/fUD/ZrpYZ3ezf6cCgFTq3j5J0tWDgBz - NMNuK1+Iu82JFsOQ1kq7dwsDgw953c6gkSp8N4NHT3j7MWbyg8+VcDjbAODs - VeFj2LciZirS9pDBOssC7xu8kRnfredVbSCUGp40EC6QhtfuvWmJkpsxeztj - 4mgONCayA0fHfHfIZWdB79tq2O97tjqKbHJsoATLy+Yd4NEPchyxUfNIbv4G - AAD//wMAbvNZdk4UAAA= + H4sIAKWBklgAA+RYy27rNhDd5ysM7xnZTtA4gaK0wEXRLtrNfSy6MShxbDGR + SJWkHLtf36FIvSIqcRctihbIIpo5HHKG8zh0/HQqi8URlOZSPC7X16vlAkQm + GReHx+XXLz+S7fIpuYqNokLTzCAquVosYs6Su+fnly2Ud3GEH1amDTW1TjQY + UwCLI/9tVeZcQaJpAXHU/GtlWa0UbnUmXEuCO0Ly9fOnOJqKLZiWshYmuV1d + r1Zx5L+sogSV5VQYQrPMCgkeRhsoU1mYOAppm6PWKQnoFoIXj0ujalhGzjpF + W+oiqFQMkQFFpoAaYISahfX9ccnw0/ASlslmtb4jqw3+fVmtHm7vHm42v2EE + ugXN+rpil6+/wfX9Ah9nbSR6YD+am3t7QhTuudKGCFpCQFnQeV0my4qKc0AD + JeVFQP4KqeYmZKvKpQjJ9/Q0CWo09CpOeVFgwv7DHmqjADAnGFOgdSgEJwOC + 2ZuYhRQyowU3IfMKDlhtoThJrKzC1cb97XqFFTgUtcfGPFXnea+c2q4gtKhy + urkIdfMRStR4KTybXtjgjtC1fS1YqFg6jfbJTpWi55ES4znoRiEjFVWGYzhc + JyoBC3a8ImSc1iaXiv/xsfmB2ZSaLLdNpavE9a7tPrt7bIEBaGMi51X1v8zY + d/LnX5Oqw9vx7ZPsORRM+1Q5agJKSUUwRpUUGoKuNbiB62N08gvOsXcBrYnx + rb0B/eysvItp3Dgep/tPhRZ6wOnxSs+oeQZXBDiQ9PRi40rJDHfDOLTFQxt4 + Y+m77ae7+5+wNb0HGlsZH2W9sqN+Tjuz0mAGJz9UqDlaCjKHaELLGLcnweBP + YRNfj5Jn9oL2ePG4AnMnBTWNSG2JAu7i2MAMytATcRQmqIITlFU77FMpC6Bi + mexpoS196gAtuUAvSEYV8ylu5AuEajDlAunTerPd2l4shn3kNllvt+s48h++ + VNAkacjaN64p5kr33baKiit3laUUJk/WmziaCCfYM1CF3XKzGoEbqd/XD3Zi + G03DN79+7sd9L+1PmcuiCXa4ffCSHoDUqkhyYyr9EEVUY1vW16miXNiy8fl+ + jX0zqujZdutdCZirbFfIg4yO6P91JQ5PII5cSWEBj5oKlsoTkt/Ovu91CiqK + bf5XadPP/e80OdDC5HhiZLriRchXEUcDmQMxSLnp9e7Tq2qFF4c5eKgLS/AG + qLeabhBY5oqjsIcOZP689KxkMUC0Ah8+rWtshTi+xEuPGUnHrVXuidVSkUFi + t5tK2zhJVmcNI++37mUOVAv+ew2+jlCMkefYiSclZQsURCmJZi8zhdPpPX8c + F45/vJCcY56p84gfdMOzQQAa8jdiqw15OCrK6kJu3+E7C/6V1NOP4cOpQcy9 + fVyENHLgLpW/b8mHTWZ8CeiW9tujDliNltioIKEVxyNN5c7haOrx3xwEfJaV + 3GAC7/ZS7Xry9N8Oyc27IZm+pi+LwLREwg7/FW87iS8TN/MKGqbJdaozxatZ + Gj3QdzOqeSOQCnmZZASpKLGBC06zERKPpUwQi0d+s48d/ARnfOANwLhuGlZQ + B86KbAfVzLyZe8XihJiebWwUCbT99QP9mulhnd7N/pwKAVOrePlHS1b2AHM0 + w24rX4m7zYkWw5DWSrt3CwODD3ndzqCRKnw3g0dPePsxZvKDz4VwONkA4OxV + 4WPYtyJmKtL2kME6ywLvG7yRGd+t51VtIJQanjQQLpCG1+69aYmSmzE7O2Pi + aA40JrIDR8d8d8hlZ0Ef22rY70e2OopscmygBMvL5h3g0fdyHLFR80iu/gQA + AP//AwDMwJMvThQAAA== http_version: - recorded_at: Mon, 24 Oct 2016 23:13:19 GMT + recorded_at: Thu, 02 Feb 2017 00:47:33 GMT - request: method: post - uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/transactions/nq934wg7/refund + uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/transactions/7jjk8em7/refund body: encoding: UTF-8 string: | @@ -206,7 +206,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.68.1 + - Braintree Ruby Gem 2.72.0 X-Apiversion: - '4' Authorization: @@ -219,7 +219,7 @@ http_interactions: message: Created headers: Date: - - Mon, 24 Oct 2016 23:13:20 GMT + - Thu, 02 Feb 2017 00:47:34 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -240,48 +240,48 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"ee960b65af2c1c61489e9a7d5fa200ea" + - W/"fca90bea9117cf5f722881d813625162" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - aac55562-9f3e-4303-a008-4b11454bb9c6 + - a10ab427-96f1-440d-9756-ea9010e81963 X-Runtime: - - '0.302020' + - '0.434026' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAJCVDlgAA+RYTW/jNhC951cYvjOynWCTDRSlBYoeiwK76aGXgJLGFhuJ - VEjKsfvr+6hvRVSSvRQFerNmHoczw+HMo8OHU5GvjqSNUPJ+vb3crFckE5UK - ebhfP37/ld2uH6KL0GouDU8sUNHFahWKNCoPp+3NzcuXMMCHkxnLbWUiU8WF - sJbSp73ST4aszakgacOgBTisPZcUJZpSAXn94aRJpTV2PzNhFIMTFD1++yUM - 5mIH5oWqpI12m8vNJgzaL6coSCcZl5bxJHFCBv+MpSJWOTbzaWvvq5h5dCsp - 8vu11RWtg8Y6hy39KajSKZAeBQLnSBDjduViv1+n+LSioDXC2X5h2w3bXX/f - Xd1tr+52mz+RgX5Bvb4q0x9bPyxo82ysQgTuoz7Mtx5CuBfaWCZ5QR5lzpd1 - iSpKLs8eDRVc5B75K8VGWJ+tMlPSJ9/z0yypwTiqMBZ5jhr+lyM0VhOhJtJU - kzG+FJwsydSdxCIkVwnPhfWZ13TABfTlSeFu5c3d+Hq93dyEwVjUuY061efl - qBq1W8F4XmZ89ynU1UcoWeFQRDI/sNEZIbR9JVPfZek1pi12rjU/T5TI56hB - uRstX75eXb8ekIclhFtdcm0FkjQ0qTco35a8spnS4u+ZyZnnI7Mxt0nmxWSi - LP+XhfpO2fxnKnR8Om3XZHtBeWraWjgaRlorzZCjUklD3tBq3Cj0KTr6GePr - XUBnYnpqfivvYuowjsf5yrnQQQ8YGq/8DM1f1FQ55pCZH2xYapVgN+Shux28 - hnuTMYCnO243mx361oJ2YaVFoUa/N3JKvctrSJ3CFHQDbiHJc9jMzaMSiTuI - PQ4YK1AjMel5MJXjAdilGfYLKMtPrGEoXhWdqCi7WR4rlROX62jPc0NgRz2g - 4w6IgiVcp20pW/VMvrsWCxldb7a721vXauW4X1xH29vbbRi0H+2VgElWc7E/ - hOGoif67awml0M25FkraLNriuGbCGfZMXIOW7DYTcC1t923nNnMNpWaYj9+G - aT5IBy8zldfJ9rcJUfADsUrnUWZtae6CgKM2rLmMNRfSXY+2ri/RH4OSn12H - fioIhZs+5eqggiPivyzl4YHkUWglHeDecJnG6gS629tve5qmkmOi/KZc+TW/ - G01GPLcZPAaRlc9SvcowGMkaUEqxsIO++WxVlcbBoQYPVe742wj1VtM3fEdM - MdMG6EjW+svPWuUjRCdo02dMhZaHkSWfB8xEOm2has+clsuEIrfdXNrlSaVV - UhPuYetB1oAqKV4qau8RxMi8QMedXSl3QUkWipn0eeHi9PqWHk4vTvtcYZlA - nenzZND3Q7JGEAy1J+JuG2g2FEX5Serd43sLP/BOqvFLD50mXwaEty/sn7p3 - jitt0H7TcXzn+IisGIW2RREvBRycy5vwg7fx95I2Z00DzLmf/FSxSbQoF8nR - SN83rJoPshLDWKUM/IO57Hpb2wQJt7T1YuHym33cFGBo+B5mlwpTV69XR40V - 1XWtheaz9GJBu5j7NjUK1uReuohr/mDEU1PS3ALO9+im1J5oab64LdQra05u - pkXIcaVNQ1JTsnigma75TFT+cxgxXP/2U8zsIf9JOJ1cAtB0td8Nx/BRleBl - PoNVkngILLK/ELuLvKws+cqgnRZMSPCsqnkxDH9lPLnmEgZLoCmFGQU6ZTpj - ErMI+thWTXs+stVzI5uhfTBcJVeDBNf3apqxSaOILv4BAAD//wMAUWpTTDkS - AAA= + H4sIAKaBklgAA+RYTW/jNhC951cYvjOSvQHiBorSAkWPRYHd9NBLQElji4lE + qiTl2P31fdSXpYhKspdFgQI5RDOPw5nhcObR0cOpLFZH0kYoeb/eXIfrFclU + ZUIe7teP335ju/VDfBVZzaXhqQUqvlqtIpHFhzQ7b3n4GgX4cDJjua1NbOqk + FNZS9rRX+smQtQWVJG0UdACHteeK4lRTJiBvPpw0rbXG7mcmjGJwguLHr79G + wVzswLxUtbTxNrwOwyjovpyiJJ3mXFrG09QJGfwzlspEFdjMp228rxPm0a2k + KO7XVte0DlrrHLb0p6BKZ0B6FAicI0GM25WL/X6d4dOKktYIZ3PLwi3+voXh + 3c3t3Zebv5CBYUGzvq6y71t/WdDl2ViFCNxHc5hvPYRwL7SxTPKSPMqCL+tS + VVZcnj0aKrkoPPJXSoywPltVrqRPvuenWVKDcVRRIooCNfyDIzRWE6EmskyT + Mb4UnCzJzJ3EIqRQKS+E9ZnXdMAF9OVJ4W4V7d346WYT3kbBWNS7jTrV5+Wo + WrVbwXhR5Xz7KdSXj1CyxqGIdH5gozNCaPtaZr7LMmhMV+xca36eKJHPUYNy + N/r2+fllRyXysIRwqyuurUCSLk3qDcq3Ja9trrT4Z2Zy5vnIbMJtmnsxuaiq + /2WhvlM2/5kKHZ9O1zXZXlCRma4WjoaR1koz5KhS0pA3tAY3Cn2Kjn/B+HoX + 0JuYnprfyruYJozjcb5yLnTQA4bGKz9D80xtlWMOmfnBRpVWKXZDHvrbwRu4 + NxkX8HTHTRhu0bcWtAsrLQo1/qOVU+Zd3kCaFGagG3ALSZ7DZm4elUjdQexx + wFiBGklIz4OpHQ/ALu2wX0BZfmItQ/Gq6ERl1c/yRKmCuFzHe14YAjsaAD13 + QBQs5TrrStmqF/LdtUTI+CbcbHc712rluF/cxJvdbhMF3Ud3JWCSNVzsT2E4 + amL47ltCJXR7rqWSNo83OK6ZcIY9E9egJdtwAm6k3b7d3GauoTQM8/HrZZpf + pBcvc1U0yfa3CVHyA7FaF3FubWXugoCjNqy5TjQX0l2Prq6v0R+Dip9dh34q + CYWbPRXqoIIj4r+u5OGB5FFoJR3g3nCZJeoEujvY73qapopjovyuXPm1/7ea + nHhhc3gMIitfpHqVUTCStaCMEmEv+vazU9UaB4caPNSF428j1FvN0PAdMcVM + u0BHss5fftaqGCF6QZc+Y2q0PIws+XLBTKTTFqr2zGm5TCl2282lfZ5UVqcN + 4b5sfZG1oFqKv2vq7hHEyLxAx51dKXdBSZaKmexl4eIM+o4eTi9O91xhuUCd + 6fNk0A9DskEQDHUn4m4baDYUZfVJ6j3gBwvf8U5q8EsPnTZfBoR3KOyf+3eO + K23QftNzfOf4iKwYhbZFMa8EHJzL2/CDt/EPki5nbQMsuJ/81IlJtagWydFI + PzSshg+yCsNYZQz8g7nselvbBAm3tPVi4fKbfdwUYGj4HmaXCdNUr1dHrRXV + d62F5rP0YkG7mPs2NQrW5F66iGv+YMRTU9LcAs736KbUnmhpvrgt1CtrT26m + RchJrU1LUjOyeKCZvvlMVP5zGDFc//ZTzOwh/0k4nVwC0HS13w3H8FGV4GU+ + g3Waeggssr8Qu4u8qi35yqCbFkxI8Ky6fTFcfsp4cs0lCpZAUwozCnTKdMYk + ZhH0sa2G9nxka+BGNkf7YLhKrgYJru/VNGOTRhFf/QsAAP//AwC1DBCcORIA + AA== http_version: - recorded_at: Mon, 24 Oct 2016 23:13:19 GMT + recorded_at: Thu, 02 Feb 2017 00:47:34 GMT recorded_with: VCR 3.0.3 diff --git a/spec/fixtures/cassettes/gateway/purchase.yml b/spec/fixtures/cassettes/gateway/purchase.yml index 4b7304a8..ea427837 100644 --- a/spec/fixtures/cassettes/gateway/purchase.yml +++ b/spec/fixtures/cassettes/gateway/purchase.yml @@ -23,7 +23,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.69.1 + - Braintree Ruby Gem 2.72.0 X-Apiversion: - '4' Authorization: @@ -36,7 +36,7 @@ http_interactions: message: Created headers: Date: - - Tue, 10 Jan 2017 17:33:45 GMT + - Thu, 02 Feb 2017 00:47:28 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -57,49 +57,49 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"198bfe4bfaee7c693315251baec4ca03" + - W/"09d2e9ce39b6d565f4e78e6cfba0d73f" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - de393fb7-38b7-4c14-85de-55f4761a7b73 + - 3ec6c90d-3e5b-458a-8ec0-8506c73a5850 X-Runtime: - - '0.731612' + - '0.630853' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 http_version: - recorded_at: Tue, 10 Jan 2017 17:33:45 GMT + recorded_at: Thu, 02 Feb 2017 00:47:28 GMT recorded_with: VCR 3.0.3 diff --git a/spec/fixtures/cassettes/gateway/void.yml b/spec/fixtures/cassettes/gateway/void.yml index 3e473830..39ddbb2e 100644 --- a/spec/fixtures/cassettes/gateway/void.yml +++ b/spec/fixtures/cassettes/gateway/void.yml @@ -18,7 +18,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.68.1 + - Braintree Ruby Gem 2.72.0 X-Apiversion: - '4' Authorization: @@ -31,7 +31,7 @@ http_interactions: message: Created headers: Date: - - Mon, 24 Oct 2016 23:13:21 GMT + - Thu, 02 Feb 2017 00:47:35 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -52,52 +52,53 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"b234c56c072467a4f51eb8080cec3a11" + - W/"f2db8929c529a1506d5e0a9c34a8cf71" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - d81aa573-4ba4-48d6-afe7-f715b788bcaa + - 33876c8e-3f95-4033-a99a-61a74654f437 X-Runtime: - - '0.321506' + - '0.313176' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 + AA== http_version: - recorded_at: Mon, 24 Oct 2016 23:13:20 GMT + recorded_at: Thu, 02 Feb 2017 00:47:35 GMT - request: method: put - uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/transactions/kad8xtva/void + uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/transactions/d5y5rx50/void body: encoding: UTF-8 string: '' @@ -107,7 +108,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.68.1 + - Braintree Ruby Gem 2.72.0 X-Apiversion: - '4' Authorization: @@ -120,7 +121,7 @@ http_interactions: message: OK headers: Date: - - Mon, 24 Oct 2016 23:13:22 GMT + - Thu, 02 Feb 2017 00:47:35 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -141,48 +142,48 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"e85b6a4692f50438f56e4be35336e8f9" + - W/"e13fcc8e0d45b8668414b7087f2a1a3d" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 2f764db9-464a-48ee-97c3-39c14d95c0ac + - 307eb6d2-4a28-40d3-8f75-d15f60c63e88 X-Runtime: - - '0.191875' + - '0.317305' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAJKVDlgAA+RYS2/jNhC+51cYvjOynKDrDWSlBYoCRbG97GYPewkocWyx - oUiVpBy7v75DiXpFVJIeWizQmznzacgZzuOjk/tzKVYn0IYruV/H15v1CmSu - GJfH/frhyy9kt75PrxKrqTQ0t4hKr1arhLP0ibLd2Z5oEuHCyYyltjbpSXEG - LIn80mnspYLUUAFJ1Px0srzWGne6EG4UwQ0hffj8cxLNxQ5MS1VLm95urjeb - JPIrpyhB5wWVltA8d0KCZzEWykwJm0QhbXPSOiMB3UpysV9bXcM6aq1TtKXf - BVWaITKgyDVQC4xQu3K+79cMl5aXsE63m/gHEm/I9vbL9uYuvrnbxt8wAv0H - zfd1xf7Z98MHPs7GKvTALZqLe3lCFB64NpZIWkJAKeiyLldlReUloIGSchGQ - P0NmuA3ZqgolQ/IDPc+CGo29SjIuBObrf+yhsRoAc4IxDcaEQnC2IJm7iUWI - UDkV3IbMazhisYXipLCyRFsbH2/jzYckGou6Y2Oe6suyV63afUGoqAq6fRfq - 5i2UrPFSeD6/sNEdoWuHWrJQsfQa45Odak0vEyXGc9SMQkYqqi3HcBiwVkAJ - WLDTL0LGaW0Lpflfb5sfmc2ozYsgpuBV9b9MyVcS5LvJxfHt+P5IDhwEMz4X - ToaA1koTjFGlpIGgaw1u5PoUnX7CQfUqoDMxvbUXoF9bK69iGjdOp/n+c6GD - HnE8PNMLav6ANstx4pj5xSaVVjnuhnHoqoM28MbSh9++fvy0w97zGmhqZXqU - eONm+ZJ24UuLGZz+VKHm5DjGEqIJLWPcnQSDP4fNfEXWkrsLOuDF4xeYOxno - eURqxwRwl3bcL6AsPZOWowRVcIay6qZ5ppQAKtfpgQrj+FEP6NgDekFyqplP - caueIFSDGZfIj+LtbuearRz3kds03u3iJPILXypokjRs7Cs3SOKGddcqKq7b - qyyVtEUab5NoJpxhL0A1EpPtZgJupH5fP7mJazQNn3z4PMzzQTqcslCiCXa4 - ffCSHoHUWqSFtZW5iyJqsEWb60xTLl3Z+Hy/xr4ZVfTiOvdjCZir7FGoo4pO - 6P91JY/3IE9cK+kAe0Mly9QZyW1v3/c6DRVFHvm7cunX/m41BVBhCzwxUln5 - JNWzTKKRrAUxyLgd9O3Sq2qNF4c5eKyFY3Aj1EtNPwgcNcVZN0BHMn9eetFK - jBCdwIfPmBpbIY4y+TRgJtJpa1UH4rRU5pC67ebSLk6K1XlDuYetB1kLqiX/ - swZfRyjGyHPsxLOScgUKslTEsKeFwun1niBOC8c/TkjBMc/0ZUIA+uHZIAAN - +Rtx1YZEGxVl9U7y3eN7C/4ZNPCL8cuoQSw9btoIGSS5fSr/2L1tXDIj1Tcd - r3dHHdEWo7BRQUorjkeay1uHo7nH/3IQ5k/D7ysAvcSnSdvzBQ3zwDozuebV - Ik8c6fse3ZBgUiEvUYwgFSMulsFuPkHisbQNYvHIL/Zxg4/gjAuQXMZNU7BB - HbRWVNeoF/rt0jMNO+T8bFOjSCDd8x79WqjhXt/OPnxzS5hbxTs/uWF9AFga - s25b9Uza25xpMQxZrU3L4RlYfKmargdPVOG7GT0AwttPMbN/NN4Jh7MLAM4e - HT6GewxhpiJtDRms8zzA7/FGFnx3nle1hVBq+KFJuEQaWrcPKkcU2h776Hps - Ei2BpkRu5OiU74253CLobVsN+3vLVk8RbYEthWB5ubwDPPpBTSM2aR7p1d8A - AAD//wMAStDWLi4TAAA= + H4sIAKeBklgAA+RYXW/sNBB9v79ite9usntbtVRpCgKBQICE7i0PvFROPLsx + dWxjO9tdfj3jxMkmjdNWQkJXQurDZuZ47BnPx3Gz+2MtVgcwlit5t95cpOsV + yFIxLvd364fP35Ob9X3+IXOGSktLh6j8w2qVcZazq9OVOV6lWYIfXmYddY3N + D4ozYFkSPr3GnTTklgrIkvanl5WNMbjTiXCrCG4I+cOn77JkLvZgWqtGuvwy + vUhxv/DlFTWYsqLSEVqWXkjwLNZBXSjhsiSmbU/aFCSiW0ku7tbONLBOOusU + bZl3QZVhiIwoSgPUASPUrbzvd2uGn47XsM636eaapFv8+5ymt5fXtx8v/8AI + DAva9Y1m719/hevPC0KcrVPogf9oL+7lCVG448Y6ImkNEaWgy7pS1ZrKU0QD + NeUiIn+GwnIXs6UrJWPyHT3OgpqMvcoKLgTm63/soXUGAHOCMQPWxkJwdCCZ + v4lFiFAlFdzFzBvYY7HF4qSwskRXG19dbtLrLBmL+mNjnprTsled2q8gVOiK + bt+F+vgWSjZ4KbycX9jojtC1XSNZrFgGjQ3JTo2hp4kS4zlqRjEjmhrHMRwW + nBNQAxbsdEXMOG1cpQz/+23zI7MFdWUVxVRc6/9lSr6SIF9MLo5vJ/RHsuMg + mA25cLAEjFGGYIy0khairrW4ketTdP4LDqpXAb2J6a29AP3YWXkV07pxOMz3 + nws9dI/j4ZmeUPMndFmOE8fOLzbTRpW4G8ahrw7awltL19/+/MNvP2HveQ00 + tTI9yib1s3xJu7DSYQbn32jUHDzHWEK0oWWM+5Ng8Oewma/IWkp/QTu8eFyB + uVOAmUek8UwAd+nG/QLK0SPpOEpUBUeodT/NC6UEULnOd1RYz48GQM8e0AtS + UsNCijv1BLEaLLhEfrTZ3tz4ZivHfeQy39zcbLIkfIRSQZOkZWO/c0sxV4bv + vlVobrqrrJV0Vb7ZZslMOMOegBokJtt0Am6lYd8wuYlvNC2ffPh0nudn6fmU + lRJtsOPtg9d0D6QxIq+c0/Y2SajFFm0vCkO59GUT8v0C+2ai6cl37scaMFfZ + o1B7lRzQ/wst9/cgD9wo6QF3lkpWqCOS28F+6HUGNEUe+avy6df97jQVUOEq + PDFSWfkk1bPMkpGsAzEouDvru8+gagxeHObgvhGewY1QLzXDIPDUFGfdGTqS + hfPSk1FihOgFIXzWNtgKcZTJpzNmIp22VrUjXktlCbnfbi7t46RYU7aU+7z1 + WdaBGsn/aiDUEYox8hw78aykfIGCrBWx7GmhcAZ9IIjTwgmPE1JxzDNzmhCA + YXi2CEBD4UZ8tSHRRkWt30neB/xgITyDzvxi/DJqEUuPmy5CFknukMpf928b + n8xI9W3P6/1RR7TFKmxUkFPN8UhzeedwMvf43wfh6rUgzJ+GX1YABklIk67n + CxrngU1hS8P1Ik8c6Yce3ZJgopGXKEaQihEfy2g3nyDxWMZFsXjkF/v4wUdw + xkVILuO2LdioDjorqm/UC/126ZmGHXJ+tqlRJJD+eY9+LdTwoO9mH765Jcyt + 4p0f/LDeASyNWb+teibdbc60GIaiMbbj8AwcvlRt34MnqvjdjB4A8e2nmNl/ + NN4Jh6MPAM4eEz+GfwxhpiJtjRlsyjLC7/FGFnz3nuvGQSw1wtAkXCINbboH + lScKXY999D02S5ZAUyI3cnTK98ZcbhH0tq2W/b1la6CIrsKWQrC8fN4BHn2n + phGbNI/8wz8AAAD//wMAFxiTRi4TAAA= http_version: - recorded_at: Mon, 24 Oct 2016 23:13:20 GMT + recorded_at: Thu, 02 Feb 2017 00:47:35 GMT recorded_with: VCR 3.0.3 diff --git a/spec/fixtures/cassettes/paypal/checkout.yml b/spec/fixtures/cassettes/paypal/checkout.yml index 2da24ffb..c8798087 100644 --- a/spec/fixtures/cassettes/paypal/checkout.yml +++ b/spec/fixtures/cassettes/paypal/checkout.yml @@ -16,7 +16,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.68.1 + - Braintree Ruby Gem 2.72.0 X-Apiversion: - '4' Authorization: @@ -29,7 +29,7 @@ http_interactions: message: Created headers: Date: - - Fri, 28 Oct 2016 18:12:32 GMT + - Fri, 03 Feb 2017 21:18:10 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -50,48 +50,49 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"66427b04cf5c730187abd03b1b88c689" + - W/"56306efdce4a4cadb02357e216f7a481" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - ecfaf951-ed60-4da1-85a6-36d4e8433bdb + - 3945d6fb-1bd4-4a6f-9817-719175f5be57 X-Runtime: - - '0.110858' + - '0.153367' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIABCVE1gAA6RWX3ObOBB/76fI5L1XECVXZtJ0GhswGoNrYgToDSRSAxL4 - gg2GT38r3EuTm1ynM/fgycSsdle/f/j2y1mKq7546sq2+Xyt/6FdXxUNa3nZ - fP98He2c95+uv9y9u2WiLJrj+2NbF83du6ur2z4Tp+KuGDGiCZ6y2Dp5VTuu - F3jPk7DNDXwopKOp70MpThSRka3wIW+25ab0zv4khD99N9PJR3Tp1MFUG8EU - mTSOdH9iUyA9Y7MUIp1ETWMq/Co1g6rW/ThCVEZaiqIhnUgVVNDHtTXV49EN - Rho7Go3DxzTZWn719RyU2tlfaOPG2Z43y/bsV+3klx+Rv7Th83XcLL0n+Dv4 - zllX/wdSF0wGbRqbWoJE/W3HR+oy05etkUrNoLLTs2XA+A7OVHTgMe6yOHjM - EDG/xbqRyeNTseIVW/pjio5tLtMSMKlyZMos5oTJAe6PW74KBza1/Ro5Q/Zg - TjCvTqX1cS3xmMbixFdY0JjvuUuMNKlPKbKOm2qr+aN1BLyrzHWgxu8DA9d0 - qses4mW+4zKbSAs1Ve4KkTcKh/vD2kjPaxT0uaQHapAxTcJDjj7Oe0GfLneJ - 4mfyqkOePAwljU2UJRjqdXHhCz/v55VDmaLzAWq0LfQmCe6A9zJbhRpb+Tfr - 0doztz4x5Jyoi/tiYZZMOsB7CNyQBmYLjhxzLWGfXasFS7/PY9gJ7fdQM62n - t/D2+39mJjNeXudJZ2KIaEwnY77wbjy51/jqftqUn/o0CSaaQK9fYDnfIyFa - 5rx1Hr5fmAjmHfPx97iZ+8XmPl8J0HygsPzTa97o/eMe69g5pfHZ5K6o2G/O - +A9sykfgjLt7ha8dIVLxBIsQdknlWVCYD710CjXMdUz4dL96Nu8twwMz7rs0 - EZs01oXiNzJCkcegidX2oueLvrDq4dXOniHaBzUuaRXcELAtEdiN7IOz2Qkz - tjHaNq1Ol/snYn8ymA361MGrjjPwHV7tbItEFR6ZI7RdhPfhzvlWuEG1sb0x - RGHP7fAvOuFNthSBwlnlCJdOVZCX+H5V2hOF6xyZexazvh6sgS1AKw0BPeB7 - aihMlabDVz5UvNAE9Jfcd/TBBK9qPXetaeYUdEbJ/9HYpe4Nn4D3SJUhS+cL - cwCshzQens9RVwCfgbZ9MT9vSJcvlM7OXW5wT+0OfGmsIQI4gXvRA5PWCfx0 - 4rbZ7yTROLLGbPRuqHQ6hiLwDTyTYoQ8Oiodqp1ySFTg80QfZqzgOZxzSb17 - 9iVkgKSg7UDNeenn5SsdSH3PQCeQn5CJ0Ae0qeoz2DeLzWYbc3Vmnss0AvrH - HY2hN/TisdrtZ/Zu46DKDXUPUasd2b/0BxqHXmZVRGLKtaCnbqT4JJG2nf0A - OB5yiUGXxMmlU0LGQZ+DBOwmpfcXmXPZvXrbWzDrRw6o+1mSlnP2DEpjEXjm - 4vNAg1zT2Vyjg8e7i0fU/itsbpFVA7Y3niC7WROQwQx4SA2xzFE4+4uQwFbP - Xu0FuQz5AO8NMs48/eTjZb4CnpBXgO8rLcI7BTg8QqZ0oK8D7A/cBjpb3fes - CQW1TcFXvGfyOOe+p7SDbLX3ETSrqXdMmuD6kmu6KBaYPyba59sPl/f+u9sP - r38R/A0AAP//AwDvfcy0SAgAAA== + H4sIAJLzlFgAA6RWXW+jOBR9n19R9X12wJRuI3VmNPmAYAVnIMSA38BOC8SG + bJMQ4NfvNd3th9QdjbQPKBG+vvf4nHOvuf/eKXnV7p6OZVN/vTb/MK6vdjVv + RFk/fr3eRs7nu+vv3z7dc1nu6tPnU7Pf1d8+XV3dt5k8777teoxYgocsnpy9 + qulXM1yIJGxyCx92yjH0+1DJM0O050t8yOugXJdel6qF4buOZJUsfTcw02Hf + +dHCWLteT5B/QwbPJkNww6JgSFGA2PzxZj0P+rUb7lns22Q+LUhFZBqniLie + 6UdCPrikZ7FjsDh8SJNg4lc/OtIbF7+Exwx6P2q69bzp/NlN5895R4aF5Vf+ + kz//cfGdzoTfnihTckWaNLaNBMn9z0j0zOW2rxorVYbF1NHM5oSLCPZU7CJi + fMxi8pAhav+MTStTp6fdUlR87vcpOjW5SkvgpMqRrbJYUK4ucH7ciGV44UPT + rpBzyTb2APX2qZrcrBTu01iexRJLFotCuNRKk/05RZPTugoMv5+cgO8qcx2I + 8Vti4T0b9n1WiTKPhMoG2kBMlbtS5rXmYXpYWWm3QqTNFTswi/ZpEh5ydDPi + gjzH3KVan8GrDnmyuZQstlGWYIg35bNe+AWfV17KFHUHiDECyE0TfATdy2wZ + Gnzp3676ScHd/Zkj58xc3O5mdsmVA7qHoA2tobYUyLFXCvBEjUHmfpvHgAkV + BcQMq+Ejvv3235rJyJd39JQzcEQNbtI+n3m3nioMsZwO6/KuTRMysARy/YLL + 8RwJNTLno/3wfmYjqHfK+9/TZswX20W+lOB5orn806s/yP3POVaxc07jzhau + rPhv1vgPbsoH0Ey4heZ3sUW0EgmWIWBJVScZ1IdcJoMY7jo2PMdfrY24VXjg + 1vSYJnKdxqbU+m6tUOYxeGIZPPv52V9Y5/D2TsERa8kel6wit1TKlErsbhcH + Zx1JO15gFNSNyebFE13cWXwB/jShVx3nIiK8jBYTuq1wzx1pRFtchJHzc+eS + ar3w+hCFrViEf7EBr7O5JJpnPUeEcqodfcvvD+09uXOdE3c7OfprM7nwGXil + puAHPGWW5lR7OnzXh1oXloD/kumRbWzoVaMV7mQYNQWfMfp/PPYc90GfQO/R + KkMTU8zsC3B9SePLyz7mStCTGMGb+nlNj/lM+6w75pbwNHbQy+A1laAJnIsd + uJqcoZ/OYmG3kaKGQJM+671bppwjR1voG1hTsod5dNI+1JhyxBToeWabkStY + h30u3UcvfQkzQDHwNtF13vbz/J0PlFlw8AnMT5iJkAe8qeMzwJvFdh3EQu8Z + 63KDgv/xkcXvcr/OtoVTARfmS+6awFw3AWtnjLzCHONwltSSmKPJPEfh6FNK + ycKrDTgnaaGm5v9dL7zy8DrnN/F4J1lchfU6wn8RhE8EsScSP44eAD6A0zvt + l5Y9z/OCL8ErdFrsNt4t3IGDcB1DJL6OOeWIPD3PyRF/v9uSlrlbvUa3vZ5d + xOQ16KWIHaDJHni/9SSNQu3Vd7hCze2BKSl5OfL7sraqSZGrsMytR623FFq/ + /u2s3Z75a8+eM8APuAeRTC9wN+s7cg2+tOD/Ewd/xHCPZwkpNO48duA8Wnun + ZyMmB3R51Pv3EFPlFgM8WDwkxtf7L8/fAZ/uv7z/QvgbAAD//wMAOBgg1lgI + AAA= http_version: - recorded_at: Fri, 28 Oct 2016 18:12:38 GMT + recorded_at: Fri, 03 Feb 2017 21:18:10 GMT - request: method: post uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/client_token @@ -108,7 +109,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.68.1 + - Braintree Ruby Gem 2.72.0 X-Apiversion: - '4' Authorization: @@ -121,7 +122,7 @@ http_interactions: message: Created headers: Date: - - Fri, 28 Oct 2016 18:12:34 GMT + - Fri, 03 Feb 2017 21:18:12 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -142,48 +143,48 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"794372140cdef51e5810697f3455f5f0" + - W/"bea6269ef3db70d7a284c81be1e74786" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 420c3010-0c34-426f-92ef-b65bbc8ecd32 + - 05fe872f-14f8-4da3-821e-829631cccb90 X-Runtime: - - '0.097862' + - '0.096597' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIABKVE1gAA6RW0XKbOBR971dk8t4tiJCtZ9J2EhswGiPXBAvQG0ikBiTw - Bhsbvn6vcLdNdrKdzuxDJjNwde/ROecefPflrORVXzx3Zdt8ujb/MK6vioa3 - omy+fbreRu77j9dfPr+747IsmsP7Q1sXzed3V1d3fSaPxediwIgleMzi2dGv - 2mE1xzuRhG1u4X2hXEM/D5U8MkQHvsT7vNmU69I/BSNTQcwUU1SxRXBOI26Q - 0R9StbFJJCqy+AY1jp1WKYK6OhgfoG5rpsiFJ0SxqkYs2pxJRSSpwpJE9+aT - RwYWuwaLw6c02cyC6v5MSuMczI1h7W7O60V7Dqp2JPMbFESOESz4zXrx7TlY - 3J8C92zC/4EoU3JF2jS2jQTJ+mskBuZxO1CtlSrDYqozswXhIoIzFTuJGHdZ - TJ4yRO2vsWll6vBcLEXFF8GQokObq7QETqoc2SqLBeXqBPfHrViGJz62/Qq5 - p+zRHmFenarZzUrhIY3lUSyxZLHYCY9aaVIfUzQ7rKuNEQyzA/BdZZ4LNUFP - LFyzsR6ySpR5JFQ20hZqqtyTMm80Dw/7lZWeV4j0uWJ7ZtEhTcJ9jm4mXNCn - yz2q9Rn9ap8nj6eSxTbKEgz1przohX/g88tTmaLzHmqMDfSmCe5A9zJbhgZf - BrerYbbjXn3kyD0yD/fF3C65ckH3ELShDcyWArn2SgGeqDXIIujzGDCh3Q5q - xtX4Ft9B/8/MZOLL73zljhxRg5t0yOf+ra92hlg+jOvyY58mZGQJ9PoFl9M9 - Empk7lvn4fncRjDvkA+/p83UL7Z3+VKC54nm8k+/eaP393usYveYxmdbeLLi - vznjP7gpn0Az4e00v84W0UokWIaAJVVnyWA+9DIZ1HDPteGv+9W7CbcK99x6 - 6NJErtPYlFrfrRXKPAZPLDcXP1/8hXUPv3Z3HLGe1LhkFbmlUqZUYm/r7N11 - JO3YwWjTtCZb7J6p89HiDvjThF113ZOI8DJyZnRb4YG70oi2eBdG7tfCI9Xa - 8YcQhb1wwr/YiNfZQhLNs84RodyqoC/5vdfek4XnHrh3lpO/HmcnPgevNBT8 - gB+YpTnVng5f7aHWhSXgv+ShY4827KrRC282TpqCzxj9Px671L2xJ7B7tMrQ - zBRz+wRcn9L49OMc8yToSYzNi/l5Q7t8rn127nJL+Bo76GXwhkrQBO7F9lzN - jrBPR+HYfaSoIdBsyAb/lim342gLewPvlBwgjw7ahxpTjpgCPY/sceIK3sM5 - j9bRj72EDFAMvE30nJf7vHjlA2XuOPgE8hMyEfqAN3V9Bniz2G42sdBnprnc - oOB/3LEYekMvEWtsP7N3E5Mqt/Q9ZK0x8n/5DzwOveyq2MoxN0jPvK3Wk26N - zbQPwOM+Vxh8Sd1cuSVkHPTZK+Bu1H5/kTkX7NXbuwWzvueAvt9MsXLKnpP2 - 2BZ25rLnxIBcM/lUY8KOd5cd0fiX2N6gWQ3c3vqSRpMnIIM56JBacpGjcNov - Somj373CBbkM+QDfDTpMOv3U42W+Ap+QV8DvKy/CNwU0PECmdOCvPeAHbYnJ - lw89b0LJHFuKpei5Oky572vvIEfjPoBnDf2NSRNcX3LNlMUci6fE+HT34fLd - f3f34fUvgr8BAAD//wMAJ+j4AEgIAAA= + H4sIAJTzlFgAA6RW25KbOBB9z1dMzXs2IMLsuGqSVHwBozJyjLEAvYHkGcAS + OL6A4evTwrtzqZpNpWofXLZRq/vonNMtHr5dlLxptodjUVdfbs2/jNubbcVr + UVRPX243ofPx/vbb1w8PXBbb6vTxVO+21dcPNzcPTSrP26/bDiMW4z6NRmev + rLvFBOciDurMwvutcgz9PFDyzBDt+Bzvs2pVLAuvX07HBQk3F78McjJNECk9 + RPqkJ4oUCUqQP2WFX4rdMvJ7H81a3yX5coplUnLEpkTC/5KgxCDIt5KIKL+X + +aNLOhY5BouCxyRejfzy+4V0RusX8DFXnR/Wl+W0vvjFZwNqd37PO79MDv70 + e+s7FxO+O6JMyRWpk8g2YiR3P0LRMZfbvqqtRBkWU0cznRIuQthTslZE+JhG + 5DFF1P4RmVaqToftXJR86ncJOtWZSgrgpMyQrdJIUK5aOD+uxTxoeV83C+S0 + 6druod4uUaPPC4W7JJJnMceSRSIXLrWSeHdO0Oi0LFeG341OwHeZug7E+A2x + 8I71uy4tRZGFQqU9rSGmzFwps0rzMN4vrOSyQKTJFNszi3ZJHOwz9HnABXmO + mUu1Pr1X7rN43RYsslEaY4g35VUv/IzPK1rQ57KHGGMFuWmMj6B7kc4Dg8/9 + u0U3yrm7O3PknJmLm+3ELrhyQPcAtKEV1JYCOfZCAZ6wNsjUb7IIMKE8h5h+ + 0b/Ht9/8WzMe+PKOnnJ6jqjBTdplE+/OU7kh5uN+Wdw3SUx6FkOu33A5nCOm + Ruq8tx+eT2wE9U5Z92faDPkiO8/mEjxPNJd/e9U7uf85xyJyzkl0sYUrS/6H + Nf6Dm+IRNBNurvmdbRAtRYxlAFgSdZEM6kMuk0EMdx0bPsffrQ24VbDn1viY + xHKZRKbU+m6sQGYReGK+uvr56i+sc3g7J4eubMgOF6wkd1TKhErsbmZ7ZxlK + O5phtKpqk03zA53dW3wG/jShVx2nFSGeh7MR3ZS44440wg3Og9D5sYX+Xs68 + LkBBI2bBT9bjZTqVRPOs54hQTrmlr/n9rr0nt65z4u5FDv5aj1o+Aa9UFPyA + x8zSnGpPB2/6UOvCYvBfPD6ytQ29ajTCHfWDpuAzRv+Px65x7/QJ9B4tUzQy + xcRuges2idrnfcyVoCcxVq/qZxU9ZhPts8sxs4SnsYNeBq+oBE3gXGzP1egM + /XQWM7sJFTUEGnVp590x5Rw52kDfwJqSHcyjk/ahxpQhpkDPM1sPXME67HPp + LnzuS5gBioG3ia7zup+nb3ygzJyDT2B+wkyEPOBNHZ8C3jSyq1Uk9J6hLjco + +B8fWfQm98tsmzklcGE+564IzHUTsF6MgVeYYxzOklgSczSaZigYfEopmXmV + AeckDdTU/L/phRceXub8OhruJIuroFqG+CdB+EQQO5DoafAA8AGc3mu/NOw6 + z3M+B6/Qcb5de3dwB/bCdQwR+zrmlCFyuM7JAX+33ZCGuRu9Rjednl3E5BXo + pYi9QqMd8H7nSRoG2qtvcAWa2z1TUvJi4Pd5bVGRPFNBkVlPWm8ptH7d61m7 + OfOXnj2ngB9w9yIet3A36ztyCb604PeBgz8iuMfTmOQadxY5cB6tvdOxAZMD + ujzp/TuIKTOLAR4sHmPjy8On63vAh4dPb98QfgEAAP//AwByB8J8WAgAAA== http_version: - recorded_at: Fri, 28 Oct 2016 18:12:40 GMT + recorded_at: Fri, 03 Feb 2017 21:18:12 GMT - request: method: post uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/customers @@ -192,7 +193,7 @@ http_interactions: string: | - 09fe9af0-43c0-4dbc-977c-e1e7a3f1afcb + d2be26dc-9bbd-058f-1723-8c5962d3e787 headers: Accept-Encoding: @@ -200,7 +201,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.68.1 + - Braintree Ruby Gem 2.72.0 X-Apiversion: - '4' Authorization: @@ -213,7 +214,7 @@ http_interactions: message: Created headers: Date: - - Fri, 28 Oct 2016 18:12:48 GMT + - Fri, 03 Feb 2017 21:18:34 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -234,32 +235,32 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"dadf50459ab398759e3bd003f35a3315" + - W/"7a02c797f19e30000a2a4e9bc55aec14" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 1ce26846-2d99-4130-9af5-846985f51651 + - 12f01414-de04-44d1-9b49-427d6b79c91f X-Runtime: - - '0.312284' + - '0.390098' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIACCVE1gAA6RTPZObMBDt/SsYelkGf54H40yKNMmkyaVJ41nQgnWnD0YS - Z/PvI8DYd8YpMlfue293pbe7yf4sRfCGxnKtdmE0nYUBqlwzrspd+Pv5G9mE - +3SS5LV1WqJJJ0GQcJbG8XKx2qzWCfVBi3kuP4JyxMdrw8qn+GWdyXXxujzO - E/qebdUFN9YRBRIDxcUudKbGkHaUgH8xuZYVqGaEowQuRmh11Gpco4DzCDth - Zrl70M8gOGQEXOCaCnch86HjEsM0nkUrEs1IvHmONtso3i7WfxJ6S+jy64r9 - X/4toe/feU4KjoLZ65MYdyQHw+ylKBgDzfBnaCoQBPJc18p9VLSCkaQHPZxx - IfzICZQGUWI/qa9k8etHHMXL6Pt6uVnM59HPhD5UDmU+aVlf47Jq5MOavUcH - JcMCajG0yrQWCCpM2xEm9EJexd2WpNahzLRwh6xu0HwZQofWTf1+JbSXDUlc - QomkNiI9OlfZLaVgLTo7zQxw5bwDpX/+CZo2mXpvW0MOEt1Rs4PQpaa939NK - lXtUb9xo1Up2FhTL9Nmfz7XD0NPWmc0Nr5y/yAdD7jROv6JKlyf29MIS2kcD - 98m16/9tSXuvCgXhijve8vc2FyCs9/mR9FrH/74dmSr0/XV1tOCSt51ri0Qb - 1k13LEzoeGnvMduBwJhBP6CRbbf9SSd/AQAA//8DAL1TiRDzBAAA + H4sIAKrzlFgAA6RTTW/bMAy951cEviuyk3ZOAscZBnTYD+guuwSyRTta9WFI + dBv/+0l2nLRxehh65HuPpPRIZvuTkvNXsE4YvYuSRRzNQZeGC13vot/PP8k6 + 2uezrGwdGgU2n83nmeB5uk7SNF2lGfVBwDxXHplGEkjL683yb1qotHp5PK4y + +p4N6kpYh0QzBXMt5C5C20JEe0qyz5jSqIbpboKDYkJO0OZo9LRGxU4T7A0K + J/BOPwsMgROGc+wa2EXchygURPkyTlISL0m8el4m22S9XT38yeg1oc9vG/5/ + +deEoX/vOakESO4uT+ICScksd+eizFrWjX9mXcMkYWVpWo0fFUEwkQyghwsh + pR85YbUFUDBM6gdJVk9pnG7i5Nfy22O8iZ8yelc5lvmiZUON86qRD2v2Hh2V + HCrWyrFVYYwEpqM8jDCjZ/Ii7rckdwiqMBIPRduB/T6GCA4Xfr8yOsjGJKFY + DaS1Mj8iNm5LKXMO0C0Ky4RG70Dtn//GupBMvbfBkIMCPBp+kKY2dPB70eh6 + D/pVWKODZOeY5oU5+fO5dBh7urZwpRUN+ou8M+Reg+YFdP7AFXZdRodo5L64 + dsO/HQn3qkESoQWKwN/aXDHpvM/3pJc6/vdhZLoyt9fV01IoETq3DoixvJ/u + VJjR6dLeYq4HGecW/IAmtl33J5/9AwAA//8DACkAip3zBAAA http_version: - recorded_at: Fri, 28 Oct 2016 18:12:53 GMT + recorded_at: Fri, 03 Feb 2017 21:18:34 GMT - request: method: post uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/transactions @@ -269,12 +270,13 @@ http_interactions: 29.99 + R112301578-VCRV89V6 + Solidus true - R765286042-AKGE5U5C - 5wd9jd - 22546867 + 4dmtyy + 78177737 sale headers: @@ -283,7 +285,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.68.1 + - Braintree Ruby Gem 2.72.0 X-Apiversion: - '4' Authorization: @@ -296,7 +298,7 @@ http_interactions: message: Created headers: Date: - - Fri, 28 Oct 2016 18:12:53 GMT + - Fri, 03 Feb 2017 21:18:39 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -317,53 +319,53 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"a8562bdb10033faa02696ca2a2bc00b2" + - W/"c704f84a586c8255efc378f5fc799606" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - a582458e-29af-41c6-a02e-a66c83d1c052 + - dd225366-f08b-4a16-afb6-cfc11f3c4a3c X-Runtime: - - '4.642481' + - '4.527862' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 - AAA= + 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 + 8IZec696czp68S8AAAD//wMAzuOdY4sVAAA= http_version: - recorded_at: Fri, 28 Oct 2016 18:12:58 GMT + recorded_at: Fri, 03 Feb 2017 21:18:39 GMT recorded_with: VCR 3.0.3 diff --git a/spec/fixtures/cassettes/paypal/one_touch_checkout.yml b/spec/fixtures/cassettes/paypal/one_touch_checkout.yml index 3f1e9375..85bac116 100644 --- a/spec/fixtures/cassettes/paypal/one_touch_checkout.yml +++ b/spec/fixtures/cassettes/paypal/one_touch_checkout.yml @@ -16,7 +16,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.68.1 + - Braintree Ruby Gem 2.72.0 X-Apiversion: - '4' Authorization: @@ -29,7 +29,7 @@ http_interactions: message: Created headers: Date: - - Fri, 28 Oct 2016 18:12:09 GMT + - Thu, 02 Feb 2017 00:46:19 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -50,48 +50,48 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"0abbbd99801e6c6eac33f403727c38c8" + - W/"3582e9106fb5772bc7f5a0be36296ca8" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 25ef8aae-46ed-42ad-8ea6-702739b6b2da + - 28259cf4-86d2-4a85-bd73-3ca1d09dfd58 X-Runtime: - - '0.137755' + - '0.091276' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAPmUE1gAA6RWX3ObOBB/76fI5L13IEKunknbiW3AaIxcEyxAbyA5Z0AC - X7Ex8OlvhXttcpPrdOYePBmb1e7q9488fO6VvOn2X9uiqT/emr8Ztzf7mjei - qP/8eLuL3Pcfbj9/evfAZbGvT+9PTbWvP727uXnoMnnef9oPGLEEj1k8O/tl - M6wX+CCSsMktfNwr19C/h0qeGaIDX+FjXm+LTeHbZOn3pDxUBIXlJno00jg1 - mcIlWR7KYJQqWD5am6VjpaNjBGOFgtHvWUwqtnyE73NJIrdkane3iXZjMIqC - jPPy2SMDi12DxeFzmmxnQfnYk8Log4UxbNxtv1k2fVA2l83T3UCWTh+MgUEi - 5yvMugRub8LfgShTckWaNLaNBMnqSyQG5nE7UI2VKsNiqjWzJeEigjMlu4gY - t1lMnjNE7S+xaWXq9HW/EiVfBkOKTk2u0gIwKXNkqywWlKsL3B83YhVe+Nh0 - a+Resid7hHlVqmZ3a4WHNJZnscKSxeIgPGqlSXVO0ey0KbdGMMxOgHeZeS7U - BB2xcMXGashKUeSRUNlIG6gpc0/KvNY4zI9rK+3XiHS5Ykdm0SFNwmOO7qa9 - oE+be1TzM/rlMU+eLgWLbZQlGOpNeeULf9/PLy5Fivoj1Bhb6E0T3ALvRbYK - Db4K7tfD7MC96syRe2Ye7vYLu+DKBd5D4IbWMFsK5NprBftEjUGWQZfHsBM6 - HKBmXI9v4R10/8xMJrz81lfuyBE1uEmHfOHf++pgiNV83BQfujQhI0ug10+w - nO6RUCNz3zoPvy9sBPNO+fBr3Ez9YvuQryRonmgs//DrN3p/u8c6ds9p3NvC - kyX/xRn/gU3xDJwJ76DxdXaIliLBMoRdUtVLBvOhl8mghnuuDZ/2Z8+mvVV4 - 5Na8TRO5SWNTan53VijzGDSx2l71fNUX1j38yj1wxDpS4YKV5J5KmVKJvZ1z - dDeRtGMHo23dmGx5+EqdDxZ3QJ8meNV1LyLCq8iZ0V2JB+5KI9rhQxi5X/Ye - KTeOP4Qo7IQT/sVGvMmWkmicdY4I5ZZ7+hLfR609uffcE/d6OenraXbhC9BK - TUEPeM4sjanWdPjKh5oXloD+knnLnmzwqtEJbzZOnILOGP0/GrvWveET8B4t - MzQzxcK+ANaXNL58P8c8CXwSY/tifl7TNl9onfVtbglf7w58GbymEjiBe7Ej - V7Mz+OksHLuLFDUEmg3Z4N8z5bYc7cA38EzJAfLopHWod8oRU8DnmT1NWMFz - OOfRKvruS8gAxUDbRM956eflKx0o88BBJ5CfkInQB7Sp6zPYN4vtehsLfWaa - yw0K+scti6E39BKx3u1H9m5jUuaWvoes9I78X/oDjUMvu9zv5JgbpGPeTvNJ - d8Z28gPgeMwVBl1SN1duARkHfY4KsBu13l9kznX38m1vwaxvOaDvN1OsmLLn - ojW2A89cfU4MyDWTTzUmeLy9ekTvv8L2Fs0qwPbelzSaNAEZzIGH1JLLHIWT - vygljn72ai/IZcgHeG/QYeLpBx8v8xXwhLwCfF9pEd4pwOEJMqUFfR1hf+CW - mHw173gdSubYUqxEx9Vpyn1fawc5eu8TaNbQ75g0wdU110y5X2DxnBgfH36/ - vvffPfz++j+CvwEAAP//AwBjzI7nSAgAAA== + H4sIAFuBklgAA6RWXW+jOBR9n19R9X12wAzdRurMqE0CwQrOhBCD/QZ2WiA2 + yeYDAr9+r+luP6TuaKR9QInw9b3H55x7zd2Pi1ZXzeZwLHf1t2v7D+v6alOL + nSzrp2/X69j7fHv94/unO6HKTX36fNptN/X3T1dXd02mzpvvmw4jnuI+S0bn + oNp18zEuZBrtcgfvN9qzzPtIqzNHtBMzvM/rZbkoA8T9EJH+qSNJcAn7pR32 + qmT91GF9YPHJsiUJ0aSf9qxiHUNhH/ZPFonvrdBnPa/WXaiZS/plGybMZb3S + rML60ScdTzyLJ9EjS5ejsLq/kM5qwxIeBbGTnUWq3WWx+uqQeNqRydohfXAI + J/dt6F1s+O2ItpXQZMcS10qR2v6MZcd94YZ65zBtOVwf7WxChIxhT8VbmeBj + lpDHDFH3Z2I7mT4dNjNZiUkIuE+7XLMSOKly5OoskVToFs6Pd3IWtaLfNXPk + tdnK7aHelunR17nGHUvUWc6w4okspE8dlm7PDI1Oi2pphd3oBHxXme9BTNgQ + B295v+2ySpZ5LHXW0x3EVLmvVF4bHh72c4dd5og0ueZ77tCOpdE+R18HXJDn + mPvU6NMH1T5PV23JExdlKYZ4Wz3rhV/wBWVbMnTZQ4y1hNw0xUfQvcxmkSVm + 4c28GxXC354F8s7cx81m7JZCe6B7BNrQGmoriTx3rgFPDHpMwiZPABMqCojp + 5/1HfIfNvzXTga/gGGivF4hawqZdPg5uAl1YcvbQL8rbhqWk5ynk+gWXwzlS + amXeR/vh/dhFUO+Ud7+nzZAvcYt8psDzxHD5Z1B/kPufc8wT78ySiyt9VYnf + rPEf3JSPoJn0C8PvdI1oJVOsIsDC9EVxqA+5bA4xwvdceI6/Whtw62gvnIcj + S9WCJbYy+q6dSOUJeGK2fPbzs7+wyRFsvUIg3pAtLnlFbqhSjCrsr6d7bxEr + N5litKx3Np8UBzq9dcQU/GlDr3peK2M8i6cjuq5wJzxlxWtcRLH3c+OTajEN + ughFjZxGf/EeL7KJIoZnM0ek9qoNfcvvvfGe2vjeSfgXNfhrNWrFGLxSU/AD + fuCO4dR4OnrXh0YXnoL/0ocjX7nQq1Yj/VE/aAo+4/T/eOw57oM+gd6jVYZG + thy7LXDdsqR92cd9BXoSa/mmfl7TYz42Prscc0cGBjvoZYmaKtAEzsX3Qo/O + 0E9nOXWbWFNLolGXdcEN195RoDX0Daxp1cE8OhkfGkw54hr0PPPVwBWswz6f + buOXvoQZoDl4m5g6b/t58s4H2i4E+ATmJ8xEyAPeNPEZ4M0St14m0uwZ6gqL + gv/xkSfvcr/OtqlXARf2S+6awFy3AevFGniFOSbgLMxRWKDRJEfR4FNKyTSo + LTgnaaCm4f9dL7zy8DrnV8lwJzlCR/Uixn8RhE8E8QNJngYPAB/A6a3xS8Of + 53khZuAV+lBsVsEN3IG99D1LpqGJOeWIHJ7n5IC/26xJw/21WaPrzswuYosa + 9NLEXaLRFni/CRSNI+PVd7giw+2ea6VEOfD7sjavSZHrqMydJ6O3kka/7u2s + XZ/Fa8+eM8APuHuZPrRwN5s7cgG+dOD/QYA/ErjHs5QUBneeeHAeo73X8QGT + B7o8mf1biKlyhwMeLB9T69vdl+fvgE93X95/IfwNAAD//wMAhxF5WlgIAAA= http_version: - recorded_at: Fri, 28 Oct 2016 18:12:14 GMT + recorded_at: Thu, 02 Feb 2017 00:46:19 GMT - request: method: post uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/customers @@ -100,7 +100,7 @@ http_interactions: string: | - dbec3c8b-01eb-4c84-9974-b66ae97766ca + 3094c537-269d-0b00-127d-0fccb61c921c headers: Accept-Encoding: @@ -108,7 +108,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.68.1 + - Braintree Ruby Gem 2.72.0 X-Apiversion: - '4' Authorization: @@ -121,7 +121,7 @@ http_interactions: message: Created headers: Date: - - Fri, 28 Oct 2016 18:12:24 GMT + - Thu, 02 Feb 2017 00:46:40 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -142,32 +142,32 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"fa41c5145af34ac6905aad524421ee65" + - W/"51443365a1fab9c1b92facb1fd053617" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - df5e5087-ac5e-4b1e-9ad3-57db375e392f + - aa14cb19-02a5-436b-b6ff-36e303c5cc1e X-Runtime: - - '0.351738' + - '0.344772' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAAiVE1gAA6RTTXPaMBC98ys8vgthEzAwxrQ99BekM51emLW1Nmr04ZHk - BP/7yjaGBJNDJ8d97+2u9HY3PZylCF7RWK7VPozmizBAVWjGVbUPfz3/JJvw - kM3SorFOSzTZLAhSzrJovUo2mzhOqQ86zHPFCZQjPk4Mq7bx3ySXSfmyOi1T - +p7t1CU31hEFEgPFxT50psGQ9pSAz5hCyxpUO8FRAhcTtD5pNa1RwnmCvWFu - uXvQzyA4ZARc4Noa9yHzoeMSwyxeRGsSLUi8eY42uyjexU9/UnpL6PObmv1f - /i1h6N97TkqOgtnrkxh3pADD7KUoGAPt+GdoaxAEikI3yn1UdIKJZAA9nHMh - /MgJVAZR4jCpH2S5/r1IVqskSrbbp+Ui/p7Sh8qxzBctG2pcVo18WLP36Khk - WEIjxla51gJBhVk3wpReyKu435LMOpS5Fu6YNy2ab2Po0Lq536+UDrIxiUuo - kDRGZCfnarujFKxFZ+e5Aa6cd6Dyz3+Dtkum3tvOkKNEd9LsKHSl6eD3vFbV - AdUrN1p1kr0FxXJ99udz7TD2tE1uC8Nr5y/ywZB7jdMvqLJErkzNUjpEI/fF - tRv+bUl3rwoF4Yo73vH3NpcgrPf5kfRax/++G5kq9f119bTgknedG4tEG9ZP - dypM6XRp7zHbg8CYQT+giW23/clm/wAAAP//AwA/PVDq8wQAAA== + H4sIAHCBklgAA6RTTW+jMBC951cg7o4JSUMbEbLaw/6CVivtJRrwAN76A9mm + Df9+DYSkDelhVYnLvPdmBr+ZSQ8nKYI3NJZrtQ9XyygMUBWacVXtw5fnX+Qx + PGSLtGit0xJNtgiClLNsHUfJNo6ilPqgxzxX1KAc8XFiWPUU/01ymZSvD/U6 + pR/ZXl1yYx1RIDFQXOxDZ1oM6UAJ+IoptGxAdTMcJXAxQ5taq3mNEk4z7B1z + y92dfgbBISPgAtc1uA+ZDx2XGGZxtEpIFPvvOYp2m+1uE/1J6TVhyG8b9n/5 + 14Sx/+A5KTkKZi+/xLgjBRhmz0XBGOimN0PXgCBQFLpV7rOiF8wkI+jhnAvh + R06gMogSx0n9JA8vyfYpirfxarPZrB/j3ym9q5zKfNOyscZ51cinNfuITkqG + JbRiapVrLRBUmPUjTOmZvIiHLcmsQ5lr4Y5526H5MYUOrVv6/UrpKJuSuIQK + SWtEVjvX2B2lYC06u8wNcOW8A5X//Xfo+mTqve0NOUp0tWZHoStNR7+XjaoO + qN640aqX7C0oluuTP59Lh6mnbXNbGN44f5F3hjxonH5FlVXNmrEupWM0cd9c + u/HdlvT3qlAQrrjjPX9rcwnCep/vSS91/Ov7kalS317XQAsued+5tUi0YcN0 + 58KUzpf2FrMDCIwZ9AOa2Xbdn2zxDwAA//8DACigL1bzBAAA http_version: - recorded_at: Fri, 28 Oct 2016 18:12:30 GMT + recorded_at: Thu, 02 Feb 2017 00:46:40 GMT - request: method: post uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/transactions @@ -177,12 +177,13 @@ http_interactions: 29.99 + R079769781-EN6U75DY + Solidus true - R310468715-YPKS3ANJ - 7m5rpd - 16578822 + gp3ddy + 32076200 sale headers: @@ -191,7 +192,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.68.1 + - Braintree Ruby Gem 2.72.0 X-Apiversion: - '4' Authorization: @@ -204,7 +205,7 @@ http_interactions: message: Created headers: Date: - - Fri, 28 Oct 2016 18:12:30 GMT + - Thu, 02 Feb 2017 00:46:49 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -225,53 +226,53 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"1f06d16a8abb48fd1b5629107c91de8a" + - W/"353cc9d61a8d89a047a18c7f001976dc" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 4e9593b7-c55b-42be-8cd0-ca37839d6ef8 + - d31ad075-c4e7-4243-a42f-1e421e5e31f2 X-Runtime: - - '5.382297' + - '8.964461' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 - AA== + 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 + ePW96szp8NW/AAAA//8DAK44St6LFQAA http_version: - recorded_at: Fri, 28 Oct 2016 18:12:35 GMT + recorded_at: Thu, 02 Feb 2017 00:46:49 GMT recorded_with: VCR 3.0.3 diff --git a/spec/fixtures/cassettes/paypal_checkout.yml b/spec/fixtures/cassettes/paypal_checkout.yml deleted file mode 100644 index b028bdbb..00000000 --- a/spec/fixtures/cassettes/paypal_checkout.yml +++ /dev/null @@ -1,1637 +0,0 @@ ---- -http_interactions: -- request: - method: post - uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/client_token - body: - encoding: UTF-8 - string: | - - - 2 - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.68.1 - X-Apiversion: - - '4' - Authorization: - - Basic bXdqa2t4d2NwMzJja2huZjphOTI5OGY0M2IzMGM2OTlkYjMwNzJjYzRhMDBmN2Y0OQ== - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Mon, 24 Oct 2016 23:32: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: - - 3v249hqtptsg744y - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - Etag: - - W/"7548e3e75ee62ad3abb82af42fe668f1" - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - fc44cfbf-c3c8-4066-998e-52accda2bd8b - X-Runtime: - - '0.185231' - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - body: - encoding: ASCII-8BIT - string: !binary |- - H4sIACiaDlgAA6RWW2+bSBR+76+I8t4tDCFbpLRVYwNmZHBM8ADzBjNkucyA - N9jY8Ot7BnfbZJWtKq2iyJI5c86Z74bvvpyluBqK577q2k/X+h/a9VXRso5X - 7V+frneR8/7j9ZfP7+6YqIr28P7QNUX7+d3V1d2QiWPxuRgxogmestg6enU3 - rhe45EnY5QbeF9LR1PehFEeKyMhWeJ+322pTeWYa+SONbTOovYlGYZMi+8af - RB0sbSONtwaNU9OvSU2X6XkTheUm2p1SBH/SN/3IPwe1U9Oalv4SzkWNFsSO - fHID6OloNA6f0mRr+fXXc1BpZ3+hjYGzHf2pm/y604PqRoMzpr/8ivzl9hk+ - T75z1uFzDKQumAy6NDa1BInmIeIjdZnpy85IpWZQ2evZMmA8gjM1PfEY91kc - PGWImA+xbmTy8FyseM2W/piiQ5fLtAJM6hyZMos5YfIE98cdX4UnNnXDGjmn - 7NGcYF6TSutmLfGYxuLIV1jQmJfcJUaaNMcUWYdNvdX80ToA3nXmOlDjD4GB - Gzo1Y1bzKo+4zCbSQU2du0LkrcLhfr820vMaBUMu6Z4aZEyTcJ+jm3kv6NPn - LlH8TF69z5PHU0VjE2UJhnpdXPjCP/bzqlOVovMearQt9CYJ7oH3KluFGlv5 - t+vRKpnbHBlyjtTFQ7EwKyYd4D0EbkgLswVHjrmWsE/UacHSH/IYdkJlCTXT - enoLb3/4Z2Yy4+X1nnQmhojGdDLmC+/Wk6XGV/fTpvo4pEkw0QR6/QLL+R4J - 0TLnrfPw/cJEMO+Qj7/HzdwvNst8JUDzgcLyT699o/f3e6xj55jGZ5O7oma/ - OeM/sKmegDPulgpfe4dIzRMsQtgllWdBYT700inUMNcx4b//1bN5bxnumXHf - p4nYpLEuFL87IxR5DJpYbS96vugLqx5e45QM0SFocEXr4JYIkRKB3Z29dzaR - MGMbo23b6XRZPhP7o8Fs0KcOXnWcE4/wKrItsqvxyByhRTtchpHzULhBvbG9 - MUThwO3wbzrhTbYUgcJZ5QiXTl2Ql/h+VdoThescmHsWs74erRNbgFZaAnrA - 99RQmCpNh698qHihCegvue/powle1QbuWtPMKeiMkv+jsUvdGz4B75E6Q5bO - F+YJsD6l8enHOeoK4DPQti/m5y3p84XS2bnPDe6p3YEvjbVEACdwL7pn0jqC - n47cNodIEo0ja8xG75ZKp2doB76BZ1KMkEcHpUO1U46oBD6P9HHGCp7DOZc0 - 0Q9fQgZICtoO1JyXfl6+0oHUSwY6gfyETIQ+oE1Vn8G+WWy225irM/NcphHQ - P+5pDL2hF4/Vbj+zdxsHdW6oe4hG7cj+pT/QOPQy62InplwLBuruFJ9kp21n - PwCO+1xi0CVxculUkHHQZy8Bu0np/UXmXHav3/YWzPqeA+p+lqTVnD0npbEd - eObi80CDXNPZXKODx/uLR9T+K2xukdUAtreeINGsCchgBjykhljmKJz9RUhg - q2ev9oJchnyA9wYZZ55+8vEyXwFPyCvA95UW4Z0CHB4gU3rQ1x72B24Dna3u - B9aGgtqm4Cs+MHmYc99T2kG22vsAmtXUOyZNcHPJNV0UC8yfEu3T3YfLe//d - 3YfXvwi+AQAA//8DAPhIsmtICAAA - http_version: - recorded_at: Mon, 24 Oct 2016 23:32:55 GMT -- request: - method: post - uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/customers - body: - encoding: UTF-8 - string: | - - - e3dedb72-72a0-4c0c-8802-028ea6cc9d0f - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.68.1 - X-Apiversion: - - '4' - Authorization: - - Basic bXdqa2t4d2NwMzJja2huZjphOTI5OGY0M2IzMGM2OTlkYjMwNzJjYzRhMDBmN2Y0OQ== - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Mon, 24 Oct 2016 23:33:11 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: - - 3v249hqtptsg744y - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - Etag: - - W/"b829a2de2f9c43c6fbd911b6808362e6" - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 9da5d283-e344-4c02-b9bc-0aee88311f95 - X-Runtime: - - '0.371836' - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - body: - encoding: ASCII-8BIT - string: !binary |- - H4sIADeaDlgAA6RTPXPbMAzd/St02mlKclI7OVnpdejQ69Z06eKDREhmww+V - hJL435eSLDux3KGXEe89AOQDkD+8ahU9o/PSmm2cLpM4QlNZIU2zjX8+fmWb - +KFY5FXnyWp0xSKKcimK283dbXKTJTkPQY8FrtqDIRbitRPNXfZ7Xep1/XS7 - X+X8Ldura+k8MQMaIyPVNibXYcwHSsG/mMrqFsxhhqMGqWZou7dmXqOG1xn2 - gqWXdKWfQyAUDCiiQ4vbWISQpMa4yJL0E0sTlt08Zqv71eo+TX/l/Jww5Het - +L/8c8LYf/Cc1RKV8KcnCUmsAif8sSg4B4fpz3BoQTGoKtsZeq/oBTPJCAa4 - lEqFkTNoHKLGcVJf2ObbKjw1S5LvWZom6+RHzq8qpzIftGyscVw19m7N3qKT - UmANnZpaldYqBBMX/QhzfiRP4mFLCk+oS6toV3YHdJ+nkNDTMuxXzkfZlCQ1 - NMg6p4o9UevvOQfvkfyydCANBQea8PwXOPTJPHjbG7LTSHsrdso2lo9+L1vT - PKB5ls6aXrL1YERpX8P5nDpMPX1X+srJlsJFXhnyoCH7hKZYU/NHtzkfo4n7 - 4NqN//asv1eDikkjSfb8pc01KB98viY91Qm/70dmant5XQOtpJZ9584js04M - 050Lcz5f2kvMDyAI4TAMaGbbeX+KxV8AAAD//wMAGe1X8/MEAAA= - http_version: - recorded_at: Mon, 24 Oct 2016 23:33:10 GMT -- request: - method: post - uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/transactions - body: - encoding: UTF-8 - string: | - - - 19.99 - - true - - R190768916-99GEPAFS - 7tgqmp - 58950420 - sale - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.68.1 - X-Apiversion: - - '4' - Authorization: - - Basic bXdqa2t4d2NwMzJja2huZjphOTI5OGY0M2IzMGM2OTlkYjMwNzJjYzRhMDBmN2Y0OQ== - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Mon, 24 Oct 2016 23:33:16 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: - - 3v249hqtptsg744y - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - Etag: - - W/"b246993f9d04b50043180cf927c61219" - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - e59181de-c0ea-45e4-953f-1ee3253403c4 - X-Runtime: - - '4.675466' - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - body: - encoding: ASCII-8BIT - string: !binary |- - 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 - http_version: - recorded_at: Mon, 24 Oct 2016 23:33:15 GMT -- request: - method: post - uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/client_token - body: - encoding: UTF-8 - string: | - - - 2 - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.68.1 - X-Apiversion: - - '4' - Authorization: - - Basic bXdqa2t4d2NwMzJja2huZjphOTI5OGY0M2IzMGM2OTlkYjMwNzJjYzRhMDBmN2Y0OQ== - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Mon, 24 Oct 2016 23:33:20 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: - - 3v249hqtptsg744y - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - Etag: - - W/"6bcc33e06c038b551281955ad3720b45" - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 57feb534-79bb-45c8-9ea7-27189e71248a - X-Runtime: - - '0.140496' - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - body: - encoding: ASCII-8BIT - string: !binary |- - H4sIAECaDlgAA6RW0W6jOBR9n6+o+j47YEq3kTozakIgWMGZUGLAb2DTArFJ - tiQk8PV7TWZn2lV3NNI+RJHC9b3H55x7yP3Xs5JXXfHSVrvm87X5h3F9VTR8 - J6rm+fP1JnI/3l1//fLhnsuqaA4fD7tt0Xz5cHV132XyWHwpeoxYgocsnhz9 - etcvZ7gUSbjLLbwvlGvo30MljwzRni/wPm/W1aryb5jzbJLYH5iXmqSelkHN - exJNt6SeWyzamCuPlkT5xsoJzoGTGulA66Aua+LIikWBtYpxTTxWBpGoAkWr - lePbTx7pWewaLA6f0mQ9CeqHM6mMczAzeuKu+2DYDfDpg9mNEdTPKBieT8RJ - XwLn4RS4ZxO+e6JMyRXZpbFtJEhuv0WiZx63A7WzUmVYTLVm5hAuIjhTs5OI - cZvF5ClD1P4Wm1amDi/FQtTcCfoUHXa5SivgpM6RrbJYUK5OcH+8E4vwxIdd - t0TuKXu0B5i3TdXkZqlwn8byKBZYsliUwqNWmmyPKZocVvXaCPrJAfiuM8+F - mqAjFt6yYdtntajySKhsoDuoqXNPyrzRPEz3Sys9LxHpcsX2zKJ9moT7HN2M - uKBPm3tU6zP49T5PHk8Vi22UJRjqTXnRC//A51enKkXnPdQYa+hNE9yC7lW2 - CA2+CG6X/aTk3vbIkXtkHu6KmV1x5YLuIWhDG5gtBXLtpQI80c4gTtDlMWBC - ZQk1w3J4j++g+2dmMvLlt75yB46owU3a5zP/1lelIRbTYVXddWlCBpZAr19w - Od4joUbmvncefp/ZCOYd8v73tBn7xXaZLyR4nmgu//Sbd3p/v8cydo9pfLaF - J8H5vzfjP7ipnkAz4ZWa3/kG0VokWIaAJVVnyWA+9DIZ1HDPteHT/urZiFuF - e25N2zSRqzQ2pdZ3Y4Uyj8ETi/XFzxd/Yd3D37olR6wjW1yxmtxSKVMqsbeZ - 791VJO14jtG62ZnMKV/o/M7ic/CnCbvquicR4UU0n9BNjXvuSiPa4DKM3G+F - R+rV3O9DFHZiHv7FBrzKHEk0zzpHhHLrgr7m90F7Txaee+DeWY7+epyc+Ay8 - 0lDwA54yS3OqPR2+2UOtC0vAf8m0ZY827KrRCW8yjJqCzxj9Px671L2zJ7B7 - tM7QxBQz+wRcn9L49OMc8yToSYz1q/l5Q9t8pn12bnNL+Bo76GXwhkrQBO7F - 9lxNjrBPRzG3u0hRQ6BJn/X+LVNuy9EG9gaeKdlDHh20DzWmHDEFeh7Z48gV - PIdzHt1GP/YSMkAx8DbRc17vs/PGB8osOfgE8hMyEfqAN3V9Bniz2G7WsdBn - xrncoOB/3LIYekMvEWtsP7N3HZM6t/Q95FZj5P/yH3gcetl1sZFDbpCOeRut - J90Y63EfgMd9rjD4krq5civIOOizV8DdoP3+KnMu2Ov3dwtmfc8Bfb+JYtWY - PSftsQ3szGXPiQG5ZvKxxoQdby87ovEvsL1Gky1we+tLGo2egAzmoENqSSdH - 4bhflJK5fvYGF+Qy5AO8N2g/6vRTj9f5CnxCXgG/b7wI7xTQ8ACZ0oK/9oAf - tCUmX0w73oSSzW0pFqLj6jDmvq+9g+Ya9wE8a+h3TJrg7SXXTFnMsHhKjM/3 - ny7v/Q/3n97+I/gbAAD//wMAvnjgLkgIAAA= - http_version: - recorded_at: Mon, 24 Oct 2016 23:33:19 GMT -- request: - method: post - uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/customers - body: - encoding: UTF-8 - string: | - - - ee04fa89-3f55-454e-b447-c0a6ee15c783 - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.68.1 - X-Apiversion: - - '4' - Authorization: - - Basic bXdqa2t4d2NwMzJja2huZjphOTI5OGY0M2IzMGM2OTlkYjMwNzJjYzRhMDBmN2Y0OQ== - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Mon, 24 Oct 2016 23:33:32 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: - - 3v249hqtptsg744y - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - Etag: - - W/"5aa4f3771d2b52cc0b579d3c9323b67c" - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 05561b84-0983-417a-aaf6-41619becf798 - X-Runtime: - - '0.330163' - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - body: - encoding: ASCII-8BIT - string: !binary |- - H4sIAEyaDlgAA6RTTW+jMBC951cg7o4TSBdaEbLqofsHutJqL9GAB+LWH8g2 - bfj3ayAkbUgPq0pc5r03M/jNTLY7ShG8obFcq224Xq7CAFWpGVf1Nvz9/ETS - cJcvsrK1Tks0+SIIMs7yNF2lcZpGGfVBj3muPIByxMeJYfV99JIUMqle7w5x - Rj+yvbrixjqiQGKguNiGzrQY0oES8BVTatmA6mY4SuBihjYHreY1KjjOsHcs - LHc3+hkEh4yAC1zX4DZkPnRcYphHq/UPsl6RaPMcxQ+x/6K/Gb0kDPltw/4v - /5Iw9h88JxVHwez5lxh3pATD7KkoGAPd9GboGhAEylK3yn1W9IKZZAQ9XHAh - /MgJ1AZR4jipRxL/Wd/FSZJu1lES3yebXxm9qZzKfNOyscZp1cinNfuITkqG - FbRialVoLRBUmPcjzOiJPIuHLcmtQ1lo4fZF26H5OYUOrVv6/croKJuSuIQa - SWtEfnCusQ+UgrXo7LIwwJXzDtT+99+h65Op97Y3ZC/RHTTbC11rOvq9bFS9 - Q/XGjVa9ZGtBsUIf/fmcO0w9bVvY0vDG+Yu8MeRB4/QrqlzG8UvdZHSMJu6b - aze+25L+XhUKwhV3vOevba5AWO/zLem5jn99PzJV6evrGmjBJe87txaJNmyY - 7lyY0fnSXmN2AIExg35AM9su+5Mv/gEAAP//AwDDyCt+8wQAAA== - http_version: - recorded_at: Mon, 24 Oct 2016 23:33:31 GMT -- request: - method: post - uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/transactions - body: - encoding: UTF-8 - string: | - - - 29.99 - - true - - R097776363-5HJLGLK2 - m33jgp - 88083882 - sale - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.68.1 - X-Apiversion: - - '4' - Authorization: - - Basic bXdqa2t4d2NwMzJja2huZjphOTI5OGY0M2IzMGM2OTlkYjMwNzJjYzRhMDBmN2Y0OQ== - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Mon, 24 Oct 2016 23:33: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: - - 3v249hqtptsg744y - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - Etag: - - W/"2fc76f46f926b7b57688404ca1a9b24d" - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - e0441851-488d-459e-af57-e47c5c6741cb - X-Runtime: - - '4.298166' - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - body: - encoding: ASCII-8BIT - string: !binary |- - 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 - http_version: - recorded_at: Mon, 24 Oct 2016 23:33:36 GMT -- request: - method: post - uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/customers - body: - encoding: UTF-8 - string: | - - - c1e83788-ca60-4ba2-8701-caea15707b0e - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.68.1 - X-Apiversion: - - '4' - Authorization: - - Basic bXdqa2t4d2NwMzJja2huZjphOTI5OGY0M2IzMGM2OTlkYjMwNzJjYzRhMDBmN2Y0OQ== - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Mon, 24 Oct 2016 23:36:15 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: - - 3v249hqtptsg744y - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - Etag: - - W/"7ff1a2293f4f793554213e1ce445a24b" - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 2b084a88-1053-4e9f-ad4a-585d8927cfc9 - X-Runtime: - - '0.337393' - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - body: - encoding: ASCII-8BIT - string: !binary |- - H4sIAO+aDlgAA6RTTW/bMAy951cYviuy853AcYYN2LmHDhh2KWiLdrTqw5Dk - NP73k+04aeP0MPTI9x5J6ZFMDmcpghMay7Xah/E0CgNUuWZclfvw1/NPsgkP - 6STJa+u0RJNOgiDhLI23i+U6Wm8S6oMW81x+BOWIj9eGldvZ33Um18Xr8jhP - 6Hu2VRfcWEcUSAwUF/vQmRpD2lECPmNyLStQzQhHCVyM0Oqo1bhGAecR9oaZ - 5e5BP4PgkBFwgWsq3IfMh45LDNNZFK9IHJHZ4nk2381Xu3j5J6G3hC6/rtj/ - 5d8S+v6d56TgKJi9PolxR3IwzF6KgjHQDH+GpgJBIM91rdxHRSsYSXrQwxkX - wo+cQGkQJfaT+k6ip9/Rajmfxz82m0W0XTwl9KFyKPNFy/oal1UjH9bsPToo - GRZQi6FVprVAUGHajjChF/Iq7rYktQ5lpoV7yeoGzbchdGjd1O9XQnvZkMQl - lEhqI9Kjc5XdUQrWorPTzABXzjtQ+ue/QdMmU+9ta8iLRHfU7EXoUtPe72ml - ygOqEzdatZK9BcUyffbnc+0w9LR1ZnPDK+cv8sGQO43Tr6jS7epUViyhfTRw - X1y7/t+WtPeqUBCuuOMtf29zAcJ6nx9Jr3X879uRqULfX1dHCy5527m2SLRh - 3XTHwoSOl/Yesx0IjBn0AxrZdtufdPIPAAD//wMAfYyW1fMEAAA= - http_version: - recorded_at: Mon, 24 Oct 2016 23:36:14 GMT -- request: - method: post - uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/transactions - body: - encoding: UTF-8 - string: | - - - 29.99 - - true - - R806626656-HPGJJC5L - 96vgpd - 19457078 - sale - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.68.1 - X-Apiversion: - - '4' - Authorization: - - Basic bXdqa2t4d2NwMzJja2huZjphOTI5OGY0M2IzMGM2OTlkYjMwNzJjYzRhMDBmN2Y0OQ== - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Mon, 24 Oct 2016 23:36:20 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: - - 3v249hqtptsg744y - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - Etag: - - W/"e92462344088406dc731b37dfc92b28c" - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 10429236-eade-477a-87eb-4a0cdb32fcd4 - X-Runtime: - - '4.232904' - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - body: - encoding: ASCII-8BIT - string: !binary |- - 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 - AA== - http_version: - recorded_at: Mon, 24 Oct 2016 23:36:19 GMT -- request: - method: post - uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/customers - body: - encoding: UTF-8 - string: | - - - 8e3d073d-3535-4761-b3c0-3dd0f876beb0 - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.68.1 - X-Apiversion: - - '4' - Authorization: - - Basic bXdqa2t4d2NwMzJja2huZjphOTI5OGY0M2IzMGM2OTlkYjMwNzJjYzRhMDBmN2Y0OQ== - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Mon, 24 Oct 2016 23:36: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: - - 3v249hqtptsg744y - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - Etag: - - W/"b63efedb99e0c084f5d39d115f1caf79" - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - aa34f1df-a3bc-4c96-bd3f-1e24b0bf4d1f - X-Runtime: - - '0.365099' - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - body: - encoding: ASCII-8BIT - string: !binary |- - H4sIAAabDlgAA6RTPXPiMBDt+RUe90KAzxgYYzJXpL4i11zDrK21UaIPjyQn - +N+fbGNIMFfcpNz33u5Kb3fTw1mK4B2N5Vrtw+V8EQaoCs24qvbh75dnsgkP - 2SwtGuu0RJPNgiDlLIvWSbzdxJuU+qDDPFecQDni48Swart6TXKZlG/xKUrp - Z7ZTl9xYRxRIDBQX+9CZBkPaUwL+xRRa1qDaCY4SuJig9UmraY0SzhPsA3PL - 3YN+BsEhI+AC19a4D5kPHZcYZqvFck2WC7L68bKKdtF6F23+pPSW0Oc3Nfu/ - /FvC0L/3nJQcBbPXJzHuSAGG2UtRMAba8c/Q1iAIFIVulPuq6AQTyQB6OOdC - +JETqAyixGFSP8lilSTbKIqff23iOIkXy5Q+VI5lvmnZUOOyauTLmn1GRyXD - Ehoxtsq1FggqzLoRpvRCXsX9lmTWocy1cMe8adE8jaFD6+Z+v1I6yMYkLqFC - 0hiRnZyr7Y5SsBadnecGuHLegco//wPaLpl6bztDjhLdSbOj0JWmg9/zWlUH - VO/caNVJ9hYUy/XZn8+1w9jTNrktDK+dv8gHQ+41Tr+hyqKkzmuW0iEauW+u - 3fBvS7p7VSgIV9zxjr+3uQRhvc+PpNc6/vfdyFSp76+rpwWXvOvcWCTasH66 - U2FKp0t7j9keBMYM+gFNbLvtTzb7CwAA//8DAB6ktRDzBAAA - http_version: - recorded_at: Mon, 24 Oct 2016 23:36:37 GMT -- request: - method: post - uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/transactions - body: - encoding: UTF-8 - string: | - - - 29.99 - - true - - R983316990-D482EVKK - 37pbpd - 36759858 - sale - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.68.1 - X-Apiversion: - - '4' - Authorization: - - Basic bXdqa2t4d2NwMzJja2huZjphOTI5OGY0M2IzMGM2OTlkYjMwNzJjYzRhMDBmN2Y0OQ== - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Mon, 24 Oct 2016 23:36: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: - - 3v249hqtptsg744y - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - Etag: - - W/"de11b82f76ccd06b3ce297f55f0a9f1e" - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 4bf7646a-af2d-437b-ad5d-158756acf3f5 - X-Runtime: - - '4.141924' - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - body: - encoding: ASCII-8BIT - string: !binary |- - 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 - AA== - http_version: - recorded_at: Mon, 24 Oct 2016 23:36:41 GMT -- request: - method: post - uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/customers - body: - encoding: UTF-8 - string: | - - - e770ee28-a9ab-4e19-b33d-42be4b9d1e5f - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.68.1 - X-Apiversion: - - '4' - Authorization: - - Basic bXdqa2t4d2NwMzJja2huZjphOTI5OGY0M2IzMGM2OTlkYjMwNzJjYzRhMDBmN2Y0OQ== - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Mon, 24 Oct 2016 23:37: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: - - 3v249hqtptsg744y - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - Etag: - - W/"b4554092e4be72ebd7828d0995549c40" - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 5108ab96-4ee3-42b7-baf5-dc0fcb36f755 - X-Runtime: - - '0.392067' - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - body: - encoding: ASCII-8BIT - string: !binary |- - H4sIAEebDlgAA6RTTZObMAy951cw3B0D+c4Q0umhve+kl14yAgvirj8Y2+wm - /74GQrIb0kNnj3rvSbKfpHR/liJ4Q2O5VrswnkZhgKrQjKtqF/46/CDrcJ9N - 0qKxTks02SQIUs6yJI6W61myTqkPWsxzxQmUIz5eGVZtkj+rXK7K18VpltKP - bKsuubGOKJAYKC52oTMNhrSjBPyLKbSsQV1GOErgYoTWJ63GNUo4j7B3zC13 - T/oZBIeMgAvcpcZdyHzouMQwS6J4SeKIJPNDMtvOVtv57HdK7wldflOz/8u/ - J/T9O89JyVEwe3sS444UYJi9FgVj4DL8GS41CAJFoRvlPitawUjSgx7OuRB+ - 5AQqgyixn9R3svn5slhG0fIljuLNYj4/pPSpcijzRcv6GtdVI5/W7CM6KBmW - 0IihVa61QFBh1o4wpVfyJu62JLMOZa6FO+bNBc23IXRo3dTvV0p72ZDEJVRI - GiOyk3O13VIK1qKz09wAV847UPnnv8OlTabe29aQo0R30uwodKVp7/e0VtUe - 1Rs3WrWSnQXFcn3253PrMPS0TW4Lw2vnL/LJkDuN06+osiJfFGae0j4auC+u - Xf9vS9p7VSgIV9zxln+0uQRhvc/PpLc6/vftyFSpH6+rowWXvO3cWCTasG66 - Y2FKx0v7iNkOBMYM+gGNbLvvTzb5CwAA//8DAIUTIhjzBAAA - http_version: - recorded_at: Mon, 24 Oct 2016 23:37:42 GMT -- request: - method: post - uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/transactions - body: - encoding: UTF-8 - string: | - - - 29.99 - - true - - R208068637-BFZ8YP69 - cb5cr4 - 21068328 - sale - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.68.1 - X-Apiversion: - - '4' - Authorization: - - Basic bXdqa2t4d2NwMzJja2huZjphOTI5OGY0M2IzMGM2OTlkYjMwNzJjYzRhMDBmN2Y0OQ== - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Mon, 24 Oct 2016 23:37: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: - - 3v249hqtptsg744y - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - Etag: - - W/"ef652ff23cbccbb7deeed9589edb4bc9" - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 97513382-6f0e-4181-a9dd-a19de94b57ce - X-Runtime: - - '4.383993' - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - body: - encoding: ASCII-8BIT - string: !binary |- - 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 - http_version: - recorded_at: Mon, 24 Oct 2016 23:37:47 GMT -- request: - method: post - uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/customers - body: - encoding: UTF-8 - string: | - - - 0af4be7c-e6e1-4fea-a49c-63b674750fda - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.68.1 - X-Apiversion: - - '4' - Authorization: - - Basic bXdqa2t4d2NwMzJja2huZjphOTI5OGY0M2IzMGM2OTlkYjMwNzJjYzRhMDBmN2Y0OQ== - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Mon, 24 Oct 2016 23:38:03 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: - - 3v249hqtptsg744y - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - Etag: - - W/"f6b5bca257f3662ef264095acefff657" - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 8b29347a-ba41-46a0-95ae-0043d0e4d602 - X-Runtime: - - '0.459681' - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - body: - encoding: ASCII-8BIT - string: !binary |- - H4sIAFubDlgAA6RTTZOiMBC9+yso7jGKCqOFuLVV+/EDZi97mWpIg9nJB5UE - R/79BhCdEfewNcd+73V38ro7PZylCE5oLNdqHy7nizBAVWjGVbUPfz1/J0/h - IZulRWOdlmiyWRCknGXxJlrH8SpJqQ86zHPFEZQjPk4Mq7bRnySXSfm6Oa5S - +p7t1CU31hEFEgPFxT50psGQ9pSAfzGFljWodoKjBC4maH3UalqjhPMEe8Pc - cvegn0FwyAi4wLU17kPmQ8clhlm0WMZkuSDR+jla7VZPu0X0O6W3hD6/qdn/ - 5d8Shv6956TkKJi9PolxRwowzF6KgjHQjn+GtgZBoCh0o9xHRSeYSAbQwzkX - wo+cQGUQJQ6T+krWy5+L7Wa7+hYnSbJcr3+k9KFyLPNJy4Yal1UjH9bsPToq - GZbQiLFVrrVAUGHWjTClF/Iq7rcksw5lroV7yZsWzZcxdGjd3O9XSgfZmMQl - VEgaI7Kjc7XdUQrWorPz3ABXzjtQ+ee/QdslU+9tZ8iLRHfU7EXoStPB73mt - qgOqEzdadZK9BcVyffbnc+0w9rRNbgvDa+cv8sGQe43Tr6iy7SluqzqlQzRy - n1y74d+WdPeqUBCuuOMdf29zCcJ6nx9Jr3X877uRqVLfX1dPCy5517mxSLRh - /XSnwpROl/Yesz0IjBn0A5rYdtufbPYXAAD//wMAwnjm2vMEAAA= - http_version: - recorded_at: Mon, 24 Oct 2016 23:38:01 GMT -- request: - method: post - uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/transactions - body: - encoding: UTF-8 - string: | - - - 29.99 - - true - - R099215069-MMZ9N348 - 9v6ygp - 65246637 - sale - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.68.1 - X-Apiversion: - - '4' - Authorization: - - Basic bXdqa2t4d2NwMzJja2huZjphOTI5OGY0M2IzMGM2OTlkYjMwNzJjYzRhMDBmN2Y0OQ== - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Mon, 24 Oct 2016 23:38:07 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: - - 3v249hqtptsg744y - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - Etag: - - W/"b7296ac19aee779c51dc9a85affba744" - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 86286737-d8e4-4f26-ae62-59dc4372801b - X-Runtime: - - '3.968872' - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - body: - encoding: ASCII-8BIT - string: !binary |- - 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 - http_version: - recorded_at: Mon, 24 Oct 2016 23:38:06 GMT -- request: - method: post - uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/customers - body: - encoding: UTF-8 - string: | - - - a0d8462e-f0d7-4bb5-9391-2463381e7c57 - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.68.1 - X-Apiversion: - - '4' - Authorization: - - Basic bXdqa2t4d2NwMzJja2huZjphOTI5OGY0M2IzMGM2OTlkYjMwNzJjYzRhMDBmN2Y0OQ== - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Mon, 24 Oct 2016 23:41:29 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: - - 3v249hqtptsg744y - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - Etag: - - W/"c7bbe77e8b57f614da9ac5c27bf586f8" - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 1823b052-9760-4d10-97ed-ad750932f325 - X-Runtime: - - '0.400200' - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - body: - encoding: ASCII-8BIT - string: !binary |- - H4sIACmcDlgAA6RTTY+bMBC951cg7o4D5FuEVD30UvW2lapeogEPxF1/INvs - JvvrayAkuyE9VHuc997M2G9m0v1JiuAFjeVa7cJoOgsDVIVmXFW78OfTN7IO - 99kkLRrrtESTTYIg5SxbbKJNsk4WKfVBi3muOIJyxMcrw6pN/GeVy1X5vDgm - KX3PtuqSG+uIAomB4mIXOtNgSDtKwL+YQssa1HmEowQuRmh91Gpco4TTCHvF - 3HL3oJ9BcMgIuMCda9yFzIeOSwyzeBYtSTQj8fwpTrbzaBuvf6f0ltDlNzX7 - v/xbQt+/85yUHAWz1ycx7kgBhtlLUTAGzsOf4VyDIFAUulHuo6IVjCQ96OGc - C+FHTqAyiBL7SX0l0fdkuYo2i18/5vM4WUZ+lA+VQ5lPWtbXuKwa+bBm79FB - ybCERgytcq0FggqzdoQpvZBXcbclmXUocy3cIW/OaL4MoUPrpn6/UtrLhiQu - oULSGJEdnavtllKwFp2d5ga4ct6Byj//Fc5tMvXetoYcJLqjZgehK017v6e1 - qvaoXrjRqpXsLCiW65M/n2uHoadtclsYXjt/kQ+G3GmcfkaVbeK3t8KltI8G - 7pNr1//bkvZeFQrCFXe85e9tLkFY7/Mj6bWO/307MlXq++vqaMElbzs3Fok2 - rJvuWJjS8dLeY7YDgTGDfkAj2277k03+AgAA//8DAIj8VpvzBAAA - http_version: - recorded_at: Mon, 24 Oct 2016 23:41:28 GMT -- request: - method: post - uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/transactions - body: - encoding: UTF-8 - string: | - - - 29.99 - - true - - R972635243-EP3TWCBD - 92zzct - 59193835 - sale - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.68.1 - X-Apiversion: - - '4' - Authorization: - - Basic bXdqa2t4d2NwMzJja2huZjphOTI5OGY0M2IzMGM2OTlkYjMwNzJjYzRhMDBmN2Y0OQ== - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Mon, 24 Oct 2016 23:41:33 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: - - 3v249hqtptsg744y - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - Etag: - - W/"b4dbc19e59772e22dcf876c8c17da357" - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - dd03c1a4-8904-4632-855e-1776475c8e01 - X-Runtime: - - '4.187573' - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - body: - encoding: ASCII-8BIT - string: !binary |- - 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 - http_version: - recorded_at: Mon, 24 Oct 2016 23:41:32 GMT -- request: - method: post - uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/customers - body: - encoding: UTF-8 - string: | - - - 7d606a05-9f59-4315-b5de-5884474e7920 - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.68.1 - X-Apiversion: - - '4' - Authorization: - - Basic bXdqa2t4d2NwMzJja2huZjphOTI5OGY0M2IzMGM2OTlkYjMwNzJjYzRhMDBmN2Y0OQ== - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Mon, 24 Oct 2016 23:41:49 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: - - 3v249hqtptsg744y - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - Etag: - - W/"d81dd93e4a0a2a1751ede61b54a0ecb9" - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 0b517130-60ef-4559-96ee-dfa4c2e3b9a5 - X-Runtime: - - '0.330405' - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - body: - encoding: ASCII-8BIT - string: !binary |- - H4sIAD2cDlgAA6RTPZObMBDt/SsYelkG2/hjMM6kSJGZdJcmjWdBC+hOSIwk - 7kx+fQQY+874isyV+97bXentbnw8V8J7RW24kgc/mC98D2WmGJfFwf/99INs - /WMyi7PGWFWhTmaeF3OWRKv1br3ehjF1QYc5LitBWuLijWbFLnzepNUmf1mX - y5i+Zzt1zrWxREKFnuTi4FvdoE97SsBnTKaqGmQ7wbECLiZoXSo5rZHDeYK9 - YWq4fdBPI1hkBKxn2xoPPnOh5RX6SbgIIhIsSLh6Cpf7VbBf7f7E9JbQ5zc1 - +7/8W8LQv/ec5BwFM9cnMW5JBpqZS1HQGtrxz9DWIAhkmWqk/ajoBBPJADo4 - 5UK4kRMoNGKFw6S+uydu11G0DX5tg2i5DRc/Y/pQOZb5omVDjcuqkQ9r9h4d - lQxzaMTYKlVKIEg/6UYY0wt5FfdbkhiLVaqEPaVNi/rbGFo0du72K6aDbEzi - FRRIGi2S0tra7CkFY9CaeaqBS+scKNzz36DtkqnztjPkVKEtFTsJVSg6+D2v - ZXFE+cq1kp3kYECyVJ3d+Vw7jD1Nk5pM89q6i3ww5F5j1QvKZGfK6O9zTIdo - 5L64dsO/DenuVaIgXHLLO/7e5hyEcT4/kl7ruN93I5O5ur+unha84l3nxiBR - mvXTnQpjOl3ae8z0IDCm0Q1oYtttf5LZPwAAAP//AwAIDjoW8wQAAA== - http_version: - recorded_at: Mon, 24 Oct 2016 23:41:48 GMT -- request: - method: post - uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/transactions - body: - encoding: UTF-8 - string: | - - - 29.99 - - true - - R738069681-AFHY6AV3 - 9sh6zj - 64595582 - sale - - headers: - Accept-Encoding: - - gzip - Accept: - - application/xml - User-Agent: - - Braintree Ruby Gem 2.68.1 - X-Apiversion: - - '4' - Authorization: - - Basic bXdqa2t4d2NwMzJja2huZjphOTI5OGY0M2IzMGM2OTlkYjMwNzJjYzRhMDBmN2Y0OQ== - Content-Type: - - application/xml - response: - status: - code: 201 - message: Created - headers: - Date: - - Mon, 24 Oct 2016 23:41: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: - - 3v249hqtptsg744y - Vary: - - Accept-Encoding - Content-Encoding: - - gzip - Etag: - - W/"054bdd0b4e8fc28b406722689764d045" - Cache-Control: - - max-age=0, private, must-revalidate - X-Request-Id: - - 932c171d-d2b2-4760-94e4-29513458365b - X-Runtime: - - '4.086470' - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - body: - encoding: ASCII-8BIT - string: !binary |- - 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 - http_version: - recorded_at: Mon, 24 Oct 2016 23:41:52 GMT -recorded_with: VCR 3.0.3 diff --git a/spec/fixtures/cassettes/transaction/import/valid.yml b/spec/fixtures/cassettes/transaction/import/valid.yml index da2b2985..e279e5cc 100644 --- a/spec/fixtures/cassettes/transaction/import/valid.yml +++ b/spec/fixtures/cassettes/transaction/import/valid.yml @@ -16,7 +16,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.68.1 + - Braintree Ruby Gem 2.72.0 X-Apiversion: - '4' Authorization: @@ -29,7 +29,7 @@ http_interactions: message: Created headers: Date: - - Mon, 24 Oct 2016 23:12:57 GMT + - Thu, 02 Feb 2017 00:45:50 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -50,38 +50,38 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"5a85ce8e4c3886422ab6ce1ed418d089" + - W/"a259ef87ae56f88999a37468600aebe7" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 853d0a25-816b-4917-b032-4a9d505d4833 + - dc2fe303-d8cb-4fc2-9181-8356e43f8c2e X-Runtime: - - '0.474854' + - '0.408946' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIAHmVDlgAA6xVTXebOhDd51f4sFcwxI6dHKzs3rKbNl100zOgwehZSFQS - if3vK2G+HBvXPekO3bmShpmrucnLvhSzN9SGK7kJovt5MEOZKcbldhO8fvuP - rIMXepdktbGqRE3vZrOEM7qKosdosVgmoVt4zMWyAqQlPqjZ9in+f5WWq3y3 - LB6ScBz17JxrY4mEEmeSi01gdY1B2IQETEUyVVYgD2c4lsDFGVoVSp6fkcP+ - DHvH1HB74T6NYJERsDN7qHATMLe0vMSAxvPokURzEi++xQ/PUfy8XP1IwmFD - s7+u2N/tHzYc729qTnKOgpk+JcYtyUAz0x4KWsMh8NHT+BFxWMqFcN0kwJhG - Yzr82Mci7jrYYl2jyUmTx+jAne5iS5jsZXfZ5Y62UWM1ou3yniDh3qJkvmhX - aUJlILidukrj1ul/IlgpY0EQ9yiQPi2i+SoJx9D4d2pp9aGBCYiqgHjyxz8y - H25hytr1gGd/oF4r+Ock3Z7ySWE3Z4QTsnRylXQxj+L12nNkj3tNE38d/c4N - uMz69ZhRKMGcTKdK4BXnZxEHQV/lTqp36U4asIF2LKXKCTemBpkh9cRztN/x - +cre/vYGpte1ddKlr19HzB7t+AxTboc/Pi6HYA616PJOlRIIMqC+cp7aBAdy - rV1XiHswtfD5jw79GOm24L7iusmHlEragkZu6JyBF9gHBO2qF89P6A16wkb2 - MfcchMF21yiTAkHYwukEh7RHWEfjJWyR1FrQwtrKPIchGIPW3KcauPRTaet+ - 8B0O9046YQWHEqX9WaItFPsp1FaFb06i95XcvqB841pJT9gYkCxVezdw+/P7 - G52c/GNIQe6G1E7QjtrM1AWN1usoCdtFF3OpaCVG0u6AnqCxAqejL8rF2u8h - plidNRY97B+wjmbq1GSaV74Xpx40vDKrdijpypqKsSQ8rrpYLfmvuhllaaNp - VxnuLE5TyJfL1eIpXz7lUc4e1uwxy7PIAfliuU5zp5nJrf3Z/2AwvaEsFTFs - N6GpPj7aoV0axxd3sSLNYx/78gnQjL6kHYN40dY/zsgz4/6L0XHdtK9b9jXD - vsGubzLrq1Z9xahvtOlbTfpWi77ZoP9oz//EQj79ApJwJLZ+gW45yIne/QYA - AP//AwDINBkrNwwAAA== + H4sIAD6BklgAA6xVTXPiMAy991cwubtJ+ChpJ7i3Pe5l2z3sZceJFeLi2Fnb + ofDv1w75ohBKh85wQE9PtiI9S/HzruCTLSjNpFh54X3gTUCkkjKxXnmvLz9Q + 5D3juzittJEFKHw3mcSM4odgGUazZRT71nCY9aU5EQZZe6no+nH6tkyKZbZZ + 5LPYH3odO2NKGyRIARPB+MozqgLPr12cjHlSWZRE7E9wKAjjJ2iZS3F6RkZ2 + J9g7JJqZM/cpIAYoImZi9iWsPGpNwwrw8DQIlyiY2t9LEDzNF0+L4E/s9wF1 + fFXSr8X3AYf765qjjAGnukuJMoNSoqhuDiVKkb3nvMf+A2KxhHFuu4kIpQq0 + bvFDH9O07WCDtY1GR00eoj13vIsNYbSX7WXnO9p4tVEAps17hAQ7A4K6ol2k + cZkSzszYVQrWVv8jzlJqQziyjwLw4zwMlrE/hIafUwmj9jWMCC9zMh398I/M + 2TVMUdkesPQT6qWC3ybp5pQbhV2f4Y/I0spV4HkQTqPIcUSHO00jdx3+zTSx + mXX2kJFLTq1Mx0rgFOdmESMcv4qNkO/CntRjPe1QSpkhpnVFRArYEU/RLuL2 + yl7/9nqm07Wx0sWvvwbMDm35FBJm+i8+mL0zIxVv806k5ECEh13lHLV29uRK + 2a4g+2Aq7vIfHPrR04bArmSqzgcVUpgch9PYPwHPsPdAlK3eNDii1+gRG+jH + 3DPCNTRRg0xyINzkVifQpz3AWhoryBpQpTjOjSn1k+8TrcHo+0QRJtxUWtsP + fCf7eysdvyT7AoT5W4DJJf3L5Vr6WyvR+1Ksn0FsmZLCEVaaCJrInR243fnd + jVZO7jEkRGz61I7QllrP1DkOoyiM/cZofTYVJflA2i3QERSUxOrop7S+5n/v + k7RK6xXdx/dYS9NVolPFSteL4x3UvzIjNyBwrvTD9i32D1brqwT7V9WjLKk1 + bSvD7IpTmGSLxXL+mC0eszCjs4g+pFkaWiCbL6Iks5oZDe3O/obBtAVRSKTp + ZkRTnX8QoWwahxd3tiL1Yx/u5SOgHn1xMwbh7Fr/OCNPFvcXRsflpX15ZV9a + 2Fes66uW9cVVfWFRX7mmr13S167oqxf0p+v5W1bIzS8g9gdi6wywZi8nfPcf + AAD//wMAsY3YHDcMAAA= http_version: - recorded_at: Mon, 24 Oct 2016 23:12:56 GMT + recorded_at: Thu, 02 Feb 2017 00:45:50 GMT recorded_with: VCR 3.0.3 diff --git a/spec/fixtures/cassettes/transaction/import/valid/capture.yml b/spec/fixtures/cassettes/transaction/import/valid/capture.yml index 803755fe..0bc73d54 100644 --- a/spec/fixtures/cassettes/transaction/import/valid/capture.yml +++ b/spec/fixtures/cassettes/transaction/import/valid/capture.yml @@ -16,7 +16,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.69.1 + - Braintree Ruby Gem 2.72.0 X-Apiversion: - '4' Authorization: @@ -29,7 +29,7 @@ http_interactions: message: Created headers: Date: - - Tue, 10 Jan 2017 17:56:05 GMT + - Thu, 02 Feb 2017 00:47:43 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -50,40 +50,40 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"a99f981e6a0f42b93fad89a4c0162b87" + - W/"c45b4bddf0676baa6e2859c3c3d22cb9" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - a8a04cba-4bec-4fce-a6af-fb8e596fab34 + - ff2c3b6f-0079-489a-8e27-9cf6186ffa82 X-Runtime: - - '0.488778' + - '0.419086' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIADUgdVgAA6xVTXOjMAy991dkuLtAmjRph9DbHvey7R720jFYBDfGZm3T - JvvrVyZ8pQlpOu0NPT3ZQnqWoodtISavoA1XcuWF14E3AZkqxuV65T09/iBL - 7yG+itLKWFWAjq8mk4izeBoEYXgbLCMfDYehL82ptATthWbru+nLIikW2Wae - 30T+0OvYGdfGEkkLmEguVp7VFXh+7RJ0zJOqoqRyd4RDQbk4QstcyeMzMro9 - wt4gMdyeuE8DtcAItRO7K2HlMTQtL8DD3w8XJAhJGDyGi/v57X0w+xP5fUAd - X5Xsc/F9wP7+uuYk4yCY6VJi3JKUamaaQ6nWdOc576F/jyCWcCGwm4QypsGY - Ft/3UXYdbLC20eSgyUO05453sSGM9rK97HRHG6+xGsC2eY+QYGtBMle0szSh - Uiq4HbtKwxr1P+IslbFUEHwUEN/NwmAR+UNo+DuVtHpXw4SKMqfT0R9/z7y5 - hCkr7AFPP6CeK/jXJN2c8kVh12f4I7JEucp4FoTT5dJxZIc7TRN3XfybG4qZ - dfaQkSvBUKZjJXCKc7OIUxE/yY1UbxJP6rGeti+lygg3pqIyhdgRj9Eu4uuV - vfzt9Uyna4vSjZ9+DZgd2vIZJNz2f7w3e2dGK9HmnSglgEovdpVz1NrZkyuN - XSH4YCrh8h8c+t7ThsC25LrOhxRK2jwOp5F/BJ5g74BqLMQ0OKDX6AEb2Pvc - MyoMNFGDTHKgwuaoE+jTHmAtjRd0DaTSIs6tLc2971NjwJrrRFMu3VRa4w++ - 0d01Sscv6a4AaZ8LsLliz0Ktlf+KEr0u5foB5CvXSjrCylDJErXFgdud392I - cnKPIaFy06d2gLbUeqbO4nC5DCO/MVofpqKVGEi7BTqChpKijn4q9DXfvU+x - Kq1XdB/fYy3NVIlJNS9dLw53UP/KrNoAvuKtfvn3Evl7q/VVkv+t6lGW1JrG - ynBccTqm2Xy+mN1l87sszNjNkt2mWRoikM3myyRDzYyGdmd/w2B6BVkoYthm - RFOdfxChMY39iztZkfqxD/fyAVCPvqgZg3Byrb+fkUeL+xOj4/zSPr+yzy3s - C9b1Rcv67Ko+s6gvXNOXLulLV/TFC/rD9fwtK+TLLyDyB2LrDECzl1N89R8A - AP//AwDKz0k/NwwAAA== + H4sIAK+BklgAA6xVTXPiMAy991cwuZuQACXtBPe2x71su4e9dJxYIV4cO2s7 + Lfz7tUO+KITSoTMc0NOTrUjPUvy0K/jkDZRmUqy9YDrzJiBSSZnYrL2X5x8o + 8p7wXZxW2sgCFL6bTGJG8TyMgmC+jGLfGg6zvjQnwiBrrxTdPIR/V0mxyrbL + fB77Q69jZ0xpgwQpYCIYX3tGVeD5tYuTMU8qi5KI/QkOBWH8BC1zKU7PyMju + BHuHRDNz5j4FxABFxEzMvoS1R61pWAEeDmfBCs1C+3uezR4Xq8dF+Cf2+4A6 + virp1+L7gMP9dc1RxoBT3aVEmUEpUVQ3hxKlyN5z3mP/AbFYwji33USEUgVa + t/ihj7TrYIO1jUZHTR6iPXe8iw1htJftZec72ni1UQCmzXuEBDsDgrqiXaRx + mRLOzNhVCjZW/yPOUmpDOLKPAvDDIpitYn8IDT+nEkbtaxgRXuYkHP3wj8z5 + NUxR2R6w9BPqpYLfJunmlBuFXZ/hj8jSylXgxSwIo8hxRIc7TSN3Hf7NNLGZ + dfaQkUtOrUzHSuAU52YRIxy/iK2Q78Ke1GM97VBKmSGmdUVECtgRT9Eu4vbK + Xv/2eqbTtbHSxS+/BswObfkUEmb6Lz6YvTMjFW/zTqTkQISHXeUctXb25ErZ + riD7YCru8h8c+tHThsCuZKrOBxVSmBwHYeyfgGfYeyDKVi+cHdFr9IgN9GPu + GeEamqhBJjkQbnKrE+jTHmAtjRVkA6hSHOfGlPrR94nWYPQ0UYQJN5U29gPf + yX5qpeOXZF+AMK8FmFzSVy430n+zEp2WYvME4o0pKRxhrYmgidzZgdud391o + 5eQeQ0LEtk/tCG2p9Uxd4CCKgthvjNZnU1GSD6TdAh1BQUmsjn5K62v+9z5J + q7Re0X18j7U0XSU6Vax0vTjeQf0rM3ILAqfZytwvYv9gtb5KsH9VPcqSWtO2 + MsyuOIVJtlyuFg/Z8iELMjqP6H2apYEFssUySjKrmdHQ7uxvGExvIAqJNN2O + aKrzDyKUTePw4s5WpH7sw718BNSjL27GIJxd6x9n5Mni/sLouLy0L6/sSwv7 + inV91bK+uKovLOor1/S1S/raFX31gv50PX/LCrn5BcT+QGydAdbs5YTv/gMA + AP//AwAP/Dc/NwwAAA== http_version: - recorded_at: Tue, 10 Jan 2017 17:56:05 GMT + recorded_at: Thu, 02 Feb 2017 00:47:43 GMT - request: method: post uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/transactions @@ -98,8 +98,8 @@ http_interactions: true - 4xrjzj - 20011608 + cf7t64 + 32811358 sale headers: @@ -108,7 +108,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.69.1 + - Braintree Ruby Gem 2.72.0 X-Apiversion: - '4' Authorization: @@ -121,7 +121,7 @@ http_interactions: message: Created headers: Date: - - Tue, 10 Jan 2017 17:56:05 GMT + - Thu, 02 Feb 2017 00:47:43 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -142,54 +142,54 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"98f398ec03a5e317a4cd4efbac0b2774" + - W/"7ae6b76174e0638e6ac152ee2188b68e" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - a7076dca-c7f8-48fb-a213-30f156f0173c + - c14b01f0-08e3-44df-a9ce-be9792569d6c X-Runtime: - - '0.461658' + - '0.347815' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - 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 http_version: - recorded_at: Tue, 10 Jan 2017 17:56:05 GMT + recorded_at: Thu, 02 Feb 2017 00:47:43 GMT - request: method: put - uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/transactions/1jzd23yd/submit_for_settlement + uri: https://api.sandbox.braintreegateway.com/merchants/7rdg92j7bm7fk5h3/transactions/55ps1cza/submit_for_settlement body: encoding: UTF-8 string: | @@ -203,7 +203,7 @@ http_interactions: Accept: - application/xml User-Agent: - - Braintree Ruby Gem 2.69.1 + - Braintree Ruby Gem 2.72.0 X-Apiversion: - '4' Authorization: @@ -216,7 +216,7 @@ http_interactions: message: OK headers: Date: - - Tue, 10 Jan 2017 17:56:07 GMT + - Thu, 02 Feb 2017 00:47:44 GMT Content-Type: - application/xml; charset=utf-8 Transfer-Encoding: @@ -237,50 +237,50 @@ http_interactions: Content-Encoding: - gzip Etag: - - W/"05018ec8a9afe4cab6d613847487fe90" + - W/"aa50ea2fb1cc6d766950bdc820816e69" Cache-Control: - max-age=0, private, must-revalidate X-Request-Id: - - 90d56313-fa0b-4092-9c4f-5abda7fdd95d + - 5ae949b6-96df-4e29-9e27-b6ef2a2f6c43 X-Runtime: - - '0.291889' + - '0.347408' Strict-Transport-Security: - max-age=31536000; includeSubDomains body: encoding: ASCII-8BIT string: !binary |- - H4sIADcgdVgAA9xYS2/jNhC+768IfGckOXHiLBRtt10UKNruYV+HXgJKHFlM - JFIlKcfeX9+hKMlSRCUBigKL5hTNfBxyHpz56PjdoSrP9qA0l+J2FZ2HqzMQ - mWRc7G5XX7/8Srard8mb2CgqNM0MopI3Z2cxZ0l0/52tL44sDvDDyrShptGJ - btKKGwPsLpfqToMxJVQgTBx0AIs1xxoSTUuIg/ZfK8sapXDvI+FaEjwCJF8/ - f4iDudiCaSUbYZJocx6GcdB9WUUFKiuoMIRmmRUSPJ02UKWyxCP4tO3Zm5R4 - dGeCl7croxpYBc46RVvqVVCpGCLR/qeb/o+8//mXD9H64jIOBm3ruQKKASPU - nNlo3K4YfhpewSpZh9E1CSMShV+i67ebq7fh5i+MybCgXd/U7PXrr3D9aUEX - eW0k+mQ/XHLXYRhFV+G2Ty5Kc660IYJW8NRVVJZ0WZfJqqbi6NFARXnpkT9C - qrnx2aoLKXzynB5mCQjGbsUpL0ss6pOL4j92ThsFgBXCmAKtfd4fDAhms7AI - KWVGS2585hXs8DL6QiTxnpXuptxcRuF1HIxF/bGxatVx2SuntisILeuCrl+F - ungJJRrMB8/muRqlB13LG8F8d2rQ6K7QqVL0OFFiPEfNymekpspwDMepNT1Z - 4TNOG1NIxb+/bH5kNqUmK7yYgtf1uBp9Jf2/LMlnCuSHqcVxdrreSHIOJdNd - Lew1AaWkIhijWgoNXtda3Mj1KTr5E8fWs4DexDRrT0C/OSvPYlo39vv5yrnQ - Qnc4Gh7pETX34Kocp42eJzaulcxwN4xDfztoC28tfbrY/P7tD+w9z4GmVqZH - iUI72Ze0CysNVnDyvkbNHph3dYtoQ8sYtyfB4M9hM1/3kmc2QTkmHldg7aSg - 5hFpLC/AXdx4X0AZeiCOsXhVcICq7id5KmUJVKySnJbasqUB0DMH9IJkVPWT - zMgHEMnlQd1/v0d4++U0KUd5GK23W9tuxbiTXCbRdhvFQffRXRY0Slp29o1r - itUyfPfNoubKJbOSwhRJtI6DmXCGPQJVyC/W4QTcSrt9u7FNbKtpGefXz6dh - fpKeTlnIsg23v4Hwiu6ANKpMCmNq/TYIqMYmrc9TRbmwF6er+HPsnEFNj7Z3 - 31WA1cruSrmTwR79P6/F7h2IPVdSWMCtpoKl8oAkYrDfdTsFNUVm8VHaAnT/ - O00BtDQFnhiprXgQ8lHEwUjmQAxSbk5699mpGoWJwyrcNaXlbyPUU80wCixV - xWl3go5k3XnpUclyhOgFXfi0brAZ4jATDyfMRDptrjInVktFBondbi7t4yRZ - k7UU/LT1SeZAjeB/N9DdJBRj5Dn2YpXQfLO5vrzJNzd5lLOLLbvK8ixCQX65 - 2aY5luLiUmd5D6KSRLOHhZs26DsyOb1p3WuHFBzLUh0njGGYti0C0FCXQHs9 - kZWjoqpfyfQH/GChe0WdCMn4YdUilt5GLqAaIzBU/k/908jWPoZM9+GxRx3x - HC2xs0FCa45Hmsudw8Hc438fhKvngvCat+aPFZJB0hWOGxsl9VPJJtWZ4vUi - 1Rzphybf8mhSI7WRjCCbIza6nrb4BInHUsaLxSM/2cfOToJj0sOTGdftjffq - wFmR/RVcaNhLjzxssfOzTY0iB7W/F6BfC7d60LvxiY94AWXyWZacNRpveSdw - RF7t7dDPAZbGtd1bPhKX0pkWY5E2Sru3AAODj13dd/KJyp+g0UPCv/0UM/ud - 5JVwOFincYIp/zHsowrLFemvz2CTZZ53AqZlwXfred0Y8NVHN3oJF0hnG/cw - s3TDtd4723rjYAk0JYQjR6e8ccwJF0Ev22pZ5Eu2BqppCuwrBO+YLT7Ao+dy - GrFJB0ne/AMAAP//AwDmYFKVlhMAAA== + H4sIALCBklgAA9xY227cNhB9z1cY+05rtd6N14GsNG1QtEAToE3SAn0xKHG0 + Yi2RKkmtd/P1HYq6WpRtoCgQ1PCDNXM45Fw4c+jo7aksLo6gNJfidhVerlcX + IFLJuDjcrr58/pHsV2/jV5FRVGiaGkTFry4uIs7i3a7SYfqVRgF+WJk21NQ6 + 1nVScmOA3WVS3WkwpoAShImCFmCx5lxBrGkBUdD8aWVprRTufSZcS4JHgPjL + p/dRMBdbMC1lLUwc7i7X6yhov6yiBJXmVBhC09QKCZ5OGygTWeARfNrm7HVC + PLoLwYvblVE1rAJnnaIt9SKoVAyRaP+3m+6HvPv+h/fh5mobBb228VwBxYAR + ai5sNG5XDD8NL2EVb9bhNVlv8Pfzev1me/1me/UnxqRf0KyvK/by9VtcPyxo + I6+NRJ/sh0vu1WYfhle7fZdclGZcaUMELeGxq6gs6LIulWVFxdmjgZLywiN/ + gERz47NV5VL45Bk9zRIQjN2KEl4UWNSDi+w/dk4bBYAVwpgCrX3enwwIZrOw + CClkSgtufOYVHPAy+kIk8Z4V7qbcbMP1dRSMRd2xsWrVedkrp7YrCC2qnG5e + hLp6DiVqzAdP57kapQddy2rBfHeq1+i20KlS9DxRYjxHzcpnpKLKcAzH0Joe + rfAZp7XJpeJfnzc/MptQk+ZeTM6ralyNvpL+X5bkEwXyzdTiODttbyQZh4Lp + thaOmoBSUhGMUSWFBq9rDW7k+hQdf8Cx9SSgMzHN2iPQz87Kk5jGjeNxvnIu + tNADjoYHekbNX+CqHKeNnic2qpRMcTeMQ3c7aANvLP3y04dfX/+Bvecp0NTK + 9Cjh2k72Je3CSoMVHL+rUHME5l3dIJrQMsbtSTD4c9jM16PkqU1QhonHFVg7 + Cah5RGrLC3AXN94XUIaeiGMsXhWcoKy6SZ5IWQAVqzijhbZsqQd0zAG9IClV + 3SQz8h5EnGbX5jXSDPflNAkX8XYdbvZ7227FuJNs43C/D6Og/WgvCxolDTv7 + nWukecN31ywqrlwySylMHoebKJgJZ9gzUIW0ZLOegBtpu287toltNQ3j/PJp + GOaDdDhlLosm3P4Gwkt6AFKrIs6NqfSbIKAam7S+TBTlwl6ctuIvsXMGFT3b + 3n1XAlYruyvkQQZH9P+yEoe3II5cSWEBt5oKlsgTkojeftvtFFQUmcVHaQvQ + /e00OdDC5HhipLbiXsgHEQUjmQMxSLgZ9O6zVdUKE4dVeKgLy99GqMeafhRY + qorTboCOZO156VnJYoToBG34tK6xGeIwE/cDZiKdNleZEaulIoXYbjeXdnGS + rE4bCj5sPcgcqBb87xram4RijDzHXqximu1219ubbHeThRm72rPXaZaGKMi2 + u32SYSkuLnWWjyBKSTS7X7hpvb4lk9Ob1r52SM6xLNV5whj6adsgAA21CbTX + E1k5KsrqhUy/x/cW2lfUQEjGD6sGsfQ2cgHVGIG+8r/rnka29jFkuguPPeqI + 52iJnQ1iWnE80lzuHA7mHv/7IGyfCsJL3prfVkh6SVs4bmwU1E8l60SnileL + VHOk75t8w6NJhdRGMoJsjtjoetriIyQeSxkvFo/8aB87OwmOSQ9PZlw3N96r + A2dFdldwoWEvPfKwxc7PNjWKHNT+vwD9WrjVvd6NT3zECyjiT7LgrNZ4y1uB + I/LqaId+BrA0ru3e8oG4lM60GIukVtq9BRgYfOzqrpNPVP4EjR4S/u2nmNn/ + SV4Ih5N1GieY8h/DPqqwXJH++gzWaep5J2BaFny3nle1AV99tKOXcIF0tnYP + M0s3XOu9s603CpZAU0I4cnTKG8eccBH0vK2GRT5nq6eaJse+QvCO2eIDPHom + pxGbdJD41T8AAAD//wMAa4J8u5YTAAA= http_version: - recorded_at: Tue, 10 Jan 2017 17:56:07 GMT + recorded_at: Thu, 02 Feb 2017 00:47:44 GMT recorded_with: VCR 3.0.3 diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index e28194ee..d5c76500 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -41,7 +41,7 @@ # Paypal requires TLS v1.2 for ssl connections Capybara::Poltergeist::Driver.new(app, { phantomjs_logger: Rails.logger, - phantomjs_options: ['--ssl-protocol=tlsv1.2'], + phantomjs_options: ['--ssl-protocol=any'], timeout: 1.minute }) end diff --git a/vendor/assets/javascripts/braintree/3.5.0/client.js b/vendor/assets/javascripts/braintree/3.5.0/client.js new file mode 100644 index 00000000..116b7ad2 --- /dev/null +++ b/vendor/assets/javascripts/braintree/3.5.0/client.js @@ -0,0 +1,1098 @@ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}(g.braintree || (g.braintree = {})).client = f()}})(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;oDo not use this constructor directly. Use {@link module:braintree-web/client.create|braintree.client.create} instead. + * @classdesc This class is required by many other Braintree components. It serves as the base API layer that communicates with our servers. It is also capable of being used to formulate direct calls to our servers, such as direct credit card tokenization. See {@link Client#request}. + */ +function Client(configuration) { + var configurationJSON, gatewayConfiguration; + + configuration = configuration || {}; + + configurationJSON = JSON.stringify(configuration); + gatewayConfiguration = configuration.gatewayConfiguration; + + if (!gatewayConfiguration) { + throw new BraintreeError(errors.CLIENT_MISSING_GATEWAY_CONFIGURATION); + } + + [ + 'assetsUrl', + 'clientApiUrl', + 'configUrl' + ].forEach(function (property) { + if (property in gatewayConfiguration && !isWhitelistedDomain(gatewayConfiguration[property])) { + throw new BraintreeError({ + type: errors.CLIENT_GATEWAY_CONFIGURATION_INVALID_DOMAIN.type, + code: errors.CLIENT_GATEWAY_CONFIGURATION_INVALID_DOMAIN.code, + message: property + ' property is on an invalid domain.' + }); + } + }); + + /** + * Returns a copy of the configuration values. + * @public + * @returns {Client~configuration} configuration + */ + this.getConfiguration = function () { + return JSON.parse(configurationJSON); + }; + + this._request = request; + this._baseUrl = configuration.gatewayConfiguration.clientApiUrl + '/v1/'; + this._configuration = this.getConfiguration(); + + this.toJSON = this.getConfiguration; +} + +/** + * Used by other modules to formulate all network requests to the Braintree gateway. It is also capable of being used directly from your own form to tokenize credit card information. However, be sure to satisfy PCI compliance if you use direct card tokenization. + * @public + * @param {object} options Request options: + * @param {string} options.method HTTP method. i.e. "get" or "post" + * @param {string} options.endpoint Enpoint path. i.e. "payment_methods" + * @param {object} options.data Data to send with the request + * @param {string} [options.timeout=60000] Timeout limit + * @param {callback} callback The second argument, data, is the returned server data. + * @example + * Direct Credit Card Tokenization + * var createClient = require('braintree-web/client').create; + * + * createClient({ + * authorization: CLIENT_AUTHORIZATION + * }, function (createErr, clientInstance) { + * var form = document.getElementById('my-form-id'); + * var data = { + * creditCard: { + * number: form['cc-number'].value, + * cvv: form['cc-cvv'].value, + * expirationDate: form['cc-date'].value, + * billingAddress: { + * postalCode: form['cc-postal'].value + * } + * } + * }; + * + * // Warning: For a merchant to be eligible for the easiest level of PCI compliance (SAQ A), + * // payment fields cannot be hosted on your checkout page. + * // For an alternative to the following, use Hosted Fields. + * clientInstance.request({ + * endpoint: 'payment_methods/credit_cards', + * method: 'post', + * data: data + * }, function (requestErr, response) { + * if (requestErr) { throw new Error(requestErr); } + * + * console.log('Got nonce:', response.creditCards[0].nonce); + * }); + * }); + * @returns {void} + */ +Client.prototype.request = function (options, callback) { + var optionName; + + if (!options.method) { + optionName = 'options.method'; + } else if (!options.endpoint) { + optionName = 'options.endpoint'; + } + + if (optionName) { + callback = deferred(callback); + callback(new BraintreeError({ + type: errors.CLIENT_OPTION_REQUIRED.type, + code: errors.CLIENT_OPTION_REQUIRED.code, + message: optionName + ' is required when making a request.' + })); + return; + } + + this._request({ + url: this._baseUrl + options.endpoint, + method: options.method, + data: addMetadata(this._configuration, options.data), + // TODO: change this to options.headers and document it + // when features that require headers are out of beta + headers: options._headers, + timeout: options.timeout + }, this._bindRequestCallback(callback)); +}; + +Client.prototype._bindRequestCallback = function (callback) { + return function (err, data, status) { + if (status === -1) { + callback(new BraintreeError(errors.CLIENT_REQUEST_TIMEOUT), null, status); + } else if (status === 403) { + callback(new BraintreeError(errors.CLIENT_AUTHORIZATION_INSUFFICIENT), null, status); + } else if (status === 429) { + callback(new BraintreeError(errors.CLIENT_RATE_LIMITED), null, status); + } else if (status >= 500) { + callback(new BraintreeError(errors.CLIENT_GATEWAY_NETWORK), null, status); + } else if (status < 200 || status >= 400) { + callback(new BraintreeError({ + type: errors.CLIENT_REQUEST_ERROR.type, + code: errors.CLIENT_REQUEST_ERROR.code, + message: errors.CLIENT_REQUEST_ERROR.message, + details: {originalError: err} + }), null, status); + } else { + callback(null, data, status); + } + }; +}; + +module.exports = Client; + +},{"../lib/add-metadata":13,"../lib/deferred":16,"../lib/error":18,"../lib/is-whitelisted-domain":19,"./errors":2,"./request":7}],2:[function(_dereq_,module,exports){ +'use strict'; + +var BraintreeError = _dereq_('../lib/error'); + +module.exports = { + CLIENT_GATEWAY_CONFIGURATION_INVALID_DOMAIN: { + type: BraintreeError.types.MERCHANT, + code: 'CLIENT_GATEWAY_CONFIGURATION_INVALID_DOMAIN' + }, + CLIENT_OPTION_REQUIRED: { + type: BraintreeError.types.MERCHANT, + code: 'CLIENT_OPTION_REQUIRED' + }, + CLIENT_MISSING_GATEWAY_CONFIGURATION: { + type: BraintreeError.types.INTERNAL, + code: 'CLIENT_MISSING_GATEWAY_CONFIGURATION', + message: 'Missing gatewayConfiguration.' + }, + CLIENT_INVALID_AUTHORIZATION: { + type: BraintreeError.types.MERCHANT, + code: 'CLIENT_INVALID_AUTHORIZATION', + message: 'Authorization is invalid. Make sure your client token or tokenization key is valid.' + }, + CLIENT_GATEWAY_NETWORK: { + type: BraintreeError.types.NETWORK, + code: 'CLIENT_GATEWAY_NETWORK', + message: 'Cannot contact the gateway at this time.' + }, + CLIENT_REQUEST_TIMEOUT: { + type: BraintreeError.types.NETWORK, + code: 'CLIENT_REQUEST_TIMEOUT', + message: 'Request timed out waiting for a reply.' + }, + CLIENT_REQUEST_ERROR: { + type: BraintreeError.types.NETWORK, + code: 'CLIENT_REQUEST_ERROR', + message: 'There was a problem with your request.' + }, + CLIENT_RATE_LIMITED: { + type: BraintreeError.types.MERCHANT, + code: 'CLIENT_RATE_LIMITED', + message: 'You are being rate-limited; please try again in a few minutes.' + }, + CLIENT_AUTHORIZATION_INSUFFICIENT: { + type: BraintreeError.types.MERCHANT, + code: 'CLIENT_AUTHORIZATION_INSUFFICIENT', + message: 'The authorization used has insufficient privileges.' + } +}; + +},{"../lib/error":18}],3:[function(_dereq_,module,exports){ +(function (global){ +'use strict'; + +var BraintreeError = _dereq_('../lib/error'); +var request = _dereq_('./request'); +var uuid = _dereq_('../lib/uuid'); +var constants = _dereq_('../lib/constants'); +var createAuthorizationData = _dereq_('../lib/create-authorization-data'); +var errors = _dereq_('./errors'); + +function getConfiguration(options, callback) { + var configuration, authData, attrs, configUrl; + var sessionId = uuid(); + var analyticsMetadata = { + merchantAppId: global.location.host, + platform: constants.PLATFORM, + sdkVersion: constants.VERSION, + source: constants.SOURCE, + integration: constants.INTEGRATION, + integrationType: constants.INTEGRATION, + sessionId: sessionId + }; + + try { + authData = createAuthorizationData(options.authorization); + } catch (err) { + callback(new BraintreeError(errors.CLIENT_INVALID_AUTHORIZATION)); + return; + } + attrs = authData.attrs; + configUrl = authData.configUrl; + + attrs._meta = analyticsMetadata; + attrs.braintreeLibraryVersion = constants.BRAINTREE_LIBRARY_VERSION; + attrs.configVersion = '3'; + + request({ + url: configUrl, + method: 'GET', + data: attrs + }, function (err, response, status) { + var errorTemplate; + + if (err) { + if (status === 403) { + errorTemplate = errors.CLIENT_AUTHORIZATION_INSUFFICIENT; + } else { + errorTemplate = errors.CLIENT_GATEWAY_NETWORK; + } + + callback(new BraintreeError({ + type: errorTemplate.type, + code: errorTemplate.code, + message: errorTemplate.message, + details: { + originalError: err + } + })); + return; + } + + configuration = { + authorization: options.authorization, + authorizationType: attrs.tokenizationKey ? 'TOKENIZATION_KEY' : 'CLIENT_TOKEN', + analyticsMetadata: analyticsMetadata, + gatewayConfiguration: response + }; + + callback(null, configuration); + }); +} + +module.exports = { + getConfiguration: getConfiguration +}; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"../lib/constants":14,"../lib/create-authorization-data":15,"../lib/error":18,"../lib/uuid":25,"./errors":2,"./request":7}],4:[function(_dereq_,module,exports){ +'use strict'; + +var BraintreeError = _dereq_('../lib/error'); +var Client = _dereq_('./client'); +var getConfiguration = _dereq_('./get-configuration').getConfiguration; +var throwIfNoCallback = _dereq_('../lib/throw-if-no-callback'); +var packageVersion = "3.5.0"; +var deferred = _dereq_('../lib/deferred'); +var sharedErrors = _dereq_('../errors'); + +/** @module braintree-web/client */ + +/** + * @function + * @description This function is the entry point for the braintree.client module. It is used for creating {@link Client} instances that service communication to Braintree servers. + * @param {object} options Object containing all {@link Client} options: + * @param {string} options.authorization A tokenizationKey or clientToken. + * @param {callback} callback The second argument, data, is the {@link Client} instance. + * @returns {void} + * @example + * var createClient = require('braintree-web/client').create; + * + * createClient({ + * authorization: CLIENT_AUTHORIZATION + * }, function (createErr, clientInstance) { + * ... + * }); + * @static + */ +function create(options, callback) { + throwIfNoCallback(callback, 'create'); + + callback = deferred(callback); + + if (!options.authorization) { + callback(new BraintreeError({ + type: sharedErrors.INSTANTIATION_OPTION_REQUIRED.type, + code: sharedErrors.INSTANTIATION_OPTION_REQUIRED.code, + message: 'options.authorization is required when instantiating a client.' + })); + return; + } + + getConfiguration(options, function (err, configuration) { + var client; + + if (err) { + callback(err); + return; + } + + try { + client = new Client(configuration); + } catch (clientCreationError) { + callback(clientCreationError); + return; + } + + callback(null, client); + }); +} + +module.exports = { + create: create, + /** + * @description The current version of the SDK, i.e. `{@pkg version}`. + * @type {string} + */ + VERSION: packageVersion +}; + +},{"../errors":12,"../lib/deferred":16,"../lib/error":18,"../lib/throw-if-no-callback":24,"./client":1,"./get-configuration":3}],5:[function(_dereq_,module,exports){ +(function (global){ +'use strict'; + +var querystring = _dereq_('../../lib/querystring'); +var prepBody = _dereq_('./prep-body'); +var parseBody = _dereq_('./parse-body'); +var isXHRAvailable = global.XMLHttpRequest && 'withCredentials' in new global.XMLHttpRequest(); + +function getRequestObject() { + return isXHRAvailable ? new XMLHttpRequest() : new XDomainRequest(); +} + +function request(options, cb) { + var status, resBody; + var method = options.method; + var url = options.url; + var body = options.data; + var timeout = options.timeout; + var headers = options.headers || {}; + var req = getRequestObject(); + var callback = cb; + + if (method === 'GET') { + url = querystring.queryify(url, body); + body = null; + } + + if (isXHRAvailable) { + req.onreadystatechange = function () { + if (req.readyState !== 4) { return; } + + status = req.status; + resBody = parseBody(req.responseText); + + if (status >= 400 || status < 200) { + callback(resBody || 'error', null, status || 500); + } else { + callback(null, resBody, status); + } + }; + } else { + req.onload = function () { + callback(null, parseBody(req.responseText), req.status); + }; + + req.onerror = function () { + // XDomainRequest does not report a body or status for errors, so + // hardcode to 'error' and 500, respectively + callback('error', null, 500); + }; + + // This must remain for IE9 to work + req.onprogress = function () {}; + + req.ontimeout = function () { + callback('timeout', null, -1); + }; + } + + req.open(method, url, true); + req.timeout = timeout; + + if (isXHRAvailable && method === 'POST') { + req.setRequestHeader('Content-Type', 'application/json'); + + // TODO: Make this work in IE9. + // + // To do this, we'll change these URL and headers... + // /my/endpoint + // Content-Type: text/plain + // Authorization: Bearer abc123 + // + // ...to this URL: + // /my/endpoint?content_type=text%2Fplain&authorization:Bearer+abc123 + Object.keys(headers).forEach(function (headerKey) { + req.setRequestHeader(headerKey, headers[headerKey]); + }); + } + + try { + req.send(prepBody(method, body)); + } catch (e) { /* ignored */ } +} + +module.exports = { + request: request +}; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"../../lib/querystring":23,"./parse-body":10,"./prep-body":11}],6:[function(_dereq_,module,exports){ +(function (global){ +'use strict'; + +module.exports = function getUserAgent() { + return global.navigator.userAgent; +}; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],7:[function(_dereq_,module,exports){ +'use strict'; + +var ajaxIsAvaliable; +var once = _dereq_('../../lib/once'); +var JSONPDriver = _dereq_('./jsonp-driver'); +var AJAXDriver = _dereq_('./ajax-driver'); +var getUserAgent = _dereq_('./get-user-agent'); +var isHTTP = _dereq_('./is-http'); + +function isAjaxAvailable() { + if (ajaxIsAvaliable == null) { + ajaxIsAvaliable = !(isHTTP() && /MSIE\s(8|9)/.test(getUserAgent())); + } + + return ajaxIsAvaliable; +} + +module.exports = function (options, cb) { + cb = once(cb || Function.prototype); + options.method = (options.method || 'GET').toUpperCase(); + options.timeout = options.timeout == null ? 60000 : options.timeout; + options.data = options.data || {}; + + if (isAjaxAvailable()) { + AJAXDriver.request(options, cb); + } else { + JSONPDriver.request(options, cb); + } +}; + +},{"../../lib/once":21,"./ajax-driver":5,"./get-user-agent":6,"./is-http":8,"./jsonp-driver":9}],8:[function(_dereq_,module,exports){ +(function (global){ +'use strict'; + +module.exports = function () { + return global.location.protocol === 'http:'; +}; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],9:[function(_dereq_,module,exports){ +(function (global){ +'use strict'; + +var head; +var uuid = _dereq_('../../lib/uuid'); +var querystring = _dereq_('../../lib/querystring'); +var timeouts = {}; + +function _removeScript(script) { + if (script && script.parentNode) { + script.parentNode.removeChild(script); + } +} + +function _createScriptTag(url, callbackName) { + var script = document.createElement('script'); + var done = false; + + script.src = url; + script.async = true; + script.onerror = function () { + global[callbackName]({message: 'error', status: 500}); + }; + + script.onload = script.onreadystatechange = function () { + if (done) { return; } + + if (!this.readyState || this.readyState === 'loaded' || this.readyState === 'complete') { + done = true; + script.onload = script.onreadystatechange = null; + } + }; + + return script; +} + +function _cleanupGlobal(callbackName) { + try { + delete global[callbackName]; + } catch (_) { + global[callbackName] = null; + } +} + +function _setupTimeout(timeout, callbackName) { + timeouts[callbackName] = setTimeout(function () { + timeouts[callbackName] = null; + + global[callbackName]({ + error: 'timeout', + status: -1 + }); + + global[callbackName] = function () { + _cleanupGlobal(callbackName); + }; + }, timeout); +} + +function _setupGlobalCallback(script, callback, callbackName) { + global[callbackName] = function (response) { + var status = response.status || 500; + var err = null; + var data = null; + + delete response.status; + + if (status >= 400 || status < 200) { + err = response; + } else { + data = response; + } + + _cleanupGlobal(callbackName); + _removeScript(script); + + clearTimeout(timeouts[callbackName]); + callback(err, data, status); + }; +} + +function request(options, callback) { + var script; + var callbackName = 'callback_json_' + uuid().replace(/-/g, ''); + var url = options.url; + var attrs = options.data; + var method = options.method; + var timeout = options.timeout; + + url = querystring.queryify(url, attrs); + url = querystring.queryify(url, { + _method: method, + callback: callbackName + }); + + script = _createScriptTag(url, callbackName); + _setupGlobalCallback(script, callback, callbackName); + _setupTimeout(timeout, callbackName); + + if (!head) { + head = document.getElementsByTagName('head')[0]; + } + + head.appendChild(script); +} + +module.exports = { + request: request +}; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"../../lib/querystring":23,"../../lib/uuid":25}],10:[function(_dereq_,module,exports){ +'use strict'; + +module.exports = function (body) { + try { + body = JSON.parse(body); + } catch (e) { /* ignored */ } + + return body; +}; + +},{}],11:[function(_dereq_,module,exports){ +'use strict'; + +module.exports = function (method, body) { + if (typeof method !== 'string') { + throw new Error('Method must be a string'); + } + + if (method.toLowerCase() !== 'get' && body != null) { + body = typeof body === 'string' ? body : JSON.stringify(body); + } + + return body; +}; + +},{}],12:[function(_dereq_,module,exports){ +'use strict'; + +var BraintreeError = _dereq_('./lib/error'); + +module.exports = { + CALLBACK_REQUIRED: { + type: BraintreeError.types.MERCHANT, + code: 'CALLBACK_REQUIRED' + }, + INSTANTIATION_OPTION_REQUIRED: { + type: BraintreeError.types.MERCHANT, + code: 'INSTANTIATION_OPTION_REQUIRED' + }, + INCOMPATIBLE_VERSIONS: { + type: BraintreeError.types.MERCHANT, + code: 'INCOMPATIBLE_VERSIONS' + }, + METHOD_CALLED_AFTER_TEARDOWN: { + type: BraintreeError.types.MERCHANT, + code: 'METHOD_CALLED_AFTER_TEARDOWN' + }, + BRAINTREE_API_ACCESS_RESTRICTED: { + type: BraintreeError.types.MERCHANT, + code: 'BRAINTREE_API_ACCESS_RESTRICTED', + message: 'Your access is restricted and cannot use this part of the Braintree API.' + } +}; + +},{"./lib/error":18}],13:[function(_dereq_,module,exports){ +'use strict'; + +var createAuthorizationData = _dereq_('./create-authorization-data'); +var jsonClone = _dereq_('./json-clone'); +var constants = _dereq_('./constants'); + +function addMetadata(configuration, data) { + var key; + var attrs = data ? jsonClone(data) : {}; + var authAttrs = createAuthorizationData(configuration.authorization).attrs; + var _meta = jsonClone(configuration.analyticsMetadata); + + attrs.braintreeLibraryVersion = constants.BRAINTREE_LIBRARY_VERSION; + + for (key in attrs._meta) { + if (attrs._meta.hasOwnProperty(key)) { + _meta[key] = attrs._meta[key]; + } + } + + attrs._meta = _meta; + + if (authAttrs.tokenizationKey) { + attrs.tokenizationKey = authAttrs.tokenizationKey; + } else { + attrs.authorizationFingerprint = authAttrs.authorizationFingerprint; + } + + return attrs; +} + +module.exports = addMetadata; + +},{"./constants":14,"./create-authorization-data":15,"./json-clone":20}],14:[function(_dereq_,module,exports){ +'use strict'; + +var VERSION = "3.5.0"; +var PLATFORM = 'web'; + +module.exports = { + ANALYTICS_REQUEST_TIMEOUT_MS: 2000, + INTEGRATION_TIMEOUT_MS: 60000, + VERSION: VERSION, + INTEGRATION: 'custom', + SOURCE: 'client', + PLATFORM: PLATFORM, + BRAINTREE_LIBRARY_VERSION: 'braintree/' + PLATFORM + '/' + VERSION +}; + +},{}],15:[function(_dereq_,module,exports){ +'use strict'; + +var atob = _dereq_('../lib/polyfill').atob; + +var apiUrls = { + production: 'https://api.braintreegateway.com:443', + sandbox: 'https://api.sandbox.braintreegateway.com:443' +}; + +/* eslint-enable no-undef,block-scoped-var */ + +function _isTokenizationKey(str) { + return /^[a-zA-Z0-9]+_[a-zA-Z0-9]+_[a-zA-Z0-9_]+$/.test(str); +} + +function _parseTokenizationKey(tokenizationKey) { + var tokens = tokenizationKey.split('_'); + var environment = tokens[0]; + var merchantId = tokens.slice(2).join('_'); + + return { + merchantId: merchantId, + environment: environment + }; +} + +function createAuthorizationData(authorization) { + var parsedClientToken, parsedTokenizationKey; + var data = { + attrs: {}, + configUrl: '' + }; + + if (_isTokenizationKey(authorization)) { + parsedTokenizationKey = _parseTokenizationKey(authorization); + data.attrs.tokenizationKey = authorization; + data.configUrl = apiUrls[parsedTokenizationKey.environment] + '/merchants/' + parsedTokenizationKey.merchantId + '/client_api/v1/configuration'; + } else { + parsedClientToken = JSON.parse(atob(authorization)); + data.attrs.authorizationFingerprint = parsedClientToken.authorizationFingerprint; + data.configUrl = parsedClientToken.configUrl; + } + + return data; +} + +module.exports = createAuthorizationData; + +},{"../lib/polyfill":22}],16:[function(_dereq_,module,exports){ +'use strict'; + +module.exports = function (fn) { + return function () { + // IE9 doesn't support passing arguments to setTimeout so we have to emulate it. + var args = arguments; + + setTimeout(function () { + fn.apply(null, args); + }, 1); + }; +}; + +},{}],17:[function(_dereq_,module,exports){ +'use strict'; + +function enumerate(values, prefix) { + prefix = prefix == null ? '' : prefix; + + return values.reduce(function (enumeration, value) { + enumeration[value] = prefix + value; + return enumeration; + }, {}); +} + +module.exports = enumerate; + +},{}],18:[function(_dereq_,module,exports){ +'use strict'; + +var enumerate = _dereq_('./enumerate'); + +/** + * @class + * @global + * @param {object} options Construction options + * @classdesc This class is used to report error conditions, frequently as the first parameter to callbacks throughout the Braintree SDK. + * @description You cannot use this constructor directly. Interact with instances of this class through {@link callback callbacks}. + */ +function BraintreeError(options) { + if (!BraintreeError.types.hasOwnProperty(options.type)) { + throw new Error(options.type + ' is not a valid type.'); + } + + if (!options.code) { + throw new Error('Error code required.'); + } + + if (!options.message) { + throw new Error('Error message required.'); + } + + this.name = 'BraintreeError'; + + /** + * @type {string} + * @description A code that corresponds to specific errors. + */ + this.code = options.code; + + /** + * @type {string} + * @description A short description of the error. + */ + this.message = options.message; + + /** + * @type {BraintreeError.types} + * @description The type of error. + */ + this.type = options.type; + + /** + * @type {object=} + * @description Additional information about the error, such as an underlying network error response. + */ + this.details = options.details; +} + +BraintreeError.prototype = Object.create(Error.prototype); +BraintreeError.prototype.constructor = BraintreeError; + +/** + * Enum for {@link BraintreeError} types. + * @name BraintreeError.types + * @enum + * @readonly + * @memberof BraintreeError + * @property {string} CUSTOMER An error caused by the customer. + * @property {string} MERCHANT An error that is actionable by the merchant. + * @property {string} NETWORK An error due to a network problem. + * @property {string} INTERNAL An error caused by Braintree code. + * @property {string} UNKNOWN An error where the origin is unknown. + */ +BraintreeError.types = enumerate([ + 'CUSTOMER', + 'MERCHANT', + 'NETWORK', + 'INTERNAL', + 'UNKNOWN' +]); + +module.exports = BraintreeError; + +},{"./enumerate":17}],19:[function(_dereq_,module,exports){ +'use strict'; + +var parser; +var legalHosts = { + 'paypal.com': 1, + 'braintreepayments.com': 1, + 'braintreegateway.com': 1 +}; + +/* eslint-enable no-undef,block-scoped-var */ + +function stripSubdomains(domain) { + return domain.split('.').slice(-2).join('.'); +} + +function isWhitelistedDomain(url) { + var mainDomain; + + url = url.toLowerCase(); + + if (!/^https:/.test(url)) { + return false; + } + + parser = parser || document.createElement('a'); + parser.href = url; + mainDomain = stripSubdomains(parser.hostname); + + return legalHosts.hasOwnProperty(mainDomain); +} + +module.exports = isWhitelistedDomain; + +},{}],20:[function(_dereq_,module,exports){ +'use strict'; + +module.exports = function (value) { + return JSON.parse(JSON.stringify(value)); +}; + +},{}],21:[function(_dereq_,module,exports){ +'use strict'; + +function once(fn) { + var called = false; + + return function () { + if (!called) { + called = true; + fn.apply(null, arguments); + } + }; +} + +module.exports = once; + +},{}],22:[function(_dereq_,module,exports){ +(function (global){ +'use strict'; + +var atobNormalized = typeof global.atob === 'function' ? global.atob : atob; + +function atob(base64String) { + var a, b, c, b1, b2, b3, b4, i; + var base64Matcher = new RegExp('^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})([=]{1,2})?$'); + var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; + var result = ''; + + if (!base64Matcher.test(base64String)) { + throw new Error('Non base64 encoded input passed to window.atob polyfill'); + } + + i = 0; + do { + b1 = characters.indexOf(base64String.charAt(i++)); + b2 = characters.indexOf(base64String.charAt(i++)); + b3 = characters.indexOf(base64String.charAt(i++)); + b4 = characters.indexOf(base64String.charAt(i++)); + + a = (b1 & 0x3F) << 2 | b2 >> 4 & 0x3; + b = (b2 & 0xF) << 4 | b3 >> 2 & 0xF; + c = (b3 & 0x3) << 6 | b4 & 0x3F; + + result += String.fromCharCode(a) + (b ? String.fromCharCode(b) : '') + (c ? String.fromCharCode(c) : ''); + } while (i < base64String.length); + + return result; +} + +module.exports = { + atob: atobNormalized, + _atob: atob +}; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],23:[function(_dereq_,module,exports){ +(function (global){ +'use strict'; + +function _notEmpty(obj) { + var key; + + for (key in obj) { + if (obj.hasOwnProperty(key)) { return true; } + } + + return false; +} + +function _isArray(value) { + return value && typeof value === 'object' && typeof value.length === 'number' && + Object.prototype.toString.call(value) === '[object Array]' || false; +} + +function parse(url) { + var query, params; + + url = url || global.location.href; + + if (!/\?/.test(url)) { + return {}; + } + + query = url.replace(/#.*$/, '').replace(/^.*\?/, '').split('&'); + + params = query.reduce(function (toReturn, keyValue) { + var parts = keyValue.split('='); + var key = decodeURIComponent(parts[0]); + var value = decodeURIComponent(parts[1]); + + toReturn[key] = value; + return toReturn; + }, {}); + + return params; +} + +function stringify(params, namespace) { + var k, v, p; + var query = []; + + 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 queryify(url, params) { + url = url || ''; + + if (params != null && typeof params === 'object' && _notEmpty(params)) { + url += url.indexOf('?') === -1 ? '?' : ''; + url += url.indexOf('=') !== -1 ? '&' : ''; + url += stringify(params); + } + + return url; +} + +module.exports = { + parse: parse, + stringify: stringify, + queryify: queryify +}; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],24:[function(_dereq_,module,exports){ +'use strict'; + +var BraintreeError = _dereq_('./error'); +var sharedErrors = _dereq_('../errors'); + +module.exports = function (callback, functionName) { + if (typeof callback !== 'function') { + throw new BraintreeError({ + type: sharedErrors.CALLBACK_REQUIRED.type, + code: sharedErrors.CALLBACK_REQUIRED.code, + message: functionName + ' must include a callback function.' + }); + } +}; + +},{"../errors":12,"./error":18}],25:[function(_dereq_,module,exports){ +'use strict'; + +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); + }); +} + +module.exports = uuid; + +},{}]},{},[4])(4) +}); diff --git a/vendor/assets/javascripts/braintree/3.5.0/data-collector.js b/vendor/assets/javascripts/braintree/3.5.0/data-collector.js new file mode 100644 index 00000000..7952056b --- /dev/null +++ b/vendor/assets/javascripts/braintree/3.5.0/data-collector.js @@ -0,0 +1,599 @@ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}(g.braintree || (g.braintree = {})).dataCollector = f()}})(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'); + } + + doc.close(); + + return iframe; +} + +module.exports = { + setup: setup +}; + +},{}],3:[function(_dereq_,module,exports){ +'use strict'; +/* eslint-disable camelcase */ +/** @module braintree-web/data-collector */ + +var kount = _dereq_('./kount'); +var fraudnet = _dereq_('./fraudnet'); +var BraintreeError = _dereq_('../lib/error'); +var methods = _dereq_('../lib/methods'); +var throwIfNoCallback = _dereq_('../lib/throw-if-no-callback'); +var convertMethodsToError = _dereq_('../lib/convert-methods-to-error'); +var deferred = _dereq_('../lib/deferred'); +var VERSION = "3.5.0"; +var sharedErrors = _dereq_('../errors'); +var errors = _dereq_('./errors'); + +/** + * @class + * @global + * @name DataCollector + * @description Do not use this constructor directly. Use {@link module:braintree-web/data-collector.create|braintree-web.data-collector.create} instead. + * @classdesc This class is used for advanced fraud integration with PayPal and Kount. Instances of this class have {@link DataCollector#deviceData|deviceData} which is used to correlate user sessions with server transactions. + */ + +/** + * @memberof DataCollector + * @name deviceData + * @type string + * @description JSON string to pass with server transactions. + * @instance + */ + +/** + * @memberof DataCollector + * @name teardown + * @function + * @description Cleanly remove all event handlers and DOM nodes that were added. + * @param {callback} [callback] Called once teardown is complete. No data is returned if teardown completes successfully. + * @instance + * @returns {void} + */ + +/** + * @static + * @function create + * @param {object} options Creation options: + * @param {Client} options.client A {@link Client} instance. + * @param {boolean} [options.kount] If true, Kount fraud data collection is enabled. + * @param {boolean} [options.paypal] If true, PayPal fraud data collection is enabled. + * @param {callback} callback The second argument, `data`, is the {@link DataCollector} instance. + * @returns {void} + */ +function create(options, callback) { + var data, kountInstance, fraudnetInstance, result, config, clientVersion; + var instances = []; + + throwIfNoCallback(callback, 'create'); + + callback = deferred(callback); + + function teardown(cb) { + var i; + + for (i = 0; i < instances.length; i++) { + instances[i].teardown(); + } + + convertMethodsToError(result, methods(result)); + + if (cb) { + cb = deferred(cb); + cb(); + } + } + + if (options.client == null) { + callback(new BraintreeError({ + type: sharedErrors.INSTANTIATION_OPTION_REQUIRED.type, + code: sharedErrors.INSTANTIATION_OPTION_REQUIRED.code, + message: 'options.client is required when instantiating Data Collector.' + })); + return; + } + + config = options.client.getConfiguration(); + clientVersion = config.analyticsMetadata.sdkVersion; + + if (clientVersion !== VERSION) { + callback(new BraintreeError({ + type: sharedErrors.INCOMPATIBLE_VERSIONS.type, + code: sharedErrors.INCOMPATIBLE_VERSIONS.code, + message: 'Client (version ' + clientVersion + ') and Data Collector (version ' + VERSION + ') components must be from the same SDK version.' + })); + return; + } + + if (options.kount === true) { + if (!config.gatewayConfiguration.kount) { + callback(new BraintreeError(errors.DATA_COLLECTOR_KOUNT_NOT_ENABLED)); + return; + } + + try { + kountInstance = kount.setup({ + environment: config.gatewayConfiguration.environment, + merchantId: config.gatewayConfiguration.kount.kountMerchantId + }); + } catch (err) { + callback(new BraintreeError({ + type: errors.DATA_COLLECTOR_KOUNT_ERROR.type, + code: errors.DATA_COLLECTOR_KOUNT_ERROR.code, + message: err.message + })); + return; + } + + data = kountInstance.deviceData; + instances.push(kountInstance); + } else { + data = {}; + } + + if (options.paypal === true) { + if (config.gatewayConfiguration.paypalEnabled !== true) { + callback(new BraintreeError(errors.DATA_COLLECTOR_PAYPAL_NOT_ENABLED)); + return; + } + + fraudnetInstance = fraudnet.setup(); + data.correlation_id = fraudnetInstance.sessionId; + instances.push(fraudnetInstance); + } + + if (instances.length === 0) { + callback(new BraintreeError(errors.DATA_COLLECTOR_REQUIRES_CREATE_OPTIONS)); + return; + } + + result = { + deviceData: JSON.stringify(data), + teardown: teardown + }; + + callback(null, result); +} + +module.exports = { + create: create, + /** + * @description The current version of the SDK, i.e. `{@pkg version}`. + * @type {string} + */ + VERSION: VERSION +}; + +},{"../errors":6,"../lib/convert-methods-to-error":7,"../lib/deferred":8,"../lib/error":10,"../lib/methods":11,"../lib/throw-if-no-callback":12,"./errors":1,"./fraudnet":2,"./kount":4}],4:[function(_dereq_,module,exports){ +'use strict'; +/* eslint-disable camelcase */ + +var sjcl = _dereq_('./vendor/sjcl'); + +var QA_URL = 'https://assets.qa.braintreepayments.com/data'; +var IFRAME_ID = 'braintreeDataFrame'; +var environmentUrls = { + development: QA_URL, + qa: QA_URL, + sandbox: 'https://assets.braintreegateway.com/sandbox/data', + production: 'https://assets.braintreegateway.com/data' +}; + +function setup(o) { + var options = o != null ? o : {}; + + return new Kount(options); +} + +function Kount(options) { + sjcl.random.startCollectors(); + + this._currentEnvironment = this._initializeEnvironment(options); + this._deviceSessionId = this._generateDeviceSessionId(); + this.deviceData = this._getDeviceData(); + + this._iframe = this._setupIFrame(); +} + +Kount.prototype.teardown = function () { + sjcl.random.stopCollectors(); + this._removeIframe(); +}; + +Kount.prototype._removeIframe = function () { + this._iframe.parentNode.removeChild(this._iframe); +}; + +Kount.prototype._getDeviceData = function () { + return { + device_session_id: this._deviceSessionId, + fraud_merchant_id: this._currentEnvironment.id + }; +}; + +Kount.prototype._generateDeviceSessionId = function () { + var bits, hexString; + + bits = sjcl.random.randomWords(4, 0); + hexString = sjcl.codec.hex.fromBits(bits); + + return hexString; +}; + +Kount.prototype._setupIFrame = function () { + var params; + var self = this; + var iframe = document.getElementById(IFRAME_ID); + + if (iframe != null) { + return iframe; + } + + params = '?m=' + this._currentEnvironment.id + '&s=' + this._deviceSessionId; + + iframe = document.createElement('iframe'); + iframe.width = 1; + iframe.id = IFRAME_ID; + iframe.height = 1; + iframe.frameBorder = 0; + iframe.scrolling = 'no'; + + document.body.appendChild(iframe); + setTimeout(function () { + iframe.src = self._currentEnvironment.url + '/logo.htm' + params; + iframe.innerHTML = ''; + }, 10); + + return iframe; +}; + +Kount.prototype._initializeEnvironment = function (options) { + var url = environmentUrls[options.environment]; + + if (url == null) { + throw new Error(options.environment + ' is not a valid environment for kount.environment'); + } + + return { + url: url, + name: options.environment, + id: options.merchantId + }; +}; + +module.exports = { + setup: setup, + Kount: Kount, + environmentUrls: environmentUrls +}; + +},{"./vendor/sjcl":5}],5:[function(_dereq_,module,exports){ +"use strict";var sjcl={cipher:{},hash:{},keyexchange:{},mode:{},misc:{},codec:{},exception:{corrupt:function(a){this.toString=function(){return"CORRUPT: "+this.message};this.message=a},invalid:function(a){this.toString=function(){return"INVALID: "+this.message};this.message=a},bug:function(a){this.toString=function(){return"BUG: "+this.message};this.message=a},notReady:function(a){this.toString=function(){return"NOT READY: "+this.message};this.message=a}}}; +sjcl.cipher.aes=function(a){this.l[0][0][0]||this.G();var b,c,d,e,f=this.l[0][4],g=this.l[1];b=a.length;var k=1;if(4!==b&&6!==b&&8!==b)throw new sjcl.exception.invalid("invalid aes key size");this.b=[d=a.slice(0),e=[]];for(a=b;a<4*b+28;a++){c=d[a-1];if(0===a%b||8===b&&4===a%b)c=f[c>>>24]<<24^f[c>>16&255]<<16^f[c>>8&255]<<8^f[c&255],0===a%b&&(c=c<<8^c>>>24^k<<24,k=k<<1^283*(k>>7));d[a]=d[a-b]^c}for(b=0;a;b++,a--)c=d[b&3?a:a-4],e[b]=4>=a||4>b?c:g[0][f[c>>>24]]^g[1][f[c>>16&255]]^g[2][f[c>>8&255]]^g[3][f[c& +255]]}; +sjcl.cipher.aes.prototype={encrypt:function(a){return t(this,a,0)},decrypt:function(a){return t(this,a,1)},l:[[[],[],[],[],[]],[[],[],[],[],[]]],G:function(){var a=this.l[0],b=this.l[1],c=a[4],d=b[4],e,f,g,k=[],l=[],p,n,h,m;for(e=0;0x100>e;e++)l[(k[e]=e<<1^283*(e>>7))^e]=e;for(f=g=0;!c[f];f^=p||1,g=l[g]||1)for(h=g^g<<1^g<<2^g<<3^g<<4,h=h>>8^h&255^99,c[f]=h,d[h]=f,n=k[e=k[p=k[f]]],m=0x1010101*n^0x10001*e^0x101*p^0x1010100*f,n=0x101*k[h]^0x1010100*h,e=0;4>e;e++)a[e][f]=n=n<<24^n>>>8,b[e][h]=m=m<<24^m>>>8;for(e= +0;5>e;e++)a[e]=a[e].slice(0),b[e]=b[e].slice(0)}}; +function t(a,b,c){if(4!==b.length)throw new sjcl.exception.invalid("invalid aes block size");var d=a.b[c],e=b[0]^d[0],f=b[c?3:1]^d[1],g=b[2]^d[2];b=b[c?1:3]^d[3];var k,l,p,n=d.length/4-2,h,m=4,q=[0,0,0,0];k=a.l[c];a=k[0];var r=k[1],v=k[2],w=k[3],x=k[4];for(h=0;h>>24]^r[f>>16&255]^v[g>>8&255]^w[b&255]^d[m],l=a[f>>>24]^r[g>>16&255]^v[b>>8&255]^w[e&255]^d[m+1],p=a[g>>>24]^r[b>>16&255]^v[e>>8&255]^w[f&255]^d[m+2],b=a[b>>>24]^r[e>>16&255]^v[f>>8&255]^w[g&255]^d[m+3],m+=4,e=k,f=l,g=p;for(h= +0;4>h;h++)q[c?3&-h:h]=x[e>>>24]<<24^x[f>>16&255]<<16^x[g>>8&255]<<8^x[b&255]^d[m++],k=e,e=f,f=g,g=b,b=k;return q} +sjcl.bitArray={bitSlice:function(a,b,c){a=sjcl.bitArray.M(a.slice(b/32),32-(b&31)).slice(1);return void 0===c?a:sjcl.bitArray.clamp(a,c-b)},extract:function(a,b,c){var d=Math.floor(-b-c&31);return((b+c-1^b)&-32?a[b/32|0]<<32-d^a[b/32+1|0]>>>d:a[b/32|0]>>>d)&(1<>b-1,1));return a},partial:function(a,b,c){return 32===a?b:(c?b|0:b<<32-a)+0x10000000000*a},getPartial:function(a){return Math.round(a/0x10000000000)||32},equal:function(a,b){if(sjcl.bitArray.bitLength(a)!==sjcl.bitArray.bitLength(b))return!1;var c=0,d;for(d=0;d>>b),c=a[e]<<32-b;e=a.length?a[a.length-1]:0;a=sjcl.bitArray.getPartial(e);d.push(sjcl.bitArray.partial(b+a&31,32>>24|c>>>8&0xff00|(c&0xff00)<<8|c<<24;return a}}; +sjcl.codec.utf8String={fromBits:function(a){var b="",c=sjcl.bitArray.bitLength(a),d,e;for(d=0;d>>24),e<<=8;return decodeURIComponent(escape(b))},toBits:function(a){a=unescape(encodeURIComponent(a));var b=[],c,d=0;for(c=0;cb;c++){e=!0;for(d=2;d*d<=c;d++)if(0===c%d){e= +!1;break}e&&(8>b&&(this.K[b]=a(Math.pow(c,.5))),this.b[b]=a(Math.pow(c,1/3)),b++)}}}; +function u(a,b){var c,d,e,f=a.u,g=a.b,k=f[0],l=f[1],p=f[2],n=f[3],h=f[4],m=f[5],q=f[6],r=f[7];for(c=0;64>c;c++)16>c?d=b[c]:(d=b[c+1&15],e=b[c+14&15],d=b[c&15]=(d>>>7^d>>>18^d>>>3^d<<25^d<<14)+(e>>>17^e>>>19^e>>>10^e<<15^e<<13)+b[c&15]+b[c+9&15]|0),d=d+r+(h>>>6^h>>>11^h>>>25^h<<26^h<<21^h<<7)+(q^h&(m^q))+g[c],r=q,q=m,m=h,h=n+d|0,n=p,p=l,l=k,k=d+(l&p^n&(l^p))+(l>>>2^l>>>13^l>>>22^l<<30^l<<19^l<<10)|0;f[0]=f[0]+k|0;f[1]=f[1]+l|0;f[2]=f[2]+p|0;f[3]=f[3]+n|0;f[4]=f[4]+h|0;f[5]=f[5]+m|0;f[6]=f[6]+q|0;f[7]= +f[7]+r|0}sjcl.prng=function(a){this.c=[new sjcl.hash.sha256];this.i=[0];this.H=0;this.v={};this.F=0;this.J={};this.L=this.f=this.j=this.T=0;this.b=[0,0,0,0,0,0,0,0];this.g=[0,0,0,0];this.C=void 0;this.D=a;this.s=!1;this.B={progress:{},seeded:{}};this.m=this.S=0;this.w=1;this.A=2;this.O=0x10000;this.I=[0,48,64,96,128,192,0x100,384,512,768,1024];this.P=3E4;this.N=80}; +sjcl.prng.prototype={randomWords:function(a,b){var c=[],d;d=this.isReady(b);var e;if(d===this.m)throw new sjcl.exception.notReady("generator isn't seeded");if(d&this.A){d=!(d&this.w);e=[];var f=0,g;this.L=e[0]=(new Date).valueOf()+this.P;for(g=0;16>g;g++)e.push(0x100000000*Math.random()|0);for(g=0;g=1<this.j&&(this.j= +f);this.H++;this.b=sjcl.hash.sha256.hash(this.b.concat(e));this.C=new sjcl.cipher.aes(this.b);for(d=0;4>d&&(this.g[d]=this.g[d]+1|0,!this.g[d]);d++);}for(d=0;d>>1;this.c[g].update([d,this.F++,2,b,f,a.length].concat(a))}break;case "string":void 0===b&&(b=a.length);this.c[g].update([d,this.F++,3,b,f,a.length]);this.c[g].update(a);break;default:l=1}if(l)throw new sjcl.exception.bug("random: addEntropy only supports number, array of numbers or string");this.i[g]+=b;this.f+=b;k===this.m&&(this.isReady()!==this.m&&A("seeded",Math.max(this.j,this.f)),A("progress",this.getProgress()))}, +isReady:function(a){a=this.I[void 0!==a?a:this.D];return this.j&&this.j>=a?this.i[0]>this.N&&(new Date).valueOf()>this.L?this.A|this.w:this.w:this.f>=a?this.A|this.m:this.m},getProgress:function(a){a=this.I[a?a:this.D];return this.j>=a?1:this.f>a?1:this.f/a},startCollectors:function(){if(!this.s){this.a={loadTimeCollector:B(this,this.V),mouseCollector:B(this,this.W),keyboardCollector:B(this,this.U),accelerometerCollector:B(this,this.R),touchCollector:B(this,this.X)};if(window.addEventListener)window.addEventListener("load", +this.a.loadTimeCollector,!1),window.addEventListener("mousemove",this.a.mouseCollector,!1),window.addEventListener("keypress",this.a.keyboardCollector,!1),window.addEventListener("devicemotion",this.a.accelerometerCollector,!1),window.addEventListener("touchmove",this.a.touchCollector,!1);else if(document.attachEvent)document.attachEvent("onload",this.a.loadTimeCollector),document.attachEvent("onmousemove",this.a.mouseCollector),document.attachEvent("keypress",this.a.keyboardCollector);else throw new sjcl.exception.bug("can't attach event"); +this.s=!0}},stopCollectors:function(){this.s&&(window.removeEventListener?(window.removeEventListener("load",this.a.loadTimeCollector,!1),window.removeEventListener("mousemove",this.a.mouseCollector,!1),window.removeEventListener("keypress",this.a.keyboardCollector,!1),window.removeEventListener("devicemotion",this.a.accelerometerCollector,!1),window.removeEventListener("touchmove",this.a.touchCollector,!1)):document.detachEvent&&(document.detachEvent("onload",this.a.loadTimeCollector),document.detachEvent("onmousemove", +this.a.mouseCollector),document.detachEvent("keypress",this.a.keyboardCollector)),this.s=!1)},addEventListener:function(a,b){this.B[a][this.S++]=b},removeEventListener:function(a,b){var c,d,e=this.B[a],f=[];for(d in e)e.hasOwnProperty(d)&&e[d]===b&&f.push(d);for(c=0;cb&&(a.g[b]=a.g[b]+1|0,!a.g[b]);b++);return a.C.encrypt(a.g)} +function B(a,b){return function(){b.apply(a,arguments)}}sjcl.random=new sjcl.prng(6); +a:try{var D,E,F,G;if(G="undefined"!==typeof module&&module.exports){var H;try{H=_dereq_("crypto")}catch(a){H=null}G=E=H}if(G&&E.randomBytes)D=E.randomBytes(128),D=new Uint32Array((new Uint8Array(D)).buffer),sjcl.random.addEntropy(D,1024,"crypto['randomBytes']");else if("undefined"!==typeof window&&"undefined"!==typeof Uint32Array){F=new Uint32Array(32);if(window.crypto&&window.crypto.getRandomValues)window.crypto.getRandomValues(F);else if(window.msCrypto&&window.msCrypto.getRandomValues)window.msCrypto.getRandomValues(F); +else break a;sjcl.random.addEntropy(F,1024,"crypto['getRandomValues']")}}catch(a){"undefined"!==typeof window&&window.console&&(console.log("There was an error collecting entropy from the browser:"),console.log(a))}"undefined"!==typeof module&&module.exports&&(module.exports=sjcl);"function"===typeof define&&define([],function(){return sjcl}); + +},{"crypto":undefined}],6:[function(_dereq_,module,exports){ +'use strict'; + +var BraintreeError = _dereq_('./lib/error'); + +module.exports = { + CALLBACK_REQUIRED: { + type: BraintreeError.types.MERCHANT, + code: 'CALLBACK_REQUIRED' + }, + INSTANTIATION_OPTION_REQUIRED: { + type: BraintreeError.types.MERCHANT, + code: 'INSTANTIATION_OPTION_REQUIRED' + }, + INCOMPATIBLE_VERSIONS: { + type: BraintreeError.types.MERCHANT, + code: 'INCOMPATIBLE_VERSIONS' + }, + METHOD_CALLED_AFTER_TEARDOWN: { + type: BraintreeError.types.MERCHANT, + code: 'METHOD_CALLED_AFTER_TEARDOWN' + }, + BRAINTREE_API_ACCESS_RESTRICTED: { + type: BraintreeError.types.MERCHANT, + code: 'BRAINTREE_API_ACCESS_RESTRICTED', + message: 'Your access is restricted and cannot use this part of the Braintree API.' + } +}; + +},{"./lib/error":10}],7:[function(_dereq_,module,exports){ +'use strict'; + +var BraintreeError = _dereq_('./error'); +var sharedErrors = _dereq_('../errors'); + +module.exports = function (instance, methodNames) { + methodNames.forEach(function (methodName) { + instance[methodName] = function () { + throw new BraintreeError({ + type: sharedErrors.METHOD_CALLED_AFTER_TEARDOWN.type, + code: sharedErrors.METHOD_CALLED_AFTER_TEARDOWN.code, + message: methodName + ' cannot be called after teardown.' + }); + }; + }); +}; + +},{"../errors":6,"./error":10}],8:[function(_dereq_,module,exports){ +'use strict'; + +module.exports = function (fn) { + return function () { + // IE9 doesn't support passing arguments to setTimeout so we have to emulate it. + var args = arguments; + + setTimeout(function () { + fn.apply(null, args); + }, 1); + }; +}; + +},{}],9:[function(_dereq_,module,exports){ +'use strict'; + +function enumerate(values, prefix) { + prefix = prefix == null ? '' : prefix; + + return values.reduce(function (enumeration, value) { + enumeration[value] = prefix + value; + return enumeration; + }, {}); +} + +module.exports = enumerate; + +},{}],10:[function(_dereq_,module,exports){ +'use strict'; + +var enumerate = _dereq_('./enumerate'); + +/** + * @class + * @global + * @param {object} options Construction options + * @classdesc This class is used to report error conditions, frequently as the first parameter to callbacks throughout the Braintree SDK. + * @description You cannot use this constructor directly. Interact with instances of this class through {@link callback callbacks}. + */ +function BraintreeError(options) { + if (!BraintreeError.types.hasOwnProperty(options.type)) { + throw new Error(options.type + ' is not a valid type.'); + } + + if (!options.code) { + throw new Error('Error code required.'); + } + + if (!options.message) { + throw new Error('Error message required.'); + } + + this.name = 'BraintreeError'; + + /** + * @type {string} + * @description A code that corresponds to specific errors. + */ + this.code = options.code; + + /** + * @type {string} + * @description A short description of the error. + */ + this.message = options.message; + + /** + * @type {BraintreeError.types} + * @description The type of error. + */ + this.type = options.type; + + /** + * @type {object=} + * @description Additional information about the error, such as an underlying network error response. + */ + this.details = options.details; +} + +BraintreeError.prototype = Object.create(Error.prototype); +BraintreeError.prototype.constructor = BraintreeError; + +/** + * Enum for {@link BraintreeError} types. + * @name BraintreeError.types + * @enum + * @readonly + * @memberof BraintreeError + * @property {string} CUSTOMER An error caused by the customer. + * @property {string} MERCHANT An error that is actionable by the merchant. + * @property {string} NETWORK An error due to a network problem. + * @property {string} INTERNAL An error caused by Braintree code. + * @property {string} UNKNOWN An error where the origin is unknown. + */ +BraintreeError.types = enumerate([ + 'CUSTOMER', + 'MERCHANT', + 'NETWORK', + 'INTERNAL', + 'UNKNOWN' +]); + +module.exports = BraintreeError; + +},{"./enumerate":9}],11:[function(_dereq_,module,exports){ +'use strict'; + +module.exports = function (obj) { + return Object.keys(obj).filter(function (key) { + return typeof obj[key] === 'function'; + }); +}; + +},{}],12:[function(_dereq_,module,exports){ +'use strict'; + +var BraintreeError = _dereq_('./error'); +var sharedErrors = _dereq_('../errors'); + +module.exports = function (callback, functionName) { + if (typeof callback !== 'function') { + throw new BraintreeError({ + type: sharedErrors.CALLBACK_REQUIRED.type, + code: sharedErrors.CALLBACK_REQUIRED.code, + message: functionName + ' must include a callback function.' + }); + } +}; + +},{"../errors":6,"./error":10}]},{},[3])(3) +}); diff --git a/vendor/assets/javascripts/braintree/3.5.0/paypal.js b/vendor/assets/javascripts/braintree/3.5.0/paypal.js new file mode 100644 index 00000000..72411df9 --- /dev/null +++ b/vendor/assets/javascripts/braintree/3.5.0/paypal.js @@ -0,0 +1,1932 @@ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}(g.braintree || (g.braintree = {})).paypal = f()}})(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= 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; +}); + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],2:[function(_dereq_,module,exports){ +'use strict'; + +var setAttributes = _dereq_('./lib/set-attributes'); +var defaultAttributes = _dereq_('./lib/default-attributes'); +var assign = _dereq_('./lib/assign'); + +module.exports = function createFrame(options) { + var iframe = document.createElement('iframe'); + var config = assign({}, defaultAttributes, options); + + if (config.style && typeof config.style !== 'string') { + assign(iframe.style, config.style); + delete config.style; + } + + setAttributes(iframe, config); + + if (!iframe.getAttribute('id')) { + iframe.id = iframe.name; + } + + return iframe; +}; + +},{"./lib/assign":3,"./lib/default-attributes":4,"./lib/set-attributes":5}],3:[function(_dereq_,module,exports){ +'use strict'; + +module.exports = function assign(target) { + var objs = Array.prototype.slice.call(arguments, 1); + + objs.forEach(function (obj) { + if (typeof obj !== 'object') { return; } + + Object.keys(obj).forEach(function (key) { + target[key] = obj[key]; + }); + }); + + return target; +} + +},{}],4:[function(_dereq_,module,exports){ +module.exports={ + "src": "about:blank", + "frameBorder": 0, + "allowtransparency": true, + "scrolling": "no" +} + +},{}],5:[function(_dereq_,module,exports){ +'use strict'; + +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); + } + } + } +}; + +},{}],6:[function(_dereq_,module,exports){ +'use strict'; + +var BraintreeError = _dereq_('./lib/error'); + +module.exports = { + CALLBACK_REQUIRED: { + type: BraintreeError.types.MERCHANT, + code: 'CALLBACK_REQUIRED' + }, + INSTANTIATION_OPTION_REQUIRED: { + type: BraintreeError.types.MERCHANT, + code: 'INSTANTIATION_OPTION_REQUIRED' + }, + INCOMPATIBLE_VERSIONS: { + type: BraintreeError.types.MERCHANT, + code: 'INCOMPATIBLE_VERSIONS' + }, + METHOD_CALLED_AFTER_TEARDOWN: { + type: BraintreeError.types.MERCHANT, + code: 'METHOD_CALLED_AFTER_TEARDOWN' + }, + BRAINTREE_API_ACCESS_RESTRICTED: { + type: BraintreeError.types.MERCHANT, + code: 'BRAINTREE_API_ACCESS_RESTRICTED', + message: 'Your access is restricted and cannot use this part of the Braintree API.' + } +}; + +},{"./lib/error":18}],7:[function(_dereq_,module,exports){ +'use strict'; + +var createAuthorizationData = _dereq_('./create-authorization-data'); +var jsonClone = _dereq_('./json-clone'); +var constants = _dereq_('./constants'); + +function addMetadata(configuration, data) { + var key; + var attrs = data ? jsonClone(data) : {}; + var authAttrs = createAuthorizationData(configuration.authorization).attrs; + var _meta = jsonClone(configuration.analyticsMetadata); + + attrs.braintreeLibraryVersion = constants.BRAINTREE_LIBRARY_VERSION; + + for (key in attrs._meta) { + if (attrs._meta.hasOwnProperty(key)) { + _meta[key] = attrs._meta[key]; + } + } + + attrs._meta = _meta; + + if (authAttrs.tokenizationKey) { + attrs.tokenizationKey = authAttrs.tokenizationKey; + } else { + attrs.authorizationFingerprint = authAttrs.authorizationFingerprint; + } + + return attrs; +} + +module.exports = addMetadata; + +},{"./constants":13,"./create-authorization-data":15,"./json-clone":29}],8:[function(_dereq_,module,exports){ +'use strict'; + +var constants = _dereq_('./constants'); +var addMetadata = _dereq_('./add-metadata'); + +function _millisToSeconds(millis) { + return Math.floor(millis / 1000); +} + +function sendAnalyticsEvent(client, kind, callback) { + var configuration = client.getConfiguration(); + var request = client._request; + var timestamp = _millisToSeconds(Date.now()); + var url = configuration.gatewayConfiguration.analytics.url; + var data = { + analytics: [{kind: kind, timestamp: timestamp}] + }; + + request({ + url: url, + method: 'post', + data: addMetadata(configuration, data), + timeout: constants.ANALYTICS_REQUEST_TIMEOUT_MS + }, callback); +} + +module.exports = { + sendEvent: sendAnalyticsEvent +}; + +},{"./add-metadata":7,"./constants":13}],9:[function(_dereq_,module,exports){ +(function (global){ +'use strict'; + +function isOperaMini(ua) { + ua = ua || global.navigator.userAgent; + return ua.indexOf('Opera Mini') > -1; +} + +function isAndroidFirefox(ua) { + ua = ua || global.navigator.userAgent; + return isAndroid(ua) && ua.indexOf('Firefox') > -1; +} + +function getIEVersion(ua) { + ua = ua || global.navigator.userAgent; + + if (ua.indexOf('MSIE') !== -1) { + return parseInt(ua.replace(/.*MSIE ([0-9]+)\..*/, '$1'), 10); + } else if (/Trident.*rv:11/.test(ua)) { + return 11; + } + + return null; +} + +function isHTTPS(protocol) { + protocol = protocol || global.location.protocol; + return protocol === 'https:'; +} + +function isIos(ua) { + ua = ua || global.navigator.userAgent; + return /iPhone|iPod|iPad/.test(ua); +} + +function isAndroid(ua) { + ua = ua || global.navigator.userAgent; + return /Android/.test(ua); +} + +function supportsPopups(ua) { + ua = ua || global.navigator.userAgent; + return !(isIosWebview(ua) || isAndroidWebview(ua) || isOperaMini(ua)); +} + +// The Google Search iOS app is technically a webview and doesn't support popups. +function isGoogleSearchApp(ua) { + return /\bGSA\b/.test(ua); +} + +function isIosWebview(ua) { + ua = ua || global.navigator.userAgent; + if (isIos(ua)) { + if (isGoogleSearchApp(ua)) { + return true; + } + return /.+AppleWebKit(?!.*Safari)/.test(ua); + } + return false; +} + +function isAndroidWebview(ua) { + var androidWebviewRegExp = /Version\/[\d\.]+/; + + ua = ua || global.navigator.userAgent; + if (isAndroid(ua)) { + return androidWebviewRegExp.test(ua) && !isOperaMini(ua); + } + return false; +} + +module.exports = { + isOperaMini: isOperaMini, + isAndroidFirefox: isAndroidFirefox, + getIEVersion: getIEVersion, + isHTTPS: isHTTPS, + isIos: isIos, + isAndroid: isAndroid, + supportsPopups: supportsPopups +}; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],10:[function(_dereq_,module,exports){ +'use strict'; + +var isWhitelistedDomain = _dereq_('../is-whitelisted-domain'); + +function checkOrigin(postMessageOrigin, merchantUrl) { + var merchantOrigin, 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; + + if (merchantOrigin === postMessageOrigin) { return true; } + + a.href = postMessageOrigin; + + return isWhitelistedDomain(postMessageOrigin); +} + +module.exports = { + checkOrigin: checkOrigin +}; + +},{"../is-whitelisted-domain":28}],11:[function(_dereq_,module,exports){ +'use strict'; + +var enumerate = _dereq_('../enumerate'); + +module.exports = enumerate([ + 'CONFIGURATION_REQUEST' +], 'bus:'); + +},{"../enumerate":17}],12:[function(_dereq_,module,exports){ +'use strict'; + +var bus = _dereq_('framebus'); +var events = _dereq_('./events'); +var checkOrigin = _dereq_('./check-origin').checkOrigin; +var BraintreeError = _dereq_('../error'); + +function BraintreeBus(options) { + options = options || {}; + + this.channel = options.channel; + if (!this.channel) { + throw new BraintreeError({ + type: BraintreeError.types.INTERNAL, + code: 'MISSING_CHANNEL_ID', + message: '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 () { + /* eslint-disable no-invalid-this */ + if (checkOrigin(this.origin, self.merchantUrl)) { + originalHandler.apply(this, arguments); + } + /* eslint-enable no-invalid-this */ + }; + } + + 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) { + 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) { + 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(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); // eslint-disable-line no-console + } +}; + +BraintreeBus.events = events; + +module.exports = BraintreeBus; + +},{"../error":18,"./check-origin":10,"./events":11,"framebus":1}],13:[function(_dereq_,module,exports){ +'use strict'; + +var VERSION = "3.5.0"; +var PLATFORM = 'web'; + +module.exports = { + ANALYTICS_REQUEST_TIMEOUT_MS: 2000, + INTEGRATION_TIMEOUT_MS: 60000, + VERSION: VERSION, + INTEGRATION: 'custom', + SOURCE: 'client', + PLATFORM: PLATFORM, + BRAINTREE_LIBRARY_VERSION: 'braintree/' + PLATFORM + '/' + VERSION +}; + +},{}],14:[function(_dereq_,module,exports){ +'use strict'; + +var BraintreeError = _dereq_('./error'); +var sharedErrors = _dereq_('../errors'); + +module.exports = function (instance, methodNames) { + methodNames.forEach(function (methodName) { + instance[methodName] = function () { + throw new BraintreeError({ + type: sharedErrors.METHOD_CALLED_AFTER_TEARDOWN.type, + code: sharedErrors.METHOD_CALLED_AFTER_TEARDOWN.code, + message: methodName + ' cannot be called after teardown.' + }); + }; + }); +}; + +},{"../errors":6,"./error":18}],15:[function(_dereq_,module,exports){ +'use strict'; + +var atob = _dereq_('../lib/polyfill').atob; + +var apiUrls = { + production: 'https://api.braintreegateway.com:443', + sandbox: 'https://api.sandbox.braintreegateway.com:443' +}; + +/* eslint-enable no-undef,block-scoped-var */ + +function _isTokenizationKey(str) { + return /^[a-zA-Z0-9]+_[a-zA-Z0-9]+_[a-zA-Z0-9_]+$/.test(str); +} + +function _parseTokenizationKey(tokenizationKey) { + var tokens = tokenizationKey.split('_'); + var environment = tokens[0]; + var merchantId = tokens.slice(2).join('_'); + + return { + merchantId: merchantId, + environment: environment + }; +} + +function createAuthorizationData(authorization) { + var parsedClientToken, parsedTokenizationKey; + var data = { + attrs: {}, + configUrl: '' + }; + + if (_isTokenizationKey(authorization)) { + parsedTokenizationKey = _parseTokenizationKey(authorization); + data.attrs.tokenizationKey = authorization; + data.configUrl = apiUrls[parsedTokenizationKey.environment] + '/merchants/' + parsedTokenizationKey.merchantId + '/client_api/v1/configuration'; + } else { + parsedClientToken = JSON.parse(atob(authorization)); + data.attrs.authorizationFingerprint = parsedClientToken.authorizationFingerprint; + data.configUrl = parsedClientToken.configUrl; + } + + return data; +} + +module.exports = createAuthorizationData; + +},{"../lib/polyfill":32}],16:[function(_dereq_,module,exports){ +'use strict'; + +module.exports = function (fn) { + return function () { + // IE9 doesn't support passing arguments to setTimeout so we have to emulate it. + var args = arguments; + + setTimeout(function () { + fn.apply(null, args); + }, 1); + }; +}; + +},{}],17:[function(_dereq_,module,exports){ +'use strict'; + +function enumerate(values, prefix) { + prefix = prefix == null ? '' : prefix; + + return values.reduce(function (enumeration, value) { + enumeration[value] = prefix + value; + return enumeration; + }, {}); +} + +module.exports = enumerate; + +},{}],18:[function(_dereq_,module,exports){ +'use strict'; + +var enumerate = _dereq_('./enumerate'); + +/** + * @class + * @global + * @param {object} options Construction options + * @classdesc This class is used to report error conditions, frequently as the first parameter to callbacks throughout the Braintree SDK. + * @description You cannot use this constructor directly. Interact with instances of this class through {@link callback callbacks}. + */ +function BraintreeError(options) { + if (!BraintreeError.types.hasOwnProperty(options.type)) { + throw new Error(options.type + ' is not a valid type.'); + } + + if (!options.code) { + throw new Error('Error code required.'); + } + + if (!options.message) { + throw new Error('Error message required.'); + } + + this.name = 'BraintreeError'; + + /** + * @type {string} + * @description A code that corresponds to specific errors. + */ + this.code = options.code; + + /** + * @type {string} + * @description A short description of the error. + */ + this.message = options.message; + + /** + * @type {BraintreeError.types} + * @description The type of error. + */ + this.type = options.type; + + /** + * @type {object=} + * @description Additional information about the error, such as an underlying network error response. + */ + this.details = options.details; +} + +BraintreeError.prototype = Object.create(Error.prototype); +BraintreeError.prototype.constructor = BraintreeError; + +/** + * Enum for {@link BraintreeError} types. + * @name BraintreeError.types + * @enum + * @readonly + * @memberof BraintreeError + * @property {string} CUSTOMER An error caused by the customer. + * @property {string} MERCHANT An error that is actionable by the merchant. + * @property {string} NETWORK An error due to a network problem. + * @property {string} INTERNAL An error caused by Braintree code. + * @property {string} UNKNOWN An error where the origin is unknown. + */ +BraintreeError.types = enumerate([ + 'CUSTOMER', + 'MERCHANT', + 'NETWORK', + 'INTERNAL', + 'UNKNOWN' +]); + +module.exports = BraintreeError; + +},{"./enumerate":17}],19:[function(_dereq_,module,exports){ +'use strict'; + +var popup = _dereq_('./popup'); +var Bus = _dereq_('../../bus'); +var events = _dereq_('../shared/events'); +var errors = _dereq_('../shared/errors'); +var constants = _dereq_('../shared/constants'); +var uuid = _dereq_('../../uuid'); +var iFramer = _dereq_('iframer'); +var BraintreeError = _dereq_('../../error'); + +var REQUIRED_CONFIG_KEYS = [ + 'name', + 'dispatchFrameUrl', + 'openFrameUrl' +]; + +function _validateFrameConfiguration(options) { + if (!options) { + throw new Error('Valid configuration is required'); + } + + REQUIRED_CONFIG_KEYS.forEach(function (key) { + if (!options.hasOwnProperty(key)) { + throw new Error('A valid frame ' + key + ' must be provided'); + } + }); + + if (!(/^[\w_]+$/.test(options.name))) { // eslint-disable-line + throw new Error('A valid frame name must be provided'); + } +} + +function FrameService(options) { + _validateFrameConfiguration(options); + + this._serviceId = uuid().replace(/-/g, ''); + + this._options = { + name: options.name + '_' + this._serviceId, + dispatchFrameUrl: options.dispatchFrameUrl, + openFrameUrl: options.openFrameUrl + }; + this._state = options.state; + + this._bus = new Bus({channel: this._serviceId}); + this._setBusEvents(); +} + +FrameService.prototype.initialize = function (callback) { + var dispatchFrameReadyHandler = function () { + callback(); + this._bus.off(events.DISPATCH_FRAME_READY, dispatchFrameReadyHandler); + }.bind(this); + + this._bus.on(events.DISPATCH_FRAME_READY, dispatchFrameReadyHandler); + this._writeDispatchFrame(); +}; + +FrameService.prototype._writeDispatchFrame = function () { + var frameName = constants.DISPATCH_FRAME_NAME + '_' + this._serviceId; + var frameSrc = this._options.dispatchFrameUrl; + + this._dispatchFrame = iFramer({ + name: frameName, + src: frameSrc, + 'class': constants.DISPATCH_FRAME_CLASS, + height: 0, + width: 0, + style: { + position: 'absolute', + left: '-9999px' + } + }); + + document.body.appendChild(this._dispatchFrame); +}; + +FrameService.prototype._setBusEvents = function () { + this._bus.on(events.DISPATCH_FRAME_REPORT, function (res) { + this.close(); + + if (this._onCompleteCallback) { + this._onCompleteCallback.call(null, res.err, res.payload); + } + + this._onCompleteCallback = null; + }.bind(this)); + + this._bus.on(Bus.events.CONFIGURATION_REQUEST, function (reply) { + reply(this._state); + }.bind(this)); +}; + +FrameService.prototype.open = function (callback) { + this._onCompleteCallback = callback; + + this._frame = popup.open(this._options); + this._pollForPopupClose(); +}; + +FrameService.prototype.redirect = function (url) { + if (this._frame && !this.isFrameClosed()) { + this._frame.location.href = url; + } +}; + +FrameService.prototype.close = function () { + if (!this.isFrameClosed()) { + this._frame.close(); + } +}; + +FrameService.prototype.focus = function () { + if (!this.isFrameClosed()) { + this._frame.focus(); + } +}; + +FrameService.prototype.teardown = function () { + this.close(); + this._dispatchFrame.parentNode.removeChild(this._dispatchFrame); + this._dispatchFrame = null; + this._cleanupFrame(); +}; + +FrameService.prototype.isFrameClosed = function () { + return this._frame == null || this._frame.closed; +}; + +FrameService.prototype._cleanupFrame = function () { + this._frame = null; + clearInterval(this._popupInterval); + this._popupInterval = null; +}; + +FrameService.prototype._pollForPopupClose = function () { + this._popupInterval = setInterval(function () { + if (this.isFrameClosed()) { + this._cleanupFrame(); + if (this._onCompleteCallback) { + this._onCompleteCallback(new BraintreeError(errors.FRAME_SERVICE_FRAME_CLOSED)); + } + } + }.bind(this), constants.POPUP_POLL_INTERVAL); + + return this._popupInterval; +}; + +module.exports = FrameService; + +},{"../../bus":12,"../../error":18,"../../uuid":35,"../shared/constants":25,"../shared/errors":26,"../shared/events":27,"./popup":22,"iframer":2}],20:[function(_dereq_,module,exports){ +'use strict'; + +var FrameService = _dereq_('./frame-service'); + +module.exports = { + create: function createFrameService(options, callback) { + var frameService = new FrameService(options); + + frameService.initialize(function () { + callback(frameService); + }); + } +}; + +},{"./frame-service":19}],21:[function(_dereq_,module,exports){ +'use strict'; + +var constants = _dereq_('../../shared/constants'); +var position = _dereq_('./position'); + +module.exports = function composePopupOptions() { + return [ + constants.POPUP_BASE_OPTIONS, + 'top=' + position.top(), + 'left=' + position.left() + ].join(','); +}; + +},{"../../shared/constants":25,"./position":24}],22:[function(_dereq_,module,exports){ +'use strict'; + +module.exports = { + open: _dereq_('./open') +}; + +},{"./open":23}],23:[function(_dereq_,module,exports){ +(function (global){ +'use strict'; + +var composeOptions = _dereq_('./compose-options'); + +module.exports = function openPopup(options) { + return global.open( + options.openFrameUrl, + options.name, + composeOptions() + ); +}; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"./compose-options":21}],24:[function(_dereq_,module,exports){ +(function (global){ +'use strict'; + +var constants = _dereq_('../../shared/constants'); + +function top() { + var windowHeight = global.outerHeight || document.documentElement.clientHeight; + var windowTop = global.screenY == null ? global.screenTop : global.screenY; + + return center(windowHeight, constants.POPUP_HEIGHT, windowTop); +} + +function left() { + var windowWidth = global.outerWidth || document.documentElement.clientWidth; + var windowLeft = global.screenX == null ? global.screenLeft : global.screenX; + + return center(windowWidth, constants.POPUP_WIDTH, windowLeft); +} + +function center(windowMetric, popupMetric, offset) { + return (windowMetric - popupMetric) / 2 + offset; +} + +module.exports = { + top: top, + left: left, + center: center +}; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"../../shared/constants":25}],25:[function(_dereq_,module,exports){ +'use strict'; + +var POPUP_HEIGHT = 535; +var POPUP_WIDTH = 450; + +module.exports = { + DISPATCH_FRAME_NAME: 'dispatch', + DISPATCH_FRAME_CLASS: 'braintree-dispatch-frame', + POPUP_BASE_OPTIONS: 'resizable,scrollbars,height=' + POPUP_HEIGHT + ',width=' + POPUP_WIDTH, + POPUP_WIDTH: POPUP_WIDTH, + POPUP_HEIGHT: POPUP_HEIGHT, + POPUP_POLL_INTERVAL: 100, + POPUP_CLOSE_TIMEOUT: 100 +}; + +},{}],26:[function(_dereq_,module,exports){ +'use strict'; + +var BraintreeError = _dereq_('../../error'); + +module.exports = { + FRAME_SERVICE_FRAME_CLOSED: { + type: BraintreeError.types.INTERNAL, + code: 'FRAME_SERVICE_FRAME_CLOSED', + message: 'Frame closed before tokenization could occur.' + } +}; + +},{"../../error":18}],27:[function(_dereq_,module,exports){ +'use strict'; + +var enumerate = _dereq_('../../enumerate'); + +module.exports = enumerate([ + 'DISPATCH_FRAME_READY', + 'DISPATCH_FRAME_REPORT' +], 'frameService:'); + +},{"../../enumerate":17}],28:[function(_dereq_,module,exports){ +'use strict'; + +var parser; +var legalHosts = { + 'paypal.com': 1, + 'braintreepayments.com': 1, + 'braintreegateway.com': 1 +}; + +/* eslint-enable no-undef,block-scoped-var */ + +function stripSubdomains(domain) { + return domain.split('.').slice(-2).join('.'); +} + +function isWhitelistedDomain(url) { + var mainDomain; + + url = url.toLowerCase(); + + if (!/^https:/.test(url)) { + return false; + } + + parser = parser || document.createElement('a'); + parser.href = url; + mainDomain = stripSubdomains(parser.hostname); + + return legalHosts.hasOwnProperty(mainDomain); +} + +module.exports = isWhitelistedDomain; + +},{}],29:[function(_dereq_,module,exports){ +'use strict'; + +module.exports = function (value) { + return JSON.parse(JSON.stringify(value)); +}; + +},{}],30:[function(_dereq_,module,exports){ +'use strict'; + +module.exports = function (obj) { + return Object.keys(obj).filter(function (key) { + return typeof obj[key] === 'function'; + }); +}; + +},{}],31:[function(_dereq_,module,exports){ +'use strict'; + +function once(fn) { + var called = false; + + return function () { + if (!called) { + called = true; + fn.apply(null, arguments); + } + }; +} + +module.exports = once; + +},{}],32:[function(_dereq_,module,exports){ +(function (global){ +'use strict'; + +var atobNormalized = typeof global.atob === 'function' ? global.atob : atob; + +function atob(base64String) { + var a, b, c, b1, b2, b3, b4, i; + var base64Matcher = new RegExp('^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})([=]{1,2})?$'); + var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; + var result = ''; + + if (!base64Matcher.test(base64String)) { + throw new Error('Non base64 encoded input passed to window.atob polyfill'); + } + + i = 0; + do { + b1 = characters.indexOf(base64String.charAt(i++)); + b2 = characters.indexOf(base64String.charAt(i++)); + b3 = characters.indexOf(base64String.charAt(i++)); + b4 = characters.indexOf(base64String.charAt(i++)); + + a = (b1 & 0x3F) << 2 | b2 >> 4 & 0x3; + b = (b2 & 0xF) << 4 | b3 >> 2 & 0xF; + c = (b3 & 0x3) << 6 | b4 & 0x3F; + + result += String.fromCharCode(a) + (b ? String.fromCharCode(b) : '') + (c ? String.fromCharCode(c) : ''); + } while (i < base64String.length); + + return result; +} + +module.exports = { + atob: atobNormalized, + _atob: atob +}; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],33:[function(_dereq_,module,exports){ +(function (global){ +'use strict'; + +function _notEmpty(obj) { + var key; + + for (key in obj) { + if (obj.hasOwnProperty(key)) { return true; } + } + + return false; +} + +function _isArray(value) { + return value && typeof value === 'object' && typeof value.length === 'number' && + Object.prototype.toString.call(value) === '[object Array]' || false; +} + +function parse(url) { + var query, params; + + url = url || global.location.href; + + if (!/\?/.test(url)) { + return {}; + } + + query = url.replace(/#.*$/, '').replace(/^.*\?/, '').split('&'); + + params = query.reduce(function (toReturn, keyValue) { + var parts = keyValue.split('='); + var key = decodeURIComponent(parts[0]); + var value = decodeURIComponent(parts[1]); + + toReturn[key] = value; + return toReturn; + }, {}); + + return params; +} + +function stringify(params, namespace) { + var k, v, p; + var query = []; + + 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 queryify(url, params) { + url = url || ''; + + if (params != null && typeof params === 'object' && _notEmpty(params)) { + url += url.indexOf('?') === -1 ? '?' : ''; + url += url.indexOf('=') !== -1 ? '&' : ''; + url += stringify(params); + } + + return url; +} + +module.exports = { + parse: parse, + stringify: stringify, + queryify: queryify +}; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],34:[function(_dereq_,module,exports){ +'use strict'; + +var BraintreeError = _dereq_('./error'); +var sharedErrors = _dereq_('../errors'); + +module.exports = function (callback, functionName) { + if (typeof callback !== 'function') { + throw new BraintreeError({ + type: sharedErrors.CALLBACK_REQUIRED.type, + code: sharedErrors.CALLBACK_REQUIRED.code, + message: functionName + ' must include a callback function.' + }); + } +}; + +},{"../errors":6,"./error":18}],35:[function(_dereq_,module,exports){ +'use strict'; + +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); + }); +} + +module.exports = uuid; + +},{}],36:[function(_dereq_,module,exports){ +'use strict'; + +var frameService = _dereq_('../../lib/frame-service/external'); +var BraintreeError = _dereq_('../../lib/error'); +var once = _dereq_('../../lib/once'); +var VERSION = "3.5.0"; +var constants = _dereq_('../shared/constants'); +var INTEGRATION_TIMEOUT_MS = _dereq_('../../lib/constants').INTEGRATION_TIMEOUT_MS; +var analytics = _dereq_('../../lib/analytics'); +var throwIfNoCallback = _dereq_('../../lib/throw-if-no-callback'); +var methods = _dereq_('../../lib/methods'); +var deferred = _dereq_('../../lib/deferred'); +var errors = _dereq_('../shared/errors'); +var convertMethodsToError = _dereq_('../../lib/convert-methods-to-error'); +var querystring = _dereq_('../../lib/querystring'); + +/** + * @typedef {object} PayPal~tokenizePayload + * @property {string} nonce The payment method nonce. + * @property {string} type The payment method type, always `PayPalAccount`. + * @property {object} details Additional PayPal account details. + * @property {string} details.email User's email address. + * @property {string} details.payerId User's payer ID, the unique identifier for each PayPal account. + * @property {string} details.firstName User's given name. + * @property {string} details.lastName User's surname. + * @property {?string} details.countryCode User's 2 character country code. + * @property {?string} details.phone User's phone number (e.g. 555-867-5309). + * @property {?object} details.shippingAddress User's shipping address details, only available if shipping address is enabled. + * @property {string} details.shippingAddress.recipientName Recipient of postage. + * @property {string} details.shippingAddress.line1 Street number and name. + * @property {string} details.shippingAddress.line2 Extended address. + * @property {string} details.shippingAddress.city City or locality. + * @property {string} details.shippingAddress.state State or region. + * @property {string} details.shippingAddress.postalCode Postal code. + * @property {string} details.shippingAddress.countryCode 2 character country code (e.g. US). + * @property {?object} details.billingAddress User's billing address details. + * You will also need to enable the PayPal Billing Address Request feature in your PayPal account. + * To enable this feature, [contact PayPal](https://developers.braintreepayments.com/support/guides/paypal/setup-guide#contacting-paypal-support). + * @property {string} details.billingAddress.line1 Street number and name. + * @property {string} details.billingAddress.line2 Extended address. + * @property {string} details.billingAddress.city City or locality. + * @property {string} details.billingAddress.state State or region. + * @property {string} details.billingAddress.postalCode Postal code. + * @property {string} details.billingAddress.countryCode 2 character country code (e.g. US). + */ + +/** + * @typedef {object} PayPal~tokenizeReturn + * @property {Function} close A handle to close the PayPal checkout flow. + * @property {Function} focus A handle to focus the PayPal checkout flow. Note that some browsers (notably iOS Safari) do not support focusing popups. Firefox requires the focus call to occur as the result of a user interaction, such as a button click. + */ + +/** + * @class + * @param {object} options see {@link module:braintree-web/paypal.create|paypal.create} + * @classdesc This class represents a PayPal component. Instances of this class have methods for launching auth dialogs and other programmatic interactions with the PayPal component. + */ +function PayPal(options) { + this._client = options.client; + this._assetsUrl = options.client.getConfiguration().gatewayConfiguration.paypal.assetsUrl + '/web/' + VERSION; + this._authorizationInProgress = false; +} + +PayPal.prototype._initialize = function (callback) { + var client = this._client; + var failureTimeout = setTimeout(function () { + analytics.sendEvent(client, 'web.paypal.load.timed-out'); + }, INTEGRATION_TIMEOUT_MS); + + frameService.create({ + name: constants.LANDING_FRAME_NAME, + dispatchFrameUrl: this._assetsUrl + '/html/dispatch-frame.html', + openFrameUrl: this._assetsUrl + '/html/paypal-landing-frame.html' + }, function (service) { + this._frameService = service; + clearTimeout(failureTimeout); + analytics.sendEvent(client, 'web.paypal.load.succeeded'); + callback(); + }.bind(this)); +}; + +/** + * Launches the PayPal login flow and returns a nonce payload. Only one PayPal login flow should be active at a time. One way to achieve this is to disable your PayPal button while the flow is open. + * @public + * @param {object} options All tokenization options for the PayPal component. + * @param {string} options.flow Set to 'checkout' for one-time payment flow, or 'vault' for Vault flow. If 'vault' is used with a client token generated with a customer id, the PayPal account will be added to that customer as a saved payment method. + * @param {string} [options.intent=authorize] + * Checkout flows only. + * * `authorize` - Submits the transaction for authorization but not settlement. + * * `sale` - Payment will be immediately submitted for settlement upon creating a transaction. + * @param {boolean} [options.offerCredit=false] Offers the customer PayPal Credit if they qualify. Checkout flows only. + * @param {string} [options.useraction] + * This option only applies to the "checkout" flow and will have no effect on the "vault" flow. + * + * Changes the call-to-action in the PayPal flow. By default the final button will show the localized + * word for "Continue" and implies that the final amount billed is not yet known. + * + * Setting this option to `commit` changes the button text to "Pay Now" and page text will convey to + * the user that billing will take place immediately. + * @param {string|number} [options.amount] The amount of the transaction. Required when using the Checkout flow. + * @param {string} [options.currency] The currency code of the amount, such as 'USD'. Required when using the Checkout flow. + * @param {string} [options.displayName] The merchant name displayed inside of the PayPal lightbox; defaults to the company name on your Braintree account + * @param {string} [options.locale=en_US] Use this option to change the language, links, and terminology used in the PayPal flow to suit the country and language of your customer. + * @param {boolean} [options.enableShippingAddress=false] Returns a shipping address object in {@link PayPal#tokenize}. + * @param {object} [options.shippingAddressOverride] Allows you to pass a shipping address you have already collected into the PayPal payment flow. + * @param {string} options.shippingAddressOverride.line1 Street address. + * @param {string} [options.shippingAddressOverride.line2] Street address (extended). + * @param {string} options.shippingAddressOverride.city City. + * @param {string} options.shippingAddressOverride.state State. + * @param {string} options.shippingAddressOverride.postalCode Postal code. + * @param {string} options.shippingAddressOverride.countryCode Country. + * @param {string} [options.shippingAddressOverride.phone] Phone number. + * @param {string} [options.shippingAddressOverride.recipientName] Recipient's name. + * @param {boolean} [options.shippingAddressEditable=true] Set to false to disable user editing of the shipping address. + * @param {string} [options.billingAgreementDescription] Use this option to set the description of the preapproved payment agreement visible to customers in their PayPal profile during Vault flows. Max 255 characters. + * @param {callback} callback The second argument, data, is a {@link PayPal~tokenizePayload|tokenizePayload}. + * @example + * button.addEventListener('click', function () { + * // Disable the button so that we don't attempt to open multiple popups. + * button.setAttribute('disabled', 'disabled'); + * + * // Because PayPal tokenization opens a popup, this must be called + * // as a result of a user action, such as a button click. + * paypalInstance.tokenize({ + * flow: 'vault' // Required + * // Any other tokenization options + * }, function (tokenizeErr, payload) { + * button.removeAttribute('disabled'); + * + * if (tokenizeErr) { + * // Handle tokenization errors or premature flow closure + * + * switch (tokenizeErr.code) { + * case 'PAYPAL_POPUP_CLOSED': + * console.error('Customer closed PayPal popup.'); + * break; + * case 'PAYPAL_ACCOUNT_TOKENIZATION_FAILED': + * console.error('PayPal tokenization failed. See details:', tokenizeErr.details); + * break; + * case 'PAYPAL_FLOW_FAILED': + * console.error('Unable to initialize PayPal flow. Are your options correct?', tokenizeErr.details); + * break; + * default: + * console.error('Error!', tokenizeErr); + * } + * } else { + * // Submit payload.nonce to your server + * } + * }); + * }); + * @returns {PayPal~tokenizeReturn} A handle to manage the PayPal checkout frame. + */ +PayPal.prototype.tokenize = function (options, callback) { + var client = this._client; + + throwIfNoCallback(callback, 'tokenize'); + + callback = once(deferred(callback)); + + if (this._authorizationInProgress) { + analytics.sendEvent(client, 'web.paypal.tokenization.error.already-opened'); + + callback(new BraintreeError(errors.PAYPAL_TOKENIZATION_REQUEST_ACTIVE)); + } else { + this._authorizationInProgress = true; + + analytics.sendEvent(client, 'web.paypal.tokenization.opened'); + this._navigateFrameToAuth(options, callback); + // This MUST happen after _navigateFrameToAuth for Metro browsers to work. + this._frameService.open(this._createFrameServiceCallback(options, callback)); + } + + return { + close: function () { + analytics.sendEvent(client, 'web.paypal.tokenization.closed.by-merchant'); + this._frameService.close(); + }.bind(this), + focus: function () { + this._frameService.focus(); + }.bind(this) + }; +}; + +PayPal.prototype._createFrameServiceCallback = function (options, callback) { + var client = this._client; + + return function (err, params) { + this._authorizationInProgress = false; + + if (err) { + if (err.code === 'FRAME_SERVICE_FRAME_CLOSED') { + analytics.sendEvent(client, 'web.paypal.tokenization.closed.by-user'); + } + + callback(new BraintreeError(errors.PAYPAL_POPUP_CLOSED)); + } else { + this._tokenizePayPal(options, params, callback); + } + }.bind(this); +}; + +PayPal.prototype._tokenizePayPal = function (options, params, callback) { + var client = this._client; + + client.request({ + endpoint: 'payment_methods/paypal_accounts', + method: 'post', + data: this._formatTokenizeData(options, params) + }, function (err, response) { + if (err) { + analytics.sendEvent(client, 'web.paypal.tokenization.failed'); + callback(err instanceof BraintreeError ? err : new BraintreeError({ + type: errors.PAYPAL_ACCOUNT_TOKENIZATION_FAILED.type, + code: errors.PAYPAL_ACCOUNT_TOKENIZATION_FAILED.code, + message: errors.PAYPAL_ACCOUNT_TOKENIZATION_FAILED.message, + details: { + originalError: err + } + })); + } else { + analytics.sendEvent(client, 'web.paypal.tokenization.success'); + callback(null, this._formatTokenizePayload(response)); + } + }.bind(this)); +}; + +PayPal.prototype._formatTokenizePayload = function (response) { + var payload; + var account = {}; + + if (response.paypalAccounts) { + account = response.paypalAccounts[0]; + } + + payload = { + nonce: account.nonce, + details: {}, + type: account.type + }; + + if (account.details && account.details.payerInfo) { + payload.details = account.details.payerInfo; + } + + return payload; +}; + +PayPal.prototype._formatTokenizeData = function (options, params) { + var clientConfiguration = this._client.getConfiguration(); + var gatewayConfiguration = clientConfiguration.gatewayConfiguration; + var isTokenizationKey = clientConfiguration.authorizationType === 'TOKENIZATION_KEY'; + var data = { + paypalAccount: { + correlationId: this._frameService._serviceId, + options: { + validate: options.flow === 'vault' && !isTokenizationKey + } + } + }; + + if (params.ba_token) { + data.paypalAccount.billingAgreementToken = params.ba_token; + } else { + data.paypalAccount.paymentToken = params.paymentId; + data.paypalAccount.payerId = params.PayerID; + data.paypalAccount.unilateral = gatewayConfiguration.paypal.unvettedMerchant; + + if (options.hasOwnProperty('intent')) { + data.paypalAccount.intent = options.intent; + } + } + + return data; +}; + +PayPal.prototype._navigateFrameToAuth = function (options, callback) { + var client = this._client; + var endpoint = 'paypal_hermes/'; + + if (options.flow === 'checkout') { + endpoint += 'create_payment_resource'; + } else if (options.flow === 'vault') { + endpoint += 'setup_billing_agreement'; + } else { + callback(new BraintreeError(errors.PAYPAL_FLOW_OPTION_REQUIRED)); + return; + } + + client.request({ + endpoint: endpoint, + method: 'post', + data: this._formatPaymentResourceData(options) + }, function (err, response, status) { + var redirectUrl; + + if (err) { + if (status === 422) { + callback(new BraintreeError({ + type: errors.PAYPAL_INVALID_PAYMENT_OPTION.type, + code: errors.PAYPAL_INVALID_PAYMENT_OPTION.code, + message: errors.PAYPAL_INVALID_PAYMENT_OPTION.message, + details: { + originalError: err + } + })); + } else { + callback(err instanceof BraintreeError ? err : new BraintreeError({ + type: errors.PAYPAL_FLOW_FAILED.type, + code: errors.PAYPAL_FLOW_FAILED.code, + message: errors.PAYPAL_FLOW_FAILED.message, + details: { + originalError: err + } + })); + } + this._frameService.close(); + } else { + if (options.flow === 'checkout') { + redirectUrl = response.paymentResource.redirectUrl; + } else { + redirectUrl = response.agreementSetup.approvalUrl; + } + + if (options.useraction === 'commit') { + redirectUrl = querystring.queryify(redirectUrl, {useraction: 'commit'}); + } + + this._frameService.redirect(redirectUrl); + } + }.bind(this)); +}; + +PayPal.prototype._formatPaymentResourceData = function (options) { + var key; + var gatewayConfiguration = this._client.getConfiguration().gatewayConfiguration; + var serviceId = this._frameService._serviceId; + var paymentResource = { + returnUrl: gatewayConfiguration.paypal.assetsUrl + '/web/' + VERSION + '/html/paypal-redirect-frame.html?channel=' + serviceId, + cancelUrl: gatewayConfiguration.paypal.assetsUrl + '/web/' + VERSION + '/html/paypal-cancel-frame.html?channel=' + serviceId, + correlationId: serviceId, + experienceProfile: { + brandName: options.displayName || gatewayConfiguration.paypal.displayName, + localeCode: options.locale, + noShipping: (!options.enableShippingAddress).toString(), + addressOverride: options.shippingAddressEditable === false + } + }; + + if (options.flow === 'checkout') { + paymentResource.amount = options.amount; + paymentResource.currencyIsoCode = options.currency; + paymentResource.offerPaypalCredit = options.offerCredit === true; + + if (options.hasOwnProperty('intent')) { + paymentResource.intent = options.intent; + } + + for (key in options.shippingAddressOverride) { + if (options.shippingAddressOverride.hasOwnProperty(key)) { + paymentResource[key] = options.shippingAddressOverride[key]; + } + } + } else { + paymentResource.shippingAddress = options.shippingAddressOverride; + + if (options.billingAgreementDescription) { + paymentResource.description = options.billingAgreementDescription; + } + } + + return paymentResource; +}; + +/** + * Cleanly tear down anything set up by {@link module:braintree-web/paypal.create|create}. + * @public + * @param {callback} [callback] Called once teardown is complete. No data is returned if teardown completes successfully. + * @returns {void} + */ +PayPal.prototype.teardown = function (callback) { + this._frameService.teardown(); + + convertMethodsToError(this, methods(PayPal.prototype)); + + analytics.sendEvent(this._client, 'web.paypal.teardown-completed'); + + if (typeof callback === 'function') { + callback = deferred(callback); + callback(); + } +}; + +module.exports = PayPal; + +},{"../../lib/analytics":8,"../../lib/constants":13,"../../lib/convert-methods-to-error":14,"../../lib/deferred":16,"../../lib/error":18,"../../lib/frame-service/external":20,"../../lib/methods":30,"../../lib/once":31,"../../lib/querystring":33,"../../lib/throw-if-no-callback":34,"../shared/constants":38,"../shared/errors":39}],37:[function(_dereq_,module,exports){ +'use strict'; +/** @module braintree-web/paypal */ + +var analytics = _dereq_('../lib/analytics'); +var BraintreeError = _dereq_('../lib/error'); +var browserDetection = _dereq_('../lib/browser-detection'); +var deferred = _dereq_('../lib/deferred'); +var errors = _dereq_('./shared/errors'); +var throwIfNoCallback = _dereq_('../lib/throw-if-no-callback'); +var PayPal = _dereq_('./external/paypal'); +var sharedErrors = _dereq_('../errors'); +var VERSION = "3.5.0"; + +/** + * @static + * @function create + * @param {object} options Creation options: + * @param {Client} options.client A {@link Client} instance. + * @param {callback} callback The second argument, `data`, is the {@link PayPal} instance. + * @example + * braintree.paypal.create( + * client: clientInstance + * }, function (createErr, paypalInstance) { + * if (createErr) { + * if (createErr.code === 'PAYPAL_BROWSER_NOT_SUPPORTED') { + * console.error('This browser is not supported.'); + * } else { + * console.error('Error!', createErr); + * } + * } + * } + * @returns {void} + */ +function create(options, callback) { + var config, pp, clientVersion; + + throwIfNoCallback(callback, 'create'); + + callback = deferred(callback); + + if (options.client == null) { + callback(new BraintreeError({ + type: sharedErrors.INSTANTIATION_OPTION_REQUIRED.type, + code: sharedErrors.INSTANTIATION_OPTION_REQUIRED.code, + message: 'options.client is required when instantiating PayPal.' + })); + return; + } + + config = options.client.getConfiguration(); + clientVersion = config.analyticsMetadata.sdkVersion; + + if (clientVersion !== VERSION) { + callback(new BraintreeError({ + type: sharedErrors.INCOMPATIBLE_VERSIONS.type, + code: sharedErrors.INCOMPATIBLE_VERSIONS.code, + message: 'Client (version ' + clientVersion + ') and PayPal (version ' + VERSION + ') components must be from the same SDK version.' + })); + return; + } + + if (config.gatewayConfiguration.paypalEnabled !== true) { + callback(new BraintreeError(errors.PAYPAL_NOT_ENABLED)); + return; + } + + if (!browserDetection.supportsPopups()) { + callback(new BraintreeError(errors.PAYPAL_BROWSER_NOT_SUPPORTED)); + return; + } + + analytics.sendEvent(options.client, 'web.paypal.initialized'); + + pp = new PayPal(options); + pp._initialize(function () { + callback(null, pp); + }); +} + +module.exports = { + create: create, + /** + * @description The current version of the SDK, i.e. `{@pkg version}`. + * @type {string} + */ + VERSION: VERSION +}; + +},{"../errors":6,"../lib/analytics":8,"../lib/browser-detection":9,"../lib/deferred":16,"../lib/error":18,"../lib/throw-if-no-callback":34,"./external/paypal":36,"./shared/errors":39}],38:[function(_dereq_,module,exports){ +'use strict'; + +var POPUP_HEIGHT = 535; +var POPUP_WIDTH = 450; + +module.exports = { + AUTH_INIT_ERROR_MESSAGE: 'Could not initialize PayPal flow.', + LANDING_FRAME_NAME: 'braintreepaypallanding', + POPUP_BASE_OPTIONS: 'resizable,scrollbars,height=' + POPUP_HEIGHT + ',width=' + POPUP_WIDTH, + POPUP_WIDTH: POPUP_WIDTH, + POPUP_HEIGHT: POPUP_HEIGHT, + POPUP_POLL_INTERVAL: 100 +}; + +},{}],39:[function(_dereq_,module,exports){ +'use strict'; + +var BraintreeError = _dereq_('../../lib/error'); + +module.exports = { + PAYPAL_NOT_ENABLED: { + type: BraintreeError.types.MERCHANT, + code: 'PAYPAL_NOT_ENABLED', + message: 'PayPal is not enabled for this merchant.' + }, + PAYPAL_TOKENIZATION_REQUEST_ACTIVE: { + type: BraintreeError.types.MERCHANT, + code: 'PAYPAL_TOKENIZATION_REQUEST_ACTIVE', + message: 'Another tokenization request is active.' + }, + PAYPAL_ACCOUNT_TOKENIZATION_FAILED: { + type: BraintreeError.types.NETWORK, + code: 'PAYPAL_ACCOUNT_TOKENIZATION_FAILED', + message: 'Could not tokenize user\'s PayPal account.' + }, + PAYPAL_FLOW_FAILED: { + type: BraintreeError.types.NETWORK, + code: 'PAYPAL_FLOW_FAILED', + message: 'Could not initialize PayPal flow.' + }, + PAYPAL_FLOW_OPTION_REQUIRED: { + type: BraintreeError.types.MERCHANT, + code: 'PAYPAL_FLOW_OPTION_REQUIRED', + message: 'PayPal flow property is invalid or missing.' + }, + PAYPAL_BROWSER_NOT_SUPPORTED: { + type: BraintreeError.types.CUSTOMER, + code: 'PAYPAL_BROWSER_NOT_SUPPORTED', + message: 'Browser is not supported.' + }, + PAYPAL_POPUP_CLOSED: { + type: BraintreeError.types.CUSTOMER, + code: 'PAYPAL_POPUP_CLOSED', + message: 'Customer closed PayPal popup before authorizing.' + }, + PAYPAL_INVALID_PAYMENT_OPTION: { + type: BraintreeError.types.MERCHANT, + code: 'PAYPAL_INVALID_PAYMENT_OPTION', + message: 'PayPal payment options are invalid.' + } +}; + +},{"../../lib/error":18}]},{},[37])(37) +});