diff --git a/bin/masspay.py b/bin/masspay.py index 06a01649e9..b7ea3bd856 100755 --- a/bin/masspay.py +++ b/bin/masspay.py @@ -1,21 +1,9 @@ #!/usr/bin/env python """This is a script for managing MassPay each week. -Most of our payouts are handled by Balanced, but they're limited to people in -the U.S. We need to payout to people outside the U.S. (#126), and while we work -on a long-term solution, we are using PayPal. However, we've grown past the -point that PayPal's Instant Transfer feature is workable. This script is for -interfacing with PayPal's MassPay feature. +See documentation here: -This script provides for: - - 1. Computing an input CSV by hitting the Gratipay database directly. - 2. Computing two output CSVs (one to upload to PayPal, the second to use for POSTing - the exchanges back to Gratipay) - 3. POSTing the exchanges back to Gratipay via the HTTP API. - -The idea is that you run steps 1 and 2, then run through the MassPay UI on the -PayPal website using the appropriate CSV from step 2, then run step 3. + http://inside.gratipay.com/howto/run-masspay """ from __future__ import absolute_import, division, print_function, unicode_literals diff --git a/gratipay/billing/exchanges.py b/gratipay/billing/exchanges.py index 0b2ed6856d..cba53fd7a5 100644 --- a/gratipay/billing/exchanges.py +++ b/gratipay/billing/exchanges.py @@ -185,6 +185,8 @@ def get_ready_payout_routes_by_network(db, network): FROM participants p JOIN current_exchange_routes r ON p.id = r.participant WHERE p.balance > 0 + AND p.claimed_time is not null + AND p.is_suspicious is not true AND r.network = %s AND ( @@ -198,12 +200,21 @@ def get_ready_payout_routes_by_network(db, network): ) > 0 - OR -- Include green-lit Gratipay 1.0 balances + OR -- Include team members + + (SELECT count(*) + FROM takes + JOIN teams t ON takes.team_id = t.id + WHERE takes.participant_id = p.id + AND p.has_verified_identity -- XXX apply this to *everyone* we pay out to + AND t.is_approved IS TRUE + AND t.is_closed IS NOT TRUE + ) > 0 - p.status_of_1_0_payout='pending-payout' + OR -- Include green-lit Gratipay 1.0 balances - ----- TODO: Include team members once process_takes is implemented + p.status_of_1_0_payout='pending-payout' ) """, (network,)) diff --git a/gratipay/billing/payday.py b/gratipay/billing/payday.py index f7f737bc9c..f67f9b81f5 100644 --- a/gratipay/billing/payday.py +++ b/gratipay/billing/payday.py @@ -72,8 +72,8 @@ class Payday(object): prepare create_card_holds process_payment_instructions - transfer_takes - process_draws + process_takes + process_remainder settle_card_holds update_balances take_over_balances @@ -153,8 +153,8 @@ def payin(self): self.prepare(cursor) holds = self.create_card_holds(cursor) self.process_payment_instructions(cursor) - self.transfer_takes(cursor, self.ts_start) - self.process_draws(cursor) + self.process_takes(cursor, self.ts_start) + self.process_remainder(cursor) _payments_for_debugging = cursor.all(""" SELECT * FROM payments WHERE "timestamp" > %s """, (self.ts_start,)) @@ -261,37 +261,41 @@ def process_payment_instructions(cursor): @staticmethod - def transfer_takes(cursor, ts_start): - return # XXX Bring me back! + def process_takes(cursor, ts_start): + log("Processing takes.") cursor.run(""" + UPDATE payday_teams SET available_today = LEAST(available, balance); + INSERT INTO payday_takes - SELECT team, member, amount - FROM ( SELECT DISTINCT ON (team, member) - team, member, amount, ctime - FROM takes - WHERE mtime < %(ts_start)s - ORDER BY team, member, mtime DESC - ) t - WHERE t.amount > 0 - AND t.team IN (SELECT username FROM payday_participants) - AND t.member IN (SELECT username FROM payday_participants) - AND ( SELECT id - FROM payday_transfers_done t2 - WHERE t.team = t2.tipper - AND t.member = t2.tippee - AND context = 'take' - ) IS NULL - ORDER BY t.team, t.ctime DESC; + SELECT team_id, participant_id, amount + FROM ( SELECT DISTINCT ON (team_id, participant_id) + team_id, participant_id, amount, ctime + FROM takes + WHERE mtime < %(ts_start)s + ORDER BY team_id, participant_id, mtime DESC + ) t + WHERE t.amount > 0 + AND t.team_id IN (SELECT id FROM payday_teams) + AND t.participant_id IN (SELECT id FROM payday_participants) + AND ( SELECT ppd.id + FROM payday_payments_done ppd + JOIN participants ON participants.id = t.participant_id + JOIN teams ON teams.id = t.team_id + WHERE participants.username = ppd.participant + AND teams.slug = ppd.team + AND direction = 'to-participant' + ) IS NULL + ORDER BY t.team_id, t.amount ASC; """, dict(ts_start=ts_start)) @staticmethod - def process_draws(cursor): - """Send whatever remains after payouts to the team owner. + def process_remainder(cursor): + """Send whatever remains after processing takes to the team owner. """ - log("Processing draws.") + log("Processing remainder.") cursor.run("UPDATE payday_teams SET is_drained=true;") diff --git a/gratipay/models/team/mixins/takes.py b/gratipay/models/team/mixins/takes.py index a7d2f558d3..7357ea8e2e 100644 --- a/gratipay/models/team/mixins/takes.py +++ b/gratipay/models/team/mixins/takes.py @@ -82,10 +82,15 @@ def vet(p): vet(participant) vet(recorder) - if recorder.username == self.owner: - if take not in (ZERO, PENNY): + owner_recording = recorder.username == self.owner + owner_taking = participant.username == self.owner + taker_recording = recorder == participant + adding_or_removing = take in (ZERO, PENNY) + + if owner_recording: + if not adding_or_removing and not owner_taking: raise NotAllowed("owner can only add and remove members, not otherwise set takes") - elif recorder != participant: + elif not taker_recording: raise NotAllowed("can only set own take") with self.db.get_cursor(cursor) as cursor: diff --git a/gratipay/testing/billing.py b/gratipay/testing/billing.py index 0fce8a769d..e4e9ea65d8 100644 --- a/gratipay/testing/billing.py +++ b/gratipay/testing/billing.py @@ -32,8 +32,8 @@ def setUp(self): braintree_customer_id=self.obama_bt_id) self.obama_route = ExchangeRoute.insert(self.obama, 'braintree-cc', self.obama_cc_token) # A customer with Paypal attached. - self.homer = self.make_participant('homer', is_suspicious=False, - claimed_time='now') + self.homer = self.make_participant('homer', is_suspicious=False, verified_in='US', + claimed_time='now', email_address='abcd@gmail.com') self.homer_route = ExchangeRoute.insert(self.homer, 'paypal', 'abcd@gmail.com') diff --git a/sql/payday.sql b/sql/payday.sql index 38fee52285..4310c2b354 100644 --- a/sql/payday.sql +++ b/sql/payday.sql @@ -29,7 +29,9 @@ CREATE TABLE payday_teams AS SELECT t.id , slug , owner + , available -- The maximum amount that can be distributed to members (ever) , 0::numeric(35, 2) AS balance + , 0::numeric(35, 2) AS available_today -- The max that can be distributed this payday , false AS is_drained FROM teams t JOIN participants p @@ -86,9 +88,9 @@ UPDATE payday_participants pp DROP TABLE IF EXISTS payday_takes; CREATE TABLE payday_takes -( team text -, member text -, amount numeric(35,2) +( team_id bigint +, participant_id bigint +, amount numeric(35,2) ); DROP TABLE IF EXISTS payday_payments; @@ -204,24 +206,27 @@ CREATE TRIGGER process_payment_instruction BEFORE UPDATE OF is_funded ON payday_ WHEN (NEW.is_funded IS true AND OLD.is_funded IS NOT true) EXECUTE PROCEDURE process_payment_instruction(); + -- Create a trigger to process takes CREATE OR REPLACE FUNCTION process_take() RETURNS trigger AS $$ DECLARE - actual_amount numeric(35,2); - team_balance numeric(35,2); + amount numeric(35,2); + available_today_ numeric(35,2); BEGIN - team_balance := ( - SELECT new_balance - FROM payday_participants - WHERE username = NEW.team - ); - IF (team_balance <= 0) THEN RETURN NULL; END IF; - actual_amount := NEW.amount; - IF (team_balance < NEW.amount) THEN - actual_amount := team_balance; + amount := NEW.amount; + available_today_ := (SELECT available_today FROM payday_teams WHERE id = NEW.team_id); + + IF amount > available_today_ THEN + amount := available_today_; + END IF; + + IF amount > 0 THEN + UPDATE payday_teams + SET available_today = (available_today - amount) + WHERE id = NEW.team_id; + EXECUTE pay(NEW.participant_id, NEW.team_id, amount, 'to-participant'); END IF; - EXECUTE transfer(NEW.team, NEW.member, actual_amount, 'take'); RETURN NULL; END; $$ LANGUAGE plpgsql; diff --git a/tests/py/fixtures/TestCardHolds.yml b/tests/py/fixtures/TestCardHolds.yml deleted file mode 100644 index 04f7939700..0000000000 --- a/tests/py/fixtures/TestCardHolds.yml +++ /dev/null @@ -1,925 +0,0 @@ -interactions: -- request: - body: !!python/unicode 'bkhpqm20.9111443524salefalse2' - headers: {} - method: POST - uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions - response: - body: - string: !!binary | - H4sIAHTak1UAA9xXS2/bOBC+91cEvjOybCdxCkVBgcUCe+he+kCxl4IixxZjiVRJyrHz63coSrIU - UWn3sMBib9LMR3JenPmYPJ7K4uoI2gglHxbx9XJxBZIpLuT+YfHl8+9ku3hM3yVWU2kos4hK311d - JYKnfP/Cq00S4aeTGEttbVJa21xp8QI8iVqR09pzBamhBSRR8+lkrNYazzoTYRTBIyH98um3JJqK - HZiWqpY2XS2v7+Mkav+cogTNciotoYw5IUF7jM3uD5u7l5fsaaVvb56SKIRyq5XmoPHnSoriYWF1 - DYvIG6eBWuCE2itn8MOC468VJSzQhviGLO/IMv4cr97Hd+9vbv9Cs/sFzfq64v9s/WVBGxxjFVrt - fny843izWd+s+oijdCe0sUTSEl7bj8qCzuuYKisqzwENlFQUAfkzZEbY0F5VrmRIvqOnSVSjoVtJ - JooC6+zi4ub533XOWA2ANcC5BmNC3p8sSO6yMAspFKOFsKHtNezxfoRCpPAqFL6Y7zfx8i6JhqLO - bKxLfZ73yqvdCkKLKqerX0Ktf4aSNeZDsGmuBulB13a15KGL0mtMW+hUa3oeKTGeg/4R2sSAtQWU - gBczo5blQUwuqmpYLqGa+1/WzBsZ/M8UyzA7bfMiOwEFN50/VFvBREV9813hFRhLBv1hsDKhR0NA - a6UJBrdS0kAwJg1uELMxOv2IM+NNQLfFON2vQH/4Xd7ENP4fj9OVU6GD7rHpP9Mzap7AXw+cI2Za - EUmlFcPTMA7diKUNvNnp9uvHb1sX0rdA413GpsTL5XK4fGpoQGex9NMPFWqObtzPIZrQci6cJRj8 - KWzi61EJ5hK0w8TjCiy6DPQ0IrWb6XiKH+IzKEtPxNOFoApOUFbdjM6UKoDKRbqjhXFUpQd0nAC9 - IIzqbkZZdQCZZoe8+lEivPnzmkzIdLOMV9uta6Ry2II2abzdIolpf9pbhpuShhp9FYZitfT/XZep - hPbJLJW0eRpjuifCCfYMVCPhWC1H4EbantsOZOJ6VEPvvny6jOmL9GJlroom3OHOI0q6B1LrIs2t - rcz7KKIGu7u5zjQV0l2ctuKvseViCzi7pv+9BKxW/r1QexUd0f/rSu4fQR6FVtIBHgyVPFMnpAf9 - /v68WoofNbTJxzaCYIHdQ6ebNdtu4h1nbM3Wu9vb9e3NDm7i5ZrBFjKGaZld2jYsDRXFvvSncqXt - v70mB1rYHGOBjFUepHqWSTSQeRCHTNiL3v+2qlpjSWB97+vCcb4B6rWmn06OwApaXKADWddgz1oV - A0QnaBNjTI39GeerPFwwI+m436sdcVoqmSPmH9yJU0UXKsVr1nTxy+kXmQcdQZaKGH6YuWy9vp0E - 48vWvi9ILrAy9XnENfpJ3SAAN2oj7W4oUm5UlNUv0vAe3+/w5sOmQcy9TXyBGqworXJhK1oXB7y1 - jaS3b0CMjMKOBimtBNoxlXsvo9du9pI2NL43FjRMtOrMMC2qWSI20PedrKGBpMLBrzhBrkNcEAN3 - /xUSzdI2iEWTX53jBgTBWRDgkFyYpvKCOvC7qO7SznSluTcK9pGpbeNNkaG5Fyn6NVO3vd7PCHxl - Spjuijk/uqG2A5gbR+5Y9Ux8NidaDENWa+NJMgeLz7SOWo1V4dwMGHb4+DFm8gj/RTicXACwQ+uw - Ge45gJWK7C60Yc1YgEBjRmZ8d55XtYVQabSjhQiJdK1uPptx6vvKd9dXkmgONCY8A0fHvGjIeWZB - P9+rYUk/26unUjbHIUrwerm6AzR9p8YRGzWP9N3fAAAA//8DAGbAiFvjEQAA - headers: - cache-control: ['max-age=0, private, must-revalidate'] - content-encoding: [gzip] - content-type: [application/xml; charset=utf-8] - etag: ['"94ec61fecdef62415a9b56bf77b0d630"'] - strict-transport-security: [max-age=31536000, max-age=31536000; includeSubDomains] - transfer-encoding: [chunked] - vary: [Accept-Encoding] - status: {code: 201, message: Created} -- request: - body: 10.0 - headers: {} - method: PUT - uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions/dgzdp4/submit_for_settlement - response: - body: - string: !!binary | - H4sIAHXak1UAA9xYS2/jNhC+768IfGck2U7iLBQtFigK9LC97ANFLwFFjSyuJVJLUo6dX9+hKMlS - RGUDFC2K3qyZj+S8+M3Q8YdTVV4dQWkuxcMqug5XVyCYzLjYP6y+fvmV7FYfknexUVRoygyikndX - VzHPkmz/nNXbOMCfVqINNY1OdJNW3BjIHnOpHjUYU0IFwsRBB7BYc64h0bSEOGh/WhlrlMKTz4Rr - SdAASL5+/iUO5mILppVshEmi8DoM46D7sooKFCuoMIQyZoUErdMmvT9s756f0+9rdXvzPQ58KLta - qgwUflwJXj6sjGpgFTjjFFD0iVBzZQ1+WGX4aXgFq2QdRjckvCNh9CVav4/u3t/c/olmDwva9U2d - vX39Ha6/LOiCo41Eq+2Hi34Ubbebm/UQf5TmXGlDBK3gpf2oLOmyjsmqpuLs0UBFeemRP0GqufHt - VRdS+OQ5Pc2iGozdilNellh1Fxe3T/+sc9ooAKyBLFOgtc/7kwGR2SwsQkrJaMmNb3sFe7wtvhBJ - vAqlK+b7bRTexcFY1JuNdanOy145tV1BaFkXdP0m1OZnKNFgPjib52qUHnQtb0TmuyiDRneFTpWi - 54kS4zliE98mF9YgKTWs8GIKXtfjcvHV3P+yZl7J4H+mWMbZ6ciL5BzKTPf+UGU44zV15LvGKzCV - jPhhtDKmR01AKakIBreWQoM3Ji1uFLMpOvmEPeNVQL/FNN0vQL+5XV7FtP4fj/OVc6GF7pH0n+gZ - Nd/BXQ/sI3peEXGtJMPTMA60MYVU/Jm28Han22+f/tjZkL4Gmu4yNSUKbVtd0i6sNFj6yccaNUfI - vKtbRBvaLOPWEgz+HDbz9Sg5swnKMfG4AosuBTWPSGN7Op7imvgCytATceOCVwUnqOq+R6dSlkDF - Kslpqe2oMgD6mQC9IIyqvkcZeQCRpIei/lEhvP1ympSLZBtG693OEqkYU9A2iXa7KA66j+6W4aak - HY2+cU2xWobvnmVqrlwyKylMkUSY7plwhj0DVThwrMMJuJV253YNmViOaoe9r58vbfoivVhZyLIN - t595eEX3QBpVJoUxtX4fBFQju+vrVFEu7MXpKv4aKRcp4GxJ/7ECrNbssZR7GRzR/+ta7D+AOHIl - hQU8aCqyVJ5wPBj2d+c1gv9ooEs+0giCObKHSrYbtttGecbYhm3y29vN7U0ON1G4YbCDlGFaFpd2 - hKWgpshLv0tb2u630xRAS1NgLHBiFQchn0QcjGQOlEHKzUXvPjtVo7AksL73TWlnvhHqpWboTnaA - 5bS8QEeynmDPSpYjRC/oEqN1g/yM/VUcLpiJdMr3MidWSwWzg/lHe+Jc0YdKZg1rWfxy+kXmQEcQ - lSQ6OyxctkHfdYLpZeteG6TgWJnqPJk1hk7dIgA36iJtbyiO3Kio6jeO8QN+2KF7xfSEapnu8rBp - Ed1rZB1e30fjt4krUI0VpWTBTU2b8oC3tpUM9o0GIy2R0SChNUc75nLnZTB38+97fvea52954I3j - MHuj/TtxGCRdibgeUVL/wNmkmileLw6kI/3A6O04TGocgGRGcOYjNqQeDnyBRLOU8WLR5Bfn2EZJ - sCd6ZumM6/YGenXgdpE9eS2w89JbDfl0btt0U5xU7csc/Vq4v4Pe9Up8bQuY74o5P9rmngMstWV7 - rHwiLpszLYYhbZR2j4UMDD5X+xFzqvLnZvTS8B8/xcz+jHgjHE42ANiplN8M+yzCSsUp17dhw5jn - IYEZWfDdel43Bnyl0bVYwgWOrU37sx0rHL8+Wn6NgyXQdPAbOTqdD8ez3yLo53u10+LP9hpGSlPg - MEHwetm6AzQ9l9OITcgjefcXAAAA//8DAIkuCK75EgAA - headers: - cache-control: ['max-age=0, private, must-revalidate'] - content-encoding: [gzip] - content-type: [application/xml; charset=utf-8] - etag: ['"caa8dd66103e4cb01445503b16fb269c"'] - strict-transport-security: [max-age=31536000, max-age=31536000; includeSubDomains] - transfer-encoding: [chunked] - vary: [Accept-Encoding] - status: {code: 200, message: OK} -- request: - body: !!python/unicode 'bkhpqm20.9111443524salefalse2' - headers: {} - method: POST - uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions - response: - body: - string: !!binary | - H4sIAHfak1UAA9xXT2+rOBC/v08R5e4SkrRNK0r1pNVKe9jVSu91D3upjJkEN2BT26RJP/2OMRAI - pu1lpdXeYObn8fyfcfR4LPLZAZTmUjzMw6vFfAaCyZSL3cP86eevZDN/jL9FRlGhKTOIir/NZhFP - 45f0Zve6iQL8tBRtqKl0TCuTScXfIY2ChmS55lRCrGkOUVB/WhqrlMK7ToRrSfBKiJ9+/BIFY7IF - 00JWwsTLxdVdGAXNn2UUoFhGhSGUMUskqI82yd1+ffv+nrws1c31SxT4UPa0VCko/JkJnj/Mjapg - HjjlFFADKaFmZhV+mKf4a3gBc9QhvCaLW7IIf4bL+/D2/nrzN6rdHajPV2X69fN3eP58oHGONhK1 - tj/O32G4Xq+ul+vW40jdcqUNEbSAS/2RmdNpHpNFScXJw4GC8txDf4NEc+OTVWZS+Ohbehx5Neib - FSU8zzHPziau3/5d47RRAJgDaapAa5/1RwMitVGYhOSS0Zwbn3gFO6wPn4sklkLukvluHS5uo6BP - atXGvFSnaasc254gNC8zuvwSavUZSlQYD87GseqFB03bViL1FUrH0U2iU6XoacBEf/b6h0+IBmNy - KAALM6GGZV5Mxsuyny6+nPtf5swHEfzPJEs/Ok3zIlsOeapbe6gynPGSuua7xBIYUnr9oXcyogdN - QCmpCDq3lEKD1yc1ruezITr+HWfGh4BWxDDcF6DfnJQPMbX9h8P45JhooTts+m/0hJwXcOWBc0SP - MyIqlWR4G/qhHbG0hjvzwsXqTxwiH4KGUoaqhIvFon98rKiHZzD14+8lcg523E8hatemKbeaoPPH - sJGtB8mZDdAWA48nMOkSUGOPVHam4y1uiE+gDD0Sty54WXCEomxndCJlDlTM4y3NtV1VOkC7E6AV - hFHVzigj9yDiZJ+VrwXC6z/HSbiI14twudnYRir6LWgdh5sNLjHNT1NlKJTUq9FfXFPMlu6/7TIl - Vy6YhRQmi0OsoBFxhD0BVbhwLBcDcE1t7m0GMrE9ql7vnn6cx/SZetYyk3ntbn/n4QXdAalUHmfG - lPo+CKjG7q6vEkW5sIXTZPwVtlxsASfb9J8LwGxNn3O5k8EB7b8qxe4RxIErKSzgQVORJvKI60En - 391XCf5aQRN8bCMI5tg9VLxesc063KaMrdhqe3OzurnewjXWCYMNJAzDMnm0aVgKSop96Q9pU9t9 - O04GNDcZ+gI3VrEX8k1EQY/mQCkk3Jz57rdhVQpTAvN7V+V25+uhLjnddLILLKf5GdqjtQ32pGTe - Q7SEJjBaV9ifcb6K/RkzoA77vdwSy6WC2cX8u71xzGhdJdOK1V38fPuZ5kAHEIUkOt1PFFvHbybB - sNia9wXJOGamOg12jW5S1whAQY2nbYXiyo2MovziGt7hOwkfPmxqxNTbxCWoxoxSMuOmpFW+x6qt - KZ1+vcVIS+xoENOSox5jurMyuDSzozSucb0xp/5Fq0o0U7ycXMR6/K6T1WsgKXHwy5TgrkOsEz21 - f4FEtZTxYlHli3vsgCA4Czw7ZMp1nXleHjgpsi3aia409UbBPjLWbSgUNzT7IkW7JvK247sZga9M - AWOpGPODHWpbgKlxZK+Vb8RFc8RFNySV0m5JTsHgM61drYYsf2x6G7b/+iFm9Aj/IhyO1gHYoZVf - DfscwEzF7c4nsGLMs0BjRCZst5aXlQFfajSjhXCB61pVf9bj1PWVZ9tXomAKNFx4eoYO96L+zjMJ - +lxWvSV9JqtbpUyGQ5Rgedm8A1R9K4ceGzSP+Ns/AAAA//8DABeuNsXjEQAA - headers: - cache-control: ['max-age=0, private, must-revalidate'] - content-encoding: [gzip] - content-type: [application/xml; charset=utf-8] - etag: ['"9e60360062438128abc26bb1ceaaf9f1"'] - strict-transport-security: [max-age=31536000, max-age=31536000; includeSubDomains] - transfer-encoding: [chunked] - vary: [Accept-Encoding] - status: {code: 201, message: Created} -- request: - body: 20.91 - headers: {} - method: PUT - uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions/jd6gq8/submit_for_settlement - response: - body: - string: !!binary | - H4sIAHjak1UAA9xYTW/jNhC9768IfGck2U7iBIoWCxQFemhRYHd76CWgqJHFWCK1JOXY++s7FCVZ - iqhsgKLAojdr5pGcL74ZOv54qsqrIyjNpXhcRdfh6goEkxkX+8fV1y+/kt3qY/IhNooKTZlBVPLh - 6irmWfKc3e6/7eIAf1qJNtQ0OtFNWnFjIHvKpXrSYEwJFQgTBx3AYs25hkTTEuKg/WllrFEKTz4T - riVBAyD5+vmXOJiLLZhWshEmWYfX91EcdF9WUYFiBRWGUMaskKB12qT3h+3d9+/p81rd3jzHgQ9l - V0uVgcKPK8HLx5VRDawCZ5wCij4Raq6swY+rDD8Nr2CFNkQ3JLwjYfQlWj9Edw83u7/R7GFBu76p - s3eu3z2EIa6/LOiCo41Eq+2Hi34Ubbebm/W2jz9Kc660IYJW8Np+VJZ0WcdkVVNx9migorz0yF8g - 1dz49qoLKXzynJ5mUQ3GbsUpL0usuouL25f/1jltFADWQJYp0Nrn/cmAyGwWFiGlZLTkxre9gj3e - Fl+IJF6F0hXz/TYK7+JgLOrNxrpU52WvnNquILSsC7p+F2rzI5RoMB+czXM1Sg+6ljci812UQaO7 - QqdK0fNEifEcsYlvkwtrkJQaVngxBa/rcbn4au5/WTNvZPCnKZZxdjryIjmHMtO9P1QZznhNHfmu - 8QpMJSN+GK2M6VETUEoqgsGtpdDgjUmLG8Vsik5+x57xJqDfYpruV6Df3C5vYlr/j8f5yrnQQvdI - +i/0jJpncNcD+4ieV0RcK8nwNIwDbUwhFf9OW7hzLwo3f2ITeRM03WVqShSG4Xj53FCPzmDpJ59q - 1Bwh865uEW1os4xbSzD4c9jM16PkzCYox8TjCiy6FNQ8Io3t6XiKa+ILKENPxI0LXhWcoKr7Hp1K - WQIVqySnpbajygDoZwL0gjCq+h5l5AFEkh6K+luF8PbLaVIukm0YrXc7S6RiTEHbJNrtcIjpPrpb - hpuSdjT6i2uK1TJ89yxTc+WSWUlhiiTCGzQTzrBnoAoHjnU4AbfS7tyuIRPLUe2w9/XzpU1fpBcr - C1m24fYzD6/oHkijyqQwptYPQUA1sru+ThXlwl6cruKvkXKRAs6W9J8qwGrNnkq5l8ER/b+uxf4j - iCNXUljAo6YiS+UJx4Nhf3deI/i3BrrkI40gmCN7qGS7YbttlGeMbdgmv73d3N7kcIP3hMEOUoZp - WVzaEZaCmiIv/SFtabvfTlMALU2BscCJVRyEfBFxMJI5UAYpNxe9++xUjcKSwPreN6Wd+Uao15qh - O9kBltPyAh3JeoI9K1mOEL2gS4zWDfIz9ldxuGAm0infy5xYLRXMDuaf7IlzRR8qmTWsZfHL6ReZ - Ax1BVJLo7LBw2QZ91wmml617bZCCY2Wq82TWGDp1iwDcqIu0vaE4cqOiqt8xxt8jgw74YYfuFdMT - qmW6y8OmRSy9TVyBaqwoJQtuatqUB7y1rWSwbzQYaYmMBgmtOdoxlzsvg7mb/9Lz7gGy6Pl7Hng/ - QRwGSVcirkeU1D9wNqlmiteLA+lIPzB6Ow6TGgcgmRGc+YgNqYcDXyHRLGW8WDT51Tm2URLsiZ5Z - OuO6vYFeHbhdZE9eC+y89FZDPp3bNt0UJ1X7Mke/Fu7voHe9El/bAua7Ys6PtrnnAEtt2R4rX4jL - 5kyLYUgbpd1jIQODz9V+xJyq/LkZvTT8x08xsz8j3gmHkw0AdirlN8M+i7BSccr1bdgw5nlIYEYW - fLee140BX2l0LZZwgWNr0/5sxwrHr0+WX+NgCTQd/EaOTufD8ey3CPrxXu20+KO9hpHSFDhMELxe - tu4ATc/lNGIT8kg+/AMAAP//AwAArOyd+RIAAA== - headers: - cache-control: ['max-age=0, private, must-revalidate'] - content-encoding: [gzip] - content-type: [application/xml; charset=utf-8] - etag: ['"f6e2f3f32d31e9f0a38283203fc24923"'] - strict-transport-security: [max-age=31536000, max-age=31536000; includeSubDomains] - transfer-encoding: [chunked] - vary: [Accept-Encoding] - status: {code: 200, message: OK} -- request: - body: null - headers: {} - method: GET - uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions/jd6gq8 - response: - body: - string: !!binary | - H4sIAHvak1UAA9xYTW/jNhC9768IfGck2U7iBIoWCxQFemhRYHd76CWgqJHFWCK1JOXY++s7FCVZ - iqhsgKLAojdr5pGcL74ZOv54qsqrIyjNpXhcRdfh6goEkxkX+8fV1y+/kt3qY/IhNooKTZlBVPLh - 6irmWfKc3e6/7eIAf1qJNtQ0OtFNWnFjIHvKpXrSYEwJFQgTBx3AYs25hkTTEuKg/WllrFEKTz4T - riVBAyD5+vmXOJiLLZhWshEmWYfX91EcdF9WUYFiBRWGUMaskKB12qT3h+3d9+/p81rd3jzHgQ9l - V0uVgcKPK8HLx5VRDawCZ5wCij4Raq6swY+rDD8Nr2CFNkQ3JLwjYfQlWj9Edw83u7/R7GFBu76p - s3eu3z2EIa6/LOiCo41Eq+2Hi34Ubbebm/W2jz9Kc660IYJW8Np+VJZ0WcdkVVNx9migorz0yF8g - 1dz49qoLKXzynJ5mUQ3GbsUpL0usuouL25f/1jltFADWQJYp0Nrn/cmAyGwWFiGlZLTkxre9gj3e - Fl+IJF6F0hXz/TYK7+JgLOrNxrpU52WvnNquILSsC7p+F2rzI5RoMB+czXM1Sg+6ljci812UQaO7 - QqdK0fNEifEcsYlvkwtrkJQaVngxBa/rcbn4au5/WTNvZPCnKZZxdjryIjmHMtO9P1QZznhNHfmu - 8QpMJSN+GK2M6VETUEoqgsGtpdDgjUmLG8Vsik5+x57xJqDfYpruV6Df3C5vYlr/j8f5yrnQQvdI - +i/0jJpncNcD+4ieV0RcK8nwNIwDbUwhFf9OW7hzLwo3f2ITeRM03WVqShSG4Xj53FCPzmDpJ59q - 1Bwh865uEW1os4xbSzD4c9jM16PkzCYox8TjCiy6FNQ8Io3t6XiKa+ILKENPxI0LXhWcoKr7Hp1K - WQIVqySnpbajygDoZwL0gjCq+h5l5AFEkh6K+luF8PbLaVIukm0YrXc7S6RiTEHbJNrtcIjpPrpb - hpuSdjT6i2uK1TJ89yxTc+WSWUlhiiTCGzQTzrBnoAoHjnU4AbfS7tyuIRPLUe2w9/XzpU1fpBcr - C1m24fYzD6/oHkijyqQwptYPQUA1sru+ThXlwl6cruKvkXKRAs6W9J8qwGrNnkq5l8ER/b+uxf4j - iCNXUljAo6YiS+UJx4Nhf3deI/i3BrrkI40gmCN7qGS7YbttlGeMbdgmv73d3N7kcIP3hMEOUoZp - WVzaEZaCmiIv/SFtabvfTlMALU2BscCJVRyEfBFxMJI5UAYpNxe9++xUjcKSwPreN6Wd+Uao15qh - O9kBltPyAh3JeoI9K1mOEL2gS4zWDfIz9ldxuGAm0infy5xYLRXMDuaf7IlzRR8qmTWsZfHL6ReZ - Ax1BVJLo7LBw2QZ91wmml617bZCCY2Wq82TWGDp1iwDcqIu0vaE4cqOiqt8xxt8jgw74YYfuFdMT - qmW6y8OmRSy9TVyBaqwoJQtuatqUB7y1rWSwbzQYaYmMBgmtOdoxlzsvg7mb/9Lz7gGy6Pl7Hng/ - QRwGSVcirkeU1D9wNqlmiteLA+lIPzB6Ow6TGgcgmRGc+YgNqYcDXyHRLGW8WDT51Tm2URLsiZ5Z - OuO6vYFeHbhdZE9eC+y89FZDPp3bNt0UJ1X7Mke/Fu7voHe9El/bAua7Ys6PtrnnAEtt2R4rX4jL - 5kyLYUgbpd1jIQODz9V+xJyq/LkZvTT8x08xsz8j3gmHkw0AdirlN8M+i7BSccr1bdgw5nlIYEYW - fLee140BX2l0LZZwgWNr0/5sxwrHr0+WX+NgCTQd/EaOTufD8ey3CPrxXu20+KO9hpHSFDhMELxe - tu4ATc/lNGIT8kg+/AMAAP//AwAArOyd+RIAAA== - headers: - cache-control: ['max-age=0, private, must-revalidate'] - content-encoding: [gzip] - content-type: [application/xml; charset=utf-8] - etag: ['"4b13142cde81a851cbcfaf7a2fb034c1"'] - strict-transport-security: [max-age=31536000, max-age=31536000; includeSubDomains] - transfer-encoding: [chunked] - vary: [Accept-Encoding] - status: {code: 200, message: OK} -- request: - body: null - headers: {} - method: PUT - uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions/jd6gq8/void - response: - body: - string: !!binary | - H4sIAHzak1UAA9xYTW/jNhC9768IfGck2U7iBIoWCxQFemhRYLs99BJQ1MhiLJFaknLs/fUdipIs - RVQ2QFFgsTdr5pGcL848Ov54qsqrIyjNpXhcRdfh6goEkxkX+8fVl79+JbvVx+RDbBQVmjKDqOTD - 1VXMs+Q5u91/3cUB/rQSbahpdHKUPIMsDrpPqzHnGhJNS4iD9qeVsUYpPOdMuJYEj4Pky+df4mAu - tmBayUaYZB1e30dx0H1ZRQWKFVQYQhmzQoK2aJPeH7Z3376lz2t1e/McBz6UXS1VBgo/rgQvH1dG - NbAKnHEKqIGMUHNlDX5cZfhpeAUrtCG6IeEdCaO/ovVDdPdws/sHzR4WtOubOnvn+t1DuMX1lwVd - cLSRaLX9cLGOou12c7Pe9tFGac6VNkTQCl7bj8qSLuuYrGoqzh4NVJSXHvkLpJob3151IYVPntPT - LKrB2K045WWJNXZxcfvy/zqnjQLAGsgyBVr7vD8ZEJnNwiKklIyW3Pi2V7DHu+ELkcSrULpivt9G - 4V0cjEW92ViX6rzslVPbFYSWdUHX70JtvocSDeaDs3muRulB1/JGZL6LMmh0V+hUKXqeKDGeo97h - 20SDMSVUgBczpYYVXkzB63pcLr6a+ylr5o0M/jDFMs5O17xIzqHMdO8PVYYzXlPXfNd4BaaSUX8Y - rYzpURNQSiqCwa2l0OCNSYsbxWyKTn7HmfEmoN9imu5XoN/cLm9iWv+Px/nKudBC99j0X+gZNc/g - rgfOET2viLhWkuFpGAfamEIq/o22cOdeFG7+xCHyJmi6y9SUKAzD8fK5oR6dwdJPPtWoOdpxv4Ro - Q5tl3FqCwZ/DZr4igWA2QTkmHldg0aWg5hFp7EzHU9wQX0AZeiKOLnhVcIKq7md0KmUJVKySnJba - UpUB0HMC9IIwqvoZZeQBRJIeivprhfD2y2lSLpJtGK13O9tIxbgFbZNot0MS0310tww3JS01+ptr - itUyfPddpubKJbOSwhRJhDdoJpxhz0AVEo51OAG30u7cbiAT26Naavfl82VMX6QXKwtZtuH2dx5e - 0T2QRpVJYUytH4KAauzu+jpVlAt7cbqKv8aWiy3gbJv+UwVYrdlTKfcyOKL/17XYfwRx5EoKC3jU - VGSpPCE9GPZ35zWCf22gSz62EQRz7B4q2W7YbhvlGWMbtslvbze3Nznc4D1hsIOUYVoWl3YNS0FN - sS/9IW1pu99OUwAtTYGxQMYqDkK+iDgYyRwog5Sbi959dqpGYUlgfe+b0nK+Eeq1ZphOlsByWl6g - I1nfYM9KliNEL+gSo3WD/RnnqzhcMBPptN/LnFgtFcwS80/2xLmiD5XMGtZ28cvpF5kDHUFUkujs - sHDZBn03CaaXrXtbkIJjZarzhGsMk7pFAG7URdreUKTcqKjqd9D4e+ygA37YoXvF9A11+rBpEUtv - E1egGitKyYKbmjblAW9tKxnsGxEjLbGjQUJrjnbM5c7LYO7mf/QcHyDhW57rJq24wWp8yqV6ulC1 - nzAO27fiMH/W/gBeD5LuYrjJWFI/zW5SzRSvF2n4SD/MsfYRQGqkfTIjyHSJDaCn879ColnKeLFo - 8qtzLD0gyAQ8L4iM67bveHXgdpF9y16YSUsvVJwic9ummyI/t/9HoF8LXWvQO4ZQUCFgvivm/Ggp - TQ6wREbssfKFuGzOtBiGtFHaPZEyMPhI74n1VOXPzeh95T9+ipn9BfNOOJxsAHA+K78Z9jGIlYrc - 3rdhw5jn+YQZWfDdel43Bnyl0RELwgWS9ab92ZIpN1We7FSJgyXQlO6OHJ2y4jHjXQR9f6+WI39v - r4FImwIpFMHrZesO0PRcTiM2aR7Jh38BAAD//wMAYLeqXd0TAAA= - headers: - cache-control: ['max-age=0, private, must-revalidate'] - content-encoding: [gzip] - content-type: [application/xml; charset=utf-8] - etag: ['"d30ef6033918c8b77b6dff79c0170550"'] - strict-transport-security: [max-age=31536000, max-age=31536000; includeSubDomains] - transfer-encoding: [chunked] - vary: [Accept-Encoding] - status: {code: 200, message: OK} -- request: - body: !!python/unicode 'bkhpqm20.9111443524salefalse2' - headers: {} - method: POST - uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions - response: - body: - string: !!binary | - H4sIAH7ak1UAA9xXS2/jNhC+768wfGck+ZF1FoqCBYoCPbRAu5seellQ1NhiLJFaknLs/fUdipIs - RVSSHgoUvUkzH4fznmH8cC6LxQmU5lLcL6ObcLkAwWTGxeF++fj1Z7JbPiQfYqOo0JQZRCUfFouY - Z8ndcVNud3GAn5aiDTW1Tmhtcqn4D8jioCVZrrlUkGhaQBw0n5bGaqXwrgvhWhK8EpLHLz/FwZRs - wbSUtTDJKry5i+Kg/bOMEhTLqTCEMmaJBPXRJkXtPv74kT6t1O32KQ58KHtaqgwU/iwEL+6XRtWw - DJxyCqiBjFCzsArfLzP8NbyEJeoQbUn4kYTR12j1Kdp9Cm//QrX7A835usr+2fnrgdY52kjU2v44 - f0fRZrPerjadx5G650obImgJL/VHZkHneUyWFRUXDwdKygsP/RlSzY1PVpVL4aPv6Xni1WBoVpzy - osA8u5q4ef53jdNGAWAOZJkCrX3Wnw2IzEZhFlJIRgtufOIVHLA+fC6SWAqFS+a7TRR+jIMhqVMb - 81Jd5q1ybHuC0KLK6epdqPVbKFFjPDibxmoQHjRtX4vMVyg9R7eJTpWilxET/TnoHz4hGowpoAQs - zJQalnsxOa+qYbr4cu5/mTOvRPA/kyzD6LTNi+w5FJnu7KHKcMYr6prvCktgTBn0h8HJmJ40AaWk - IujcSgoNXp80uIHPxujkV5wZrwI6EeNwvwD94qS8imnsP52mJ6dECz1g03+mF+Q8gSsPnCN6mhFx - pSTD29AP3YilDbyRFN798fX2d3Tpa6CxlLEqURiGw+NTRT08g6mffK6Qc7Ljfg7RuDbLuNUEnT+F - TWw9Sc5sgPYYeDyBSZeCmnqktjMdb3FDfAZl6Jm4dcHLgjOUVTejUykLoGKZ7Gmh7arSA7qdAK0g - jKpuRhl5BJGkx7z6XiK8+XOclItkE0ar3c42UjFsQZsk2u1wiWl/2ipDoaRZjf7kmmK29P9dl6m4 - csEspTB5EmEFTYgT7AWowoVjFY7ADbW9tx3IxPaoZr17/HId01fqVctcFo27/Z2Hl/QApFZFkhtT - 6U9BQDV2d32TKsqFLZw242+w5WILuNim/60EzNbsWyEPMjih/TeVODyAOHElhQXcayqyVJ5xPejl - u/tqwb/X0AYf2wiCOXYPlWzWbLeJ9hlja7be396ub7d72EbhmsEOUoZhmT3aNiwFFcW+9Ju0qe2+ - HScHWpgcfYEbqzgK+SziYEBzoAxSbq5899uyaoUpgfl9qAu78w1QLzn9dLILLKfFFTqgdQ32omQx - QHSENjBa19ifcb6K4xUzoo77vdwTy6WC2cX8s71xyuhcJbOaNV38evuV5kAnEKUkOjvOFFvPbyfB - uNja9wXJOWamuox2jX5SNwhAQa2nbYXiyo2MsnrnGt7jewmvPmwaxNzbxCWoxoxSMuemonVxxKpt - KL1+g8VIS+xokNCKox5TurMyeGlmT2ld43pjQf2LVp1qpng1u4gN+H0na9ZAUuHglxnBXYdYJ3pq - /wUS1VLGi0WVX9xjBwTBWeDZITOum8zz8sBJkV3RznSluTcK9pGpbmOhuKHZFynaNZO3Pd/NCHxl - CphKxZif7FDbA8yNI3utfCYumhMuuiGtlXZLcgYGn2ndajVm+WMz2LD9148xk0f4O+Fwtg7ADq38 - atjnAGYqbnc+gTVjngUaIzJju7W8qg34UqMdLYQLXNfq5rMZp66vfLN9JQ7mQOOFZ2DoeC8a7jyz - oLdlNVvSW7L6VcrkOEQJlpfNO0DV93LssVHzSD78DQAA//8DAI5f6fXjEQAA - headers: - cache-control: ['max-age=0, private, must-revalidate'] - content-encoding: [gzip] - content-type: [application/xml; charset=utf-8] - etag: ['"cf179f240b042b2fc85a1c5e2c993c1a"'] - strict-transport-security: [max-age=31536000, max-age=31536000; includeSubDomains] - transfer-encoding: [chunked] - vary: [Accept-Encoding] - status: {code: 201, message: Created} -- request: - body: 15.76 - headers: {} - method: PUT - uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions/9k4m58/submit_for_settlement - response: - body: - string: !!binary | - H4sIAITak1UAA9xYS2/jNhC+51cYvjOS/IqzULRYoCjQQwu0u9lDLwFFjSyuJVJLUo6dX9+hXpYi - KhugaFH0Zs18JOfFb4YOP56LfHECpbkUD8vg1l8uQDCZcHF4WD5++Znslx+jm9AoKjRlBlHRzWIR - 8iS6P26K7T708KeVaENNpSNdxQU3BpKnVKonDcbkUIAwodcCLNZcSog0zSH06p9Wxiql8OQL4VoS - NACix88/hd5UbMG0kJUwUbC9vduFXvtlFQUollFhCGXMCglap02Mtt69vMTfVmq3/RZ6LpRdLVUC - Cj8WgucPS6MqWHqNcQoo+kSoWViDH5YJfhpewDJa+cGW+HfED74Eqw/B/oO/+xPN7hfU66syeff6 - YIXrrwva4Ggj0Wr70UQ/CDab9Xa16eKP0pQrbYigBby2H5U5ndcxWZRUXBwaKCjPHfJniDU3rr3K - TAqXPKXnSVS9oVthzPMcq+7q4ub5n3VOGwWANZAkCrR2eX82IBKbhVlILhnNuXFtr+CAt8UVIolX - IW+K+X4T+HehNxR1ZmNdqsu8V43ariA0LzO6ehdq/SOUqDAfnE1zNUgPupZWInFdlF6j20KnStHL - SInxHLCJa5Mra5CYGpY5MRkvy2G5uGruf1kzb2TwP1Msw+y05EVSDnmiO3+oMpzxkjbku8IrMJYM - +GGwMqQnTUApqQgGt5RCgzMmNW4QszE6+hV7xpuAbotxul+Bfml2eRNT+386TVdOhRZ6QNJ/phfU - fIPmemAf0dOKCEslGZ6GcaCVyaTiL7SG1zv593982f2OIX0LNN5lbErg+/5w+dRQh85g6UefStSc - IHGurhF1aJOEW0sw+FPYxNeT5MwmKMXE4wosuhjUNCKV7el4StPEZ1CGnkkzLjhVcIai7Hp0LGUO - VCyjlObajio9oJsJ0AvCqOp6lJFHEFF8zMrvBcLrr0YTcxFt/GC131siFUMK2kTBfh+EXvvR3jLc - lNSj0VeuKVZL/92xTMlVk8xCCpNFAd6giXCCvQBVOHCs/BG4lrbntg2ZWI6qh73Hz9c2fZVercxk - XofbzTy8oAcglcqjzJhSf/A8qpHd9W2sKBf24rQVf4uUixRwsaT/VABWa/KUy4P0Tuj/bSkOH0Gc - uJLCAh40FUkszzge9Ps351WCf6+gTT7SCII5soeKNmu23wRpwtiardPdbr3bprAN/DWDPcQM0zK7 - tCUsBSVFXvpN2tJufjeaDGhuMowFTqziKOSzCL2BrAElEHNz1TefrapSWBJY34cqtzPfAPVa03cn - O8Byml+hA1lHsBcl8wGiE7SJ0bpCfsb+Ko5XzEg65nuZEqulgtnB/JM9caroQiWTitUsfj39KmtA - JxCFJDo5zly2Xt92gvFla18bJONYmeoymjX6Tl0jADdqI21vKI7cqCjKd47xPb7foX3FdIRqme76 - sKkR7Wtk5d/eB8O3SVOgGitKyYybklb5EW9tLentGwxGWiKjQURLjnZM5Y2X3tTNv+15/QCZ9fw9 - D7xhHCZvtH8nDr2kLZGmR+TUPXBWsWaKl7MD6UDfM3o9DpMSByCZEJz5iA2pgwNfIdEsZZxYNPnV - ObZREuyJjlk64bq+gU4dNLvIjrxm2HnurYZ8OrVtvClOqvZljn7N3N9e3/RKfG0LmO6KOT/Z5p4C - zLVle6x8Jk02J1oMQ1wp3TwWEjD4XO1GzLHKnZvBS8N9/Bgz+TPinXA42wBgp1JuM+yzCCsVp1zX - hhVjjocEZmTGd+t5WRlwlUbbYgkXOLZW9c96rGj49cnya+jNgcaD38DR8Xw4nP1mQT/eq54Wf7RX - P1KaDIcJgtfL1h2g6akcR2xEHtHNXwAAAP//AwDct7JM+RIAAA== - headers: - cache-control: ['max-age=0, private, must-revalidate'] - content-encoding: [gzip] - content-type: [application/xml; charset=utf-8] - etag: ['"28baf59c4a3e1b380c1822545a184649"'] - strict-transport-security: [max-age=31536000, max-age=31536000; includeSubDomains] - transfer-encoding: [chunked] - vary: [Accept-Encoding] - status: {code: 200, message: OK} -- request: - body: null - headers: {} - method: PUT - uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions/9k4m58/void - response: - body: - string: !!binary | - H4sIAIbak1UAA9xYS2/jNhC+51cEvjOS/IqzULRYoCjQQwu0u+mhl4CiRhbXEqklKcfOr+9QL0sR - 5Q1QFNj2Zs18JOfFmY8OP56K/PYISnMpHhfBnb+4BcFkwsX+cfH05WeyW3yMbkKjqNCUGURFN7e3 - IU+ih8O62OxCD39aiTbUVDo6Sp5AEnrtp9WYcwmRpjmEXv3TylilFJ5zJlxLgsdB9PT5p9Cbii2Y - FrISJgo2d/fb0Gu/rKIAxTIqDKGMWSFBW7SJ0bL719f461JtN19Dz4Wyq6VKQOHHreD548KoChZe - Y5wCaiAh1Nxagx8XCX4aXsAiWvrBhvj3xA++BMsPwe6Dv/0Lze4X1OurMnn3+mCN6y8L2uBoI9Fq - +9HEOgjW69Vmue6ijdKUK22IoAW8tR+VOZ3XMVmUVJwdGigozx3yF4g1N669ykwKlzylp0lUvaFb - YczzHGvs4uL65d91ThsFgDWQJAq0dnl/MiASm4VZSC4Zzblxba9gj3fDFSKJVyFvivlhHfj3oTcU - dWZjXarzvFeN2q4gNC8zunwXavU9lKgwH5xNczVID7qWViJxXZReo9tCp0rR80iJ8Rz0DtcmGozJ - oQC8mDE1LHNiMl6Ww3Jx1dz/smauZPCHKZZhdtrmRVIOeaI7f6gynPGSNs13iVdgLBn0h8HKkB41 - AaWkIhjcUgoNzpjUuEHMxujoV5wZVwHdFuN0vwH90uxyFVP7fzxOV06FFrrHpv9Cz6j5Cs31wDmi - pxURlkoyPA3jQCuTScVfaQ2vd/If/viy/R1Deg003mVsSuD7/nD51FCHzmDpR59K1BztuJ9D1KFN - Em4tweBPYRNfkUAwm6AUE48rsOhiUNOIVHam4ynNEJ9BGXoiDV1wquAERdnN6FjKHKhYRCnNtaUq - PaDjBOgFYVR1M8rIA4goPmTltwLh9VejibmI1n6w3O1sIxXDFrSOgt0uCL32o71luCmpqdGfXFOs - lv676zIlV00yCylMFgV4gybCCfYMVCHhWPojcC1tz20HMrE9qqZ2T58vY/oivViZybwOt7vz8ILu - gVQqjzJjSv3B86jG7q7vYkW5sBenrfg7bLnYAs626T8XgNWaPOdyL70j+n9Xiv1HEEeupLCAR01F - EssT0oN+/+a8SvBvFbTJxzaCYI7dQ0XrFdutgzRhbMVW6Xa72m5S2AT+isEOYoZpmV3aNiwFJcW+ - 9Ju0pd38bjQZ0NxkGAtkrOIg5IsIvYGsASUQc3PRN5+tqlJYEljf+yq3nG+Aeqvpp5MlsJzmF+hA - 1jXYs5L5ANEJ2sRoXWF/xvkqDhfMSDru9zIlVksFs8T8kz1xquhCJZOK1V38cvpF1oCOIApJdHKY - uWy9vp0E48vWvi1IxrEy1XnENfpJXSMAN2ojbW8oUm5UFOU7aXyP73doXzFdQx0/bGpE+xpZ+ncP - wfBt0hSoxopSMuOmpFV+wFtbS3r7BsRIS+xoENGSox1TeeOlN3XzH3seLK95rqu44Aar8TmV6vlC - 1ebiMHmj/XfisL4Wh+mz9gfwupe0F6OZjDl10+wq1kzxcpaGD/T9HKsfAaRE2icTgkyX2AA6Ov8b - JJqljBOLJr85x9IDgkzA8YJIuK77jlMHzS6ya9kzM2nuhYpTZGrbeFPk5/b/CPRrpmv1+oYhZFQI - mO6KOT9aSpMCzJERe6x8IU02J1oMQ1wp3TyREjD4SO+I9Vjlzs3gfeU+foyZ/AXzTjicbABwPiu3 - GfYxiJWK3N61YcWY4/mEGZnx3XpeVgZcpdESC8IFkvWq/lmTqWaqPNupEnpzoDHdHTg6ZsVDxjsL - +v5eNUf+3l49kTYZUiiC18vWHaDpqRxHbNQ8opu/AQAA//8DAIxFnn3dEwAA - headers: - cache-control: ['max-age=0, private, must-revalidate'] - content-encoding: [gzip] - content-type: [application/xml; charset=utf-8] - etag: ['"09a8be3f241f4f80c11e1ffbdc4b013e"'] - strict-transport-security: [max-age=31536000, max-age=31536000; includeSubDomains] - transfer-encoding: [chunked] - vary: [Accept-Encoding] - status: {code: 200, message: OK} -- request: - body: !!python/unicode 'bkhpqm20.9111443524salefalse2' - headers: {} - method: POST - uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions - response: - body: - string: !!binary | - H4sIAIjak1UAA9xXzW7jNhC+5ykC3xlZtpM4gaJgi6JAC7SH7qZAewkoamwxlkgtSTl2nn6HoiRL - FpXkUqDoTZr5OJz/GUaPhyK/3IPSXIqHWXg1n12CYDLlYvswe/r2C1nPHuOLyCgqNGUGUfHF5WXE - 05itX5d36yjAT0vRhppKx7QymVT8DdIoaEiWa44lxJrmEAX1p6WxSim860i4lgSvhPjp689RMCZb - MC1kJUy8mF/dhVHQ/FlGAYplVBhCGbNEgvpok9ztVrdvb8nLQt1cv0SBD2VPS5WCwp9LwfOHmVEV - zAKnnAJqICXUXFqFH2Yp/hpewAx1CK/J/JbMw2/h4j5c34fX/6Da3YH6fFWmnz9/g+dPBxrnaCNR - a/vj/B2Gq9XyerFqPY7UDVfaEEELONcfmTmd5jFZlFQcPRwoKM899FdINDc+WWUmhY++oYeRV4O+ - WVHC8xzz7GTi6vXfNU4bBYA5kKYKtPZZfzAgUhuFSUguGc258YlXsMX68LlIYinkLpnvVuH8Ngr6 - pFZtzEt1nLbKse0JQvMyo4tPoZYfoUSF8eBsHKteeNC0TSVSX6F0HN0kOlWKHgdM9Gevf/iEaDAm - hwKwMBNqWObFZLws++niy7n/Zc68E8H/TLL0o9M0L7LhkKe6tYcqwxkvqWu+CyyBIaXXH3onI7rX - BJSSiqBzSyk0eH1S43o+G6Lj33FmvAtoRQzDfQb61Ul5F1Pbv9+PT46JFrrFpv9Kj8h5AVceOEf0 - OCOiUkmGt6Ef2hFLa3gtafHbn3//hEPkXdBQylCVcD6f94+PFfXwDKZ+/KVEzt6O+ylE7do05VYT - dP4YNrJ1LzmzAdpg4PEEJl0CauyRys50vMUN8QmUoQfi1gUvCw5QlO2MTqTMgYpZvKG5tqtKB2h3 - ArSCMKraGWXkDkSc7LLye4Hw+s9xEi7i1TxcrNe2kYp+C1rF4XqNS0zz01QZCiX1avQX1xSzpftv - u0zJlQtmIYXJ4hAraEQcYY9AFS4ci/kAXFObe5uBTGyPqte7p6+nMX2inrTMZF672995eEG3QCqV - x5kxpb4PAqqxu+urRFEubOE0GX+FLRdbwNE2/ecCMFvT51xuZbBH+69KsX0EsedKCgt40FSkiTzg - etDJd/dVgn+voAk+thEEc+weKl4t2XoVblLGlmy5ublZ3lxv4DqcLxmsIWEYlsmjTcNSUFLsS39I - m9ru23EyoLnJ0Be4sYqdkK8iCno0B0oh4ebEd78Nq1KYEpjf2yq3O18Pdc7pppNdYDnNT9AerW2w - RyXzHqIlNIHRusL+jPNV7E6YAXXY7+WGWC4VzC7mX+yNY0brKplWrO7ip9tPNAfagygk0eluotg6 - fjMJhsXWvC9IxjEz1XGwa3STukYACmo8bSsUV25kFOUn1/AO30l492FTI6beJi5BNWaUkhk3Ja3y - HVZtTen06y1GWmJHg5iWHPUY052VwbmZHaVxjeuNOfUvWlWimeLl5CLW43edrF4DSYmDX6YEdx1i - neip/TMkqqWMF4sqn91jBwTBWeDZIVOu68zz8sBJkW3RTnSlqTcK9pGxbkOhuKHZFynaNZG3Hd/N - CHxlChhLxZjv7VDbAEyNI3utfCUumiMuuiGplHZLcgoGn2ntajVk+WPT27D91w8xo0f4J+FwsA7A - Dq38atjnAGYqbnc+gRVjngUaIzJhu7W8rAz4UqMZLYQLXNeq+rMep66vPNu+EgVToOHC0zN0uBf1 - d55J0Mey6i3pI1ndKmUyHKIEy8vmHaDqGzn02KB5xBc/AAAA//8DAIXvkqvjEQAA - headers: - cache-control: ['max-age=0, private, must-revalidate'] - content-encoding: [gzip] - content-type: [application/xml; charset=utf-8] - etag: ['"83934ea4071831ab16f72a0f993aa473"'] - strict-transport-security: [max-age=31536000, max-age=31536000; includeSubDomains] - transfer-encoding: [chunked] - vary: [Accept-Encoding] - status: {code: 201, message: Created} -- request: - body: 20.92 - headers: {} - method: PUT - uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions/c8w398/submit_for_settlement - response: - body: - string: !!binary | - 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 - AwAhVJCGcRUAAA== - headers: - cache-control: [no-cache] - content-encoding: [gzip] - content-type: [application/xml; charset=utf-8] - strict-transport-security: [max-age=31536000, max-age=31536000; includeSubDomains] - transfer-encoding: [chunked] - vary: [Accept-Encoding] - status: {code: 422, message: Unprocessable Entity} -- request: - body: null - headers: {} - method: PUT - uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions/c8w398/void - response: - body: - string: !!binary | - H4sIAIvak1UAA9xYTW/jNhC951cYvjOybCdxAkXBFkWBFmgP3U2B9hJQ1NhiLJFaknLs/fU7FCVZ - iqgkQFFg0Zs180jOF2ceHT0ci3x2AKW5FPfz8HIxn4FgMuVidz9//PIL2cwf4ovIKCo0ZQZR8cVs - FvE0ZpuX1e0mCvCnlWhDTaXjg+QppFHQfFqNOZUQa5pDFNQ/rYxVSuE5J8K1JHgcxI+ff46CsdiC - aSErYeLl4vI2jILmyyoKUCyjwhDKmBUStEWb5Ha/vvn2LXlequur5yjwoexqqVJQ+DETPL+fG1XB - PHDGKaAGUkLNzBp8P0/x0/AC5mhDeEUWN2QRfgmXd+HmLrz6B83uFtTrqzL9+PoNrj8vaIKjjUSr - 7YeLdRiu16ur5bqNNkq3XGlDBC3gtf2ozOm0jsmipOLk0UBBee6Rv0CiufHtVWZS+ORbehxFNei7 - FSU8z7HGzi6uX/5b57RRAFgDaapAa5/3RwMitVmYhOSS0Zwb3/YKdng3fCGSeBVyV8y363BxEwV9 - UWs21qU6TXvl1HYFoXmZ0eWHUKv3UKLCfHA2zlUvPejathKp76J0Gt0UOlWKngZKjGevd/g20WBM - DgXgxUyoYZkXk/Gy7JeLr+b+lzXzRgZ/mGLpZ6dpXmTLIU916w9VhjNeUtd8l3gFhpJef+itjOhB - E1BKKoLBLaXQ4I1JjevFbIiOf8eZ8Sag3WKY7legX90ub2Jq/w+H8cqx0EJ32PRf6Ak1z+CuB84R - Pa6IqFSS4WkYB1qZTCr+jdbweqflb3/+/RMOkTdBw12GpoSLxaK/fGyoR2ew9ONPJWoOdtxPIerQ - pim3lmDwx7CRr0ggmE3QFhOPK7DoElDjiFR2puMpbohPoAw9EkcXvCo4QlG2MzqRMgcq5vGW5tpS - lQ7QcgL0gjCq2hll5B5EnOyz8muB8PrLaRIu4vUiXG42tpGKfgtax+FmgySm+WhuGW5Kamr0F9cU - q6X7brtMyZVLZiGFyeIQb9BIOMKegCokHMvFAFxLm3ObgUxsj6qp3ePn85g+S89WZjKvw+3vPLyg - OyCVyuPMmFLfBQHV2N31ZaIoF/biNBV/iS0XW8DJNv2nArBa06dc7mRwQP8vS7F7AHHgSgoLuNdU - pIk8Ij3o9nfnVYJ/raBJPrYRBHPsHiper9hmHW5TxlZstb2+Xl1fbeEqXKwYbCBhmJbJpU3DUlBS - 7Et/SFva7rfTZEBzk2EskLGKvZAvIgp6MgdKIeHmrHefjapSWBJY37sqt5yvh3qt6aaTJbCc5mdo - T9Y22JOSeQ/RCprEaF1hf8b5KvZnzEA67PdyS6yWCmaJ+Sd74ljRhkqmFau7+Pn0s8yBDiAKSXS6 - n7hsnb6ZBMPL1rwtSMaxMtVpwDW6SV0jADdqIm1vKFJuVBTlB2j4NXbQDt/t0Lxi2oY6fNjUiKm3 - iStQjRWlZMZNSat8j7e2lnT29YiRltjRIKYlRzvGcudlMHbz33u+ecvz8XPuB/C6kzQF4SZCTv30 - sko0U7ycpJ89fde/a/JLSqQ7MiXI8IgNoKfjvUKiWcp4sWjyq3PsWCQ4AT3MOeW6vm9eHbhdZNuq - Jnrx1MsMu+fYtuGmyEvtOxz9mritnd5NRnxbCxjvijk/2FG+BZgawvZY+UJcNkdaDENSKe2eBikY - fJy2hHKo8uem967wHz/EjP56+CAcjjYAOJeU3wz7CMJKRU7r27BizPNswIxM+G49LysDvtJoBirh - AklqVf+sSYTrpk+2m0bBFGhI83qODtlgn+lNgt7fq+aG7+3VEUiTIXUgeL1s3QGavpXDiA2aR3zx - HQAA//8DAIr+0QLVEgAA - headers: - cache-control: ['max-age=0, private, must-revalidate'] - content-encoding: [gzip] - content-type: [application/xml; charset=utf-8] - etag: ['"4cf34ff8d564ff5e10d08754517722f2"'] - strict-transport-security: [max-age=31536000, max-age=31536000; includeSubDomains] - transfer-encoding: [chunked] - vary: [Accept-Encoding] - status: {code: 200, message: OK} -- request: - body: !!python/unicode '4' - headers: {} - method: POST - uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/customers - response: - body: - string: !!binary | - H4sIAIzak1UAA5SRzVKDMBSF930KJvtIYOpIO4HufIK6cXflXiAtCUwSLLy9BHHqiC5cnnPy3b/I - 06jb6J2sU53JWfIgWESm7FCZOmcv52eesVOxk+XgfKfJFrsokgqLTIi9yMRBxrMI3pyVDRjPZ305 - 1DesLngdJ91gbWX8PQ2vK2Wd5wY0RUa1OfN2IBYvUQt/JWWnezDTxicNqt24fdOZbY0Kxo13ozen - /C/9LIEn5OAjP/WUM5ylV5pYkYrkkYsnLpJzkh6T7JiKVxnfgYUfevwffwc++y8355WiFl1wwlZg - vSpVv95yL+MfTgDjDRl2QeV5CRbdOg1YC9O6KiBaco422Vet8PMfAAAA//8DANWk1gksAgAA - headers: - cache-control: ['max-age=0, private, must-revalidate'] - content-encoding: [gzip] - content-type: [application/xml; charset=utf-8] - etag: ['"b96a106eed80f95ce8ecfc1d407e2efd"'] - strict-transport-security: [max-age=31536000, max-age=31536000; includeSubDomains] - transfer-encoding: [chunked] - vary: [Accept-Encoding] - status: {code: 201, message: Created} -- request: - body: !!python/unicode '80040809fake-valid-nonce' - headers: {} - method: POST - uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/payment_methods - response: - body: - string: !!binary | - H4sIAI7ak1UAA6xVu3LbMBDs9RUa9hBJPWzaQ8GTJmWa2CnSeEDgSGEEAgwAyma+PgeKelimnGSS - Tre3uMdyAeUPr7Wa7sA6afQ6SmdJNAXNjZC6WkdPj59JFj3QSc4tCOkJZ1bQyXSaF1IppBAmhAXn - AoaoFPRnlcdSDDFvnTc1WIJIliTLJEvu8vgc3fNKaZ0nmtUw1VKtI29biOIhqdj1HDd1w3Q3knHe - AvjDfCMEePWgBYgPKMpwpqQfK2+hQsFGEo1xnimCCgK9W6bJbR6fQ4exW+1t10OEqWbD5qPLXbIW - v2PpFnWV/APaNSEtMB/E8FPfNbCOBIZe1hDReZKuSHJLkvQxnd+n2f08/Y4f8XhgqNA24u8qnA70 - jopHLIU203SZpPMsC3ndY8GDJLSg36RjOMkxPmQ3Rgm019iqwTEoEZdM0Se91eZFY4UTNjmTypRE - OtcyzYE+ff0UeO8Tk38X78+uyYkVbOnRfTjUGeuIBq6AQvrTgvtwnyhZqw5zFsYoYDqiQaBA65N7 - YmtRcII+b1WY9azYZWbS36ZG2r4/qY32G5rO8/gdeMHsgFlUaJ68ofbokQnictaSKQfDiaH7Bpjy - G/z0cBrzDAsUWbMKSGsV3XjfuPs4Zs6Bd7PCMqnDY1HhMi+sm6Eb4oZ1NWj/XIPfGPGsTGXiHbpt - 1ujqAfROWqMDYe2YFoV5xTfvWL/vhvYIXi6Y3p5GeoNODk/bkqZZlubxEAQc21ujzhx6APqkhYah - J74YxIffAXdt4biVTRDRDaIxa1k3ON+bLWjKFytf2TzeRwFvtfzR9k9H0ZsN15KlBEuXC54t01Jw - vuCL8uZmcbMqYZUmCw4ZFByv5NWjk//wIOxA14Y4sb1igGN+YFtsvb8C77bvb9zp/+sXAAAA//8D - AElpROD1BgAA - headers: - cache-control: ['max-age=0, private, must-revalidate'] - content-encoding: [gzip] - content-type: [application/xml; charset=utf-8] - etag: ['"d044f50bbf2604e357a13f4f5463974d"'] - strict-transport-security: [max-age=31536000, max-age=31536000; includeSubDomains] - transfer-encoding: [chunked] - vary: [Accept-Encoding] - status: {code: 201, message: Created} -- request: - body: !!python/unicode 'c35tgr2062.11salefalse4' - headers: {} - method: POST - uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions - response: - body: - string: !!binary | - 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 - JRUAAA== - headers: - cache-control: [no-cache] - content-encoding: [gzip] - content-type: [application/xml; charset=utf-8] - strict-transport-security: [max-age=31536000, max-age=31536000; includeSubDomains] - transfer-encoding: [chunked] - vary: [Accept-Encoding] - status: {code: 422, message: Unprocessable Entity} -- request: - body: !!python/unicode '4' - headers: {} - method: POST - uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/customers - response: - body: - string: !!binary | - H4sIAJHak1UAA5SRzVKDMBSF930KJvsItFJpJ9CdT1A37q65F0hLApOktry9BHHqiC5cnnPy3b+I - w0230TtZpzpTsPQhYREZ2aEydcFejs88Z4dyJeTF+U6TLVdRJBSW2Waz22zzrYhHEbwxkw0Yz0d9 - 2tVXrE54vg26wdqK+HsaXlfKOs8NaIqMagvm7YVYPEUt/JXITvdghoVPGlS7cPumM8saFdwW3pXe - nPK/9LMEnpCDj/zQU8FwlF5pYuU6STOePPEkPabrfZrv19mriO/AxF96/B9/Bz77TzfnlaIWXXDC - VmC9kqqfb/ko4h9OAOMFGXZB5bkEi26eBqyFYV4VEC05R4vsq1b4+Q8AAAD//wMAog450ywCAAA= - headers: - cache-control: ['max-age=0, private, must-revalidate'] - content-encoding: [gzip] - content-type: [application/xml; charset=utf-8] - etag: ['"7202dfde7d867952fcb266a898f3cb5f"'] - strict-transport-security: [max-age=31536000, max-age=31536000; includeSubDomains] - transfer-encoding: [chunked] - vary: [Accept-Encoding] - status: {code: 201, message: Created} -- request: - body: !!python/unicode '53393686fake-valid-nonce' - headers: {} - method: POST - uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/payment_methods - response: - body: - string: !!binary | - H4sIAJLak1UAA6xVTXPaMBC98ysY34W/+HAyoEwvPfbSpIdeMrK0Bg2y5EoyCf++K2MwIZC0097Y - t0/a3eenZfnwWqvxDqyTRq+idJJEY9DcCKnXq+jp8Sspogc6WnILQnrCmRV0NB4vS6kUUggTwoJz - AUNUCuqzZSxFH/PWeVODJYjM8vwunxfzZXyOHniVtM4TzWoYa6lWkbctRHGfVOx2jpu6YXp/JeO8 - BfDH/q4Q4NWDFiA+oCjDmZL+2vUW1ijYlURjnGeKoIJA76ZpsljG59Cx7VZ7u+8gwlSzYdnV4S5Z - +Wcs3aKukn9AuyWkBeaDGH7s9w2sIoGhlzVENEvSGUkWJEkf0+w+Le6z+U/8iKcD/Q1tI/7uhuFA - 56j4iqXQZppOkzQripDXHRY8SEIJ+kM6hp2c4mN2Y5RAe10bNTgGJeKSKfqkt9q8aLxhwEZnUpmK - SOdapjnQp+9fAu99YvTv4v3ZMxlYwZYe3YdNnbFOaOAKKKUfBjyEh0TFWnXsszRGAdMRDQIFWpc8 - EFuLghP0eatCr2eXXWZG3WtqpO3qk9pov6Ep7oF34AVzD8yiQlnyhtqhJyaIy14rphz0J/rqG2DK - b/DTw9DmGRYosmZrIK1VdON94+7jmDkH3k1Ky6QOy2KNw7yw/QTdEDdsX4P2zzX4jRHPyqxNvEO3 - TRq9fgC9k9boQFg5pkVpXnHnne7vqqE9gpdLprdDS2/Q0XG1TWlaFOky7oOAY3lr1JlDj0CXtNAw - 9MQ3g3j/O+CuLR23sgkiul40Zi3b9873ZguazhZiUeG3OUQBb7X81Xaro+zMhmPJSoKl05wX07QS - nOc8r+bzfD6rYJYmOYcCSo5P8ubR0X9YCDvQtSFObG8Y4JTv2RZLH57Au+m7Fzf8f/0GAAD//wMA - BxbVbvUGAAA= - headers: - cache-control: ['max-age=0, private, must-revalidate'] - content-encoding: [gzip] - content-type: [application/xml; charset=utf-8] - etag: ['"e8e563a691f93a21e560098b70f16804"'] - strict-transport-security: [max-age=31536000, max-age=31536000; includeSubDomains] - transfer-encoding: [chunked] - vary: [Accept-Encoding] - status: {code: 201, message: Created} -- request: - body: !!python/unicode '53393686fake-valid-nonce' - headers: {} - method: POST - uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/payment_methods - response: - body: - string: !!binary | - H4sIAJPak1UAA6xVwXKbMBC98xUe7jJgbIdkMJleeuylSQ+9ZIS0YI2FRCXhxH/fFcY2SXDSTnvz - vve02l2e1vn9SyNnezBWaLUJk3kczkAxzYWqN+Hjw1eShfdFkDMDXDjCqOFFMJvlpZASJYRybsBa - jyEqeLFyeST4ELPOOt2AIZ5I09t0na3zaIwedZUw1hFFG5gpITehMx2E0UBKep1jummpOkww1hkA - d6pvQgAvDhQH/oFEakalcFPpDdQ4sAmi1dZRSXCCUNwuk/gmj8bQqexOOXPoIUJlu6WLyebeqtLP - VKrDuQr2gezaIA1Q54fhZu7QwibkGDrRQFgs4mRF4hsSJw/J4i7J7hY3P/Ejng8MGbqW/12Gy4He - UdGEpdBmqljGySLLPK96zHuQ+CuKH8JSrOQcn9itlhztNdWqdwyOiAkqi0e1U/pZYYYLFoxGpSsi - rO2oYlA8fv/ide+J4N+H92fP5KLytnToPixqpDqjXsuhFO7S4DE8EhXt5KnOUmsJVIVFRaUFr+vZ - o7IzOHGCRu+kL3aU7S0T9M+pFaYvgDRauW2RLPLoHfhGeQBqcESL+JW0R89K4FeKHdheuQUq3Ra/ - PVzKHGFeIhpaA+mMLLbOtfYuiqi14Oy8NFQovy1qbOaZHuZoh6ilhwaUe2rAbTV/krrW0R7tNm9V - fQ9qL4xWXrCxVPFSv+DSO+fvb0N/eDOXVO0uJb1Cg9NuWxZJliV5NAQex+uNliOLnoCeNNBSNMU3 - jfjw2+O2Ky0zovVDtMPQqDH0MFjf6R0oXEq72xrtdYw83inxq+t3R9m7DdsSlQBTLFOWLZOKM5ay - tFqv0/WqglUSpwwyKBm+yatHg/+wEfagGk0s310xwJkf1AavPr6Bd933T+7yB/YbAAD//wMAXfyn - EPYGAAA= - headers: - cache-control: ['max-age=0, private, must-revalidate'] - content-encoding: [gzip] - content-type: [application/xml; charset=utf-8] - etag: ['"39ce8334ff7259d6db321318e946d9ff"'] - strict-transport-security: [max-age=31536000, max-age=31536000; includeSubDomains] - transfer-encoding: [chunked] - vary: [Accept-Encoding] - status: {code: 201, message: Created} -- request: - body: !!python/unicode '94k9g6103.3salefalse4' - headers: {} - method: POST - uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions - response: - body: - string: !!binary | - H4sIAJXak1UAA9xXTW/jNhC9768IfGck2Y7XCRQFCxSL9tBedlMUvSwoamxxLZEqSTl2fn2HoiRL - FpVNDwWK3qSZR3K+OPMYP53K4uYISnMpHhfRbbi4AcFkxsX+cfH89TPZLp6SD7FRVGjKDKKSDzc3 - Mc+S9Wmf7rM4wE8r0YaaWie0NrlU/BVQ04qs1pwrSDQtIA6aTytjtVJ41plwLQkeCcnzl5/iYCq2 - YFrKWpgkCle3qzAO2l+rKUGxnApDKGNWSNAgbdL7w/rj62v6fak2d9/jwIeyq6XKQOHPjeDF48Ko - GhaBs04BNZARam6sxY+LDH8NL2GRLMPojoQfSRh9jZYP0fZhef8n2t0vaNbXVfbP1l8WtNHRRqLV - 9scF/G61ul9ttpsu5CjdcaUNEbSEa/tRWdB5HZNlRcXZo4GS8sIjf4FUc+Pbq8ql8Ml39DSJajB0 - K055UWChDVw0/65z2igArIEsU6C1z/uTAZHZLMxCCslowY1vewV7vCC+EEm8C4Wr5vt1FH6Mg6Go - MxvrUp3nvXJqu4LQosrp8l2o1Y9QosZ8cDbN1SA96NquFpnvovQa3RY6VYqeR0qM56CB+DbRYEwB - JeDFTKlhuReT86oalouv5v6XNfNGBv8zxTLMTtu8yI5DkenOH6oMZ7yirvmu8QqMJYP+MFgZ06Mm - oJRUBINbSaHBG5MGN4jZGJ38ijPjTUC3xTjdV6Bf3C5vYhr/j8fpyqnQQvfY9F/oGTXfwV0PnCN6 - WhFxpSTD0zAO3YylDbzZabv5/Ef4M4b0LdB4l7EpURiGw+VTQz06g6WffKpQc7Tzfg7RhDbLuLUE - gz+FTXw9Ss5sgnaYeFyBRZeCmkaktjMdT3FDfAZl6Ik4uuBVwQnKqpvRqZQFULFIdrTQlqv0gI4T - oBeEUdXNKCMPILClH+73OJfdn9OkXCTrMFput7aRimELWifRdhvFQfvT3jLclDTc6HeuKVZL/991 - mYorl8xSCpMn0TIOJsIJ9gxUIeFYhiNwI23PbQcysT2q4XfPXy5j+iK9WJnLogm3v/Pwku6B1KpI - cmMq/RAEVGN317epolzYi9NW/C22XGwBZ9v0v5WA1Zp9K+ReBkf0/7YS+ycQR66ksIBHTUWWyhPS - g35/d14t+F81tMnHNoJgjt1DJesV266jXcbYiq12m81qc7eDOySQDLaQMkzL7NK2YSmoKPal36Qt - bfftNDnQwuQYC6Ss4iDki4iDgcyBMki5uejdb6uqFZYE1ve+LiznG6CuNf10sgSW0+ICHci6BntW - shggOkGbGK1r7M84X8XhghlJx/1e7ojVUsEsM/9kT5wqulDJrGZNF7+cfpE50BFEKYnODjOXrde3 - k2B82doHBsk5VqY6j7hGP6kbBOBGbaTtDUXKjYqyeicN7/H9Dm++bBrE7OPEVajGklIy56aidXHA - a9tIegMHzEhLbGmQ0IqjIVO5czO49rOXtLFxzbGgfqZVp5opXs0ysYG+b2UNDyQVTn6ZESQ7xEbR - c/mvkGiWMl4smnx1jp0QBIeBh0RmXDel59WB20V2t3amLc09UrCRTG0bb4oUzb5J0a+Zwu31bkjg - M1PAdFfM+dFOtR3A3Dyyx8oX4rI50WIY0lppx5IzMPhO67jVWOXPzYBi+48fYybP8HfC4WQDgC1a - +c2w7wGsVKR3vg1rxjwMGjMy47v1vKoN+EqjnS2EC+RrdfPZzFPXWL7ZxhIHc6Ax4xk4OiZGQ9Iz - C/rxXg1N+tFePZcyOU5RgtfL1h2g6Ts5jtioeSQf/gYAAP//AwC4O19p5REAAA== - headers: - cache-control: ['max-age=0, private, must-revalidate'] - content-encoding: [gzip] - content-type: [application/xml; charset=utf-8] - etag: ['"a9a15e040fcff16f05d20fff7ba91511"'] - strict-transport-security: [max-age=31536000, max-age=31536000; includeSubDomains] - transfer-encoding: [chunked] - vary: [Accept-Encoding] - status: {code: 201, message: Created} -- request: - body: null - headers: {} - method: PUT - uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions/4xgbgd/void - response: - body: - string: !!binary | - H4sIAJbak1UAA9xYTW/jNhC951cEvjOSbMdxAkWLBYpFe2gvu1kUvSwoamxxLZEqSTl2fn2HoiRL - EZUNUBRY9GbNPJLzxZlHxx9OZXF9BKW5FI+L6CZcXINgMuNi/7h4+vKJbBcfkqvYKCo0ZQZRydX1 - dcyzZH3ap/ssDvCnlWhDTa2To+QZoLT9tBpzriDRtIA4aH5aGauVwnPOhGtJ8DhInj7/EgdTsQXT - UtbCJFG4ulmFcdB+Wk0JiuVUGEIZs0KCxmiT3h/Wdy8v6fel2tx+jwMfyq6WKgOFH9eCF48Lo2pY - BM46BdRARqi5thY/LjL8NLyERbIMo1sS3pEw+hItH6Ltw/L+L7S7X9Csr6vs3etXIa6/LGijo41E - q+2HC/btanW/2mw3XbhRuuNKGyJoCa/tR2VB53VMlhUVZ48GSsoLj/wZUs2Nb68ql8In39HTJKrB - 0K045UWBRTZw0fy3zmmjALAGskyB1j7vTwZEZrMwCykkowU3vu0V7PFy+EIk8S4Urprv11F4FwdD - UWc21qU6z3vl1HYFoUWV0+W7UKsfoUSN+eBsmqtBetC1XS0y30XpNbotdKoUPY+UGM9B8/BtosGY - AkrAi5lSw3IvJudVNSwXX839L2vmjQz+NMUyzE7bvMiOQ5Hpzh+qDGe8oq75rvEKjCWD/jBYGdOj - JqCUVASDW0mhwRuTBjeI2Rid/I4z401At8U43a9Av7ld3sQ0/h+P05VToYXusek/0zNqvoO7HjhH - 9LQi4kpJhqdhHGhtcqn4C23gzU7bzac/w18xpG+BxruMTYnCMBwunxrq0Rks/eRjhZqjnfdziCa0 - WcatJRj8KWziKzIIZhO0w8TjCiy6FNQ0IrWd6XiKG+IzKENPxNEFrwpOUFbdjE6lLICKRbKjhbZc - pQd0nAC9IIyqbkYZeQCBLf1wv8e57L6cJuUiWYfRcru1jVQMW9A6ibbbKA7aj/aW4aak4UZfuaZY - Lf1312UqrlwySylMnkTLOJgIJ9gzUIWEYxmOwI20PbcdyMT2qIbbPX2+jOmL9GJlLosm3P7Ow0u6 - B1KrIsmNqfRDEFCN3V3fpIpyYS9OW/E32HKxBZxt0/9WAlZr9q2Qexkc0f+bSuw/gDhyJYUFPGoq - slSekB70+7vzasH/rqFNPrYRBHPsHipZr9h2He0yxlZstdtsVpvbHdwigWSwhZRhWmaXtg1LQUWx - L/0hbWm7306TAy1MjrFAyioOQj6LOBjIHCiDlJuL3n22qlphSWB97+vCcr4B6rWmn06WwHJaXKAD - Wddgz0oWA0QnaBOjdY39GeerOFwwI+m438sdsVoqmGXmH+2JU0UXKpnVrOnil9MvMgc6gigl0dlh - 5rL1+nYSjC9b+7ggOcfKVOcR1+gndYMA3KiNtL2hSLlRUVbvpPE9vt+hfcZ0DXX8smkQs48TV6Ea - S0rJnJuK1sUBr20j6Q0cMCMtsaVBQiuOhkzlzs1g6ue/dr15gcy6Pn3Q/Qxu95K2JNxMKKifYNap - ZopXswR0oO87eEN/SYWER2YEOR6xEfT0vFdINEsZLxZNfnWOHYwEZ6CHO2dcNzfOqwO3i+ya1Uw3 - nnubYf+c2jbeFJmpfYqjXzP3tde72YivawHTXTHnRzvMdwBzY9geK5+Jy+ZEi2FIa6Xd4yADg8/T - jlKOVf7cDF4W/uPHmMm/D++Ew8kGACeT8pthn0FYqchqfRvWjHkeDpiRGd+t51VtwFca7UglXCBN - rZufDY1w/fSb7adxMAcaE72Bo2M+OOR6s6Af79Wwwx/t1VNIkyN5IHi9bN0Bmr6T44iNmkdy9Q8A - AAD//wMAQKdJndgSAAA= - headers: - cache-control: ['max-age=0, private, must-revalidate'] - content-encoding: [gzip] - content-type: [application/xml; charset=utf-8] - etag: ['"2f0a4c2dce69c11b948ecf8d9a0ef0d8"'] - strict-transport-security: [max-age=31536000, max-age=31536000; includeSubDomains] - transfer-encoding: [chunked] - vary: [Accept-Encoding] - status: {code: 200, message: OK} -- request: - body: !!python/unicode 'bkhpqm10.011443524salefalse2' - headers: {} - method: POST - uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions - response: - body: - string: !!binary | - H4sIAJjak1UAA9xXzW7jNhC+5ykC3xlJtpN4A0XBAkXRHloU2M0W6CWgqLHFWCK1JOXY+/QdipIs - RVSSHgoUvUkzH4fzP8P44VgWlwdQmktxv4iuwsUlCCYzLnb3i8evP5PN4iG5iI2iQlNmEJVcXF7G - PEs2RmT5cxzgp6VoQ02tE1qbXCr+A7I4aEmWa04VJJoWEAfNp6WxWim860S4lgSvhOTxy09xMCVb - MC1lLUwShVdhGAftn2WUoFhOhSGUMUskqI826af9+vbHj/R5qW6uUUkfyp6WKgOFP5eCF/cLo2pY - BE45BdRARqi5tArfLzL8NbyERbIMo2sS3pIw+hot76LN3Wr5F6rdH2jO11X2z86fD7TO0Uai1vbH - +TuK1uvV9XLdeRypW660IYKW8Fp/ZBZ0nsdkWVFx8nCgpLzw0F8g1dz4ZFW5FD76lh4nXg2GZsUp - LwrMs7OJ65d/1zhtFADmQJYp0Npn/dGAyGwUZiGFZLTgxidewQ7rw+ciiaVQuGT+tI7C2zgYkjq1 - MS/Vad4qx7YnCC2qnC4/hFq9hxI1xoOzaawG4UHTtrXIfIXSc3Sb6FQpehox0Z+D/uETosGYAkrA - wkypYbkXk/OqGqaLL+f+lznzRgT/M8kyjE7bvMiWQ5Hpzh6qDGe8oq75LrEExpRBfxicjOlBE1BK - KoLOraTQ4PVJgxv4bIxOfsOZ8SagEzEO9yvQr07Km5jG/sNhenJKtNAdNv0XekLOM7jywDmipxkR - V0oyvA390I1Y2sAbSas/wj9/uUGXvgUaSxmrEoV2rM5xZ04aTP3kc4Wcgx33c4jGtVnGrSbo/Cls - YutBcmYDtMXA4wlMuhTU1CO1nel4ixviMyhDj8StC14WHKGsuhmdSlkAFYtkSwttV5Ue0O0EaAVh - VHUzysg9iCTd59X3EuHNn+OkXCTrMFpuNraRimELWifRZhPFQfvTVhkKJc1q9I1ritnS/3ddpuLK - BbOUwuRJhBU0IU6wJ6AKF45lOAI31PbediAT26Oa9e7xy3lMn6lnLXNZNO72dx5e0h2QWhVJbkyl - 74KAauzu+ipVlAtbOG3GX2HLxRZwsk3/qQTM1uypkDsZHND+q0rsHkAcuJLCAu41FVkqj7ge9PLd - fbXg32tog49tBMEcu4dK1iu2WUfbjLEVW21vblY311u4jsIVgw2kDMMye7RtWAoqin3pd2lT2307 - Tg60MDn6AjdWsRfyRcTBgOZAGaTcnPnut2XVClMC83tXF3bnG6Bec/rpZBdYToszdEDrGuxJyWKA - 6AhtYLSusT/jfBX7M2ZEHfd7uSWWSwWzi/lne+OU0blKZjVruvj59jPNgQ4gSkl0tp8ptp7fToJx - sbXvC5JzzEx1Gu0a/aRuEICCWk/bCsWVGxll9cE1vMf3Et582DSIubeJS1CNGaVkzk1F62KPVdtQ - ev0Gi5GW2NEgoRVHPaZ0Z2Xw2sye0rrG9caC+hetOtVM8Wp2ERvw+07WrIGkwsEvM4K7DrFO9NT+ - KySqpYwXiyq/uscOCIKzwLNDZlw3meflgZMiu6Kd6UpzbxTsI1PdxkJxQ7MvUrRrJm97vpsR+MoU - MJWKMT/YobYFmBtH9lr5Qlw0J1x0Q1or7ZbkDAw+07rVaszyx2awYfuvH2Mmj/APwuFoHYAdWvnV - sM8BzFTc7nwCa8Y8CzRGZMZ2a3lVG/ClRjtaCBe4rtXNZzNOXV95sn0lDuZA44VnYOh4LxruPLOg - 92U1W9J7svpVyuQ4RAmWl807QNW3cuyxUfNILv4GAAD//wMA/8VwduMRAAA= - headers: - cache-control: ['max-age=0, private, must-revalidate'] - content-encoding: [gzip] - content-type: [application/xml; charset=utf-8] - etag: ['"4642cd8f767f1e2b62ed787208d9fbc1"'] - strict-transport-security: [max-age=31536000, max-age=31536000; includeSubDomains] - transfer-encoding: [chunked] - vary: [Accept-Encoding] - status: {code: 201, message: Created} -- request: - body: !!python/unicode 'authorized' - headers: {} - method: POST - uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions/advanced_search_ids - response: - body: - string: !!binary | - H4sIAJnak1UAA7IpTk0sSs7QLUotLs0pKbbjUlCwKUhMT9UtzqxKVSipLEi1VcrMK0lNTy1SsjM1 - sNGHS4KVZqYUQxUlFhUlViqBBEHAJrMkNdfOpCI9KT3FRh/MQZGxKMlLychCyABZKUDLbfTRnQMA - AAD//wMAJ2EIFKAAAAA= - headers: - cache-control: ['max-age=0, private, must-revalidate'] - content-encoding: [gzip] - content-type: [application/xml; charset=utf-8] - etag: ['"274ef038831f3de4e761a618f98e7150"'] - strict-transport-security: [max-age=31536000, max-age=31536000; includeSubDomains] - transfer-encoding: [chunked] - vary: [Accept-Encoding] - status: {code: 200, message: OK} -- request: - body: !!python/unicode 'authorized4xgbgd8tndhj' - headers: {} - method: POST - uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions/advanced_search - response: - body: - string: !!binary | - H4sIAJvak1UAA9xYTY/bNhC951csfOdasr0bJ/AqCFAU7aFFgWRToJeAosYWY4lUSMpr59d3SOrT - ona3hwJFb9bM43BmOJx59O7DuSxuTqA0l+JhEd9GixsQTGZcHB4Wj59/JtvFh+TNjinIuCGMqowY - RYWmzOAKfWMuFTwsmCwKcJJF8ubmZsdqpUAYUtEDEFGXKagGyYWBA6hFEu+WAZRb7b41/wHXa+6i - 3bJTOqiRhhaEGyh1YIOBFmMY+O3W8izZGpHl33ZL/Gkl2lBT64TWJpcKt8h2y0bk9kL7iaYFoGH7 - sw+UXQjXkmDaIHn89FMb2VBswbSUtTBJHN1GGEjzZRUlKJZTzARlzAoJ+qNN+u64efvjR/ptpe7v - 0MkQyq6WKgOFHzeCFw8Lo2pYLL1zCqiBjFDT5CbDT8NLWCSrKL4j0VsSxZ/j1ft4+369+gvd7ha4 - 9XWV/bP1/YImOdrI0h+qz3ccbzbru9WmzThK91xpQwQt4dp/VBZ0XsdkWVFxCWigpLwIyJ8g1VgM - AU2VSxGS7+l5ktXlMKxdyosC70of4ubp3w1OGwWANZBlCrQORX82IDJ7CrOQQjJacBMyr+CA9yOU - IqntZXLF/G4TR2/xKg5ErdtYl+oyH5VX2xWEFlVOV69CrV9CYfMAxdn0rAbHg6Hta5GFLkqnaZsI - VYpeRkoY9b2QEQ3GFFDahpZSw/IgJudVNSyXUM39L2vmmRP8zxTL8HSa5kX2HIpMt/FQZTjjFfXN - d2Wn0Ugy6A+DlTt60gSUkopgciscmxDMicMNcjZGJ7/hzHgW0JoYH/cV6Fdv5VmMi/90mq6cCi30 - gE3/iV5Q882TAPxF9bQidpWSDHfDPLQjljq4s7T+I/rzl3tM6XOgsZWxK3Fkx+qcdmalwdJPPlao - OdlxP4dwqc2QAqEnmPwpbBLrSXJmD2iPB48rGhI0yUhtZzru4of4DMrQM/F0IaiCM5RVO6NTKQug - yMP2tNCWqnSAlhO0RK4paiOPIJL0mFffS0uZ7JfXpFwkmyhebbe2kYphC9ok8XaLDKv5aG6ZY4eW - Gn3hmmK1dN9tl6m48odZSmHyJMYbNBFOsBegCgnHKhqBnbTZtxnIxPYoR+8eP/Vjupf2XuaycOkO - dx5eWo5ZqyLJjan0++WSauzu+jZVFOklXpym4m+x5WILuNim/7UErNbsayEPcnnC+G8rcfgA4sSV - FBbwoKnIUnlGetDZ9/vVgn+vWwaMbQTBHLuHSjZrtt3E+4yxNVvv7+/X93d7uIujNYMtpAyPZXZp - 07AUVBT70u/Slrb/7TU50MLkmAtkrOIo5JPYLQcyD8og5abX+89GVSssCazvQ11YzjdAXWu66WQJ - LKdFDx3I2gZ7UfiU6BGtoDkYrWvszzhfxbHHjKTjfi/3xGqpYJaYf7Q7ThVtqmRWM9fF+917mQed - QJSS6Ow4c9k6fTMJxpeteV+QnGNlqsuIa3ST2iEADTWZtjcUKTcqyuqVNLzDdxaefdg4xNzbxBeo - xopSMuemonVxxFvrJJ1/A2KkJXY0SGjF0Y+p3Ee5vA6zkzSp8b2xoGGiVaeaKV7NErGBvutkjgaS - Cge/zAhyHWKTGLj7V0h0S5kgFl2+2scOCNK/iYccMuPaVV5QB96KbC/tTFeae6NgH5n6NjaKDM2+ - SDGumbrt9H5G4CtTwNQqnvnJDrU9wNw4stvKJ+JPc6LFNKS10p4kZ2DwmdZSq7EqfDYDhh3efoyZ - PMJfCYezTQB2aBV2wz4HsFKR3YUM1owFCDSeyEzsNvKqNhAqjWa0EC6QrtXupxunvq98tX1lt5wD - jQnPINAxLxpynlnQy7YcS3rJVkelTI5DlOD1snUH6PpejjM2ah72c+4PqOTN3wAAAP//AwD22yw7 - wxIAAA== - headers: - cache-control: ['max-age=0, private, must-revalidate'] - content-encoding: [gzip] - content-type: [application/xml; charset=utf-8] - etag: ['"885a801ea3c1cab8e5cbdda81fc45053"'] - strict-transport-security: [max-age=31536000, max-age=31536000; includeSubDomains] - transfer-encoding: [chunked] - vary: [Accept-Encoding] - status: {code: 200, message: OK} -- request: - body: null - headers: {} - method: PUT - uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions/8tndhj/void - response: - body: - string: !!binary | - H4sIAJzak1UAA9xY3W/bNhB/z19h+J2RZDuOWygKCgzD9rBhQNsN2EtBkWeLsUSqJOXY/et31Jel - iEoDDAOKvVl3Px7v+46OH89FvjiBNkLJh2V0Gy4XIJniQh4elp8//Ux2y8fkJraaSkOZRVRys1jE - gic7K3n2FAf401GMpbYyyUkJDjwO2k/HsZcSEkNziIP6p6OxSmu850KEUQSvg+Tzx5/iYEp2YFqo - StokCm/DMA7aL8coQLOMSksoY45IUBdj03fHzf23b+nTSm/vUEEfyp1WmoPGj4UU+cPS6gqWQaOc - BmqBE2oXTuGHJcdPKwpYJqswuiPhPQmjT9HqfbR7v179jWr3B+rzVcnffn6L568HWucYq1Br99H4 - Ooo2m/XdatN5G6l7oY0lkhbwUn9k5nSex1RRUnnxcKCgIvfQnyE1wvpklZmSPvqenideDYZmxanI - c8yxq4mb5//WOGM1AOYA5xqM8Vl/tiC5i8IsJFeM5sL6xGs4YG34XKSwFPImmd9tovA+DoakTm3M - S32Zt6phuxOE5mVGV29Crb+HkhXGQ7BprAbhQdP2leS+Quk5pk10qjW9jJjoz0Hv8AkxYG0OBWBh - ptSyzIvJRFkO08WXc//LnHklgj9Msgyj0zYvsheQc9PZQ7UVTJS0ab4rLIExZdAfBidjejIEtFaa - oHNLJQ14fVLjBj4bo5PfcGa8CuhEjMP9AvRrI+VVTG3/6TQ9OSU66AGb/jO9IOcJmvLAOWKmGRGX - WjG8Df1AK5spLb7RGl5LWv8R/vXLFl36GmgsZaxKFLqxOsedOWkx9ZMPJXJObtzPIWrXci6cJuj8 - KWxiKy4QzAVoj4HHE5h0KeipRyo30/GWZojPoCw9k2Zd8LLgDEXZzehUqRyoXCZ7mhu3qvSAbidA - KwijuptRVh1BJukxK78WCK+/Gk4qZLIJo9Vu5xqpHLagTRLtdlEctB9tlaFQUq9GfwpDMVv6767L - lEI3wSyUtFkSYQVNiBPsBajGhWMVjsA1tb23HcjE9ah6tfv88Tqmr9SrlpnKa3f7O48o6AFIpfMk - s7Y074OAGuzu5jbVVEhXOG3G32LLxRZwcU3/SwGYrfxLrg4qOKH9t6U8PII8Ca2kAzwYKnmqzrge - 9PKb+yopvlbQBh/bCIIFdg+dbNZst4n2nLE1W++32/X2bg93UbhmsIOUYVhmj7YNS0NJsS/9rlxq - N78bTgY0txn6AjdWeZTqWcbBgNaAOKTCXvnNZ8uqNKYE5vehyt3ON0C95PTTyS2wguZX6IDWNdiL - VvkA0RHawBhTYX/G+SqPV8yIOu73ak8cl0rmFvMP7sYpo3OV4hWru/j19iutAZ1AFooYfpwptp7f - ToJxsbVvC5IJzEx9Ge0a/aSuEYCCWk+7CsWVGxlF+cY1vsf3EtpXTNdQxw+bGjH3NmkS1GBGaZUJ - W9IqP2LV1pRev8FiZBR2NEhoKVCPKb2xMpia+e8t375m+fQ59wNY3VPahGgmQk7962WVGqZFObt+ - Dvh9/66XX1LiuqM4wQ2POAd6Ot4LJKqlrReLKr+4x41FghPQszlzYep68/KgkaK6VjXTi+deZtg9 - p7qNheJe6t7haNdMtfb8ZjLi21rCVCrG/ORG+R5gbgi7a9UzaaI54aIb0kqb5mnAweLjtFsoxyx/ - bAbvCv/1Y8zkr4c3wuHsHIBzSfvVcI8gzFTcaX0CK8Y8zwaMyIztzvKysuBLjXagEiFxSa3qn/US - 0XTTL66bxsEcaLzmDQwdb4PDTW8W9H1Z9W74PVn9AmkzXB0IlpfLO0DV92rssVHzSG7+AQAA//8D - AH0z8TzVEgAA - headers: - cache-control: ['max-age=0, private, must-revalidate'] - content-encoding: [gzip] - content-type: [application/xml; charset=utf-8] - etag: ['"12313a8ebd959c719e331fe5e9bc8de9"'] - strict-transport-security: [max-age=31536000, max-age=31536000; includeSubDomains] - transfer-encoding: [chunked] - vary: [Accept-Encoding] - status: {code: 200, message: OK} -version: 1 diff --git a/tests/py/fixtures/TestsWithBillingHarness.yml b/tests/py/fixtures/TestsWithBillingHarness.yml new file mode 100644 index 0000000000..1708446ed0 --- /dev/null +++ b/tests/py/fixtures/TestsWithBillingHarness.yml @@ -0,0 +1,1277 @@ +interactions: +- request: + body: !!python/unicode bkhpqm20.9111443524salefalse2 + headers: {} + method: POST + uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions + response: + body: + string: !!binary | + H4sIACt7yFcAA9xYTW/jNhC951cEvjOSbCfrLBQtihYFCrSLArtbFL0sKGpsMZZIhaQcO7++Q1GS + JYtK0kOBojdr5nHIGc7Ho+NPx7K4PoDSXIqHRXQTLq5BMJlxsXtYfPv6M9ksPiVXsVFUaMoMopKr + 6+uYZ8mO6nJJn27jAD+sTBtqap3Q2uRS8RfI4qAVWa05VZBoWkAcND+tjNVK4W4nwrUkuCkk3778 + FAdTsQXTUtbCJMvw5j6Kg/bLKkpQLKfCEMqYFRI8jzbp/X794eUlfVyqu9vHOPChmlPXKfHorgUv + HhZG1bAI3C5UG1DvgkqVIdKjYAqogYxQc21j8LDI8NPwEhboVnRHwnsSRl+j+4/h8mO4+gsj0S9o + 1tdV9s/Wnxe08dZGogf2w11iFK3Xq9vlurtElG650oYIWsLl+VFZ0Hkdk2VFxcmjgZLywiN/hlRz + 47NV5VL45Ft6nEQ1GLoVp7woMHnPLq6f/13ntFEAmA9ZpkBrn/dHAyKztzALKSSjBTc+8wp2WHS+ + EEmsrsLVx/06Cj/EwVDUHRtzVJ3mvXJqu4LQosrp8l2o1VsoUeN9cDa9q8H1oGvbWmS+Quk1uk10 + qhQ9jZQYz0FT8hmpqDIcw6HBmAJKwGIdr/AZP3evt8wPzKbUsNyLyXlVDbPRl9L/y5R8JUH+M7k4 + vJ22N5IthyLTnT82gxivqBsXS6ywsWTQfgYrY3rQBJSSimBwKyk0eGPS4AYxG6OT33DKvQroTIyv + +wL0i7PyKqbx/3CYrpwKLXSHM+WZnlDzCK48cEzpaUbElZIMd8M4dGVFG3hj6cffP//56x2G9DXQ + 2Mr4KFEYhsPl04N6dAZTP/mhQs3BEpQ5RBPaLOP2JBj8KWzi60FyZi9oixePKzDpUlDTiNSWPuAu + jiPMoAw9EkdwvCo4Qll1FCCVsgAqFsmWFtqSqx7QUQ70gjCquhFo5B5Eku7z6qlEePPlNCkXyTqM + lpuN7dNi2ILWSbTZIO1qP9oqQ6OkIXN/cE0xW/rvrstUXLnLLKUweRJhBU2EE+wJqEI+swxH4Eba + 7tvOe2J7VENJv305s4Cz9HzKXBZNuP2dh5d0B6RWRZIbU+mPQUA1dnd9kyrKhS2cNuNvsOViCzjZ + pv+9BMzW7HshdzI4oP83ldh9AnHgSgoLeNBUZKk8Ivvo7bdtRUFFsXt8ljYB3W+nyYEWJscTIxMW + eyGfRRwMZA6UQcrNWe8+W1Wt8OIwC3d1YYnfAHWp6WeIZbQ4Js/QgaxrgycliwGiE7Th07rGLopT + UOzPmJF03JXlllgtFQwSu91U2sVJZjVrGu1567PMgWrBn2poKwnFGHmOrVgl6xXbrKNtxtiKrbZ3 + d6u72y3cRuGKwQZShjk+u9RZPoAoJdHZfqbSen07BsaV1j6HSM4xLdVpRDX6Md0gAA21F2jLE+k8 + KsrqnRS/x/cWXn2HNYi5p5QLqMYIKJlzU9G62GPJNpL+fANWpCW2M0hoxfEcU7nzMrh0s5e0oXGN + saB+llWnmilezbKwgb5vYw3FJBVOfZkRJDrEBtFT+BdIPJYyXiwe+WIfOx0IDgIPhcy4bnLaqwNn + RXZJNtOS5t4/2ESmZxsbRXpmH9Do10ze9no3IPA1K2BqFe/8YCfaFmBuFtlt5TNxtznRYhjSWmnH + kDMw+ATseNVY5b+bAb32bz/GTP4zeCccjjYA2J6V/xj2qYGZitTOZ7BmzMOe8UZmfLeeV7UBX2q0 + c4VwgVytds8VO0tdX/lu+0oczIHGbGfg6JgUDQnPLOhtWw1FestWz6NMjhOUYHnZvAM8+laOIzZq + HsnV3wAAAP//AwBh4NRclBIAAA== + headers: + cache-control: ['max-age=0, private, must-revalidate'] + content-encoding: [gzip] + content-type: [application/xml; charset=utf-8] + etag: [W/"2dc34c5897440990527670f9bb4258ec"] + strict-transport-security: [max-age=31536000; includeSubDomains] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 201, message: Created} +- request: + body: 10.0 + headers: {} + method: PUT + uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions/gasm2aq5/submit_for_settlement + response: + body: + string: !!binary | + H4sIACx7yFcAA9xY32/bNhB+718R+J2RZDupUygqhg0DBmzFgLbDsJeAok4Wa4lUScqx+9f3KEqy + FFFJgGHDsDfr7uORd7wfHx2/P1Xl1RGU5lLcr6LrcHUFgsmMi/396vOnn8lu9T55ExtFhabMICp5 + c3UV8yzZU12t6debOMAPK9OGmkYnukkrbgxkD7lUDxqMKaECYeKgA1isOdeQaFpCHLQ/rYw1SuHe + Z8K1JHgESD5//CkO5mILppVshEmi8DoM46D7sooKFCuoMIQyZoUET6dNenfYvv32Lf2yVrc3X+LA + h2p9aFLi0V0JXt6vjGpgFbhdqDagXgWVKkOkR8EUUAwToebKxuB+leGn4RWsknUY3ZLwjoTRp+ju + Xbh+F27+wkgMC9r1TZ29fv0W118WdPHWRqIH9sNdaRRtt5ub9ba/UpTmXGlDBK3g6flRWdJlHZNV + TcXZo4GK8tIjf4RUc+OzVRdS+OQ5Pc2iGozdilNelpjKFxe3j/+sc9ooAMyHLFOgtc/7kwGR2VtY + hJSS0ZIbn3kFeyxBX4gkVlfp6uNuG4Vv42As6o+NOarOy145tV1BaFkXdP0q1OYllGjwPjib39Xo + etC1vBGZr1AGje4SnSpFzxMlxnPUonxGaqoMx3BcGtKTFT7jtDGFVPzby+ZHZlNqWOHFFLyux9no + S+n/ZUo+kyD/mVwc307XG0nOocx074/NIMZr6sbFGitsKhm1n9HKmB41AaWkIhjcWgoN3pi0uFHM + pujkN5xyzwJ6E9PrfgL6xVl5FtP6fzzOV86FFrrHmfJIz6j5Aq48cEzpeUbEtZIMd8M49GVFW3hr + 6cffP/z56y2G9DnQ1Mr0KFFoicCSdmGlwdRPfqhRc4TMu7pFtKHNMm5PgsGfw2a+HiVn9oJyvHhc + gUmXgppHpLH0AXdxHGEBZeiJOILjVcEJqrqnAKmUJVCxSnJaakuuBkBPOdALwqjqR6CRBxBJeijq + rxXC2y+nSblItmG03u1snxbjFrRNot0uioPuo6syNEpaMvcH1xSzZfjuu0zNlbvMSgpTJBFW0Ew4 + w56BKuQz63ACbqXdvt28J7ZHtQT188cLC7hIL6csZNmG2995eEX3QBpVJoUxtX4XBFRjd9fXqaJc + 2MLpMv4aWy62gLNt+g8VYLZmD6Xcy+CI/l/XYv8exJErKSzgXlORpfKE7GOw37UVBTXF7vFB2gR0 + v52mAFqaAk+MTFgchHwUcTCSOVAGKTcXvfvsVI3Ci8Ms3DelJX4j1FPNMEMso8UxeYGOZH0bPCtZ + jhC9oAuf1g12UZyC4nDBTKTTrixzYrVUMEjsdnNpHyeZNaxttJetLzIHagT/2kBXSSjGyHNsxSrZ + bthuG+UZYxu2yW9vN7c3OdxE4YbBDlKGOb641Fk+gqgk0dlhodIGfTcGppXWPY5IwTEt1XlCNYYx + 3SIADXUXaMsT6TwqqvqVT4QBP1joHl0XJjN+h7WI7vG0Dq/vovFTygVUYwSULLipaVMesGRbyXC+ + ESvSEtsZJLTmeI653HkZzN38+55vn/P8Ne/RcRxmT8p/Jw6DpEsRNyBK6mebTaqZ4vUiGx3ph3be + Um1SI/uRGUHCR2xIPQ3wCRKPpYwXi0d+so+dkgQHoodKZ1y3te3VgbMi+2JbaM1L70BspvOzTY0i + TbV/JKBfC/U76N2gxFe9gLlVvPOjnew5wNJMttvKR+Juc6bFMKSN0u6lkIHBp3DPL6cq/92Mnhn+ + 7aeY2X8nr4TDyQYAx5TyH8M+uTBTkeL6DDaMeV4ReCMLvlvP68aALzW6+Uq4QM7auGeb5RSuvz7Y + /hoHS6Ap6xs5OiWHY+K3CHrZVksVX7I18ElTIJMgWF427wCPnstpxCbNI3nzHQAA//8DANVZWgSq + EwAA + headers: + cache-control: ['max-age=0, private, must-revalidate'] + content-encoding: [gzip] + content-type: [application/xml; charset=utf-8] + etag: [W/"fe05b6b44b808da852f780ad3cdfa8ef"] + strict-transport-security: [max-age=31536000; includeSubDomains] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: {} + method: PUT + uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions/gasm2aq5/void + response: + body: + string: !!binary | + H4sIAC17yFcAA9xY227jNhB9368I/M5I8iXrLBQFRYsCBdpFgd0tir4EFDW2GEuklqQce7++Q1GS + pYhKAhQFtn2zZg6HnOFcDh3fn8ri6ghKcynuFtF1uLgCwWTGxf5u8eXzz2S7uE/exUZRoSkziEre + XV3FPEv2VJdL+nUTB/hhZdpQU+vkKHkGWRy0n1ZjzhUkmhYQB81PK2O1UrjTmXAtCW4IyZdPP8XB + VGzBtJS1MEkUXodhHLRfVlGCYjkVhlDGrJDgWbRJbw/r99++pY9LdbN5jAMfqjlxnRKP7krw4m5h + VA2LwO1CtQH1JqhUGSI9CqaAGsgINVc2BneLDD8NL2GRLMPohoS3JIw+R7cfwuWHcPUXRqJf0Kyv + q+zt6ze4/rKgjbc2Ej2wH+4Co2i9Xm2W6+4CUbrjShsiaAnPz4/Kgs7rmCwrKs4eDZSUFx75E6Sa + G5+tKpfCJ9/R0ySqwdCtOOVFgYl7cXH99O86p40CwHzIMgVa+7w/GRCZvYVZSCEZLbjxmVewx4Lz + hUhidRWuPm7XUfg+Doai7tiYo+o875VT2xWEFlVOl29CrV5DiRrvg7PpXQ2uB13b1SLzFUqv0W2i + U6XoeaTEeA4aks9IRZXhGA4NxhRQAhbreIXPOK1NLhX/9rr5gdmUGpZ7MTmvqmE2+lL6f5mSLyTI + d5OLw9tpeyPZcSgy3fljM4jxirpxscQKG0sG7WewMqZHTUApqQgGt5JCgzcmDW4QszE6+Q2n3IuA + zsT4up+BfnFWXsQ0/h+P05VToYXucaY80TNqHsGVB44pPc2IuFKS4W4Yh66saANvLP34+8c/f73B + kL4EGlsZHyUKLRGY086sNJj6yQ8Vao6WoMwhmtBmGbcnweBPYRNfkfIwe0E7vHhcgUmXgppGpLb0 + AXdxHGEGZeiJOILjVcEJyqqjAKmUBVCxSHa00JZc9YCOcqAXhFHVjUAjDyCS9JBXX0uEN19Ok3KR + rMNoud3aPi2GLWidRNttFAftR1tlaJQ0ZO4PrilmS//ddZmKK3eZpRQmTyKsoIlwgj0DVchnluEI + 3Ejbfdt5T2yPaujol08XFnCRXk6Zy6IJt7/z8JLugdSqSHJjKv0hCKjG7q6vU0W5sIXTZvw1tlxs + AWfb9B9KwGzNHgq5l8ER/b+uxP4exJErKSzgTlORpfKE7KO337YVBRXF7vFR2gR0v50mB1qYHE+M + TFgchHwScTCQOVAGKTcXvftsVbXCi8Ms3NeFJX4D1HNNP0Mso8UxeYEOZF0bPCtZDBCdoA2f1jV2 + UZyC4nDBjKTjrix3xGqpYJDY7abSLk4yq1nTaC9bX2QOVAv+tYa2klCMkefYilWyXrHtOtpljK3Y + andzs7rZ7GAThSsGW0gZ5vjsUmf5CKKURGeHmUrr9e0YGFda+xQiOce0VOcR1ejHdIMANNReoC1P + pPOoKKs3PhF6fG+hfXRdmMzwHdYg2sfTMry+jYZPKRdQjRFQMuemonVxwJJtJP35BqxIS2xnkNCK + 4zmmcudlMHXzn3u+fslzfNKV3GCSP+ykerjwtLk4TJ6U/504bF6Kw/QV/h143UvawnBjsaB+jl2n + milezXLwgb4fYs0Dg1TI+WRGkOYSG0BP23+GxGMp48XikZ/tY7kBQRrgeUBkXDcdzasDZ0V2LWZm + IM29fnGETM82Nork3P59gn7NdK1e7+hBToWAqVW886PlMzuAOSZit5VPxN3mRIthSGul3fsoA0N5 + 0bHqscp/N4PHlX/7MWbyj9Eb4XCyAcDhrPzHsA9NzFQk9j6DNWOetxPeyIzv1vOqNuBLjZZVEC6Q + qdfusWqZlJsqD3aqxMEcaMx1B46OKfGQ7s6CXrfVEOTXbPUs2uTInwiWl807wKPv5Dhio+aRvPsb + AAD//wMA2f6GcY4UAAA= + headers: + cache-control: ['max-age=0, private, must-revalidate'] + content-encoding: [gzip] + content-type: [application/xml; charset=utf-8] + etag: [W/"e52ee2865e5f5ed87d18678b7e01775b"] + strict-transport-security: [max-age=31536000; includeSubDomains] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode bkhpqm20.9111443524salefalse2 + headers: {} + method: POST + uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions + response: + body: + string: !!binary | + H4sIAC57yFcAA9xYTW/jNhC9768IfGck2U7iBIqCAkWBFmiBdjct0EtAUWOLsURqScqx99fvUJRk + KaKS9FCg6M2aeRxyhvPx6PjhWBYXB1CaS3G/iC7DxQUIJjMudveLxy8/kc3iIfkUG0WFpswgKvl0 + cRHzLMlP0e4mulrFAX5YmTbU1Dqhtcml4t8gi4NWZLXmVEGiaQFx0Py0MlYrhbudCNeS4KaQPH7+ + MQ6mYgumpayFSZbh5W0UB+2XVZSgWE6FIZQxKyR4Hm3S2/365tu39Hmprq+e48CHak5dp8SjuxC8 + uF8YVcMicLtQbUB9CCpVhkiPgimgBjJCzYWNwf0iw0/DS1igW9E1CW9JGH2Jbu/C5V14/TdGol/Q + rK+r7J+tPy9o462NRA/sh7vEKFqvV1fLdXeJKN1ypQ0RtITX50dlQed1TJYVFSePBkrKC4/8BVLN + jc9WlUvhk2/pcRLVYOhWnPKiwOQ9u7h++Xed00YBYD5kmQKtfd4fDYjM3sIspJCMFtz4zCvYYdH5 + QiSxugpXH7frKLyJg6GoOzbmqDrNe+XUdgWhRZXT5YdQq/dQosb74Gx6V4PrQde2tch8hdJrdJvo + VCl6GikxnoOm5DNSUWU4hkODMQWUgMU6XuEzfu5e75kfmE2pYbkXk/OqGmajL6X/lyn5RoL8Z3Jx + eDttbyRbDkWmO39sBjFeUTcullhhY8mg/QxWxvSgCSglFcHgVlJo8MakwQ1iNkYnv+KUexPQmRhf + 9yvQz87Km5jG/8NhunIqtNAdzpQXekLNM7jywDGlpxkRV0oy3A3j0JUVbeCNpd9/+euPEAfPm6Cx + lfFRojAMh8unB/XoDKZ+8kOFmoMlKHOIJrRZxu1JMPhT2MTXg+TMXtAWLx5XYNKloKYRqS19wF0c + R5hBGXokjuB4VXCEsuooQCplAVQski0ttCVXPaCjHOgFYVR1I9DIPYgk3efV1xLhzZfTpFwk6zBa + bja2T4thC1on0WaDtKv9aKsMjZKGzP3JNcVs6b+7LlNx5S6zlMLkSYQVNBFOsCegCvnMMhyBG2m7 + bzvvie1RDSV9/HxmAWfp+ZS5LJpw+zsPL+kOSK2KJDem0ndBQDV2d32ZKsqFLZw24y+x5WILONmm + /1QCZmv2VMidDA7o/2Uldg8gDlxJYQH3mooslUdkH739tq0oqCh2j9+kTUD322lyoIXJ8cTIhMVe + yBcRBwOZA2WQcnPWu89WVSu8OMzCXV1Y4jdAvdb0M8QyWhyTZ+hA1rXBk5LFANEJ2vBpXWMXxSko + 9mfMSDruynJLrJYKBondbirt4iSzmjWN9rz1WeZAteBfa2grCcUYeY6tWCXrFduso23G2IqtttfX + q+urLVxF4YrBBlKGOT671Fk+gCgl0dl+ptJ6fTsGxpXWPodIzjEt1WlENfox3SAADbUXaMsT6Twq + yuqDFL/H9xbefIc1iLmnlAuoxggomXNT0brYY8k2kv58A1akJbYzSGjF8RxTufMyeO1mL2lD4xpj + Qf0sq041U7yaZWEDfd/GGopJKpz6MiNIdIgNoqfwXyHxWMp4sXjkV/vY6UBwEHgoZMZ1k9NeHTgr + skuymZY09/7BJjI929go0jP7gEa/ZvK217sBga9ZAVOreOcHO9G2AHOzyG4rX4i7zYkWw5DWSjuG + nIHBJ2DHq8Yq/90M6LV/+zFm8p/BB+FwtAHA9qz8x7BPDcxUpHY+gzVjHvaMNzLju/W8qg34UqOd + K4QL5Gq1e67YWer6ypPtK3EwBxqznYGjY1I0JDyzoPdtNRTpPVs9jzI5TlCC5WXzDvDoWzmO2Kh5 + JJ++AwAA//8DAMSHos2UEgAA + headers: + cache-control: ['max-age=0, private, must-revalidate'] + content-encoding: [gzip] + content-type: [application/xml; charset=utf-8] + etag: [W/"2d8456294e3829ad412b1c378d80d18f"] + strict-transport-security: [max-age=31536000; includeSubDomains] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 201, message: Created} +- request: + body: 20.91 + headers: {} + method: PUT + uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions/hy1g7153/submit_for_settlement + response: + body: + string: !!binary | + H4sIAC97yFcAA9xY32/bNhB+718R+J2RZDuJUygqBgwDNmADtrYbsJeAok4Wa4lUScqx+9fvKEqy + FFFJgGFAsTfr7uORd7wfHx1/OFXl1RGU5lI8rKLrcHUFgsmMi/3D6vOnn8hu9SF5FxtFhabMICp5 + d3UV8ywpztH+LrrZxAF+WJk21DQ60U1acWMge8yletRgTAkVCBMHHcBizbmGRNMS4qD9aWWsUQr3 + PhOuJcEjQPL5449xMBdbMK1kI0yyDq/vozjovqyiAsUKKgyhjFkhwdNpk94ftnffvqVf1ur25ksc + +FCtD01KPLorwcuHlVENrAK3C9UG1JugUmWI9CiYAophItRc2Rg8rDL8NLyCFboV3ZLwnoTRp+j+ + fbh+H97+jZEYFrTrmzp7+/o7XH9Z0MVbG4ke2A93pVG03W5u1tv+SlGac6UNEbSC5+dHZUmXdUxW + NRVnjwYqykuP/AlSzY3PVl1I4ZPn9DSLajB2K055WWIqX1zcPv23zmmjADAfskyB1j7vTwZEZm9h + EVJKRktufOYV7LEEfSGSWF2lq4/7bRTexcFY1B8bc1Sdl71yaruC0LIu6PpNqM1rKNHgfXA2v6vR + 9aBreSMyX6EMGt0lOlWKnidKjOeoRfmM1FQZjuG4NKRnK3zGaWMKqfi3182PzKbUsMKLKXhdj7PR + l9L/y5R8IUG+m1wc307XG0nOocx074/NIMZr6sbFGitsKhm1n9HKmB41AaWkIhjcWgoN3pi0uFHM + pujkV5xyLwJ6E9Prfgb62Vl5EdP6fzzOV86FFrrHmfJEz6j5Aq48cEzpeUbEtZIMd8M49GVFW3hr + 6fdf/vojxMHzImhqZXqUKAzD8fL5QT06g6mf/FCj5giZd3WLaEObZdyeBIM/h818PUrO7AXlePG4 + ApMuBTWPSGPpA+7iOMICytATcQTHq4ITVHVPAVIpS6BileS01JZcDYCecqAXhFHVj0AjDyCS9FDU + XyuEt19Ok3KRbMNovdvZPi3GLWibRLsd0q7uo6syNEpaMvcn1xSzZfjuu0zNlbvMSgpTJBFW0Ew4 + w56BKuQz63ACbqXdvt28J7ZHtQT188cLC7hIL6csZNmG2995eEX3QBpVJoUxtX4fBFRjd9fXqaJc + 2MLpMv4aWy62gLNt+o8VYLZmj6Xcy+CI/l/XYv8BxJErKSzgQVORpfKE7GOw37UVBTXF7vGbtAno + fjtNAbQ0BZ4YmbA4CPkk4mAkc6AMUm4uevfZqRqFF4dZuG9KS/xGqOeaYYZYRotj8gIdyfo2eFay + HCF6QRc+rRvsojgFxeGCmUinXVnmxGqpYJDY7ebSPk4ya1jbaC9bX2QO1Aj+tYGuklCMkefYilWy + 3bDdNsozxjZsk9/ebm5vcriJwg2DHaQMc3xxqbN8BFFJorPDQqUN+m4MTCutexyRgmNaqvOEagxj + ukUAGuou0JYn0nlUVPUbnwgDfrDQPbouTGb8DmsRS08pF1CNEVCy4KamTXnAkm0lw/lGrEhLbGeQ + 0JrjOeZy52Uwd/Pfe373kudveY9+B3EYJF2KuAFRUj/bbFLNFK8X2ehIP7TzlmqTGtmPzAgSPmJD + 6mmAz5B4LGW8WDzys33slCQ4ED1UOuO6rW2vDpwV2RfbQmteegdiM52fbWoUaar9IwH9WqjfQe8G + Jb7qBcyt4p0f7WTPAZZmst1WPhF3mzMthiFtlHYvhQwMPoV7fjlV+e9m9Mzwbz/FzP47eSMcTjYA + OKaU/xj2yYWZihTXZ7BhzPOKwBtZ8N16XjcGfKnRzVfCBXLWxj3bLKdw/fXR9tc4WAJNWd/I0Sk5 + HBO/RdDrtlqq+JqtgU+aApkEwfKyeQd49FxOIzZpHsm7fwAAAP//AwAgC399qhMAAA== + headers: + cache-control: ['max-age=0, private, must-revalidate'] + content-encoding: [gzip] + content-type: [application/xml; charset=utf-8] + etag: [W/"d6537aaac807f989bce762d4e30c0014"] + strict-transport-security: [max-age=31536000; includeSubDomains] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: {} + method: GET + uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions/hy1g7153 + response: + body: + string: !!binary | + H4sIADB7yFcAA9xY32/bNhB+718R+J2RZDuJUygqBgwDNmADtrYbsJeAok4Wa4lUScqx+9fvKEqy + FFFJgGFAsTfr7uORd7wfHx1/OFXl1RGU5lI8rKLrcHUFgsmMi/3D6vOnn8hu9SF5FxtFhabMICp5 + d3UV8ywpztH+LrrZxAF+WJk21DQ60U1acWMge8yletRgTAkVCBMHHcBizbmGRNMS4qD9aWWsUQr3 + PhOuJcEjQPL5449xMBdbMK1kI0yyDq/vozjovqyiAsUKKgyhjFkhwdNpk94ftnffvqVf1ur25ksc + +FCtD01KPLorwcuHlVENrAK3C9UG1JugUmWI9CiYAophItRc2Rg8rDL8NLyCFboV3ZLwnoTRp+j+ + fbh+H97+jZEYFrTrmzp7+/o7XH9Z0MVbG4ke2A93pVG03W5u1tv+SlGac6UNEbSC5+dHZUmXdUxW + NRVnjwYqykuP/AlSzY3PVl1I4ZPn9DSLajB2K055WWIqX1zcPv23zmmjADAfskyB1j7vTwZEZm9h + EVJKRktufOYV7LEEfSGSWF2lq4/7bRTexcFY1B8bc1Sdl71yaruC0LIu6PpNqM1rKNHgfXA2v6vR + 9aBreSMyX6EMGt0lOlWKnidKjOeoRfmM1FQZjuG4NKRnK3zGaWMKqfi3182PzKbUsMKLKXhdj7PR + l9L/y5R8IUG+m1wc307XG0nOocx074/NIMZr6sbFGitsKhm1n9HKmB41AaWkIhjcWgoN3pi0uFHM + pujkV5xyLwJ6E9Prfgb62Vl5EdP6fzzOV86FFrrHmfJEz6j5Aq48cEzpeUbEtZIMd8M49GVFW3hr + 6fdf/vojxMHzImhqZXqUKAzD8fL5QT06g6mf/FCj5giZd3WLaEObZdyeBIM/h818PUrO7AXlePG4 + ApMuBTWPSGPpA+7iOMICytATcQTHq4ITVHVPAVIpS6BileS01JZcDYCecqAXhFHVj0AjDyCS9FDU + XyuEt19Ok3KRbMNovdvZPi3GLWibRLsd0q7uo6syNEpaMvcn1xSzZfjuu0zNlbvMSgpTJBFW0Ew4 + w56BKuQz63ACbqXdvt28J7ZHtQT188cLC7hIL6csZNmG2995eEX3QBpVJoUxtX4fBFRjd9fXqaJc + 2MLpMv4aWy62gLNt+o8VYLZmj6Xcy+CI/l/XYv8BxJErKSzgQVORpfKE7GOw37UVBTXF7vGbtAno + fjtNAbQ0BZ4YmbA4CPkk4mAkc6AMUm4uevfZqRqFF4dZuG9KS/xGqOeaYYZYRotj8gIdyfo2eFay + HCF6QRc+rRvsojgFxeGCmUinXVnmxGqpYJDY7ebSPk4ya1jbaC9bX2QO1Aj+tYGuklCMkefYilWy + 3bDdNsozxjZsk9/ebm5vcriJwg2DHaQMc3xxqbN8BFFJorPDQqUN+m4MTCutexyRgmNaqvOEagxj + ukUAGuou0JYn0nlUVPUbnwgDfrDQPbouTGb8DmsRS08pF1CNEVCy4KamTXnAkm0lw/lGrEhLbGeQ + 0JrjOeZy52Uwd/Pfe373kudveY9+B3EYJF2KuAFRUj/bbFLNFK8X2ehIP7TzlmqTGtmPzAgSPmJD + 6mmAz5B4LGW8WDzys33slCQ4ED1UOuO6rW2vDpwV2RfbQmteegdiM52fbWoUaar9IwH9WqjfQe8G + Jb7qBcyt4p0f7WTPAZZmst1WPhF3mzMthiFtlHYvhQwMPoV7fjlV+e9m9Mzwbz/FzP47eSMcTjYA + OKaU/xj2yYWZihTXZ7BhzPOKwBtZ8N16XjcGfKnRzVfCBXLWxj3bLKdw/fXR9tc4WAJNWd/I0Sk5 + HBO/RdDrtlqq+JqtgU+aApkEwfKyeQd49FxOIzZpHsm7fwAAAP//AwAgC399qhMAAA== + headers: + cache-control: ['max-age=0, private, must-revalidate'] + content-encoding: [gzip] + content-type: [application/xml; charset=utf-8] + etag: [W/"0fd7a8bcec08df22a1e6a2a1577cd8ec"] + strict-transport-security: [max-age=31536000; includeSubDomains] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: {} + method: PUT + uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions/hy1g7153/void + response: + body: + string: !!binary | + H4sIADB7yFcAA9xY32/bNhB+718R+J2RZDuJUygqBgwDNmADtrUbsJeAok4Wa4lUScqx+9fvKEqy + FFFJgGFA0Tfr7uORd7wfHx1/OFXl1RGU5lI8rKLrcHUFgsmMi/3D6tPHn8hu9SF5FxtFhabMICp5 + d3UV8ywpztH+LrrZxAF+WJk21DQ6OUqeQRYH3afVmHMNiaYlxEH708pYoxTudCZcS4IbQvLpzx/j + YC62YFrJRphkHV7fR3HQfVlFBYoVVBhCGbNCgmfRJr0/bO++fk0/r9Xtzec48KHaEzcp8eiuBC8f + VkY1sArcLlQbUG+CSpUh0qNgCqiBjFBzZWPwsMrw0/AKVuhWdEvCexJGH6P79+H6fXj7D0ZiWNCu + b+rs7et3uP6yoIu3NhI9sB/uAqNou93crLf9BaI050obImgFz8+PypIu65isairOHg1UlJce+ROk + mhufrbqQwifP6WkW1WDsVpzyssTEvbi4ffp/ndNGAWA+ZJkCrX3enwyIzN7CIqSUjJbc+Mwr2GPB + +UIksbpKVx/32yi8i4OxqD825qg6L3vl1HYFoWVd0PWbUJvXUKLB++Bsflej60HX8kZkvkIZNLpL + dKoUPU+UGM9RQ/IZqakyHMOhwZgSKsBina7wGaeNKaTiX183PzKbUsMKL6bgdT3ORl9Kf5cp+UKC + fDO5OL6drjeSnEOZ6d4fm0GM19SNizVW2FQyaj+jlTE9agJKSUUwuLUUGrwxaXGjmE3Rya845V4E + 9Cam1/0M9LOz8iKm9f94nK+cCy10jzPliZ5R8xlceeCY0vOMiGslGe6GcejLirbw1tLvv/z9R4iD + 50XQ1Mr0KFEYhuPl84N6dAZTP/mhRs3REpQlRBvaLOP2JBj8OWzmK1IeZi8ox4vHFZh0Kah5RBpL + H3AXxxEWUIaeiCM4XhWcoKp7CpBKWQIVqySnpbbkagD0lAO9IIyqfgQaeQCRpIei/lIhvP1ympSL + ZBtG693O9mkxbkHbJNrtkHZ1H12VoVHSkrm/uKaYLcN332VqrtxlVlKYIomwgmbCGfYMVCGfWYcT + cCvt9u3mPbE9qqWjn/68sICL9HLKQpZtuP2dh1d0D6RRZVIYU+v3QUA1dnd9nSrKhS2cLuOvseVi + Czjbpv9YAWZr9ljKvQyO6P91LfYfQBy5ksICHjQVWSpPyD4G+11bUVBT7B6/SZuA7rfTFEBLU+CJ + kQmLg5BPIg5GMgfKIOXmonefnapReHGYhfumtMRvhHquGWaIZbQ4Ji/Qkaxvg2clyxGiF3Th07rB + LopTUBwumIl02pVlTqyWCgaJ3W4u7eMks4a1jfay9UXmQI3gXxroKgnFGHmOrVgl2w3bbaM8Y2zD + Nvnt7eb2JoebKNww2EHKMMcXlzrLRxCVJDo7LFTaoO/GwLTSuqcQKTimpTpPqMYwplsEoKHuAm15 + Ip1HRVW/8Ykw4AcL3aPrwmTG77AWsfSUcgHVGAElC25q2pQHLNlWMpxvxIq0xHYGCa05nmMud14G + czf/u+d3L3mOT7qKG0zyx1yqxwtP+w7jsHspDvNX+Dfg9SDpCsONxZL6OXaTaqZ4vcjBR/phiLUP + DFIj55MZQZpLbAA9bf8ZEo+ljBeLR362j+UGBGmA5wGRcd12NK8OnBXZt5iFgbT0+sURMj/b1CiS + c/v3Cfq10LUGvaMHBRUC5lbxzo+Wz+QAS0zEbiufiLvNmRbDkDZKu/dRBobysmfVU5X/bkaPK//2 + U8zsH6M3wuFkA4DDWfmPYR+amKlI7H0GG8Y8bye8kQXfred1Y8CXGh2rIFwgU2/cY9UyKTdVHu1U + iYMl0JTrjhydUuIx3V0EvW6rJciv2RpYtCmQPxEsL5t3gEfP5TRik+aRvPsXAAD//wMA8uGxhI4U + AAA= + headers: + cache-control: ['max-age=0, private, must-revalidate'] + content-encoding: [gzip] + content-type: [application/xml; charset=utf-8] + etag: [W/"dac56a35e6d1afad75efd5c91b547466"] + strict-transport-security: [max-age=31536000; includeSubDomains] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode bkhpqm20.9111443524salefalse2 + headers: {} + method: POST + uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions + response: + body: + string: !!binary | + H4sIADF7yFcAA9xYTW/jNhC9768IfGck2U7WDhQtChSLtkB72c0W6GVBUWOLsURqScqx8+s7FCVZ + iqgkPRQoerNmHoec4Xw8Ov50KourIyjNpbhfRNfh4goEkxkX+/vFw9fPZLP4lHyIjaJCU2YQlXy4 + uop5lmTsMRX58yEO8MPKtKGm1gmtTS4Vf4YsDlqR1ZpzBYmmBcRB89PKWK0U7nYmXEuCm0Ly8OXn + OJiKLZiWshYmWYbX2ygO2i+rKEGxnApDKGNWSPA82qTbw/rj83P6uFS3N49x4EM1p65T4tFdCV7c + L4yqYRG4Xag2oN4FlSpDpEfBFFADGaHmysbgfpHhp+ElLNCt6JaEWxJGX6PtXbi8C7d/YST6Bc36 + usr+2frLgjbe2kj0wH64S4yi9Xp1s1x3l4jSHVfaEEFLeHl+VBZ0XsdkWVFx9migpLzwyJ8g1dz4 + bFW5FD75jp4mUQ2GbsUpLwpM3ouL66d/1zltFADmQ5Yp0Nrn/cmAyOwtzEIKyWjBjc+8gj0WnS9E + EqurcPWxXUfhxzgYirpjY46q87xXTm1XEFpUOV2+C7V6CyVqvA/Opnc1uB50bVeLzFcovUa3iU6V + oueREuM5aEo+IxVVhmM4NBhTQAlYrOMVPuOX7vWW+YHZlBqWezE5r6phNvpS+n+Zkq8kyH8mF4e3 + 0/ZGsuNQZLrzx2YQ4xV142KJFTaWDNrPYGVMj5qAUlIRDG4lhQZvTBrcIGZjdPI7TrlXAZ2J8XW/ + AP3qrLyKafw/Hqcrp0IL3eNMeaJn1DyCKw8cU3qaEXGlJMPdMA5dWdEG3lj67cvnmz9/wZC+Bhpb + GR8lCsNwuHx6UI/OYOonP1WoOVqCModoQptl3J4Egz+FTXw9Ss7sBe3w4nEFJl0KahqR2tIH3MVx + hBmUoSfiCI5XBScoq44CpFIWQMUi2dFCW3LVAzrKgV4QRlU3Ao08gEjSQ179KBHefDlNykWyDqPl + ZmP7tBi2oHUSbTZIu9qPtsrQKGnI3DeuKWZL/911mYord5mlFCZPIqygiXCCPQNVyGeW4QjcSNt9 + 23lPbI9qKOnDlwsLuEgvp8xl0YTb33l4SfdAalUkuTGVvgsCqrG76+tUUS5s4bQZf40tF1vA2Tb9 + 7yVgtmbfC7mXwRH9v67E/hOII1dSWMC9piJL5QnZR2+/bSsKKord4w9pE9D9dpocaGFyPDEyYXEQ + 8knEwUDmQBmk3Fz07rNV1QovDrNwXxeW+A1QLzX9DLGMFsfkBTqQdW3wrGQxQHSCNnxa19hFcQqK + wwUzko67stwRq6WCQWK3m0q7OMmsZk2jvWx9kTlQLfiPGtpKQjFGnmMrVsl6xTbraJcxtmKr3e3t + 6vZmBzdRuGKwgZRhjs8udZaPIEpJdHaYqbRe346BcaW1zyGSc0xLdR5RjX5MNwhAQ+0F2vJEOo+K + snonxe/xvYVX32ENYu4p5QKqMQJK5txUtC4OWLKNpD/fgBVpie0MElpxPMdU7rwMXrrZS9rQuMZY + UD/LqlPNFK9mWdhA37exhmKSCqe+zAgSHWKD6Cn8F0g8ljJeLB75xT52OhAcBB4KmXHd5LRXB86K + 7JJspiXNvX+wiUzPNjaK9Mw+oNGvmbzt9W5A4GtWwNQq3vnRTrQdwNwsstvKJ+Juc6LFMKS10o4h + Z2DwCdjxqrHKfzcDeu3ffoyZ/GfwTjicbACwPSv/MexTAzMVqZ3PYM2Yhz3jjcz4bj2vagO+1Gjn + CuECuVrtnit2lrq+8t32lTiYA43ZzsDRMSkaEp5Z0Nu2Gor0lq2eR5kcJyjB8rJ5B3j0nRxHbNQ8 + kg9/AwAA//8DAGLW71CUEgAA + headers: + cache-control: ['max-age=0, private, must-revalidate'] + content-encoding: [gzip] + content-type: [application/xml; charset=utf-8] + etag: [W/"90d7566ef56da143a30790d2441d9bff"] + strict-transport-security: [max-age=31536000; includeSubDomains] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 201, message: Created} +- request: + body: 15.76 + headers: {} + method: PUT + uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions/dcjbnhzk/submit_for_settlement + response: + body: + string: !!binary | + H4sIADJ7yFcAA9xYTW/jNhC951cEvjOSbCdxFooWBYpFW6C97KYFegkoamwxlkgtSTl2fn2HoiRL + EZUEKFoUvVkzj0POcD4eHX8+lsXlAZTmUtwvoqtwcQmCyYyL3f3i4dsXsll8Ti5io6jQlBlEJReX + lzHPkow9pSJ/2ccBfliZNtTUOtF1WnJjIHvcSvWowZgCShAmDlqAxZpTBYmmBcRB89PKWK0U7n0i + XEuCR4Dk4euPcTAVWzAtZS1MEl1f3d7EQftlFSUollNhCGXMCgmeTpv0br++fXlJn5bq5vopDnyo + xoc6JR7dpeDF/cKoGhaB24VqA+pDUKkyRHoUTAHFMBFqLm0M7hcZfhpewiJZhtENCe9IGH2L7j6F + y0/h3Z8YiX5Bs76usg+vj0Jcf17QxlsbiR7YD3elUbRer66X6+5KUbrlShsiaAmvz4/Kgs7rmCwr + Kk4eDZSUFx75M6SaG5+tKpfCJ9/S4ySqwdCtOOVFgal8dnH9/M86p40CwHzIMgVa+7w/GhCZvYVZ + SCEZLbjxmVewwxL0hUhidRWuPu7WUXgbB0NRd2zMUXWa98qp7QpCiyqnyw+hVu+hRI33wdn0rgbX + g65ta5H5CqXX6DbRqVL0NFJiPActymekospwDMe5Ib1a4TNOa5NLxV/eNz8wm1LDci8m51U1zEZf + Sv8vU/KNBPnP5OLwdtreSLYcikx3/tgMYryiblwsscLGkkH7GayM6UETUEoqgsGtpNDgjUmDG8Rs + jE5+xSn3JqAzMb7uV6CfnZU3MY3/h8N05VRooTucKc/0hJoncOWBY0pPMyKulGS4G8ahKyvawBtL + v3z9cv3HTxjSt0BjK+OjRGEYDpdPD+rRGUz95IcKNQfIvKsbRBPaLOP2JBj8KWzi60FyZi9oixeP + KzDpUlDTiNSWPuAujiPMoAw9EkdwvCo4Qll1FCCVsgAqFsmWFtqSqx7QUQ70gjCquhFo5B5Eku7z + 6nuJ8ObLaVIuknUYLTcb26fFsAWtk2izieKg/WirDI2Shsz9zjXFbOm/uy5TceUus5TC5EmEFTQR + TrAnoAr5zDIcgRtpu28774ntUQ1Bffh6ZgFn6fmUuSyacPs7Dy/pDkitiiQ3ptKfgoBq7O76KlWU + C1s4bcZfYcvFFnCyTf+xBMzW7LGQOxkc0P+rSuw+gzhwJYUF3GsqslQekX309tu2oqCi2D1+kzYB + 3W+nyYEWJscTIxMWeyGfRRwMZA6UQcrNWe8+W1Wt8OIwC3d1YYnfAPVa088Qy2hxTJ6hA1nXBk9K + FgNEJ2jDp3WNXRSnoNifMSPpuCvLLbFaKhgkdruptIuTzGrWNNrz1meZA9WCf6+hrSQUY+Q5tmKV + rFdss462GWMrttre3KxurrdwHYUrBhtIGeb47FJn+QCilERn+5lK6/XtGBhXWvs4IjnHtFSnEdXo + x3SDADTUXqAtT6TzqCirDz4RenxvoX10nZnM8B3WINrH0zK8uouGTykXUI0RUDLnpqJ1sceSbST9 + +QasSEtsZ5DQiuM5pnLnZTB182973jxuZj3/yHt0GIfJk/LfiUMvaVPEDYiC+tlmnWqmeDXLRgf6 + vp03VJtUyH5kRpDwERtSTwN8hcRjKePF4pFf7WOnJMGB6KHSGddNbXt14KzIrthmWvPcOxCb6fRs + Y6NIU+0fCejXTP32ejco8VUvYGoV7/xgJ/sWYG4m223lM3G3OdFiGNJaafdSyMDgU7jjl2OV/24G + zwz/9mPM5L+TD8LhaAOAY0r5j2GfXJipSHF9BmvGPK8IvJEZ363nVW3AlxrtfCVcIGet3bPNcgrX + Xx9tf42DOdCY9Q0cHZPDIfGbBb1vq6GK79nq+aTJkUkQLC+bd4BH38pxxEbNI7n4CwAA//8DAB/7 + qTyqEwAA + headers: + cache-control: ['max-age=0, private, must-revalidate'] + content-encoding: [gzip] + content-type: [application/xml; charset=utf-8] + etag: [W/"c87df9cdaa2645ff230d47998fed9ab0"] + strict-transport-security: [max-age=31536000; includeSubDomains] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: {} + method: PUT + uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions/dcjbnhzk/void + response: + body: + string: !!binary | + H4sIADN7yFcAA9xYS2/jNhC+768IfGck2U7iLBQFBYpFW6C97KNALwFFjS3GEqklKcfOr+9QlGQp + opIARYFtb9bMxyFnOI+Pju+PZXFxAKW5FHeL6DJcXIBgMuNid7f4+uUT2Szukw+xUVRoygyikg8X + FzHPkow9piJ/3scBfliZNtTUOjlInkEWB+2n1ZhTBYmmBcRB89PKWK0U7nQiXEuCG0Ly9fPPcTAV + WzAtZS1MEl1d3lzHQftlFSUollNhCGXMCgmeRZv0dr++eX5OH5fq+uoxDnyo5sR1Sjy6C8GLu4VR + NSwCtwvVBtS7oFJliPQomAJqICPUXNgY3C0y/DS8hEWyDKNrEt6SMPoS3X4Mlx/D278wEv2CZn1d + Ze9eH0W4/rygjbc2Ej2wH+4Co2i9Xl0t190FonTLlTZE0BJenh+VBZ3XMVlWVJw8GigpLzzyJ0g1 + Nz5bVS6FT76lx0lUg6FbccqLAhP37OL66d91ThsFgPmQZQq09nl/NCAyewuzkEIyWnDjM69ghwXn + C5HE6ipcfdyuo/AmDoai7tiYo+o075VT2xWEFlVOl+9Crd5CiRrvg7PpXQ2uB13b1iLzFUqv0W2i + U6XoaaTEeA4aks9IRZXhGA4NxhRQAhbreIXPOK1NLhV/ftv8wGxKDcu9mJxX1TAbfSn9v0zJVxLk + h8nF4e20vZFsORSZ7vyxGcR4Rd24WGKFjSWD9jNYGdODJqCUVASDW0mhwRuTBjeI2Rid/I5T7lVA + Z2J83S9Avzorr2Ia/w+H6cqp0EJ3OFOe6Ak1j+DKA8eUnmZEXCnJcDeMQ1dWtIE3ln77/Onqz18w + pK+BxlbGR4nCMBwunx7UozOY+slPFWoOlqDMIZrQZhm3J8HgT2ETX5HyMHtBW7x4XIFJl4KaRqS2 + 9AF3cRxhBmXokTiC41XBEcqqowCplAVQsUi2tNCWXPWAjnKgF4RR1Y1AI/cgknSfV99LhDdfTpNy + kazDaLnZ2D4thi1onUSbTRQH7UdbZWiUNGTuG9cUs6X/7rpMxZW7zFIKkycRVtBEOMGegCrkM8tw + BG6k7b7tvCe2RzV09OvnMws4S8+nzGXRhNvfeXhJd0BqVSS5MZX+GARUY3fXl6miXNjCaTP+Elsu + toCTbfoPJWC2Zg+F3MnggP5fVmJ3D+LAlRQWcKepyFJ5RPbR22/bioKKYvf4Q9oEdL+dJgdamBxP + jExY7IV8EnEwkDlQBik3Z737bFW1wovDLNzVhSV+A9RLTT9DLKPFMXmGDmRdGzwpWQwQnaANn9Y1 + dlGcgmJ/xoyk464st8RqqWCQ2O2m0i5OMqtZ02jPW59lDlQL/r2GtpJQjJHn2IpVsl6xzTraZoyt + 2Gp7fb26vtrCVRSuGGwgZZjjs0ud5QOIUhKd7Wcqrde3Y2Bcae1TiOQc01KdRlSjH9MNAtBQe4G2 + PJHOo6Ks3vlE6PG9hfbRdWYyw3dYg2gfT8vw8jYaPqVcQDVGQMmcm4rWxR5LtpH05xuwIi2xnUFC + K47nmMqdl8HUzX/seRS+5jk+6UpuMMkftlI9nHnaXBwmT8r/Thyi1+IwfYX/AF73krYw3FgsqJ9j + 16lmilezHHyg74dY88AgFXI+mRGkucQG0NP2XyDxWMp4sXjkF/tYbkCQBngeEBnXTUfz6sBZkV2L + mRlIc69fHCHTs42NIjm3f5+gXzNdq9c7epBTIWBqFe/8YPnMFmCOidht5RNxtznRYhjSWmn3PsrA + UF50rHqs8t/N4HHl336Mmfxj9E44HG0AcDgr/zHsQxMzFYm9z2DNmOfthDcy47v1vKoN+FKjZRWE + C2TqtXusWiblpsqDnSpxMAcac92Bo2NKPKS7s6C3bTUE+S1bPYs2OfInguVl8w7w6Fs5jtioeSQf + /gYAAP//AwBJrrtijhQAAA== + headers: + cache-control: ['max-age=0, private, must-revalidate'] + content-encoding: [gzip] + content-type: [application/xml; charset=utf-8] + etag: [W/"80e786ce53b809bafb438c602d78176e"] + strict-transport-security: [max-age=31536000; includeSubDomains] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode bkhpqm20.9111443524salefalse2 + headers: {} + method: POST + uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions + response: + body: + string: !!binary | + H4sIADR7yFcAA9xYTW/jNhC951cEvjOybCfrBIqCAkXRHtpDd7OHvQQUNbIYS6SWpBw7v75DUZKl + iEpyKVD0Zs08DjnD+Xh09HAsi8sDKM2luF+EV8vFJQgmUy5294vHb7+R7eIhvoiMokJTZhAVX1xe + RjyNE02z3SEXUYAfVqYNNbWOaW1yqfgrpFHQiqzWnCqINS0gCpqfVsZqpXC3E+FaEtwU4sevv0bB + VGzBtJS1MPFqeXUbRkH7ZRUlKJZTYQhlzAoJnkeb5Ha/+fL6mjyv1M31cxT4UM2p64R4dJeCF/cL + o2pYBG4Xqg2oT0GlShHpUTAF1EBKqLm0MbhfpPhpeAkLdCu8Ictbsgy/hbd3y9VdGP7ASPQLmvV1 + lX5+/QrXnxe08dZGogf2w11iGG426+vVprtElGZcaUMELeHt+VFZ0Hkdk2VFxcmjgZLywiN/gURz + 47NV5VL45Bk9TqIaDN2KEl4UmLxnFzcv/65z2igAzIc0VaC1z/ujAZHaW5iFFJLRghufeQU7LDpf + iCRWV+Hq43YTLr9EwVDUHRtzVJ3mvXJqu4LQosrp6lOo9UcoUeN9cDa9q8H1oGtZLVJfofQa3SY6 + VYqeRkqM56Ap+YxUVBmO4dBgTAElYLGOV/iMn7vXR+YHZhNqWO7F5LyqhtnoS+n/ZUq+kyD/mVwc + 3k7bG0nGoUh154/NIMYr6sbFCitsLBm0n8HKiB40AaWkIhjcSgoN3pg0uEHMxuj4T5xy7wI6E+Pr + fgP6w1l5F9P4fzhMV06FFrrDmfJCT6h5BlceOKb0NCOiSkmGu2EcurKiDbyx9Pvft9/tjHsXNLYy + Pkq4XC6Hy6cH9egMpn78S4WagyUoc4gmtGnK7Ukw+FPYxNeD5MxeUIYXjysw6RJQ04jUlj7gLo4j + zKAMPRJHcLwqOEJZdRQgkbIAKhZxRgttyVUP6CgHekEYVd0INHIPIk72efWzRHjz5TQJF/FmGa62 + W9unxbAFbeJwu0Xa1X60VYZGSUPmvnNNMVv6767LVFy5yyylMHkcYgVNhBPsCahCPrNajsCNtN23 + nffE9qiGkj5+PbOAs/R8ylwWTbj9nYeXdAekVkWcG1PpuyCgGru7vkoU5cIWTpvxV9hysQWcbNN/ + KgGzNX0q5E4GB/T/qhK7BxAHrqSwgHtNRZrII7KP3n7bVhRUFLvHX9ImoPvtNDnQwuR4YmTCYi/k + C7LrgcyBUki4OevdZ6uqFV4cZuGuLizxG6DeavoZYhktjskzdCDr2uBJyWKA6ARt+LSusYviFBT7 + M2YkHXdlmRGrpYJBbLebSrs4ybRmTaM9b32WOVAt+M8a2kpCMUaeYytW8WbNtpswSxlbs3V2c7O+ + uc7gOlyuGWwhYZjjs0ud5QOIUhKd7mcqrde3Y2Bcae1ziOQc01KdRlSjH9MNAtBQe4G2PJHOo6Ks + Pknxe3xv4d13WIOYe0q5gGqMgJI5NxWtiz2WbCPpzzdgRVpiO4OYVhzPMZU7L4O3bvaSNjSuMRbU + z7LqRDPFq1kWNtD3bayhmKTCqS9TgkSH2CB6Cv8NEo+ljBeLR36zj50OBAeBh0KmXDc57dWBsyK7 + JJtpSXPvH2wi07ONjSI9sw9o9Gsmb3u9GxD4mhUwtYp3frATLQOYm0V2W/lC3G1OtBiGpFbaMeQU + DD4BO141VvnvZkCv/duPMZP/DD4Jh6MNALZn5T+GfWpgpiK18xmsGfOwZ7yRGd+t51VtwJca7Vwh + XCBXq91zxc5S11eebF+JgjnQmO0MHB2ToiHhmQV9bKuhSB/Z6nmUyXGCEiwvm3eAR8/kOGKj5hFf + /AMAAP//AwBpvue7lBIAAA== + headers: + cache-control: ['max-age=0, private, must-revalidate'] + content-encoding: [gzip] + content-type: [application/xml; charset=utf-8] + etag: [W/"557a3ca4f92391ee042a04f38d4c21e3"] + strict-transport-security: [max-age=31536000; includeSubDomains] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 201, message: Created} +- request: + body: 20.92 + headers: {} + method: PUT + uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions/bsafgvhn/submit_for_settlement + response: + body: + string: !!binary | + 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 + headers: + cache-control: [no-cache] + content-encoding: [gzip] + content-type: [application/xml; charset=utf-8] + strict-transport-security: [max-age=31536000; includeSubDomains] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 422, message: Unprocessable Entity} +- request: + body: null + headers: {} + method: PUT + uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions/bsafgvhn/void + response: + body: + string: !!binary | + H4sIADV7yFcAA9xYTW/jNhC951cEvjOybCfrBIqCAkXRHtpDd7OHvQQUNbIYS6SWpBx7f32HoiRL + EZUEKAoserNmHoec4Xw8Ono4lsXlAZTmUtwvwqvl4hIEkykXu/vF45ffyHbxEF9ERlGhKTOIii8u + LyOexomm2e6QiyjADyvThppaxwfJU0ijoP20GnOqINa0gChofloZq5XCnU6Ea0lwQ4gfP/8aBVOx + BdNS1sLEq+XVbRgF7ZdVlKBYToUhlDErJHgWbZLb/ebTjx/J80rdXD9HgQ/VnLhOiEd3KXhxvzCq + hkXgdqHagPoQVKoUkR4FU0ANpISaSxuD+0WKn4aXsEC3whuyvCXL8Et4e7dc3YXhN4xEv6BZX1fp + x9evcf15QRtvbSR6YD/cBYbhZrO+Xm26C0RpxpU2RNASXp8flQWd1zFZVlScPBooKS888hdINDc+ + W1UuhU+e0eMkqsHQrSjhRYGJe3Zx8/LfOqeNAsB8SFMFWvu8PxoQqb2FWUghGS248ZlXsMOC84VI + YnUVrj5uN+HyUxQMRd2xMUfVad4rp7YrCC2qnK4+hFq/hxI13gdn07saXA+6ltUi9RVKr9FtolOl + 6GmkxHgOGpLPSEWV4RgODcYUUAIW63iFzzitTS4V//G++YHZhBqWezE5r6phNvpS+n+Zkm8kyE+T + i8PbaXsjyTgUqe78sRnEeEXduFhhhY0lg/YzWBnRgyaglFQEg1tJocEbkwY3iNkYHf+JU+5NQGdi + fN2vQH84K29iGv8Ph+nKqdBCdzhTXugJNc/gygPHlJ5mRFQpyXA3jENXVrSBN5Z+//v2q51xb4LG + VsZHCZfL5XD59KAencHUj3+pUHOwBGUO0YQ2Tbk9CQZ/Cpv4ipSH2QvK8OJxBSZdAmoakdrSB9zF + cYQZlKFH4giOVwVHKKuOAiRSFkDFIs5ooS256gEd5UAvCKOqG4FG7kHEyT6vvpcIb76cJuEi3izD + 1XZr+7QYtqBNHG63SLvaj7bK0ChpyNxXrilmS//ddZmKK3eZpRQmj0OsoIlwgj0BVchnVssRuJG2 + +7bzntge1dDRx89nFnCWnk+Zy6IJt7/z8JLugNSqiHNjKn0XBFRjd9dXiaJc2MJpM/4KWy62gJNt + +k8lYLamT4XcyeCA/l9VYvcA4sCVFBZwr6lIE3lE9tHbb9uKgopi9/hL2gR0v50mB1qYHE+MTFjs + hXxBZj2QOVAKCTdnvftsVbXCi8Ms3NWFJX4D1GtNP0Mso8UxeYYOZF0bPClZDBCdoA2f1jV2UZyC + Yn/GjKTjriwzYrVUMIjtdlNpFyeZ1qxptOetzzIHqgX/XkNbSSjGyHNsxSrerNl2E2YpY2u2zm5u + 1jfXGVyHyzWDLSQMc3x2qbN8AFFKotP9TKX1+nYMjCutfQqRnGNaqtOIavRjukEAGmov0JYn0nlU + lNUHKP4K22eP7y20j64zkxm+wxrE3FPKBVRjBJTMualoXeyxZBtJf74BK9IS2xnEtOJ4jqnceRlM + 3fz3nq/f8nz6+vwJvO4lbUK4cVBQP7esE80Ur2a550DfN++GWJMKuY5MCdI7YgPoaXevkHgsZbxY + PPKrfexMJDj+PMQ55bqpZK8OnBXZldZMI5579WHrnJ5tbBRJqf3bAP2aqdZe78YivuEFTK3inR/s + HM8A5iaw3Va+EHebEy2GIamVdu+CFAw+fDs2OVb572bwqPBvP8ZM/in5IByONgA4lJT/GPaBhZmK + hNZnsGbM82bAG5nx3Xpe1QZ8qdFOU8IFMtTaPdIsg3Dd9Ml20yiYA4053sDRMRUc0rxZ0Pu2GmL4 + nq2ePZoceQPB8rJ5B3j0TI4jNmoe8cU/AAAA//8DAO2T/6CGEwAA + headers: + cache-control: ['max-age=0, private, must-revalidate'] + content-encoding: [gzip] + content-type: [application/xml; charset=utf-8] + etag: [W/"04199295c18cf8af309f17ca6ed5e96f"] + strict-transport-security: [max-age=31536000; includeSubDomains] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode 4 + headers: {} + method: POST + uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/customers + response: + body: + string: !!binary | + H4sIADd7yFcAA5SRzVLDIBSF930Khj0SMtFpOyTd+QR14+6ae9PSBpIBapu3N9Q6dUQXLs85fPcP + vbnYnr2TD2ZwNVcPBWfk2gGN29X8ZfsslnzTLHR7CnGw5JsFY9pgs1RlVSm11HIWyZuzdg8uilkf + Vrszdgc8Xia7x53X8nuaXnfGhygcWGLO9DWP/kRcXqMe/krawY7gpswnC6bP3HE/uLxGB5fMO9Nb + MPGXfp4gEgqILE4j1RxnGY0l3pSFehLFShRqq1brolyrx1ct78CVP434P/4OfPa/3lx0hnoMyUlb + gY+mNePtlpWWP5wEyoxMu6CJogWP4TYNeA/TbVVA9BQCZdlXrfTzHwAAAP//AwCGeeqOLAIAAA== + headers: + cache-control: ['max-age=0, private, must-revalidate'] + content-encoding: [gzip] + content-type: [application/xml; charset=utf-8] + etag: [W/"c9ee1eb47ae044090870561fd14c8a0f"] + strict-transport-security: [max-age=31536000; includeSubDomains] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 201, message: Created} +- request: + body: !!python/unicode 81244118fake-valid-nonce + headers: {} + method: POST + uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/payment_methods + response: + body: + string: !!binary | + H4sIADh7yFcAA6xVTXPaMBC98ysY34UtINTJGOXWYy9NeuglI0tr0CBLriQncX99V8ZgQiBtp72x + b5/24/lJFPevtZ4+g/PKmnVCZ1kyBSOsVGazTh4fPpM8uWeTQjiQKhDBnWST6bQoldZIIVxKB95H + DFElmcyLVMkhFq0PtgZHEMnpfLmkFNOn6J5XKecDMbyGqVF6nQTXQpIOSc2v54StG266CxkfHEA4 + zHeBAK8BjAT5AUVbwbUKl8o72KBgFxKN9YFrggoCu13S7FORnkKHsVsTXNdDhOtmy+cXlztnLX7H + Mi3qqsQHtGtCOuAhihGmoWtgnUgMg6ohYfOMrkh2SzL6QG/vsvkdXX3Hj3g8MFRoG/l3FcYDvaPS + C5ZCmxm2zOg8z2Pe9Fj0IIkt2DflOU5yjA/ZrdUS7XVp1egYlEgortmj2Rn7YrDCiE1OpLIVUd63 + 3AhgkfQenfy7cn92R0ZW9GRA67HHryesIxq5EkoVxu324T5R8VYf5iyt1cBNwqI6kdYn98TWodoE + Td7qOOtJsfPMpL9KjXJ9f1JbE7aMzov0HXjG7IA7VGievaH26JEJ8nzWimsPw4mh+xa4Dlv87jCO + eYJFiqr5BkjrNNuG0Pi7NOXeQ/Cz0nFl4kuxwWVeeDdDK6QN72ow4amGsLXySduNTZ/RarPGbO7B + PCtnTSSsPTeytK/44B3r993QHtHIJTe7caQ36OTwri0ZzXNapEMQcWzvrD6x5wHokw4ajp74YhEf + fu9xK1sRol3GcyMWKb4tvXCqiTr7QVfuHO+GmxHsDgzLf3aLl02R7qOIt0b9aPunpez9iJurSoFj + y4XIl7SSQizEolqtFqubCm5othCQQynQxVePTv7Dg/EMprbEy90VjxzzA9th6/0tebd9fynH/7df + AAAA//8DALS0gHAVBwAA + headers: + cache-control: ['max-age=0, private, must-revalidate'] + content-encoding: [gzip] + content-type: [application/xml; charset=utf-8] + etag: [W/"d70acf9cd039d2cd7c9fd814e4fc9ada"] + strict-transport-security: [max-age=31536000; includeSubDomains] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 201, message: Created} +- request: + body: !!python/unicode 8zy3wg2062.11salefalse4 + headers: {} + method: POST + uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions + response: + body: + string: !!binary | + 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 + headers: + cache-control: [no-cache] + content-encoding: [gzip] + content-type: [application/xml; charset=utf-8] + strict-transport-security: [max-age=31536000; includeSubDomains] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 422, message: Unprocessable Entity} +- request: + body: !!python/unicode 4 + headers: {} + method: POST + uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/customers + response: + body: + string: !!binary | + H4sIADp7yFcAA5SRzVKDMBSF930KJvsIadWBTqA7n6Bu3F25F0glgUmChbeXIE4d0YXLc06++xd5 + GnUbvZN1qjM5E3cJi8iUHSpT5+z5/MRTdip2shyc7zTZYhdFUmFxENlDmh0SGc8ieHNWNmA8n/Ul + q69YXfBtnHSDtZXx9zS8rpR1nhvQFBnV5szbgVi8RC38lZSd7sFMG580qHbj9k1ntjUqGDfelV6d + 8r/0swSekIOP/NRTznCWXmlixT4RjzzJeCLOIjsm+6NIX2R8AxZ+6PF//A347L/cnFeKWnTBCVuB + 9apU/XrLexn/cAIYb8iwCyrPS7Do1mnAWpjWVQHRknO0yb5qhZ//AAAA//8DAAA7bHAsAgAA + headers: + cache-control: ['max-age=0, private, must-revalidate'] + content-encoding: [gzip] + content-type: [application/xml; charset=utf-8] + etag: [W/"a157c5b8330663b37de4bd4cf8d14f19"] + strict-transport-security: [max-age=31536000; includeSubDomains] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 201, message: Created} +- request: + body: !!python/unicode 31958930fake-valid-nonce + headers: {} + method: POST + uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/payment_methods + response: + body: + string: !!binary | + H4sIADt7yFcAA6xVwXLaMBC98xWM78I2JtTOGOXWYy9NeuglI0tr0CBLriST0K/vyhhMCKTttDf2 + 7ZN29/mtKB9eGzXdgXXS6FWUzpJoCpobIfV6FT09fiZ59EAnJbcgpCecWUEn02lZSaWQQpgQFpwL + GKJS0J/LMpZiiHnnvGnAEkSytLjLiywp43P0wKuldZ5o1sBUS7WKvO0gioekYrdz3DQt0/srGect + gD/2d4UArx60APEBRRnOlPTXrrewRsGuJFrjPFMEFQRaLNLkUxmfQ8e2O+3tvocIU+2Gza8Od8nK + fsfSHeoq+Qe0W0JaYD6I4ad+38IqEhh62UBE50m6JElBkvQxLe6T+X1afMePeDow3NC14u9uGA/0 + joqvWAptpukiSed5HvK6x4IHSShBv0nHsJNTfMxujBJor2ujBsegRFwyRZ/0VpsXjTeM2ORMKlMT + 6VzHNAcaSO/Ryb8r92c7MrKCJz1ajz59PWOd0MAVUEk/TncID4maderYZ2WMAqYjGtQJtD55IHYW + 1SZo8k6FXs8uu8xM+lVqpe3rk8Zov6HpvIzfgRfMPTCLCs2TN9QePTFBXPZaM+VgODFU3wBTfoPf + HcY2z7BAkQ1bA+msohvvW3cfx8w58G5WWSZ1eCnWOMwL28/QCnHL9g1o/9yA3xjxrMzaxDu02qzV + 6wfQO2mNDoSVY1pU5hUfvNP9fTW0RzByxfR2bOkNOjm+awua5nlaxkMQcCxvjTqz5xHokxZahp74 + YhAffh9wIzrug13GcyMWKK6rHLeyDTq7QVdmLdsPm+HNFjRdLrKCN2V8iALeafmj65+WqvcjTi5r + CZYuMp4v0lpwnvGsXi6z5V0Nd2mSccih4riyN49O/sODsQPdGOLE9oZHTvmBbbH0YUveTd8v5fj/ + 9gsAAP//AwBb0EAMFQcAAA== + headers: + cache-control: ['max-age=0, private, must-revalidate'] + content-encoding: [gzip] + content-type: [application/xml; charset=utf-8] + etag: [W/"d6fde2b51f7dbc6d70df95c4cae0b156"] + strict-transport-security: [max-age=31536000; includeSubDomains] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 201, message: Created} +- request: + body: !!python/unicode 31958930fake-valid-nonce + headers: {} + method: POST + uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/payment_methods + response: + body: + string: !!binary | + H4sIADx7yFcAA6xVwXLaMBC98xWM78I2JtRkjHLrsZcmPfSSkaW10SBLjiST8PddGYMJgbSd9sa+ + 97TaXb8VxcNbo6Y7sE4avY7SWRJNQXMjpK7X0dPjV5JHD3RScAtCesKZFXQynRalVAolhAlhwbmA + ISoF9dsilmKIeee8acASRLJ0dZevsqSIz9GDrpLWeaJZA1Mt1TrytoMoHkjFbnPcNC3T+yuM8xbA + H+u7IoA3D1qA+ESiDGdK+mvpLdQ4sCtEa5xniuAEga4WafKliM+hY9md9nbfQ4SpdsPmV5u7VGW/ + U+kO5yr5J7Jbg7TAfBiGn/p9C+tIYOhlAxGdJ+mSJCuSpI/p6j6Z36ern/gRTweGDF0r/i7DeKB3 + VHzFUmgzTRdJOs/zwOseCx4k4Qr6QzqGlZziI7sxSqC9rrUaHIMj4pIp+qS32rxqzDBik7NRmYpI + 5zqmOdAg+ohO/n1yf7Yjoyp40qP16NP3M9UJDVoBpfRjd4fwQFSsU8c6S2MUMB3RiikHQdezB2Vn + cdwEXd6pUOxZtktm0u9SK21fAGmM9huazov4A3ih3AOzOKJ58k7aoycliBvFDmyv3ABTfoMfHsYy + z7AgkQ2rgXRW0Y33rbuPY+YceDcrLZM6PBU1NvPK9jP0QtyyfQPaPzfgN0Y8K1ObeIdem7W6fgC9 + k9boIFg7pkVp3vDFO+Xvb0N/BCeXTG/Hkt6hk+PDtqBpnqdFPAQBx+utUWf+PAI9aaFlaIpvBvHh + 9wE3ouM++GU8N2JB4rrScSvbMGc3zJVZy/bDanizBU3Ll5ftvC7iQxTwTsuXrn9byt6Q2LmsJFi6 + yHi+SCvBecazarnMlncV3KVJxiGHkuPO3jw6+Q8vxg50Y4gT2xseOfGD2uLVhzX50H2/leMf3C8A + AAD//wMAibK6VRYHAAA= + headers: + cache-control: ['max-age=0, private, must-revalidate'] + content-encoding: [gzip] + content-type: [application/xml; charset=utf-8] + etag: [W/"6cd59e5e3a048f7159fe59e4fba3ce18"] + strict-transport-security: [max-age=31536000; includeSubDomains] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 201, message: Created} +- request: + body: !!python/unicode bqqk2g103.3salefalse4 + headers: {} + method: POST + uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions + response: + body: + string: !!binary | + H4sIAD17yFcAA9xYTW/jNhC951cEvjOSbCdrB4oWBYqiPbSXbHrYS0BRY4tridSSlGPn13coSrIU + UUkuBYrerJnHIWc4H4+Ov57K4voISnMpHhbRTbi4BsFkxsX+YfH07TeyWXxNrmKjqNCUGUQlV9fX + Mc+SL8vl3WYtznGAH1amDTW1Tmhtcqn4K2Rx0Iqs1pwrSDQtIA6an1bGaqVwtzPhWhLcFJKnx1/j + YCq2YFrKWpgkClc3qzAO2k+rKUGxnApDKGNWSPBA2qTbw/rL62v6Y6nubn/EgQ/VHLtOiUd3LXjx + sDCqhkXgdqHagPoUVKoMkR4FU0ANZISaaxuEh0WGn4aXsEiWYXRHwi0Jo2/R9j5c3i/D7xiKfkGz + vq6yz6+PcP1lQRtwbSR6YD/cLa6i7e1mawPqwoHSHVfaEEFLeHt+VBZ0XsdkWVFx9migpLzwyF8g + 1dz4bFW5FD75jp4mUQ2GbsUpLwrM3ouL5vDvOqeNAsB8yDIFWvu8PxkQmb2FWUghGS248ZlXsMeq + 84VIYnkVrkC26yj8EgdDUXdszFF1nvfKqe0KQosqp8tPoVYfoUSN98HZ9K4G14Ou7WqR+Qql1+g2 + 0alS9DxSYjwHXclnpKLKcAyHBmMKKAGLdbzCZ/zSvj4yPzCbUsNyLybnVTXMRl9K/y9T8p0E+c/k + 4vB22t5IdhyKTHf+2AxivKJuXKyxwsaSQfsZrIzpURNQSiqCwa2k0OCNSYMbxGyMTv7EKfcuoDMx + vu43oD+clXcxjf/H43TlVGihe5wpL/SMmh/gygPHlJ5mRFwpyXA3jENXVrSBN5bC9ffH31cY0vdA + Yyvjo0RhGA6XTw/q0RlM/eSXCjVHy1DmEE1os4zbk2Dwp7CJr0fJmb2gHV48rsCkS0FNI1Jb+oC7 + OI4wgzL0RBzB8argBGXVUYBUygKoWCQ7WmjLrnpARznQC8Ko6kagkQcQSfrz52G5R3jz5TQpF8k6 + jJabje3TYtiC1km02URx0H60VYZGScPm/uaaYrb0312Xqbhyl1lKYfIkWsbBRDjBnoEq5DPLcARu + pO2+7bwntkc1nPTp8cICLtLLKXNZNOH2dx5e0j2QWhVJbkyl74OAauzu+iZVlAtbOG3G32DLxRZw + tk3/uQTM1uy5kHsZHNH/m0rsv4I4ciWFBTxoKrJUnpB99PbbtqKgotg9/pI2Ad1vp8mBFibHEyMV + FgchX0QcDGQOlEHKzUXvPltVrfDiMAv3dWGJ3wD1VtPPEMtocUxeoANZ1wbPShYDRCdow6d1jV0U + p6A4XDAj6bgryx2xWioYJHa7qbSLk8xq1jTay9YXmQPVgv+soa0kFGPkObZilaxXbLOOdhljK7ba + 3d2t7m53cIvvBwYbSBnm+OxSZ/kIopREZ4eZSuv17RgYV1r7HiI5x7RU5xHV6Md0gwA01F6gLU+k + 86goq09S/B7fW3j3IdYgZt9SLqIaQ6Bkzk1F6+KANdtI+gMOaJGW2M8goRXHg0zlzs3grZ+9pI2N + 64wF9dOsOtVM8WqWhg30fR9rOCapcOzLjCDTITaKnsp/g8RjKePF4pHf7GPHA8FJ4OGQGddNUnt1 + 4KzILstmetLcAwi7yPRsY6PIz+wTGv2aSdxe7yYEPmcFTK3inR/tSNsBzA0ju618Ie42J1oMQ1or + 7ShyBgbfgB2xGqv8dzPg1/7tx5jJvwafhMPJBgD7s/Ifw741MFOR2/kM1ox56DPeyIzv1vOqNuBL + jXawEC6QrNXuvWKHqWssz7axxMEcaEx3Bo6OWdGQ8cyCPrbVcKSPbPVEyuQ4QgmWl807wKPv5Dhi + o+aRXP0DAAD//wMAwfoLxZYSAAA= + headers: + cache-control: ['max-age=0, private, must-revalidate'] + content-encoding: [gzip] + content-type: [application/xml; charset=utf-8] + etag: [W/"ec201d8c98adffd9d55b0f247e2954f3"] + strict-transport-security: [max-age=31536000; includeSubDomains] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 201, message: Created} +- request: + body: null + headers: {} + method: PUT + uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions/722684ny/void + response: + body: + string: !!binary | + H4sIAD57yFcAA9xYTW/jNhC9768IfGck2U7WCRQFBYqiPbSX3fSwl4CixhZjiVRIyrHz6zsUJVmK + qCSXBRa9WTOPQ85wPh4d3x/L4uIASnMp7hbRZbi4AMFkxsXubvHw/Q+yWdwnX2KjqNCUGUQlXy4u + Yp4lX5fL681anOIAP6xMG2pqnRwkzyCLg/bTasypgkTTAuKg+WllrFYKdzoRriXBDSF5+PZ7HEzF + FkxLWQuTROHqchXGQftpNSUollNhCGXMCgkeRpv0Zr/++vqaPi3V9dVTHPhQzZHrlHh0F4IXdwuj + algEbheqDahPQaXKEOlRMAXUQEaoubBBuFtk+Gl4CYtkGUbXJLwhYfQ9urkNl7fL8AeGol/QrK+r + 7PPrI1x/XtAGXBuJHtgPd4Or6OZqc2MD6sKB0i1X2hBBS3h7flQWdF7HZFlRcfJooKS88MhfINXc + +GxVuRQ++ZYeJ1ENhm7FKS8KzNyzi2b/c53TRgFgPmSZAq193h8NiMzewiykkIwW3PjMK9hhxflC + JLG8ClcgN+so/BoHQ1F3bMxRdZr3yqntCkKLKqfLT6FWH6FEjffB2fSuBteDrm1rkfkKpdfoNtGp + UvQ0UmI8Bx3JZ6SiynAMhwZjCigBi3W8wmec1iaXir9+bH5gNqWG5V5MzqtqmI2+lP5fpuQ7CfLL + 5OLwdtreSLYcikx3/tgMYryiblysscLGkkH7GayM6UETUEoqgsGtpNDgjUmDG8RsjE7+xin3LqAz + Mb7uN6C/nJV3MY3/h8N05VRooTucKS/0hJoncOWBY0pPMyKulGS4G8ahKyvawBtL4frHtz9XGNL3 + QGMr46NEYRgOl08P6tEZTP3ktwo1B8tQ5hBNaLOM25Ng8Kewia/IeZi9oC1ePK7ApEtBTSNSW/qA + uziOMIMy9EgcwfGq4Ahl1VGAVMoCqFgkW1poy656QEc50AvCqOpGoJF7EEn6/Lxf7hDefDlNykWy + DqPlZmP7tBi2oHUSbTZRHLQfbZWhUdKwuX+5ppgt/XfXZSqu3GWWUpg8iZZxMBFOsCegCvnMMhyB + G2m7bzvvie1RDR99+HZmAWfp+ZS5LJpw+zsPL+kOSK2KJDem0rdBQDV2d32ZKsqFLZw24y+x5WIL + ONmm/1gCZmv2WMidDA7o/2UldvcgDlxJYQF3mooslUdkH739tq0oqCh2j3+kTUD322lyoIXJ8cRI + hcVeyBcRBwOZA2WQcnPWu89WVSu8OMzCXV1Y4jdAvdX0M8QyWhyTZ+hA1rXBk5LFANEJ2vBpXWMX + xSko9mfMSDruynJLrJYKBondbirt4iSzmjWN9rz1WeZAteDPNbSVhGKMPMdWrJL1im3W0TZjbMVW + 2+vr1fXVFq7w/cBgAynDHJ9d6iwfQJSS6Gw/U2m9vh0D40pr30Ik55iW6jSiGv2YbhCAhtoLtOWJ + dB4VZfVJit/jewvtq+vMZIYPsQYx+5ZyEdUYAiVzbipaF3us2UbSH3BAi7TEfgYJrTgeZCp3bgZT + P3+y69P356/gdi9pU8INhIL62WWdaqZ4Ncs+B/q+fTfUmlTIdmRGkOARG0FPw3uDxGMp48Xikd/s + Y6ciwQHooc4Z100te3XgrMiuuGZa8dy7D5vn9Gxjo0hL7T8H6NdMvfZ6NxjxFS9gahXv/GAn+RZg + bgbbbeULcbc50WIY0lpp9zLIwODTt+OTY5X/bgbPCv/2Y8zkz5JPwuFoA4BjSfmPYZ9YmKlIaX0G + a8Y8rwa8kRnfredVbcCXGu08JVwgR63dM81yCNdPH20/jYM50JjlDRwdk8Eh0ZsFfWyroYYf2er5 + o8mRORAsL5t3gEffynHERs0j+fIfAAAA//8DAIeXRAiJEwAA + headers: + cache-control: ['max-age=0, private, must-revalidate'] + content-encoding: [gzip] + content-type: [application/xml; charset=utf-8] + etag: [W/"1e4587addc5ec753a958a02f158cd48b"] + strict-transport-security: [max-age=31536000; includeSubDomains] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode bkhpqm10.011443524salefalse2 + headers: {} + method: POST + uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions + response: + body: + string: !!binary | + H4sIAD97yFcAA9xYS2/jNhC+768IfGck2U7WCRQtChQL9NBe9oFtLwFFjS2uJVJLUn7sr+9QlGTJ + opL0UKDozZr5OOQM5/HR8YdTWdwcQGkuxdMiug0XNyCYzLjYPS2+fP5INosPybvYKCo0ZQZRybub + m5hnSbq8O+6PSscBfliZNtTUOqG1yaXiPyGLg1ZkteZcQaJpAXHQ/LQyViuFu50J15LgppB8+fRr + HEzFFkxLWQuTROFtGMZB+2UVJSiWU2EIZcwKCZ5Hm/Rhv37/82f6fanu777HgQ/VnLpOiUd3I3jx + tDCqhkXgdqHagHoTVKoMkR4FU0ANZISaGxuDp0WGn4aXsEiWYXRPwgcSRp+jh8dw+bhc/YWR6Bc0 + 6+sq+2frLwvaeGsj0QP74S4xitbr1d1y3V0iSrdcaUMELeH6/Kgs6LyOybKi4uzRQEl54ZEfIdXc + +GxVuRQ++ZaeJlENhm7FKS8KTN6Li+vjv+ucNgoA8yHLFGjt8/5kQGT2FmYhhWS04MZnXsEOi84X + IonVVbj6eFhH4fs4GIq6Y2OOqvO8V05tVxBaVDldvgm1eg0larwPzqZ3NbgedG1bi8xXKL1Gt4lO + laLnkRLjOWhKPiMVVYZjODQYU0AJWKzjFT7jl+71mvmB2ZQalnsxOa+qYTb6Uvp/mZIvJMh/JheH + t9P2RrLlUGS688dmEOMVdeNiiRU2lgzaz2BlTA+agFJSEQxuJYUGb0wa3CBmY3TyO065FwGdifF1 + X4F+c1ZexDT+Hw7TlVOhhe5wphzpGTXfwZUHjik9zYi4UpLhbhiHrqxoA28sfb37Fv35EUP6Emhs + ZXyUKLREYE47s9Jg6ie/VKg5WIIyh2hCm2XcngSDP4VNfD1IzuwFbfHicQUmXQpqGpHa0gfcxXGE + GZShJ+IIjlcFJyirjgKkUhZAxSLZ0kJbctUDOsqBXhBGVTcCjdyDSNJ9Xv0oEd58OU3KRbIOo+Vm + Y/u0GLagdRJtNlEctB9tlaFR0pC5r1xTzJb+u+syFVfuMkspTJ5EWEET4QR7BqqQzyzDEbiRtvu2 + 857YHtVQ0i+fLizgIr2cMpdFE25/5+El3QGpVZHkxlT6MQioxu6ub1NFubCF02b8LbZcbAFn2/Sf + S8BszZ4LuZPBAf2/rcTuA4gDV1JYwJOmIkvlCdlHb79tKwoqit3jD2kT0P12mhxoYXI8MTJhsRfy + KOJgIHOgDFJuLnr32apqhReHWbirC0v8BqhrTT9DLKPFMXmBDmRdGzwrWQwQnaANn9Y1dlGcgmJ/ + wYyk464st8RqqWCQ2O2m0i5OMqtZ02gvW19kDlQL/qOGtpJQjJHn2IpVsl6xzTraZoyt2Gp7f7+6 + v9vCXRSuGGwgZZjjs0ud5QOIUhKd7Wcqrde3Y2Bcae1ziOQc01KdR1SjH9MNAtBQe4G2PJHOo6Ks + 3kjxe3xv4cV3WIOYe0q5gGqMgJI5NxWtiz2WbCPpzzdgRVpiO4OEVhzPMZU7L4NrN3tJGxrXGAvq + Z1l1qpni1SwLG+j7NtZQTFLh1JcZQaJDbBA9hX+FxGMp48Xika/2sdOB4CDwUMiM6yanvTpwVmSX + ZDMtae79g01keraxUaRn9gGNfs3kba93AwJfswKmVvHOD3aibQHmZpHdVh6Ju82JFsOQ1ko7hpyB + wSdgx6vGKv/dDOi1f/sxZvKfwRvhcLIBwPas/MewTw3MVKR2PoM1Yx72jDcy47v1vKoN+FKjnSuE + C+RqtXuu2Fnq+sqz7StxMAcas52Bo2NSNCQ8s6DXbTUU6TVbPY8yOU5QguVl8w7w6Fs5jtioeSTv + /gYAAP//AwD03ieQlBIAAA== + headers: + cache-control: ['max-age=0, private, must-revalidate'] + content-encoding: [gzip] + content-type: [application/xml; charset=utf-8] + etag: [W/"5951b0b10a3fe580c59d1782044bb1d0"] + strict-transport-security: [max-age=31536000; includeSubDomains] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 201, message: Created} +- request: + body: null + headers: {} + method: PUT + uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions/b25wkwrs/void + response: + body: + string: !!binary | + H4sIAEB7yFcAA9xYS2/jNhC+51cYvjOSbCfrLBQtChQL9NBe9oG2lwVFjS2uJVJLUn7k13coSrIU + UUmAosCiN2vm45AznMdHxx/OZbE4gtJcisdldBsuFyCYzLjYPy6/fP5ItssPyU1sFBWaMoOo5Gax + iHmWpKu70+GkdBzgh5VpQ02tk6PkGWRx0H5ajblUkGhaQBw0P62M1UrhThfCtSS4ISRfPv0aB1Ox + BdNS1sIkUXgbhnHQfllFCYrlVBhCGbNCgmfRJn04bN49PaXfV+r+7nsc+FDNieuUeHQLwYvHpVE1 + LAO3C9UG1JugUmWI9CiYAmogI9QsbAwelxl+Gl7CMlmF0T0JH0gYfY4e3oer96v13xiJfkGzvq6y + t6/f4Prrgjbe2kj0wH64C4yizWZ9t9p0F4jSHVfaEEFLeH5+VBZ0XsdkWVFx8WigpLzwyE+Qam58 + tqpcCp98R8+TqAZDt+KUFwUm7tXFzem/dU4bBYD5kGUKtPZ5fzYgMnsLs5BCMlpw4zOvYI8F5wuR + xOoqXH08bKLwXRwMRd2xMUfVZd4rp7YrCC2qnK7ehFq/hhI13gdn07saXA+6tqtF5iuUXqPbRKdK + 0ctIifEcNCSfkYoqwzEcGowpoAQs1vEKn3Fam1wq/vS6+YHZlBqWezE5r6phNvpS+n+Zki8kyE+T + i8PbaXsj2XEoMt35YzOI8Yq6cbHCChtLBu1nsDKmR01AKakIBreSQoM3Jg1uELMxOvkdp9yLgM7E + +LqfgX5zVl7ENP4fj9OVU6GF7nGmnOgFNd/BlQeOKT3NiLhSkuFuGIeurGgDbyx9vfsz+usjhvQl + 0NjK+ChRaInAnHZmpcHUT36pUHO0BGUO0YQ2y7g9CQZ/Cpv4ipSH2Qva4cXjCky6FNQ0IrWlD7iL + 4wgzKEPPxBEcrwrOUFYdBUilLICKZbKjhbbkqgd0lAO9IIyqbgQaeQCRpIe8+lEivPlympSLZBNG + q+3W9mkxbEGbJNpuozhoP9oqQ6OkIXNfuaaYLf1312UqrtxlllKYPImwgibCCfYCVCGfWYUjcCNt + 923nPbE9qqGjXz5dWcBVej1lLosm3P7Ow0u6B1KrIsmNqfT7IKAau7u+TRXlwhZOm/G32HKxBVxs + 0/9WAmZr9q2Qexkc0f/bSuw/gDhyJYUFPGoqslSekX309tu2oqCi2D3+kDYB3W+nyYEWJscTIxMW + ByFPIg4GMgfKIOXmqnefrapWeHGYhfu6sMRvgHqu6WeIZbQ4Jq/QgaxrgxcliwGiE7Th07rGLopT + UByumJF03JXljlgtFQwSu91U2sVJZjVrGu1166vMgWrBf9TQVhKKMfIcW7FKNmu23US7jLE1W+/u + 79f3dzu4i8I1gy2kDHN8dqmzfARRSqKzw0yl9fp2DIwrrX0KkZxjWqrLiGr0Y7pBABpqL9CWJ9J5 + VJTVG58IPb630D66rkxm+A5rEHNPKRdQjRFQMuemonVxwJJtJP35BqxIS2xnkNCK4zmmcudlMHXz + 33u+ecnz6evzJ/C6l7QJ4cZBQf3csk41U7ya5Z4Dfd+8G2JNKuQ6MiNI74gNoKfdPUPisZTxYvHI + z/axM5Hg+PMQ54zrppK9OnBWZFdaM4147tWHrXN6trFRJKX2bwP0a6Zae70bi/iGFzC1ind+tHN8 + BzA3ge228kTcbU60GIa0Vtq9CzIw+PDt2ORY5b+bwaPCv/0YM/mn5I1wONsA4FBS/mPYBxZmKhJa + n8GaMc+bAW9kxnfreVUb8KVGO00JF8hQa/dIswzCddNvtpvGwRxozPEGjo6p4JDmzYJet9UQw9ds + 9ezR5MgbCJaXzTvAo+/kOGKj5pHc/AMAAP//AwA6f3MShhMAAA== + headers: + cache-control: ['max-age=0, private, must-revalidate'] + content-encoding: [gzip] + content-type: [application/xml; charset=utf-8] + etag: [W/"d0fa43a6a3f2c132491ff3bb76e3235e"] + strict-transport-security: [max-age=31536000; includeSubDomains] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode bkhpqm103.311443524salefalse2 + headers: {} + method: POST + uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions + response: + body: + string: !!binary | + H4sIAEJ7yFcAA9xYTW/jNhC951cEvjOSbMfrLBQtWhQFCrQ9dDc97GVBUWOLa4nUkpRj59d3KEqy + ZFFJLgWK3qyZxyFnOB+Pjj+dyuL2CEpzKR4X0V24uAXBZMbF/nHx9OVXsl18Sm5io6jQlBlEJTe3 + tzHPklKI+/2KZXGAH1amDTW1Tmhtcqn4C6CmFVmtOVeQaFpAHDQ/rYzVSuFuZ8K1JLgpJE+ff4mD + qdiCaSlrYZIoXN2twjhoP62mBMVyKgyhjFkhwQNpkz4c1h9eXtLvS7W5/x4HPlRz7DolHt2t4MXj + wqgaFoHbhWoD6l1QqTJEehRMATWQEWpubRAeFxl+Gl7CIlmG0YaEDySMvkQPH8Plx+X9VwxFv6BZ + X1fZ+9dvcP1lQRtwbSR6YD/cLUbRer26X667W0TpjittiKAlXJ8flQWd1zFZVlScPRooKS888mdI + NTc+W1UuhU++o6dJVIOhW3HKiwKz9+Li+vnfdU4bBYD5kGUKtPZ5fzIgMnsLs5BCMlpw4zOvYI9V + 5wuRxPIqXIE8rKPwQxwMRd2xMUfVed4rp7YrCC2qnC7fhVq9hRI13gdn07saXA+6tqtF5iuUXqPb + RKdK0fNIifEcdCWfkYoqwzEcGowpoAQs1vEKn/FL+3rL/MBsSg3LvZicV9UwG30p/b9MyVcS5D+T + i8PbaXsj2XEoMt35YzOI8Yq6cbHEChtLBu1nsDKmR01AKakIBreSQoM3Jg1uELMxOvkDp9yrgM7E + +LqvQL85K69iGv+Px+nKqdBC9zhTnukZNd/BlQeOKT3NiLhSkuFuGIeurGgDbyz9vPn6+1+fMaSv + gcZWxkeJwjAcLp8e1KMzmPrJTxVqjpahzCGa0GYZtyfB4E9hE1+PkjN7QTu8eFyBSZeCmkaktvQB + d3EcYQZl6Ik4guNVwQnKqqMAqZQFULFIdrTQll31gI5yoBeEUdWNQCMPIJL0kFc/SoQ3X06TcpGs + w2i53do+LYYtaJ1E220UB+1HW2VolDRs7m+uKWZL/911mYord5mlFCZPIqygiXCCPQNVyGeW4Qjc + SNt923lPbI9qOOnT5wsLuEgvp8xl0YTb33l4SfdAalUkuTGV/hgEVGN313epolzYwmkz/g5bLraA + s23630rAbM2+FXIvgyP6f1eJ/ScQR66ksIBHTUWWyhOyj95+21YUVBS7x5/SJqD77TQ50MLkeGKk + wuIg5LOIg4HMgTJIubno3WerqhVeHGbhvi4s8RugrjX9DLGMFsfkBTqQdW3wrGQxQHSCNnxa19hF + cQqKwwUzko67stwRq6WCQWK3m0q7OMmsZk2jvWx9kTlQLfiPGtpKQjFGnmMrVsl6xbbraJcxtmKr + 3Waz2tzv4B7fDwy2kDLM8dmlzvIRRCmJzg4zldbr2zEwrrT2PURyjmmpziOq0Y/pBgFoqL1AW55I + 51FRVu+k+D2+t/DqQ6xBzL6lXEQ1hkDJnJuK1sUBa7aR9Acc0CItsZ9BQiuOB5nKnZvBtZ+9pI2N + 64wF9dOsOtVM8WqWhg30fR9rOCapcOzLjCDTITaKnsq/QuKxlPFi8chX+9jxQHASeDhkxnWT1F4d + OCuyy7KZnjT3AMIuMj3b2CjyM/uERr9mErfXuwmBz1kBU6t450c70nYAc8PIbiufibvNiRbDkNZK + O4qcgcE3YEesxir/3Qz4tX/7MWbyr8E74XCyAcD+rPzHsG8NzFTkdj6DNWMe+ow3MuO79byqDfhS + ox0shAska7V7r9hh6hrLN9tY4mAONKY7A0fHrGjIeGZBb9tqONJbtnoiZXIcoQTLy+Yd4NF3chyx + UfNIbv4BAAD//wMAQ3SrFJYSAAA= + headers: + cache-control: ['max-age=0, private, must-revalidate'] + content-encoding: [gzip] + content-type: [application/xml; charset=utf-8] + etag: [W/"d272b4c993bd2809ff0c6f4c226c9a1a"] + strict-transport-security: [max-age=31536000; includeSubDomains] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 201, message: Created} +- request: + body: 103.3 + headers: {} + method: PUT + uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions/mnn5g3cd/submit_for_settlement + response: + body: + string: !!binary | + H4sIAEJ7yFcAA9xYTW/jNhC951cEvjOSbMfrLBQtWhQFCrQ9dDc97CWgqLHFWCK1JOXY++s7FCVZ + iqgklwUWvVkzj0POcD4eHX86lcX1EZTmUtwvoptwcQ2CyYyL/f3i4cvvZLv4lFzFRlGhKTOISq6u + r2OeJaUQt/sVy+IAP6xMG2pqneg6LbkxkD3upHrUYEwBJQgTBy3AYs25gkTTAuKg+WllrFYK9z4T + riXBI0Dy8Pm3OJiKLZiWshYmicLVzSqMg/bTakpQLKfCEMqYFRI8njbp3WH94fv39GmpNrdPceBD + NU7UKfHorgUv7hdG1bAI3C5UG1DvgkqVIdKjYAooxolQc22DcL/I8NPwEhbJMow2JLwjYfQluvsY + Lj8ub79iKPoFzfq6yt6/foPrLwvagGsj0QP74e40itbr1e1y3d0pSndcaUMELeHl+VFZ0Hkdk2VF + xdmjgZLywiN/hlRz47NV5VL45Dt6mkQ1GLoVp7woMJcvLq6ff6xz2igAzIcsU6C1z/uTAZHZW5iF + FJLRghufeQV7rEFfiCSWV+EK5G4dhR/iYCjqjo05qs7zXjm1XUFoUeV0+S7U6i2UqPE+OJve1eB6 + 0LVdLTJfofQa3SY6VYqeR0qM56BH+YxUVBmO4bh0pBcrfMZpbXKp+Pe3zQ/MptSw3IvJeVUNs9GX + 0v/LlHwlQX6aXBzeTtsbyY5DkenOH5tBjFfUjYslVthYMmg/g5UxPWoCSklFMLiVFBq8MWlwg5iN + 0clfOOVeBXQmxtf9AvSHs/IqpvH/eJyunAotdI8z5ZmeUfMErjxwTOlpRsSVkgx3wzh0ZUUbeGPp + 183XP//5jCF9DTS2Mj5KFIbhcPn0oB6dwdRPfqlQc4TMu7pBNKHNMm5PgsGfwia+HiVn9oJ2ePG4 + ApMuBTWNSG3pA+7iOMIMytATcQTHq4ITlFVHAVIpC6BikexooS276gEd5UAvCKOqG4FGHkAk6SGv + vpUIb76cJuUiWYfRcru1fVoMW9A6ibbbKA7aj7bK0Chp2Ny/XFPMlv676zIVV+4ySylMnkRYQRPh + BHsGqpDPLMMRuJG2+7bzntge1TDUh88XFnCRXk6Zy6IJt7/z8JLugdSqSHJjKv0xCKjG7q5vUkW5 + sIXTZvwNtlxsAWfb9B9LwGzNHgu5l8ER/b+pxP4TiCNXUljAvaYiS+UJ2Udvv20rCiqK3eNvaRPQ + /XaaHGhhcjwxUmFxEPJZxMFA5kAZpNxc9O6zVdUKLw6zcF8XlvgNUC81/QyxjBbH5AU6kHVt8Kxk + MUB0gjZ8WtfYRXEKisMFM5KOu7LcEaulgkFit5tKuzjJrGZNo71sfZE5UC34txraSkIxRp5jK1bJ + esW262iXMbZiq91ms9rc7uAW3w8MtpAyzPHZpc7yEUQpic4OM5XW69sxMK609nVEco5pqc4jqtGP + 6QYBaKi9QFueSOdRUVbvpPg9vrfQvrouTGb4EGsQs28pF1GNIVAy56aidXHAmm0k/QEHtEhL7GeQ + 0IrjQaZy52Yw9fMHu/6eF+nPEIhe0iaJGxEF9fPNOtVM8WqWjw70fUNvyDapkP/IjCDlIzamnhb4 + AonHUsaLxSO/2MfOSYIj0UOmM66b6vbqwFmRXbnNNOe5lyC20+nZxkaRqNr/EtCvmQru9W5U4rte + wNQq3vnRzvYdwNxUttvKZ+Juc6LFMKS10u6tkIHBx3DHMMcq/90MHhr+7ceYyd8n74TDyQYAB5Xy + H8M+ujBTkeT6DNaMed4ReCMzvlvPq9qALzXaCUu4QNZau4ebZRWuwz7aDhsHc6Ax7xs4OqaHQ+o3 + C3rbVkMW37LVM0qTI5cgWF427wCPvpPjiI2aR3L1HwAAAP//AwA98B7VrRMAAA== + headers: + cache-control: ['max-age=0, private, must-revalidate'] + content-encoding: [gzip] + content-type: [application/xml; charset=utf-8] + etag: [W/"a736d5f8d3236de3d18b052dcfae0cc2"] + strict-transport-security: [max-age=31536000; includeSubDomains] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode bkhpqm103.311443524salefalse2 + headers: {} + method: POST + uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions + response: + body: + string: !!binary | + H4sIAER7yFcAA9xYTW/jNhC951cEvjOSbCfrLBQtChQL9NAF2t0t0F4WFDWyGEuklqQce399h6Ik + SxGVpIcCRW/WzOOQM5yPR8cfTlV5fQSluRQPq+gmXF2DYDLjYv+w+vrlI9mtPiRXsVFUaMoMopKr + 6+uYZ8kufwoPB9jFAX5YmTbUNDqhjSmk4j8gi4NOZLXmXEOiaQlx0P60MtYohbudCdeS4KaQfP38 + cxzMxRZMK9kIk0Th5mYTxkH3aTUVKFZQYQhlzAoJHkib9P6wfffjR/q4Vne3j3HgQ7XHblLi0V0L + Xj6sjGpgFbhdqDag3gSVKkOkR8EUUAMZoebaBuFhleGn4RWsknUY3ZHwnoTRl+j+fbh+v979haEY + FrTrmzr7Z+svC7qAayPRA/vhbjGKttvN7Xrb3yJKc660IYJW8Pz8qCzpso7Jqqbi7NFARXnpkT9B + qrnx2aoLKXzynJ5mUQ3GbsUpL0vM3ouL26d/1zltFADmQ5Yp0Nrn/cmAyOwtLEJKyWjJjc+8gj1W + nS9EEsurdAVyv43Cd3EwFvXHxhxV52WvnNquILSsC7p+E2rzGko0eB+cze9qdD3oWt6IzFcog0Z3 + iU6VoueJEuM56ko+IzVVhmM4NBhTQgVYrNMVPuOX9vWa+ZHZlBpWeDEFr+txNvpS+n+Zki8kyH8m + F8e30/VGknMoM937YzOI8Zq6cbHGCptKRu1ntDKmR01AKakIBreWQoM3Ji1uFLMpOvkVp9yLgN7E + 9LqfgX5xVl7EtP4fj/OVc6GF7nGmPNEzah7BlQeOKT3PiLhWkuFuGIe+rGgLby19+v3+45+/YUhf + Ak2tTI8ShWE4Xj4/qEdnMPWTn2rUHC1DWUK0oc0ybk+CwZ/DZr4eJWf2gnK8eFyBSZeCmkeksfQB + d3EcYQFl6Ik4guNVwQmquqcAqZQlULFKclpqy64GQE850AvCqOpHoJEHEEl6KOrvFcLbL6dJuUi2 + YbTe7WyfFuMWtE2i3S6Kg+6jqzI0Slo29wfXFLNl+O67TM2Vu8xKClMkEVbQTDjDnoEq5DPrcAJu + pd2+3bwntke1nPTr5wsLuEgvpyxk2Ybb33l4RfdAGlUmhTG1fh8EVGN31zepolzYwuky/gZbLraA + s2363yrAbM2+lXIvgyP6f1OL/QcQR66ksIAHTUWWyhOyj8F+11YU1BS7xydpE9D9dpoCaGkKPDFS + YXEQ8knEwUjmQBmk3Fz07rNTNQovDrNw35SW+I1QzzXDDLGMFsfkBTqS9W3wrGQ5QvSCLnxaN9hF + cQqKwwUzkU67ssyJ1VLBILHbzaV9nGTWsLbRXra+yByoEfx7A10loRgjz7EVq2S7YbttlGeMbdgm + v7vb3N3mcIvvBwY7SBnm+OJSZ/kIopJEZ4eFShv03RiYVlr3HiIFx7RU5wnVGMZ0iwA01F2gLU+k + 86io6jdS/AE/WHjxIdYiFt9SLqIaQ6BkwU1Nm/KANdtKhgOOaJGW2M8goTXHg8zlzs3guZ+DpIuN + 64wl9dOsJtVM8XqRho30Qx9rOSapcezLjCDTITaKnsp/hsRjKePF4pGf7WPHA8FJ4OGQGddtUnt1 + 4KzIPssWetLSAwi7yPxsU6PIz+wTGv1aSNxB7yYEPmcFzK3inR/tSMsBloaR3VY+EXebMy2GIW2U + dhQ5A4NvwJ5YTVX+uxnxa//2U8zsX4M3wuFkA4D9WfmPYd8amKnI7XwGG8Y89BlvZMF363ndGPCl + RjdYCBdI1hr3XrHD1DWWb7axxMESaEp3Ro5OWdGY8SyCXrfVcqTXbA1EyhQ4QgmWl807wKPnchqx + SfNIrv4GAAD//wMAHkOpPpYSAAA= + headers: + cache-control: ['max-age=0, private, must-revalidate'] + content-encoding: [gzip] + content-type: [application/xml; charset=utf-8] + etag: [W/"eae4d5c17368c3e1ad579ae949f1bded"] + strict-transport-security: [max-age=31536000; includeSubDomains] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 201, message: Created} +- request: + body: 103.3 + headers: {} + method: PUT + uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions/8fw0kke8/submit_for_settlement + response: + body: + string: !!binary | + H4sIAER7yFcAA9xY32/bNhB+718R+J2RZDupUygqBgwF9rACW9sB20tAUSeLtUSqJOXY/et3FCVZ + iqgkeyhQ7M26+3jkHe/HR8fvT1V5dQSluRT3q+g6XF2BYDLjYn+/+vL5A9mt3idvYqOo0JQZRCVv + rq5iniW7/DE8HGAXB/hhZdpQ0+hEN2nFjYHsIZfqQYMxJVQgTBx0AIs15xoSTUuIg/anlbFGKdz7 + TLiWBI8AyZdPv8bBXGzBtJKNMEkUbq43YRx0n1ZTgWIFFYZQxqyQ4PG0Se8O27ffv6df1+r25msc + +FCtE01KPLorwcv7lVENrAK3C9UG1KugUmWI9CiYAopxItRc2SDcrzL8NLyCVbIOo1sS3pEw+hzd + vQvX79a7fzAUw4J2fVNn/239ZUEXcG0kemA/3J1G0Xa7uVlv+ztFac6VNkTQCp6eH5UlXdYxWdVU + nD0aqCgvPfJHSDU3Plt1IYVPntPTLKrB2K045WWJuXxxcfv4Y53TRgFgPmSZAq193p8MiMzewiKk + lIyW3PjMK9hjDfpCJLG8Slcgd9sofBsHY1F/bMxRdV72yqntCkLLuqDrV6E2L6FEg/fB2fyuRteD + ruWNyHyFMmh0l+hUKXqeKDGeox7lM1JTZTiG49KRnqzwGaeNKaTi3182PzKbUsMKL6bgdT3ORl9K + /y9T8pkE+WlycXw7XW8kOYcy070/NoMYr6kbF2ussKlk1H5GK2N61ASUkopgcGspNHhj0uJGMZui + k99xyj0L6E1Mr/sJ6Ddn5VlM6//xOF85F1roHmfKIz2j5iu48sAxpecZEddKMtwN49CXFW3hraWP + f959+PsPDOlzoKmV6VGiMAzHy+cH9egMpn7yS42aI2Te1S2iDW2WcXsSDP4cNvP1KDmzF5TjxeMK + TLoU1DwijaUPuIvjCAsoQ0/EERyvCk5Q1T0FSKUsgYpVktNSW3Y1AHrKgV4QRlU/Ao08gEjSQ1F/ + qxDefjlNykWyDaP1bmf7tBi3oG0S7XZRHHQfXZWhUdKyub+4ppgtw3ffZWqu3GVWUpgiibCCZsIZ + 9gxUIZ9ZhxNwK+327eY9sT2qZahfPl1YwEV6OWUhyzbc/s7DK7oH0qgyKYyp9bsgoBq7u75OFeXC + Fk6X8dfYcrEFnG3Tf6gAszV7KOVeBkf0/7oW+/cgjlxJYQH3mooslSdkH4P9rq0oqCl2j4/SJqD7 + 7TQF0NIUeGKkwuIg5KOIg5HMgTJIubno3WenahReHGbhvikt8RuhnmqGGWIZLY7JC3Qk69vgWcly + hOgFXfi0brCL4hQUhwtmIp12ZZkTq6WCQWK3m0v7OMmsYW2jvWx9kTlQI/i3BrpKQjFGnmMrVsl2 + w3bbKM8Y27BNfnu7ub3J4QbfDwx2kDLM8cWlzvIRRCWJzg4LlTbouzEwrbTudUQKjmmpzhOqMYzp + FgFoqLtAW55I51FR1a+k+AN+sNC9ui5MZvwQaxGLbykXUY0hULLgpqZNecCabSXDAUe0SEvsZ5DQ + muNB5nLnZjD38we7/poX6c8QiEHSJYkbESX1880m1UzxepGPjvRDQ2/JNqmR/8iMIOUjNqaeFvgE + icdSxovFIz/Zx85JgiPRQ6Yzrtvq9urAWZF9uS0056WXILbT+dmmRpGo2v8S0K+FCh70blTiu17A + 3Cre+dHO9hxgaSrbbeUjcbc502IY0kZp91bIwOBjuGeYU5X/bkYPDf/2U8zs75NXwuFkA4CDSvmP + YR9dmKlIcn0GG8Y87wi8kQXfred1Y8CXGt2EJVwga23cw82yCtdhH2yHjYMl0JT3jRyd0sMx9VsE + vWyrJYsv2RoYpSmQSxAsL5t3gEfP5TRik+aRvPkXAAD//wMABr/rC60TAAA= + headers: + cache-control: ['max-age=0, private, must-revalidate'] + content-encoding: [gzip] + content-type: [application/xml; charset=utf-8] + etag: [W/"ce0ce4804d32bd4fcbfd1c015d2f64fb"] + strict-transport-security: [max-age=31536000; includeSubDomains] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode bkhpqm103.311443524salefalse2 + headers: {} + method: POST + uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions + response: + body: + string: !!binary | + H4sIAEZ7yFcAA9xYS2/jNhC+768IfGck2U7WCRQFBYoFemhRYB8FegkoamRxLZFaknLs/fUdipIs + RVSSS4GiN2vm45AznMdHx4+nqrw6gtJciodVdB2urkAwmXGxf1h9/fKJ7FaPyYfYKCo0ZQZRyYer + q5hnSZhXh+fN7nsc4IeVaUNNoxPamEIq/hOyOOhEVmvONSSalhAH7U8rY41SuNuZcC0JbgrJ18+/ + xsFcbMG0ko0wSRRurjdhHHSfVlOBYgUVhlDGrJDggbRJ7w7bjz9/pt/X6vYGT+lDtcduUuLRXQle + PqyMamAVuF2oNqDeBZUqQ6RHwRRQAxmh5soG4WGV4afhFaySdRjdkvCOhNGX6O4+XN+v7/7GUAwL + 2vVNnb17/SbE9ZcFXcC1keiB/XC3GEXb7eZmve1vEaU5V9oQQSt4eX5UlnRZx2RVU3H2aKCivPTI + nyHV3Phs1YUUPnlOT7OoBmO34pSXJWbvxcXt87/rnDYKAPMhyxRo7fP+ZEBk9hYWIaVktOTGZ17B + HqvOFyKJ5VW6ArnbRuHHOBiL+mNjjqrzsldObVcQWtYFXb8LtXkLJRq8D87mdzW6HnQtb0TmK5RB + o7tEp0rR80SJ8Rx1JZ+RmirDMRwajCmhAizW6Qqf8Uv7esv8yGxKDSu8mILX9TgbfSn9v0zJVxLk + P5OL49vpeiPJOZSZ7v2xGcR4Td24WGOFTSWj9jNaGdOjJqCUVASDW0uhwRuTFjeK2RSd/I5T7lVA + b2J63S9Avzkrr2Ja/4/H+cq50EL3OFOe6Rk138GVB44pPc+IuFaS4W4Yh76saAtvLf31+dPuzy8Y + 0tdAUyvTo0RhGI6Xzw/q0RlM/eSXGjVHy1CWEG1os4zbk2Dw57CZr0fJmb2gHC8eV2DSpaDmEWks + fcBdHEdYQBl6Io7geFVwgqruKUAqZQlUrJKcltqyqwHQUw70gjCq+hFo5AFEkh6K+keF8PbLaVIu + km0YrXc726fFuAVtk2i3i+Kg++iqDI2Sls1945pitgzffZepuXKXWUlhiiTCCpoJZ9gzUIV8Zh1O + wK2027eb98T2qJaTfv18YQEX6eWUhSzbcPs7D6/oHkijyqQwptb3QUA1dnd9nSrKhS2cLuOvseVi + Czjbpv9UAWZr9lTKvQyO6P91LfaPII5cSWEBD5qKLJUnZB+D/a6tKKgpdo8/pE1A99tpCqClKfDE + SIXFQchnEQcjmQNlkHJz0bvPTtUovDjMwn1TWuI3Qr3UDDPEMlockxfoSNa3wbOS5QjRC7rwad1g + F8UpKA4XzEQ67coyJ1ZLBYPEbjeX9nGSWcPaRnvZ+iJzoEbwHw10lYRijDzHVqyS7YbttlGeMbZh + m/z2dnN7k8MNvh8Y7CBlmOOLS53lI4hKEp0dFipt0HdjYFpp3XuIFBzTUp0nVGMY0y0C0FB3gbY8 + kc6joqrfSfEH/GDh1YdYi1h8S7mIagyBkgU3NW3KA9ZsKxkOOKJFWmI/g4TWHA8ylzs3g5d+DpIu + Nq4zltRPs5pUM8XrRRo20g99rOWYpMaxLzOCTIfYKHoq/wUSj6WMF4tHfrGPHQ8EJ4GHQ2Zct0nt + 1YGzIvssW+hJSw8g7CLzs02NIj+zT2j0ayFxB72bEPicFTC3ind+tCMtB1gaRnZb+Uzcbc60GIa0 + UdpR5AwMvgF7YjVV+e9mxK/9208xs38N3gmHkw0A9mflP4Z9a2CmIrfzGWwY89BnvJEF363ndWPA + lxrdYCFcIFlr3HvFDlPXWJ5sY4mDJdCU7owcnbKiMeNZBL1tq+VIb9kaiJQpcIQSLC+bd4BHz+U0 + YpPmkXz4BwAA//8DAKac5xCWEgAA + headers: + cache-control: ['max-age=0, private, must-revalidate'] + content-encoding: [gzip] + content-type: [application/xml; charset=utf-8] + etag: [W/"f0345214bfbf2370e35d056eb8cffe02"] + strict-transport-security: [max-age=31536000; includeSubDomains] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 201, message: Created} +- request: + body: 103.3 + headers: {} + method: PUT + uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions/0fmkw38j/submit_for_settlement + response: + body: + string: !!binary | + H4sIAEZ7yFcAA9xYS2/bOBC+91cEvjOSbCd1AkXFAosCe9jFAn0ssJeAokYWa4lUScqx++t3KEqy + FFFJLgWKvVkzH4ec4Tw+Ov5wqsqrIyjNpXhYRdfh6goEkxkX+4fVl88fyW71IXkXG0WFpswgKnl3 + dRXzLAnz6vC02X2LA/ywMm2oaXSim7TixkD2mEv1qMGYEioQJg46gMWacw2JpiXEQfvTylijFO59 + JlxLgkeA5Mun3+NgLrZgWslGmCQKN9ebMA66T6upQLGCCkMoY1ZI8HjapHeH7fsfP9Jva3V7g2f2 + oVonmpR4dFeClw8roxpYBW4Xqg2oN0GlyhDpUTAFFONEqLmyQXhYZfhpeAWrZB1GtyS8I2H0Obq7 + D9f367t/MRTDgnZ9U2dvXr8Jcf1lQRdwbSR6YD/cnUbRdru5WW/7O0VpzpU2RNAKnp8flSVd1jFZ + 1VScPRqoKC898idINTc+W3UhhU+e09MsqsHYrTjlZYm5fHFx+/RzndNGAWA+ZJkCrX3enwyIzN7C + IqSUjJbc+Mwr2GMN+kIksbxKVyB32yh8HwdjUX9szFF1XvbKqe0KQsu6oOs3oTavoUSD98HZ/K5G + 14Ou5Y3IfIUyaHSX6FQpep4oMZ6jHuUzUlNlOIbj0pGerfAZp40ppOI/Xjc/MptSwwovpuB1Pc5G + X0r/L1PyhQT5ZXJxfDtdbyQ5hzLTvT82gxivqRsXa6ywqWTUfkYrY3rUBJSSimBwayk0eGPS4kYx + m6KTP3HKvQjoTUyv+xnoD2flRUzr//E4XzkXWugeZ8oTPaPmG7jywDGl5xkR10oy3A3j0JcVbeGt + pX8+fdz9/RlD+hJoamV6lCgMw/Hy+UE9OoOpn/xWo+YImXd1i2hDm2XcngSDP4fNfD1KzuwF5Xjx + uAKTLgU1j0hj6QPu4jjCAsrQE3EEx6uCE1R1TwFSKUugYpXktNSWXQ2AnnKgF4RR1Y9AIw8gkvRQ + 1N8rhLdfTpNykWzDaL3b2T4txi1om0S7XRQH3UdXZWiUtGzuK9cUs2X47rtMzZW7zEoKUyQRVtBM + OMOegSrkM+twAm6l3b7dvCe2R7UM9cunCwu4SC+nLGTZhtvfeXhF90AaVSaFMbW+DwKqsbvr61RR + LmzhdBl/jS0XW8DZNv3HCjBbs8dS7mVwRP+va7H/AOLIlRQW8KCpyFJ5QvYx2O/aioKaYvf4S9oE + dL+dpgBamgJPjFRYHIR8EnEwkjlQBik3F7377FSNwovDLNw3pSV+I9RzzTBDLKPFMXmBjmR9Gzwr + WY4QvaALn9YNdlGcguJwwUyk064sc2K1VDBI7HZzaR8nmTWsbbSXrS8yB2oE/95AV0koxshzbMUq + 2W7YbhvlGWMbtslvbze3Nznc4PuBwQ5Shjm+uNRZPoKoJNHZYaHSBn03BqaV1r2OSMExLdV5QjWG + Md0iAA11F2jLE+k8Kqr6jRR/wA8WulfXhcmMH2ItYvEt5SKqMQRKFtzUtCkPWLOtZDjgiBZpif0M + ElpzPMhc7twM5n7+ZNff8iL9FQIxSLokcSOipH6+2aSaKV4v8tGRfmjoLdkmNfIfmRGkfMTG1NMC + nyHxWMp4sXjkZ/vYOUlwJHrIdMZ1W91eHTgrsi+3hea89BLEdjo/29QoElX7XwL6tVDBg96NSnzX + C5hbxTs/2tmeAyxNZbutfCLuNmdaDEPaKO3eChkYfAz3DHOq8t/N6KHh336Kmf198kY4nGwAcFAp + /zHsowszFUmuz2DDmOcdgTey4Lv1vG4M+FKjm7CEC2StjXu4WVbhOuyj7bBxsASa8r6Ro1N6OKZ+ + i6DXbbVk8TVbA6M0BXIJguVl8w7w6LmcRmzSPJJ3/wEAAP//AwBvlO9ZrRMAAA== + headers: + cache-control: ['max-age=0, private, must-revalidate'] + content-encoding: [gzip] + content-type: [application/xml; charset=utf-8] + etag: [W/"ae279914188fec9177be1f422bd378d9"] + strict-transport-security: [max-age=31536000; includeSubDomains] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode bkhpqm103.311443524salefalse2 + headers: {} + method: POST + uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions + response: + body: + string: !!binary | + H4sIAEh7yFcAA9xYS2/jNhC+768IfGck2U7iLBQtChQFetiiwD4OvQQUNbIYS6SWpBx7f32HoiRL + EZWkhwJFb9bMxyFnOI+Pjj+dqvLqCEpzKR5W0XW4ugLBZMbF/mH17etvZLf6lHyIjaJCU2YQlXy4 + uop5lqyf97DZnvI4wA8r04aaRie0MYVU/CdkcdCJrNaca0g0LSEO2p9WxhqlcLcz4VoS3BSSb19+ + jYO52IJpJRthkijcXG/COOg+raYCxQoqDKGMWSHBA2mT3h+2dz9/pk9rdXvzFAc+VHvsJiUe3ZXg + 5cPKqAZWgduFagPqXVCpMkR6FEwBNZARaq5sEB5WGX4aXsEqWYfRLQnvSRh9je4/huuPm/VfGIph + Qbu+qbN/tv6yoAu4NhI9sB/uFqNou93crLf9LaI050obImgFL8+PypIu65isairOHg1UlJce+TOk + mhufrbqQwifP6WkW1WDsVpzyssTsvbi4ff53ndNGAWA+ZJkCrX3enwyIzN7CIqSUjJbc+Mwr2GPV + +UIksbxKVyD32yi8i4OxqD825qg6L3vl1HYFoWVd0PW7UJu3UKLB++Bsflej60HX8kZkvkIZNLpL + dKoUPU+UGM9RV/IZqakyHMOhwZgSKsBina7wGb+0r7fMj8ym1LDCiyl4XY+z0ZfS/8uUfCVB/jO5 + OL6drjeSnEOZ6d4fm0GM19SNizVW2FQyaj+jlTE9agJKSUUwuLUUGrwxaXGjmE3RyWeccq8CehPT + 634B+t1ZeRXT+n88zlfOhRa6x5nyTM+oeQJXHjim9Dwj4lpJhrthHPqyoi28tbS7u//851cM6Wug + qZXpUaIwDMfL5wf16AymfvJLjZqjZShLiDa0WcbtSTD4c9jM16PkzF5QjhePKzDpUlDziDSWPuAu + jiMsoAw9EUdwvCo4QVX3FCCVsgQqVklOS23Z1QDoKQd6QRhV/Qg08gAiSQ9F/aNCePvlNCkXyTaM + 1rud7dNi3IK2SbTbRXHQfXRVhkZJy+a+c00xW4bvvsvUXLnLrKQwRRJhBc2EM+wZqEI+sw4n4Fba + 7dvNe2J7VMtJv325sICL9HLKQpZtuP2dh1d0D6RRZVIYU+uPQUA1dnd9nSrKhS2cLuOvseViCzjb + pv9YAWZr9ljKvQyO6P91LfafQBy5ksICHjQVWSpPyD4G+11bUVBT7B5/SJuA7rfTFEBLU+CJkQqL + g5DPIg5GMgfKIOXmonefnapReHGYhfumtMRvhHqpGWaIZbQ4Ji/Qkaxvg2clyxGiF3Th07rBLopT + UBwumIl02pVlTqyWCgaJ3W4u7eMks4a1jfay9UXmQI3gPxroKgnFGHmOrVgl2w3bbaM8Y2zDNvnt + 7eb2JocbfD8w2EHKMMcXlzrLRxCVJDo7LFTaoO/GwLTSuvcQKTimpTpPqMYwplsEoKHuAm15Ip1H + RVW/k+IP+MHCqw+xFrH4lnIR1RgCJQtuatqUB6zZVjIccESLtMR+BgmtOR5kLnduBi/9HCRdbFxn + LKmfZjWpZorXizRspB/6WMsxSY1jX2YEmQ6xUfRU/gskHksZLxaP/GIfOx4ITgIPh8y4bpPaqwNn + RfZZttCTlh5A2EXmZ5saRX5mn9Do10LiDno3IfA5K2BuFe/8aEdaDrA0jOy28pm425xpMQxpo7Sj + yBkYfAP2xGqq8t/NiF/7t59iZv8avBMOJxsA7M/Kfwz71sBMRW7nM9gw5qHPeCMLvlvP68aALzW6 + wUK4QLLWuPeKHaausTzaxhIHS6Ap3Rk5OmVFY8azCHrbVsuR3rI1EClT4AglWF427wCPnstpxCbN + I/nwNwAAAP//AwD5mvSYlhIAAA== + headers: + cache-control: ['max-age=0, private, must-revalidate'] + content-encoding: [gzip] + content-type: [application/xml; charset=utf-8] + etag: [W/"d597185d3671086a75f4609ffd883333"] + strict-transport-security: [max-age=31536000; includeSubDomains] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 201, message: Created} +- request: + body: 103.3 + headers: {} + method: PUT + uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions/2wge34xf/submit_for_settlement + response: + body: + string: !!binary | + H4sIAEl7yFcAA9xYTW/jNhC9768IfGck2U7iLBQtChQFetiiwO720EtAUSOLsURqScqx99d3KEqy + FFFJgKLAojdr5nHIGc7Ho+NPp6q8OoLSXIqHVXQdrq5AMJlxsX9Yffv6G9mtPiUfYqOo0JQZRCUf + rq5iniXr5z1stqc8DvDDyrShptGJbtKKGwPZYy7VowZjSqhAmDjoABZrzjUkmpYQB+1PK2ONUrj3 + mXAtCR4Bkm9ffo2DudiCaSUbYZIo3FxvwjjoPq2mAsUKKgyhjFkhweNpk94ftnc/fqRPa3V78xQH + PlTrRJMSj+5K8PJhZVQDq8DtQrUB9S6oVBkiPQqmgGKcCDVXNggPqww/Da9glazD6JaE9ySMvkb3 + H8P1x836bwzFsKBd39TZ+9dvcP1lQRdwbSR6YD/cnUbRdru5WW/7O0VpzpU2RNAKXp4flSVd1jFZ + 1VScPRqoKC898mdINTc+W3UhhU+e09MsqsHYrTjlZYm5fHFx+/zfOqeNAsB8yDIFWvu8PxkQmb2F + RUgpGS258ZlXsMca9IVIYnmVrkDut1F4FwdjUX9szFF1XvbKqe0KQsu6oOt3oTZvoUSD98HZ/K5G + 14Ou5Y3IfIUyaHSX6FQpep4oMZ6jHuUzUlNlOIbj0pFerPAZp40ppOI/3jY/MptSwwovpuB1Pc5G + X0r/L1PylQT5aXJxfDtdbyQ5hzLTvT82gxivqRsXa6ywqWTUfkYrY3rUBJSSimBwayk0eGPS4kYx + m6KTzzjlXgX0JqbX/QL0u7PyKqb1/3icr5wLLXSPM+WZnlHzBK48cEzpeUbEtZIMd8M49GVFW3hr + aXd3//nPrxjS10BTK9OjRGEYjpfPD+rRGUz95JcaNUfIvKtbRBvaLOP2JBj8OWzm61FyZi8ox4vH + FZh0Kah5RBpLH3AXxxEWUIaeiCM4XhWcoKp7CpBKWQIVqySnpbbsagD0lAO9IIyqfgQaeQCRpIei + /l4hvP1ympSLZBtG693O9mkxbkHbJNrtojjoProqQ6OkZXN/cU0xW4bvvsvUXLnLrKQwRRJhBc2E + M+wZqEI+sw4n4Fba7dvNe2J7VMtQv325sICL9HLKQpZtuP2dh1d0D6RRZVIYU+uPQUA1dnd9nSrK + hS2cLuOvseViCzjbpv9YAWZr9ljKvQyO6P91LfafQBy5ksICHjQVWSpPyD4G+11bUVBT7B5/SJuA + 7rfTFEBLU+CJkQqLg5DPIg5GMgfKIOXmonefnapReHGYhfumtMRvhHqpGWaIZbQ4Ji/Qkaxvg2cl + yxGiF3Th07rBLopTUBwumIl02pVlTqyWCgaJ3W4u7eMks4a1jfay9UXmQI3g3xvoKgnFGHmOrVgl + 2w3bbaM8Y2zDNvnt7eb2JocbfD8w2EHKMMcXlzrLRxCVJDo7LFTaoO/GwLTSutcRKTimpTpPqMYw + plsEoKHuAm15Ip1HRVW/84kw4AcL3avrwmTGD7EWsfiWchHVGAIlC25q2pQHrNlWMhxwRIu0xH4G + Ca05HmQud24Gcz//veub11x/z4v0ZwjEIOmSxI2Ikvr5ZpNqpni9yEdH+qGht2Sb1Mh/ZEaQ8hEb + U08LfIHEYynjxeKRX+xj5yTBkegh0xnXbXV7deCsyL7cFprz0ksQ2+n8bFOjSFTtfwno10IFD3o3 + KvFdL2BuFe/8aGd7DrA0le228pm425xpMQxpo7R7K2Rg8DHcM8ypyn83o4eGf/spZvb3yTvhcLIB + wEGl/Mewjy7MVCS5PoMNY553BN7Igu/W87ox4EuNbsISLpC1Nu7hZlmF67CPtsPGwRJoyvtGjk7p + 4Zj6LYLettWSxbdsDYzSFMglCJaXzTvAo+dyGrFJ80g+/AMAAP//AwBcOgs5rRMAAA== + headers: + cache-control: ['max-age=0, private, must-revalidate'] + content-encoding: [gzip] + content-type: [application/xml; charset=utf-8] + etag: [W/"dba040684775529b7b361d2716c134a6"] + strict-transport-security: [max-age=31536000; includeSubDomains] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!python/unicode authorized + headers: {} + method: POST + uri: https://api.sandbox.braintreegateway.com:443/merchants/j9gwdfjdkxymhdgr/transactions/advanced_search_ids + response: + body: + string: !!binary | + H4sIAEt7yFcAA7IpTk0sSs7QLUotLs0pKbbjUlCwKUhMT9UtzqxKVSipLEi1VcrMK0lNTy1SsjM1 + sNGHS4KVZqYUQxUlFhUlViqBBfWBonZcNvroRgMAAAD//wMA9crnoGwAAAA= + headers: + cache-control: ['max-age=0, private, must-revalidate'] + content-encoding: [gzip] + content-type: [application/xml; charset=utf-8] + etag: [W/"46a39c0cf7b771e6db3d924b88ce724c"] + strict-transport-security: [max-age=31536000; includeSubDomains] + transfer-encoding: [chunked] + vary: [Accept-Encoding] + status: {code: 200, message: OK} +version: 1 diff --git a/tests/py/test_billing_exchanges.py b/tests/py/test_billing_exchanges.py index 26616c986c..d23b6519bc 100644 --- a/tests/py/test_billing_exchanges.py +++ b/tests/py/test_billing_exchanges.py @@ -12,37 +12,49 @@ capture_card_hold, create_card_hold, record_exchange, - record_exchange_result + record_exchange_result, + get_ready_payout_routes_by_network ) +from gratipay.billing.payday import Payday from gratipay.exceptions import NegativeBalance, NotWhitelisted from gratipay.models.exchange_route import ExchangeRoute from gratipay.testing import Foobar, Harness, D,P from gratipay.testing.billing import BillingHarness -class TestCardHolds(BillingHarness): +class TestsWithBillingHarness(BillingHarness): - # create_card_hold + def setUp(self): + super(TestsWithBillingHarness, self).setUp() + self.hold = None - def test_create_card_hold_success(self): - hold, error = create_card_hold(self.db, self.obama, D('1.00')) - assert isinstance(hold, braintree.Transaction) - assert hold.status == 'authorized' - assert hold.amount == D('10.00') + def tearDown(self): + if self.hold: + cancel_card_hold(self.hold) + super(TestsWithBillingHarness, self).tearDown() + + + # cch - create_card_hold + + def test_cch_success(self): + self.hold, error = create_card_hold(self.db, self.obama, D('1.00')) + assert isinstance(self.hold, braintree.Transaction) + assert self.hold.status == 'authorized' + assert self.hold.amount == D('10.00') assert error == '' assert self.obama.balance == P('obama').balance == 0 - def test_create_card_hold_for_suspicious_raises_NotWhitelisted(self): + def test_cch_for_suspicious_raises_NotWhitelisted(self): bob = self.make_participant('bob', is_suspicious=True, balanced_customer_href='fake_href') with self.assertRaises(NotWhitelisted): create_card_hold(self.db, bob, D('1.00')) @mock.patch('braintree.Transaction.sale') - def test_create_card_hold_failure(self, btsale): + def test_cch_failure(self, btsale): btsale.side_effect = Foobar - hold, error = create_card_hold(self.db, self.obama, D('1.00')) - assert hold is None + self.hold, error = create_card_hold(self.db, self.obama, D('1.00')) + assert self.hold is None assert error == "Foobar()" exchange = self.db.one("SELECT * FROM exchanges") assert exchange @@ -52,7 +64,7 @@ def test_create_card_hold_failure(self, btsale): assert self.obama.get_credit_card_error() == 'Foobar()' assert self.obama.balance == P('obama').balance == 0 - def test_create_card_hold_bad_card(self): + def test_cch_bad_card(self): bob = self.make_participant('bob', is_suspicious=False) customer_id = bob.get_braintree_account().id result = braintree.PaymentMethod.create({ @@ -64,11 +76,11 @@ def test_create_card_hold_bad_card(self): # https://developers.braintreepayments.com/ios+python/reference/general/testing#test-amounts # $2002 is upcharged to $2062, which corresponds to 'Invalid Tax Amount' - hold, error = create_card_hold(self.db, bob, D('2002.00')) - assert hold is None + self.hold, error = create_card_hold(self.db, bob, D('2002.00')) + assert self.hold is None assert error.startswith('Invalid Tax Amount') - def test_create_card_hold_multiple_cards(self): + def test_cch_multiple_cards(self): bob = self.make_participant('bob', is_suspicious=False) customer_id = bob.get_braintree_account().id @@ -80,73 +92,116 @@ def test_create_card_hold_multiple_cards(self): assert result.is_success ExchangeRoute.insert(bob, 'braintree-cc', result.payment_method.token) - hold, error = create_card_hold(self.db, bob, D('100.00')) + self.hold, error = create_card_hold(self.db, bob, D('100.00')) assert error == '' - # Clean up - cancel_card_hold(hold) - - def test_create_card_hold_no_card(self): + def test_cch_no_card(self): bob = self.make_participant('bob', is_suspicious=False) - hold, error = create_card_hold(self.db, bob, D('10.00')) + self.hold, error = create_card_hold(self.db, bob, D('10.00')) assert error == 'No credit card' - def test_create_card_hold_invalidated_card(self): + def test_cch_invalidated_card(self): bob = self.make_participant('bob', is_suspicious=False) ExchangeRoute.insert(bob, 'braintree-cc', 'foo', error='invalidated') - hold, error = create_card_hold(self.db, bob, D('10.00')) + self.hold, error = create_card_hold(self.db, bob, D('10.00')) assert error == 'No credit card' - # capture_card_hold - def test_capture_card_hold_full_amount(self): - hold, error = create_card_hold(self.db, self.obama, D('20.00')) + # capch - capture_card_hold + + def test_capch_full_amount(self): + self.hold, error = create_card_hold(self.db, self.obama, D('20.00')) assert error == '' # sanity check - assert hold.status == 'authorized' + assert self.hold.status == 'authorized' - capture_card_hold(self.db, self.obama, D('20.00'), hold) - hold = braintree.Transaction.find(hold.id) + capture_card_hold(self.db, self.obama, D('20.00'), self.hold) + hold = braintree.Transaction.find(self.hold.id) assert self.obama.balance == P('obama').balance == D('20.00') assert self.obama.get_credit_card_error() == '' assert hold.status == 'submitted_for_settlement' - # Clean up - cancel_card_hold(hold) - - def test_capture_card_hold_partial_amount(self): - hold, error = create_card_hold(self.db, self.obama, D('20.00')) + def test_capch_partial_amount(self): + self.hold, error = create_card_hold(self.db, self.obama, D('20.00')) assert error == '' # sanity check - capture_card_hold(self.db, self.obama, D('15.00'), hold) + capture_card_hold(self.db, self.obama, D('15.00'), self.hold) assert self.obama.balance == P('obama').balance == D('15.00') assert self.obama.get_credit_card_error() == '' - # Clean up - cancel_card_hold(hold) - - def test_capture_card_hold_too_high_amount(self): - hold, error = create_card_hold(self.db, self.obama, D('20.00')) + def test_capch_too_high_amount(self): + self.hold, error = create_card_hold(self.db, self.obama, D('20.00')) assert error == '' # sanity check with self.assertRaises(Exception): # How do I check the exception's msg here? - capture_card_hold(self.db, self.obama, D('20.01'), hold) + capture_card_hold(self.db, self.obama, D('20.01'), self.hold) assert self.obama.balance == P('obama').balance == 0 - # Clean up - cancel_card_hold(hold) - - def test_capture_card_hold_amount_under_minimum(self): - hold, error = create_card_hold(self.db, self.obama, D('20.00')) + def test_capch_amount_under_minimum(self): + self.hold, error = create_card_hold(self.db, self.obama, D('20.00')) assert error == '' # sanity check - capture_card_hold(self.db, self.obama, D('0.01'), hold) + capture_card_hold(self.db, self.obama, D('0.01'), self.hold) assert self.obama.balance == P('obama').balance == D('9.41') assert self.obama.get_credit_card_error() == '' -class TestFees(Harness): + # grprbn - get_ready_payout_routes_by_network + + @mock.patch.object(Payday, 'fetch_card_holds') + def run_payday(self, fch): + fch.return_value = {} + Payday.start().run() + + def test_grprbn_that_its_empty_to_start_with(self): + assert get_ready_payout_routes_by_network(self.db, 'paypal') == [] + + def test_grprbn_includes_team_owners(self): + enterprise = self.make_team(is_approved=True) + self.obama.set_payment_instruction(enterprise, 100) + self.run_payday() + routes = get_ready_payout_routes_by_network(self.db, 'paypal') + assert [r.participant.username for r in routes] == ['picard'] + + + def run_payday_with_member(self): + enterprise = self.make_team(is_approved=True, available=50) + enterprise.add_member(self.homer, P('picard')) + self.obama.set_payment_instruction(enterprise, 100) + self.run_payday() + return enterprise + + def test_grprbn_includes_team_members(self): + self.run_payday_with_member() + routes = get_ready_payout_routes_by_network(self.db, 'paypal') + assert list(sorted([r.participant.username for r in routes])) == ['homer', 'picard'] + + def test_grprbn_includes_former_team_members(self): + enterprise = self.run_payday_with_member() + enterprise.remove_member(self.homer, P('picard')) + routes = get_ready_payout_routes_by_network(self.db, 'paypal') + assert list(sorted([r.participant.username for r in routes])) == ['homer', 'picard'] + + def test_grprbn_excludes_member_with_no_verified_identity(self): + self.run_payday_with_member() + self.homer.clear_identity(self.homer.list_identity_metadata()[0].country.id) + routes = get_ready_payout_routes_by_network(self.db, 'paypal') + assert [r.participant.username for r in routes] == ['picard'] + + + def test_grprbn_includes_1_0_payouts(self): + alice = self.make_participant( 'alice' + , balance=24 + , status_of_1_0_payout='pending-payout' + , claimed_time='now' + ) + ExchangeRoute.insert(alice, 'paypal', 'alice@example.com') + routes = get_ready_payout_routes_by_network(self.db, 'paypal') + assert [r.participant.username for r in routes] == ['alice'] + + +class TestsWithoutBillingHarness(Harness): def prep(self, amount): """Given a dollar amount as a string, return a 3-tuple. @@ -220,9 +275,9 @@ def test_prep_hit_at_nine_forty_two(self): assert actual == expected -class TestRecordExchange(Harness): + # re - record_exchange - def test_record_exchange_records_exchange(self): + def test_re_records_exchange(self): alice = self.make_participant('alice', last_bill_result='') record_exchange( self.db , ExchangeRoute.from_network(alice, 'braintree-cc') @@ -243,7 +298,7 @@ def test_record_exchange_records_exchange(self): } assert actual == expected - def test_record_exchange_requires_valid_route(self): + def test_re_requires_valid_route(self): alice = self.make_participant('alice', last_bill_result='') bob = self.make_participant('bob', last_bill_result='') with self.assertRaises(AssertionError): @@ -255,7 +310,7 @@ def test_record_exchange_requires_valid_route(self): , status='pre' ) - def test_record_exchange_stores_error_in_note(self): + def test_re_stores_error_in_note(self): alice = self.make_participant('alice', last_bill_result='') record_exchange( self.db , ExchangeRoute.from_network(alice, 'braintree-cc') @@ -268,7 +323,7 @@ def test_record_exchange_stores_error_in_note(self): exchange = self.db.one("SELECT * FROM exchanges") assert exchange.note == 'Card payment failed' - def test_record_exchange_doesnt_update_balance_for_positive_amounts(self): + def test_re_doesnt_update_balance_for_positive_amounts(self): alice = self.make_participant('alice', last_bill_result='') record_exchange( self.db , ExchangeRoute.from_network(alice, 'braintree-cc') @@ -279,7 +334,7 @@ def test_record_exchange_doesnt_update_balance_for_positive_amounts(self): ) assert P('alice').balance == D('0.00') - def test_record_exchange_updates_balance_for_negative_amounts(self): + def test_re_updates_balance_for_negative_amounts(self): alice = self.make_participant('alice', balance=50, last_paypal_result='') record_exchange( self.db , ExchangeRoute.from_network(alice, 'paypal') @@ -290,13 +345,13 @@ def test_record_exchange_updates_balance_for_negative_amounts(self): ) assert P('alice').balance == D('13.41') - def test_record_exchange_fails_if_negative_balance(self): + def test_re_fails_if_negative_balance(self): alice = self.make_participant('alice', last_paypal_result='') ba = ExchangeRoute.from_network(alice, 'paypal') with pytest.raises(NegativeBalance): record_exchange(self.db, ba, D("-10.00"), D("0.41"), alice, 'pre') - def test_record_exchange_result_restores_balance_on_error(self): + def test_re_result_restores_balance_on_error(self): alice = self.make_participant('alice', balance=30, last_paypal_result='') ba = ExchangeRoute.from_network(alice, 'paypal') e_id = record_exchange(self.db, ba, D('-27.06'), D('0.81'), alice, 'pre') @@ -304,7 +359,7 @@ def test_record_exchange_result_restores_balance_on_error(self): record_exchange_result(self.db, e_id, 'failed', 'SOME ERROR', alice) assert P('alice').balance == D('30.00') - def test_record_exchange_result_restores_balance_on_error_with_invalidated_route(self): + def test_re_result_restores_balance_on_error_with_invalidated_route(self): alice = self.make_participant('alice', balance=37, last_paypal_result='') pp = ExchangeRoute.from_network(alice, 'paypal') e_id = record_exchange(self.db, pp, D('-32.45'), D('0.86'), alice, 'pre') @@ -315,7 +370,7 @@ def test_record_exchange_result_restores_balance_on_error_with_invalidated_route assert alice.balance == D('37.00') assert pp.error == alice.get_paypal_error() == 'invalidated' - def test_record_exchange_result_doesnt_restore_balance_on_success(self): + def test_re_result_doesnt_restore_balance_on_success(self): alice = self.make_participant('alice', balance=50, last_paypal_result='') ba = ExchangeRoute.from_network(alice, 'paypal') e_id = record_exchange(self.db, ba, D('-43.98'), D('1.60'), alice, 'pre') @@ -323,7 +378,7 @@ def test_record_exchange_result_doesnt_restore_balance_on_success(self): record_exchange_result(self.db, e_id, 'succeeded', None, alice) assert P('alice').balance == D('4.42') - def test_record_exchange_result_updates_balance_for_positive_amounts(self): + def test_re_result_updates_balance_for_positive_amounts(self): alice = self.make_participant('alice', balance=4, last_bill_result='') cc = ExchangeRoute.from_network(alice, 'braintree-cc') e_id = record_exchange(self.db, cc, D('31.59'), D('0.01'), alice, 'pre') diff --git a/tests/py/test_billing_payday.py b/tests/py/test_billing_payday.py index cb4c43b216..785832adaa 100644 --- a/tests/py/test_billing_payday.py +++ b/tests/py/test_billing_payday.py @@ -2,7 +2,6 @@ import os -import balanced import braintree import mock import pytest @@ -185,20 +184,6 @@ def test_nusers_includes_dues(self, fch): nusers = self.db.one("SELECT nusers FROM paydays") assert nusers == 1 - @pytest.mark.xfail(reason="haven't migrated transfer_takes yet") - @mock.patch.object(Payday, 'fetch_card_holds') - @mock.patch('gratipay.billing.payday.create_card_hold') - def test_ncc_failing(self, cch, fch): - self.janet.set_tip_to(self.homer, 24) - fch.return_value = {} - cch.return_value = (None, 'oops') - payday = Payday.start() - before = self.fetch_payday() - assert before['ncc_failing'] == 0 - payday.payin() - after = self.fetch_payday() - assert after['ncc_failing'] == 1 - @mock.patch('gratipay.billing.payday.log') def test_start_prepare(self, log): self.clear_tables() @@ -372,29 +357,7 @@ def test_payin_cancels_existing_holds_of_insufficient_amounts(self, fch): assert holds[self.obama.id] is fake_hold assert hold.status == 'voided' - @pytest.mark.xfail(reason="Don't think we'll need this anymore since we aren't using balanced, " - "leaving it here till I'm sure.") - @mock.patch('gratipay.billing.payday.CardHold') - @mock.patch('gratipay.billing.payday.cancel_card_hold') - def test_fetch_card_holds_handles_extra_holds(self, cancel, CardHold): - fake_hold = mock.MagicMock() - fake_hold.meta = {'participant_id': 0} - fake_hold.amount = 1061 - fake_hold.save = mock.MagicMock() - CardHold.query.filter.return_value = [fake_hold] - for attr, state in (('failure_reason', 'failed'), - ('voided_at', 'cancelled'), - ('debit_href', 'captured')): - holds = Payday.fetch_card_holds(set()) - assert fake_hold.meta['state'] == state - fake_hold.save.assert_called_with() - assert len(holds) == 0 - setattr(fake_hold, attr, None) - holds = Payday.fetch_card_holds(set()) - cancel.assert_called_with(fake_hold) - assert len(holds) == 0 - - @pytest.mark.xfail(reason="haven't migrated transfer_takes yet") + @pytest.mark.xfail(reason="turned this off during Gratipocalypse; turn back on!") @mock.patch('gratipay.billing.payday.log') def test_payin_cancels_uncaptured_holds(self, log): self.janet.set_tip_to(self.homer, 42) @@ -458,94 +421,65 @@ def test_process_payment_instructions(self): assert payment.amount == D('0.51') assert payment.direction == 'to-team' - @pytest.mark.xfail(reason="haven't migrated_transfer_takes yet") - def test_transfer_takes(self): - a_team = self.make_participant('a_team', claimed_time='now', number='plural', balance=20) - alice = self.make_participant('alice', claimed_time='now') - a_team.add_member(alice) - a_team.add_member(self.make_participant('bob', claimed_time='now')) - a_team.set_take_for(alice, D('1.00'), alice) + def test_process_remainder(self): + alice = self.make_participant('alice', claimed_time='now', balance=100) + picard = self.make_participant('picard', claimed_time='now', last_paypal_result='', verified_in='TT', email_address='picard@x.y') + crusher = self.make_participant('crusher', claimed_time='now', verified_in='TT', email_address='crusher@x.y') - payday = Payday.start() - - # Test that payday ignores takes set after it started - a_team.set_take_for(alice, D('2.00'), alice) - - # Run the transfer multiple times to make sure we ignore takes that - # have already been processed - for i in range(3): - with self.db.get_cursor() as cursor: - payday.prepare(cursor) - payday.transfer_takes(cursor, payday.ts_start) - payday.update_balances(cursor) - - participants = self.db.all("SELECT username, balance FROM participants") - - for p in participants: - if p.username == 'a_team': - assert p.balance == D('18.99') - elif p.username == 'alice': - assert p.balance == D('1.00') - elif p.username == 'bob': - assert p.balance == D('0.01') - else: - assert p.balance == 0 - - def test_process_draws(self): - alice = self.make_participant('alice', claimed_time='now', balance=1) - picard = self.make_participant('picard', claimed_time='now', last_paypal_result='') - Enterprise = self.make_team('The Enterprise', picard, is_approved=True) - alice.set_payment_instruction(Enterprise, D('0.51')) + Enterprise = self.make_team('The Enterprise', picard, is_approved=True, available=100) + Enterprise.add_member(crusher, picard) + Enterprise.set_take_for(crusher, 10, crusher) + alice.set_payment_instruction(Enterprise, D('80')) payday = Payday.start() with self.db.get_cursor() as cursor: payday.prepare(cursor) payday.process_payment_instructions(cursor) - payday.transfer_takes(cursor, payday.ts_start) - payday.process_draws(cursor) + payday.process_takes(cursor, payday.ts_start) + payday.process_remainder(cursor) assert cursor.one("select new_balance from payday_participants " - "where username='picard'") == D('0.51') + "where username='picard'") == D('70') assert cursor.one("select balance from payday_teams where slug='TheEnterprise'") == 0 payday.update_balances(cursor) - assert P('alice').balance == D('0.49') - assert P('picard').balance == D('0.51') + assert P('alice').balance == D('20') # Alice had $100 and gave away $80 + assert P('crusher').balance == D('10') # Crusher had set their take to $10 + assert P('picard').balance == D('70') # Picard is the owner of the team, recieves what is leftover - payment = self.db.one("SELECT * FROM payments WHERE direction='to-participant'") - assert payment.amount == D('0.51') + payment_to_team = self.db.one("SELECT amount FROM payments WHERE direction='to-team'") + assert payment_to_team == D('80') - @pytest.mark.xfail(reason="haven't migrated_transfer_takes yet") - @mock.patch.object(Payday, 'fetch_card_holds') - def test_transfer_takes_doesnt_make_negative_transfers(self, fch): - hold = balanced.CardHold(amount=1500, meta={'participant_id': self.janet.id}, - card_href=self.card_href) - hold.capture = lambda *a, **kw: None - hold.save = lambda *a, **kw: None - fch.return_value = {self.janet.id: hold} - self.janet.update_number('plural') - self.janet.set_tip_to(self.homer, 10) - self.janet.add_member(self.david) - Payday.start().payin() - assert P('david').balance == 0 - assert P('homer').balance == 10 - assert P('janet').balance == 0 + payments_to_participant = self.db.all("SELECT participant, amount FROM payments WHERE direction='to-participant' ORDER BY amount DESC") + assert payments_to_participant[0].participant == 'picard' + assert payments_to_participant[0].amount == D('70') + assert payments_to_participant[1].participant == 'crusher' + assert payments_to_participant[1].amount == D('10') - @pytest.mark.xfail(reason="haven't migrated take_over_balances yet") + @pytest.mark.xfail(reason="team owners can't be taken over because of #3602") def test_take_over_during_payin(self): alice = self.make_participant('alice', claimed_time='now', balance=50) - bob = self.make_participant('bob', claimed_time='now', elsewhere='twitter') - alice.set_tip_to(bob, 18) + enterprise = self.make_team('The Enterprise', is_approved=True) + picard = Participant.from_username(enterprise.owner) + self.make_participant('bob', claimed_time='now', elsewhere='twitter') + alice.set_payment_instruction(enterprise, 18) payday = Payday.start() with self.db.get_cursor() as cursor: payday.prepare(cursor) + + # bruce takes over picard bruce = self.make_participant('bruce', claimed_time='now') - bruce.take_over(('twitter', str(bob.id)), have_confirmation=True) + bruce.take_over(('github', str(picard.id)), have_confirmation=True) payday.process_payment_instructions(cursor) - bruce.delete_elsewhere('twitter', str(bob.id)) + + # billy takes over bruce + bruce.delete_elsewhere('twitter', str(picard.id)) billy = self.make_participant('billy', claimed_time='now') billy.take_over(('github', str(bruce.id)), have_confirmation=True) + payday.update_balances(cursor) payday.take_over_balances() + + # billy ends up with the money assert P('bob').balance == 0 assert P('bruce').balance == 0 assert P('billy').balance == 18 @@ -568,6 +502,123 @@ def test_payin_dumps_transfers_for_debugging(self, cch, fch): assert filename.endswith('_payments.csv') os.unlink(filename) + +class TestTakes(BillingHarness): + + tearDownClass = None + + def setUp(self): + self.enterprise = self.make_team('The Enterprise', is_approved=True) + self.set_available(500) + self.picard = P('picard') + + def make_member(self, username, take): + member = self.make_participant( username + , email_address=username+'@x.y' + , claimed_time='now' + , verified_in='TT' + ) + self.enterprise.add_member(member, self.picard) + self.enterprise.set_take_for(member, take, member) + return member + + def set_available(self, available): + # hack since we don't have Python API for this yet + self.db.run('UPDATE teams SET available=%s', (available,)) + self.enterprise.set_attributes(available=available) + + + payday = None + def start_payday(self): + self.payday = Payday.start() + + def run_through_takes(self): + if not self.payday: + self.start_payday() + with self.db.get_cursor() as cursor: + self.payday.prepare(cursor) + cursor.run("UPDATE payday_teams SET balance=537") + self.payday.process_takes(cursor, self.payday.ts_start) + self.payday.update_balances(cursor) + + + # pt - process_takes + + def test_pt_processes_takes(self): + self.make_member('crusher', 150) + self.make_member('bruiser', 250) + self.run_through_takes() + assert P('crusher').balance == D('150.00') + assert P('bruiser').balance == D('250.00') + assert P('picard').balance == D(' 0.00') + + def test_pt_processes_takes_again(self): + # This catches a bug where payday_takes.amount was an int! + self.make_member('crusher', D('0.01')) + self.make_member('bruiser', D('5.37')) + self.run_through_takes() + assert P('crusher').balance == D('0.01') + assert P('bruiser').balance == D('5.37') + assert P('picard').balance == D('0.00') + + def test_pt_ignores_takes_set_after_the_start_of_payday(self): + self.make_member('crusher', 150) + self.start_payday() + self.make_member('bruiser', 250) + self.run_through_takes() + assert P('crusher').balance == D('150.00') + assert P('bruiser').balance == D(' 0.00') + assert P('picard').balance == D(' 0.00') + + def test_pt_ignores_takes_that_have_already_been_processed(self): + self.make_member('crusher', 150) + self.start_payday() + self.make_member('bruiser', 250) + self.run_through_takes() + self.run_through_takes() + self.run_through_takes() + self.run_through_takes() + self.run_through_takes() + assert P('crusher').balance == D('150.00') + assert P('bruiser').balance == D(' 0.00') + assert P('picard').balance == D(' 0.00') + + def test_pt_clips_to_available(self): + self.make_member('alice', 350) + self.make_member('bruiser', 250) + self.make_member('crusher', 150) + self.make_member('zorro', 450) + self.run_through_takes() + assert P('crusher').balance == D('150.00') + assert P('bruiser').balance == D('250.00') + assert P('alice').balance == D('100.00') + assert P('zorro').balance == D(' 0.00') + assert P('picard').balance == D(' 0.00') + + def test_pt_clips_to_balance_when_less_than_available(self): + self.set_available(1000) + self.make_member('alice', 350) + self.make_member('bruiser', 250) + self.make_member('crusher', 150) + self.make_member('zorro', 450) + self.run_through_takes() + assert P('crusher').balance == D('150.00') + assert P('bruiser').balance == D('250.00') + assert P('alice').balance == D('137.00') + assert P('zorro').balance == D(' 0.00') + assert P('picard').balance == D(' 0.00') + + def test_pt_is_happy_to_deal_the_owner_in(self): + self.make_member('crusher', 150) + self.make_member('bruiser', 250) + self.enterprise.set_take_for(self.picard, D('0.01'), self.picard) + self.enterprise.set_take_for(self.picard, 200, self.picard) + self.run_through_takes() + assert P('crusher').balance == D('150.00') + assert P('bruiser').balance == D('150.00') # Sorry, bruiser. + assert P('picard').balance == D('200.00') + + class TestNotifyParticipants(EmailHarness): def test_it_notifies_participants(self):