paypal-sdk-rest 1.6.0 → 1.6.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +16 -27
- data/lib/paypal-sdk/core/api/rest.rb +3 -2
- data/lib/paypal-sdk/core/exceptions.rb +4 -0
- data/lib/paypal-sdk/rest/data_types.rb +8 -10
- data/lib/paypal-sdk/rest/error_hash.rb +1 -1
- data/lib/paypal-sdk/rest/version.rb +1 -1
- data/spec/core/api/rest_spec.rb +63 -0
- data/spec/rest/error_hash_spec.rb +83 -0
- data/spec/webhooks_examples_spec.rb +8 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 96c5110387c529214199709d42f2583c1c9ec8bf
|
4
|
+
data.tar.gz: 8c258a28b2716cba02248cc8f9a822a207c35b6c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c4da04b7606a4ce1fe30a0600aa2ef8521f696d7411c1158d0e0fc23553017d0325aa86a26e95a61fabe6692bca0fa303c3185be4a5c6486e0326fd0ffffecaa
|
7
|
+
data.tar.gz: d420deb8a02247e67d3648f502c246abb81fcde5eb5a7d7d3776c1e862b8b48cfeb336297870135c322d57714ae62dab044b9038f0d0e5a9b8e0172c4b0eb81d
|
data/README.md
CHANGED
@@ -134,38 +134,25 @@ PayPal::SDK::REST.set_config(
|
|
134
134
|
|
135
135
|
# Build Payment object
|
136
136
|
@payment = Payment.new({
|
137
|
-
:intent =>
|
138
|
-
:payer =>
|
139
|
-
:payment_method =>
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
:expire_month => "11",
|
145
|
-
:expire_year => "2018",
|
146
|
-
:cvv2 => "874",
|
147
|
-
:first_name => "Joe",
|
148
|
-
:last_name => "Shopper",
|
149
|
-
:billing_address => {
|
150
|
-
:line1 => "52 N Main ST",
|
151
|
-
:city => "Johnstown",
|
152
|
-
:state => "OH",
|
153
|
-
:postal_code => "43210",
|
154
|
-
:country_code => "US" }}}]},
|
155
|
-
:transactions => [{
|
137
|
+
:intent => "sale",
|
138
|
+
:payer => {
|
139
|
+
:payment_method => "paypal" },
|
140
|
+
:redirect_urls => {
|
141
|
+
:return_url => "http://localhost:3000/payment/execute",
|
142
|
+
:cancel_url => "http://localhost:3000/" },
|
143
|
+
:transactions => [{
|
156
144
|
:item_list => {
|
157
145
|
:items => [{
|
158
146
|
:name => "item",
|
159
147
|
:sku => "item",
|
160
|
-
:price => "
|
148
|
+
:price => "5",
|
161
149
|
:currency => "USD",
|
162
150
|
:quantity => 1 }]},
|
163
|
-
:amount =>
|
164
|
-
:total =>
|
165
|
-
:currency =>
|
166
|
-
:description =>
|
151
|
+
:amount => {
|
152
|
+
:total => "5",
|
153
|
+
:currency => "USD" },
|
154
|
+
:description => "This is the payment transaction description." }]})
|
167
155
|
|
168
|
-
# Create Payment and return the status(true or false)
|
169
156
|
if @payment.create
|
170
157
|
@payment.id # Payment Id
|
171
158
|
else
|
@@ -186,8 +173,6 @@ payment_history.payments
|
|
186
173
|
|
187
174
|
## Execute Payment
|
188
175
|
|
189
|
-
Only for [Payment](https://github.com/paypal/rest-api-sdk-ruby/blob/master/samples/payment/create_with_paypal.rb) with `payment_method` as `"paypal"`
|
190
|
-
|
191
176
|
```ruby
|
192
177
|
payment = Payment.find("PAY-57363176S1057143SKE2HO3A")
|
193
178
|
|
@@ -273,6 +258,10 @@ rescue ResourceNotFound => err
|
|
273
258
|
logger.error @payout.error.inspect
|
274
259
|
end
|
275
260
|
```
|
261
|
+
|
262
|
+
## Direct Credit Card Support
|
263
|
+
[Braintree Direct](https://www.braintreepayments.com/products/braintree-direct) is PayPal's preferred integration solution for accepting direct credit card payments in your mobile app or website. Braintree, a PayPal service, is the easiest way to accept credit cards, PayPal, and many other payment methods.
|
264
|
+
|
276
265
|
## License
|
277
266
|
Code released under [SDK LICENSE](LICENSE)
|
278
267
|
|
@@ -14,7 +14,6 @@ module PayPal::SDK::Core
|
|
14
14
|
DEFAULT_REST_END_POINTS = {
|
15
15
|
:sandbox => "https://api.sandbox.paypal.com",
|
16
16
|
:live => "https://api.paypal.com",
|
17
|
-
:security_test_sandbox => "https://test-api.sandbox.paypal.com"
|
18
17
|
}
|
19
18
|
TOKEN_REQUEST_PARAMS = "grant_type=client_credentials"
|
20
19
|
|
@@ -140,7 +139,9 @@ module PayPal::SDK::Core
|
|
140
139
|
def format_response(payload)
|
141
140
|
response = payload[:response]
|
142
141
|
payload[:data] =
|
143
|
-
if response.
|
142
|
+
if response.body && response.body.strip == ""
|
143
|
+
{}
|
144
|
+
elsif response.code >= "200" and response.code <= "299"
|
144
145
|
response.body && response.content_type == "application/json" ? MultiJson.load(response.body) : {}
|
145
146
|
elsif response.content_type == "application/json"
|
146
147
|
{ "error" => flat_hash(MultiJson.load(response.body)) }
|
@@ -1594,17 +1594,15 @@ module PayPal::SDK
|
|
1594
1594
|
WebhookEvent.find(webhook_event_id)
|
1595
1595
|
end
|
1596
1596
|
|
1597
|
-
|
1598
|
-
|
1599
|
-
|
1600
|
-
|
1601
|
-
|
1602
|
-
end
|
1597
|
+
def find(resource_id)
|
1598
|
+
raise ArgumentError.new("webhook_event_id required") if resource_id.to_s.strip.empty?
|
1599
|
+
path = "v1/notifications/webhooks-events/#{resource_id}"
|
1600
|
+
self.new(api.get(path))
|
1601
|
+
end
|
1603
1602
|
|
1604
|
-
|
1605
|
-
|
1606
|
-
|
1607
|
-
end
|
1603
|
+
def all(options = {})
|
1604
|
+
path = "v1/notifications/webhooks-events"
|
1605
|
+
WebhookEventList.new(api.get(path, options))
|
1608
1606
|
end
|
1609
1607
|
end
|
1610
1608
|
end
|
data/spec/core/api/rest_spec.rb
CHANGED
@@ -144,4 +144,67 @@ describe PayPal::SDK::Core::API::REST do
|
|
144
144
|
expect(response["error"]["name"]).to eql "VALIDATION_ERROR"
|
145
145
|
end
|
146
146
|
end
|
147
|
+
|
148
|
+
describe "format response" do
|
149
|
+
before :each do
|
150
|
+
@response = instance_double(Net::HTTPResponse)
|
151
|
+
allow(@response).to receive(:code) { "200" }
|
152
|
+
allow(@response).to receive(:content_type) { "application/json" }
|
153
|
+
end
|
154
|
+
|
155
|
+
it "parses empty object JSON correctly" do
|
156
|
+
allow(@response).to receive(:body) { "{}" }
|
157
|
+
payload = {
|
158
|
+
:response => @response
|
159
|
+
}
|
160
|
+
|
161
|
+
formatted_response = @api.format_response(payload)
|
162
|
+
expect(formatted_response).to_not be_nil
|
163
|
+
expect(formatted_response[:data]).to eq({})
|
164
|
+
end
|
165
|
+
|
166
|
+
it "parses empty string JSON correctly" do
|
167
|
+
allow(@response).to receive(:body) { '""' }
|
168
|
+
payload = {
|
169
|
+
:response => @response
|
170
|
+
}
|
171
|
+
|
172
|
+
formatted_response = @api.format_response(payload)
|
173
|
+
expect(formatted_response).to_not be_nil
|
174
|
+
expect(formatted_response[:data]).to eq("")
|
175
|
+
end
|
176
|
+
|
177
|
+
it "parses whitespace body correctly" do
|
178
|
+
allow(@response).to receive(:body) { ' ' }
|
179
|
+
payload = {
|
180
|
+
:response => @response
|
181
|
+
}
|
182
|
+
|
183
|
+
formatted_response = @api.format_response(payload)
|
184
|
+
expect(formatted_response).to_not be_nil
|
185
|
+
expect(formatted_response[:data]).to eq({})
|
186
|
+
end
|
187
|
+
|
188
|
+
it "parses nil body correctly" do
|
189
|
+
allow(@response).to receive(:body) { nil }
|
190
|
+
payload = {
|
191
|
+
:response => @response
|
192
|
+
}
|
193
|
+
|
194
|
+
formatted_response = @api.format_response(payload)
|
195
|
+
expect(formatted_response).to_not be_nil
|
196
|
+
expect(formatted_response[:data]).to eq({})
|
197
|
+
end
|
198
|
+
|
199
|
+
it "parses with whitespace around JSON correctly" do
|
200
|
+
allow(@response).to receive(:body) { ' { "test": "value" } ' }
|
201
|
+
payload = {
|
202
|
+
:response => @response
|
203
|
+
}
|
204
|
+
|
205
|
+
formatted_response = @api.format_response(payload)
|
206
|
+
expect(formatted_response).to_not be_nil
|
207
|
+
expect(formatted_response[:data]).to eq({ "test" => "value" })
|
208
|
+
end
|
209
|
+
end
|
147
210
|
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
module PayPal::SDK::REST
|
2
|
+
describe ErrorHash do
|
3
|
+
it 'converts Hashes to ErrorHashes' do
|
4
|
+
hash = ErrorHash.convert({
|
5
|
+
nested_hash: { bing: 'bong' },
|
6
|
+
empty_array: [],
|
7
|
+
array_with_hashes: [
|
8
|
+
{ foo: 'boo' },
|
9
|
+
{ biz: 'boz' }
|
10
|
+
],
|
11
|
+
array_without_hashes: [1, 2, 3],
|
12
|
+
nilly: nil,
|
13
|
+
stringy: 'cheese'
|
14
|
+
})
|
15
|
+
|
16
|
+
expect(hash).to be_a(ErrorHash)
|
17
|
+
expect(hash.nested_hash).to be_a(ErrorHash)
|
18
|
+
expect(hash.empty_array).to eq([])
|
19
|
+
expect(hash.array_with_hashes[0]).to be_a(ErrorHash)
|
20
|
+
expect(hash.array_with_hashes[1]).to be_a(ErrorHash)
|
21
|
+
expect(hash.array_without_hashes).to eq([1, 2, 3])
|
22
|
+
expect(hash.nilly).to be_nil
|
23
|
+
expect(hash.stringy).to eq('cheese')
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'can access string keys as properties, strings, or symbols' do
|
27
|
+
hash = ErrorHash.convert({ 'foo' => 5 })
|
28
|
+
hash['boo'] = 'grue'
|
29
|
+
|
30
|
+
expect(hash.foo).to eq(5)
|
31
|
+
expect(hash['foo']).to eq(5)
|
32
|
+
expect(hash[:foo]).to eq(5)
|
33
|
+
expect(hash.boo).to eq('grue')
|
34
|
+
expect(hash['boo']).to eq('grue')
|
35
|
+
expect(hash[:boo]).to eq('grue')
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'can access symbol keys as properties, strings, or symbols' do
|
39
|
+
hash = ErrorHash.convert({ :foo => 5 })
|
40
|
+
hash[:boo] = 'grue'
|
41
|
+
|
42
|
+
expect(hash.foo).to eq(5)
|
43
|
+
expect(hash['foo']).to eq(5)
|
44
|
+
expect(hash[:foo]).to eq(5)
|
45
|
+
expect(hash.boo).to eq('grue')
|
46
|
+
expect(hash['boo']).to eq('grue')
|
47
|
+
expect(hash[:boo]).to eq('grue')
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'converts Hashes to ErrorHashes on assignment' do
|
51
|
+
hash = ErrorHash.new
|
52
|
+
hash['foo'] = { bing: 'bong' }
|
53
|
+
|
54
|
+
expect(hash['foo']).to be_a(ErrorHash)
|
55
|
+
expect(hash['foo'].bing).to eq('bong')
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'converts Hashes inside of Arrays to ErrorHashes on assignment' do
|
59
|
+
hash = ErrorHash.new
|
60
|
+
hash['foo'] = [{ bing: 'bong' }]
|
61
|
+
|
62
|
+
expect(hash['foo'][0]).to be_a(ErrorHash)
|
63
|
+
expect(hash['foo'][0].bing).to eq('bong')
|
64
|
+
end
|
65
|
+
|
66
|
+
it "doesn't convert Hashes inside of Arrays if the first element of the array isn't a Hash" do
|
67
|
+
hash = ErrorHash.new
|
68
|
+
hash['foo'] = [100, { bing: 'bong' }]
|
69
|
+
|
70
|
+
expect(hash['foo'][1]).to be_a(Hash)
|
71
|
+
expect(hash['foo'][1]).not_to be_a(ErrorHash)
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'gets and sets numbers and strings' do
|
75
|
+
hash = ErrorHash.new
|
76
|
+
hash['foo'] = 123
|
77
|
+
hash['boo'] = 'baa'
|
78
|
+
|
79
|
+
expect(hash['foo']).to eq(123)
|
80
|
+
expect(hash['boo']).to eq('baa')
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -15,6 +15,14 @@ describe "Webhooks" do
|
|
15
15
|
]
|
16
16
|
}
|
17
17
|
|
18
|
+
describe "PayPal::SDK::Core::API::DataTypes::WebhookEvent" do
|
19
|
+
describe "get event by id via .find" do
|
20
|
+
it "exists" do
|
21
|
+
expect(WebhookEvent).to respond_to(:find)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
18
26
|
describe "Notifications", :integration => true do
|
19
27
|
it "create webhook" do
|
20
28
|
$webhook = PayPal::SDK::REST::Webhook.new(webhookAttributes)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: paypal-sdk-rest
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.6.
|
4
|
+
version: 1.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- PayPal
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-09-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: coveralls
|
@@ -124,6 +124,7 @@ files:
|
|
124
124
|
- spec/payments_examples_spec.rb
|
125
125
|
- spec/payouts_examples_spec.rb
|
126
126
|
- spec/rest/data_types_spec.rb
|
127
|
+
- spec/rest/error_hash_spec.rb
|
127
128
|
- spec/spec_helper.rb
|
128
129
|
- spec/subscription_examples_spec.rb
|
129
130
|
- spec/support/sample_data.rb
|
@@ -149,7 +150,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
149
150
|
version: '0'
|
150
151
|
requirements: []
|
151
152
|
rubyforge_project:
|
152
|
-
rubygems_version: 2.6.
|
153
|
+
rubygems_version: 2.6.11
|
153
154
|
signing_key:
|
154
155
|
specification_version: 4
|
155
156
|
summary: The PayPal REST SDK provides Ruby APIs to create, process and manage payment.
|
@@ -170,6 +171,7 @@ test_files:
|
|
170
171
|
- spec/payments_examples_spec.rb
|
171
172
|
- spec/payouts_examples_spec.rb
|
172
173
|
- spec/rest/data_types_spec.rb
|
174
|
+
- spec/rest/error_hash_spec.rb
|
173
175
|
- spec/spec_helper.rb
|
174
176
|
- spec/subscription_examples_spec.rb
|
175
177
|
- spec/support/sample_data.rb
|