paygate-ruby 0.1.7 → 0.1.8
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 +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +41 -14
- data/lib/paygate/helpers/form_helper.rb +131 -56
- data/lib/paygate/transaction.rb +11 -0
- data/lib/paygate/version.rb +1 -1
- data/vendor/assets/javascripts/paygate.js +5 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 21f6f2a0afbfa035e89f89c04e8f062b54483e3df2867f7b8e2aa29ec8c435f5
|
4
|
+
data.tar.gz: 875791a118652b891ff33f31ed0c8756c87857aecc468d000d69c956ccbe71f2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 45186cfc205d6649c9ed40dee2796d1a9e0c8c42be3a6174d3ad3bc865133029cf988ef24aa038debef2aae00550620c4d5a363b0f236fe1007b3f4d1183de59
|
7
|
+
data.tar.gz: f19f08405e3b1f003e1057fd4b8b36c30458aa6abee8cf84bc009ef225cf4a0706e9b5558b28aad13871efc3603ab96716a69e8b0890cdb2d5388d814f315ee6
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,10 @@
|
|
2
2
|
|
3
3
|
## Next
|
4
4
|
|
5
|
+
## 0.1.8 - 2020-02-11
|
6
|
+
|
7
|
+
- [PR#5](https://github.com/jagdeepsingh/paygate-ruby/pull/5) Add `verify` method to Transaction class and more meta fields to the payment form. ([jagdeepsingh](https://github.com/jagdeepsingh))
|
8
|
+
|
5
9
|
## 0.1.7 - 2019-11-01
|
6
10
|
|
7
11
|
- [PR#4](https://github.com/jagdeepsingh/paygate-ruby/pull/4) Update BIN numbers for Korean domestic cards (Oct 2019). ([jagdeepsingh](https://github.com/jagdeepsingh))
|
data/README.md
CHANGED
@@ -40,12 +40,14 @@ NOTE: Unless otherwise stated, all the following documentation is for making pay
|
|
40
40
|
|
41
41
|
Contents:
|
42
42
|
- [1 Purchase](#1-purchase)
|
43
|
-
- [2
|
44
|
-
- [3
|
43
|
+
- [2 Verify](#2-verify)
|
44
|
+
- [3 Refund](#3-refund)
|
45
|
+
- [4 Profile Pay](#4-profile-pay)
|
46
|
+
- [5 JavaScript helpers](#5-javascript-helpers)
|
45
47
|
|
46
48
|
### 1 Purchase
|
47
49
|
|
48
|
-
#### 1.1 Include
|
50
|
+
#### 1.1 Include JavaScript
|
49
51
|
|
50
52
|
Include the _OpenPayAPI.js_ in `<head>` of your payment page.
|
51
53
|
|
@@ -79,6 +81,7 @@ Here is a list of all the form fields which you can set:
|
|
79
81
|
- title
|
80
82
|
- currency (default: 'WON')
|
81
83
|
- amount
|
84
|
+
- meta1, meta2, meta3, meta4, meta5
|
82
85
|
- pay_method (default: 'card')
|
83
86
|
- customer_name
|
84
87
|
- customer_email
|
@@ -87,7 +90,7 @@ Here is a list of all the form fields which you can set:
|
|
87
90
|
- expiry_month
|
88
91
|
- cvv
|
89
92
|
|
90
|
-
The form also contains some fields which
|
93
|
+
The form also contains some fields which are filled after the response is returned by the API. They are:
|
91
94
|
- card_auth_code
|
92
95
|
- response_code
|
93
96
|
- response_message
|
@@ -141,6 +144,10 @@ You need to contact PayGate to know the correct amount for making a successful t
|
|
141
144
|
|
142
145
|
Remember, in test mode too, PayGate makes real transactions and you need to `refund` them.
|
143
146
|
|
147
|
+
**meta1, meta2, meta3, meta4, meta5**
|
148
|
+
|
149
|
+
These fields can be used to pass any additional data to PayGate. If server-to-server callbacks are enabled, the gateway then sends all of these back when making a callback request to your server.
|
150
|
+
|
144
151
|
**tid**
|
145
152
|
|
146
153
|
For every transaction a `tid` is created by PayGate JS before making a request to the API.
|
@@ -165,9 +172,9 @@ You also need to add a screen at the same HTML level as above form. OpenPayAPI p
|
|
165
172
|
= paygate_open_pay_api_screen
|
166
173
|
```
|
167
174
|
|
168
|
-
#### 1.4
|
175
|
+
#### 1.4 JavaScript callback
|
169
176
|
|
170
|
-
You also need to implement a few callbacks to handle the API response. Add these to your
|
177
|
+
You also need to implement a few callbacks to handle the API response. Add these to your JavaScript.
|
171
178
|
|
172
179
|
```js
|
173
180
|
// This is called when a response is returned from PayGate API
|
@@ -206,7 +213,29 @@ $('form[name="PGIOForm"]').on('submit', function(event){
|
|
206
213
|
|
207
214
|
And, your payment form is all set to make payments.
|
208
215
|
|
209
|
-
### 2
|
216
|
+
### 2 Verify
|
217
|
+
|
218
|
+
If enabled, PayGate will send a server-to-server callback on every successful transaction to the URL provided by you. The same request is sent every 5 minutes (for 10 days) until your server responds with success.
|
219
|
+
|
220
|
+
This feature can be helpful if your JavaScript failed to receive the message from PayGate after a successful payment due to network issues.
|
221
|
+
|
222
|
+
So, once you receive a successful JavaScript callback (`replycode == '0000'`), to prevent PayGate from sending any callback requests for that transaction (`tid`), you need to make a verification request as follows:
|
223
|
+
|
224
|
+
```ruby
|
225
|
+
txn = Paygate::Transaction.new('testmid_123456.654321')
|
226
|
+
response = txn.verify
|
227
|
+
=> #<Paygate::Response:0x007fd4898f14b0 ... >
|
228
|
+
|
229
|
+
response.transaction_type
|
230
|
+
=> :verify
|
231
|
+
|
232
|
+
response.http_code
|
233
|
+
=> "200"
|
234
|
+
```
|
235
|
+
|
236
|
+
Here, _testmid_123456.654321_ is `tid` of the transaction you want to verify.
|
237
|
+
|
238
|
+
### 3 Refund
|
210
239
|
|
211
240
|
Initialize a `Paygate::Member` instance using the Member ID and Secret you have.
|
212
241
|
|
@@ -225,7 +254,7 @@ member.secret
|
|
225
254
|
=> "secret"
|
226
255
|
```
|
227
256
|
|
228
|
-
####
|
257
|
+
#### 3.1 Full refund
|
229
258
|
|
230
259
|
```ruby
|
231
260
|
response = member.refund_transaction('testmid_123456.654321')
|
@@ -233,8 +262,6 @@ response = member.refund_transaction('testmid_123456.654321')
|
|
233
262
|
#<OpenStruct tid="testmid_123456.654321", tid_enc="AES256XQIdNnkzFwMQmhF7fuJhS3m0\n", request_url="https://service.paygate.net/service/cancelAPI.json?callback=callback&mid=testmid&tid=AES256XQIdNnkzFwMQmhF7fuJhS3m0%0A&amount=F">>
|
234
263
|
```
|
235
264
|
|
236
|
-
Here, _testmid_123456.654321_ is `tid` of the transaction you want to refund.
|
237
|
-
|
238
265
|
`response` provides some helpful accessor methods too.
|
239
266
|
|
240
267
|
```ruby
|
@@ -256,7 +283,7 @@ response.raw_info.request_url
|
|
256
283
|
|
257
284
|
Apart from these it also responds to `message` and `body`.
|
258
285
|
|
259
|
-
####
|
286
|
+
#### 3.2 Partial refund
|
260
287
|
|
261
288
|
For partial refunds, you need to pass `amount` as an option to `refund_transaction` method along with other options.
|
262
289
|
|
@@ -266,7 +293,7 @@ response = member.refund_transaction('testmid_123456.654321',
|
|
266
293
|
order_id: 'ord10001')
|
267
294
|
```
|
268
295
|
|
269
|
-
###
|
296
|
+
### 4 Profile Pay
|
270
297
|
|
271
298
|
You can use the `profile_no` returned from the OpenPayAPI after first payment by a customer to make future payments for him.
|
272
299
|
|
@@ -283,9 +310,9 @@ response.json
|
|
283
310
|
=> {"validecode"=>"00", "authcode"=>"12345678", "authdt"=>"20171120165728", "cardname"=>"BC \x00\x00\x00\x00", "cardnumber"=>"411111**********", "cardtype"=>"301310", "cardquota"=>"00", "cardexpiremonth"=>"11", "cardexpireyear"=>"2020", "merchantno"=>"12345678", "m_tid"=>nil, "paymethodname"=>"CARD_BASIC", "ReplyMsg"=>"\xBA\xBA\xBC\xBD\xC1\xC2\xC3\xC4 OK: 12345678", "ReplyCode"=>"0000", "receipttoname"=>"Test name\xC1\xD1\xB1\xB1\xC1\xA1", "receipttoemail"=>"dev@paygate.net", "subtotalprice"=>"1000", "transactionid"=>"testmid_123456.654321", "hashresult"=>"db1fdc6789cc8d088172b79ca680b3af8711e9fb32", "mb_serial_no"=>"\r\n"}
|
284
311
|
```
|
285
312
|
|
286
|
-
###
|
313
|
+
### 5 JavaScript helpers
|
287
314
|
|
288
|
-
`paygate-ruby` also provides a
|
315
|
+
`paygate-ruby` also provides a JavaScript class `Paygate` with some helper functions that can be used in your JavaScript e.g.
|
289
316
|
|
290
317
|
- _openPayApiForm_ - Returns the payment form
|
291
318
|
- _openPayApiScreen_ - Returns the screen for paygate API response
|
@@ -1,5 +1,127 @@
|
|
1
1
|
module Paygate
|
2
2
|
module FormHelper
|
3
|
+
FORM_TEXT_FIELDS = {
|
4
|
+
mid: {
|
5
|
+
placeholder: 'Member ID'
|
6
|
+
},
|
7
|
+
|
8
|
+
locale: {
|
9
|
+
name: 'langcode',
|
10
|
+
default: 'KR',
|
11
|
+
placeholder: 'Language'
|
12
|
+
},
|
13
|
+
|
14
|
+
charset: {
|
15
|
+
default: 'UTF-8',
|
16
|
+
placeholder: 'Charset'
|
17
|
+
},
|
18
|
+
|
19
|
+
title: {
|
20
|
+
name: 'goodname',
|
21
|
+
placeholder: 'Title'
|
22
|
+
},
|
23
|
+
|
24
|
+
currency: {
|
25
|
+
name: 'goodcurrency',
|
26
|
+
default: 'WON',
|
27
|
+
placeholder: 'Currency'
|
28
|
+
},
|
29
|
+
|
30
|
+
amount: {
|
31
|
+
name: 'unitprice',
|
32
|
+
placeholder: 'Amount'
|
33
|
+
},
|
34
|
+
|
35
|
+
meta1: {
|
36
|
+
name: 'goodoption1',
|
37
|
+
placeholder: 'Good Option 1'
|
38
|
+
},
|
39
|
+
|
40
|
+
meta2: {
|
41
|
+
name: 'goodoption2',
|
42
|
+
placeholder: 'Good Option 2'
|
43
|
+
},
|
44
|
+
|
45
|
+
meta3: {
|
46
|
+
name: 'goodoption3',
|
47
|
+
placeholder: 'Good Option 3'
|
48
|
+
},
|
49
|
+
|
50
|
+
meta4: {
|
51
|
+
name: 'goodoption4',
|
52
|
+
placeholder: 'Good Option 4'
|
53
|
+
},
|
54
|
+
|
55
|
+
meta5: {
|
56
|
+
name: 'goodoption5',
|
57
|
+
placeholder: 'Good Option 5'
|
58
|
+
},
|
59
|
+
|
60
|
+
pay_method: {
|
61
|
+
name: 'paymethod',
|
62
|
+
default: 'card',
|
63
|
+
placeholder: 'Pay Method'
|
64
|
+
},
|
65
|
+
|
66
|
+
customer_name: {
|
67
|
+
name: 'receipttoname',
|
68
|
+
placeholder: 'Customer Name'
|
69
|
+
},
|
70
|
+
|
71
|
+
customer_email: {
|
72
|
+
name: 'receipttoemail',
|
73
|
+
placeholder: 'Customer Email'
|
74
|
+
},
|
75
|
+
|
76
|
+
card_number: {
|
77
|
+
name: 'cardnumber',
|
78
|
+
placeholder: 'Card Number'
|
79
|
+
},
|
80
|
+
|
81
|
+
expiry_year: {
|
82
|
+
name: 'cardexpireyear',
|
83
|
+
placeholder: 'Expiry Year'
|
84
|
+
},
|
85
|
+
|
86
|
+
expiry_month: {
|
87
|
+
name: 'cardexpiremonth',
|
88
|
+
placeholder: 'Expiry Month'
|
89
|
+
},
|
90
|
+
|
91
|
+
cvv: {
|
92
|
+
name: 'cardsecretnumber',
|
93
|
+
placeholder: 'CVV'
|
94
|
+
},
|
95
|
+
|
96
|
+
card_auth_code: {
|
97
|
+
name: 'cardauthcode',
|
98
|
+
placeholder: 'Card Auth Code'
|
99
|
+
},
|
100
|
+
|
101
|
+
response_code: {
|
102
|
+
name: 'replycode',
|
103
|
+
placeholder: 'Response Code'
|
104
|
+
},
|
105
|
+
|
106
|
+
response_message: {
|
107
|
+
name: 'replyMsg',
|
108
|
+
placeholder: 'Response Message'
|
109
|
+
},
|
110
|
+
|
111
|
+
tid: {
|
112
|
+
placeholder: 'TID'
|
113
|
+
},
|
114
|
+
|
115
|
+
profile_no: {
|
116
|
+
placeholder: 'Profile No'
|
117
|
+
},
|
118
|
+
|
119
|
+
hash_result: {
|
120
|
+
name: 'hashresult',
|
121
|
+
placeholder: 'Hash Result'
|
122
|
+
}
|
123
|
+
}
|
124
|
+
|
3
125
|
def paygate_open_pay_api_js_url
|
4
126
|
(Paygate.configuration.mode == :live) ?
|
5
127
|
'https://api.paygate.net/ajax/common/OpenPayAPI.js'.freeze :
|
@@ -10,62 +132,15 @@ module Paygate
|
|
10
132
|
form_tag({}, name: 'PGIOForm') do
|
11
133
|
fields = []
|
12
134
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
fields << text_field_tag(:title, options[:title].try(:[], :value),
|
23
|
-
name: 'goodname', placeholder: options[:title].try(:[], :placeholder) || 'Title').html_safe
|
24
|
-
|
25
|
-
fields << text_field_tag(:currency, options[:currency].try(:[], :value) || 'WON',
|
26
|
-
name: 'goodcurrency', placeholder: options[:currency].try(:[], :placeholder) || 'Currency').html_safe
|
27
|
-
|
28
|
-
fields << text_field_tag(:amount, options[:amount].try(:[], :value),
|
29
|
-
name: 'unitprice', placeholder: options[:amount].try(:[], :placeholder) || 'Amount').html_safe
|
30
|
-
|
31
|
-
fields << text_field_tag(:pay_method, options[:pay_method].try(:[], :value) || 'card',
|
32
|
-
name: 'paymethod', placeholder: options[:pay_method].try(:[], :placeholder) || 'Pay Method').html_safe
|
33
|
-
|
34
|
-
fields << text_field_tag(:customer_name, options[:customer_name].try(:[], :value),
|
35
|
-
name: 'receipttoname', placeholder: options[:customer_name].try(:[], :placeholder) || 'Customer Name').html_safe
|
36
|
-
|
37
|
-
fields << text_field_tag(:customer_email, options[:customer_email].try(:[], :value),
|
38
|
-
name: 'receipttoemail', placeholder: options[:customer_email].try(:[], :placeholder) || 'Customer Email').html_safe
|
39
|
-
|
40
|
-
fields << text_field_tag(:card_number, options[:card_number].try(:[], :value),
|
41
|
-
name: 'cardnumber', placeholder: options[:card_number].try(:[], :placeholder) || 'Card Number').html_safe
|
42
|
-
|
43
|
-
fields << text_field_tag(:expiry_year, options[:expiry_year].try(:[], :value),
|
44
|
-
name: 'cardexpireyear', placeholder: options[:expiry_year].try(:[], :placeholder) || 'Expiry Year').html_safe
|
45
|
-
|
46
|
-
fields << text_field_tag(:expiry_month, options[:expiry_month].try(:[], :value),
|
47
|
-
name: 'cardexpiremonth', placeholder: options[:expiry_month].try(:[], :placeholder) || 'Expiry Month').html_safe
|
48
|
-
|
49
|
-
fields << text_field_tag(:cvv, options[:cvv].try(:[], :value),
|
50
|
-
name: 'cardsecretnumber', placeholder: options[:cvv].try(:[], :placeholder) || 'CVV').html_safe
|
51
|
-
|
52
|
-
fields << text_field_tag(:card_auth_code, nil,
|
53
|
-
name: 'cardauthcode', placeholder: options[:card_auth_code].try(:[], :placeholder) || 'Card Auth Code').html_safe
|
54
|
-
|
55
|
-
fields << text_field_tag(:response_code, nil,
|
56
|
-
name: 'replycode', placeholder: options[:response_code].try(:[], :placeholder) || 'Response Code').html_safe
|
57
|
-
|
58
|
-
fields << text_field_tag(:response_message, nil,
|
59
|
-
name: 'replyMsg', placeholder: options[:response_message].try(:[], :placeholder) || 'Response Message').html_safe
|
60
|
-
|
61
|
-
fields << text_field_tag(:tid, nil,
|
62
|
-
placeholder: options[:tid].try(:[], :placeholder) || 'TID').html_safe
|
63
|
-
|
64
|
-
fields << text_field_tag(:profile_no, nil,
|
65
|
-
placeholder: options[:profile_no].try(:[], :placeholder) || 'Profile No').html_safe
|
66
|
-
|
67
|
-
fields << text_field_tag(:hash_result, nil,
|
68
|
-
name: 'hashresult', placeholder: options[:hash_result].try(:[], :placeholder) || 'Hash Result').html_safe
|
135
|
+
FORM_TEXT_FIELDS.each do |key, opts|
|
136
|
+
arg_opts = options[key] || {}
|
137
|
+
fields << text_field_tag(
|
138
|
+
key,
|
139
|
+
arg_opts[:value] || opts[:default],
|
140
|
+
name: opts[:name] || key.to_s,
|
141
|
+
placeholder: arg_opts[:placeholder] || opts[:placeholder]
|
142
|
+
).html_safe
|
143
|
+
end
|
69
144
|
|
70
145
|
fields.join.html_safe
|
71
146
|
end.html_safe
|
data/lib/paygate/transaction.rb
CHANGED
@@ -36,6 +36,17 @@ module Paygate
|
|
36
36
|
r
|
37
37
|
end
|
38
38
|
|
39
|
+
# Doc: https://km.paygate.net/pages/viewpage.action?pageId=9207875
|
40
|
+
def verify
|
41
|
+
params = { tid: tid, verifyNum: 100 }
|
42
|
+
|
43
|
+
uri = URI('https://service.paygate.net/djemals/settle/verifyReceived.jsp')
|
44
|
+
uri.query = ::URI.encode_www_form(params)
|
45
|
+
response = ::Net::HTTP.get_response(uri)
|
46
|
+
|
47
|
+
Response.build_from_net_http_response(:verify, response)
|
48
|
+
end
|
49
|
+
|
39
50
|
private
|
40
51
|
|
41
52
|
def self.refund_api_url
|
data/lib/paygate/version.rb
CHANGED
@@ -8,6 +8,11 @@ window.Paygate = (function() {
|
|
8
8
|
title: 'goodname',
|
9
9
|
currency: 'goodcurrency',
|
10
10
|
amount: 'unitprice',
|
11
|
+
meta1: 'goodoption1',
|
12
|
+
meta2: 'goodoption2',
|
13
|
+
meta3: 'goodoption3',
|
14
|
+
meta4: 'goodoption4',
|
15
|
+
meta5: 'goodoption5',
|
11
16
|
payMethod: 'paymethod',
|
12
17
|
customerName: 'receipttoname',
|
13
18
|
customerEmail: 'receipttoemail',
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: paygate-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- jagdeepsingh
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-02-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|