trustev 0.3.2 → 0.4.0.pre.alpha
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +3 -329
- data/Rakefile +1 -2
- data/lib/trustev.rb +20 -68
- data/lib/trustev/{authenticate.rb → 1.2/authenticate.rb} +0 -0
- data/lib/trustev/{digital_signature.rb → 1.2/digital_signature.rb} +0 -0
- data/lib/trustev/{profile.rb → 1.2/profile.rb} +1 -1
- data/lib/trustev/{social.rb → 1.2/social.rb} +0 -0
- data/lib/trustev/{transaction.rb → 1.2/transaction.rb} +0 -0
- data/lib/trustev/1.2/trustev.rb +66 -0
- data/lib/trustev/2.0/address.rb +41 -0
- data/lib/trustev/2.0/authenticate.rb +40 -0
- data/lib/trustev/2.0/case.rb +45 -0
- data/lib/trustev/2.0/case_attribute.rb +24 -0
- data/lib/trustev/2.0/customer.rb +32 -0
- data/lib/trustev/2.0/customer_address.rb +5 -0
- data/lib/trustev/2.0/decision.rb +17 -0
- data/lib/trustev/2.0/email.rb +35 -0
- data/lib/trustev/2.0/item.rb +34 -0
- data/lib/trustev/2.0/payment.rb +33 -0
- data/lib/trustev/2.0/social.rb +38 -0
- data/lib/trustev/2.0/status.rb +34 -0
- data/lib/trustev/2.0/timestamp.rb +17 -0
- data/lib/trustev/2.0/transaction.rb +30 -0
- data/lib/trustev/2.0/transaction_address.rb +5 -0
- data/lib/trustev/2.0/trustev.rb +51 -0
- data/lib/trustev/error.rb +5 -6
- data/lib/trustev/version.rb +1 -1
- data/test/{authenticate_test.rb → 1.2/authenticate_test.rb} +0 -0
- data/test/{digital_signature_test.rb → 1.2/digital_signature_test.rb} +0 -0
- data/test/{error_test.rb → 1.2/error_test.rb} +3 -3
- data/test/{profile_test.rb → 1.2/profile_test.rb} +0 -0
- data/test/{social_test.rb → 1.2/social_test.rb} +0 -0
- data/test/{test_helper.rb → 1.2/test_helper.rb} +3 -2
- data/test/{transaction_test.rb → 1.2/transaction_test.rb} +0 -0
- data/test/2.0/authenticate_test.rb +13 -0
- data/test/2.0/case_test.rb +31 -0
- data/test/2.0/customer_address_test.rb +35 -0
- data/test/2.0/customer_test.rb +31 -0
- data/test/2.0/decision_test.rb +13 -0
- data/test/2.0/email_test.rb +33 -0
- data/test/2.0/error_test.rb +18 -0
- data/test/2.0/item_test.rb +33 -0
- data/test/2.0/payment_test.rb +33 -0
- data/test/2.0/social_test.rb +33 -0
- data/test/2.0/status_test.rb +27 -0
- data/test/2.0/test_helper.rb +165 -0
- data/test/2.0/transaction_address_Test.rb +35 -0
- data/test/2.0/transaction_test.rb +31 -0
- data/trustev.gemspec +3 -0
- metadata +111 -24
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'trustev/error'
|
2
|
+
|
3
|
+
module Trustev
|
4
|
+
|
5
|
+
@@api_base = 'https://api.trustev.com/v'
|
6
|
+
|
7
|
+
STATUS_TYPES = {
|
8
|
+
init: 0,
|
9
|
+
placed: 1,
|
10
|
+
refunded: 2,
|
11
|
+
rejected: 3,
|
12
|
+
completed: 5,
|
13
|
+
chargeback: 8
|
14
|
+
}
|
15
|
+
|
16
|
+
REASON_TYPES = {
|
17
|
+
system: 0,
|
18
|
+
fraud: 1,
|
19
|
+
complaint: 2,
|
20
|
+
remorse: 3,
|
21
|
+
other: 4
|
22
|
+
}
|
23
|
+
|
24
|
+
SCORE_SOURCES = {
|
25
|
+
address: 0,
|
26
|
+
behaviour: 1,
|
27
|
+
device: 2,
|
28
|
+
email: 3,
|
29
|
+
facebook: 4,
|
30
|
+
IP: 5,
|
31
|
+
transaction: 6,
|
32
|
+
trustev: 7,
|
33
|
+
velocity: 8
|
34
|
+
}
|
35
|
+
|
36
|
+
SCORE_PARAMETERS = {
|
37
|
+
overall: 0,
|
38
|
+
billing: 1,
|
39
|
+
delivery: 2,
|
40
|
+
input: 3,
|
41
|
+
domain: 4,
|
42
|
+
address: 5,
|
43
|
+
IP: 6,
|
44
|
+
proxy: 7,
|
45
|
+
VPN: 8,
|
46
|
+
value: 9,
|
47
|
+
velocity: 10,
|
48
|
+
legitimacy: 11,
|
49
|
+
pattern: 12,
|
50
|
+
hustle: 13
|
51
|
+
}
|
52
|
+
|
53
|
+
def self.raise_error(response)
|
54
|
+
raise Error.new('Bad API response', response.code, response.body.message) if response.code != 200
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.invalid_token?
|
58
|
+
now = Time.now.to_i
|
59
|
+
timestamp = @@token_expire
|
60
|
+
@@token.nil? || timestamp-600 <= now
|
61
|
+
end
|
62
|
+
|
63
|
+
def self.send_request(path, body, method, expect_json=false, requires_token=true)
|
64
|
+
Trustev.do_send_request(path, { request: body }, method, expect_json, requires_token)
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Trustev
|
2
|
+
class Address < CaseAttribute
|
3
|
+
def create
|
4
|
+
super(Trustev.send_request url, build, 'POST')
|
5
|
+
end
|
6
|
+
|
7
|
+
def retrieve
|
8
|
+
raise Error.new('ID is required') if @opts[:id].nil?
|
9
|
+
Trustev.send_request url(true), {}, 'GET'
|
10
|
+
end
|
11
|
+
|
12
|
+
def retrieve_all
|
13
|
+
Trustev.send_request url, {}, 'GET'
|
14
|
+
end
|
15
|
+
|
16
|
+
def update
|
17
|
+
raise Error.new('ID is required') if @opts[:id].nil?
|
18
|
+
Trustev.send_request url(true), build, 'PUT'
|
19
|
+
end
|
20
|
+
|
21
|
+
def build
|
22
|
+
address = {
|
23
|
+
FirstName: @opts[:first_name],
|
24
|
+
LastName: @opts[:last_name],
|
25
|
+
Address1: @opts[:address1],
|
26
|
+
Address2: @opts[:address2],
|
27
|
+
Address3: @opts[:address3],
|
28
|
+
City: @opts[:city],
|
29
|
+
State: @opts[:state],
|
30
|
+
PostalCode: @opts[:postal_code],
|
31
|
+
Type: @opts[:type],
|
32
|
+
CountryCode: @opts[:country_code],
|
33
|
+
Timestamp: @opts[:timestamp],
|
34
|
+
IsDefault: @opts[:is_default]
|
35
|
+
}
|
36
|
+
address[:id] = @opts[:id] unless @opts[:id].nil?
|
37
|
+
|
38
|
+
address
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'openssl'
|
2
|
+
require 'time'
|
3
|
+
|
4
|
+
module Trustev
|
5
|
+
class Authenticate
|
6
|
+
|
7
|
+
SERVICE_URL = 'Token'
|
8
|
+
|
9
|
+
def self.retrieve_token
|
10
|
+
|
11
|
+
raise Error.new('No Username provided.') unless Trustev.username
|
12
|
+
raise Error.new('No Password provided.') unless Trustev.password
|
13
|
+
raise Error.new('No Shared Secret provided.') unless Trustev.shared_secret
|
14
|
+
|
15
|
+
time = Trustev::Timestamp.new
|
16
|
+
|
17
|
+
body = {
|
18
|
+
UserName: Trustev.username,
|
19
|
+
Timestamp: time.to_s,
|
20
|
+
PasswordHash: sha256hash(Trustev.password, time),
|
21
|
+
UserNameHash: sha256hash(Trustev.username, time),
|
22
|
+
}
|
23
|
+
|
24
|
+
response = Trustev.send_request SERVICE_URL, body, 'POST', true, false
|
25
|
+
Trustev.token = response[:APIToken]
|
26
|
+
Trustev.token_expire = Trustev::Timestamp.new(Time.parse response[:ExpireAt])
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def self.sha256hash(to_hash, time)
|
32
|
+
sha256 = OpenSSL::Digest::SHA256.new
|
33
|
+
sha256 << "#{time.to_s}.#{to_hash}"
|
34
|
+
hash_part_1 = sha256.hexdigest
|
35
|
+
sha256 = OpenSSL::Digest::SHA256.new
|
36
|
+
sha256 << "#{hash_part_1}.#{Trustev.shared_secret}"
|
37
|
+
sha256.hexdigest
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'digest'
|
2
|
+
require 'open-uri'
|
3
|
+
|
4
|
+
module Trustev
|
5
|
+
class Case
|
6
|
+
|
7
|
+
SERVICE_URL = 'Case'
|
8
|
+
|
9
|
+
def initialize(case_id=nil, opts={})
|
10
|
+
@case_id = case_id
|
11
|
+
@opts = opts
|
12
|
+
end
|
13
|
+
|
14
|
+
def create
|
15
|
+
response = Trustev.send_request SERVICE_URL, build, 'POST'
|
16
|
+
@case_id = response[:Id]
|
17
|
+
response
|
18
|
+
end
|
19
|
+
|
20
|
+
def update
|
21
|
+
raise Error.new('Case ID is required.') if @case_id.nil?
|
22
|
+
Trustev.send_request "#{SERVICE_URL}/#{URI::encode @case_id}", build, 'PUT'
|
23
|
+
end
|
24
|
+
|
25
|
+
def retrieve
|
26
|
+
raise Error.new('Case ID is required.') if @case_id.nil?
|
27
|
+
Trustev.send_request "#{SERVICE_URL}/#{URI::encode @case_id}", [], 'GET'
|
28
|
+
end
|
29
|
+
|
30
|
+
def build
|
31
|
+
keys = { session_id: :SessionID,
|
32
|
+
case_number: :CaseNumber,
|
33
|
+
transaction: :Transaction,
|
34
|
+
customer: :Customer,
|
35
|
+
statuses: :Statuses,
|
36
|
+
payments: :Payments,
|
37
|
+
timestamp: :Timestamp }
|
38
|
+
trustev_case = {}
|
39
|
+
@opts.each do |key, value|
|
40
|
+
trustev_case[keys[key]] = value
|
41
|
+
end
|
42
|
+
trustev_case
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'open-uri'
|
2
|
+
|
3
|
+
module Trustev
|
4
|
+
class CaseAttribute
|
5
|
+
def initialize(opts)
|
6
|
+
@opts = opts
|
7
|
+
end
|
8
|
+
|
9
|
+
def create(response)
|
10
|
+
@opts[:id] = response[:Id]
|
11
|
+
response
|
12
|
+
end
|
13
|
+
|
14
|
+
def url(with_identifier=false)
|
15
|
+
raise Error.new('Case ID is required') if @opts[:case_id].nil?
|
16
|
+
url = "case/#{URI::encode @opts[:case_id]}/#{self.class::SERVICE_URL}"
|
17
|
+
if with_identifier
|
18
|
+
raise Error.new('ID is required') if @opts[:id].nil?
|
19
|
+
url = "#{url}/#{@opts[:id]}"
|
20
|
+
end
|
21
|
+
url
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Trustev
|
2
|
+
class Customer < CaseAttribute
|
3
|
+
|
4
|
+
SERVICE_URL = 'customer'
|
5
|
+
|
6
|
+
def create
|
7
|
+
Trustev.send_request url, build, 'POST'
|
8
|
+
end
|
9
|
+
|
10
|
+
def retrieve
|
11
|
+
Trustev.send_request url, {}, 'GET'
|
12
|
+
end
|
13
|
+
|
14
|
+
def update
|
15
|
+
Trustev.send_request url, build, 'PUT'
|
16
|
+
end
|
17
|
+
|
18
|
+
def build
|
19
|
+
customer = {
|
20
|
+
FirstName: @opts[:first_name],
|
21
|
+
LastName: @opts[:last_name],
|
22
|
+
Emails: @opts[:emails],
|
23
|
+
PhoneNumber: @opts[:phone_number],
|
24
|
+
DateOfBirth: @opts[:dob],
|
25
|
+
Addresses: @opts[:addresses],
|
26
|
+
SocialAccounts: @opts[:social_accounts]
|
27
|
+
}
|
28
|
+
customer[:id] = @opts[:id] unless @opts[:id].nil?
|
29
|
+
customer
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'open-uri'
|
2
|
+
|
3
|
+
module Trustev
|
4
|
+
class Decision
|
5
|
+
|
6
|
+
SERVICE_URL = 'Decision'
|
7
|
+
|
8
|
+
def initialize(case_id)
|
9
|
+
raise Error.new('Case ID is required') if case_id.nil?
|
10
|
+
@case_id = case_id
|
11
|
+
end
|
12
|
+
|
13
|
+
def retrieve
|
14
|
+
Trustev.send_request "#{SERVICE_URL}/#{URI::encode @case_id}", [], 'GET'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Trustev
|
2
|
+
class Email < CaseAttribute
|
3
|
+
|
4
|
+
SERVICE_URL = 'customer/email'
|
5
|
+
|
6
|
+
def create
|
7
|
+
raise Error.new('Email is required') if @opts[:email].nil?
|
8
|
+
Trustev.send_request url, build, 'POST'
|
9
|
+
end
|
10
|
+
|
11
|
+
def retrieve
|
12
|
+
raise Error.new('ID is required') if @opts[:id].nil?
|
13
|
+
Trustev.send_request url(true), {}, 'GET'
|
14
|
+
end
|
15
|
+
|
16
|
+
def retrieve_all
|
17
|
+
Trustev.send_request url, {}, 'GET'
|
18
|
+
end
|
19
|
+
|
20
|
+
def update
|
21
|
+
raise Error.new('Email is required') if @opts[:email].nil?
|
22
|
+
raise Error.new('ID is required') if @opts[:id].nil?
|
23
|
+
Trustev.send_request url(true), build, 'PUT'
|
24
|
+
end
|
25
|
+
|
26
|
+
def build
|
27
|
+
email = {
|
28
|
+
EmailAddress: @opts[:email],
|
29
|
+
IsDefault: @opts[:is_default]
|
30
|
+
}
|
31
|
+
email[:id] = @opts[:id] unless @opts[:id].nil?
|
32
|
+
email
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Trustev
|
2
|
+
class Item < CaseAttribute
|
3
|
+
|
4
|
+
SERVICE_URL = 'transaction/item'
|
5
|
+
|
6
|
+
def create
|
7
|
+
Trustev.send_request url, build, 'POST'
|
8
|
+
end
|
9
|
+
|
10
|
+
def retrieve
|
11
|
+
raise Error.new('ID is required') if @opts[:id].nil?
|
12
|
+
Trustev.send_request url(true), {}, 'GET'
|
13
|
+
end
|
14
|
+
|
15
|
+
def retrieve_all
|
16
|
+
Trustev.send_request url, {}, 'GET'
|
17
|
+
end
|
18
|
+
|
19
|
+
def update
|
20
|
+
raise Error.new('ID is required') if @opts[:id].nil?
|
21
|
+
Trustev.send_request url(true), build, 'PUT'
|
22
|
+
end
|
23
|
+
|
24
|
+
def build
|
25
|
+
item = {
|
26
|
+
Name: @opts[:name],
|
27
|
+
Quantity: @opts[:quantity],
|
28
|
+
ItemValue: @opts[:item_value]
|
29
|
+
}
|
30
|
+
item[:id] = @opts[:id] unless @opts[:id].nil?
|
31
|
+
item
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Trustev
|
2
|
+
class Payment < CaseAttribute
|
3
|
+
|
4
|
+
SERVICE_URL = 'payment'
|
5
|
+
|
6
|
+
def create
|
7
|
+
Trustev.send_request url, build, 'POST'
|
8
|
+
end
|
9
|
+
|
10
|
+
def retrieve
|
11
|
+
raise Error.new('ID is required') if @opts[:id].nil?
|
12
|
+
Trustev.send_request url(true), {}, 'GET'
|
13
|
+
end
|
14
|
+
|
15
|
+
def retrieve_all
|
16
|
+
Trustev.send_request url, {}, 'GET'
|
17
|
+
end
|
18
|
+
|
19
|
+
def update
|
20
|
+
raise Error.new('ID is required') if @opts[:id].nil?
|
21
|
+
Trustev.send_request url(true), build, 'PUT'
|
22
|
+
end
|
23
|
+
|
24
|
+
def build
|
25
|
+
payment = {
|
26
|
+
PaymentType: @opts[:payment_type],
|
27
|
+
BINNumber: @opts[:bin_number]
|
28
|
+
}
|
29
|
+
payment[:id] = @opts[:id] unless @opts[:id].nil?
|
30
|
+
payment
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Trustev
|
2
|
+
class Social < CaseAttribute
|
3
|
+
|
4
|
+
SERVICE_URL = 'customer/socialaccount'
|
5
|
+
|
6
|
+
def create
|
7
|
+
Trustev.send_request url, build, 'POST'
|
8
|
+
end
|
9
|
+
|
10
|
+
def retrieve
|
11
|
+
raise Error.new('ID is required') if @opts[:id].nil?
|
12
|
+
Trustev.send_request url(true), {}, 'GET'
|
13
|
+
end
|
14
|
+
|
15
|
+
def retrieve_all
|
16
|
+
Trustev.send_request url, {}, 'GET'
|
17
|
+
end
|
18
|
+
|
19
|
+
def update
|
20
|
+
raise Error.new('ID is required') if @opts[:id].nil?
|
21
|
+
Trustev.send_request url(true), build, 'PUT'
|
22
|
+
end
|
23
|
+
|
24
|
+
def build
|
25
|
+
social = {
|
26
|
+
SocialId: @opts[:social_id],
|
27
|
+
ShortTermAccessToken: @opts[:short_term_access_token],
|
28
|
+
LongTermAccessToken: @opts[:long_term_access_token],
|
29
|
+
ShortTermAccessTokenExpiry: @opts[:short_term_access_token_expiry],
|
30
|
+
LongTermAccessTokenExpiry: @opts[:long_term_access_token_expiry],
|
31
|
+
Secret: @opts[:secret],
|
32
|
+
Timestamp: @opts[:timestamp]
|
33
|
+
}
|
34
|
+
social[:id] = @opts[:id] unless @opts[:id].nil?
|
35
|
+
social
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Trustev
|
2
|
+
class Status < CaseAttribute
|
3
|
+
|
4
|
+
SERVICE_URL = 'status'
|
5
|
+
|
6
|
+
def create
|
7
|
+
Trustev.send_request url, build, 'POST'
|
8
|
+
end
|
9
|
+
|
10
|
+
def retrieve
|
11
|
+
raise Error.new('ID is required') if @opts[:id].nil?
|
12
|
+
Trustev.send_request url(true), {}, 'GET'
|
13
|
+
end
|
14
|
+
|
15
|
+
def retrieve_all
|
16
|
+
Trustev.send_request url, {}, 'GET'
|
17
|
+
end
|
18
|
+
|
19
|
+
def update
|
20
|
+
raise Error.new('ID is required') if @opts[:id].nil?
|
21
|
+
Trustev.send_request url(true), build, 'PUT'
|
22
|
+
end
|
23
|
+
|
24
|
+
def build
|
25
|
+
status = {
|
26
|
+
Status: @opts[:status],
|
27
|
+
Comment: @opts[:comment],
|
28
|
+
Timestamp: @opts[:timestamp]
|
29
|
+
}
|
30
|
+
status[:id] = @opts[:id] unless @opts[:id].nil?
|
31
|
+
status
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|