workarea-forter 1.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (120) hide show
  1. checksums.yaml +7 -0
  2. data/.editorconfig +20 -0
  3. data/.github/ISSUE_TEMPLATE/bug_report.md +37 -0
  4. data/.github/ISSUE_TEMPLATE/documentation-request.md +17 -0
  5. data/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
  6. data/.gitignore +17 -0
  7. data/CHANGELOG.md +63 -0
  8. data/CODE_OF_CONDUCT.md +3 -0
  9. data/CONTRIBUTING.md +3 -0
  10. data/Gemfile +25 -0
  11. data/LICENSE +52 -0
  12. data/LICENSE.md +3 -0
  13. data/README.md +113 -0
  14. data/Rakefile +60 -0
  15. data/app/controllers/workarea/admin/orders_controller.decorator +6 -0
  16. data/app/controllers/workarea/storefront/application_controller.decorator +10 -0
  17. data/app/models/search/admin/order.decorator +7 -0
  18. data/app/models/workarea/checkout/collect_payment.decorator +75 -0
  19. data/app/models/workarea/forter/decision.rb +18 -0
  20. data/app/models/workarea/forter/response.rb +15 -0
  21. data/app/models/workarea/fulfillment.decorator +77 -0
  22. data/app/models/workarea/order/status/suspected_fraud.rb +13 -0
  23. data/app/models/workarea/order.decorator +14 -0
  24. data/app/models/workarea/payment/saved_credit_card.decorator +14 -0
  25. data/app/models/workarea/payment/status/suspected_fraud.rb +13 -0
  26. data/app/models/workarea/payment/tender/credit_card.decorator +25 -0
  27. data/app/models/workarea/payment.decorator +13 -0
  28. data/app/services/workarea/forter/account.rb +42 -0
  29. data/app/services/workarea/forter/order.rb +145 -0
  30. data/app/services/workarea/forter/payment.rb +80 -0
  31. data/app/services/workarea/forter/tender/credit_card.rb +73 -0
  32. data/app/services/workarea/forter/tender/general.rb +29 -0
  33. data/app/services/workarea/forter/tender/gift_card.rb +23 -0
  34. data/app/services/workarea/forter/tender/paypal.rb +38 -0
  35. data/app/services/workarea/forter/tender/store_credit.rb +23 -0
  36. data/app/view_models/workarea/admin/order_view_model.decorator +7 -0
  37. data/app/views/workarea/admin/orders/_forter.html.haml +18 -0
  38. data/app/views/workarea/admin/orders/forter.html.haml +57 -0
  39. data/app/views/workarea/storefront/_forter_tracking.html.haml +4 -0
  40. data/app/workers/forter/update_status.rb +21 -0
  41. data/app/workers/workarea/save_user_order_details.decorator +34 -0
  42. data/bin/rails +20 -0
  43. data/config/initializers/appends.rb +9 -0
  44. data/config/initializers/workarea.rb +22 -0
  45. data/config/locales/en.yml +26 -0
  46. data/config/routes.rb +7 -0
  47. data/lib/workarea/forter/bogus_gateway.rb +62 -0
  48. data/lib/workarea/forter/decision_response.rb +60 -0
  49. data/lib/workarea/forter/engine.rb +8 -0
  50. data/lib/workarea/forter/gateway.rb +66 -0
  51. data/lib/workarea/forter/version.rb +5 -0
  52. data/lib/workarea/forter.rb +50 -0
  53. data/test/dummy/Rakefile +6 -0
  54. data/test/dummy/bin/bundle +3 -0
  55. data/test/dummy/bin/rails +4 -0
  56. data/test/dummy/bin/rake +4 -0
  57. data/test/dummy/bin/setup +30 -0
  58. data/test/dummy/bin/update +26 -0
  59. data/test/dummy/bin/yarn +11 -0
  60. data/test/dummy/config/application.rb +30 -0
  61. data/test/dummy/config/boot.rb +5 -0
  62. data/test/dummy/config/cable.yml +10 -0
  63. data/test/dummy/config/environment.rb +5 -0
  64. data/test/dummy/config/environments/development.rb +51 -0
  65. data/test/dummy/config/environments/production.rb +88 -0
  66. data/test/dummy/config/environments/test.rb +44 -0
  67. data/test/dummy/config/initializers/application_controller_renderer.rb +8 -0
  68. data/test/dummy/config/initializers/assets.rb +14 -0
  69. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  70. data/test/dummy/config/initializers/cookies_serializer.rb +5 -0
  71. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  72. data/test/dummy/config/initializers/inflections.rb +16 -0
  73. data/test/dummy/config/initializers/mime_types.rb +4 -0
  74. data/test/dummy/config/initializers/workarea.rb +5 -0
  75. data/test/dummy/config/initializers/wrap_parameters.rb +9 -0
  76. data/test/dummy/config/locales/en.yml +33 -0
  77. data/test/dummy/config/puma.rb +56 -0
  78. data/test/dummy/config/routes.rb +5 -0
  79. data/test/dummy/config/secrets.yml +32 -0
  80. data/test/dummy/config/spring.rb +6 -0
  81. data/test/dummy/config.ru +5 -0
  82. data/test/dummy/db/seeds.rb +2 -0
  83. data/test/dummy/log/.keep +0 -0
  84. data/test/factories/forter.rb +132 -0
  85. data/test/integration/workarea/admin/forter_order_integration_test.rb +36 -0
  86. data/test/integration/workarea/forter_authorize_cim_response_code_integration_test.rb +69 -0
  87. data/test/integration/workarea/forter_braintree_response_code_integration_test.rb +69 -0
  88. data/test/integration/workarea/forter_checkoutdotcom_integration_test.rb +71 -0
  89. data/test/integration/workarea/forter_cybersource_response_code_integration_test.rb +69 -0
  90. data/test/integration/workarea/forter_moneris_response_code_integration_test.rb +69 -0
  91. data/test/integration/workarea/forter_payflow_pro_response_code_test.rb +69 -0
  92. data/test/integration/workarea/storefront/forter_integration_test.rb +138 -0
  93. data/test/lib/workarea/forter/gateway_test.rb +47 -0
  94. data/test/models/workarea/checkout/forter_collect_payment_test.rb +60 -0
  95. data/test/models/workarea/forter_payment_test.rb +58 -0
  96. data/test/models/workarea/payment/forter_credit_card_test.rb +19 -0
  97. data/test/models/workarea/payment/forter_saved_credit_card_test.rb +32 -0
  98. data/test/services/workarea/forter/order_test.rb +82 -0
  99. data/test/support/workarea/forter_api_config.rb +27 -0
  100. data/test/system/workarea/admin/forter_system_test.rb +31 -0
  101. data/test/system/workarea/storefront/forter_braintree_checkout_system_test.rb +79 -0
  102. data/test/system/workarea/storefront/forter_tracking_system_test.rb +20 -0
  103. data/test/system/workarea/storefront/guest_checkout_system_test.decorator +43 -0
  104. data/test/teaspoon_env.rb +6 -0
  105. data/test/test_helper.rb +11 -0
  106. data/test/vcr_cassettes/forter/get_decision.yml +66 -0
  107. data/test/vcr_cassettes/forter/integration/authorize_net_response_code.yml +410 -0
  108. data/test/vcr_cassettes/forter/integration/braintree_response_code.yml +231 -0
  109. data/test/vcr_cassettes/forter/integration/checkoutdotcom_response_code.yml +129 -0
  110. data/test/vcr_cassettes/forter/integration/cyber_response_code.yml +199 -0
  111. data/test/vcr_cassettes/forter/integration/moneris_response_code.yml +84 -0
  112. data/test/vcr_cassettes/forter/integration/payflow_pro_response_code.yml +60 -0
  113. data/test/vcr_cassettes/forter/system/braintree_approved.yml +293 -0
  114. data/test/vcr_cassettes/forter/system/braintree_declined.yml +485 -0
  115. data/test/vcr_cassettes/forter/system/braintree_not_reviewed.yml +293 -0
  116. data/test/vcr_cassettes/forter/update_status.yml +182 -0
  117. data/test/view_models/workarea/storefront/order_view_model_test.decorator +10 -0
  118. data/test/workers/forter/update_status_test.rb +22 -0
  119. data/workarea-forter.gemspec +18 -0
  120. metadata +195 -0
@@ -0,0 +1,485 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://api.sandbox.braintreegateway.com/merchants/qwrbf4nrdzhy93zr/transactions
6
+ body:
7
+ encoding: UTF-8
8
+ string: |
9
+ <?xml version="1.0" encoding="UTF-8"?>
10
+ <transaction>
11
+ <amount>12.84</amount>
12
+ <order-id>0C5507DE07</order-id>
13
+ <customer>
14
+ <id></id>
15
+ <email>decline@forter.com</email>
16
+ <phone nil="true"/>
17
+ <first-name>Ben</first-name>
18
+ <last-name>Crouse</last-name>
19
+ </customer>
20
+ <options>
21
+ <store-in-vault type="boolean">true</store-in-vault>
22
+ <submit-for-settlement nil="true"/>
23
+ <hold-in-escrow nil="true"/>
24
+ </options>
25
+ <custom-fields nil="true"/>
26
+ <merchant-account-id>weblinc</merchant-account-id>
27
+ <credit-card>
28
+ <number>4111111111111111</number>
29
+ <cvv>999</cvv>
30
+ <expiration-month>01</expiration-month>
31
+ <expiration-year>2020</expiration-year>
32
+ <cardholder-name>Ben Crouse</cardholder-name>
33
+ </credit-card>
34
+ <billing>
35
+ <street-address>22 S. 3rd St.</street-address>
36
+ <extended-address></extended-address>
37
+ <company nil="true"/>
38
+ <locality>Philadelphia</locality>
39
+ <region>PA</region>
40
+ <postal-code>19106</postal-code>
41
+ <country-code-alpha2>US</country-code-alpha2>
42
+ </billing>
43
+ <type>sale</type>
44
+ </transaction>
45
+ headers:
46
+ Accept-Encoding:
47
+ - gzip
48
+ Accept:
49
+ - application/xml
50
+ User-Agent:
51
+ - Braintree Ruby Gem 2.93.0 (ActiveMerchant 1.89.0)
52
+ X-Apiversion:
53
+ - '5'
54
+ Content-Type:
55
+ - application/xml
56
+ Authorization:
57
+ - Basic dzN2NmQ5eXRnajRqNG56ODplYjFmODliZTlmMzYzZjYxZmZmM2Y5MDI0NDQ1NmViMg==
58
+ response:
59
+ status:
60
+ code: 201
61
+ message: Created
62
+ headers:
63
+ Date:
64
+ - Fri, 18 Jan 2019 14:09:19 GMT
65
+ Content-Type:
66
+ - application/xml; charset=utf-8
67
+ Transfer-Encoding:
68
+ - chunked
69
+ X-Frame-Options:
70
+ - SAMEORIGIN
71
+ X-Xss-Protection:
72
+ - 1; mode=block
73
+ X-Content-Type-Options:
74
+ - nosniff
75
+ X-Authentication:
76
+ - basic_auth
77
+ X-User:
78
+ - nrkvc7nn7kyfbtm6
79
+ Vary:
80
+ - Accept-Encoding
81
+ Content-Encoding:
82
+ - gzip
83
+ Etag:
84
+ - W/"e995d1fe887431151935ca8d7a5682bc"
85
+ Cache-Control:
86
+ - max-age=0, private, must-revalidate
87
+ X-Runtime:
88
+ - '0.603884'
89
+ X-Request-Id:
90
+ - 02-1547820559.192-173.161.162.1-8269735
91
+ Content-Security-Policy:
92
+ - frame-ancestors 'self'
93
+ X-Broxyid:
94
+ - 02-1547820559.192-173.161.162.1-8269735
95
+ Strict-Transport-Security:
96
+ - max-age=31536000; includeSubDomains
97
+ body:
98
+ encoding: ASCII-8BIT
99
+ string: !binary |-
100
+ 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
101
+ http_version:
102
+ recorded_at: Fri, 18 Jan 2019 14:09:20 GMT
103
+ - request:
104
+ method: get
105
+ uri: https://api.sandbox.braintreegateway.com/merchants/qwrbf4nrdzhy93zr/customers/202899751
106
+ body:
107
+ encoding: US-ASCII
108
+ string: ''
109
+ headers:
110
+ Accept-Encoding:
111
+ - gzip
112
+ Accept:
113
+ - application/xml
114
+ User-Agent:
115
+ - Braintree Ruby Gem 2.93.0 (ActiveMerchant 1.89.0)
116
+ X-Apiversion:
117
+ - '5'
118
+ Content-Type:
119
+ - application/xml
120
+ Authorization:
121
+ - Basic dzN2NmQ5eXRnajRqNG56ODplYjFmODliZTlmMzYzZjYxZmZmM2Y5MDI0NDQ1NmViMg==
122
+ response:
123
+ status:
124
+ code: 200
125
+ message: OK
126
+ headers:
127
+ Date:
128
+ - Fri, 18 Jan 2019 14:09:20 GMT
129
+ Content-Type:
130
+ - application/xml; charset=utf-8
131
+ Transfer-Encoding:
132
+ - chunked
133
+ X-Frame-Options:
134
+ - SAMEORIGIN
135
+ X-Xss-Protection:
136
+ - 1; mode=block
137
+ X-Content-Type-Options:
138
+ - nosniff
139
+ X-Authentication:
140
+ - basic_auth
141
+ X-User:
142
+ - nrkvc7nn7kyfbtm6
143
+ Vary:
144
+ - Accept-Encoding
145
+ Content-Encoding:
146
+ - gzip
147
+ Etag:
148
+ - W/"a6fbbdd76e2bf8c038084a013c736724"
149
+ Cache-Control:
150
+ - max-age=0, private, must-revalidate
151
+ X-Runtime:
152
+ - '0.106142'
153
+ X-Request-Id:
154
+ - 01-1547820560.190-173.161.162.1-10027388
155
+ Content-Security-Policy:
156
+ - frame-ancestors 'self'
157
+ X-Broxyid:
158
+ - 01-1547820560.190-173.161.162.1-10027388
159
+ Strict-Transport-Security:
160
+ - max-age=31536000; includeSubDomains
161
+ body:
162
+ encoding: ASCII-8BIT
163
+ string: !binary |-
164
+ H4sIABDeQVwAA6RUTVPbMBC98ysyviu2yacZR3TaGThx6BTolAsjW+tYjSwZSU4wv76SHX+EwKFDTtn33q5X2tWLr18LPtmD0kyKjRdOA28CIpWUie3Ge7i/QWvvGl/EaaWNLEDhi8kkZhRfBpfrKFotwti3kQMtmeZEGGTjl4NKsrlQ9C2vo9mbiv0x69QZU9ogQQrA30HE/ih2NCdd9EPJSkPsD4jjU1mURNQTwfjGM6oCz29wKAjjmELKmYBvmVQG1NSKY79lnKbMpYCzzIy8nmEHSDQz59pUATFAETETU5ew8agNDSvAs/cSRigIUbi+D+dXQXQVRk+xPyQ0+VVJ/y9/SGi/3wwDZQw41X1LlBmUEkX1sShRitSeY0/5FrFYwgSeh+4X++5/hzsRcjXwI9PEdt/HY0UuOQXVj3DSDeo91+fIwi0BIxw/iJ2QBzv1ETbIKmFUjWSGmNYVESmM9edkn/i1obQ1jluOTjd8DJ9JuUyJsY8HP/waKXu001NImBlO0oYDmZGKd40nUnIgwsNu5Zy0IQdxpey0kIJtxd0BRkXfM10KvJZMNf2gQgqT48Ce6gz8QF0DUe4mghN5g56ogb7vPSPcbcOR7dVbLhPC3UWmtzeL5PdjRW9DTm/z/dPNenH39+fsz9td7A+yLjEHwk1ul2u0DiOsk7GCbAFViuPcmFJf+T7RGoyeJoowuzsAW3szB1I7V/BLUhcgzHMBJpf0mcut9Pd256el2F6D2DMlhRNsNBE0ka/W7Pr6/RftIlqzRAkRu6G1E7STNh42x+2LOwYdZ1tRko/eRgf0AgUlYaNpd8AgkLRKG4cdaXqsk+kq0alipZvkqVX4vcbIHQgcXc5X6Sz226jjKsFeKkCiKpLmRdjrYdaJFA5m82CxXpFsloYzMluukySLUlitljRczpOltbHPUvvaXzPGpsYeRCGRprtPNrLnRxnKttG+1w9vpPGKsX2eALpBCKUK7KqdFRhMAV/8AwAA//8DAN0OAcBuBwAA
165
+ http_version:
166
+ recorded_at: Fri, 18 Jan 2019 14:09:20 GMT
167
+ - request:
168
+ method: get
169
+ uri: https://api.sandbox.braintreegateway.com/merchants/qwrbf4nrdzhy93zr/customers/202899751
170
+ body:
171
+ encoding: US-ASCII
172
+ string: ''
173
+ headers:
174
+ Accept-Encoding:
175
+ - gzip
176
+ Accept:
177
+ - application/xml
178
+ User-Agent:
179
+ - Braintree Ruby Gem 2.93.0 (ActiveMerchant 1.89.0)
180
+ X-Apiversion:
181
+ - '5'
182
+ Content-Type:
183
+ - application/xml
184
+ Authorization:
185
+ - Basic dzN2NmQ5eXRnajRqNG56ODplYjFmODliZTlmMzYzZjYxZmZmM2Y5MDI0NDQ1NmViMg==
186
+ response:
187
+ status:
188
+ code: 200
189
+ message: OK
190
+ headers:
191
+ Date:
192
+ - Fri, 18 Jan 2019 14:09:20 GMT
193
+ Content-Type:
194
+ - application/xml; charset=utf-8
195
+ Transfer-Encoding:
196
+ - chunked
197
+ X-Frame-Options:
198
+ - SAMEORIGIN
199
+ X-Xss-Protection:
200
+ - 1; mode=block
201
+ X-Content-Type-Options:
202
+ - nosniff
203
+ X-Authentication:
204
+ - basic_auth
205
+ X-User:
206
+ - nrkvc7nn7kyfbtm6
207
+ Vary:
208
+ - Accept-Encoding
209
+ Content-Encoding:
210
+ - gzip
211
+ Etag:
212
+ - W/"a6fbbdd76e2bf8c038084a013c736724"
213
+ Cache-Control:
214
+ - max-age=0, private, must-revalidate
215
+ X-Runtime:
216
+ - '0.138338'
217
+ X-Request-Id:
218
+ - 01-1547820560.669-173.161.162.1-10027432
219
+ Content-Security-Policy:
220
+ - frame-ancestors 'self'
221
+ X-Broxyid:
222
+ - 01-1547820560.669-173.161.162.1-10027432
223
+ Strict-Transport-Security:
224
+ - max-age=31536000; includeSubDomains
225
+ body:
226
+ encoding: ASCII-8BIT
227
+ string: !binary |-
228
+ H4sIABDeQVwAA6RUTVPbMBC98ysyviu2yacZR3TaGThx6BTolAsjW+tYjSwZSU4wv76SHX+EwKFDTtn33q5X2tWLr18LPtmD0kyKjRdOA28CIpWUie3Ge7i/QWvvGl/EaaWNLEDhi8kkZhRfBpfrKFotwti3kQMtmeZEGGTjl4NKsrlQ9C2vo9mbiv0x69QZU9ogQQrA30HE/ih2NCdd9EPJSkPsD4jjU1mURNQTwfjGM6oCz29wKAjjmELKmYBvmVQG1NSKY79lnKbMpYCzzIy8nmEHSDQz59pUATFAETETU5ew8agNDSvAs/cSRigIUbi+D+dXQXQVRk+xPyQ0+VVJ/y9/SGi/3wwDZQw41X1LlBmUEkX1sShRitSeY0/5FrFYwgSeh+4X++5/hzsRcjXwI9PEdt/HY0UuOQXVj3DSDeo91+fIwi0BIxw/iJ2QBzv1ETbIKmFUjWSGmNYVESmM9edkn/i1obQ1jluOTjd8DJ9JuUyJsY8HP/waKXu001NImBlO0oYDmZGKd40nUnIgwsNu5Zy0IQdxpey0kIJtxd0BRkXfM10KvJZMNf2gQgqT48Ce6gz8QF0DUe4mghN5g56ogb7vPSPcbcOR7dVbLhPC3UWmtzeL5PdjRW9DTm/z/dPNenH39+fsz9td7A+yLjEHwk1ul2u0DiOsk7GCbAFViuPcmFJf+T7RGoyeJoowuzsAW3szB1I7V/BLUhcgzHMBJpf0mcut9Pd256el2F6D2DMlhRNsNBE0ka/W7Pr6/RftIlqzRAkRu6G1E7STNh42x+2LOwYdZ1tRko/eRgf0AgUlYaNpd8AgkLRKG4cdaXqsk+kq0alipZvkqVX4vcbIHQgcXc5X6Sz226jjKsFeKkCiKpLmRdjrYdaJFA5m82CxXpFsloYzMluukySLUlitljRczpOltbHPUvvaXzPGpsYeRCGRprtPNrLnRxnKttG+1w9vpPGKsX2eALpBCKUK7KqdFRhMAV/8AwAA//8DAN0OAcBuBwAA
229
+ http_version:
230
+ recorded_at: Fri, 18 Jan 2019 14:09:21 GMT
231
+ - request:
232
+ method: post
233
+ uri: https://api.forter-secure.com/v2/orders/0C5507DE07
234
+ body:
235
+ encoding: UTF-8
236
+ string: '{"orderId":"0C5507DE07","orderType":"WEB","timeSentToForter":1547820561000,"checkoutTime":0,"primaryRecipient":{"personalDetails":{"firstName":"Ben","lastName":"Crouse"},"address":{"address1":"22
237
+ S. 3rd St.","city":"Philadelphia","country":"US","address2":"","zip":"19106","region":"PA"},"phone":[{"phone":"2159251800"}]},"totalAmount":{"amountUSD":"12.84"},"connectionInformation":{"customerIP":"127.0.0.1","userAgent":"Mozilla/5.0
238
+ (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko)
239
+ HeadlessChrome/71.0.3578.98 Safari/537.36","forterTokenCookie":null},"primaryDeliveryDetails":{"deliveryType":"PHYSICAL","deliveryMethod":"Ground","deliveryPrice":{"amountUSD":"7.00"},"carrier":null},"cartItems":[{"basicItemData":{"name":"Integration
240
+ Product","quantity":1,"type":"TANGIBLE","price":{"amountUSD":"5.00"},"productId":"INT_PRODUCT"}}],"payment":[{"tokenizedCard":{"token":"9247c3","lastFourDigits":"1111","expirationMonth":"01","expirationYear":"2020","cardBrand":"Visa","nameOnCard":"Ben
241
+ Crouse"},"billingDetails":{"personalDetails":{"firstName":"Ben","lastName":"Crouse"},"address":{"address1":"22
242
+ S. 3rd St.","address2":"","city":"Philadelphia","country":"US","zip":"19106","region":"PA"},"phone":[{"phone":"2159251800"}]}}],"accountOwner":{"firstName":"Ben","lastName":"Crouse","email":"decline@forter.com"},"totalDiscount":null}'
243
+ headers:
244
+ Content-Type:
245
+ - application/json
246
+ X-Forter-Siteid:
247
+ - 4d12ac5d794c
248
+ Api-Version:
249
+ - '2.3'
250
+ User-Agent:
251
+ - Faraday v0.15.4
252
+ Authorization:
253
+ - Basic a
254
+ Accept-Encoding:
255
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
256
+ Accept:
257
+ - "*/*"
258
+ response:
259
+ status:
260
+ code: 200
261
+ message: OK
262
+ headers:
263
+ Date:
264
+ - Fri, 18 Jan 2019 14:09:21 GMT
265
+ Content-Type:
266
+ - application/json; charset=utf-8
267
+ Content-Length:
268
+ - '164'
269
+ Connection:
270
+ - keep-alive
271
+ Server:
272
+ - openresty
273
+ Strict-Transport-Security:
274
+ - max-age=86400; includeSubDomains
275
+ Surrogate-Control:
276
+ - no-store
277
+ Cache-Control:
278
+ - no-store, no-cache, must-revalidate, proxy-revalidate
279
+ Pragma:
280
+ - no-cache
281
+ Expires:
282
+ - '0'
283
+ Etag:
284
+ - W/"a4-lCH5TxMiwzYUOqKNVx4YhqfZV8I"
285
+ Vary:
286
+ - Accept-Encoding
287
+ body:
288
+ encoding: UTF-8
289
+ string: '{"status":"success","transaction":"0C5507DE07","action":"decline","message":"
290
+ | Link in portal: https://portal.forter.com/dashboard/0C5507DE07","reasonCode":"Test"}'
291
+ http_version:
292
+ recorded_at: Fri, 18 Jan 2019 14:09:21 GMT
293
+ - request:
294
+ method: put
295
+ uri: https://api.sandbox.braintreegateway.com/merchants/qwrbf4nrdzhy93zr/transactions/czw0hphf/void
296
+ body:
297
+ encoding: UTF-8
298
+ string: ''
299
+ headers:
300
+ Accept-Encoding:
301
+ - gzip
302
+ Accept:
303
+ - application/xml
304
+ User-Agent:
305
+ - Braintree Ruby Gem 2.93.0 (ActiveMerchant 1.89.0)
306
+ X-Apiversion:
307
+ - '5'
308
+ Content-Type:
309
+ - application/xml
310
+ Authorization:
311
+ - Basic dzN2NmQ5eXRnajRqNG56ODplYjFmODliZTlmMzYzZjYxZmZmM2Y5MDI0NDQ1NmViMg==
312
+ response:
313
+ status:
314
+ code: 200
315
+ message: OK
316
+ headers:
317
+ Date:
318
+ - Fri, 18 Jan 2019 14:09:22 GMT
319
+ Content-Type:
320
+ - application/xml; charset=utf-8
321
+ Transfer-Encoding:
322
+ - chunked
323
+ X-Frame-Options:
324
+ - SAMEORIGIN
325
+ X-Xss-Protection:
326
+ - 1; mode=block
327
+ X-Content-Type-Options:
328
+ - nosniff
329
+ X-Authentication:
330
+ - basic_auth
331
+ X-User:
332
+ - nrkvc7nn7kyfbtm6
333
+ Vary:
334
+ - Accept-Encoding
335
+ Content-Encoding:
336
+ - gzip
337
+ Etag:
338
+ - W/"824e549b588cd3ece7152c2a0d3131a0"
339
+ Cache-Control:
340
+ - max-age=0, private, must-revalidate
341
+ X-Runtime:
342
+ - '0.299304'
343
+ X-Request-Id:
344
+ - 02-1547820561.727-173.161.162.1-8269901
345
+ Content-Security-Policy:
346
+ - frame-ancestors 'self'
347
+ X-Broxyid:
348
+ - 02-1547820561.727-173.161.162.1-8269901
349
+ Strict-Transport-Security:
350
+ - max-age=31536000; includeSubDomains
351
+ body:
352
+ encoding: ASCII-8BIT
353
+ string: !binary |-
354
+ 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
355
+ http_version:
356
+ recorded_at: Fri, 18 Jan 2019 14:09:22 GMT
357
+ - request:
358
+ method: get
359
+ uri: https://api.sandbox.braintreegateway.com/merchants/qwrbf4nrdzhy93zr/customers/202899751
360
+ body:
361
+ encoding: US-ASCII
362
+ string: ''
363
+ headers:
364
+ Accept-Encoding:
365
+ - gzip
366
+ Accept:
367
+ - application/xml
368
+ User-Agent:
369
+ - Braintree Ruby Gem 2.93.0 (ActiveMerchant 1.89.0)
370
+ X-Apiversion:
371
+ - '5'
372
+ Content-Type:
373
+ - application/xml
374
+ Authorization:
375
+ - Basic dzN2NmQ5eXRnajRqNG56ODplYjFmODliZTlmMzYzZjYxZmZmM2Y5MDI0NDQ1NmViMg==
376
+ response:
377
+ status:
378
+ code: 200
379
+ message: OK
380
+ headers:
381
+ Date:
382
+ - Fri, 18 Jan 2019 14:09:22 GMT
383
+ Content-Type:
384
+ - application/xml; charset=utf-8
385
+ Transfer-Encoding:
386
+ - chunked
387
+ X-Frame-Options:
388
+ - SAMEORIGIN
389
+ X-Xss-Protection:
390
+ - 1; mode=block
391
+ X-Content-Type-Options:
392
+ - nosniff
393
+ X-Authentication:
394
+ - basic_auth
395
+ X-User:
396
+ - nrkvc7nn7kyfbtm6
397
+ Vary:
398
+ - Accept-Encoding
399
+ Content-Encoding:
400
+ - gzip
401
+ Etag:
402
+ - W/"3b0fbb5755b2dafb3d6d4a5276a34812"
403
+ Cache-Control:
404
+ - max-age=0, private, must-revalidate
405
+ X-Runtime:
406
+ - '0.078764'
407
+ X-Request-Id:
408
+ - 01-1547820562.410-173.161.162.1-10027550
409
+ Content-Security-Policy:
410
+ - frame-ancestors 'self'
411
+ X-Broxyid:
412
+ - 01-1547820562.410-173.161.162.1-10027550
413
+ Strict-Transport-Security:
414
+ - max-age=31536000; includeSubDomains
415
+ body:
416
+ encoding: ASCII-8BIT
417
+ string: !binary |-
418
+ H4sIABLeQVwAA6RUTVPbMBC98ysyviu2yacZR3TaGThx6BTolAsjW+tYjSwZSU4wv76SHX+EwKFDTtn33q5X2tWLr18LPtmD0kyKjRdOA28CIpWUie3Ge7i/QWvvGl/EaaWNLEDhi8kkZhRfBpfrKFotwti3kQMtmeZEGGTjl4NKsrlQ9C2vo9mbiv0x69QZU9ogQQrA30HE/ih2NCdd9EPJSkPsD4jjU1mURNQTwfjGM6oCz29wKAjjmELKmYBvmVQG1NSKY79lnKbMpYCzzIy8nmEHSDQz59pUATFAETETU5ew8agNDSvAs/cSRigIUbi+D+dXQXQVRk+xPyQ0+VVJ/y9/SGi/3wwDZQw41X1LlBmUEkX1sShRitSeY0/5FrFYwgSeh+4X++5/hzsRcjXwI9PEdt/HY0UuOQXVj3DSDeo91+fIwi0BIxw/iJ2QBzv1ETbIKmFUjWSGmNYVESmM9edkn/i1obQ1jluOTjd8DJ9JuUyJsY8HP/waKXu001NImBlO0oYDmZGKd40nUnIgwsNu5Zy0IQdxpey0kIJtxd0BRkXfM10KvJZMNf2gQgqT48Ce6gz8QF0DUe4mghN5g56ogb7vPSPcbcOR7dVbLhPC3UWmtzeL5PdjRW9DTm/z/dPNenH39+fsz9td7A+yLjEHwk1ul2u0DiOsk7GCbAFViuPcmFJf+T7RGoyeJoowuzsAW3szB1I7V/BLUhcgzHMBJpf0mcut9Pd256el2F6D2DMlhRNsNBE0ka/W7Pr6/RftIlqzRAkRu6G1E7STNh42x+2LOwYdZ1tRko/eRgf0AgUlYaNpd8AgkLRKG4cdaXqsk+kq0alipZvkqVX4vcbIHQgcXc5X6Sz226jjKsFeKkCiKpLmRdjrYdaJFA5m82CxXpFsloYzMluukySLUlitljRczpOltbHPUvvaXzPGpsYeRCGRprtPNrLnRxnKttG+1w9vpPGKsX2eALpBCKUK7KqdFRhMAV/8AwAA//8DAN0OAcBuBwAA
419
+ http_version:
420
+ recorded_at: Fri, 18 Jan 2019 14:09:22 GMT
421
+ - request:
422
+ method: get
423
+ uri: https://api.sandbox.braintreegateway.com/merchants/qwrbf4nrdzhy93zr/customers/202899751
424
+ body:
425
+ encoding: US-ASCII
426
+ string: ''
427
+ headers:
428
+ Accept-Encoding:
429
+ - gzip
430
+ Accept:
431
+ - application/xml
432
+ User-Agent:
433
+ - Braintree Ruby Gem 2.93.0 (ActiveMerchant 1.89.0)
434
+ X-Apiversion:
435
+ - '5'
436
+ Content-Type:
437
+ - application/xml
438
+ Authorization:
439
+ - Basic dzN2NmQ5eXRnajRqNG56ODplYjFmODliZTlmMzYzZjYxZmZmM2Y5MDI0NDQ1NmViMg==
440
+ response:
441
+ status:
442
+ code: 200
443
+ message: OK
444
+ headers:
445
+ Date:
446
+ - Fri, 18 Jan 2019 14:09:23 GMT
447
+ Content-Type:
448
+ - application/xml; charset=utf-8
449
+ Transfer-Encoding:
450
+ - chunked
451
+ X-Frame-Options:
452
+ - SAMEORIGIN
453
+ X-Xss-Protection:
454
+ - 1; mode=block
455
+ X-Content-Type-Options:
456
+ - nosniff
457
+ X-Authentication:
458
+ - basic_auth
459
+ X-User:
460
+ - nrkvc7nn7kyfbtm6
461
+ Vary:
462
+ - Accept-Encoding
463
+ Content-Encoding:
464
+ - gzip
465
+ Etag:
466
+ - W/"a1d780eae5281bc127b0be32fc101e59"
467
+ Cache-Control:
468
+ - max-age=0, private, must-revalidate
469
+ X-Runtime:
470
+ - '0.107354'
471
+ X-Request-Id:
472
+ - 01-1547820562.860-173.161.162.1-10027569
473
+ Content-Security-Policy:
474
+ - frame-ancestors 'self'
475
+ X-Broxyid:
476
+ - 01-1547820562.860-173.161.162.1-10027569
477
+ Strict-Transport-Security:
478
+ - max-age=31536000; includeSubDomains
479
+ body:
480
+ encoding: ASCII-8BIT
481
+ string: !binary |-
482
+ H4sIABPeQVwAA6RUTVPbMBC98ysyviu2yacZR3TaGThx6BTolAsjW+tYjSwZSU4wv76SHX+EwKFDTtn33q5X2tWLr18LPtmD0kyKjRdOA28CIpWUie3Ge7i/QWvvGl/EaaWNLEDhi8kkZhRfBpfrKFotwti3kQMtmeZEGGTjl4NKsrlQ9C2vo9mbiv0x69QZU9ogQQrA30HE/ih2NCdd9EPJSkPsD4jjU1mURNQTwfjGM6oCz29wKAjjmELKmYBvmVQG1NSKY79lnKbMpYCzzIy8nmEHSDQz59pUATFAETETU5ew8agNDSvAs/cSRigIUbi+D+dXQXQVRk+xPyQ0+VVJ/y9/SGi/3wwDZQw41X1LlBmUEkX1sShRitSeY0/5FrFYwgSeh+4X++5/hzsRcjXwI9PEdt/HY0UuOQXVj3DSDeo91+fIwi0BIxw/iJ2QBzv1ETbIKmFUjWSGmNYVESmM9edkn/i1obQ1jluOTjd8DJ9JuUyJsY8HP/waKXu001NImBlO0oYDmZGKd40nUnIgwsNu5Zy0IQdxpey0kIJtxd0BRkXfM10KvJZMNf2gQgqT48Ce6gz8QF0DUe4mghN5g56ogb7vPSPcbcOR7dVbLhPC3UWmtzeL5PdjRW9DTm/z/dPNenH39+fsz9td7A+yLjEHwk1ul2u0DiOsk7GCbAFViuPcmFJf+T7RGoyeJoowuzsAW3szB1I7V/BLUhcgzHMBJpf0mcut9Pd256el2F6D2DMlhRNsNBE0ka/W7Pr6/RftIlqzRAkRu6G1E7STNh42x+2LOwYdZ1tRko/eRgf0AgUlYaNpd8AgkLRKG4cdaXqsk+kq0alipZvkqVX4vcbIHQgcXc5X6Sz226jjKsFeKkCiKpLmRdjrYdaJFA5m82CxXpFsloYzMluukySLUlitljRczpOltbHPUvvaXzPGpsYeRCGRprtPNrLnRxnKttG+1w9vpPGKsX2eALpBCKUK7KqdFRhMAV/8AwAA//8DAN0OAcBuBwAA
483
+ http_version:
484
+ recorded_at: Fri, 18 Jan 2019 14:09:23 GMT
485
+ recorded_with: VCR 2.9.3