payrex-ruby 0.1.0 → 0.2.1
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/entities/event.rb +23 -0
- data/lib/errors/signature_invalid_error.rb +6 -0
- data/lib/errors/value_unexpected_error.rb +6 -0
- data/lib/http_client.rb +10 -4
- data/lib/payrex-ruby.rb +3 -0
- data/lib/services/webhook_service.rb +26 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3a1790fdb4f6b46ba752d9973c335a06f175d1437af8fed9e3b3aee3619dc761
|
4
|
+
data.tar.gz: f960d395b47445c9910e70e116426d90c7f4a8633557059ce6e56d312f45e292
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 15eab1a0f2ba570109da0dffaeb7653709c2aff99d0b627d37fa082e423050d02fa7dec79e5d94fb37ba4cef39bcd7f97ed54e4f76d4167d681a9f41db044071
|
7
|
+
data.tar.gz: b0264d742adad03e19da05a37508a745dd108c42c3479110431a7e32419d904a539ac29da3e8d4baf22114c57de3877ac3535bac0e2d6128e1eaef3a2a2a1dfe
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Payrex
|
2
|
+
module Entities
|
3
|
+
class Event
|
4
|
+
attr_reader :id,
|
5
|
+
:data,
|
6
|
+
:type,
|
7
|
+
:pending_webhooks,
|
8
|
+
:previous_attributes,
|
9
|
+
:created_at,
|
10
|
+
:updated_at
|
11
|
+
|
12
|
+
def initialize(api_resource)
|
13
|
+
@id = api_resource.data["id"]
|
14
|
+
@data = api_resource.data["data"]
|
15
|
+
@type = api_resource.data["type"]
|
16
|
+
@pending_webhooks = api_resource.data["pending_webhooks"]
|
17
|
+
@previous_attributes = api_resource.data["previous_attributes"]
|
18
|
+
@created_at = api_resource.data["created_at"]
|
19
|
+
@updated_at = api_resource.data["updated_at"]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/http_client.rb
CHANGED
@@ -12,7 +12,9 @@ module Payrex
|
|
12
12
|
|
13
13
|
response = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == "https") { |http| http.request(request) }
|
14
14
|
|
15
|
-
|
15
|
+
raise StandardError.new(response.to_s) if response.body.nil?
|
16
|
+
|
17
|
+
handle_error(response) if failed?(response)
|
16
18
|
|
17
19
|
Payrex::ApiResource.new(JSON.parse(response.body))
|
18
20
|
end
|
@@ -30,7 +32,11 @@ module Payrex
|
|
30
32
|
end
|
31
33
|
|
32
34
|
def handle_error(response)
|
33
|
-
|
35
|
+
begin
|
36
|
+
json_response_body = JSON.parse(response.body)
|
37
|
+
rescue JSON::ParserError
|
38
|
+
raise StandardError.new(response.body)
|
39
|
+
end
|
34
40
|
|
35
41
|
case response.code
|
36
42
|
when "400"
|
@@ -53,8 +59,8 @@ module Payrex
|
|
53
59
|
request.body = params.to_json
|
54
60
|
end
|
55
61
|
|
56
|
-
def
|
57
|
-
response.code
|
62
|
+
def failed?(response)
|
63
|
+
response.code < "200" || response.code >= "400"
|
58
64
|
end
|
59
65
|
end
|
60
66
|
end
|
data/lib/payrex-ruby.rb
CHANGED
@@ -8,6 +8,7 @@ require_relative "config"
|
|
8
8
|
require_relative "http_client"
|
9
9
|
require_relative "payrex_error"
|
10
10
|
require_relative "entities/checkout_session"
|
11
|
+
require_relative "entities/event"
|
11
12
|
require_relative "entities/listing"
|
12
13
|
require_relative "entities/merchant"
|
13
14
|
require_relative "entities/payment_intent"
|
@@ -18,6 +19,8 @@ require_relative "errors/base_error"
|
|
18
19
|
require_relative "errors/authentication_invalid_error"
|
19
20
|
require_relative "errors/request_invalid_error"
|
20
21
|
require_relative "errors/resource_not_found_error"
|
22
|
+
require_relative "errors/signature_invalid_error"
|
23
|
+
require_relative "errors/value_unexpected_error"
|
21
24
|
require_relative "services/base_service"
|
22
25
|
require_relative "services/checkout_session_service"
|
23
26
|
require_relative "services/merchant_service"
|
@@ -3,6 +3,32 @@ module Payrex
|
|
3
3
|
class WebhookService < BaseService
|
4
4
|
PATH = "webhooks"
|
5
5
|
|
6
|
+
def parse_event(payload:, signature_header:, webhook_secret_key:)
|
7
|
+
raise Payrex::Errors::ValueUnexpectedError.new("The signature must be a string.") if !signature_header.is_a?(String)
|
8
|
+
|
9
|
+
signature_array = signature_header.split(",")
|
10
|
+
|
11
|
+
raise Payrex::Errors::ValueUnexpectedError.new("The format of signature #{signature_header} is invalid.") if signature_array.length < 3
|
12
|
+
|
13
|
+
timestamp = signature_array[0].split("=")[1]
|
14
|
+
test_mode_signature = signature_array[1].split("=")[1]
|
15
|
+
live_mode_signature = signature_array[2].split("=")[1]
|
16
|
+
|
17
|
+
comparison_signature = live_mode_signature || test_mode_signature
|
18
|
+
|
19
|
+
hash = OpenSSL::HMAC.hexdigest(
|
20
|
+
OpenSSL::Digest.new("sha256"),
|
21
|
+
webhook_secret_key,
|
22
|
+
"#{timestamp}.#{payload}"
|
23
|
+
)
|
24
|
+
|
25
|
+
raise Payrex::Errors::SignatureInvalidError.new("The signature is invalid.") if hash != comparison_signature
|
26
|
+
|
27
|
+
api_resource = Payrex::ApiResource.new(JSON.parse(payload))
|
28
|
+
|
29
|
+
Payrex::Entities::Event.new(api_resource)
|
30
|
+
end
|
31
|
+
|
6
32
|
def create(payload)
|
7
33
|
request(
|
8
34
|
method: :post,
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: payrex-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- PayRex
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-05-
|
11
|
+
date: 2024-05-24 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: PayRex Ruby Library
|
14
14
|
email: support@payrexhq.com
|
@@ -20,6 +20,7 @@ files:
|
|
20
20
|
- lib/client.rb
|
21
21
|
- lib/config.rb
|
22
22
|
- lib/entities/checkout_session.rb
|
23
|
+
- lib/entities/event.rb
|
23
24
|
- lib/entities/listing.rb
|
24
25
|
- lib/entities/merchant.rb
|
25
26
|
- lib/entities/payment_intent.rb
|
@@ -30,6 +31,8 @@ files:
|
|
30
31
|
- lib/errors/base_error.rb
|
31
32
|
- lib/errors/request_invalid_error.rb
|
32
33
|
- lib/errors/resource_not_found_error.rb
|
34
|
+
- lib/errors/signature_invalid_error.rb
|
35
|
+
- lib/errors/value_unexpected_error.rb
|
33
36
|
- lib/http_client.rb
|
34
37
|
- lib/payrex-ruby.rb
|
35
38
|
- lib/payrex_error.rb
|