paywitheasebuzz-ruby 0.0.1 → 0.0.2

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