fat_zebra_multi 3.1.0.2 → 3.2.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/fat_zebra_multi.gemspec +1 -1
- data/lib/fat_zebra.rb +1 -0
- data/lib/fat_zebra/authorise.rb +49 -0
- data/lib/fat_zebra/version.rb +1 -1
- data/spec/cassettes/FatZebra_Authorise/_authorise/with_challenge_response/1_2_3_1.yml +48 -0
- data/spec/cassettes/FatZebra_Authorise/_authorise/with_challenge_response/1_2_3_2.yml +48 -0
- data/spec/cassettes/FatZebra_Authorise/_authorise/with_frictionless_response/1_2_2_1.yml +48 -0
- data/spec/cassettes/FatZebra_Authorise/_authorise/with_frictionless_response/1_2_2_2.yml +48 -0
- data/spec/cassettes/FatZebra_Authorise/_authorise/with_invalid_input/1_2_1_1.yml +50 -0
- data/spec/cassettes/FatZebra_Authorise/_jwt_token/returns_JWT_with_given_params.yml +46 -0
- data/spec/cassettes/FatZebra_Authorise/_jwt_token/returns_JWT_with_no_params.yml +46 -0
- data/spec/cassettes/FatZebra_Authorise/_jwt_token/returns_JWT_with_some_params.yml +46 -0
- data/spec/lib/fat_zebra/authorise_spec.rb +101 -0
- data/spec/spec_helper.rb +4 -2
- data/spec/support/payloads.rb +42 -0
- metadata +17 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d8cc64078a0d4550e82e685fd5f4ff5a863050d0cf0def2fc44685f02ed89328
|
4
|
+
data.tar.gz: 496cc0182bcac8d5bbc07ff030ab15b0332acad2d912a4ce11fce1eefebdb2a6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d072ffcf46a12cd7755953e6da610564e399d6dde9cee3c6bd4c5ec8321b139bfa5fada2656229a9523eaaa964e2905eae0ee1397599ce63f2a41863396f1834
|
7
|
+
data.tar.gz: 99a13904c3238ff24a0bdc495129e4894c3550ee85fff8dfb07ec79a98b802cbe5b187e6bb6782e868e5cfd303e98aa2f3ab914ebd424be412c18983bdcdc965
|
data/fat_zebra_multi.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |s|
|
|
10
10
|
s.email = ['matt@amasses.net', 'aidan.samuel@supporterhub.com']
|
11
11
|
s.homepage = ''
|
12
12
|
s.summary = 'Unofficial fork of the Fat Zebra API client - integrate your Ruby app with Fat Zebra'
|
13
|
-
s.description = 'Unofficial fork.
|
13
|
+
s.description = 'Unofficial fork. Integrate with the Fat Zebra internet payment gateway (www.fatzebra.com.au), including purchase, refund, auth, capture and recurring billing functionality.'
|
14
14
|
|
15
15
|
s.files = `git ls-files`.split("\n")
|
16
16
|
s.test_files = `git ls-files -- {spec}/*`.split("\n")
|
data/lib/fat_zebra.rb
CHANGED
@@ -28,6 +28,7 @@ require 'fat_zebra/api_operation/void'
|
|
28
28
|
require 'fat_zebra/purchase'
|
29
29
|
require 'fat_zebra/information'
|
30
30
|
require 'fat_zebra/card'
|
31
|
+
require 'fat_zebra/authorise'
|
31
32
|
require 'fat_zebra/refund'
|
32
33
|
require 'fat_zebra/payment_plan'
|
33
34
|
require 'fat_zebra/customer'
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module FatZebra
|
2
|
+
##
|
3
|
+
# == FatZebra \Authorise
|
4
|
+
#
|
5
|
+
# Manage 3DS authorisation for the API
|
6
|
+
#
|
7
|
+
# * token
|
8
|
+
# * authorise
|
9
|
+
#
|
10
|
+
class Authorise < APIResource
|
11
|
+
@resource_name = 'authorise'
|
12
|
+
|
13
|
+
validates :card_number, required: true, on: :authorise
|
14
|
+
validates :card_expiry, required: true, on: :authorise
|
15
|
+
validates :threeds, required: true, on: :authorise
|
16
|
+
|
17
|
+
class << self
|
18
|
+
|
19
|
+
##
|
20
|
+
# Returns a JWT token for the 3DS authorisation process
|
21
|
+
#
|
22
|
+
# @param [Hash] params
|
23
|
+
# @param [Hash] options for the request, and configurations (Optional)
|
24
|
+
#
|
25
|
+
# @return [FatZebra::Authorise]
|
26
|
+
def jwt_token(params = {}, options = {})
|
27
|
+
valid!(params, :jwt_token) if respond_to?(:valid!)
|
28
|
+
|
29
|
+
response = request(:get, "#{resource_path}/jwt_token", params, options)
|
30
|
+
initialize_from(response)
|
31
|
+
end
|
32
|
+
|
33
|
+
##
|
34
|
+
# Creates a lookup request to 3DS server
|
35
|
+
#
|
36
|
+
# @param [Hash] params
|
37
|
+
# @param [Hash] options for the request, and configurations (Optional)
|
38
|
+
#
|
39
|
+
# @return [FatZebra::Authorise]
|
40
|
+
def authorise(params = {}, options = {})
|
41
|
+
valid!(params, :authorise) if respond_to?(:valid!)
|
42
|
+
|
43
|
+
response = request(:post, resource_path, params, options)
|
44
|
+
initialize_from(response)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
data/lib/fat_zebra/version.rb
CHANGED
@@ -0,0 +1,48 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://gateway.sandbox.fatzebra.com.au/v1.0/authorise
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: '{"card_number":"4111111111111111","card_expiry":"09/2020","threeds":{"enabled":true,"amount":100,"billing_address1":"SOME
|
9
|
+
ADDRESS","billing_city":"Sydney","billing_country_code":"036","billing_first_name":"John","billing_last_name":"Smith","billing_postal_code":"2000","billing_state":"NSW","currency_code":"036","df_reference_id":"d11506cf96cdbb83badc","mobile_phone":"1234567890","email":"dev@fatzebra.com.au","transaction_mode":"mobile","transaction_type":"C","order_number":"118884994ef0db99f4f5","shipping_address1":"SOME
|
10
|
+
ADDRESS","shipping_state":"NSW","shipping_city":"Sydney","shipping_country_code":"036","shipping_address2":"SOME
|
11
|
+
ADDRESS","shipping_address3":"SOME ADDRESS","shipping_postal_code":"2000","billing_phone":"1234567890","work_phone":"1234567890","billing_address2":"SOME
|
12
|
+
ADDRESS","billing_address3":"SOME ADDRESS","authentication_indicator":"01","product_code":"PHY","installment":2,"purchase_date":"20200902104008","recurring_end":"20200902","recurring_frequency":31},"test":true}'
|
13
|
+
headers:
|
14
|
+
Accept-Encoding:
|
15
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
16
|
+
Accept:
|
17
|
+
- application/json
|
18
|
+
User-Agent:
|
19
|
+
- Ruby
|
20
|
+
Authorization:
|
21
|
+
- Basic VEVTVDpURVNU
|
22
|
+
Content-Type:
|
23
|
+
- application/json
|
24
|
+
response:
|
25
|
+
status:
|
26
|
+
code: 200
|
27
|
+
message: OK
|
28
|
+
headers:
|
29
|
+
Cache-Control:
|
30
|
+
- no-store
|
31
|
+
Pragma:
|
32
|
+
- no-cache
|
33
|
+
Content-Type:
|
34
|
+
- application/json; charset=utf-8
|
35
|
+
X-Request-Version:
|
36
|
+
- 1.21.8
|
37
|
+
X-Request-Id:
|
38
|
+
- 67d00e9d5db8ed66fbbb01dee8150f11
|
39
|
+
X-Runtime:
|
40
|
+
- '1.262001'
|
41
|
+
Transfer-Encoding:
|
42
|
+
- chunked
|
43
|
+
body:
|
44
|
+
encoding: UTF-8
|
45
|
+
string: '{"successful":true,"response":{"ThreeDSVersion":"1.0.2","Enrolled":"Y","ErrorDesc":null,"ErrorNo":"0","EciFlag":"07","OrderId":"8000143411954523","TransactionId":"KJpHTe72N6ePm5HTxYk0","TransactionType":null,"SignatureVerification":null,"CardBrand":"VISA","CardBin":"411111","DSTransactionId":null,"RawACSUrl":"https://someacsurl.com","ACSUrl":"https://someacsurl.com","StepUpUrl":"https://somestepupurl.com","Cavv":null,"PAResStatus":null,"Payload":"551f6bb1db7ba013570c9d96a1aa","Xid":null,"ReasonCode":null,"ReasonDesc":null,"ChallengeRequired":null,"StatusReason":null,"ACSTransactionId":null,"ThreeDSServerTransactionId":null},"errors":null,"test":true}'
|
46
|
+
http_version:
|
47
|
+
recorded_at: Mon, 02 Sep 2019 00:40:09 GMT
|
48
|
+
recorded_with: VCR 3.0.3
|
@@ -0,0 +1,48 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://gateway.sandbox.fatzebra.com.au/v1.0/authorise
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: '{"card_number":"4111111111111111","card_expiry":"09/2020","threeds":{"enabled":true,"amount":100,"billing_address1":"SOME
|
9
|
+
ADDRESS","billing_city":"Sydney","billing_country_code":"036","billing_first_name":"John","billing_last_name":"Smith","billing_postal_code":"2000","billing_state":"NSW","currency_code":"036","df_reference_id":"2bcec7c03322c1603ce0","mobile_phone":"1234567890","email":"dev@fatzebra.com.au","transaction_mode":"mobile","transaction_type":"C","order_number":"eb6932557e2500078ac1","shipping_address1":"SOME
|
10
|
+
ADDRESS","shipping_state":"NSW","shipping_city":"Sydney","shipping_country_code":"036","shipping_address2":"SOME
|
11
|
+
ADDRESS","shipping_address3":"SOME ADDRESS","shipping_postal_code":"2000","billing_phone":"1234567890","work_phone":"1234567890","billing_address2":"SOME
|
12
|
+
ADDRESS","billing_address3":"SOME ADDRESS","authentication_indicator":"01","product_code":"PHY","installment":2,"purchase_date":"20200902104009","recurring_end":"20200902","recurring_frequency":31},"test":true}'
|
13
|
+
headers:
|
14
|
+
Accept-Encoding:
|
15
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
16
|
+
Accept:
|
17
|
+
- application/json
|
18
|
+
User-Agent:
|
19
|
+
- Ruby
|
20
|
+
Authorization:
|
21
|
+
- Basic VEVTVDpURVNU
|
22
|
+
Content-Type:
|
23
|
+
- application/json
|
24
|
+
response:
|
25
|
+
status:
|
26
|
+
code: 200
|
27
|
+
message: OK
|
28
|
+
headers:
|
29
|
+
Cache-Control:
|
30
|
+
- no-store
|
31
|
+
Pragma:
|
32
|
+
- no-cache
|
33
|
+
Content-Type:
|
34
|
+
- application/json; charset=utf-8
|
35
|
+
X-Request-Version:
|
36
|
+
- 1.21.8
|
37
|
+
X-Request-Id:
|
38
|
+
- a31f46e23fa3e98ede0c58f789916eeb
|
39
|
+
X-Runtime:
|
40
|
+
- '1.011716'
|
41
|
+
Transfer-Encoding:
|
42
|
+
- chunked
|
43
|
+
body:
|
44
|
+
encoding: UTF-8
|
45
|
+
string: '{"successful":true,"response":{"ThreeDSVersion":"1.0.2","Enrolled":"Y","ErrorDesc":null,"ErrorNo":"0","EciFlag":"07","OrderId":"8000087145309035","TransactionId":"p3gebCQ2vbqT7jKzquU0","TransactionType":null,"SignatureVerification":null,"CardBrand":"VISA","CardBin":"411111","DSTransactionId":null,"RawACSUrl":"https://someacsurl.com","ACSUrl":"https://someacsurl.com","StepUpUrl":"https://somestepupurl.com","Cavv":null,"PAResStatus":null,"Payload":"39b8551f6bb1db7ba013570c9d96a1aa","Xid":null,"ReasonCode":null,"ReasonDesc":null,"ChallengeRequired":null,"StatusReason":null,"ACSTransactionId":null,"ThreeDSServerTransactionId":null},"errors":null,"test":true}'
|
46
|
+
http_version:
|
47
|
+
recorded_at: Mon, 02 Sep 2019 00:40:10 GMT
|
48
|
+
recorded_with: VCR 3.0.3
|
@@ -0,0 +1,48 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://gateway.sandbox.fatzebra.com.au/v1.0/authorise
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: '{"card_number":"4000000000001000","card_expiry":"09/2020","threeds":{"enabled":true,"amount":100,"billing_address1":"SOME
|
9
|
+
ADDRESS","billing_city":"Sydney","billing_country_code":"036","billing_first_name":"John","billing_last_name":"Smith","billing_postal_code":"2000","billing_state":"NSW","currency_code":"036","df_reference_id":"9b078159eefbc57e34fb","mobile_phone":"1234567890","email":"dev@fatzebra.com.au","transaction_mode":"mobile","transaction_type":"C","order_number":"c2123ed55ff5c2d9e024","shipping_address1":"SOME
|
10
|
+
ADDRESS","shipping_state":"NSW","shipping_city":"Sydney","shipping_country_code":"036","shipping_address2":"SOME
|
11
|
+
ADDRESS","shipping_address3":"SOME ADDRESS","shipping_postal_code":"2000","billing_phone":"1234567890","work_phone":"1234567890","billing_address2":"SOME
|
12
|
+
ADDRESS","billing_address3":"SOME ADDRESS","authentication_indicator":"01","product_code":"PHY","installment":2,"purchase_date":"20200902104005","recurring_end":"20200902","recurring_frequency":31},"test":true}'
|
13
|
+
headers:
|
14
|
+
Accept-Encoding:
|
15
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
16
|
+
Accept:
|
17
|
+
- application/json
|
18
|
+
User-Agent:
|
19
|
+
- Ruby
|
20
|
+
Authorization:
|
21
|
+
- Basic VEVTVDpURVNU
|
22
|
+
Content-Type:
|
23
|
+
- application/json
|
24
|
+
response:
|
25
|
+
status:
|
26
|
+
code: 200
|
27
|
+
message: OK
|
28
|
+
headers:
|
29
|
+
Cache-Control:
|
30
|
+
- no-store
|
31
|
+
Pragma:
|
32
|
+
- no-cache
|
33
|
+
Content-Type:
|
34
|
+
- application/json; charset=utf-8
|
35
|
+
X-Request-Version:
|
36
|
+
- 1.21.8
|
37
|
+
X-Request-Id:
|
38
|
+
- 57648875a0bcbe1d7d5fa04695234c31
|
39
|
+
X-Runtime:
|
40
|
+
- '1.365493'
|
41
|
+
Transfer-Encoding:
|
42
|
+
- chunked
|
43
|
+
body:
|
44
|
+
encoding: UTF-8
|
45
|
+
string: '{"successful":true,"response":{"ThreeDSVersion":"1.0.2","Enrolled":"Y","ErrorDesc":null,"ErrorNo":"0","EciFlag":"07","OrderId":"8000785369280523","TransactionId":"3UFULPbYKAJtaKXx41S0","TransactionType":null,"SignatureVerification":null,"CardBrand":"VISA","CardBin":"400000","DSTransactionId":null,"RawACSUrl":null,"ACSUrl":null,"StepUpUrl":null,"Cavv":null,"PAResStatus":null,"Payload":null,"Xid":null,"ReasonCode":null,"ReasonDesc":null,"ChallengeRequired":null,"StatusReason":null,"ACSTransactionId":null,"ThreeDSServerTransactionId":null},"errors":null,"test":true}'
|
46
|
+
http_version:
|
47
|
+
recorded_at: Mon, 02 Sep 2019 00:40:07 GMT
|
48
|
+
recorded_with: VCR 3.0.3
|
@@ -0,0 +1,48 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://gateway.sandbox.fatzebra.com.au/v1.0/authorise
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: '{"card_number":"4000000000001000","card_expiry":"09/2020","threeds":{"enabled":true,"amount":100,"billing_address1":"SOME
|
9
|
+
ADDRESS","billing_city":"Sydney","billing_country_code":"036","billing_first_name":"John","billing_last_name":"Smith","billing_postal_code":"2000","billing_state":"NSW","currency_code":"036","df_reference_id":"e65ac29e83de2dcb6fec","mobile_phone":"1234567890","email":"dev@fatzebra.com.au","transaction_mode":"mobile","transaction_type":"C","order_number":"0b6724482dfdf72a0dff","shipping_address1":"SOME
|
10
|
+
ADDRESS","shipping_state":"NSW","shipping_city":"Sydney","shipping_country_code":"036","shipping_address2":"SOME
|
11
|
+
ADDRESS","shipping_address3":"SOME ADDRESS","shipping_postal_code":"2000","billing_phone":"1234567890","work_phone":"1234567890","billing_address2":"SOME
|
12
|
+
ADDRESS","billing_address3":"SOME ADDRESS","authentication_indicator":"01","product_code":"PHY","installment":2,"purchase_date":"20200902104007","recurring_end":"20200902","recurring_frequency":31},"test":true}'
|
13
|
+
headers:
|
14
|
+
Accept-Encoding:
|
15
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
16
|
+
Accept:
|
17
|
+
- application/json
|
18
|
+
User-Agent:
|
19
|
+
- Ruby
|
20
|
+
Authorization:
|
21
|
+
- Basic VEVTVDpURVNU
|
22
|
+
Content-Type:
|
23
|
+
- application/json
|
24
|
+
response:
|
25
|
+
status:
|
26
|
+
code: 200
|
27
|
+
message: OK
|
28
|
+
headers:
|
29
|
+
Cache-Control:
|
30
|
+
- no-store
|
31
|
+
Pragma:
|
32
|
+
- no-cache
|
33
|
+
Content-Type:
|
34
|
+
- application/json; charset=utf-8
|
35
|
+
X-Request-Version:
|
36
|
+
- 1.21.8
|
37
|
+
X-Request-Id:
|
38
|
+
- 3e75bd7fc1cc1e64a5373a1909d64c10
|
39
|
+
X-Runtime:
|
40
|
+
- '1.313599'
|
41
|
+
Transfer-Encoding:
|
42
|
+
- chunked
|
43
|
+
body:
|
44
|
+
encoding: UTF-8
|
45
|
+
string: '{"successful":true,"response":{"ThreeDSVersion":"1.0.2","Enrolled":"Y","ErrorDesc":null,"ErrorNo":"0","EciFlag":"07","OrderId":"8000886189302370","TransactionId":"SJjPCuSo1xgEQmxhWqz0","TransactionType":null,"SignatureVerification":null,"CardBrand":"VISA","CardBin":"400000","DSTransactionId":null,"RawACSUrl":null,"ACSUrl":null,"StepUpUrl":null,"Cavv":null,"PAResStatus":null,"Payload":null,"Xid":null,"ReasonCode":null,"ReasonDesc":null,"ChallengeRequired":null,"StatusReason":null,"ACSTransactionId":null,"ThreeDSServerTransactionId":null},"errors":null,"test":true}'
|
46
|
+
http_version:
|
47
|
+
recorded_at: Mon, 02 Sep 2019 00:40:08 GMT
|
48
|
+
recorded_with: VCR 3.0.3
|
@@ -0,0 +1,50 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://gateway.sandbox.fatzebra.com.au/v1.0/authorise
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: '{"card_number":"5123456789012346","card_expiry":"08/2019","threeds":{"enabled":true,"amount":100,"billing_address1":"SOME
|
9
|
+
ADDRESS","billing_city":"Sydney","billing_country_code":"036","billing_first_name":"John","billing_last_name":"Smith","billing_postal_code":"2000","billing_state":"NSW","currency_code":"036","df_reference_id":"ae9c3a1e8a26f09c3312","mobile_phone":"1234567890","email":"dev@fatzebra.com.au","transaction_mode":"mobile","transaction_type":"C","order_number":"7515ae6a2fc575777efa","shipping_address1":"SOME
|
10
|
+
ADDRESS","shipping_state":"NSW","shipping_city":"Sydney","shipping_country_code":"036","shipping_address2":"SOME
|
11
|
+
ADDRESS","shipping_address3":"SOME ADDRESS","shipping_postal_code":"2000","billing_phone":"1234567890","work_phone":"1234567890","billing_address2":"SOME
|
12
|
+
ADDRESS","billing_address3":"SOME ADDRESS","authentication_indicator":"01","product_code":"PHY","installment":2,"purchase_date":"20200902104004","recurring_end":"20200902","recurring_frequency":31},"test":true}'
|
13
|
+
headers:
|
14
|
+
Accept-Encoding:
|
15
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
16
|
+
Accept:
|
17
|
+
- application/json
|
18
|
+
User-Agent:
|
19
|
+
- Ruby
|
20
|
+
Authorization:
|
21
|
+
- Basic VEVTVDpURVNU
|
22
|
+
Content-Type:
|
23
|
+
- application/json
|
24
|
+
response:
|
25
|
+
status:
|
26
|
+
code: 422
|
27
|
+
message: Unprocessable Entity
|
28
|
+
headers:
|
29
|
+
Cache-Control:
|
30
|
+
- no-store
|
31
|
+
Pragma:
|
32
|
+
- no-cache
|
33
|
+
Content-Type:
|
34
|
+
- application/json; charset=utf-8
|
35
|
+
X-Request-Version:
|
36
|
+
- 1.21.8
|
37
|
+
X-Request-Id:
|
38
|
+
- 38c5e6b4a7af7dc35fb8f6608ae52b4c
|
39
|
+
X-Runtime:
|
40
|
+
- '1.637937'
|
41
|
+
Transfer-Encoding:
|
42
|
+
- chunked
|
43
|
+
body:
|
44
|
+
encoding: UTF-8
|
45
|
+
string: '{"successful":false,"response":{"ThreeDSVersion":"1.0.2","Enrolled":"U","ErrorDesc":"Error
|
46
|
+
Validating Credit Card Expiration Information Passed (YYMM)","ErrorNo":"4000","EciFlag":"00","OrderId":"8010307730195369","TransactionId":"EBw7c1ZzTL50yr3JH7S0","TransactionType":null,"SignatureVerification":null,"CardBrand":"MASTERCARD","CardBin":"512345","DSTransactionId":null,"RawACSUrl":null,"ACSUrl":null,"StepUpUrl":null,"Cavv":null,"PAResStatus":null,"Payload":null,"Xid":null,"ReasonCode":null,"ReasonDesc":null,"ChallengeRequired":null,"StatusReason":null,"ACSTransactionId":null,"ThreeDSServerTransactionId":null},"errors":"Error
|
47
|
+
Validating Credit Card Expiration Information Passed (YYMM)","test":true}'
|
48
|
+
http_version:
|
49
|
+
recorded_at: Mon, 02 Sep 2019 00:40:05 GMT
|
50
|
+
recorded_with: VCR 3.0.3
|
@@ -0,0 +1,46 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://gateway.sandbox.fatzebra.com.au/v1.0/authorise/jwt_token?amount=100&confirm_url=https://example.com¤cy_code=036&order_number=xxxx-xxxx-xxxx&reference_id=xxxx-xxxx-xxxx&test=true
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept-Encoding:
|
11
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
12
|
+
Accept:
|
13
|
+
- application/json
|
14
|
+
User-Agent:
|
15
|
+
- Ruby
|
16
|
+
Host:
|
17
|
+
- gateway.sandbox.fatzebra.com.au
|
18
|
+
Authorization:
|
19
|
+
- Basic VEVTVDpURVNU
|
20
|
+
Content-Type:
|
21
|
+
- application/json
|
22
|
+
response:
|
23
|
+
status:
|
24
|
+
code: 200
|
25
|
+
message: OK
|
26
|
+
headers:
|
27
|
+
Cache-Control:
|
28
|
+
- no-store
|
29
|
+
Pragma:
|
30
|
+
- no-cache
|
31
|
+
Content-Type:
|
32
|
+
- application/json; charset=utf-8
|
33
|
+
X-Request-Version:
|
34
|
+
- 1.21.8
|
35
|
+
X-Request-Id:
|
36
|
+
- ca35fe7e5bb33bf91045771b066e3225
|
37
|
+
X-Runtime:
|
38
|
+
- '2.541608'
|
39
|
+
Transfer-Encoding:
|
40
|
+
- chunked
|
41
|
+
body:
|
42
|
+
encoding: UTF-8
|
43
|
+
string: '{"successful":true,"response":{"jwt":"eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NjczOTkyMDMsImlhdCI6MTU2NzM4NDgwMywiaXNzIjoiNTgyZTBhMjAzM2ZhZGQxMjYwZjk5MGY2IiwianRpIjoiNzJjYzkzZTktY2I0Ni00NjNiLTllZWMtNWFjYzViMzRlZDk2IiwiT3JnVW5pdElkIjoiNTgyYmU5ZGVkYTUyOTMyYTk0NmM0NWM0IiwiT2JqZWN0aWZ5UGF5bG9hZCI6dHJ1ZSwiUmVmZXJlbmNlSWQiOiJlMTdkMGIxNy1jYTViLTRhYzQtYWE3YS0xN2ZhYzQzMDNiM2IifQ.pslZfApXY1MtDA2OKks9OhkEY_KIFkc-XTrO4Xc7zIg","reference_id":"e17d0b17-ca5b-4ac4-aa7a-17fac4303b3b"},"errors":[],"test":true}'
|
44
|
+
http_version:
|
45
|
+
recorded_at: Mon, 02 Sep 2019 00:40:03 GMT
|
46
|
+
recorded_with: VCR 3.0.3
|
@@ -0,0 +1,46 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://gateway.sandbox.fatzebra.com.au/v1.0/authorise/jwt_token?test=true
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept-Encoding:
|
11
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
12
|
+
Accept:
|
13
|
+
- application/json
|
14
|
+
User-Agent:
|
15
|
+
- Ruby
|
16
|
+
Host:
|
17
|
+
- gateway.sandbox.fatzebra.com.au
|
18
|
+
Authorization:
|
19
|
+
- Basic VEVTVDpURVNU
|
20
|
+
Content-Type:
|
21
|
+
- application/json
|
22
|
+
response:
|
23
|
+
status:
|
24
|
+
code: 200
|
25
|
+
message: OK
|
26
|
+
headers:
|
27
|
+
Cache-Control:
|
28
|
+
- no-store
|
29
|
+
Pragma:
|
30
|
+
- no-cache
|
31
|
+
Content-Type:
|
32
|
+
- application/json; charset=utf-8
|
33
|
+
X-Request-Version:
|
34
|
+
- 1.21.8
|
35
|
+
X-Request-Id:
|
36
|
+
- 2cb2771998d04b67bf479f83c41cad0e
|
37
|
+
X-Runtime:
|
38
|
+
- '0.045799'
|
39
|
+
Transfer-Encoding:
|
40
|
+
- chunked
|
41
|
+
body:
|
42
|
+
encoding: UTF-8
|
43
|
+
string: '{"successful":true,"response":{"jwt":"eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NjczOTkyMDQsImlhdCI6MTU2NzM4NDgwNCwiaXNzIjoiNTgyZTBhMjAzM2ZhZGQxMjYwZjk5MGY2IiwianRpIjoiNmQzZDcxZTktMGE5YS00OTFlLWJkZmQtYjA5YWVlZDU5ZmY5IiwiT3JnVW5pdElkIjoiNTgyYmU5ZGVkYTUyOTMyYTk0NmM0NWM0IiwiT2JqZWN0aWZ5UGF5bG9hZCI6dHJ1ZSwiUmVmZXJlbmNlSWQiOiJlNjQ2MGFhNy05YjhhLTQ2MTQtOTZiOC02YjdhNzAxMmQxMDEifQ.KjC2WU5UUegB1h56jvGZ7XVU-0EuYE0MVepuwG9H-O8","reference_id":"e6460aa7-9b8a-4614-96b8-6b7a7012d101"},"errors":[],"test":true}'
|
44
|
+
http_version:
|
45
|
+
recorded_at: Mon, 02 Sep 2019 00:40:04 GMT
|
46
|
+
recorded_with: VCR 3.0.3
|
@@ -0,0 +1,46 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://gateway.sandbox.fatzebra.com.au/v1.0/authorise/jwt_token?amount=100&confirm_url=https://example.com¤cy_code=036&order_number=xxxx-xxxx-xxxx&test=true
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept-Encoding:
|
11
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
12
|
+
Accept:
|
13
|
+
- application/json
|
14
|
+
User-Agent:
|
15
|
+
- Ruby
|
16
|
+
Host:
|
17
|
+
- gateway.sandbox.fatzebra.com.au
|
18
|
+
Authorization:
|
19
|
+
- Basic VEVTVDpURVNU
|
20
|
+
Content-Type:
|
21
|
+
- application/json
|
22
|
+
response:
|
23
|
+
status:
|
24
|
+
code: 200
|
25
|
+
message: OK
|
26
|
+
headers:
|
27
|
+
Cache-Control:
|
28
|
+
- no-store
|
29
|
+
Pragma:
|
30
|
+
- no-cache
|
31
|
+
Content-Type:
|
32
|
+
- application/json; charset=utf-8
|
33
|
+
X-Request-Version:
|
34
|
+
- 1.21.8
|
35
|
+
X-Request-Id:
|
36
|
+
- baa38892840aad6e85125b672b0f3264
|
37
|
+
X-Runtime:
|
38
|
+
- '0.265561'
|
39
|
+
Transfer-Encoding:
|
40
|
+
- chunked
|
41
|
+
body:
|
42
|
+
encoding: UTF-8
|
43
|
+
string: '{"successful":true,"response":{"jwt":"eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NjczOTkyMDMsImlhdCI6MTU2NzM4NDgwMywiaXNzIjoiNTgyZTBhMjAzM2ZhZGQxMjYwZjk5MGY2IiwianRpIjoiZDZkMTFjYzItYzJlNS00MDk1LWJhMjktMmY2NDhiNzJjNzU1IiwiT3JnVW5pdElkIjoiNTgyYmU5ZGVkYTUyOTMyYTk0NmM0NWM0IiwiT2JqZWN0aWZ5UGF5bG9hZCI6dHJ1ZSwiUmVmZXJlbmNlSWQiOiJiODg2MDAzZi1lYTJiLTQwMjAtOGVlNC01NjFlYTdjMTI3MzEifQ.w2EKM09LU0lF7iq5luyVbpwXx6p_np3DApXsP5XpTWw","reference_id":"b886003f-ea2b-4020-8ee4-561ea7c12731"},"errors":[],"test":true}'
|
44
|
+
http_version:
|
45
|
+
recorded_at: Mon, 02 Sep 2019 00:40:03 GMT
|
46
|
+
recorded_with: VCR 3.0.3
|
@@ -0,0 +1,101 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe FatZebra::Authorise do
|
4
|
+
|
5
|
+
describe '.jwt_token', :vcr do
|
6
|
+
subject(:token) { FatZebra::Authorise.jwt_token(valid_3ds_token_payload) }
|
7
|
+
|
8
|
+
let(:valid_3ds_token_payload) {{
|
9
|
+
reference_id: 'xxxx-xxxx-xxxx',
|
10
|
+
confirm_url: 'https://example.com',
|
11
|
+
order_number: 'xxxx-xxxx-xxxx',
|
12
|
+
currency_code: '036',
|
13
|
+
amount: 100
|
14
|
+
}}
|
15
|
+
|
16
|
+
it 'returns JWT with given params' do
|
17
|
+
is_expected.to be_accepted
|
18
|
+
expect(token.jwt).to be_truthy
|
19
|
+
expect(token.reference_id).to be_truthy
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'returns JWT with some params' do
|
23
|
+
valid_3ds_token_payload.delete(:reference_id)
|
24
|
+
is_expected.to be_accepted
|
25
|
+
expect(token.jwt).to be_truthy
|
26
|
+
expect(token.reference_id).to be_truthy
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'returns JWT with no params' do
|
30
|
+
valid_3ds_token_payload.clear
|
31
|
+
is_expected.to be_accepted
|
32
|
+
expect(token.jwt).to be_truthy
|
33
|
+
expect(token.reference_id).to be_truthy
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe '.authorise', :vcr do
|
38
|
+
subject(:authorise) { FatZebra::Authorise.authorise(valid_3ds_authorise_payload) }
|
39
|
+
|
40
|
+
context 'with invalid input' do
|
41
|
+
before do
|
42
|
+
valid_3ds_authorise_payload[:card_expiry] = DateTime.now.prev_month.strftime('%m/%Y')
|
43
|
+
end
|
44
|
+
|
45
|
+
it do
|
46
|
+
is_expected.not_to be_accepted
|
47
|
+
expect(authorise.errors).to match(/Error Validating Credit Card Expiration/)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
context 'with frictionless response' do
|
52
|
+
before do
|
53
|
+
valid_3ds_authorise_payload[:card_number] = '4000000000001000'
|
54
|
+
end
|
55
|
+
|
56
|
+
it do
|
57
|
+
is_expected.to be_accepted
|
58
|
+
expect(authorise.keys).to include('Enrolled', 'ACSUrl', 'CardBin', 'TransactionId')
|
59
|
+
expect(authorise.errors).not_to be_truthy
|
60
|
+
end
|
61
|
+
|
62
|
+
it do
|
63
|
+
expect(authorise.Enrolled).to eq('Y')
|
64
|
+
expect(authorise.ACSUrl).not_to be_truthy
|
65
|
+
expect(authorise.CardBin).to be_truthy
|
66
|
+
expect(authorise.ErrorNo).to eq('0')
|
67
|
+
expect(authorise.ErrorDesc).not_to be_truthy
|
68
|
+
expect(authorise.CardBrand).to be_truthy
|
69
|
+
expect(authorise.TransactionId).to be_truthy
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
context 'with challenge response' do
|
74
|
+
before do
|
75
|
+
valid_3ds_authorise_payload[:card_number] = '4111111111111111'
|
76
|
+
end
|
77
|
+
|
78
|
+
it do
|
79
|
+
is_expected.to be_accepted
|
80
|
+
expect(authorise.keys).to include('Enrolled', 'ACSUrl', 'CardBin', 'TransactionId')
|
81
|
+
expect(authorise.errors).not_to be_truthy
|
82
|
+
end
|
83
|
+
|
84
|
+
it do
|
85
|
+
expect(authorise.Enrolled).to eq('Y')
|
86
|
+
expect(authorise.ACSUrl).to be_truthy
|
87
|
+
expect(authorise.CardBin).to be_truthy
|
88
|
+
expect(authorise.ErrorNo).to eq('0')
|
89
|
+
expect(authorise.ErrorDesc).not_to be_truthy
|
90
|
+
expect(authorise.CardBrand).to be_truthy
|
91
|
+
expect(authorise.TransactionId).to be_truthy
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
context 'validations' do
|
96
|
+
let(:valid_3ds_authorise_payload) {{}}
|
97
|
+
|
98
|
+
it { expect{ authorise }.to raise_error(FatZebra::RequestValidationError) }
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -15,6 +15,7 @@ VCR.configure do |config|
|
|
15
15
|
config.hook_into :webmock
|
16
16
|
config.configure_rspec_metadata!
|
17
17
|
config.allow_http_connections_when_no_cassette = false
|
18
|
+
# config.debug_logger = $stdout
|
18
19
|
|
19
20
|
config.register_request_matcher :uri_ignoring_trailing_id do |*requests|
|
20
21
|
requests.map(&:uri).map { |uri|
|
@@ -26,9 +27,10 @@ VCR.configure do |config|
|
|
26
27
|
|
27
28
|
config.register_request_matcher :fuzzy_body do |*requests|
|
28
29
|
requests.map(&:body).map { |body|
|
29
|
-
body.gsub /\b\h{
|
30
|
+
body.gsub /\b\h{20}\h{12}?(-\d)?\b/, 'REFERENCE-NUMBER'
|
30
31
|
}.map { |body|
|
31
|
-
body.gsub /\b(19|20)\d\d(-?)(0[1-9]|1[012])\2(0[1-9]|[12]
|
32
|
+
body.gsub /\b(19|20)\d\d(-?)(0[1-9]|1[012])\2((0[1-9]|[12]\d|3[01])([012]\d([0-5]\d){1,2})?)?\b/, '9999\299\299'
|
33
|
+
# yyyyyyyyyy mmmmmmmmmmmmm dddddddddddddddddddd hhhhhhh msmsmsmsmsmsm
|
32
34
|
}.reduce &:==
|
33
35
|
end
|
34
36
|
|
data/spec/support/payloads.rb
CHANGED
@@ -40,4 +40,46 @@ shared_context 'payloads' do
|
|
40
40
|
}
|
41
41
|
}}
|
42
42
|
|
43
|
+
let(:valid_3ds_authorise_payload) {{
|
44
|
+
card_number: '5123456789012346',
|
45
|
+
card_expiry: DateTime.now.next_year.strftime('%m/%Y'),
|
46
|
+
threeds: {
|
47
|
+
enabled: true,
|
48
|
+
amount: 100,
|
49
|
+
billing_address1: 'SOME ADDRESS',
|
50
|
+
billing_city: 'Sydney',
|
51
|
+
billing_country_code: '036', # Australia
|
52
|
+
billing_first_name: 'John',
|
53
|
+
billing_last_name: 'Smith',
|
54
|
+
billing_postal_code: '2000',
|
55
|
+
billing_state: 'NSW',
|
56
|
+
currency_code: '036',
|
57
|
+
df_reference_id: SecureRandom.hex(10),
|
58
|
+
mobile_phone: '1234567890',
|
59
|
+
email: 'dev@fatzebra.com.au',
|
60
|
+
transaction_mode: 'mobile',
|
61
|
+
transaction_type: 'C',
|
62
|
+
order_number: SecureRandom.hex(10),
|
63
|
+
|
64
|
+
shipping_address1: 'SOME ADDRESS',
|
65
|
+
shipping_state: 'NSW',
|
66
|
+
shipping_city: 'Sydney',
|
67
|
+
shipping_country_code: '036',
|
68
|
+
shipping_address2: 'SOME ADDRESS',
|
69
|
+
shipping_address3: 'SOME ADDRESS',
|
70
|
+
shipping_postal_code: '2000',
|
71
|
+
billing_phone: '1234567890',
|
72
|
+
work_phone: '1234567890',
|
73
|
+
billing_address2: 'SOME ADDRESS',
|
74
|
+
billing_address3: 'SOME ADDRESS',
|
75
|
+
authentication_indicator: '01',
|
76
|
+
product_code: 'PHY',
|
77
|
+
|
78
|
+
installment: 2,
|
79
|
+
purchase_date: DateTime.now.next_year.strftime('%Y%m%d%H%M%S'),
|
80
|
+
recurring_end: DateTime.now.next_year.strftime('%Y%m%d'),
|
81
|
+
recurring_frequency: 31
|
82
|
+
}
|
83
|
+
}}
|
84
|
+
|
43
85
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fat_zebra_multi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew Savage
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2019-
|
12
|
+
date: 2019-09-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: pry
|
@@ -95,9 +95,9 @@ dependencies:
|
|
95
95
|
- - "~>"
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: '3.0'
|
98
|
-
description: Unofficial fork.
|
99
|
-
|
100
|
-
|
98
|
+
description: Unofficial fork. Integrate with the Fat Zebra internet payment gateway
|
99
|
+
(www.fatzebra.com.au), including purchase, refund, auth, capture and recurring billing
|
100
|
+
functionality.
|
101
101
|
email:
|
102
102
|
- matt@amasses.net
|
103
103
|
- aidan.samuel@supporterhub.com
|
@@ -121,6 +121,7 @@ files:
|
|
121
121
|
- lib/fat_zebra/api_operation/search.rb
|
122
122
|
- lib/fat_zebra/api_operation/void.rb
|
123
123
|
- lib/fat_zebra/api_resource.rb
|
124
|
+
- lib/fat_zebra/authorise.rb
|
124
125
|
- lib/fat_zebra/bank_account.rb
|
125
126
|
- lib/fat_zebra/batch.rb
|
126
127
|
- lib/fat_zebra/card.rb
|
@@ -145,6 +146,14 @@ files:
|
|
145
146
|
- lib/fat_zebra/validation.rb
|
146
147
|
- lib/fat_zebra/version.rb
|
147
148
|
- lib/fat_zebra/web_hook.rb
|
149
|
+
- spec/cassettes/FatZebra_Authorise/_authorise/with_challenge_response/1_2_3_1.yml
|
150
|
+
- spec/cassettes/FatZebra_Authorise/_authorise/with_challenge_response/1_2_3_2.yml
|
151
|
+
- spec/cassettes/FatZebra_Authorise/_authorise/with_frictionless_response/1_2_2_1.yml
|
152
|
+
- spec/cassettes/FatZebra_Authorise/_authorise/with_frictionless_response/1_2_2_2.yml
|
153
|
+
- spec/cassettes/FatZebra_Authorise/_authorise/with_invalid_input/1_2_1_1.yml
|
154
|
+
- spec/cassettes/FatZebra_Authorise/_jwt_token/returns_JWT_with_given_params.yml
|
155
|
+
- spec/cassettes/FatZebra_Authorise/_jwt_token/returns_JWT_with_no_params.yml
|
156
|
+
- spec/cassettes/FatZebra_Authorise/_jwt_token/returns_JWT_with_some_params.yml
|
148
157
|
- spec/cassettes/FatZebra_BankAccount/_create/1_1_1.yml
|
149
158
|
- spec/cassettes/FatZebra_BankAccount/_create/1_1_2.yml
|
150
159
|
- spec/cassettes/FatZebra_BankAccount/_search/1_2_1.yml
|
@@ -294,6 +303,7 @@ files:
|
|
294
303
|
- spec/cassettes/Multiple_accounts/The_basics/1_1_6.yml
|
295
304
|
- spec/fixtures/batch_test.csv
|
296
305
|
- spec/lib/fat_zebra/api_resource_spec.rb
|
306
|
+
- spec/lib/fat_zebra/authorise_spec.rb
|
297
307
|
- spec/lib/fat_zebra/bank_account_spec.rb
|
298
308
|
- spec/lib/fat_zebra/batch_spec.rb
|
299
309
|
- spec/lib/fat_zebra/card_spec.rb
|
@@ -332,7 +342,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
332
342
|
- !ruby/object:Gem::Version
|
333
343
|
version: '0'
|
334
344
|
requirements: []
|
335
|
-
|
345
|
+
rubyforge_project:
|
346
|
+
rubygems_version: 2.7.6.2
|
336
347
|
signing_key:
|
337
348
|
specification_version: 4
|
338
349
|
summary: Unofficial fork of the Fat Zebra API client - integrate your Ruby app with
|