paywitheasebuzz-ruby 0.0.1 → 0.0.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ea85f51e9106e44d0a3a2d9a8088c35cf49a71b875e6d50f342121c3b8b98e7b
4
- data.tar.gz: b5095b288878e245acff0140c2daa29d071127538d90c925559d0ffe1d8acc9a
3
+ metadata.gz: 189de487f9871bdce5e698c81ba4286efec11eec05fd517b8b36268d3529ee93
4
+ data.tar.gz: f403b398ead8751dc978617a7a90b3a2a6f3b221c556d80c9a8f46c8e8542182
5
5
  SHA512:
6
- metadata.gz: 82522e1b330598ac097bd7132c609a29e025919ee405cd4484274d3d626bcd49fde4da6afb79f6a5bb5a8e6329435dc9899b297373c9c8b725b1c5f88a5ddc7d
7
- data.tar.gz: 8af171f8b03b1d2dbfb7a7caac7666a3fd288a89068537d4a9259a1d524e8b9a21bd836d89576d351c26513396d644ed1f97b1977cb16286701a6a333816d768
6
+ metadata.gz: 819408c1264f47db79d5e1ef748bb096b706deb53c155394627015b8396e3cc49f03edf8e9e5db7cebfd971a0caf6a33c8e0927f8174cd770b631235edcf2ee4
7
+ data.tar.gz: d181a009f42289a6421742a49cb4475b031d095f56dd143ed67ccd987170d7efdb65e3dad52ed139d4d6e45c6e9dfa23b585a9b57ec46677ceb7c4cc66e63e70
@@ -1,105 +1,19 @@
1
- class PayWithEasebuzz
2
- def initialize(key, salt, env="test")
3
- @key = key
4
- @salt = salt
5
- @env = env
6
- @api_end_point = generate_payment_api_end_point(@env)
7
- end
8
-
9
- def initiate_payment params
10
- params = params || {}
11
- params = JSON.parse(params.to_json)
12
- params = generate_final_params(params)
13
- params['key'] = @key
14
- validation_result = params_valid? params
15
- if validation_result['status']
16
- easepay_response = send_payment_request(stripify(params))
17
- easepay_response
18
- else
19
- validation_result
20
- end
21
- end
1
+ require 'active_support'
2
+ require 'active_support/core_ext'
3
+ require 'paywitheasebuzz-ruby/helper'
4
+ require 'paywitheasebuzz-ruby/request'
5
+ require 'paywitheasebuzz-ruby/payment'
22
6
 
23
- private
24
7
 
25
- def stripify params
26
- params.keys.each do |param_key|
27
- params[param_key] = params[param_key].instance_of?(String) ? params[param_key].strip : params[param_key]
28
- end
29
- params
8
+ module Easebuzz
9
+ class << self
10
+ attr_accessor :key, :salt, :env, :request
30
11
  end
31
12
 
32
- def params_valid? params
33
- result = { 'status' => true }
34
- if not params['key'].present? or not params['key'].instance_of?(String)
35
- result['status'] = false
36
- result['message'] = "Merchant Key is not valid. Must be string. Please refer documentation."
37
- elsif not params['txnid'].present? or not params['txnid'].instance_of?(String)
38
- result['status'] = false
39
- result['message'] = "Transaction ID is not valid. Must be string. Please refer documentation."
40
- elsif not params['amount'].present? or not params['amount'].instance_of?(Float)
41
- result['status'] = false
42
- result['message'] = "Amount is not valid. Must be float. Please refer documentation."
43
- elsif not params['productinfo'].present? or not params['productinfo'].instance_of?(String)
44
- result['status'] = false
45
- result['message'] = "Product Info is not valid. Must be string. Please refer documentation."
46
- elsif not params['firstname'].present? or not params['firstname'].instance_of?(String)
47
- result['status'] = false
48
- result['message'] = "First Name is not valid. Must be string. Please refer documentation."
49
- elsif not params['email'].present? or not params['email'].match? URI::MailTo::EMAIL_REGEXP
50
- result['status'] = false
51
- result['message'] = "Email is not valid. Must be a valid email. Please refer documentation."
52
- elsif not params['phone'].present? or not params['phone'].instance_of?(String)
53
- result['status'] = false
54
- result['message'] = "Phone number is not valid. Must be string. Please refer documentation."
55
- elsif not params['surl'].present? or not params['surl'].instance_of?(String)
56
- result['status'] = false
57
- result['message'] = "Success URL is not valid. Must be string. Please refer documentation."
58
- elsif not params['furl'].present? or not params['furl'].instance_of?(String)
59
- result['status'] = false
60
- result['message'] = "Failure URL is not valid. Must be string. Please refer documentation."
61
- end
62
- result
63
- end
64
-
65
- def send_payment_request params
66
- params["hash"] = generate_hash(params, @key, @salt)
67
- url = URI.parse(@api_end_point)
68
- req = Net::HTTP::Post.new(url.to_s)
69
- req.set_form_data(params)
70
- http = Net::HTTP.new(url.host, url.port)
71
- http.use_ssl = (url.scheme == "https")
72
- response = http.request(req)
73
- easepay_response = response ? JSON.parse(response.body) : {status: false, message: "Could not reach payment gateway server."}
74
- easepay_response
13
+ def self.init(key, salt, env='test')
14
+ self.key = key
15
+ self.salt = salt
16
+ self.env = env
17
+ self.request = Request.new(self.env)
75
18
  end
76
-
77
- def generate_final_params params
78
- # handle user defined parameters as it might be empty.
79
- final_params = params
80
- ["udf1","udf2","udf3","udf4","udf5","udf6","udf7","udf8","udf9","udf10"].each do |udf|
81
- final_params[udf] = (params[udf] || '').strip
82
- end
83
- final_params
84
- end
85
-
86
- def generate_hash(data, key, salt)
87
- # generate hash that needs to be authenticated on easepay server.
88
- hash_sequence = "#{key}|#{data['txnid']}|#{data['amount']}|#{data['productinfo']}|#{data['firstname']}|#{data['email']}|#{data['udf1']}|#{data['udf2']}|#{data['udf3']}|#{data['udf4']}|#{data['udf5']}|#{data['udf6']}|#{data['udf7']}|#{data['udf8']}|#{data['udf9']}|#{data['udf10']}|#{salt}"
89
- Digest::SHA512.hexdigest(hash_sequence).downcase
90
- end
91
-
92
- def generate_reverse_hash(data, key, salt)
93
- # generate hash that needs to be authenticated on easepay server.
94
- hash_sequence = "#{key}|#{data['txnid']}|#{data['amount']}|#{data['productinfo']}|#{data['firstname']}|#{data['email']}|#{data['udf1']}|#{data['udf2']}|#{data['udf3']}|#{data['udf4']}|#{data['udf5']}|#{data['udf6']}|#{data['udf7']}|#{data['udf8']}|#{data['udf9']}|#{data['udf10']}|#{salt}"
95
- Digest::SHA512.hexdigest(hash_sequence).downcase
96
- end
97
-
98
- def generate_payment_api_end_point env
99
- url = "https://testpay.easebuzz.in/payment/initiateLink"
100
- if env.downcase=="production" or env.downcase=="live" or env.downcase=="prod"
101
- url = "https://pay.easebuzz.in/payment/initiateLink"
102
- end
103
- url
104
- end
105
- end
19
+ end
@@ -0,0 +1,4 @@
1
+ module Easebuzz
2
+ PROD_URL = 'https://pay.easebuzz.in/'.freeze
3
+ TEST_URL = 'https://testpay.easebuzz.in/'.freeze
4
+ end
@@ -0,0 +1,14 @@
1
+ require 'digest'
2
+ module Easebuzz
3
+ class Helper
4
+ def self.generate_hash(data, key, salt)
5
+ hash_sequence = "#{key}|#{data['txnid']}|#{data['amount']}|#{data['productinfo']}|#{data['firstname']}|#{data['email']}|#{data['udf1']}|#{data['udf2']}|#{data['udf3']}|#{data['udf4']}|#{data['udf5']}|#{data['udf6']}|#{data['udf7']}|#{data['udf8']}|#{data['udf9']}|#{data['udf10']}|#{salt}"
6
+ Digest::SHA512.hexdigest(hash_sequence).downcase
7
+ end
8
+
9
+ def self.generate_reverse_hash(data, key, salt)
10
+ hash_sequence = "#{key}|#{data['txnid']}|#{data['amount']}|#{data['productinfo']}|#{data['firstname']}|#{data['email']}|#{data['udf1']}|#{data['udf2']}|#{data['udf3']}|#{data['udf4']}|#{data['udf5']}|#{data['udf6']}|#{data['udf7']}|#{data['udf8']}|#{data['udf9']}|#{data['udf10']}|#{salt}"
11
+ Digest::SHA512.hexdigest(hash_sequence).downcase
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,59 @@
1
+ module Easebuzz
2
+ class Payment
3
+ def self.initiate params
4
+ params = self.get_params(JSON.parse((params || {}).to_json))
5
+ validation_result = self.params_valid? params
6
+ if validation_result['status']
7
+ easepay_response = Easebuzz.request.initiate_payment params
8
+ easepay_response
9
+ else
10
+ validation_result
11
+ end
12
+ end
13
+
14
+ private
15
+ def self.params_valid? params
16
+ result = { 'status' => true }
17
+ if not params['key'].present? or not params['key'].instance_of?(String)
18
+ result['status'] = false
19
+ result['message'] = "Merchant Key is not valid. Must be string. Please refer documentation."
20
+ elsif not params['txnid'].present? or not params['txnid'].instance_of?(String)
21
+ result['status'] = false
22
+ result['message'] = "Transaction ID is not valid. Must be string. Please refer documentation."
23
+ elsif not params['amount'].present? or not params['amount'].instance_of?(Float)
24
+ result['status'] = false
25
+ result['message'] = "Amount is not valid. Must be float. Please refer documentation."
26
+ elsif not params['productinfo'].present? or not params['productinfo'].instance_of?(String)
27
+ result['status'] = false
28
+ result['message'] = "Product Info is not valid. Must be string. Please refer documentation."
29
+ elsif not params['firstname'].present? or not params['firstname'].instance_of?(String)
30
+ result['status'] = false
31
+ result['message'] = "First Name is not valid. Must be string. Please refer documentation."
32
+ elsif not params['email'].present? or not params['email'].match? URI::MailTo::EMAIL_REGEXP
33
+ result['status'] = false
34
+ result['message'] = "Email is not valid. Must be a valid email. Please refer documentation."
35
+ elsif not params['phone'].present? or not params['phone'].instance_of?(String)
36
+ result['status'] = false
37
+ result['message'] = "Phone number is not valid. Must be string. Please refer documentation."
38
+ elsif not params['surl'].present? or not params['surl'].instance_of?(String)
39
+ result['status'] = false
40
+ result['message'] = "Success URL is not valid. Must be string. Please refer documentation."
41
+ elsif not params['furl'].present? or not params['furl'].instance_of?(String)
42
+ result['status'] = false
43
+ result['message'] = "Failure URL is not valid. Must be string. Please refer documentation."
44
+ end
45
+ result
46
+ end
47
+
48
+ def self.get_params params
49
+ params['key'] = Easebuzz.key
50
+ udf_keys = ["udf1","udf2","udf3","udf4","udf5","udf6","udf7","udf8","udf9","udf10"]
51
+ (params.keys + udf_keys).uniq.each do |param_key|
52
+ value = params[param_key] || ''
53
+ params[param_key] = value.instance_of?(String) ? value.strip : value
54
+ end
55
+ params['hash'] = Helper.generate_hash(params, Easebuzz.key, Easebuzz.salt)
56
+ params
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,29 @@
1
+ require 'paywitheasebuzz-ruby/constants'
2
+ require 'net/http'
3
+
4
+ module Easebuzz
5
+ class Request
6
+ def initialize env
7
+ @BASE_URL = (env=='prod' || env=='production' || env=='PROD') ? PROD_URL : TEST_URL
8
+ parsed_base_url = URI.parse(@BASE_URL)
9
+ @HOST = parsed_base_url.host
10
+ @PORT = parsed_base_url.port
11
+ @HAS_SSL = parsed_base_url.scheme
12
+ end
13
+
14
+ def initiate_payment params
15
+ url = "#{@BASE_URL}payment/initiateLink"
16
+ hit_it(url, Net::HTTP::Post, params)
17
+ end
18
+
19
+ def hit_it action, method, params
20
+ request = method.new(action)
21
+ request.set_form_data(params)
22
+ http = Net::HTTP.new(@HOST, @PORT)
23
+ http.use_ssl = @HAS_SSL
24
+ response = http.request(request)
25
+ response_parsed = response ? JSON.parse(response.body) : {status: false, message: "Could not reach payment gateway server."}
26
+ response_parsed
27
+ end
28
+ end
29
+ end
metadata CHANGED
@@ -1,23 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: paywitheasebuzz-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
- - Easebuzz
7
+ - Karan Bhutwala
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-09-17 00:00:00.000000000 Z
11
+ date: 2019-09-18 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Ruby gem for easebuzz payment process.
14
- email: info@easebuzz.im
14
+ email: karan.bhutwala@easebuzz.in
15
15
  executables: []
16
16
  extensions: []
17
17
  extra_rdoc_files: []
18
18
  files:
19
19
  - lib/paywitheasebuzz-ruby.rb
20
- homepage: https://rubygems.org/gems/hola
20
+ - lib/paywitheasebuzz-ruby/constants.rb
21
+ - lib/paywitheasebuzz-ruby/helper.rb
22
+ - lib/paywitheasebuzz-ruby/payment.rb
23
+ - lib/paywitheasebuzz-ruby/request.rb
24
+ homepage: https://github.com/easebuzz/paywitheasebuzz-ruby
21
25
  licenses:
22
26
  - MIT
23
27
  metadata: {}