ruby-eupago 0.1.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 +7 -0
- data/CHANGELOG.md +0 -0
- data/README.md +19 -0
- data/lib/ruby-eupago/api/auth.rb +14 -0
- data/lib/ruby-eupago/api/v1/credit_card.rb +17 -0
- data/lib/ruby-eupago/api/v1/direct_debit.rb +17 -0
- data/lib/ruby-eupago/api/v1/mbway.rb +12 -0
- data/lib/ruby-eupago/api/v1.rb +13 -0
- data/lib/ruby-eupago/api.rb +7 -0
- data/lib/ruby-eupago/client.rb +7 -0
- data/lib/ruby-eupago/constants.rb +24 -0
- data/lib/ruby-eupago/current.rb +17 -0
- data/lib/ruby-eupago/mixins/initializer.rb +93 -0
- data/lib/ruby-eupago/version.rb +8 -0
- data/lib/ruby-eupago.rb +7 -0
- data/ruby-eupago.gemspec +27 -0
- metadata +183 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 43a13811487c270301ef4dc2e07cdd5036c11de8981e821ba119017c14ce6a23
|
4
|
+
data.tar.gz: 72307c343896aa908f4d25757a5764d5aaee1bc08d43c480b8b4a628e0e871fd
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1393f9d679601c196e3b104fcaf17f27f4830a6b71d849e5a8279561af9d4d5879c7d34c2b3ea3c2142be9b674548b10c294591491e978edbc5cf3d0025568fe
|
7
|
+
data.tar.gz: 558528c12d48b575a6447c4835f1dccdf6f0f680574b0675bf85e52afb6f5527bb895043c18485855a808a816b79c2a669ce4cfc0834ddac8e1de3d4d688baf9
|
data/CHANGELOG.md
ADDED
File without changes
|
data/README.md
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# EuPago Ruby SDK
|
2
|
+
|
3
|
+
This is a not official Ruby SDK for the EuPago payment gateway.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
WIP
|
8
|
+
|
9
|
+
## Testing
|
10
|
+
|
11
|
+
```bash
|
12
|
+
bundle exec rspec
|
13
|
+
```
|
14
|
+
|
15
|
+
## Contributing
|
16
|
+
|
17
|
+
I am open to contributions! But with limited time, I cannot promise to respond to every issue or pull request. However, I will do my best to review and merge contributions that align with the project's goals.
|
18
|
+
|
19
|
+
If you have some questions about the structure of the project, i am following the [ruby-auth0](https://github.com/auth0/ruby-auth0) structure. They have a great SDK and a well defined structure.
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module EuPago
|
2
|
+
module Api
|
3
|
+
module Auth
|
4
|
+
# https://eupago.readme.io/reference/generate-bearer-token
|
5
|
+
def self.token(body)
|
6
|
+
result = EuPago::Client.new.post("/auth/token", body: body, headers: {
|
7
|
+
"Content-Type" => "application/x-www-form-urlencoded",
|
8
|
+
})
|
9
|
+
EuPago::Current.auth = result
|
10
|
+
result
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module EuPago
|
2
|
+
module Api
|
3
|
+
module V1
|
4
|
+
class CreditCard
|
5
|
+
# https://eupago.readme.io/reference/credit-card-recurrence-authorization
|
6
|
+
def self.subscription(params)
|
7
|
+
V1.client.post("/v1.02/creditcard/subscription", body: params)
|
8
|
+
end
|
9
|
+
|
10
|
+
# https://eupago.readme.io/reference/credit-card-recurrence-payment
|
11
|
+
def self.payment(recurrent_id, params)
|
12
|
+
V1.client.post("/v1.02/creditcard/payment/#{recurrent_id}", body: params)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module EuPago
|
2
|
+
module Api
|
3
|
+
module V1
|
4
|
+
class DirectDebit
|
5
|
+
# https://eupago.readme.io/reference/direct-debit-authorization
|
6
|
+
def self.authorization(params)
|
7
|
+
V1.client.post("/v1.02/directdebit/authorization", body: params)
|
8
|
+
end
|
9
|
+
|
10
|
+
# https://eupago.readme.io/reference/direct-debit-payment
|
11
|
+
def self.payment(reference, params)
|
12
|
+
V1.client.post("/v1.02/directdebit/payment/#{reference}", body: params)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module EuPago
|
2
|
+
module Constants
|
3
|
+
GRANT_TYPES = {
|
4
|
+
client_credentials: "client_credentials",
|
5
|
+
refresh: "refresh_token",
|
6
|
+
password: "password",
|
7
|
+
}.freeze
|
8
|
+
|
9
|
+
RECURRENT_PAYMENT_INTERVALS = {
|
10
|
+
weekly: "Semanal",
|
11
|
+
biweekly: "Quinzenal",
|
12
|
+
monthly: "Mensal",
|
13
|
+
trimesterly: "Trimestral",
|
14
|
+
semiannual: "Semestral",
|
15
|
+
annual: "Anual",
|
16
|
+
}.freeze
|
17
|
+
|
18
|
+
PAYMENT_TYPES = {
|
19
|
+
once: "OOFF",
|
20
|
+
recurring: "RCUR",
|
21
|
+
final: "FNAL",
|
22
|
+
}
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module EuPago
|
2
|
+
module Current
|
3
|
+
@auth = {}
|
4
|
+
|
5
|
+
def self.auth=(value)
|
6
|
+
@auth = Hash[value.map { |(k, v)| [k.to_sym, v] }]
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.access_token
|
10
|
+
@auth[:access_token] if @auth && !@auth.empty?
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.logged_in?
|
14
|
+
!access_token.nil? && !access_token.empty?
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
require "httparty"
|
2
|
+
|
3
|
+
module EuPago
|
4
|
+
module Mixins
|
5
|
+
module Client
|
6
|
+
def initialize(config = {})
|
7
|
+
options = Hash[config.map { |(k, v)| [k.to_sym, v] }]
|
8
|
+
@base_url = options[:base_url] || build_base_url
|
9
|
+
@include_api_key = options.fetch(:include_api_key, false)
|
10
|
+
end
|
11
|
+
|
12
|
+
def build_base_url(append_base_url = "")
|
13
|
+
if ENV["EUPAGO_PRODUCTION"].to_s.empty?
|
14
|
+
"https://sandbox.eupago.pt/api#{append_base_url}"
|
15
|
+
else
|
16
|
+
"https://clientes.eupago.pt/api#{append_base_url}"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def get(api_url, query: {}, headers: {})
|
21
|
+
result = HTTParty.get(
|
22
|
+
api_url,
|
23
|
+
base_uri: @base_url,
|
24
|
+
format: :json,
|
25
|
+
headers: build_headers(headers),
|
26
|
+
query: query,
|
27
|
+
)
|
28
|
+
|
29
|
+
parse_result(result)
|
30
|
+
end
|
31
|
+
|
32
|
+
def post(api_url, body: {}, headers: {})
|
33
|
+
kheader = build_headers(headers)
|
34
|
+
kbody = kheader["Content-Type"] == "application/json" ? body.to_json : body
|
35
|
+
|
36
|
+
result = HTTParty.post(
|
37
|
+
api_url,
|
38
|
+
base_uri: @base_url,
|
39
|
+
format: :json,
|
40
|
+
headers: kheader,
|
41
|
+
body: kbody,
|
42
|
+
)
|
43
|
+
|
44
|
+
parse_result(result)
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def build_headers(additional_headers = {})
|
50
|
+
headers = {
|
51
|
+
"Content-Type" => "application/json",
|
52
|
+
"Accept" => "application/json",
|
53
|
+
"User-Agent" => "",
|
54
|
+
}.merge(additional_headers)
|
55
|
+
|
56
|
+
if @include_api_key && ENV["EUPAGO_API_KEY"]
|
57
|
+
headers["Authorization"] = "ApiKey #{ENV["EUPAGO_API_KEY"]}"
|
58
|
+
end
|
59
|
+
|
60
|
+
headers
|
61
|
+
end
|
62
|
+
|
63
|
+
def parse_result(result)
|
64
|
+
if result.headers["content-type"] == "application/json"
|
65
|
+
response = result.parsed_response
|
66
|
+
else
|
67
|
+
response = result.body
|
68
|
+
end
|
69
|
+
|
70
|
+
case result.code
|
71
|
+
when 200..299
|
72
|
+
result.parsed_response
|
73
|
+
when 401
|
74
|
+
raise EuPago::UnauthorizedError, "[Eupago SDK] Unauthorized: #{response}"
|
75
|
+
when 400
|
76
|
+
raise EuPago::BadRequestError, "[Eupago SDK] Bad Request: #{response}"
|
77
|
+
when 404
|
78
|
+
raise EuPago::NotFoundError, "[Eupago SDK] Not Found: #{response}"
|
79
|
+
when 403
|
80
|
+
raise EuPago::ForbiddenError, "[Eupago SDK] Forbidden: #{response}"
|
81
|
+
else
|
82
|
+
raise EuPago::ClientError, "[Eupago SDK] Error (#{result.code}): #{response}"
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
class ClientError < StandardError; end
|
89
|
+
class UnauthorizedError < StandardError; end
|
90
|
+
class BadRequestError < StandardError; end
|
91
|
+
class NotFoundError < StandardError; end
|
92
|
+
class ForbiddenError < StandardError; end
|
93
|
+
end
|
data/lib/ruby-eupago.rb
ADDED
data/ruby-eupago.gemspec
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
require_relative 'lib/ruby-eupago/version'
|
2
|
+
|
3
|
+
Gem::Specification.new do |spec|
|
4
|
+
spec.name = 'ruby-eupago'
|
5
|
+
spec.version = EuPago::Version::STRING
|
6
|
+
spec.date = '2025-09-10'
|
7
|
+
spec.summary = 'Eupago Ruby SDK'
|
8
|
+
spec.description = 'Eupago Ruby SDK'
|
9
|
+
spec.authors = ['Alexandro Castro']
|
10
|
+
spec.email = 'alexoliveira7x@gmail.com'
|
11
|
+
spec.license = 'MIT'
|
12
|
+
|
13
|
+
spec.required_ruby_version = '>= 2.0.0'
|
14
|
+
spec.require_paths = ['lib']
|
15
|
+
spec.files = Dir['{lib}/**/*'] + ['README.md', 'CHANGELOG.md', 'ruby-eupago.gemspec']
|
16
|
+
|
17
|
+
spec.add_dependency 'httparty', '~> 0.23.1'
|
18
|
+
|
19
|
+
spec.add_development_dependency 'rspec'
|
20
|
+
spec.add_development_dependency 'rake', '~> 13.1.0'
|
21
|
+
spec.add_development_dependency 'rubocop', '~> 1.59'
|
22
|
+
spec.add_development_dependency 'rubocop-shopify', '~> 2.14'
|
23
|
+
spec.add_development_dependency 'simplecov', '0.17.1'
|
24
|
+
spec.add_development_dependency 'faker', '~> 3.5.2'
|
25
|
+
spec.add_development_dependency 'vcr'
|
26
|
+
spec.add_development_dependency 'webmock'
|
27
|
+
end
|
metadata
ADDED
@@ -0,0 +1,183 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ruby-eupago
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Alexandro Castro
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2025-09-10 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: httparty
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.23.1
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.23.1
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 13.1.0
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 13.1.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rubocop
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.59'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.59'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rubocop-shopify
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '2.14'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '2.14'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: simplecov
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - '='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 0.17.1
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - '='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 0.17.1
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: faker
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 3.5.2
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 3.5.2
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: vcr
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: webmock
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
description: Eupago Ruby SDK
|
140
|
+
email: alexoliveira7x@gmail.com
|
141
|
+
executables: []
|
142
|
+
extensions: []
|
143
|
+
extra_rdoc_files: []
|
144
|
+
files:
|
145
|
+
- CHANGELOG.md
|
146
|
+
- README.md
|
147
|
+
- lib/ruby-eupago.rb
|
148
|
+
- lib/ruby-eupago/api.rb
|
149
|
+
- lib/ruby-eupago/api/auth.rb
|
150
|
+
- lib/ruby-eupago/api/v1.rb
|
151
|
+
- lib/ruby-eupago/api/v1/credit_card.rb
|
152
|
+
- lib/ruby-eupago/api/v1/direct_debit.rb
|
153
|
+
- lib/ruby-eupago/api/v1/mbway.rb
|
154
|
+
- lib/ruby-eupago/client.rb
|
155
|
+
- lib/ruby-eupago/constants.rb
|
156
|
+
- lib/ruby-eupago/current.rb
|
157
|
+
- lib/ruby-eupago/mixins/initializer.rb
|
158
|
+
- lib/ruby-eupago/version.rb
|
159
|
+
- ruby-eupago.gemspec
|
160
|
+
homepage:
|
161
|
+
licenses:
|
162
|
+
- MIT
|
163
|
+
metadata: {}
|
164
|
+
post_install_message:
|
165
|
+
rdoc_options: []
|
166
|
+
require_paths:
|
167
|
+
- lib
|
168
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
169
|
+
requirements:
|
170
|
+
- - ">="
|
171
|
+
- !ruby/object:Gem::Version
|
172
|
+
version: 2.0.0
|
173
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
174
|
+
requirements:
|
175
|
+
- - ">="
|
176
|
+
- !ruby/object:Gem::Version
|
177
|
+
version: '0'
|
178
|
+
requirements: []
|
179
|
+
rubygems_version: 3.5.22
|
180
|
+
signing_key:
|
181
|
+
specification_version: 4
|
182
|
+
summary: Eupago Ruby SDK
|
183
|
+
test_files: []
|