shieldpay 0.2.0 → 1.0.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 +4 -4
- data/README.md +2 -1
- data/lib/shieldpay.rb +1 -0
- data/lib/shieldpay/configuration.rb +18 -2
- data/lib/shieldpay/customer.rb +8 -4
- data/lib/shieldpay/errors.rb +7 -3
- data/lib/shieldpay/payment_request.rb +3 -1
- data/lib/shieldpay/request.rb +2 -7
- data/lib/shieldpay/transaction.rb +33 -0
- data/lib/shieldpay/version.rb +1 -1
- data/lib/shieldpay/webhook.rb +29 -18
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f185dcd40cc56cdd032995190d58019c1e09d6b609a18a26dbe2840e8e3da328
|
4
|
+
data.tar.gz: 00e5e9aaea53dee2e7c868722720d10d3f6a482dbabaea9dc2ac74463729bbd8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 67b9c0121cd55d315294825f9a6a69cc8d25540dd9914eeced9c570d8e6ab49448c08e611acff6dff58468e7f928184b1284a9c9c3478a03097868299b5e9aa8
|
7
|
+
data.tar.gz: 643e35bba559bd275b8e6b1f285ad64096de89010f08c394adf36871ace6b379ddb7faff867affb293e6473bd3e3d5516657f8efbdd1a305b7aacb266c469ca3
|
data/README.md
CHANGED
@@ -31,7 +31,7 @@ org_key|This is the organization key you need to use the ShieldPay api|No
|
|
31
31
|
country_code|2 character country code that is the default for your payments|Yes
|
32
32
|
debug|Turn debug mode on to see extra messages in your api calls|Yes
|
33
33
|
default_currency|If you don't set a currency code in your api calls then this is used|Yes
|
34
|
-
|
34
|
+
uat|Whether you want to access the uat version of the shieldpay api. Defaults to false|Yes
|
35
35
|
|
36
36
|
#### Sample configuration
|
37
37
|
```Ruby
|
@@ -121,6 +121,7 @@ Here's a list of the events you can add webhooks for:
|
|
121
121
|
receiver_decline_before_accept
|
122
122
|
sender_cancelled_before_funded
|
123
123
|
payment_generated
|
124
|
+
payment_completed
|
124
125
|
funding_pending
|
125
126
|
sender_cancelled_after_funded
|
126
127
|
refund_in_progress
|
data/lib/shieldpay.rb
CHANGED
@@ -3,15 +3,31 @@ module ShieldPay
|
|
3
3
|
attr_accessor :country_code
|
4
4
|
attr_accessor :debug
|
5
5
|
attr_accessor :default_currency
|
6
|
-
attr_accessor :endpoint_url
|
7
6
|
attr_accessor :org_key
|
7
|
+
attr_accessor :uat
|
8
8
|
|
9
9
|
def initialize
|
10
10
|
@org_key = nil
|
11
11
|
@country_code = nil
|
12
12
|
@debug = nil
|
13
13
|
@default_currency = nil
|
14
|
-
@
|
14
|
+
@uat = false
|
15
|
+
end
|
16
|
+
|
17
|
+
def api_endpoint_url
|
18
|
+
if @uat
|
19
|
+
"https://apiuat.shieldpay.com"
|
20
|
+
else
|
21
|
+
"https://api.shieldpay.com"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def endpoint_url
|
26
|
+
if @uat
|
27
|
+
"https://uat.shieldpay.com"
|
28
|
+
else
|
29
|
+
"https://www.shieldpay.com"
|
30
|
+
end
|
15
31
|
end
|
16
32
|
end
|
17
33
|
end
|
data/lib/shieldpay/customer.rb
CHANGED
@@ -2,7 +2,8 @@ module ShieldPay
|
|
2
2
|
class Customer
|
3
3
|
extend Helpers
|
4
4
|
|
5
|
-
attr_accessor :customer_key, :kyc_verified
|
5
|
+
attr_accessor :customer_key, :kyc_verified, :display_name, :email,
|
6
|
+
:mobile_no
|
6
7
|
|
7
8
|
# Contact Params
|
8
9
|
# Parameter Optional? Description
|
@@ -18,6 +19,9 @@ module ShieldPay
|
|
18
19
|
new.tap do |c|
|
19
20
|
c.customer_key = customer_key
|
20
21
|
c.kyc_verified = kyc_verified
|
22
|
+
c.display_name = params["display_name"]
|
23
|
+
c.email = params["email"]
|
24
|
+
c.mobile_no = params["mobile_no"]
|
21
25
|
end
|
22
26
|
end
|
23
27
|
|
@@ -34,7 +38,7 @@ module ShieldPay
|
|
34
38
|
# street
|
35
39
|
# state
|
36
40
|
# town
|
37
|
-
#
|
41
|
+
# postcode
|
38
42
|
# country
|
39
43
|
# customer_key
|
40
44
|
def self.kyc_verify(params={})
|
@@ -42,8 +46,8 @@ module ShieldPay
|
|
42
46
|
if params["customer_key"].strip.empty?
|
43
47
|
raise ShieldPay::Errors::RequiredField.new("customer_key field is required to verify this customer. You can create a customer_key field using the Customer.create method")
|
44
48
|
end
|
45
|
-
params["
|
46
|
-
params["
|
49
|
+
params["gender"] = params.delete("gender").to_s.upcase
|
50
|
+
params["date_of_birth"] = Date.parse(params["date_of_birth"].to_s).to_s
|
47
51
|
response = Request.new.post("/Customer/KYCVerification", params)
|
48
52
|
kyc_verified = response["Data"].dig("AddressVerified")
|
49
53
|
new.tap do |c|
|
data/lib/shieldpay/errors.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
module ShieldPay
|
2
2
|
module Errors
|
3
3
|
|
4
|
+
class OtherShieldPayError < StandardError; end
|
5
|
+
|
4
6
|
# standard errors
|
5
7
|
class InvalidOrganizationKey < StandardError; end
|
6
8
|
class OrganizationKeyDoesntExist < StandardError; end
|
@@ -14,20 +16,22 @@ module ShieldPay
|
|
14
16
|
class AddressNotVerified < StandardError; end
|
15
17
|
class CustomerEmailExists < StandardError; end
|
16
18
|
class CustomerDoesntExist < StandardError; end
|
19
|
+
class CustomerMobileExists < StandardError; end
|
17
20
|
|
18
21
|
ERROR_MATCHING = {
|
19
22
|
"Invalid Organization key." => InvalidOrganizationKey,
|
20
23
|
"OrganizationKey is not valid." => InvalidOrganizationKey,
|
21
24
|
"OrganizationKey is not exists." => OrganizationKeyDoesntExist,
|
22
25
|
|
23
|
-
"Company identifier already
|
24
|
-
"Please contact your system administrator" => CompanyAlreadyExists,
|
26
|
+
"Company identifier already exists." => CompanyAlreadyExists,
|
25
27
|
"Company identifier could not be validated" => InvalidCompanyIdentifier,
|
26
28
|
|
27
29
|
"Email already exists." => CustomerEmailExists,
|
28
30
|
"Customer does not exist" => CustomerDoesntExist,
|
29
31
|
"Address not verified." => AddressNotVerified,
|
30
32
|
"Address not varified, Exception in Request" => AddressNotVerified,
|
33
|
+
|
34
|
+
"This mobile number is already registered." => CustomerMobileExists
|
31
35
|
}
|
32
36
|
|
33
37
|
def check_for_error(response_body)
|
@@ -42,7 +46,7 @@ module ShieldPay
|
|
42
46
|
end
|
43
47
|
|
44
48
|
def raise_error(user_message)
|
45
|
-
error_klass = ERROR_MATCHING[user_message] ||
|
49
|
+
error_klass = ERROR_MATCHING[user_message] || OtherShieldPayError
|
46
50
|
|
47
51
|
raise error_klass.new(user_message)
|
48
52
|
end
|
@@ -6,9 +6,11 @@ module ShieldPay
|
|
6
6
|
|
7
7
|
def self.create_with_email(params={})
|
8
8
|
stringify_keys!(params)
|
9
|
-
params["batch_reference"] = 0
|
9
|
+
params["batch_reference"] = "0"
|
10
10
|
params["currency_code"] ||= ShieldPay.configuration.default_currency
|
11
11
|
params["target_currency_code"] ||= ShieldPay.configuration.default_currency
|
12
|
+
params["amount"] = params["amount"].to_s # must be a string for some reason
|
13
|
+
params["fee_receiver_amount"] = params["fee_receiver_amount"].to_s # must be a string for some reason
|
12
14
|
|
13
15
|
response = Request.new.post("/Transaction/PaymentRequestByEmailId",
|
14
16
|
params)
|
data/lib/shieldpay/request.rb
CHANGED
@@ -11,7 +11,7 @@ module ShieldPay
|
|
11
11
|
UPPERCASE_KEYS = ["iban"]
|
12
12
|
|
13
13
|
def post(path, params)
|
14
|
-
url = ShieldPay.configuration.
|
14
|
+
url = ShieldPay.configuration.api_endpoint_url + path
|
15
15
|
params = add_auth_key(params)
|
16
16
|
attrs = {
|
17
17
|
body: processed_params(params),
|
@@ -67,12 +67,7 @@ module ShieldPay
|
|
67
67
|
end
|
68
68
|
|
69
69
|
def processed_params(params)
|
70
|
-
|
71
|
-
# set the values to strings
|
72
|
-
params.inject({}) do |result, (key, value)|
|
73
|
-
result[key] = value.to_s
|
74
|
-
result
|
75
|
-
end.to_json
|
70
|
+
processed_keys(params).to_json
|
76
71
|
end
|
77
72
|
|
78
73
|
def underscore_to_camel_case(string)
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module ShieldPay
|
2
|
+
class Transaction
|
3
|
+
extend Helpers
|
4
|
+
|
5
|
+
attr_accessor :status_id
|
6
|
+
|
7
|
+
|
8
|
+
# Webhook Params
|
9
|
+
# Parameter Optional? Description
|
10
|
+
# customer_id no The customer id of either the sender or the
|
11
|
+
# receiver of this transaction
|
12
|
+
# transaction_id no The transaction id to look up
|
13
|
+
def self.get_status(input_params={})
|
14
|
+
stringify_keys!(input_params)
|
15
|
+
response = Request.new.post("/Transaction/GetPaymentStatus", input_params)
|
16
|
+
response.dig("Data", "StatusId")
|
17
|
+
end
|
18
|
+
|
19
|
+
# Webhook Params
|
20
|
+
# Parameter Optional? Description
|
21
|
+
# customer_id no The customer id of either the sender or the
|
22
|
+
# receiver of this transaction
|
23
|
+
# transaction_id no The transaction id to change status
|
24
|
+
# status_id no The status to change to
|
25
|
+
def self.change_status(input_params)
|
26
|
+
stringify_keys!(input_params)
|
27
|
+
input_params["transaction_status_id"] = input_params.delete("status_id")
|
28
|
+
response = Request.new.post("/Transaction/ChangePaymentStatus",
|
29
|
+
input_params)
|
30
|
+
response.dig("coreRes", "status") == 1
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/lib/shieldpay/version.rb
CHANGED
data/lib/shieldpay/webhook.rb
CHANGED
@@ -5,24 +5,26 @@ module ShieldPay
|
|
5
5
|
attr_accessor :events, :id, :url
|
6
6
|
|
7
7
|
EVENT_CODES = {
|
8
|
-
initiated:
|
9
|
-
receiver_complete:
|
10
|
-
receiver_decline_before_accept:
|
11
|
-
payment_generated:
|
12
|
-
sender_cancelled_after_funded:
|
13
|
-
customer_status:
|
8
|
+
initiated: '1', add_fund: '2', accepted: '3', sender_complete: '4',
|
9
|
+
receiver_complete: '5', funds_available: '6',
|
10
|
+
receiver_decline_before_accept: '7', sender_cancelled_before_funded: '8',
|
11
|
+
payment_generated: '9', payment_completed: '10', funding_pending: '11',
|
12
|
+
sender_cancelled_after_funded: '12', refund_in_progress: '13',
|
13
|
+
customer_status: '14'
|
14
14
|
}
|
15
15
|
|
16
16
|
# Webhook Params
|
17
17
|
# Parameter Optional? Description
|
18
18
|
# url no The url that shieldpay will call for webhooks
|
19
19
|
# events no The events that this webhook will monitor
|
20
|
+
# (defaults to all events)
|
20
21
|
# Options are:
|
21
22
|
# :initated, :add_fund, :accepted, :sender_complete,
|
22
23
|
# :receiver_complete, :funds_available,
|
23
24
|
# :receiver_decline_before_accept,
|
24
25
|
# :sender_cancelled_before_funded,
|
25
|
-
# :payment_generated, :
|
26
|
+
# :payment_generated, :payment_completed,
|
27
|
+
# :funding_pending,
|
26
28
|
# :sender_cancelled_after_funded,
|
27
29
|
# :refund_in_progress, :customer_status
|
28
30
|
def self.add(input_params={})
|
@@ -31,20 +33,25 @@ module ShieldPay
|
|
31
33
|
if url.nil? || url.size == 0
|
32
34
|
raise Errors::RequiredField.new("url is a required field")
|
33
35
|
end
|
34
|
-
events = input_params["events"]
|
35
|
-
if events.nil? || events.size == 0
|
36
|
-
raise Errors::RequiredField.new("events is a required field")
|
37
|
-
end
|
38
36
|
params = { "Url" => url }
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
37
|
+
events = input_params["events"]
|
38
|
+
event_codes = if events.nil? || events.size == 0
|
39
|
+
EVENT_CODES.values
|
40
|
+
else
|
41
|
+
events.collect do |event|
|
42
|
+
event_code = EVENT_CODES[event.to_sym]
|
43
|
+
if event_code.nil?
|
44
|
+
raise Errors::RequiredField.new("#{event} is not a valid event")
|
45
|
+
end
|
46
|
+
event_code
|
43
47
|
end
|
44
|
-
{
|
45
|
-
"EventId" => event_code
|
46
|
-
}
|
47
48
|
end
|
49
|
+
|
50
|
+
|
51
|
+
params[:webhook_event_binding] = event_codes.collect do |event_code|
|
52
|
+
{ "EventId" => event_code }
|
53
|
+
end
|
54
|
+
|
48
55
|
response = Request.new.post("/Webhook/Add", params)
|
49
56
|
response.dig("coreRes", "userMessage") == "Request successful"
|
50
57
|
end
|
@@ -68,6 +75,10 @@ module ShieldPay
|
|
68
75
|
response["Data"] == "Success"
|
69
76
|
end
|
70
77
|
|
78
|
+
def self.event_name_from_id(event_id)
|
79
|
+
EVENT_CODES.key(event_id.to_s)
|
80
|
+
end
|
81
|
+
|
71
82
|
def initialize(id, url, events)
|
72
83
|
@id = id
|
73
84
|
@url = url
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shieldpay
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris O'Sullivan
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-11-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -119,6 +119,7 @@ files:
|
|
119
119
|
- lib/shieldpay/helpers.rb
|
120
120
|
- lib/shieldpay/payment_request.rb
|
121
121
|
- lib/shieldpay/request.rb
|
122
|
+
- lib/shieldpay/transaction.rb
|
122
123
|
- lib/shieldpay/version.rb
|
123
124
|
- lib/shieldpay/webhook.rb
|
124
125
|
- shieldpay.gemspec
|