paywitheasebuzz-ruby 0.0.1

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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/paywitheasebuzz-ruby.rb +105 -0
  3. metadata +44 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: ea85f51e9106e44d0a3a2d9a8088c35cf49a71b875e6d50f342121c3b8b98e7b
4
+ data.tar.gz: b5095b288878e245acff0140c2daa29d071127538d90c925559d0ffe1d8acc9a
5
+ SHA512:
6
+ metadata.gz: 82522e1b330598ac097bd7132c609a29e025919ee405cd4484274d3d626bcd49fde4da6afb79f6a5bb5a8e6329435dc9899b297373c9c8b725b1c5f88a5ddc7d
7
+ data.tar.gz: 8af171f8b03b1d2dbfb7a7caac7666a3fd288a89068537d4a9259a1d524e8b9a21bd836d89576d351c26513396d644ed1f97b1977cb16286701a6a333816d768
@@ -0,0 +1,105 @@
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
22
+
23
+ private
24
+
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
30
+ end
31
+
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
75
+ 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
metadata ADDED
@@ -0,0 +1,44 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: paywitheasebuzz-ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Easebuzz
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-09-17 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Ruby gem for easebuzz payment process.
14
+ email: info@easebuzz.im
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/paywitheasebuzz-ruby.rb
20
+ homepage: https://rubygems.org/gems/hola
21
+ licenses:
22
+ - MIT
23
+ metadata: {}
24
+ post_install_message:
25
+ rdoc_options: []
26
+ require_paths:
27
+ - lib
28
+ required_ruby_version: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ required_rubygems_version: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - ">="
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ requirements: []
39
+ rubyforge_project:
40
+ rubygems_version: 2.7.6
41
+ signing_key:
42
+ specification_version: 4
43
+ summary: Pay with easebuzz
44
+ test_files: []