ruby-vnpay 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 28be6195218dcef0dcf028be3c9b6490b90bdf291ddb4d5abda94a8ff0bccc53
4
+ data.tar.gz: c3b34526939fe7f22147d1b442b28c9d67fe8f3fb59751fa64b6fb7de02172b4
5
+ SHA512:
6
+ metadata.gz: ec9d2f6050d0f8ec935f762cdcd9043c19fc28fc2e63a86225723277628c485c4c842ca211ba5e0f063e64b0be8c46ab62581f11a082f40bda614656b6f5e8f1
7
+ data.tar.gz: 78876b1475909554a6cc4324adda4dff9bb0da870ad4cc0ae16f25a6be61bd1c7b2fb0ce8737efbeb3dc29b4f11139d5f71c133e6452ccb83ffd440892c7a03f
data/README.md ADDED
@@ -0,0 +1,2 @@
1
+ # ruby-vnpay
2
+ Ruby gem for VNPay integration
data/Rakefile ADDED
File without changes
data/lib/order_info.rb ADDED
@@ -0,0 +1,7 @@
1
+ class OrderInfo
2
+ attr_accessor :payment_ref, :amount, :description, :created_at
3
+
4
+ def created_at=(value)
5
+ @created_at = value.strftime('%Y%m%d%H%M%S')
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ module Vnpay
2
+ class Engine < ::Rails::Engine
3
+ config.autoload_paths += Dir["#{config.root}/lib/**/"]
4
+ end
5
+ end
data/lib/vnpay/url.rb ADDED
@@ -0,0 +1,51 @@
1
+ module Vnpay
2
+ class Url
3
+ attr_accessor :order_info, :ip_address, :callback_url
4
+
5
+ def initialize(order_info, ip_address, callback)
6
+ @order_info = order_info
7
+ @ip_address = ip_address
8
+ @callback_url = callback_url
9
+ end
10
+
11
+ def generate
12
+ config.payment_url + query_string + "&vnp_SecureHashType=MD5&vnp_SecureHash=#{secure_hash}"
13
+ end
14
+
15
+ private
16
+
17
+ def query_string
18
+ initiate_request.map { |k, v| "#{url_encode(k)}=#{url_encode(v)}" }.join('&')
19
+ end
20
+
21
+ def secure_hash
22
+ data = initiate_request.sort.map { |k, v| "#{k}=#{v}" }.join('&')
23
+ Digest::MD5.hexdigest(config.secret_key + data)
24
+ end
25
+
26
+ def initiate_request
27
+ {
28
+ vnp_Amount: order_info.amount.to_i * 100,
29
+ vnp_Command: 'pay',
30
+ vnp_CreateDate: order_info.created_at.to_i,
31
+ vnp_CurrCode: 'VND',
32
+ vnp_IpAddr: ip_address,
33
+ vnp_Locale: 'vn',
34
+ vnp_OrderInfo: order_info.description.to_s,
35
+ vnp_OrderType: "250000",
36
+ vnp_ReturnUrl: callback_url,
37
+ vnp_TmnCode: config.website_code,
38
+ vnp_TxnRef: order_info.payment_ref.to_s,
39
+ vnp_Version: "2.0.0"
40
+ }
41
+ end
42
+
43
+ def config
44
+ @config ||= Vnpay.configuration
45
+ end
46
+
47
+ def url_encode(string)
48
+ Rack::Utils.escape(string)
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,41 @@
1
+ module Vnpay
2
+ class Verify
3
+
4
+ REJECTED_PARAMS = %w[vnp_SecureHashType vnp_SecureHash controller action].freeze
5
+
6
+ attr_reader :params, :normalized_params
7
+
8
+ def initialize(params)
9
+ @params = params.permit!.to_h
10
+ end
11
+
12
+ def verify
13
+ normalize_params
14
+
15
+ return false unless success_code?
16
+ return false unless valid_hash?
17
+
18
+ true
19
+ end
20
+
21
+ private
22
+
23
+ def success_code?
24
+ params['vnp_ResponseCode'] == '00'
25
+ end
26
+
27
+ def valid_hash?
28
+ params['vnp_SecureHash'] == calculated_secure_hash
29
+ end
30
+
31
+ def calculated_secure_hash
32
+ REJECTED_PARAMS.each { |key| params.delete(key) }
33
+ data = params.sort.map { |k, v| "#{k}=#{v}" }.join('&')
34
+ Digest::MD5.hexdigest(Vnpay.configuration.secret_key + data)
35
+ end
36
+
37
+ def normalize_params
38
+ @normalized_params ||= {}
39
+ end
40
+ end
41
+ end
data/lib/vnpay.rb ADDED
@@ -0,0 +1,21 @@
1
+ require 'order_info'
2
+ require 'vnpay/url'
3
+ require 'vnpay/verify'
4
+
5
+ module Vnpay
6
+ if defined?(Rails)
7
+ require 'vnpay/engine'
8
+ else
9
+ require 'vnpay'
10
+ end
11
+ end
12
+
13
+ class Vnpay
14
+ def self.configuration
15
+ @configuration ||= OpenStruct.new
16
+ end
17
+
18
+ def self.configure
19
+ yield(configuration)
20
+ end
21
+ end
metadata ADDED
@@ -0,0 +1,64 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ruby-vnpay
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - nhannvu19
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-09-13 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '5.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '5.1'
27
+ description: Ruby gem for VNPay integration
28
+ email:
29
+ - nhannvu.19@gmail.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - README.md
35
+ - Rakefile
36
+ - lib/order_info.rb
37
+ - lib/vnpay.rb
38
+ - lib/vnpay/engine.rb
39
+ - lib/vnpay/url.rb
40
+ - lib/vnpay/verify.rb
41
+ homepage: https://github.com/nhannvu19/ruby-vnpay
42
+ licenses:
43
+ - MIT
44
+ metadata: {}
45
+ post_install_message:
46
+ rdoc_options: []
47
+ require_paths:
48
+ - lib
49
+ required_ruby_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ required_rubygems_version: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: '0'
59
+ requirements: []
60
+ rubygems_version: 3.0.8
61
+ signing_key:
62
+ specification_version: 4
63
+ summary: Ruby gem for VNPay integration
64
+ test_files: []