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.
@@ -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
@@ -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
@@ -0,0 +1,5 @@
1
+ class Validator
2
+ def initialize(request)
3
+ @request = request
4
+ end
5
+ end
@@ -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: []