tappay 0.4.1 → 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 910d88773959e2f6c92058ddbf0c953d3c3a95e0
4
- data.tar.gz: f5b083ae6707ebe345558cf0ba770c402b2f1429
2
+ SHA256:
3
+ metadata.gz: e6ba5b5a03d5a95d16eba5034a3e49ae5b3181ff9027f246d73b8c5ecc948664
4
+ data.tar.gz: ca52ff1b2b70d7849086ac34e4d54118ecd9e66557b9c58cc533d6588647a113
5
5
  SHA512:
6
- metadata.gz: 76f0a683a632252c9ccf3c7dfab74a257e9de343e1dc310a969799f479f3bd54a081b46b6c3eb25b206671a8c9cee096b1bf1cc2ba5e8ab9d95059f8521fbce5
7
- data.tar.gz: f2f2e504881825f070faf948764fefd675287d18afaaef5258b99b593c79db6d3190795deb434307d3324fca42375a68c38cb28b43201d457b48aa9711a540ef
6
+ metadata.gz: 2c072d7a95683c1f0f9d9270c2ea787ae079552b3585a06d14254987b4c078f44e7e4386ca0ca918d962e056c7feefd724cdbdec16ebd9e09294cb7d3978218a
7
+ data.tar.gz: fe70351ae1bcfe7c90b26d3032f5ae43ab5df68dd9560210476713279a267bc573645f2c3094b730a2dc243c08648c7de0a08d1082f111b379286240c432d633
@@ -0,0 +1,23 @@
1
+ name: Ruby Gem
2
+
3
+ on: [push, pull_request]
4
+
5
+ jobs:
6
+ build:
7
+ name: Build
8
+ runs-on: ubuntu-latest
9
+ strategy:
10
+ matrix:
11
+ ruby: [2.6, 2.5, 2.4]
12
+
13
+ steps:
14
+ - uses: actions/checkout@v2
15
+ - name: Set up Ruby version
16
+ uses: actions/setup-ruby@v1
17
+ with:
18
+ ruby-version: ${{ matrix.ruby }}
19
+ - name: Build and test with Rake
20
+ run: |
21
+ gem install bundler
22
+ bundle install --jobs 4 --retry 3
23
+ bundle exec rake
@@ -0,0 +1,16 @@
1
+ [#](#) Changelog
2
+ All notable changes to this project will be documented in this file.
3
+
4
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
+
7
+ ## [2.0.0]
8
+ * Removed merchant_id support from configuration options.
9
+ * Removed support for Ruby version < 2.4
10
+
11
+ ## [1.0.1] - 2019-09-05
12
+ * Added deprecation warning when setting merchant_id, app_id, app_key in config options.
13
+
14
+ ## [1.0.0] - 2018-06-29
15
+ * Use semantic versioning.
16
+ * Start running in https://statementdog.com production environment.
data/README.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # TapPay
2
2
 
3
+ [![Build Status](https://travis-ci.org/hzchirs/tappay-ruby.svg?branch=master)](https://travis-ci.org/hzchirs/tappay-ruby)
4
+ [![Maintainability](https://api.codeclimate.com/v1/badges/1bc81b37e0025c3de443/maintainability)](https://codeclimate.com/github/hzchirs/tappay-ruby/maintainability)
5
+
3
6
  A very simple [TapPay](https://www.tappaysdk.com/tch) API wrapper written in the Ruby language.
4
7
 
5
8
  ## Installation
@@ -23,23 +26,56 @@ See [TapPay Backend API](https://docs.tappaysdk.com/tutorial/zh/back.html#back).
23
26
 
24
27
  ## Usage
25
28
 
26
- You can setup mode, partner_key and merchant_id. It requests sandbox server or production server by mode.
27
- The partner_key and merchant_id are optional, thay could also be specified in request params.
29
+ **Settings**
28
30
 
29
- ```ruby
30
- # sandbox or production
31
- TapPay.mode = :sandbox
31
+ You need to setup mode which affects requests sent to sandbox or production server.
32
+ The partner_key and merchant_id are optional, they could also be specified in request params.
32
33
 
34
+ ```ruby
33
35
  TapPay.setup do |config|
36
+ config.mode = Rails.env.production? ? :production : :sandbox # sandbox or production
34
37
  config.partner_key = 'your_partner_key' # optional
35
- config.merchant_id = 'your_merchant_id' # optional
36
38
  end
37
39
  ```
38
40
 
41
+ **Map API Resources to Module and Action**
42
+
43
+ It is easy to map api resources to the TapPay module's namespace and action.
44
+ For example, the **pay by prime** api is:
45
+ https://sandbox.tappaysdk.com/tpc/payment/pay-by-prime ,
46
+ the last two parts `payment` and `pay-by-prime` are mapped to
47
+ namespace `Payment` and action `pay_by_prime`, so it could be called by
48
+ `TapPay::Payment.pay_by_prime(params)`.
49
+
50
+ Another example is *bind card*, the bind card api is:
51
+ https://sandbox.tappaysdk.com/tpc/card/bind , so the api could be called by `TapPay::Card.bind(params)` as you expect.
52
+
53
+ ### Supported APIs
54
+ **Payment**
55
+
56
+ * pay_by_prime
57
+ * pay_by_token
58
+
59
+ **Card**
60
+
61
+ * bind
62
+ * remove
63
+
64
+ **Transaction**
65
+
66
+ * cap
67
+ * query
68
+ * refund
69
+ * trade_history
70
+
71
+ For more details about api request params and responses, please refer to the [TapPay Backend API Documentation](https://docs.tappaysdk.com/tutorial/zh/back.html#back).
72
+
73
+ ## More Examples
39
74
  ### Pay By Prime
40
75
  ```ruby
41
76
  params = {
42
77
  prime: 'test_3a2fb2b7e892b914a03c95dd4dd5dc7970c908df67a49527c0a648b2bc9',
78
+ merchant_id: 'your_merchant_id',
43
79
  details: "TapPay Test",
44
80
  amount: 100,
45
81
  cardholder: {
@@ -53,13 +89,13 @@ params = {
53
89
  remember: true
54
90
  }
55
91
 
56
- res = TapPay.pay_by_prime(params)
92
+ res = TapPay::Payment.pay_by_prime(params)
57
93
  res #=> {"status"=>0, "msg"=>"Success", "amount"=>100, ...}
58
94
  res['status'] #=> 0
59
95
  res['msg'] #=> Success
60
96
 
61
97
  # Block Style
62
- TapPay.pay_by_prime(params) do |res|
98
+ TapPay::Payment.pay_by_prime(params) do |res|
63
99
  res #=> {"status"=>0, "msg"=>"Success", "amount"=>100, ...}
64
100
  end
65
101
  ```
@@ -67,6 +103,7 @@ end
67
103
  ### Pay By Token
68
104
  ```ruby
69
105
  params = {
106
+ merchant_id: 'your_merchant_id',
70
107
  card_key: 'your_card_key_after_pay_by_prime_with_remember_true',
71
108
  card_token: 'your_card_token_after_pay_by_prime_with_remember_true',
72
109
  amount: 1,
@@ -74,10 +111,10 @@ params = {
74
111
  details: "An apple and a pen."
75
112
  }
76
113
 
77
- res = TapPay.pay_by_token(params)
114
+ res = TapPay::Payment.pay_by_token(params)
78
115
 
79
116
  # Block Style
80
- TapPay.pay_by_token(params) do |res|
117
+ TapPay::Payment.pay_by_token(params) do |res|
81
118
  res #=> {"status"=>0, "msg"=>"Success", "amount"=>100, ...}
82
119
  end
83
120
  ```
@@ -88,14 +125,47 @@ params = {
88
125
  rec_trade_id: 'your_rec_trade_id'
89
126
  }
90
127
 
91
- res = TapPay.refund(params)
128
+ res = TapPay::Transaction.refund(params)
92
129
 
93
130
  # Block Style
94
- TapPay.refund(params) do |res|
131
+ TapPay::Transaction.refund(params) do |res|
95
132
  res
96
133
  end
97
134
  ```
135
+
136
+ ### Card
137
+ ```ruby
138
+ # bind
139
+ params = {
140
+ prime: 'test_3a2fb2b7e892b914a03c95dd4dd5dc7970c908df67a49527c0a648b2bc9',
141
+ merchant_id: 'your_merchant_id',
142
+ currency: 'TWD',
143
+ cardholder: {
144
+ phone_number: "+886923456789",
145
+ name: "Jane Doe",
146
+ email: "Jane@Doe.com",
147
+ zip_code: "12345",
148
+ address: "123 1st Avenue, City, Country",
149
+ national_id: "A123456789"
150
+ }
151
+ }
152
+
153
+ TapPay::Card.bind(params) do |res|
154
+ res
155
+ end
156
+
157
+ # remove
158
+ params = {
159
+ card_key: "your_card_key",
160
+ card_token: "your_card_token"
161
+ }
162
+
163
+ TapPay::Card.remove(params) do |res|
164
+ res
165
+ end
166
+ ```
167
+
168
+
98
169
  ## License
99
170
 
100
171
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
101
-
@@ -1,55 +1,49 @@
1
- require "tappay/version"
1
+ # frozen_string_literal: true
2
+
3
+ require 'forwardable'
4
+ require 'tappay/version'
2
5
 
3
6
  require 'tappay/request'
4
- require 'tappay/api_resource'
5
- require 'tappay/pay_by_prime'
6
- require 'tappay/pay_by_token'
7
- require 'tappay/refund'
7
+ require 'tappay/api_resources'
8
+ require 'tappay/card'
9
+ require 'tappay/payment'
10
+ require 'tappay/transaction'
8
11
 
9
12
  module TapPay
10
- @@mode = :sandbox
11
- @@partner_key = ''
12
- @@merchant_id = ''
13
+ VALID_MODES = [:sandbox, :production].freeze
14
+
15
+ @mode = :sandbox
16
+ @app_id = ''
17
+ @app_key = ''
18
+ @partner_key = ''
13
19
 
14
20
  class << self
21
+ extend Forwardable
22
+ def_delegators TapPay::Payment, :pay_by_prime, :pay_by_token
23
+ def_delegators TapPay::Transaction, :refund
24
+
15
25
  def setup
16
26
  yield(self)
17
27
  end
18
28
 
19
29
  def mode=(mode)
20
- @@mode = mode
21
- end
30
+ unless VALID_MODES.include?(mode)
31
+ raise ArgumentError, "Invalid mode! mode must be one of `#{VALID_MODES}`"
32
+ end
22
33
 
23
- def partner_key=(partner_key)
24
- @@partner_key = partner_key.to_s
34
+ @mode = mode
25
35
  end
26
36
 
27
- def merchant_id=(merchant_id)
28
- @@merchant_id = merchant_id.to_s
37
+ def partner_key=(partner_key)
38
+ @partner_key = partner_key.to_s
29
39
  end
30
40
 
31
41
  def mode
32
- @@mode
42
+ @mode
33
43
  end
34
44
 
35
45
  def partner_key
36
- @@partner_key
37
- end
38
-
39
- def merchant_id
40
- @@merchant_id
41
- end
42
-
43
- def pay_by_prime(payload, &block)
44
- TapPay::PayByPrime.call(payload, &block)
45
- end
46
-
47
- def pay_by_token(payload, &block)
48
- TapPay::PayByToken.call(payload, &block)
49
- end
50
-
51
- def refund(payload, &block)
52
- TapPay::Refund.call(payload, &block)
46
+ @partner_key
53
47
  end
54
48
  end
55
49
  end
@@ -0,0 +1,44 @@
1
+ module TapPay
2
+ module APIResources
3
+ CARD = [
4
+ 'bind',
5
+ 'remove'
6
+ ].freeze
7
+
8
+ PAYMENT = [
9
+ 'pay_by_prime',
10
+ 'pay_by_token'
11
+ ].freeze
12
+
13
+ TRANSACTION = [
14
+ 'cap',
15
+ 'query',
16
+ 'refund',
17
+ 'trade_history'
18
+ ].freeze
19
+
20
+ def base_url
21
+ if TapPay.mode == :production
22
+ 'https://prod.tappaysdk.com'.freeze
23
+ else
24
+ 'https://sandbox.tappaysdk.com'.freeze
25
+ end
26
+ end
27
+
28
+ def class_name
29
+ self.name.split("::")[-1]
30
+ end
31
+
32
+ def resource_url(resource_name)
33
+ "#{base_url}/tpc/#{class_name.downcase}/#{resource_name.gsub('_', '-')}"
34
+ end
35
+
36
+ def generate_resources
37
+ TapPay::APIResources.const_get(class_name.upcase).each do |resource|
38
+ define_singleton_method(resource) do |params, &block|
39
+ TapPay::Request.post(resource_url(resource), params, &block)
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,7 @@
1
+ module TapPay
2
+ class Card
3
+ extend TapPay::APIResources
4
+
5
+ generate_resources
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module TapPay
2
+ class Payment
3
+ extend TapPay::APIResources
4
+
5
+ generate_resources
6
+ end
7
+ end
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'net/http'
2
4
  require 'json'
3
5
 
4
6
  module TapPay
5
7
  class Request
6
- def self.send(url, params = {}, &block)
8
+ def self.post(url, params = {}, &block)
7
9
  payload = default_params.merge(params).to_json
8
10
  uri = URI(url)
9
11
  req = Net::HTTP::Post.new(uri)
@@ -22,8 +24,7 @@ module TapPay
22
24
 
23
25
  def self.default_params
24
26
  {
25
- partner_key: TapPay.partner_key,
26
- merchant_id: TapPay.merchant_id
27
+ partner_key: TapPay.partner_key
27
28
  }
28
29
  end
29
30
 
@@ -0,0 +1,7 @@
1
+ module TapPay
2
+ class Transaction
3
+ extend TapPay::APIResources
4
+
5
+ generate_resources
6
+ end
7
+ end
@@ -1,3 +1,3 @@
1
1
  module TapPay
2
- VERSION = "0.4.1"
2
+ VERSION = "2.0.0"
3
3
  end
@@ -21,10 +21,10 @@ Gem::Specification.new do |spec|
21
21
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
22
  spec.require_paths = ["lib"]
23
23
 
24
- spec.add_development_dependency "bundler", "~> 1.16"
25
- spec.add_development_dependency "rake", "~> 10.0"
26
- spec.add_development_dependency "rspec", "~> 3.0"
27
- spec.add_development_dependency "webmock", "~> 3.0"
24
+ spec.add_development_dependency "bundler", "~> 2.1"
25
+ spec.add_development_dependency "rake", "~> 13.0"
26
+ spec.add_development_dependency "rspec", "~> 3.9"
27
+ spec.add_development_dependency "webmock", "~> 3.8"
28
28
 
29
- spec.required_ruby_version = '>= 2.0.0'
29
+ spec.required_ruby_version = '>= 2.4.0'
30
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tappay
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - HzChris
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-01-25 00:00:00.000000000 Z
11
+ date: 2020-06-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,56 +16,56 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.16'
19
+ version: '2.1'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.16'
26
+ version: '2.1'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '13.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: '13.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '3.0'
47
+ version: '3.9'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '3.0'
54
+ version: '3.9'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: webmock
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '3.0'
61
+ version: '3.8'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '3.0'
68
+ version: '3.8'
69
69
  description: A very simple TapPay API wrapper for ruby. Currently support pay_by_prime,
70
70
  pay_by_token and refund.
71
71
  email:
@@ -74,9 +74,10 @@ executables: []
74
74
  extensions: []
75
75
  extra_rdoc_files: []
76
76
  files:
77
+ - ".github/workflows/gempush.yml"
77
78
  - ".gitignore"
78
79
  - ".rspec"
79
- - ".travis.yml"
80
+ - CHANGELOG.md
80
81
  - Gemfile
81
82
  - LICENSE.txt
82
83
  - README.md
@@ -84,11 +85,11 @@ files:
84
85
  - bin/console
85
86
  - bin/setup
86
87
  - lib/tappay.rb
87
- - lib/tappay/api_resource.rb
88
- - lib/tappay/pay_by_prime.rb
89
- - lib/tappay/pay_by_token.rb
90
- - lib/tappay/refund.rb
88
+ - lib/tappay/api_resources.rb
89
+ - lib/tappay/card.rb
90
+ - lib/tappay/payment.rb
91
91
  - lib/tappay/request.rb
92
+ - lib/tappay/transaction.rb
92
93
  - lib/tappay/version.rb
93
94
  - tappay.gemspec
94
95
  homepage: https://github.com/hzchirs/tappay-ruby
@@ -103,15 +104,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
103
104
  requirements:
104
105
  - - ">="
105
106
  - !ruby/object:Gem::Version
106
- version: 2.0.0
107
+ version: 2.4.0
107
108
  required_rubygems_version: !ruby/object:Gem::Requirement
108
109
  requirements:
109
110
  - - ">="
110
111
  - !ruby/object:Gem::Version
111
112
  version: '0'
112
113
  requirements: []
113
- rubyforge_project:
114
- rubygems_version: 2.6.12
114
+ rubygems_version: 3.1.2
115
115
  signing_key:
116
116
  specification_version: 4
117
117
  summary: A very simple TapPay API wrapper for ruby.
@@ -1,5 +0,0 @@
1
- sudo: false
2
- language: ruby
3
- rvm:
4
- - 2.4.1
5
- before_install: gem install bundler -v 1.16.1
@@ -1,23 +0,0 @@
1
- module TapPay
2
- module APIResource
3
- def self.base_url
4
- if TapPay.mode == :production
5
- 'https://prod.tappaysdk.com'
6
- else
7
- 'https://sandbox.tappaysdk.com'
8
- end
9
- end
10
-
11
- def self.pay_by_prime_url
12
- "#{base_url}/tpc/payment/pay-by-prime"
13
- end
14
-
15
- def self.pay_by_token_url
16
- "#{base_url}/tpc/payment/pay-by-token"
17
- end
18
-
19
- def self.refund_url
20
- "#{base_url}/tpc/transaction/refund"
21
- end
22
- end
23
- end
@@ -1,7 +0,0 @@
1
- module TapPay
2
- class PayByPrime
3
- def self.call(params = {}, &block)
4
- TapPay::Request.send(TapPay::APIResource.pay_by_prime_url, params, &block)
5
- end
6
- end
7
- end
@@ -1,7 +0,0 @@
1
- module TapPay
2
- class PayByToken
3
- def self.call(params = {}, &block)
4
- TapPay::Request.send(TapPay::APIResource.pay_by_token_url, params, &block)
5
- end
6
- end
7
- end
@@ -1,7 +0,0 @@
1
- module TapPay
2
- class Refund
3
- def self.call(params = {}, &block)
4
- TapPay::Request.send(TapPay::APIResource.refund_url, params, &block)
5
- end
6
- end
7
- end