ruby-vnpay 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.
- checksums.yaml +7 -0
- data/README.md +2 -0
- data/Rakefile +0 -0
- data/lib/order_info.rb +7 -0
- data/lib/vnpay/engine.rb +5 -0
- data/lib/vnpay/url.rb +51 -0
- data/lib/vnpay/verify.rb +41 -0
- data/lib/vnpay.rb +21 -0
- metadata +64 -0
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
data/Rakefile
ADDED
File without changes
|
data/lib/order_info.rb
ADDED
data/lib/vnpay/engine.rb
ADDED
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
|
data/lib/vnpay/verify.rb
ADDED
@@ -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: []
|