RedPay 1.0.7
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|