paypal-sdk-rest 1.1.3 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/paypal-sdk/rest/data_types.rb +156 -1
- data/lib/paypal-sdk/rest/version.rb +1 -1
- data/spec/log/rest_http.log +10 -12
- data/spec/webhooks_examples_spec.rb +42 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 38b4da25c343ab05d78dd621d36bb49078596118
|
4
|
+
data.tar.gz: 34cfe1f759ef25430f2473191ce6a6df937c56c4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8a2b39a7bf199f4f636a332b096862edd7172c0d94751f783a2627eaef95ad9b8b246879597a0bfdced3be0e8c0ffd4f21b846cc492629250deaa3bfc13c1481
|
7
|
+
data.tar.gz: e5000ed76b0d7d699f3977b56470129e6ebfeb91a3636cf85b29b8ea9045381d23965e1c1c88e47f2600fd164833bba01218693c5f3f061b132705fe0b4eb916
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'paypal-sdk-core'
|
2
2
|
require 'uuidtools'
|
3
|
+
require 'multi_json'
|
3
4
|
|
4
5
|
module PayPal::SDK
|
5
6
|
module REST
|
@@ -1011,6 +1012,161 @@ module PayPal::SDK
|
|
1011
1012
|
end
|
1012
1013
|
end
|
1013
1014
|
|
1015
|
+
class WebhooksEventType < Base
|
1016
|
+
|
1017
|
+
def self.load_members
|
1018
|
+
array_of :event_types, EventType
|
1019
|
+
end
|
1020
|
+
|
1021
|
+
include RequestDataType
|
1022
|
+
|
1023
|
+
class << self
|
1024
|
+
def all(options = {})
|
1025
|
+
path = "v1/notifications/webhooks-event-types"
|
1026
|
+
EventTypeList.new(api.get(path, options))
|
1027
|
+
end
|
1028
|
+
end
|
1029
|
+
end
|
1030
|
+
|
1031
|
+
class EventTypeList < Base
|
1032
|
+
def self.load_members
|
1033
|
+
array_of :event_types, EventType
|
1034
|
+
end
|
1035
|
+
end
|
1036
|
+
|
1037
|
+
class WebhookList < Base
|
1038
|
+
def self.load_members
|
1039
|
+
array_of :webhooks, Webhook
|
1040
|
+
end
|
1041
|
+
end
|
1042
|
+
|
1043
|
+
class EventType < Base
|
1044
|
+
def self.load_members
|
1045
|
+
object_of :name, String
|
1046
|
+
object_of :description, String
|
1047
|
+
end
|
1048
|
+
end
|
1049
|
+
|
1050
|
+
class WebhookEventList < Base
|
1051
|
+
def self.load_members
|
1052
|
+
object_of :count, Integer
|
1053
|
+
array_of :events, WebhookEvent
|
1054
|
+
array_of :links, Links
|
1055
|
+
end
|
1056
|
+
end
|
1057
|
+
|
1058
|
+
class WebhookEvent < Base
|
1059
|
+
def self.load_members
|
1060
|
+
object_of :id, String
|
1061
|
+
object_of :create_time, String
|
1062
|
+
object_of :resource_type, String
|
1063
|
+
object_of :event_type, String
|
1064
|
+
object_of :summary, String
|
1065
|
+
object_of :resource, Hash
|
1066
|
+
array_of :links, Links
|
1067
|
+
end
|
1068
|
+
|
1069
|
+
def resend()
|
1070
|
+
path = "v1/notifications/webhooks-events/#{self.id}/resend"
|
1071
|
+
WebhookEvent.new(api.post(path))
|
1072
|
+
end
|
1073
|
+
|
1074
|
+
def get_resource()
|
1075
|
+
webhook_resource_type = self.resource_type
|
1076
|
+
resource_class = self.class.get_resource_class(webhook_resource_type)
|
1077
|
+
if resource_class
|
1078
|
+
return Object::const_get(resource_class).new(self.resource)
|
1079
|
+
else
|
1080
|
+
return self.resource
|
1081
|
+
end
|
1082
|
+
end
|
1083
|
+
|
1084
|
+
include RequestDataType
|
1085
|
+
|
1086
|
+
class << self
|
1087
|
+
|
1088
|
+
def get_resource_class(name)
|
1089
|
+
class_array = PayPal::SDK::REST.constants.select {|c| Class === PayPal::SDK::REST.const_get(c)}
|
1090
|
+
class_array.each do |classname|
|
1091
|
+
if (classname.to_s.downcase == name.downcase)
|
1092
|
+
return classname
|
1093
|
+
end
|
1094
|
+
end
|
1095
|
+
end
|
1096
|
+
|
1097
|
+
def search(page_size, start_time, end_time)
|
1098
|
+
path = "v1/notifications/webhooks-events"
|
1099
|
+
options = { :page_size => page_size, :start_time => start_time, :end_time => end_time }
|
1100
|
+
WebhookEventList.new(api.get(path, options))
|
1101
|
+
end
|
1102
|
+
|
1103
|
+
def get(webhook_event_id)
|
1104
|
+
raise ArgumentError.new("webhook_event_id required") if webhook_event_id.to_s.strip.empty?
|
1105
|
+
path = "v1/notifications/webhooks-events/#{webhook_event_id}"
|
1106
|
+
WebhookEvent.new(api.get(path))
|
1107
|
+
end
|
1108
|
+
end
|
1109
|
+
end
|
1110
|
+
|
1111
|
+
class Webhook < Base
|
1112
|
+
|
1113
|
+
def self.load_members
|
1114
|
+
object_of :id, String
|
1115
|
+
object_of :url, String
|
1116
|
+
array_of :event_types, EventType
|
1117
|
+
array_of :links, Links
|
1118
|
+
end
|
1119
|
+
|
1120
|
+
include RequestDataType
|
1121
|
+
|
1122
|
+
def create()
|
1123
|
+
path = "v1/notifications/webhooks"
|
1124
|
+
response = api.post(path, self.to_hash, http_header)
|
1125
|
+
self.merge!(response)
|
1126
|
+
Webhook.new(response)
|
1127
|
+
end
|
1128
|
+
|
1129
|
+
def update(patch)
|
1130
|
+
patch = Patch.new(patch) unless patch.is_a? Patch
|
1131
|
+
patch_request = Array.new(1, patch.to_hash)
|
1132
|
+
path = "v1/notifications/webhooks/#{self.id}"
|
1133
|
+
response = api.patch(path, patch_request, http_header)
|
1134
|
+
self.merge!(response)
|
1135
|
+
success?
|
1136
|
+
end
|
1137
|
+
|
1138
|
+
def delete()
|
1139
|
+
path = "v1/notifications/webhooks/#{self.id}"
|
1140
|
+
response = api.delete(path, {})
|
1141
|
+
self.merge!(response)
|
1142
|
+
success?
|
1143
|
+
end
|
1144
|
+
|
1145
|
+
class << self
|
1146
|
+
def get(webhook_id)
|
1147
|
+
raise ArgumentError.new("webhook_id required") if webhook_id.to_s.strip.empty?
|
1148
|
+
path = "v1/notifications/webhooks/#{webhook_id}"
|
1149
|
+
Webhook.new(api.get(path))
|
1150
|
+
end
|
1151
|
+
def get_event_types(webhook_id)
|
1152
|
+
raise ArgumentError.new("webhook_id required") if webhook_id.to_s.strip.empty?
|
1153
|
+
path = "v1/notifications/webhooks/#{webhook_id}/event-types"
|
1154
|
+
EventTypeList.new(api.get(path))
|
1155
|
+
end
|
1156
|
+
def all(options={})
|
1157
|
+
path = "v1/notifications/webhooks"
|
1158
|
+
WebhookList.new(api.get(path))
|
1159
|
+
end
|
1160
|
+
|
1161
|
+
def simulate_event(webhook_id, url, event_type)
|
1162
|
+
path = "v1/notifications/simulate-event"
|
1163
|
+
options = { :webhook_id => webhook_id, :url => url, :event_type => event_type }
|
1164
|
+
response = api.post(path, options)
|
1165
|
+
WebhookEvent.new(response)
|
1166
|
+
end
|
1167
|
+
end
|
1168
|
+
end
|
1169
|
+
|
1014
1170
|
class Payout < Base
|
1015
1171
|
|
1016
1172
|
def self.load_members
|
@@ -1531,7 +1687,6 @@ module PayPal::SDK
|
|
1531
1687
|
|
1532
1688
|
def execute()
|
1533
1689
|
path = "v1/payments/billing-agreements/#{self.token}/agreement-execute"
|
1534
|
-
puts path
|
1535
1690
|
response = api.post(path, {}, http_header)
|
1536
1691
|
self.merge!(response)
|
1537
1692
|
success?
|
data/spec/log/rest_http.log
CHANGED
@@ -2,40 +2,38 @@ opening connection to api.sandbox.paypal.com:443...
|
|
2
2
|
opened
|
3
3
|
starting SSL for api.sandbox.paypal.com:443...
|
4
4
|
SSL established
|
5
|
-
<- "GET /v1/payments/payment/PAY-1234 HTTP/1.1\r\nX-Paypal-Sandbox-Email-Address: Platform.sdk.seller@gmail.com\r\nAuthorization: Bearer
|
5
|
+
<- "GET /v1/payments/payment/PAY-1234 HTTP/1.1\r\nX-Paypal-Sandbox-Email-Address: Platform.sdk.seller@gmail.com\r\nAuthorization: Bearer A015p9UmS9bbjBKvXFguSGxuZxGMlvD8iJdSLcI6dBVCi2c\r\nContent-Type: application/json\r\nUser-Agent: PayPalSDK/rest-sdk-ruby 1.1.2 (paypal-sdk-core 1.1.2; ruby 2.1.2p95-x86_64-darwin13.0)\r\nAccept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3\r\nAccept: */*\r\nHost: api.sandbox.paypal.com\r\n\r\n"
|
6
6
|
-> "HTTP/1.1 404 Not Found\r\n"
|
7
7
|
-> "Server: Apache-Coyote/1.1\r\n"
|
8
|
-
-> "PROXY_SERVER_INFO: host=
|
9
|
-
-> "Paypal-Debug-Id:
|
10
|
-
-> "SERVER_INFO: paymentsplatformserv:v1.payments.payment&CalThreadId=6491&TopLevelTxnStartTime=14c948cca8d&Host=slcsbpaymentsplatformserv3001.slc.paypal.com&pid=10160\r\n"
|
8
|
+
-> "PROXY_SERVER_INFO: host=slcsbplatformapiserv3002.slc.paypal.com;threadId=6008\r\n"
|
9
|
+
-> "Paypal-Debug-Id: c8f86460d1f6d\r\n"
|
11
10
|
-> "Content-Language: *\r\n"
|
12
|
-
-> "Date: Tue,
|
11
|
+
-> "Date: Tue, 05 May 2015 14:30:04 GMT\r\n"
|
13
12
|
-> "Content-Type: application/json\r\n"
|
14
13
|
-> "Content-Length: 207\r\n"
|
15
14
|
-> "\r\n"
|
16
15
|
reading 207 bytes...
|
17
|
-
-> "{\"name\":\"INVALID_RESOURCE_ID\",\"message\":\"The requested resource ID was not found\",\"information_link\":\"https://developer.paypal.com/webapps/developer/docs/api/#INVALID_RESOURCE_ID\",\"debug_id\":\"
|
16
|
+
-> "{\"name\":\"INVALID_RESOURCE_ID\",\"message\":\"The requested resource ID was not found\",\"information_link\":\"https://developer.paypal.com/webapps/developer/docs/api/#INVALID_RESOURCE_ID\",\"debug_id\":\"c8f86460d1f6d\"}"
|
18
17
|
read 207 bytes
|
19
18
|
Conn keep-alive
|
20
19
|
opening connection to api.sandbox.paypal.com:443...
|
21
20
|
opened
|
22
21
|
starting SSL for api.sandbox.paypal.com:443...
|
23
22
|
SSL established
|
24
|
-
<- "POST /v1/payments/payment HTTP/1.1\r\nX-Paypal-Sandbox-Email-Address: Platform.sdk.seller@gmail.com\r\nAuthorization: Bearer
|
23
|
+
<- "POST /v1/payments/payment HTTP/1.1\r\nX-Paypal-Sandbox-Email-Address: Platform.sdk.seller@gmail.com\r\nAuthorization: Bearer A015p9UmS9bbjBKvXFguSGxuZxGMlvD8iJdSLcI6dBVCi2c\r\nContent-Type: application/json\r\nUser-Agent: PayPalSDK/rest-sdk-ruby 1.1.2 (paypal-sdk-core 1.1.2; ruby 2.1.2p95-x86_64-darwin13.0)\r\nAccept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3\r\nAccept: */*\r\nHost: api.sandbox.paypal.com\r\nContent-Length: 2\r\n\r\n"
|
25
24
|
<- "{}"
|
26
25
|
-> "HTTP/1.1 400 Bad Request\r\n"
|
27
26
|
-> "Server: Apache-Coyote/1.1\r\n"
|
28
|
-
-> "PROXY_SERVER_INFO: host=slcsbplatformapiserv3002.slc.paypal.com;threadId=
|
29
|
-
-> "Paypal-Debug-Id:
|
30
|
-
-> "SERVER_INFO: paymentsplatformserv:v1.payments.payment&CalThreadId=468&TopLevelTxnStartTime=14c948cccca&Host=slcsbpaymentsplatformserv3002.slc.paypal.com&pid=22334\r\n"
|
27
|
+
-> "PROXY_SERVER_INFO: host=slcsbplatformapiserv3002.slc.paypal.com;threadId=5913\r\n"
|
28
|
+
-> "Paypal-Debug-Id: 3be36c95d1d44\r\n"
|
31
29
|
-> "Content-Language: *\r\n"
|
32
|
-
-> "Date: Tue,
|
30
|
+
-> "Date: Tue, 05 May 2015 14:30:05 GMT\r\n"
|
33
31
|
-> "Connection: close\r\n"
|
34
32
|
-> "Content-Type: application/json\r\n"
|
35
33
|
-> "Content-Length: 306\r\n"
|
36
34
|
-> "Connection: close\r\n"
|
37
35
|
-> "\r\n"
|
38
36
|
reading 306 bytes...
|
39
|
-
-> "{\"name\":\"VALIDATION_ERROR\",\"details\":[{\"field\":\"
|
37
|
+
-> "{\"name\":\"VALIDATION_ERROR\",\"details\":[{\"field\":\"payer\",\"issue\":\"Required field missing\"},{\"field\":\"intent\",\"issue\":\"Required field missing\"}],\"message\":\"Invalid request - see details\",\"information_link\":\"https://developer.paypal.com/webapps/developer/docs/api/#VALIDATION_ERROR\",\"debug_id\":\"3be36c95d1d44\"}"
|
40
38
|
read 306 bytes
|
41
39
|
Conn close
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "securerandom"
|
3
|
+
|
4
|
+
describe "Webhooks", :integration => true do
|
5
|
+
|
6
|
+
webhookAttributes = {
|
7
|
+
:url => "https://www.yeowza.com/paypal_webhook_"+SecureRandom.hex(8),
|
8
|
+
:event_types => [
|
9
|
+
{
|
10
|
+
:name => "PAYMENT.AUTHORIZATION.CREATED"
|
11
|
+
},
|
12
|
+
{
|
13
|
+
:name => "PAYMENT.AUTHORIZATION.VOIDED"
|
14
|
+
}
|
15
|
+
]
|
16
|
+
}
|
17
|
+
|
18
|
+
it "create webhook" do
|
19
|
+
$webhook = PayPal::SDK::REST::Webhook.new(webhookAttributes)
|
20
|
+
expect($webhook.create).to be_truthy
|
21
|
+
end
|
22
|
+
|
23
|
+
it "get webhook" do
|
24
|
+
$result = PayPal::SDK::REST::Webhook.get($webhook.id)
|
25
|
+
expect($result).to be_a PayPal::SDK::REST::Webhook
|
26
|
+
expect($result.id).to eql $webhook.id
|
27
|
+
end
|
28
|
+
|
29
|
+
it "get all webhooks" do
|
30
|
+
$webhooks_list = PayPal::SDK::REST::Webhook.all()
|
31
|
+
expect($webhooks_list.webhooks.length).not_to be_nil
|
32
|
+
end
|
33
|
+
|
34
|
+
it "get subscribed webhook event types" do
|
35
|
+
$webhook_event_types = PayPal::SDK::REST::Webhook.get_event_types($webhook.id)
|
36
|
+
expect($webhook_event_types.event_types.length).to eql $webhook.event_types.length
|
37
|
+
end
|
38
|
+
|
39
|
+
it "delete webhook" do
|
40
|
+
expect($webhook.delete).to be_truthy
|
41
|
+
end
|
42
|
+
end
|
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.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- PayPal
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-05-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: coveralls
|
@@ -139,6 +139,7 @@ files:
|
|
139
139
|
- spec/subscription_examples_spec.rb
|
140
140
|
- spec/support/sample_data.rb
|
141
141
|
- spec/web_profile_examples_spec.rb
|
142
|
+
- spec/webhooks_examples_spec.rb
|
142
143
|
homepage: https://developer.paypal.com
|
143
144
|
licenses:
|
144
145
|
- PayPal SDK License
|
@@ -183,3 +184,4 @@ test_files:
|
|
183
184
|
- spec/subscription_examples_spec.rb
|
184
185
|
- spec/support/sample_data.rb
|
185
186
|
- spec/web_profile_examples_spec.rb
|
187
|
+
- spec/webhooks_examples_spec.rb
|