fintecture 0.1.8 → 0.1.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +33 -2
- data/lib/fintecture/connect.rb +52 -5
- data/lib/fintecture/utils/constants.rb +1 -1
- data/lib/fintecture/utils/validation.rb +9 -0
- data/lib/fintecture/version.rb +1 -1
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 14560f3b1fead85e89c9aa9503c6e86697ce2acb5eaa8852245863bffbec25cc
|
4
|
+
data.tar.gz: 12089429aad012effb216c04c972ffd01fa9df5172c0716d33f076bbf1926407
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c6f2558e1492658b14135c7d9e449744697517602a7c54c952718e60e0c042f1e36dca47fb27d564df550c18d4d727d7f75efb3e3f7dce0f100b26e5ccd0a733
|
7
|
+
data.tar.gz: dd5a65d0104a6a2fdce72bb92493f841a0664cc6aac78be219b151cea66b775acda59c351f6e6196ebfc01ec3d6e1a80ab8b83d700ee10a347bb1b90103fd21a
|
data/README.md
CHANGED
@@ -65,11 +65,21 @@ payment_attrs = {
|
|
65
65
|
customer_full_name: 'John Doe',
|
66
66
|
customer_email: 'john.doe@email.com',
|
67
67
|
customer_ip: '127.0.0.1',
|
68
|
+
customer_phone: '666777888',
|
69
|
+
customer_address: {
|
70
|
+
street: 'Main St.',
|
71
|
+
number: '123',
|
72
|
+
complement: '2nd floor',
|
73
|
+
zip: '75000',
|
74
|
+
city: 'Paris',
|
75
|
+
country: 'fr',
|
76
|
+
},
|
68
77
|
redirect_uri: 'http://example.com/callback',
|
69
78
|
origin_uri: 'http://example.com/checkout?session=123',
|
70
79
|
state: 'somestate',
|
71
80
|
psu_type: 'retail',
|
72
|
-
country: 'fr'
|
81
|
+
country: 'fr',
|
82
|
+
|
73
83
|
}
|
74
84
|
tokens = Fintecture::Pis.get_access_token
|
75
85
|
connect_response = Fintecture::Connect.get_pis_connect tokens['access_token'], payment_attrs
|
@@ -84,11 +94,32 @@ Explanation of each field:
|
|
84
94
|
* customer_full_name: **[mandatory]** The full name of the payer
|
85
95
|
* customer_email: **[mandatory]** The email of the payer
|
86
96
|
* customer_ip: **[mandatory]** The ip address of the payer
|
97
|
+
* customer_phone: **[optional]** The phone of the payer
|
98
|
+
* customer_address: **[optional]** The address of the payer. It has the following structure:
|
99
|
+
* street: **[optional]** The address street name
|
100
|
+
* number: **[optional]** The address number
|
101
|
+
* complement: **[optional]** Complement information to the address
|
102
|
+
* zip: **[optional]** The address zip code
|
103
|
+
* city: **[optional]** The address city
|
104
|
+
* country: **[optional]** The country code (2 letters)
|
87
105
|
* redirect_uri: **[mandatory]** The callback URL to which the customer is redirected after authentication with his bank
|
88
106
|
* origin_uri: **[optional]** A URL to which the customer will be redirected if he wants to exit Fintecture Connect
|
107
|
+
* execution_date: **[optional]** A future date to execute the payment. If the execution_date field is omitted, the payment is to be sent immediately.
|
89
108
|
* state: **[optional]** A state parameter which is sent back on callback
|
90
|
-
*
|
109
|
+
* psu_type: **[optional]** Possible values are **retail**, **corporate** and **all** (retail by default)
|
91
110
|
* country: **[optional]** Loads a specific collection of providers filter by country
|
111
|
+
* provider: **[optional]** Limits the webview to the provided provider
|
112
|
+
* beneficiary: **[optional]** The beneficiary of the payment. It has the following structure:
|
113
|
+
* name: **[optional]** The beneficiary name
|
114
|
+
* street: **[optional]** The beneficiary address street name
|
115
|
+
* number: **[optional]** The beneficiary address number
|
116
|
+
* complement: **[optional]** Complement information to the beneficiary address
|
117
|
+
* zip: **[optional]** The beneficiary address zip code
|
118
|
+
* city: **[optional]** The beneficiary address city
|
119
|
+
* country: **[optional]** The beneficiary country code (2 letters)
|
120
|
+
* iban: **[optional]** The beneficiary iban
|
121
|
+
* swift_bic: **[optional]** The beneficiary swift or bic code
|
122
|
+
* bank: **[optional]** The beneficiary bank name
|
92
123
|
|
93
124
|
#### Verify payment
|
94
125
|
|
data/lib/fintecture/connect.rb
CHANGED
@@ -66,16 +66,39 @@ module Fintecture
|
|
66
66
|
raise Fintecture::ValidationException.new("#{@payment_attrs['psu_type']} PSU type not allowed") unless Fintecture::Utils::Constants::PSU_TYPES.include? @payment_attrs['psu_type']
|
67
67
|
|
68
68
|
raise Fintecture::ValidationException.new('end_to_end_id must be an alphanumeric string') if(@payment_attrs['end_to_end_id'] && !@payment_attrs['end_to_end_id'].match(/^[0-9a-zA-Z]*$/))
|
69
|
+
Fintecture::Utils::Validation.raise_if_invalid_date_format(@payment_attrs['execution_date']) if(@payment_attrs['execution_date'])
|
69
70
|
|
70
71
|
%w[amount currency customer_full_name customer_email customer_ip redirect_uri].each do |param|
|
71
72
|
raise Fintecture::ValidationException.new("#{param} is a mandatory field") if @payment_attrs[param].nil?
|
72
73
|
end
|
73
74
|
|
74
75
|
# Check if string
|
75
|
-
%w[communication redirect_uri].each do |param|
|
76
|
+
%w[communication redirect_uri provider customer_phone].each do |param|
|
76
77
|
Fintecture::Utils::Validation.raise_if_klass_mismatch(@payment_attrs[param], String, param) if(@payment_attrs[param])
|
77
78
|
end
|
78
79
|
|
80
|
+
# Check customer_address structure
|
81
|
+
Fintecture::Utils::Validation.raise_if_klass_mismatch(@payment_attrs['customer_address'], Hash) if(@payment_attrs['customer_address'])
|
82
|
+
|
83
|
+
raise Fintecture::ValidationException.new('customer_address country must be a 2 letters string') if(@payment_attrs['customer_address'] && @payment_attrs['customer_address']['country'] && !@payment_attrs['customer_address']['country'].match(/^[a-zA-Z]{2}$/))
|
84
|
+
|
85
|
+
%w[street number complement zip city country].each do |param|
|
86
|
+
Fintecture::Utils::Validation.raise_if_klass_mismatch(@payment_attrs['customer_address'][param], String, param) if(@payment_attrs['customer_address'] && @payment_attrs['customer_address'][param])
|
87
|
+
end
|
88
|
+
|
89
|
+
# Check beneficiary structure
|
90
|
+
|
91
|
+
Fintecture::Utils::Validation.raise_if_klass_mismatch(@payment_attrs['beneficiary'], Hash) if(@payment_attrs['beneficiary'])
|
92
|
+
|
93
|
+
%w[name street city iban swift_bic].each do |param|
|
94
|
+
raise Fintecture::ValidationException.new("beneficiary #{param} is a mandatory field") if @payment_attrs['beneficiary'] && @payment_attrs['beneficiary'][param].nil?
|
95
|
+
end
|
96
|
+
|
97
|
+
raise Fintecture::ValidationException.new('beneficiary country must be a 2 letters string') if(@payment_attrs['beneficiary'] && @payment_attrs['beneficiary']['country'] && !@payment_attrs['beneficiary']['country'].match(/^[a-zA-Z]{2}$/))
|
98
|
+
|
99
|
+
%w[name street number complement zip city country iban swift_bic bank_name].each do |param|
|
100
|
+
Fintecture::Utils::Validation.raise_if_klass_mismatch(@payment_attrs['beneficiary'][param], String, param) if(@payment_attrs['beneficiary'] && @payment_attrs['beneficiary'][param])
|
101
|
+
end
|
79
102
|
end
|
80
103
|
|
81
104
|
def validate_post_payment_integrity
|
@@ -91,13 +114,32 @@ module Fintecture
|
|
91
114
|
amount: @payment_attrs['amount'],
|
92
115
|
currency: @payment_attrs['currency'],
|
93
116
|
communication: @payment_attrs['communication'],
|
94
|
-
end_to_end_id: @payment_attrs['end_to_end_id']
|
117
|
+
end_to_end_id: @payment_attrs['end_to_end_id'],
|
118
|
+
execution_date: @payment_attrs['execution_date'],
|
119
|
+
provider: @payment_attrs['provider']
|
95
120
|
}
|
96
121
|
|
122
|
+
if @payment_attrs['beneficiary']
|
123
|
+
attributes['beneficiary'] = {
|
124
|
+
name: @payment_attrs['beneficiary']['name'],
|
125
|
+
street: @payment_attrs['beneficiary']['street'],
|
126
|
+
number: @payment_attrs['beneficiary']['number'],
|
127
|
+
complement: @payment_attrs['beneficiary']['complement'],
|
128
|
+
zip: @payment_attrs['beneficiary']['zip'],
|
129
|
+
city: @payment_attrs['beneficiary']['city'],
|
130
|
+
country: @payment_attrs['beneficiary']['country'],
|
131
|
+
iban: @payment_attrs['beneficiary']['iban'],
|
132
|
+
swift_bic: @payment_attrs['beneficiary']['swift_bic'],
|
133
|
+
bank_name: @payment_attrs['beneficiary']['bank_name']
|
134
|
+
}
|
135
|
+
end
|
136
|
+
|
97
137
|
meta = {
|
98
138
|
psu_name: @payment_attrs['customer_full_name'],
|
99
139
|
psu_email: @payment_attrs['customer_email'],
|
100
|
-
psu_ip: @payment_attrs['customer_ip']
|
140
|
+
psu_ip: @payment_attrs['customer_ip'],
|
141
|
+
psu_phone: @payment_attrs['customer_phone'],
|
142
|
+
psu_address: @payment_attrs['customer_address']
|
101
143
|
}
|
102
144
|
|
103
145
|
data = {
|
@@ -110,9 +152,12 @@ module Fintecture
|
|
110
152
|
meta: meta
|
111
153
|
})
|
112
154
|
prepare_payment_response_body = JSON.parse(prepare_payment_response.body)
|
155
|
+
data_attributes = {amount: @payment_attrs['amount'], currency: @payment_attrs['currency']}
|
156
|
+
data_attributes[:execution_date] = @payment_attrs['execution_date'] if @payment_attrs['execution_date']
|
157
|
+
data_attributes[:beneficiary] = { name: @payment_attrs['beneficiary']['name'] } if @payment_attrs['beneficiary'] && @payment_attrs['beneficiary']['name']
|
113
158
|
{
|
114
159
|
meta: {session_id: prepare_payment_response_body['meta']['session_id']},
|
115
|
-
data: { attributes:
|
160
|
+
data: { attributes: data_attributes}
|
116
161
|
}
|
117
162
|
end
|
118
163
|
|
@@ -127,7 +172,7 @@ module Fintecture
|
|
127
172
|
def build_config(payload)
|
128
173
|
header_time = Fintecture::Utils::Date.header_time
|
129
174
|
x_request_id = Fintecture::Utils::Crypto.generate_uuid
|
130
|
-
{
|
175
|
+
config = {
|
131
176
|
app_id: Fintecture.app_id,
|
132
177
|
access_token: @access_token,
|
133
178
|
date: header_time,
|
@@ -139,6 +184,8 @@ module Fintecture
|
|
139
184
|
state: @payment_attrs['state'],
|
140
185
|
payload: payload
|
141
186
|
}
|
187
|
+
config[:provider] = @payment_attrs['provider'] if @payment_attrs['provider']
|
188
|
+
config
|
142
189
|
end
|
143
190
|
|
144
191
|
def build_local_digest(parameters)
|
@@ -11,6 +11,15 @@ module Fintecture
|
|
11
11
|
raise Fintecture::ValidationException.new("invalid #{param_name ? param_name : 'parameter'} format, the parameter should be a #{klass} instead a #{target.class.name}")
|
12
12
|
end
|
13
13
|
|
14
|
+
def raise_if_invalid_date_format(date)
|
15
|
+
return unless date
|
16
|
+
valid_format = date.match(/\d{4}-\d{2}-\d{2}/)
|
17
|
+
valid_date = ::Date.strptime(date, '%Y-%m-%d') rescue false
|
18
|
+
return if valid_format && valid_date
|
19
|
+
|
20
|
+
raise Fintecture::ValidationException.new("invalidss #{date} date, the format should be YYYY-MM-DD")
|
21
|
+
end
|
22
|
+
|
14
23
|
end
|
15
24
|
end
|
16
25
|
end
|
data/lib/fintecture/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fintecture
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fintecture
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-05-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -120,8 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
120
120
|
- !ruby/object:Gem::Version
|
121
121
|
version: '0'
|
122
122
|
requirements: []
|
123
|
-
|
124
|
-
rubygems_version: 2.7.8
|
123
|
+
rubygems_version: 3.0.6
|
125
124
|
signing_key:
|
126
125
|
specification_version: 4
|
127
126
|
summary: Short summary
|