newebpay-rails 2.0.0

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 (55) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/.rspec +3 -0
  4. data/.ruby-version +1 -0
  5. data/.travis.yml +7 -0
  6. data/CODE_OF_CONDUCT.md +74 -0
  7. data/Gemfile +6 -0
  8. data/Gemfile.lock +234 -0
  9. data/LICENSE.txt +21 -0
  10. data/README.md +12 -0
  11. data/Rakefile +12 -0
  12. data/app/controllers/newebpay/application_controller.rb +23 -0
  13. data/app/controllers/newebpay/cancel_auth_notify_callbacks_controller.rb +12 -0
  14. data/app/controllers/newebpay/donation_notify_callbacks_controller.rb +12 -0
  15. data/app/controllers/newebpay/mpg_callbacks_controller.rb +23 -0
  16. data/app/controllers/newebpay/notify_callbacks_controller.rb +18 -0
  17. data/app/controllers/newebpay/payment_code_callbacks_controller.rb +18 -0
  18. data/app/controllers/newebpay/periodical_callbacks_controller.rb +23 -0
  19. data/app/controllers/newebpay/periodical_notify_callbacks_controller.rb +23 -0
  20. data/app/helpers/newebpay/application_helper.rb +7 -0
  21. data/app/helpers/newebpay/donation_helper.rb +36 -0
  22. data/app/helpers/newebpay/mpg_helper.rb +35 -0
  23. data/app/helpers/newebpay/periodical_helper.rb +35 -0
  24. data/app/jobs/newebpay/rails/application_job.rb +6 -0
  25. data/bin/rails +13 -0
  26. data/config/initializers/inflections.rb +3 -0
  27. data/config/routes.rb +13 -0
  28. data/lib/generators/newebpay/install_generator.rb +19 -0
  29. data/lib/generators/newebpay/templates/newebpay_initializer.rb +117 -0
  30. data/lib/newebpay.rb +46 -0
  31. data/lib/newebpay/attr_key_helper.rb +7 -0
  32. data/lib/newebpay/bank_codes.rb +17 -0
  33. data/lib/newebpay/cancel_auth/request.rb +69 -0
  34. data/lib/newebpay/cancel_auth/response.rb +38 -0
  35. data/lib/newebpay/close_fund/base.rb +69 -0
  36. data/lib/newebpay/close_fund/refund.rb +10 -0
  37. data/lib/newebpay/close_fund/request.rb +10 -0
  38. data/lib/newebpay/close_fund/response.rb +26 -0
  39. data/lib/newebpay/config.rb +65 -0
  40. data/lib/newebpay/donation/form.rb +90 -0
  41. data/lib/newebpay/donation/response.rb +38 -0
  42. data/lib/newebpay/engine.rb +9 -0
  43. data/lib/newebpay/error_codes.rb +131 -0
  44. data/lib/newebpay/mpg/form.rb +92 -0
  45. data/lib/newebpay/mpg/response.rb +27 -0
  46. data/lib/newebpay/newebpay_helper.rb +98 -0
  47. data/lib/newebpay/periodical/form.rb +83 -0
  48. data/lib/newebpay/periodical/response.rb +25 -0
  49. data/lib/newebpay/query_trade/response.rb +35 -0
  50. data/lib/newebpay/query_trade/search.rb +53 -0
  51. data/lib/newebpay/rails.rb +6 -0
  52. data/lib/newebpay/rails/engine.rb +9 -0
  53. data/lib/newebpay/version.rb +3 -0
  54. data/newebpay-rails.gemspec +50 -0
  55. metadata +233 -0
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Newebpay::QueryTrade
4
+ class Response
5
+ attr_reader :status, :message
6
+ def initialize(response_params)
7
+ response_data = JSON.parse(response_params)
8
+ @status = response_data['Status']
9
+ @message = response_data['Message']
10
+ @result = response_data['Result']
11
+
12
+ @result.each do |key, values|
13
+ define_singleton_method(key.underscore) do
14
+ values
15
+ end
16
+ end
17
+ end
18
+
19
+ def success?
20
+ status == 'SUCCESS'
21
+ end
22
+
23
+ def valid?
24
+ check_code == expected_check_code
25
+ end
26
+
27
+ def expected_check_code
28
+ Newebpay::NewebpayHelper.create_check_code(check_data_raw)
29
+ end
30
+
31
+ def check_data_raw
32
+ @check_data_raw ||= URI.encode_www_form(@result.slice('Amt', 'MerchantID', 'MerchantOrderNo', 'TradeNo').sort)
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Newebpay::QueryTrade
4
+ class Search
5
+ REQUIRED_ATTRS = %i[order_number price].freeze
6
+ attr_accessor :attrs, :merchant_id, :response
7
+
8
+ def initialize(options)
9
+ check_valid(options)
10
+ @attrs = {}
11
+ @merchant_id = options[:merchant_id] || Newebpay.config.merchant_id
12
+ parse_attr(options)
13
+
14
+ @attrs['Version'] = version
15
+ @attrs['TimeStamp'] = Time.now.to_i
16
+ @attrs['RespondType'] = 'JSON'
17
+ @attrs['CheckValue'] = check_value
18
+
19
+ result = HTTP.post(Newebpay.config.query_trade_url, form: attrs).body.to_s
20
+ @response = Response.new(result)
21
+ end
22
+
23
+ def check_value
24
+ @check_value ||= Newebpay::NewebpayHelper.create_check_value(check_value_raw)
25
+ end
26
+
27
+ def check_value_raw
28
+ URI.encode_www_form(attrs.slice('Amt', 'MerchantID', 'MerchantOrderNo').sort)
29
+ end
30
+
31
+ def version
32
+ '1.1'
33
+ end
34
+
35
+ private
36
+
37
+ def parse_attr(options)
38
+ attrs['MerchantID'] = merchant_id
39
+ attrs['MerchantOrderNo'] = options[:order_number]
40
+ attrs['Amt'] = options[:price]
41
+ end
42
+
43
+ def check_valid(options)
44
+ unless options.is_a? Hash
45
+ raise ArgumentError, "When initializing #{self.class.name}, you must pass a hash as an argument."
46
+ end
47
+
48
+ REQUIRED_ATTRS.each do |argument|
49
+ raise ArgumentError, "Missing required argument: #{argument}." unless options[argument]
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,6 @@
1
+ require 'newebpay'
2
+
3
+ module Newebpay
4
+ module Rails
5
+ end
6
+ end
@@ -0,0 +1,9 @@
1
+ require 'newebpay/engine'
2
+
3
+ module Newebpay
4
+ module Rails
5
+ class Engine < Newebpay::Engine
6
+ isolate_namespace NewebpayRails
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,3 @@
1
+ module Newebpay
2
+ VERSION = "2.0.0"
3
+ end
@@ -0,0 +1,50 @@
1
+
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "newebpay/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "newebpay-rails"
8
+ spec.version = Newebpay::VERSION
9
+ spec.authors = ["鍾劭方(Cellvin Chung)"]
10
+ spec.email = ["cellvinchung@gmail.com"]
11
+
12
+ spec.summary = %q{newebpay gem for ruby on rails (藍新金流)}
13
+ spec.description = %q{Integrate Rails with newebpay (藍新金流).}
14
+ spec.homepage = "https://github.com/cellvinchung/newebpay-rails"
15
+ spec.license = "MIT"
16
+
17
+ # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
18
+ # to allow pushing to a single host or delete this section to allow pushing to any host.
19
+ if spec.respond_to?(:metadata)
20
+ spec.metadata["allowed_push_host"] = "https://rubygems.org"
21
+
22
+ spec.metadata["homepage_uri"] = spec.homepage
23
+ spec.metadata["source_code_uri"] = "https://github.com/cellvinchung/newebpay-rails"
24
+ spec.metadata["changelog_uri"] = "https://github.com/cellvinchung/newebpay-rails/wiki/Change-Log"
25
+ spec.metadata["wiki_uri"] = "https://github.com/cellvinchung/newebpay-rails/wiki"
26
+ else
27
+ raise "RubyGems 2.0 or newer is required to protect against " \
28
+ "public gem pushes."
29
+ end
30
+
31
+ # Specify which files should be added to the gem when it is released.
32
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
33
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
34
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
35
+ end
36
+ spec.bindir = "exe"
37
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
38
+ spec.require_paths = ["lib"]
39
+
40
+ spec.required_ruby_version = ">= 2.5"
41
+ spec.add_dependency "http", ">= 4.1"
42
+ spec.add_dependency "rails", ">= 5.0", "< 7"
43
+ spec.add_development_dependency "rspec-rails"
44
+ spec.add_development_dependency "capybara"
45
+ spec.add_development_dependency "poltergeist"
46
+ spec.add_development_dependency "appraisal"
47
+ spec.add_development_dependency "ngrok-rspec"
48
+ spec.add_development_dependency "simplecov"
49
+ spec.add_development_dependency "coveralls"
50
+ end
metadata ADDED
@@ -0,0 +1,233 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: newebpay-rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.0
5
+ platform: ruby
6
+ authors:
7
+ - 鍾劭方(Cellvin Chung)
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2020-03-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: http
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '4.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '4.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rails
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '5.0'
34
+ - - "<"
35
+ - !ruby/object:Gem::Version
36
+ version: '7'
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: '5.0'
44
+ - - "<"
45
+ - !ruby/object:Gem::Version
46
+ version: '7'
47
+ - !ruby/object:Gem::Dependency
48
+ name: rspec-rails
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: capybara
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ - !ruby/object:Gem::Dependency
76
+ name: poltergeist
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ - !ruby/object:Gem::Dependency
90
+ name: appraisal
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ - !ruby/object:Gem::Dependency
104
+ name: ngrok-rspec
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ - !ruby/object:Gem::Dependency
118
+ name: simplecov
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ - !ruby/object:Gem::Dependency
132
+ name: coveralls
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ type: :development
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
145
+ description: Integrate Rails with newebpay (藍新金流).
146
+ email:
147
+ - cellvinchung@gmail.com
148
+ executables: []
149
+ extensions: []
150
+ extra_rdoc_files: []
151
+ files:
152
+ - ".gitignore"
153
+ - ".rspec"
154
+ - ".ruby-version"
155
+ - ".travis.yml"
156
+ - CODE_OF_CONDUCT.md
157
+ - Gemfile
158
+ - Gemfile.lock
159
+ - LICENSE.txt
160
+ - README.md
161
+ - Rakefile
162
+ - app/controllers/newebpay/application_controller.rb
163
+ - app/controllers/newebpay/cancel_auth_notify_callbacks_controller.rb
164
+ - app/controllers/newebpay/donation_notify_callbacks_controller.rb
165
+ - app/controllers/newebpay/mpg_callbacks_controller.rb
166
+ - app/controllers/newebpay/notify_callbacks_controller.rb
167
+ - app/controllers/newebpay/payment_code_callbacks_controller.rb
168
+ - app/controllers/newebpay/periodical_callbacks_controller.rb
169
+ - app/controllers/newebpay/periodical_notify_callbacks_controller.rb
170
+ - app/helpers/newebpay/application_helper.rb
171
+ - app/helpers/newebpay/donation_helper.rb
172
+ - app/helpers/newebpay/mpg_helper.rb
173
+ - app/helpers/newebpay/periodical_helper.rb
174
+ - app/jobs/newebpay/rails/application_job.rb
175
+ - bin/rails
176
+ - config/initializers/inflections.rb
177
+ - config/routes.rb
178
+ - lib/generators/newebpay/install_generator.rb
179
+ - lib/generators/newebpay/templates/newebpay_initializer.rb
180
+ - lib/newebpay.rb
181
+ - lib/newebpay/attr_key_helper.rb
182
+ - lib/newebpay/bank_codes.rb
183
+ - lib/newebpay/cancel_auth/request.rb
184
+ - lib/newebpay/cancel_auth/response.rb
185
+ - lib/newebpay/close_fund/base.rb
186
+ - lib/newebpay/close_fund/refund.rb
187
+ - lib/newebpay/close_fund/request.rb
188
+ - lib/newebpay/close_fund/response.rb
189
+ - lib/newebpay/config.rb
190
+ - lib/newebpay/donation/form.rb
191
+ - lib/newebpay/donation/response.rb
192
+ - lib/newebpay/engine.rb
193
+ - lib/newebpay/error_codes.rb
194
+ - lib/newebpay/mpg/form.rb
195
+ - lib/newebpay/mpg/response.rb
196
+ - lib/newebpay/newebpay_helper.rb
197
+ - lib/newebpay/periodical/form.rb
198
+ - lib/newebpay/periodical/response.rb
199
+ - lib/newebpay/query_trade/response.rb
200
+ - lib/newebpay/query_trade/search.rb
201
+ - lib/newebpay/rails.rb
202
+ - lib/newebpay/rails/engine.rb
203
+ - lib/newebpay/version.rb
204
+ - newebpay-rails.gemspec
205
+ homepage: https://github.com/cellvinchung/newebpay-rails
206
+ licenses:
207
+ - MIT
208
+ metadata:
209
+ allowed_push_host: https://rubygems.org
210
+ homepage_uri: https://github.com/cellvinchung/newebpay-rails
211
+ source_code_uri: https://github.com/cellvinchung/newebpay-rails
212
+ changelog_uri: https://github.com/cellvinchung/newebpay-rails/wiki/Change-Log
213
+ wiki_uri: https://github.com/cellvinchung/newebpay-rails/wiki
214
+ post_install_message:
215
+ rdoc_options: []
216
+ require_paths:
217
+ - lib
218
+ required_ruby_version: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - ">="
221
+ - !ruby/object:Gem::Version
222
+ version: '2.5'
223
+ required_rubygems_version: !ruby/object:Gem::Requirement
224
+ requirements:
225
+ - - ">="
226
+ - !ruby/object:Gem::Version
227
+ version: '0'
228
+ requirements: []
229
+ rubygems_version: 3.1.2
230
+ signing_key:
231
+ specification_version: 4
232
+ summary: newebpay gem for ruby on rails (藍新金流)
233
+ test_files: []