paypal-sdk-rest 1.1.3 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|