workarea-paypal 2.0.12 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. checksums.yaml +4 -4
  2. data/.eslintrc.json +2 -1
  3. data/.gitignore +16 -11
  4. data/CHANGELOG.md +29 -5
  5. data/README.md +100 -6
  6. data/Rakefile +4 -5
  7. data/app/assets/javascripts/workarea/storefront/paypal/config.js.erb +44 -0
  8. data/app/assets/javascripts/workarea/storefront/paypal/modules/paypal_buttons.js +71 -0
  9. data/app/assets/javascripts/workarea/storefront/paypal/modules/paypal_hosted_fields.js +96 -0
  10. data/app/assets/javascripts/workarea/storefront/paypal/modules/update_checkout_submit_text.js +11 -5
  11. data/app/assets/javascripts/workarea/storefront/paypal/templates/paypal_fields.jst.ejs +43 -0
  12. data/app/controllers/workarea/storefront/checkout/place_order_controller.decorator +6 -4
  13. data/app/controllers/workarea/storefront/paypal_controller.rb +32 -26
  14. data/app/helpers/workarea/storefront/paypal_helper.rb +38 -0
  15. data/app/models/workarea/payment/authorize/paypal.rb +13 -13
  16. data/app/models/workarea/payment/capture/paypal.rb +10 -20
  17. data/app/models/workarea/payment/null_address.rb +37 -0
  18. data/app/models/workarea/payment/purchase/paypal.rb +1 -25
  19. data/app/models/workarea/payment/refund/paypal.rb +3 -6
  20. data/app/models/workarea/payment/tender/paypal.rb +14 -2
  21. data/app/models/workarea/payment.decorator +17 -3
  22. data/app/services/workarea/paypal/approve_order.rb +104 -0
  23. data/app/services/workarea/paypal/create_order.rb +177 -0
  24. data/app/services/workarea/paypal/update_order.rb +44 -0
  25. data/app/views/workarea/admin/orders/tenders/_paypal.html.haml +5 -2
  26. data/app/views/workarea/api/orders/tenders/_paypal.json.jbuilder +7 -1
  27. data/app/views/workarea/storefront/carts/_paypal_checkout.html.haml +6 -1
  28. data/app/views/workarea/storefront/checkouts/_paypal_payment.html.haml +16 -5
  29. data/app/views/workarea/storefront/order_mailer/tenders/_paypal.html.haml +5 -3
  30. data/app/views/workarea/storefront/orders/tenders/_paypal.html.haml +9 -2
  31. data/app/views/workarea/storefront/paypal/_paypal_sdk.html.haml +1 -0
  32. data/app/workers/workarea/paypal/handle_webhook_event.rb +64 -0
  33. data/config/initializers/append_points.rb +17 -5
  34. data/config/initializers/fields.rb +27 -0
  35. data/config/initializers/workarea.rb +41 -5
  36. data/config/locales/en.yml +14 -4
  37. data/config/routes.rb +3 -2
  38. data/lib/tasks/workarea/create_webhooks.rake +28 -0
  39. data/lib/workarea/paypal/engine.rb +4 -0
  40. data/lib/workarea/paypal/gateway.rb +200 -0
  41. data/lib/workarea/paypal/requests/create_webhook.rb +21 -0
  42. data/lib/workarea/paypal/requests/delete_webhook.rb +17 -0
  43. data/lib/workarea/paypal/requests/generate_token.rb +21 -0
  44. data/lib/workarea/paypal/requests/list_webhooks.rb +17 -0
  45. data/lib/workarea/paypal/version.rb +1 -1
  46. data/lib/workarea/paypal.rb +22 -19
  47. data/package.json +9 -0
  48. data/test/dummy/config/initializers/workarea.rb +1 -1
  49. data/test/factories/workarea/capture_completed_webhook.json +70 -0
  50. data/test/factories/workarea/capture_denied_webhook.json +68 -0
  51. data/test/factories/workarea/paypal.rb +34 -0
  52. data/test/helpers/workarea/storefront/paypal_helper_test.rb +35 -0
  53. data/test/integration/workarea/storefront/papyal_place_order_integration_test.rb +42 -0
  54. data/test/integration/workarea/storefront/paypal_integration_test.rb +104 -294
  55. data/test/lib/workarea/paypal/gateway_test.rb +236 -0
  56. data/test/models/workarea/payment/authorize/paypal_test.rb +57 -46
  57. data/test/models/workarea/payment/capture/paypal_test.rb +9 -51
  58. data/test/models/workarea/payment/null_address_test.rb +53 -0
  59. data/test/models/workarea/payment/refund/paypal_test.rb +39 -38
  60. data/test/models/workarea/paypal_payment_test.rb +65 -0
  61. data/test/models/workarea/search/paypal_order_text_test.rb +14 -0
  62. data/test/services/workarea/paypal/approve_order_test.rb +35 -0
  63. data/test/services/workarea/paypal/create_order_test.rb +127 -0
  64. data/test/services/workarea/paypal/update_order_test.rb +73 -0
  65. data/test/support/workarea/paypal_setup.rb +49 -0
  66. data/test/system/workarea/storefront/cart_system_test.decorator +1 -1
  67. data/test/system/workarea/storefront/logged_in_checkout_system_test.decorator +1 -1
  68. data/test/vcr_cassettes/paypal_approve_order.yml +106 -0
  69. data/test/vcr_cassettes/paypal_create_order.yml +110 -0
  70. data/test/vcr_cassettes/paypal_gateway_create_order.yml +105 -0
  71. data/test/vcr_cassettes/paypal_gateway_generate_token.yml +103 -0
  72. data/test/vcr_cassettes/paypal_gateway_get_order.yml +103 -0
  73. data/test/vcr_cassettes/paypal_gateway_update_order.yml +199 -0
  74. data/test/vcr_cassettes/paypal_gateway_webhooks.yml +403 -0
  75. data/test/vcr_cassettes/paypal_update_order.yml +204 -0
  76. data/test/workers/workarea/paypal/handle_webhook_event_test.rb +60 -0
  77. data/workarea-paypal.gemspec +2 -1
  78. metadata +64 -16
  79. data/app/services/workarea/paypal/setup.rb +0 -114
  80. data/app/services/workarea/paypal/update.rb +0 -69
  81. data/app/views/workarea/storefront/checkouts/_paypal_error.html.haml +0 -6
  82. data/app/views/workarea/storefront/order_mailer/tenders/_paypal.text.haml +0 -2
  83. data/lib/workarea/paypal/ext/active_merchant/paypal_express_gateway.rb +0 -9
  84. data/test/dummy/config/initializers/session_store.rb +0 -3
  85. data/test/integration/workarea/storefront/place_order_integration_test.decorator +0 -11
  86. data/test/models/workarea/payment/purchase/paypal_test.rb +0 -94
  87. data/test/models/workarea/payment_test.decorator +0 -34
  88. data/test/models/workarea/search/admin/order_test.decorator +0 -32
  89. data/test/services/workarea/paypal/setup_test.rb +0 -120
  90. data/test/services/workarea/paypal/update_test.rb +0 -221
  91. data/test/workarea/paypal/ext/active_merchant/paypal_express_gateway_test.rb +0 -17
@@ -0,0 +1,199 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://api.sandbox.paypal.com/v1/oauth2/token
6
+ body:
7
+ encoding: UTF-8
8
+ string: grant_type=client_credentials
9
+ headers:
10
+ Content-Type:
11
+ - application/x-www-form-urlencoded
12
+ Authorization:
13
+ - Basic RkFLRV9QQVlQQUxfQ0xJRU5UX0lEOkZBS0VfUEFZUEFMX0NMSUVOVF9TRUNS\nRVQ=
14
+ Accept-Encoding:
15
+ - gzip
16
+ Sdk-Name:
17
+ - Checkout SDK
18
+ Sdk-Version:
19
+ - 1.0.3
20
+ Sdk-Tech-Stack:
21
+ - Ruby2.6.3
22
+ Api-Integration-Type:
23
+ - PAYPALSDK
24
+ User-Agent:
25
+ - PayPalSDK/rest-sdk-ruby 1.0.3 (paypal-checkout-sdk 1.0.3; ruby 2.6.3p62-x86_64-darwin18;OpenSSL
26
+ 1.0.2s 28 May 2019)
27
+ Accept:
28
+ - "*/*"
29
+ response:
30
+ status:
31
+ code: 200
32
+ message: OK
33
+ headers:
34
+ Cache-Control:
35
+ - max-age=0, no-cache, no-store, must-revalidate
36
+ Content-Length:
37
+ - '918'
38
+ Content-Type:
39
+ - application/json
40
+ Date:
41
+ - Wed, 29 Jan 2020 15:02:38 GMT
42
+ Paypal-Debug-Id:
43
+ - 169ec84d9525f
44
+ X-Paypal-Token-Service:
45
+ - IAAS
46
+ body:
47
+ encoding: UTF-8
48
+ string: '{"scope":"https://uri.paypal.com/services/invoicing https://uri.paypal.com/services/disputes/read-buyer
49
+ https://uri.paypal.com/services/payments/realtimepayment https://uri.paypal.com/services/disputes/update-seller
50
+ https://uri.paypal.com/services/payments/payment/authcapture openid https://uri.paypal.com/services/disputes/read-seller
51
+ https://uri.paypal.com/services/payments/refund https://api.paypal.com/v1/vault/credit-card
52
+ https://api.paypal.com/v1/payments/.* https://uri.paypal.com/payments/payouts
53
+ https://api.paypal.com/v1/vault/credit-card/.* https://uri.paypal.com/services/subscriptions
54
+ https://uri.paypal.com/services/applications/webhooks","access_token":"A21AAGyyqoarQE6I9Wxbq_er-k3rmKigP-SNciVOPzMnW8IsLA6-Knhf0OKX0hBOKTyHP0YHQmuEUPRQBD_ttYqPqJJXxrw9Q","token_type":"Bearer","app_id":"APP-80W284485P519543T","expires_in":32272,"nonce":"2020-01-29T15:00:31ZFwuUb52ZyGkeqn1JmKF9XNyou0RthhLQZkXBhENsLVI"}'
55
+ http_version:
56
+ recorded_at: Wed, 29 Jan 2020 15:02:39 GMT
57
+ - request:
58
+ method: patch
59
+ uri: https://api.sandbox.paypal.com/v2/checkout/orders/5AN04236N2178502U
60
+ body:
61
+ encoding: UTF-8
62
+ string: '[{"op":"replace","path":"/purchase_units/@reference_id==''default''/amount","value":{"currency_code":"USD","value":"125.00"}}]'
63
+ headers:
64
+ Content-Type:
65
+ - application/json
66
+ Authorization:
67
+ - Bearer A21AAGyyqoarQE6I9Wxbq_er-k3rmKigP-SNciVOPzMnW8IsLA6-Knhf0OKX0hBOKTyHP0YHQmuEUPRQBD_ttYqPqJJXxrw9Q
68
+ Accept-Encoding:
69
+ - gzip
70
+ Sdk-Name:
71
+ - Checkout SDK
72
+ Sdk-Version:
73
+ - 1.0.3
74
+ Sdk-Tech-Stack:
75
+ - Ruby2.6.3
76
+ Api-Integration-Type:
77
+ - PAYPALSDK
78
+ User-Agent:
79
+ - PayPalSDK/rest-sdk-ruby 1.0.3 (paypal-checkout-sdk 1.0.3; ruby 2.6.3p62-x86_64-darwin18;OpenSSL
80
+ 1.0.2s 28 May 2019)
81
+ Accept:
82
+ - "*/*"
83
+ response:
84
+ status:
85
+ code: 204
86
+ message: No Content
87
+ headers:
88
+ Cache-Control:
89
+ - max-age=0, no-cache, no-store, must-revalidate
90
+ Date:
91
+ - Wed, 29 Jan 2020 15:02:40 GMT
92
+ Paypal-Debug-Id:
93
+ - 83d9c49c4436
94
+ body:
95
+ encoding: UTF-8
96
+ string: ''
97
+ http_version:
98
+ recorded_at: Wed, 29 Jan 2020 15:02:40 GMT
99
+ - request:
100
+ method: post
101
+ uri: https://api.sandbox.paypal.com/v1/oauth2/token
102
+ body:
103
+ encoding: UTF-8
104
+ string: grant_type=client_credentials
105
+ headers:
106
+ Content-Type:
107
+ - application/x-www-form-urlencoded
108
+ Authorization:
109
+ - Basic QWM1N1dtTEJsaHhZcXpoOHhJbng5cGRTaTA1alZQMGVDOEtuTE1OMlF5Zkw0RGtCaHVIUV8ycktlekhMRGluVVdkdDFVM2hJejdsODdTTEc6RU4tN3JrbVFzdjZGdUVtT215VmQ1Mk5MN0wwaFNmdUN0M2RFVGtqelhYUy05UDFwQmlTS1Q1OGtGRWtkd3pFX2o0MDY3ZGc5V0dwQnREQlc=
110
+ Accept-Encoding:
111
+ - gzip
112
+ Sdk-Name:
113
+ - Checkout SDK
114
+ Sdk-Version:
115
+ - 1.0.3
116
+ Sdk-Tech-Stack:
117
+ - Ruby2.6.3
118
+ Api-Integration-Type:
119
+ - PAYPALSDK
120
+ User-Agent:
121
+ - PayPalSDK/rest-sdk-ruby 1.0.3 (paypal-checkout-sdk 1.0.3; ruby 2.6.3p62-x86_64-darwin18;OpenSSL
122
+ 1.0.2s 28 May 2019)
123
+ Accept:
124
+ - "*/*"
125
+ response:
126
+ status:
127
+ code: 200
128
+ message: OK
129
+ headers:
130
+ Cache-Control:
131
+ - max-age=0, no-cache, no-store, must-revalidate
132
+ Content-Length:
133
+ - '918'
134
+ Content-Type:
135
+ - application/json
136
+ Date:
137
+ - Wed, 29 Jan 2020 15:02:40 GMT
138
+ Paypal-Debug-Id:
139
+ - 83d9c0c5a5aa
140
+ X-Paypal-Token-Service:
141
+ - IAAS
142
+ body:
143
+ encoding: UTF-8
144
+ string: '{"scope":"https://uri.paypal.com/services/invoicing https://uri.paypal.com/services/disputes/read-buyer
145
+ https://uri.paypal.com/services/payments/realtimepayment https://uri.paypal.com/services/disputes/update-seller
146
+ https://uri.paypal.com/services/payments/payment/authcapture openid https://uri.paypal.com/services/disputes/read-seller
147
+ https://uri.paypal.com/services/payments/refund https://api.paypal.com/v1/vault/credit-card
148
+ https://api.paypal.com/v1/payments/.* https://uri.paypal.com/payments/payouts
149
+ https://api.paypal.com/v1/vault/credit-card/.* https://uri.paypal.com/services/subscriptions
150
+ https://uri.paypal.com/services/applications/webhooks","access_token":"A21AAGyyqoarQE6I9Wxbq_er-k3rmKigP-SNciVOPzMnW8IsLA6-Knhf0OKX0hBOKTyHP0YHQmuEUPRQBD_ttYqPqJJXxrw9Q","token_type":"Bearer","app_id":"APP-80W284485P519543T","expires_in":32271,"nonce":"2020-01-29T15:00:31ZFwuUb52ZyGkeqn1JmKF9XNyou0RthhLQZkXBhENsLVI"}'
151
+ http_version:
152
+ recorded_at: Wed, 29 Jan 2020 15:02:40 GMT
153
+ - request:
154
+ method: get
155
+ uri: https://api.sandbox.paypal.com/v2/checkout/orders/5AN04236N2178502U
156
+ body:
157
+ encoding: US-ASCII
158
+ string: ''
159
+ headers:
160
+ Content-Type:
161
+ - application/json
162
+ Authorization:
163
+ - Bearer A21AAGyyqoarQE6I9Wxbq_er-k3rmKigP-SNciVOPzMnW8IsLA6-Knhf0OKX0hBOKTyHP0YHQmuEUPRQBD_ttYqPqJJXxrw9Q
164
+ Accept-Encoding:
165
+ - gzip
166
+ Sdk-Name:
167
+ - Checkout SDK
168
+ Sdk-Version:
169
+ - 1.0.3
170
+ Sdk-Tech-Stack:
171
+ - Ruby2.6.3
172
+ Api-Integration-Type:
173
+ - PAYPALSDK
174
+ User-Agent:
175
+ - PayPalSDK/rest-sdk-ruby 1.0.3 (paypal-checkout-sdk 1.0.3; ruby 2.6.3p62-x86_64-darwin18;OpenSSL
176
+ 1.0.2s 28 May 2019)
177
+ Accept:
178
+ - "*/*"
179
+ response:
180
+ status:
181
+ code: 200
182
+ message: OK
183
+ headers:
184
+ Cache-Control:
185
+ - max-age=0, no-cache, no-store, must-revalidate
186
+ Content-Length:
187
+ - '637'
188
+ Content-Type:
189
+ - application/json
190
+ Date:
191
+ - Wed, 29 Jan 2020 15:02:41 GMT
192
+ Paypal-Debug-Id:
193
+ - daf578314911
194
+ body:
195
+ encoding: UTF-8
196
+ string: '{"id":"5AN04236N2178502U","intent":"CAPTURE","purchase_units":[{"reference_id":"default","amount":{"currency_code":"USD","value":"125.00"},"payee":{"email_address":"sb-43jrhs896881@business.example.com","merchant_id":"M3XMHZJKTFK88"}}],"create_time":"2020-01-29T14:49:43Z","links":[{"href":"https://api.sandbox.paypal.com/v2/checkout/orders/5AN04236N2178502U","rel":"self","method":"GET"},{"href":"https://www.sandbox.paypal.com/checkoutnow?token=5AN04236N2178502U","rel":"approve","method":"GET"},{"href":"https://api.sandbox.paypal.com/v2/checkout/orders/5AN04236N2178502U/capture","rel":"capture","method":"POST"}],"status":"CREATED"}'
197
+ http_version:
198
+ recorded_at: Wed, 29 Jan 2020 15:02:41 GMT
199
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,403 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://api.sandbox.paypal.com/v1/oauth2/token
6
+ body:
7
+ encoding: UTF-8
8
+ string: grant_type=client_credentials
9
+ headers:
10
+ Content-Type:
11
+ - application/x-www-form-urlencoded
12
+ Authorization:
13
+ - Basic RkFLRV9QQVlQQUxfQ0xJRU5UX0lEOkZBS0VfUEFZUEFMX0NMSUVOVF9TRUNS\nRVQ=
14
+ Accept-Encoding:
15
+ - gzip
16
+ Sdk-Name:
17
+ - Checkout SDK
18
+ Sdk-Version:
19
+ - 1.0.3
20
+ Sdk-Tech-Stack:
21
+ - Ruby2.6.3
22
+ Api-Integration-Type:
23
+ - PAYPALSDK
24
+ User-Agent:
25
+ - PayPalSDK/rest-sdk-ruby 1.0.3 (paypal-checkout-sdk 1.0.3; ruby 2.6.3p62-x86_64-darwin18;OpenSSL
26
+ 1.0.2s 28 May 2019)
27
+ Accept:
28
+ - "*/*"
29
+ response:
30
+ status:
31
+ code: 200
32
+ message: OK
33
+ headers:
34
+ Cache-Control:
35
+ - max-age=0, no-cache, no-store, must-revalidate
36
+ Content-Length:
37
+ - '918'
38
+ Content-Type:
39
+ - application/json
40
+ Date:
41
+ - Thu, 06 Feb 2020 16:42:27 GMT
42
+ Paypal-Debug-Id:
43
+ - de5d164520a0c
44
+ X-Paypal-Token-Service:
45
+ - IAAS
46
+ body:
47
+ encoding: UTF-8
48
+ string: '{"scope":"https://uri.paypal.com/services/invoicing https://uri.paypal.com/services/disputes/read-buyer
49
+ https://uri.paypal.com/services/payments/realtimepayment https://uri.paypal.com/services/disputes/update-seller
50
+ https://uri.paypal.com/services/payments/payment/authcapture openid https://uri.paypal.com/services/disputes/read-seller
51
+ https://uri.paypal.com/services/payments/refund https://api.paypal.com/v1/vault/credit-card
52
+ https://api.paypal.com/v1/payments/.* https://uri.paypal.com/payments/payouts
53
+ https://api.paypal.com/v1/vault/credit-card/.* https://uri.paypal.com/services/subscriptions
54
+ https://uri.paypal.com/services/applications/webhooks","access_token":"A21AAFveIphmkPeQkxcAq1BS07DVrmJpoMOxMsZeCXmCwkbSkIp3O18l3JH-uHeCXYQJhmM1CZaMm8TyDepvU7KprlKuuiCyg","token_type":"Bearer","app_id":"APP-80W284485P519543T","expires_in":32400,"nonce":"2020-02-06T16:42:27ZFy3NsNH79TYyASlMh7tVMXVNGFTLxcg9I-fKIo2HAew"}'
55
+ http_version:
56
+ recorded_at: Thu, 06 Feb 2020 16:42:27 GMT
57
+ - request:
58
+ method: post
59
+ uri: https://api.sandbox.paypal.com/v1/notifications/webhooks
60
+ body:
61
+ encoding: UTF-8
62
+ string: '{"url":"https://example.com/my-webhooks","event_types":[{"name":"PAYMENT.CAPTURE.COMPLETED"},{"name":"PAYMENT.CAPTURE.DENIED"}]}'
63
+ headers:
64
+ Content-Type:
65
+ - application/json
66
+ Authorization:
67
+ - Bearer A21AAFveIphmkPeQkxcAq1BS07DVrmJpoMOxMsZeCXmCwkbSkIp3O18l3JH-uHeCXYQJhmM1CZaMm8TyDepvU7KprlKuuiCyg
68
+ Accept-Encoding:
69
+ - gzip
70
+ Sdk-Name:
71
+ - Checkout SDK
72
+ Sdk-Version:
73
+ - 1.0.3
74
+ Sdk-Tech-Stack:
75
+ - Ruby2.6.3
76
+ Api-Integration-Type:
77
+ - PAYPALSDK
78
+ User-Agent:
79
+ - PayPalSDK/rest-sdk-ruby 1.0.3 (paypal-checkout-sdk 1.0.3; ruby 2.6.3p62-x86_64-darwin18;OpenSSL
80
+ 1.0.2s 28 May 2019)
81
+ Accept:
82
+ - "*/*"
83
+ response:
84
+ status:
85
+ code: 201
86
+ message: Created
87
+ headers:
88
+ Cache-Control:
89
+ - max-age=0, no-cache, no-store, must-revalidate
90
+ Content-Length:
91
+ - '604'
92
+ Content-Type:
93
+ - application/json
94
+ Date:
95
+ - Thu, 06 Feb 2020 16:42:27 GMT
96
+ Paypal-Debug-Id:
97
+ - ee00e5e5c7d6
98
+ body:
99
+ encoding: UTF-8
100
+ string: '{"id":"20S04938V6225614R","url":"https://example.com/my-webhooks","event_types":[{"name":"PAYMENT.CAPTURE.COMPLETED","description":"A
101
+ payment capture completes."},{"name":"PAYMENT.CAPTURE.DENIED","description":"A
102
+ payment capture is denied."}],"links":[{"href":"https://api.sandbox.paypal.com/v1/notifications/webhooks/20S04938V6225614R","rel":"self","method":"GET"},{"href":"https://api.sandbox.paypal.com/v1/notifications/webhooks/20S04938V6225614R","rel":"update","method":"PATCH"},{"href":"https://api.sandbox.paypal.com/v1/notifications/webhooks/20S04938V6225614R","rel":"delete","method":"DELETE"}]}'
103
+ http_version:
104
+ recorded_at: Thu, 06 Feb 2020 16:42:28 GMT
105
+ - request:
106
+ method: post
107
+ uri: https://api.sandbox.paypal.com/v1/oauth2/token
108
+ body:
109
+ encoding: UTF-8
110
+ string: grant_type=client_credentials
111
+ headers:
112
+ Content-Type:
113
+ - application/x-www-form-urlencoded
114
+ Authorization:
115
+ - Basic QVpjT01OcmRTQTQzOE1ydXJTdl8zR0JNamZsSUxxTzNiUWFDX2xqV1dXREFsak9xU2QyN3NNRlJvRVdkX3pTUUM5LTMyQzZySUdneXBLZVk6RUh6WktCVWY2anJhdTYxd0pNQ1BmVUx2MU9iSThQR0pQaWx1dTM0cFN6QzhGcXhxd2F5Yk15dkVVbXFmQnVYT1hsaXhQU1dkakNiVmQzT2E=
116
+ Accept-Encoding:
117
+ - gzip
118
+ Sdk-Name:
119
+ - Checkout SDK
120
+ Sdk-Version:
121
+ - 1.0.3
122
+ Sdk-Tech-Stack:
123
+ - Ruby2.6.3
124
+ Api-Integration-Type:
125
+ - PAYPALSDK
126
+ User-Agent:
127
+ - PayPalSDK/rest-sdk-ruby 1.0.3 (paypal-checkout-sdk 1.0.3; ruby 2.6.3p62-x86_64-darwin18;OpenSSL
128
+ 1.0.2s 28 May 2019)
129
+ Accept:
130
+ - "*/*"
131
+ response:
132
+ status:
133
+ code: 200
134
+ message: OK
135
+ headers:
136
+ Cache-Control:
137
+ - max-age=0, no-cache, no-store, must-revalidate
138
+ Content-Length:
139
+ - '918'
140
+ Content-Type:
141
+ - application/json
142
+ Date:
143
+ - Thu, 06 Feb 2020 16:42:27 GMT
144
+ Paypal-Debug-Id:
145
+ - fe5b94a3ae4e7
146
+ X-Paypal-Token-Service:
147
+ - IAAS
148
+ body:
149
+ encoding: UTF-8
150
+ string: '{"scope":"https://uri.paypal.com/services/invoicing https://uri.paypal.com/services/disputes/read-buyer
151
+ https://uri.paypal.com/services/payments/realtimepayment https://uri.paypal.com/services/disputes/update-seller
152
+ https://uri.paypal.com/services/payments/payment/authcapture openid https://uri.paypal.com/services/disputes/read-seller
153
+ https://uri.paypal.com/services/payments/refund https://api.paypal.com/v1/vault/credit-card
154
+ https://api.paypal.com/v1/payments/.* https://uri.paypal.com/payments/payouts
155
+ https://api.paypal.com/v1/vault/credit-card/.* https://uri.paypal.com/services/subscriptions
156
+ https://uri.paypal.com/services/applications/webhooks","access_token":"A21AAFveIphmkPeQkxcAq1BS07DVrmJpoMOxMsZeCXmCwkbSkIp3O18l3JH-uHeCXYQJhmM1CZaMm8TyDepvU7KprlKuuiCyg","token_type":"Bearer","app_id":"APP-80W284485P519543T","expires_in":32399,"nonce":"2020-02-06T16:42:27ZFy3NsNH79TYyASlMh7tVMXVNGFTLxcg9I-fKIo2HAew"}'
157
+ http_version:
158
+ recorded_at: Thu, 06 Feb 2020 16:42:28 GMT
159
+ - request:
160
+ method: get
161
+ uri: https://api.sandbox.paypal.com/v1/notifications/webhooks
162
+ body:
163
+ encoding: US-ASCII
164
+ string: ''
165
+ headers:
166
+ Content-Type:
167
+ - application/json
168
+ Authorization:
169
+ - Bearer A21AAFveIphmkPeQkxcAq1BS07DVrmJpoMOxMsZeCXmCwkbSkIp3O18l3JH-uHeCXYQJhmM1CZaMm8TyDepvU7KprlKuuiCyg
170
+ Accept-Encoding:
171
+ - gzip
172
+ Sdk-Name:
173
+ - Checkout SDK
174
+ Sdk-Version:
175
+ - 1.0.3
176
+ Sdk-Tech-Stack:
177
+ - Ruby2.6.3
178
+ Api-Integration-Type:
179
+ - PAYPALSDK
180
+ User-Agent:
181
+ - PayPalSDK/rest-sdk-ruby 1.0.3 (paypal-checkout-sdk 1.0.3; ruby 2.6.3p62-x86_64-darwin18;OpenSSL
182
+ 1.0.2s 28 May 2019)
183
+ Accept:
184
+ - "*/*"
185
+ response:
186
+ status:
187
+ code: 200
188
+ message: OK
189
+ headers:
190
+ Cache-Control:
191
+ - max-age=0, no-cache, no-store, must-revalidate
192
+ Content-Length:
193
+ - '657'
194
+ Content-Type:
195
+ - application/json
196
+ Date:
197
+ - Thu, 06 Feb 2020 16:42:28 GMT
198
+ Paypal-Debug-Id:
199
+ - 9966e2a1501d6
200
+ body:
201
+ encoding: UTF-8
202
+ string: '{"webhooks":[{"id":"20S04938V6225614R","url":"https://example.com/my-webhooks","event_types":[{"name":"PAYMENT.CAPTURE.COMPLETED","description":"A
203
+ payment capture completes.","status":"ENABLED"},{"name":"PAYMENT.CAPTURE.DENIED","description":"A
204
+ payment capture is denied.","status":"ENABLED"}],"links":[{"href":"https://api.sandbox.paypal.com/v1/notifications/webhooks/20S04938V6225614R","rel":"self","method":"GET"},{"href":"https://api.sandbox.paypal.com/v1/notifications/webhooks/20S04938V6225614R","rel":"update","method":"PATCH"},{"href":"https://api.sandbox.paypal.com/v1/notifications/webhooks/20S04938V6225614R","rel":"delete","method":"DELETE"}]}]}'
205
+ http_version:
206
+ recorded_at: Thu, 06 Feb 2020 16:42:29 GMT
207
+ - request:
208
+ method: post
209
+ uri: https://api.sandbox.paypal.com/v1/oauth2/token
210
+ body:
211
+ encoding: UTF-8
212
+ string: grant_type=client_credentials
213
+ headers:
214
+ Content-Type:
215
+ - application/x-www-form-urlencoded
216
+ Authorization:
217
+ - Basic QVpjT01OcmRTQTQzOE1ydXJTdl8zR0JNamZsSUxxTzNiUWFDX2xqV1dXREFsak9xU2QyN3NNRlJvRVdkX3pTUUM5LTMyQzZySUdneXBLZVk6RUh6WktCVWY2anJhdTYxd0pNQ1BmVUx2MU9iSThQR0pQaWx1dTM0cFN6QzhGcXhxd2F5Yk15dkVVbXFmQnVYT1hsaXhQU1dkakNiVmQzT2E=
218
+ Accept-Encoding:
219
+ - gzip
220
+ Sdk-Name:
221
+ - Checkout SDK
222
+ Sdk-Version:
223
+ - 1.0.3
224
+ Sdk-Tech-Stack:
225
+ - Ruby2.6.3
226
+ Api-Integration-Type:
227
+ - PAYPALSDK
228
+ User-Agent:
229
+ - PayPalSDK/rest-sdk-ruby 1.0.3 (paypal-checkout-sdk 1.0.3; ruby 2.6.3p62-x86_64-darwin18;OpenSSL
230
+ 1.0.2s 28 May 2019)
231
+ Accept:
232
+ - "*/*"
233
+ response:
234
+ status:
235
+ code: 200
236
+ message: OK
237
+ headers:
238
+ Cache-Control:
239
+ - max-age=0, no-cache, no-store, must-revalidate
240
+ Content-Length:
241
+ - '918'
242
+ Content-Type:
243
+ - application/json
244
+ Date:
245
+ - Thu, 06 Feb 2020 16:42:28 GMT
246
+ Paypal-Debug-Id:
247
+ - 96b67c2dbc7ba
248
+ X-Paypal-Token-Service:
249
+ - IAAS
250
+ body:
251
+ encoding: UTF-8
252
+ string: '{"scope":"https://uri.paypal.com/services/invoicing https://uri.paypal.com/services/disputes/read-buyer
253
+ https://uri.paypal.com/services/payments/realtimepayment https://uri.paypal.com/services/disputes/update-seller
254
+ https://uri.paypal.com/services/payments/payment/authcapture openid https://uri.paypal.com/services/disputes/read-seller
255
+ https://uri.paypal.com/services/payments/refund https://api.paypal.com/v1/vault/credit-card
256
+ https://api.paypal.com/v1/payments/.* https://uri.paypal.com/payments/payouts
257
+ https://api.paypal.com/v1/vault/credit-card/.* https://uri.paypal.com/services/subscriptions
258
+ https://uri.paypal.com/services/applications/webhooks","access_token":"A21AAFveIphmkPeQkxcAq1BS07DVrmJpoMOxMsZeCXmCwkbSkIp3O18l3JH-uHeCXYQJhmM1CZaMm8TyDepvU7KprlKuuiCyg","token_type":"Bearer","app_id":"APP-80W284485P519543T","expires_in":32398,"nonce":"2020-02-06T16:42:27ZFy3NsNH79TYyASlMh7tVMXVNGFTLxcg9I-fKIo2HAew"}'
259
+ http_version:
260
+ recorded_at: Thu, 06 Feb 2020 16:42:30 GMT
261
+ - request:
262
+ method: delete
263
+ uri: https://api.sandbox.paypal.com/v1/notifications/webhooks/20S04938V6225614R
264
+ body:
265
+ encoding: US-ASCII
266
+ string: ''
267
+ headers:
268
+ Content-Type:
269
+ - application/json
270
+ Authorization:
271
+ - Bearer A21AAFveIphmkPeQkxcAq1BS07DVrmJpoMOxMsZeCXmCwkbSkIp3O18l3JH-uHeCXYQJhmM1CZaMm8TyDepvU7KprlKuuiCyg
272
+ Accept-Encoding:
273
+ - gzip
274
+ Sdk-Name:
275
+ - Checkout SDK
276
+ Sdk-Version:
277
+ - 1.0.3
278
+ Sdk-Tech-Stack:
279
+ - Ruby2.6.3
280
+ Api-Integration-Type:
281
+ - PAYPALSDK
282
+ User-Agent:
283
+ - PayPalSDK/rest-sdk-ruby 1.0.3 (paypal-checkout-sdk 1.0.3; ruby 2.6.3p62-x86_64-darwin18;OpenSSL
284
+ 1.0.2s 28 May 2019)
285
+ Accept:
286
+ - "*/*"
287
+ response:
288
+ status:
289
+ code: 204
290
+ message: No Content
291
+ headers:
292
+ Cache-Control:
293
+ - max-age=0, no-cache, no-store, must-revalidate
294
+ Date:
295
+ - Thu, 06 Feb 2020 16:42:29 GMT
296
+ Paypal-Debug-Id:
297
+ - e0e9f2216a9dc
298
+ body:
299
+ encoding: UTF-8
300
+ string: ''
301
+ http_version:
302
+ recorded_at: Thu, 06 Feb 2020 16:42:30 GMT
303
+ - request:
304
+ method: post
305
+ uri: https://api.sandbox.paypal.com/v1/oauth2/token
306
+ body:
307
+ encoding: UTF-8
308
+ string: grant_type=client_credentials
309
+ headers:
310
+ Content-Type:
311
+ - application/x-www-form-urlencoded
312
+ Authorization:
313
+ - Basic QVpjT01OcmRTQTQzOE1ydXJTdl8zR0JNamZsSUxxTzNiUWFDX2xqV1dXREFsak9xU2QyN3NNRlJvRVdkX3pTUUM5LTMyQzZySUdneXBLZVk6RUh6WktCVWY2anJhdTYxd0pNQ1BmVUx2MU9iSThQR0pQaWx1dTM0cFN6QzhGcXhxd2F5Yk15dkVVbXFmQnVYT1hsaXhQU1dkakNiVmQzT2E=
314
+ Accept-Encoding:
315
+ - gzip
316
+ Sdk-Name:
317
+ - Checkout SDK
318
+ Sdk-Version:
319
+ - 1.0.3
320
+ Sdk-Tech-Stack:
321
+ - Ruby2.6.3
322
+ Api-Integration-Type:
323
+ - PAYPALSDK
324
+ User-Agent:
325
+ - PayPalSDK/rest-sdk-ruby 1.0.3 (paypal-checkout-sdk 1.0.3; ruby 2.6.3p62-x86_64-darwin18;OpenSSL
326
+ 1.0.2s 28 May 2019)
327
+ Accept:
328
+ - "*/*"
329
+ response:
330
+ status:
331
+ code: 200
332
+ message: OK
333
+ headers:
334
+ Cache-Control:
335
+ - max-age=0, no-cache, no-store, must-revalidate
336
+ Content-Length:
337
+ - '918'
338
+ Content-Type:
339
+ - application/json
340
+ Date:
341
+ - Thu, 06 Feb 2020 16:42:30 GMT
342
+ Paypal-Debug-Id:
343
+ - e0e9f23ce8fb9
344
+ X-Paypal-Token-Service:
345
+ - IAAS
346
+ body:
347
+ encoding: UTF-8
348
+ string: '{"scope":"https://uri.paypal.com/services/invoicing https://uri.paypal.com/services/disputes/read-buyer
349
+ https://uri.paypal.com/services/payments/realtimepayment https://uri.paypal.com/services/disputes/update-seller
350
+ https://uri.paypal.com/services/payments/payment/authcapture openid https://uri.paypal.com/services/disputes/read-seller
351
+ https://uri.paypal.com/services/payments/refund https://api.paypal.com/v1/vault/credit-card
352
+ https://api.paypal.com/v1/payments/.* https://uri.paypal.com/payments/payouts
353
+ https://api.paypal.com/v1/vault/credit-card/.* https://uri.paypal.com/services/subscriptions
354
+ https://uri.paypal.com/services/applications/webhooks","access_token":"A21AAFveIphmkPeQkxcAq1BS07DVrmJpoMOxMsZeCXmCwkbSkIp3O18l3JH-uHeCXYQJhmM1CZaMm8TyDepvU7KprlKuuiCyg","token_type":"Bearer","app_id":"APP-80W284485P519543T","expires_in":32396,"nonce":"2020-02-06T16:42:27ZFy3NsNH79TYyASlMh7tVMXVNGFTLxcg9I-fKIo2HAew"}'
355
+ http_version:
356
+ recorded_at: Thu, 06 Feb 2020 16:42:31 GMT
357
+ - request:
358
+ method: get
359
+ uri: https://api.sandbox.paypal.com/v1/notifications/webhooks
360
+ body:
361
+ encoding: US-ASCII
362
+ string: ''
363
+ headers:
364
+ Content-Type:
365
+ - application/json
366
+ Authorization:
367
+ - Bearer A21AAFveIphmkPeQkxcAq1BS07DVrmJpoMOxMsZeCXmCwkbSkIp3O18l3JH-uHeCXYQJhmM1CZaMm8TyDepvU7KprlKuuiCyg
368
+ Accept-Encoding:
369
+ - gzip
370
+ Sdk-Name:
371
+ - Checkout SDK
372
+ Sdk-Version:
373
+ - 1.0.3
374
+ Sdk-Tech-Stack:
375
+ - Ruby2.6.3
376
+ Api-Integration-Type:
377
+ - PAYPALSDK
378
+ User-Agent:
379
+ - PayPalSDK/rest-sdk-ruby 1.0.3 (paypal-checkout-sdk 1.0.3; ruby 2.6.3p62-x86_64-darwin18;OpenSSL
380
+ 1.0.2s 28 May 2019)
381
+ Accept:
382
+ - "*/*"
383
+ response:
384
+ status:
385
+ code: 200
386
+ message: OK
387
+ headers:
388
+ Cache-Control:
389
+ - max-age=0, no-cache, no-store, must-revalidate
390
+ Content-Length:
391
+ - '15'
392
+ Content-Type:
393
+ - application/json
394
+ Date:
395
+ - Thu, 06 Feb 2020 16:42:30 GMT
396
+ Paypal-Debug-Id:
397
+ - bad1874a1a0b8
398
+ body:
399
+ encoding: UTF-8
400
+ string: '{"webhooks":[]}'
401
+ http_version:
402
+ recorded_at: Thu, 06 Feb 2020 16:42:31 GMT
403
+ recorded_with: VCR 2.9.3