RedPay 1.0.7

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