tappay_ruby 0.9.0 → 0.11.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
2
  SHA256:
3
- metadata.gz: e47e2732e236d1bca9d0daa16466fbff08b9c43e044ccb9020e2a505632fcf2a
4
- data.tar.gz: af086bf4adf1a925fc1beb1cfc25dc3903421592b80c73e3efc8007c8a463d75
3
+ metadata.gz: 920fd5c582914989062cb76fc47306e6ec3b4714b2558e2d4f04e2e43c4c11a0
4
+ data.tar.gz: 85a9f5331b47bdfbb78f81da3236d5123086f873e1260fb68b5c757bb7984e1d
5
5
  SHA512:
6
- metadata.gz: 93ab78ddbcbd031929a051fe085cd7c8b63d289e88f0defc9eb5299924795692b35145680e373c87503f893403077d0e439339cdec4b50efb9ca9d339f9e9fc9
7
- data.tar.gz: 94023de9c35c2ac47265f3abf9f2beeee0659fd2c977a5ce7cc3962cdc55867b5313c115327b3f2a2b17340f737c59d42f08747e5dd722f3ad4ef5f9c0e6adf4
6
+ metadata.gz: 9fb651e7b40a652a725896d697a75a3e47484f58bc64102b057bfa2a8b049f0427b8c1bdb0dcaa229d84f999898e291b9bfd36548e0ce012fdff4cb706201b03
7
+ data.tar.gz: 62b665b0e9d15c07966cc61998d215ff2e531a1664d5dffd824b9fc116db93a4c031f1f5271e5701cc445793056bd167ca561c6688064a281707dcba17e27839
data/README.md CHANGED
@@ -10,9 +10,13 @@ A Ruby library for integrating with TapPay payment services. This gem provides a
10
10
 
11
11
  - Multiple payment methods:
12
12
  - Credit card payments (one-time and tokenized)
13
- - Instalment payments (3 to 24 months)
13
+ - Instalment payments (3, 6, 12, 18, 24, 30 months)
14
14
  - Line Pay
15
15
  - JKO Pay
16
+ - Flexible merchant identification:
17
+ - Support for both `merchant_id` and `merchant_group_id`
18
+ - Automatic fallback handling
19
+ - Priority-based merchant ID resolution
16
20
  - Refund processing
17
21
  - Transaction status queries
18
22
  - Comprehensive error handling
@@ -50,89 +54,37 @@ The simplest way to configure the gem:
50
54
 
51
55
  ```ruby
52
56
  Tappay.configure do |config|
53
- # Environment settings
54
- config.mode = Rails.env.production? ? :production : :sandbox
55
-
56
- # Common settings
57
- config.partner_key = 'your_partner_key'.freeze
58
- config.app_id = 'your_app_id'.freeze
57
+ config.partner_key = 'YOUR_PARTNER_KEY'
59
58
 
60
- # Merchant settings (use either merchant_id or merchant_group_id, not both)
61
- config.merchant_id = 'your_merchant_id'.freeze
59
+ # Primary merchant identification
60
+ # You can use either merchant_id or merchant_group_id
61
+ config.merchant_id = 'YOUR_MERCHANT_ID'
62
62
  # OR
63
- config.merchant_group_id = 'your_merchant_group_id'.freeze
63
+ config.merchant_group_id = 'YOUR_MERCHANT_GROUP_ID'
64
64
 
65
- # Payment-specific merchant IDs
66
- config.instalment_merchant_id = 'your_instalment_merchant_id'.freeze
67
- config.line_pay_merchant_id = 'your_line_pay_merchant_id'.freeze
68
- config.jko_pay_merchant_id = 'your_jko_pay_merchant_id'.freeze
65
+ # Optional merchant IDs for specific payment methods
66
+ # Note: These will be ignored if merchant_group_id is set
67
+ config.jko_pay_merchant_id = 'YOUR_JKO_PAY_MERCHANT_ID'
68
+ config.line_pay_merchant_id = 'YOUR_LINE_PAY_MERCHANT_ID'
69
+ config.instalment_merchant_id = 'YOUR_INSTALMENT_MERCHANT_ID'
69
70
 
70
- config.currency = 'TWD'.freeze
71
- config.vat_number = 'your_vat_number'.freeze
71
+ config.mode = :sandbox # or :production
72
72
  end
73
73
  ```
74
74
 
75
- ### Merchant ID Configuration
76
-
77
- The gem supports flexible merchant ID configuration:
75
+ ### Merchant ID Resolution
78
76
 
79
- 1. Global merchant ID:
80
- - `merchant_id`: Default merchant ID for all payments
81
- - `merchant_group_id`: Group merchant ID (mutually exclusive with merchant_id)
77
+ The gem uses the following priority order when resolving merchant IDs:
82
78
 
83
- 2. Payment-specific merchant IDs:
84
- - `instalment_merchant_id`: Specific merchant ID for instalment payments
85
- - `line_pay_merchant_id`: Specific merchant ID for Line Pay transactions
86
- - `jko_pay_merchant_id`: Specific merchant ID for JKO Pay transactions
87
-
88
- Merchant ID Priority:
89
- 1. Payment options merchant ID (if provided in the payment call)
90
- 2. Payment-specific merchant ID (if configured)
91
- 3. Global merchant ID
92
-
93
- Example of merchant ID usage:
94
- ```ruby
95
- # Using default merchant ID
96
- result = Tappay::CreditCard::Pay.by_prime(
97
- prime: 'prime_from_tappay_sdk',
98
- amount: 100,
99
- order_number: 'ORDER-123'
100
- )
79
+ 1. If `merchant_group_id` is set (either in configuration or options):
80
+ - Uses `merchant_group_id` for all payment types
81
+ - Ignores all other merchant IDs (including specific ones for Line Pay, JKO Pay, etc.)
101
82
 
102
- # Using payment-specific merchant ID
103
- # This will automatically use line_pay_merchant_id if configured
104
- result = Tappay::LinePay::Pay.new(
105
- prime: 'line_pay_prime',
106
- amount: 100,
107
- frontend_redirect_url: 'https://example.com/line_pay/result',
108
- backend_notify_url: 'https://example.com/line_pay/notify'
109
- ).execute
110
-
111
- # Overriding merchant ID in payment options
112
- result = Tappay::CreditCard::Pay.by_prime(
113
- prime: 'prime_from_tappay_sdk',
114
- amount: 100,
115
- merchant_id: 'override_merchant_id', # This takes highest priority
116
- order_number: 'ORDER-123'
117
- )
118
- ```
119
-
120
- ### 2. Using Environment Variables
121
-
122
- For better security, you can use environment variables:
123
-
124
- ```ruby
125
- Tappay.configure do |config|
126
- config.mode = Rails.env.production? ? :production : :sandbox
127
- config.partner_key = ENV['TAPPAY_PARTNER_KEY'].freeze
128
- config.app_id = ENV['TAPPAY_APP_ID'].freeze
129
- config.merchant_id = ENV['TAPPAY_MERCHANT_ID'].freeze
130
- config.line_pay_merchant_id = ENV['TAPPAY_LINE_PAY_MERCHANT_ID'].freeze
131
- config.instalment_merchant_id = ENV['TAPPAY_INSTALMENT_MERCHANT_ID'].freeze
132
- config.jko_pay_merchant_id = ENV['TAPPAY_JKO_PAY_MERCHANT_ID'].freeze
133
- # ... other configurations
134
- end
135
- ```
83
+ 2. If `merchant_group_id` is not set:
84
+ - For Line Pay: Uses `line_pay_merchant_id` if set, otherwise falls back to `merchant_id`
85
+ - For JKO Pay: Uses `jko_pay_merchant_id` if set, otherwise falls back to `merchant_id`
86
+ - For Instalments: Uses `instalment_merchant_id` if set, otherwise falls back to `merchant_id`
87
+ - For other payment types: Uses `merchant_id`
136
88
 
137
89
  ## Usage
138
90
 
@@ -186,6 +138,7 @@ result = Tappay::LinePay::Pay.new(
186
138
  Tappay.configure do |config|
187
139
  config.partner_key = 'YOUR_PARTNER_KEY'
188
140
  config.merchant_id = 'YOUR_MERCHANT_ID'
141
+ config.merchant_group_id = 'YOUR_MERCHANT_GROUP_ID' # Optional, mutually exclusive with merchant_id
189
142
  config.jko_pay_merchant_id = 'YOUR_JKO_PAY_MERCHANT_ID' # Optional, falls back to merchant_id if not set
190
143
  config.sandbox = true # Set to false for production
191
144
  end
@@ -36,7 +36,7 @@ module Tappay
36
36
 
37
37
  def validate!
38
38
  raise ValidationError, 'partner_key is required' if partner_key.nil?
39
- raise ValidationError, 'merchant_id is required' if merchant_id.nil?
39
+ raise ValidationError, 'Either merchant_id or merchant_group_id is required' if merchant_id.nil? && merchant_group_id.nil?
40
40
  end
41
41
  end
42
42
  end
@@ -34,6 +34,10 @@ module Tappay
34
34
  private
35
35
 
36
36
  def get_merchant_id
37
+ # If merchant_group_id is set, it takes precedence
38
+ return nil if Tappay.configuration.merchant_group_id
39
+
40
+ # Otherwise, use instalment_merchant_id or fall back to default merchant_id
37
41
  Tappay.configuration.instalment_merchant_id || super
38
42
  end
39
43
 
@@ -75,6 +79,10 @@ module Tappay
75
79
  private
76
80
 
77
81
  def get_merchant_id
82
+ # If merchant_group_id is set, it takes precedence
83
+ return nil if Tappay.configuration.merchant_group_id
84
+
85
+ # Otherwise, use instalment_merchant_id or fall back to default merchant_id
78
86
  Tappay.configuration.instalment_merchant_id || super
79
87
  end
80
88
 
@@ -15,6 +15,10 @@ module Tappay
15
15
  private
16
16
 
17
17
  def get_merchant_id
18
+ # If merchant_group_id is set, it takes precedence
19
+ return nil if Tappay.configuration.merchant_group_id
20
+
21
+ # Otherwise, use jko_pay_merchant_id or fall back to default merchant_id
18
22
  Tappay.configuration.jko_pay_merchant_id || super
19
23
  end
20
24
 
@@ -23,6 +23,10 @@ module Tappay
23
23
  private
24
24
 
25
25
  def get_merchant_id
26
+ # If merchant_group_id is set, it takes precedence
27
+ return nil if Tappay.configuration.merchant_group_id
28
+
29
+ # Otherwise, use line_pay_merchant_id or fall back to default merchant_id
26
30
  Tappay.configuration.line_pay_merchant_id || super
27
31
  end
28
32
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Tappay
4
4
  class PaymentBase < Client
5
- VALID_INSTALMENT_VALUES = [0, 3, 6, 12, 24, 30].freeze
5
+ VALID_INSTALMENT_VALUES = [0, 3, 6, 12, 18, 24, 30].freeze
6
6
 
7
7
  def initialize(options = {})
8
8
  super
@@ -20,48 +20,26 @@ module Tappay
20
20
  end
21
21
 
22
22
  def payment_data
23
- # Check configuration conflicts first
24
- if Tappay.configuration.merchant_group_id && Tappay.configuration.merchant_id
25
- raise Tappay::ValidationError, "merchant_group_id and merchant_id cannot be used together"
26
- end
27
-
28
- # Get values from options
29
- opt_group_id = options[:merchant_group_id]
30
- opt_merchant_id = options[:merchant_id]
31
-
32
- # Check for conflicts in options
33
- if opt_group_id && opt_merchant_id
34
- raise Tappay::ValidationError, "merchant_group_id and merchant_id cannot be used together"
35
- end
36
-
37
- # If options has any ID, use it exclusively
38
- if opt_group_id || opt_merchant_id
39
- merchant_group_id = opt_group_id
40
- merchant_id = opt_merchant_id
23
+ # Prioritize merchant_group_id from options, then configuration
24
+ merchant_group_id = options[:merchant_group_id] || Tappay.configuration.merchant_group_id
25
+ merchant_id = options[:merchant_id] || get_merchant_id
26
+
27
+ # Determine which identifier to use
28
+ identifier = if merchant_group_id
29
+ { merchant_group_id: merchant_group_id }
41
30
  else
42
- # If no options, use configuration
43
- merchant_group_id = Tappay.configuration.merchant_group_id
44
- merchant_id = get_merchant_id
45
- end
46
-
47
- # Check if at least one is provided
48
- unless merchant_group_id || merchant_id
49
- raise Tappay::ValidationError, "Either merchant_group_id or merchant_id must be provided"
31
+ raise Tappay::ValidationError, "Either merchant_group_id or merchant_id must be provided" unless merchant_id
32
+ { merchant_id: merchant_id }
50
33
  end
51
34
 
52
- {
35
+ identifier.merge({
53
36
  partner_key: Tappay.configuration.partner_key,
54
37
  amount: options[:amount],
55
38
  details: options[:details],
56
39
  currency: options[:currency] || 'TWD',
57
40
  order_number: options[:order_number],
58
41
  three_domain_secure: options[:three_domain_secure] || false
59
- }.tap do |data|
60
- if merchant_group_id
61
- data[:merchant_group_id] = merchant_group_id
62
- else
63
- data[:merchant_id] = merchant_id
64
- end
42
+ }).tap do |data|
65
43
  data[:cardholder] = card_holder_data if options[:cardholder]
66
44
  data[:result_url] = options[:result_url] if options[:result_url]
67
45
  data[:instalment] = options[:instalment] || 0
@@ -103,6 +81,10 @@ module Tappay
103
81
  end
104
82
 
105
83
  def get_merchant_id
84
+ # If merchant_group_id is set, it takes precedence over all other merchant IDs
85
+ return nil if Tappay.configuration.merchant_group_id
86
+
87
+ # Otherwise, return the default merchant_id
106
88
  Tappay.configuration.merchant_id
107
89
  end
108
90
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Tappay
4
- VERSION = "0.9.0"
4
+ VERSION = "0.11.0"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tappay_ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zac