RedPay 1.0.7
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 +7 -0
- data/lib/redpay.rb +52 -0
- data/lib/redpay/charge_ach.rb +36 -0
- data/lib/redpay/charge_card.rb +36 -0
- data/lib/redpay/charge_token.rb +33 -0
- data/lib/redpay/refund.rb +31 -0
- data/lib/redpay/session.rb +101 -0
- data/lib/redpay/tokenize_ach.rb +36 -0
- data/lib/redpay/tokenize_card.rb +36 -0
- data/lib/redpay/validator.rb +5 -0
- data/lib/redpay/void.rb +31 -0
- metadata +52 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 91c106d3ff183522cd47e192cc06b0bb5ea4a32353753a56775aefe94d2fcffb
|
4
|
+
data.tar.gz: b97d35aa7c91d06741c4cf60c0cb5466ce19eacb4a213bf3357aae2b394f697a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: e7f239c0c9c2a7050546ce6d2ff0cab073a7bad476ac8b1febc2296aa288aca0192788288e3b6eaab7c99f4993b236a20269c9562f9597c67064ff63db887f09
|
7
|
+
data.tar.gz: 3ae1c4496d5b2121435f7e0263d65cdfbb3e50f81d41ddb571efa35e12351e6ccbb572ccec04ec5e3c94b666d48efdbc7f7852b1daf2ccea4c9459caeabd8aca
|
data/lib/redpay.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
require './lib/redpay/session'
|
2
|
+
require './lib/redpay/charge_card'
|
3
|
+
require './lib/redpay/charge_ach'
|
4
|
+
require './lib/redpay/charge_token'
|
5
|
+
require './lib/redpay/tokenize_card'
|
6
|
+
require './lib/redpay/tokenize_ach'
|
7
|
+
require './lib/redpay/refund'
|
8
|
+
require './lib/redpay/void'
|
9
|
+
|
10
|
+
class RedPay
|
11
|
+
def initialize(app, key, endpoint)
|
12
|
+
@app = app
|
13
|
+
@key = key
|
14
|
+
@endpoint = endpoint
|
15
|
+
end
|
16
|
+
|
17
|
+
def ChargeCard(request)
|
18
|
+
charge_card = ChargeCard.new(@app, @key, @endpoint)
|
19
|
+
return charge_card.Process(request)
|
20
|
+
end
|
21
|
+
|
22
|
+
def ChargeACH(request)
|
23
|
+
charge_ach = ChargeACH.new(@app, @key, @endpoint)
|
24
|
+
return charge_ach.Process(request)
|
25
|
+
end
|
26
|
+
|
27
|
+
def TokenizeCard(request)
|
28
|
+
tokenize_card = TokenizeCard.new(@app, @key, @endpoint)
|
29
|
+
return tokenize_card.Process(request);
|
30
|
+
end
|
31
|
+
|
32
|
+
def TokenizeACH(request)
|
33
|
+
tokenize_ach = TokenizeACH.new(@app, @key, @endpoint)
|
34
|
+
return tokenize_ach.Process(request);
|
35
|
+
end
|
36
|
+
|
37
|
+
def ChargeToken(request)
|
38
|
+
charge_token = ChargeToken.new(@app, @key, @endpoint)
|
39
|
+
return charge_token.Process(request)
|
40
|
+
end
|
41
|
+
|
42
|
+
def Refund(request)
|
43
|
+
refund = Refund.new(@app, @key, @endpoint)
|
44
|
+
return refund.Process(request);
|
45
|
+
end
|
46
|
+
|
47
|
+
def Void(request)
|
48
|
+
void = Void.new(@app, @key, @endpoint)
|
49
|
+
return void.Process(request);
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require './lib/redpay/session'
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
require 'ostruct'
|
5
|
+
|
6
|
+
class ChargeACH
|
7
|
+
|
8
|
+
def initialize(app, key, endpoint)
|
9
|
+
@app = app
|
10
|
+
@key = key
|
11
|
+
@endpoint = endpoint
|
12
|
+
end
|
13
|
+
|
14
|
+
def Process(request)
|
15
|
+
json_request = JSON.parse(request.to_json, object_class: OpenStruct)
|
16
|
+
# TODO Validate request here
|
17
|
+
|
18
|
+
# Create a session with the server
|
19
|
+
session = Session.new(@app, @key, @endpoint + "ach")
|
20
|
+
|
21
|
+
# Contruct charge ach packet
|
22
|
+
req =
|
23
|
+
{
|
24
|
+
"account" => json_request.account,
|
25
|
+
"routing" => json_request.routing,
|
26
|
+
"accountType" => json_request.accountType ||= "C",
|
27
|
+
"action" => "A",
|
28
|
+
"amount" => json_request.amount,
|
29
|
+
"cardHolderName" => json_request.accountHolder,
|
30
|
+
"currency" => json_request.currency ||= "USD"
|
31
|
+
}
|
32
|
+
|
33
|
+
return session.Send(req)
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require './lib/redpay/session'
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
require 'ostruct'
|
5
|
+
|
6
|
+
class ChargeCard
|
7
|
+
|
8
|
+
def initialize(app, key, endpoint)
|
9
|
+
@app = app
|
10
|
+
@key = key
|
11
|
+
@endpoint = endpoint
|
12
|
+
end
|
13
|
+
|
14
|
+
def Process(request)
|
15
|
+
json_request = JSON.parse(request.to_json, object_class: OpenStruct)
|
16
|
+
# TODO Validate request here
|
17
|
+
|
18
|
+
# Create a session with the server
|
19
|
+
session = Session.new(@app, @key, @endpoint + "ecard")
|
20
|
+
|
21
|
+
# Contruct charge card packet
|
22
|
+
req =
|
23
|
+
{
|
24
|
+
"account" => json_request.account,
|
25
|
+
"action" => "A",
|
26
|
+
"amount" => json_request.amount,
|
27
|
+
"expmmyyyy" => json_request.expmmyyyy,
|
28
|
+
"cvv" => json_request.cvv,
|
29
|
+
"cardHolderName" => json_request.accountHolder,
|
30
|
+
"avsZip" => json_request.zipCode,
|
31
|
+
}
|
32
|
+
|
33
|
+
return session.Send(req)
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require './lib/redpay/session'
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
require 'ostruct'
|
5
|
+
|
6
|
+
class ChargeToken
|
7
|
+
|
8
|
+
def initialize(app, key, endpoint)
|
9
|
+
@app = app
|
10
|
+
@key = key
|
11
|
+
@endpoint = endpoint
|
12
|
+
end
|
13
|
+
|
14
|
+
def Process(request)
|
15
|
+
json_request = JSON.parse(request.to_json, object_class: OpenStruct)
|
16
|
+
# TODO Validate request here
|
17
|
+
|
18
|
+
# Create a session with the server
|
19
|
+
session = Session.new(@app, @key, @endpoint + "ecard")
|
20
|
+
|
21
|
+
# Contruct charge token packet
|
22
|
+
req =
|
23
|
+
{
|
24
|
+
"token" => json_request.token,
|
25
|
+
"action" => "TA",
|
26
|
+
"amount" => json_request.amount,
|
27
|
+
"currency" => json_request.currency ||= "USD"
|
28
|
+
}
|
29
|
+
|
30
|
+
return session.Send(req)
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require './lib/redpay/session'
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
require 'ostruct'
|
5
|
+
|
6
|
+
class Refund
|
7
|
+
|
8
|
+
def initialize(app, key, endpoint)
|
9
|
+
@app = app
|
10
|
+
@key = key
|
11
|
+
@endpoint = endpoint
|
12
|
+
end
|
13
|
+
|
14
|
+
def Process(request)
|
15
|
+
json_request = JSON.parse(request.to_json, object_class: OpenStruct)
|
16
|
+
# TODO Validate request here
|
17
|
+
|
18
|
+
# Create a session with the server
|
19
|
+
session = Session.new(@app, @key, @endpoint + "ecard")
|
20
|
+
|
21
|
+
# Contruct refund packet
|
22
|
+
req =
|
23
|
+
{
|
24
|
+
"transactionId" => json_request.transactionId,
|
25
|
+
"action" => "R",
|
26
|
+
}
|
27
|
+
|
28
|
+
return session.Send(req)
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'uri'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
require 'openssl'
|
6
|
+
require 'digest'
|
7
|
+
require 'base64'
|
8
|
+
require 'securerandom'
|
9
|
+
|
10
|
+
class Session
|
11
|
+
def initialize(app, key, endpoint)
|
12
|
+
@app = app
|
13
|
+
@key = key
|
14
|
+
@endpoint = endpoint
|
15
|
+
|
16
|
+
# Generate and save Random key
|
17
|
+
@cipher = OpenSSL::Cipher::AES.new(128, :CBC)
|
18
|
+
@cipher.encrypt
|
19
|
+
|
20
|
+
@random = @cipher.random_key
|
21
|
+
@iv = @cipher.random_iv
|
22
|
+
|
23
|
+
# Have decipher ready to decrypt response
|
24
|
+
@decipher = OpenSSL::Cipher::AES.new(128, :CBC)
|
25
|
+
@decipher.decrypt
|
26
|
+
@decipher.key = @random
|
27
|
+
@decipher.iv = @iv
|
28
|
+
|
29
|
+
@public_key = OpenSSL::PKey::RSA.new(Base64.decode64(@key))
|
30
|
+
@encrypted_random = Base64.encode64(@public_key.public_encrypt(Base64.encode64(@random)))
|
31
|
+
#puts "encrypted_random ->" + @encrypted_random
|
32
|
+
|
33
|
+
# POST Request sessionId
|
34
|
+
begin
|
35
|
+
uri = URI(@endpoint)
|
36
|
+
header = {'Content-Type': 'text/json'}
|
37
|
+
data =
|
38
|
+
{
|
39
|
+
"rsaPublicKey" => @key,
|
40
|
+
"aesKey" => @encrypted_random
|
41
|
+
}
|
42
|
+
|
43
|
+
# Create the HTTP objects
|
44
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
45
|
+
http.use_ssl = true if uri.scheme == 'https'
|
46
|
+
req = Net::HTTP::Post.new(uri.request_uri, header)
|
47
|
+
req.body = data.to_json
|
48
|
+
|
49
|
+
# Send the request
|
50
|
+
res = http.request(req)
|
51
|
+
|
52
|
+
# Parse and send back sessionId
|
53
|
+
ses = JSON.parse(res.body)
|
54
|
+
@sessionId = ses["sessionId"]
|
55
|
+
# puts "sessionId ->" + @sessionId
|
56
|
+
rescue => e
|
57
|
+
@sessionId = "ERROR #{e}"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def Send(request)
|
62
|
+
plaintext_request = request.to_json;
|
63
|
+
#puts "plaintext_request -> " + plaintext_request
|
64
|
+
encrypted = @cipher.update(plaintext_request) + @cipher.final
|
65
|
+
#encrypted_request = URI::encode(Base64.encode64(encrypted))
|
66
|
+
encrypted_request = Base64.encode64(encrypted)
|
67
|
+
#puts "encrypted_request -> " + encrypted_request
|
68
|
+
|
69
|
+
data =
|
70
|
+
{
|
71
|
+
"sessionId" => @sessionId,
|
72
|
+
"app" => @app,
|
73
|
+
"iv" => Base64.encode64(@iv),
|
74
|
+
"aesData" => encrypted_request
|
75
|
+
}
|
76
|
+
|
77
|
+
#POST Request packet
|
78
|
+
begin
|
79
|
+
uri = URI(@endpoint)
|
80
|
+
header = {'Content-Type': 'text/json'}
|
81
|
+
|
82
|
+
# Create the HTTP objects
|
83
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
84
|
+
http.use_ssl = true if uri.scheme == 'https'
|
85
|
+
req = Net::HTTP::Post.new(uri.request_uri, header)
|
86
|
+
req.body = data.to_json
|
87
|
+
|
88
|
+
# Send the request
|
89
|
+
res = http.request(req)
|
90
|
+
|
91
|
+
# Get encrypted response
|
92
|
+
encrypted_response = JSON.parse(res.body)
|
93
|
+
|
94
|
+
# Decrypt response
|
95
|
+
plain_response = @decipher.update(Base64.decode64(encrypted_response["aesData"])) + @decipher.final
|
96
|
+
return JSON.parse(plain_response)
|
97
|
+
rescue => e
|
98
|
+
return "ERROR #{e}"
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require './lib/redpay/session'
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
require 'ostruct'
|
5
|
+
|
6
|
+
class TokenizeACH
|
7
|
+
|
8
|
+
def initialize(app, key, endpoint)
|
9
|
+
@app = app
|
10
|
+
@key = key
|
11
|
+
@endpoint = endpoint
|
12
|
+
end
|
13
|
+
|
14
|
+
def Process(request)
|
15
|
+
json_request = JSON.parse(request.to_json, object_class: OpenStruct)
|
16
|
+
# TODO Validate request here
|
17
|
+
|
18
|
+
# Create a session with the server
|
19
|
+
session = Session.new(@app, @key, @endpoint + "token")
|
20
|
+
|
21
|
+
# Contruct tokenize ach packet
|
22
|
+
req =
|
23
|
+
{
|
24
|
+
"account" => json_request.account,
|
25
|
+
"routing" => json_request.routing,
|
26
|
+
"accountType" => json_request.accountType ||= "C",
|
27
|
+
"action" => "T",
|
28
|
+
"cardHolderName" => json_request.accountHolder,
|
29
|
+
"currency" => json_request.currency ||= "USD",
|
30
|
+
"method" => "ACH"
|
31
|
+
}
|
32
|
+
|
33
|
+
return session.Send(req)
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require './lib/redpay/session'
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
require 'ostruct'
|
5
|
+
|
6
|
+
class TokenizeCard
|
7
|
+
|
8
|
+
def initialize(app, key, endpoint)
|
9
|
+
@app = app
|
10
|
+
@key = key
|
11
|
+
@endpoint = endpoint
|
12
|
+
end
|
13
|
+
|
14
|
+
def Process(request)
|
15
|
+
json_request = JSON.parse(request.to_json, object_class: OpenStruct)
|
16
|
+
# TODO Validate request here
|
17
|
+
|
18
|
+
# Create a session with the server
|
19
|
+
session = Session.new(@app, @key, @endpoint + "token")
|
20
|
+
|
21
|
+
# Contruct tokenize card packet
|
22
|
+
req =
|
23
|
+
{
|
24
|
+
"account" => json_request.account,
|
25
|
+
"action" => "T",
|
26
|
+
"expmmyyyy" => json_request.expmmyyyy,
|
27
|
+
"cvv" => json_request.cvv,
|
28
|
+
"cardHolderName" => json_request.accountHolder,
|
29
|
+
"avsZip" => json_request.zipCode,
|
30
|
+
"currency" => json_request.currency ||= "USD",
|
31
|
+
}
|
32
|
+
|
33
|
+
return session.Send(req)
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
data/lib/redpay/void.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
require './lib/redpay/session'
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
require 'ostruct'
|
5
|
+
|
6
|
+
class Void
|
7
|
+
|
8
|
+
def initialize(app, key, endpoint)
|
9
|
+
@app = app
|
10
|
+
@key = key
|
11
|
+
@endpoint = endpoint
|
12
|
+
end
|
13
|
+
|
14
|
+
def Process(request)
|
15
|
+
json_request = JSON.parse(request.to_json, object_class: OpenStruct)
|
16
|
+
# TODO Validate request here
|
17
|
+
|
18
|
+
# Create a session with the server
|
19
|
+
session = Session.new(@app, @key, @endpoint + "ecard")
|
20
|
+
|
21
|
+
# Contruct void packet
|
22
|
+
req =
|
23
|
+
{
|
24
|
+
"transactionId" => json_request.transactionId,
|
25
|
+
"action" => "V",
|
26
|
+
}
|
27
|
+
|
28
|
+
return session.Send(req)
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
metadata
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: RedPay
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.7
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Red Shepherd Inc
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-07-09 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Red Shepherd Payments Ruby Gem
|
14
|
+
email: support@redshepherd.com
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- lib/redpay.rb
|
20
|
+
- lib/redpay/charge_ach.rb
|
21
|
+
- lib/redpay/charge_card.rb
|
22
|
+
- lib/redpay/charge_token.rb
|
23
|
+
- lib/redpay/refund.rb
|
24
|
+
- lib/redpay/session.rb
|
25
|
+
- lib/redpay/tokenize_ach.rb
|
26
|
+
- lib/redpay/tokenize_card.rb
|
27
|
+
- lib/redpay/validator.rb
|
28
|
+
- lib/redpay/void.rb
|
29
|
+
homepage: https://www.redshepherd.com
|
30
|
+
licenses:
|
31
|
+
- MIT
|
32
|
+
metadata: {}
|
33
|
+
post_install_message:
|
34
|
+
rdoc_options: []
|
35
|
+
require_paths:
|
36
|
+
- lib
|
37
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
requirements: []
|
48
|
+
rubygems_version: 3.1.2
|
49
|
+
signing_key:
|
50
|
+
specification_version: 4
|
51
|
+
summary: Redpay Ruby Gem
|
52
|
+
test_files: []
|