fawry 0.1.0 → 1.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/.circleci/config.yml +57 -0
- data/.github/workflows/ruby.yml +35 -0
- data/.rubocop.yml +5 -2
- data/Gemfile.lock +48 -24
- data/README-ar.md +186 -0
- data/README.md +121 -13
- data/Rakefile +18 -1
- data/fawry.gemspec +8 -5
- data/lib/fawry.rb +150 -8
- data/lib/fawry/connection.rb +41 -4
- data/lib/fawry/contracts/charge_request_contract.rb +14 -2
- data/lib/fawry/contracts/create_card_token_request_contract.rb +32 -0
- data/lib/fawry/contracts/delete_token_request_contract.rb +28 -0
- data/lib/fawry/contracts/list_tokens_request_contract.rb +27 -0
- data/lib/fawry/contracts/payment_status_request_contract.rb +27 -0
- data/lib/fawry/contracts/refund_request_contract.rb +14 -2
- data/lib/fawry/errors.rb +3 -1
- data/lib/fawry/fawry_callback.rb +56 -0
- data/lib/fawry/fawry_request.rb +20 -0
- data/lib/fawry/fawry_response.rb +3 -7
- data/lib/fawry/requests/charge_request.rb +18 -6
- data/lib/fawry/requests/create_card_token_request.rb +57 -0
- data/lib/fawry/requests/delete_token_request.rb +62 -0
- data/lib/fawry/requests/list_tokens_request.rb +57 -0
- data/lib/fawry/requests/payment_status_request.rb +57 -0
- data/lib/fawry/requests/refund_request.rb +14 -6
- data/lib/fawry/utils.rb +29 -0
- data/lib/fawry/version.rb +1 -1
- metadata +54 -26
- data/.travis.yml +0 -7
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'digest'
|
4
|
+
|
5
|
+
module Fawry
|
6
|
+
module Requests
|
7
|
+
module PaymentStatusRequest
|
8
|
+
def fire_payment_status_request
|
9
|
+
fawry_api_response = Connection.get(request[:path], request[:params], request[:body], request[:options])
|
10
|
+
response_body = JSON.parse(fawry_api_response.body)
|
11
|
+
|
12
|
+
FawryResponse.new(response_body)
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def build_payment_status_request
|
18
|
+
{
|
19
|
+
path: 'payments/status',
|
20
|
+
params: payment_status_request_transformed_params,
|
21
|
+
body: {},
|
22
|
+
options: options
|
23
|
+
}
|
24
|
+
end
|
25
|
+
|
26
|
+
def request_params
|
27
|
+
@request_params = params
|
28
|
+
end
|
29
|
+
|
30
|
+
def payment_status_request_transformed_params
|
31
|
+
{
|
32
|
+
merchantCode: fawry_merchant_code,
|
33
|
+
merchantRefNumber: request_params[:merchant_ref_number],
|
34
|
+
signature: payment_status_request_signature
|
35
|
+
}.compact
|
36
|
+
end
|
37
|
+
|
38
|
+
def fawry_merchant_code
|
39
|
+
ENV.fetch('FAWRY_MERCHANT_CODE') { request_params[:merchant_code] }
|
40
|
+
end
|
41
|
+
|
42
|
+
def fawry_secure_key
|
43
|
+
ENV.fetch('FAWRY_SECURE_KEY') { request_params[:fawry_secure_key] }
|
44
|
+
end
|
45
|
+
|
46
|
+
def validate_payment_status_params!
|
47
|
+
contract = Contracts::PaymentStatusRequestContract.new.call(request_params)
|
48
|
+
raise InvalidFawryRequestError, contract.errors.to_h if contract.failure?
|
49
|
+
end
|
50
|
+
|
51
|
+
def payment_status_request_signature
|
52
|
+
Digest::SHA256.hexdigest("#{fawry_merchant_code}#{request_params[:merchant_ref_number]}"\
|
53
|
+
"#{fawry_secure_key}")
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -5,7 +5,7 @@ require 'digest'
|
|
5
5
|
module Fawry
|
6
6
|
module Requests
|
7
7
|
module RefundRequest
|
8
|
-
def
|
8
|
+
def fire_refund_request
|
9
9
|
fawry_api_response = Connection.post(request[:path], request[:params], request[:body], request[:options])
|
10
10
|
response_body = JSON.parse(fawry_api_response.body)
|
11
11
|
|
@@ -16,7 +16,7 @@ module Fawry
|
|
16
16
|
|
17
17
|
def build_refund_request
|
18
18
|
{
|
19
|
-
path: 'refund',
|
19
|
+
path: 'payments/refund',
|
20
20
|
params: {},
|
21
21
|
body: refund_request_transformed_params,
|
22
22
|
options: options
|
@@ -29,7 +29,7 @@ module Fawry
|
|
29
29
|
|
30
30
|
def refund_request_transformed_params
|
31
31
|
{
|
32
|
-
merchantCode:
|
32
|
+
merchantCode: fawry_merchant_code,
|
33
33
|
referenceNumber: request_params[:reference_number],
|
34
34
|
refundAmount: request_params[:refund_amount],
|
35
35
|
reason: request_params[:reason],
|
@@ -37,15 +37,23 @@ module Fawry
|
|
37
37
|
}.compact
|
38
38
|
end
|
39
39
|
|
40
|
+
def fawry_merchant_code
|
41
|
+
ENV.fetch('FAWRY_MERCHANT_CODE') { request_params[:merchant_code] }
|
42
|
+
end
|
43
|
+
|
44
|
+
def fawry_secure_key
|
45
|
+
ENV.fetch('FAWRY_SECURE_KEY') { request_params[:fawry_secure_key] }
|
46
|
+
end
|
47
|
+
|
40
48
|
def validate_refund_params!
|
41
49
|
contract = Contracts::RefundRequestContract.new.call(request_params)
|
42
|
-
raise
|
50
|
+
raise InvalidFawryRequestError, contract.errors.to_h if contract.failure?
|
43
51
|
end
|
44
52
|
|
45
53
|
def refund_request_signature
|
46
|
-
Digest::SHA256.hexdigest("#{
|
54
|
+
Digest::SHA256.hexdigest("#{fawry_merchant_code}#{request_params[:reference_number]}"\
|
47
55
|
"#{format('%<refund_amount>.2f', refund_amount: request_params[:refund_amount])}"\
|
48
|
-
"#{request_params[:reason]}#{
|
56
|
+
"#{request_params[:reason]}#{fawry_secure_key}")
|
49
57
|
end
|
50
58
|
end
|
51
59
|
end
|
data/lib/fawry/utils.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Fawry
|
4
|
+
module Utils
|
5
|
+
# Adds keys from fawry API response as methods
|
6
|
+
# on object instance that return the value
|
7
|
+
# of each key
|
8
|
+
#
|
9
|
+
# type => type
|
10
|
+
# referenceNumber => reference_number
|
11
|
+
# merchantRefNumber => merchant_ref_number
|
12
|
+
# expirationTime => expiration_time
|
13
|
+
# statusCode => status_code
|
14
|
+
# statusDescription => status_description
|
15
|
+
#
|
16
|
+
# fawry_res = FawryResponse.new(response)
|
17
|
+
# fawry_res.status_code => 200
|
18
|
+
# fawry_res.reference_number => 1234567
|
19
|
+
def enrich_object(fawry_params)
|
20
|
+
fawry_params.each_key do |key|
|
21
|
+
method_name = key.to_s.split(/(?=[A-Z])/).map(&:downcase).join('_') # statusCode => status_code
|
22
|
+
instance_variable_set("@#{method_name}", fawry_params[key])
|
23
|
+
method_body = proc { instance_variable_get("@#{method_name}") }
|
24
|
+
|
25
|
+
self.class.public_send(:define_method, method_name, method_body)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/fawry/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fawry
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
- Amr Bakry
|
8
|
-
autorequire:
|
7
|
+
- Amr El Bakry
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-03-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dry-validation
|
@@ -65,9 +65,6 @@ dependencies:
|
|
65
65
|
- - "~>"
|
66
66
|
- !ruby/object:Gem::Version
|
67
67
|
version: '11.0'
|
68
|
-
- - ">="
|
69
|
-
- !ruby/object:Gem::Version
|
70
|
-
version: 11.0.1
|
71
68
|
type: :development
|
72
69
|
prerelease: false
|
73
70
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -75,23 +72,20 @@ dependencies:
|
|
75
72
|
- - "~>"
|
76
73
|
- !ruby/object:Gem::Version
|
77
74
|
version: '11.0'
|
78
|
-
- - ">="
|
79
|
-
- !ruby/object:Gem::Version
|
80
|
-
version: 11.0.1
|
81
75
|
- !ruby/object:Gem::Dependency
|
82
76
|
name: rake
|
83
77
|
requirement: !ruby/object:Gem::Requirement
|
84
78
|
requirements:
|
85
79
|
- - "~>"
|
86
80
|
- !ruby/object:Gem::Version
|
87
|
-
version: '
|
81
|
+
version: '13.0'
|
88
82
|
type: :development
|
89
83
|
prerelease: false
|
90
84
|
version_requirements: !ruby/object:Gem::Requirement
|
91
85
|
requirements:
|
92
86
|
- - "~>"
|
93
87
|
- !ruby/object:Gem::Version
|
94
|
-
version: '
|
88
|
+
version: '13.0'
|
95
89
|
- !ruby/object:Gem::Dependency
|
96
90
|
name: rspec
|
97
91
|
requirement: !ruby/object:Gem::Requirement
|
@@ -107,40 +101,64 @@ dependencies:
|
|
107
101
|
- !ruby/object:Gem::Version
|
108
102
|
version: '3.0'
|
109
103
|
- !ruby/object:Gem::Dependency
|
110
|
-
name:
|
104
|
+
name: rspec_junit_formatter
|
111
105
|
requirement: !ruby/object:Gem::Requirement
|
112
106
|
requirements:
|
113
|
-
- - "
|
107
|
+
- - ">="
|
114
108
|
- !ruby/object:Gem::Version
|
115
|
-
version: '
|
109
|
+
version: '0'
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
116
114
|
- - ">="
|
117
115
|
- !ruby/object:Gem::Version
|
118
|
-
version:
|
116
|
+
version: '0'
|
117
|
+
- !ruby/object:Gem::Dependency
|
118
|
+
name: rubocop
|
119
|
+
requirement: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - "~>"
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '1.11'
|
119
124
|
type: :development
|
120
125
|
prerelease: false
|
121
126
|
version_requirements: !ruby/object:Gem::Requirement
|
122
127
|
requirements:
|
123
128
|
- - "~>"
|
124
129
|
- !ruby/object:Gem::Version
|
125
|
-
version: '
|
126
|
-
|
130
|
+
version: '1.11'
|
131
|
+
- !ruby/object:Gem::Dependency
|
132
|
+
name: webmock
|
133
|
+
requirement: !ruby/object:Gem::Requirement
|
134
|
+
requirements:
|
135
|
+
- - "~>"
|
127
136
|
- !ruby/object:Gem::Version
|
128
|
-
version: 3.
|
129
|
-
|
137
|
+
version: '3.12'
|
138
|
+
type: :development
|
139
|
+
prerelease: false
|
140
|
+
version_requirements: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - "~>"
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: '3.12'
|
145
|
+
description:
|
130
146
|
email:
|
131
|
-
-
|
147
|
+
- amrr@hey.com
|
132
148
|
executables: []
|
133
149
|
extensions: []
|
134
150
|
extra_rdoc_files: []
|
135
151
|
files:
|
152
|
+
- ".circleci/config.yml"
|
153
|
+
- ".github/workflows/ruby.yml"
|
136
154
|
- ".gitignore"
|
137
155
|
- ".rspec"
|
138
156
|
- ".rubocop.yml"
|
139
|
-
- ".travis.yml"
|
140
157
|
- CODE_OF_CONDUCT.md
|
141
158
|
- Gemfile
|
142
159
|
- Gemfile.lock
|
143
160
|
- LICENSE.txt
|
161
|
+
- README-ar.md
|
144
162
|
- README.md
|
145
163
|
- Rakefile
|
146
164
|
- bin/console
|
@@ -149,12 +167,22 @@ files:
|
|
149
167
|
- lib/fawry.rb
|
150
168
|
- lib/fawry/connection.rb
|
151
169
|
- lib/fawry/contracts/charge_request_contract.rb
|
170
|
+
- lib/fawry/contracts/create_card_token_request_contract.rb
|
171
|
+
- lib/fawry/contracts/delete_token_request_contract.rb
|
172
|
+
- lib/fawry/contracts/list_tokens_request_contract.rb
|
173
|
+
- lib/fawry/contracts/payment_status_request_contract.rb
|
152
174
|
- lib/fawry/contracts/refund_request_contract.rb
|
153
175
|
- lib/fawry/errors.rb
|
176
|
+
- lib/fawry/fawry_callback.rb
|
154
177
|
- lib/fawry/fawry_request.rb
|
155
178
|
- lib/fawry/fawry_response.rb
|
156
179
|
- lib/fawry/requests/charge_request.rb
|
180
|
+
- lib/fawry/requests/create_card_token_request.rb
|
181
|
+
- lib/fawry/requests/delete_token_request.rb
|
182
|
+
- lib/fawry/requests/list_tokens_request.rb
|
183
|
+
- lib/fawry/requests/payment_status_request.rb
|
157
184
|
- lib/fawry/requests/refund_request.rb
|
185
|
+
- lib/fawry/utils.rb
|
158
186
|
- lib/fawry/version.rb
|
159
187
|
homepage: https://github.com/amrrbakry/fawry
|
160
188
|
licenses:
|
@@ -162,7 +190,7 @@ licenses:
|
|
162
190
|
metadata:
|
163
191
|
homepage_uri: https://github.com/amrrbakry/fawry
|
164
192
|
source_code_uri: https://github.com/amrrbakry/fawry
|
165
|
-
post_install_message:
|
193
|
+
post_install_message:
|
166
194
|
rdoc_options: []
|
167
195
|
require_paths:
|
168
196
|
- lib
|
@@ -170,15 +198,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
170
198
|
requirements:
|
171
199
|
- - ">="
|
172
200
|
- !ruby/object:Gem::Version
|
173
|
-
version: '
|
201
|
+
version: '2.6'
|
174
202
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
175
203
|
requirements:
|
176
204
|
- - ">="
|
177
205
|
- !ruby/object:Gem::Version
|
178
206
|
version: '0'
|
179
207
|
requirements: []
|
180
|
-
rubygems_version: 3.0.
|
181
|
-
signing_key:
|
208
|
+
rubygems_version: 3.0.9
|
209
|
+
signing_key:
|
182
210
|
specification_version: 4
|
183
211
|
summary: A library to interface with Fawry's payment gateway API (charge, refund,
|
184
212
|
payment status, service callback).
|