bootpay 1.2.0 → 3.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 (101) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +8 -9
  3. data/.rspec +2 -0
  4. data/CHANGELOG.md +63 -21
  5. data/CODE_OF_CONDUCT.md +1 -1
  6. data/Gemfile +2 -4
  7. data/LICENSE.txt +1 -1
  8. data/README.md +309 -196
  9. data/Rakefile +3 -3
  10. data/bin/console +1 -1
  11. data/bootpay.gemspec +23 -20
  12. data/lib/bootpay/bootpay-rest-client.rb +51 -0
  13. data/lib/bootpay/concern/authenticate.rb +69 -0
  14. data/lib/bootpay/concern/cash_receipt.rb +83 -0
  15. data/lib/bootpay/concern/easy.rb +18 -0
  16. data/lib/bootpay/concern/escrow.rb +25 -0
  17. data/lib/bootpay/concern/payment.rb +126 -0
  18. data/lib/bootpay/concern/reseller.rb +97 -0
  19. data/lib/bootpay/concern/rest.rb +56 -0
  20. data/lib/bootpay/concern/sdk.rb +52 -0
  21. data/lib/bootpay/concern/seller.rb +15 -0
  22. data/lib/bootpay/concern/service.rb +15 -0
  23. data/lib/bootpay/concern/subscription.rb +211 -0
  24. data/lib/bootpay/concern/token.rb +33 -0
  25. data/lib/bootpay/concern/user_token.rb +23 -0
  26. data/lib/bootpay/concern/wallet.rb +20 -0
  27. data/lib/bootpay/concern/webhook.rb +18 -0
  28. data/lib/bootpay/concern.rb +35 -0
  29. data/lib/bootpay-backend-ruby.rb +6 -0
  30. data/lib/bootpay.rb +10 -66
  31. data/lib/bootpay_storage/bootpay-storage-rest-client.rb +46 -0
  32. data/lib/bootpay_storage/concern/csv.rb +18 -0
  33. data/lib/bootpay_storage/concern/image.rb +30 -0
  34. data/lib/bootpay_storage/concern/rest.rb +176 -0
  35. data/lib/bootpay_storage/concern/token.rb +9 -0
  36. data/lib/bootpay_storage/concern.rb +12 -0
  37. data/lib/bootpay_storage/response.rb +14 -0
  38. data/lib/bootpay_store/bootpay-store-rest-client.rb +47 -0
  39. data/lib/bootpay_store/concern/alimtalk_message.rb +67 -0
  40. data/lib/bootpay_store/concern/alimtalk_official.rb +63 -0
  41. data/lib/bootpay_store/concern/alimtalk_optout.rb +72 -0
  42. data/lib/bootpay_store/concern/alimtalk_send.rb +83 -0
  43. data/lib/bootpay_store/concern/alimtalk_sender.rb +105 -0
  44. data/lib/bootpay_store/concern/alimtalk_template.rb +215 -0
  45. data/lib/bootpay_store/concern/alimtalk_webhook.rb +84 -0
  46. data/lib/bootpay_store/concern/invoice.rb +102 -0
  47. data/lib/bootpay_store/concern/mall_setting.rb +385 -0
  48. data/lib/bootpay_store/concern/order.rb +74 -0
  49. data/lib/bootpay_store/concern/order_subscription.rb +391 -0
  50. data/lib/bootpay_store/concern/payment.rb +119 -0
  51. data/lib/bootpay_store/concern/product.rb +175 -0
  52. data/lib/bootpay_store/concern/rest.rb +128 -0
  53. data/lib/bootpay_store/concern/store.rb +31 -0
  54. data/lib/bootpay_store/concern/supervisor.rb +211 -0
  55. data/lib/bootpay_store/concern/token.rb +24 -0
  56. data/lib/bootpay_store/concern/user.rb +325 -0
  57. data/lib/bootpay_store/concern/user_group.rb +221 -0
  58. data/lib/bootpay_store/concern/webhook.rb +17 -0
  59. data/lib/bootpay_store/concern.rb +45 -0
  60. data/lib/bootpay_store/response.rb +14 -0
  61. data/lib/version.rb +9 -0
  62. metadata +77 -49
  63. data/.DS_Store +0 -0
  64. data/.env.example +0 -23
  65. data/lib/.DS_Store +0 -0
  66. data/lib/bootpay/.DS_Store +0 -0
  67. data/lib/bootpay/authentication.rb +0 -61
  68. data/lib/bootpay/automatic_transfer.rb +0 -56
  69. data/lib/bootpay/billing.rb +0 -157
  70. data/lib/bootpay/cancel.rb +0 -29
  71. data/lib/bootpay/cash_receipt.rb +0 -77
  72. data/lib/bootpay/commerce/cart.rb +0 -20
  73. data/lib/bootpay/commerce/category.rb +0 -39
  74. data/lib/bootpay/commerce/commerce_resource.rb +0 -196
  75. data/lib/bootpay/commerce/coupon.rb +0 -41
  76. data/lib/bootpay/commerce/invoice.rb +0 -46
  77. data/lib/bootpay/commerce/order.rb +0 -61
  78. data/lib/bootpay/commerce/order_cancel.rb +0 -52
  79. data/lib/bootpay/commerce/order_subscription.rb +0 -117
  80. data/lib/bootpay/commerce/order_subscription_adjustment.rb +0 -29
  81. data/lib/bootpay/commerce/order_subscription_bill.rb +0 -50
  82. data/lib/bootpay/commerce/order_subscription_request.rb +0 -60
  83. data/lib/bootpay/commerce/point.rb +0 -36
  84. data/lib/bootpay/commerce/product.rb +0 -63
  85. data/lib/bootpay/commerce/store.rb +0 -21
  86. data/lib/bootpay/commerce/user.rb +0 -75
  87. data/lib/bootpay/commerce/user_group.rb +0 -70
  88. data/lib/bootpay/easy.rb +0 -25
  89. data/lib/bootpay/escrow.rb +0 -24
  90. data/lib/bootpay/link.rb +0 -60
  91. data/lib/bootpay/naverpay.rb +0 -17
  92. data/lib/bootpay/payment_resource.rb +0 -31
  93. data/lib/bootpay/reseller.rb +0 -12
  94. data/lib/bootpay/rest.rb +0 -46
  95. data/lib/bootpay/submit.rb +0 -20
  96. data/lib/bootpay/token.rb +0 -33
  97. data/lib/bootpay/verification.rb +0 -55
  98. data/lib/bootpay/version.rb +0 -25
  99. data/lib/bootpay/wallet.rb +0 -56
  100. data/lib/bootpay_commerce.rb +0 -152
  101. /data/lib/{response.rb → bootpay/response.rb} +0 -0
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
+ # Bootpay Ruby Server Side Library
1
2
 
2
- ## Bootpay Ruby Server Side Library
3
3
  부트페이 공식 Ruby 라이브러리 입니다 (서버사이드 용)
4
4
 
5
5
  Ruby 언어로 작성된 어플리케이션, 프레임워크 등에서 사용가능합니다.
@@ -8,279 +8,392 @@ Ruby 언어로 작성된 어플리케이션, 프레임워크 등에서 사용가
8
8
  * 결제 검증 및 취소, 빌링키 발급, 본인인증 등의 수행은 서버사이드에서 진행됩니다. (Java, PHP, Python, Ruby, Node.js, Go, ASP.NET 등)
9
9
 
10
10
 
11
- ## 기능
12
- 1. (부트페이 통신을 위한) 토큰 발급 요청
13
- 2. 결제 검증
14
- 3. 결제 취소 (전액 취소 / 부분 취소)
15
- 4. 빌링키 발급
16
-
17
- 4-1. 발급된 빌링키로 결제 승인 요청
18
-
19
- 4-2. 발급된 빌링키로 결제 승인 예약 요청
20
-
21
- 4-2-1. 발급된 빌링키로 결제 승인 예약 - 취소 요청
22
-
23
- 4-3. 빌링키 삭제
24
- 5. (부트페이 단독) 사용자 토큰 발급
25
- 6. (부트페이 단독) 결제 링크 생성
26
- 7. 서버 승인 요청
27
- 8. 본인 인증 결과 조회
28
-
29
- ## Gem으로 설치하기
30
-
11
+ ## 목차
12
+ - [사용하기](#사용하기)
13
+ - [1. 토큰 발급](#1-토큰-발급)
14
+ - [2. 결제 단건 조회](#2-결제-단건-조회)
15
+ - [3. 결제 취소 (전액 취소 / 부분 취소)](#3-결제-취소-전액-취소--부분-취소)
16
+ - [4. 자동/빌링/정기 결제](#4-자동빌링정기-결제)
17
+ - [4-1. 카드 빌링키 발급](#4-1-카드-빌링키-발급)
18
+ - [4-2. 계좌 빌링키 발급](#4-2-계좌-빌링키-발급)
19
+ - [4-3. 결제 요청하기](#4-3-결제-요청하기)
20
+ - [4-4. 결제 예약하기](#4-4-결제-예약하기)
21
+ - [4-5. 예약 조회하기](#4-5-예약-조회하기)
22
+ - [4-6. 예약 취소하기](#4-6-예약-취소하기)
23
+ - [4-7. 빌링키 삭제하기](#4-7-빌링키-삭제하기)
24
+ - [4-8. 빌링키 조회하기](#4-8-빌링키-조회하기)
25
+ - [5. 회원 토큰 발급요청](#5-회원-토큰-발급요청)
26
+ - [6. 서버 승인 요청](#6-서버-승인-요청)
27
+ - [7. 본인 인증 결과 조회](#7-본인-인증-결과-조회)
28
+ - [8. 에스크로 이용시 PG사로 배송정보 보내기](#8-에스크로-이용시-pg사로-배송정보-보내기)
29
+ - [9-1. 현금영수증 발행하기](#9-1-현금영수증-발행하기)
30
+ - [9-2. 현금영수증 발행 취소](#9-2-현금영수증-발행-취소)
31
+ - [9-3. 별건 현금영수증 발행](#9-3-별건-현금영수증-발행)
32
+ - [9-4. 별건 현금영수증 발행 취소](#9-4-별건-현금영수증-발행-취소)
33
+ - [Example 프로젝트](#example-프로젝트)
34
+ - [Documentation](#documentation)
35
+ - [기술문의](#기술문의)
36
+ - [License](#license)
37
+
38
+
39
+ ## Gem으로 설치하기
40
+
41
+ > ℹ️ **3.0.0 부터 gem 이름이 `bootpay` 입니다.** 구 이름 `bootpay-backend-ruby` 는 신규 릴리스가
42
+ > 나가지 않습니다. 쓰시던 분은 Gemfile 만 바꾸면 되고 `require 'bootpay-backend-ruby'` 도 그대로 동작합니다.
43
+ >
44
+ > `bootpay` **1.x 는 별개 계보**입니다. 1.x 를 계속 쓰시려면 `gem 'bootpay', '~> 1.2'` 로 고정하세요.
31
45
 
32
46
  ```ruby
33
- gem 'bootpay'
47
+ gem 'bootpay', '~> 3.0'
34
48
  ```
35
49
 
36
50
  Gemfile에 위 라인을 추가하고, 아래 라인으로 인스톨 합니다.
37
-
38
- $ bundle install
39
-
51
+ ```ruby
52
+ $ bundle install
53
+ ```
40
54
 
41
55
 
42
56
  또는 아래 문장을 통해 바로 설치할 수 있습니다:
43
-
44
- $ gem install backend-ruby
45
-
46
- #
47
- ## 환경변수 설정
48
-
49
- 예제와 테스트는 각 SDK 루트의 `.env` 파일을 우선 읽습니다. 먼저 `.env.example`을 복사한 뒤 필요한 키만 변경하세요. `.env`는 gitignore 처리되어 커밋되지 않습니다.
50
-
51
- ```bash
52
- cp .env.example .env
53
- # BOOTPAY_ENV=production 또는 development
54
- ```
55
-
56
- 주요 변수:
57
-
58
- ```env
59
- BOOTPAY_ENV=production
60
- BOOTPAY_PG_CLIENT_KEY_PROD=...
61
- BOOTPAY_PG_SECRET_KEY_PROD=...
62
- BOOTPAY_PG_CLIENT_KEY_DEV=...
63
- BOOTPAY_PG_SECRET_KEY_DEV=...
64
- BOOTPAY_COMMERCE_CLIENT_KEY_PROD=...
65
- BOOTPAY_COMMERCE_SECRET_KEY_PROD=...
66
- BOOTPAY_COMMERCE_CLIENT_KEY_DEV=...
67
- BOOTPAY_COMMERCE_SECRET_KEY_DEV=...
57
+ ```ruby
58
+ $ gem install bootpay
68
59
  ```
69
60
 
70
- 변수가 없으면 SDK 테스트용 기본값(NodeJS 기준 ck/sk)으로 fallback 합니다.
71
-
72
- # 사용하기
61
+ ## 사용하기
73
62
 
74
63
  ```ruby
75
64
 
76
65
  require 'bootpay'
77
66
 
78
- @api = Bootpay::Api.new(
79
- client_key: ENV.fetch('BOOTPAY_PG_CLIENT_KEY_PROD'),
80
- secret_key: ENV.fetch('BOOTPAY_PG_SECRET_KEY_PROD'),
81
- )
82
- # Legacy application_id/private_key 방식도 계속 지원됩니다.
67
+ @api = Bootpay::RestClient.new(
68
+ application_id: '5b8f6a4d396fa665fdc2b5ea',
69
+ private_key: 'rm6EYECr6aroQVG2ntW0A6LpWnkTgP4uQ3H18sDDUYw=',
70
+ )
71
+
83
72
  response = @api.request_access_token
84
73
  if response.success?
85
74
  puts response.data.to_json
86
75
  end
87
76
  ```
88
- 함수 단위의 샘플 코드는 [이곳](https://github.com/bootpay/backend-ruby/tree/main/spec/pg)을 참조하세요.
77
+ 함수 단위의 샘플 코드는 [이곳](https://github.com/bootpay/backend-ruby/tree/2-x-development/spec/bootpay)을 참조하세요.
89
78
 
90
79
 
91
- ## 1. 토큰 발급
80
+ ## 1. 토큰 발급
92
81
 
93
82
  부트페이와 서버간 통신을 하기 위해서는 부트페이 서버로부터 토큰을 발급받아야 합니다.
94
83
  발급된 토큰은 30분간 유효하며, 최초 발급일로부터 30분이 지날 경우 토큰 발급 함수를 재호출 해주셔야 합니다.
95
84
  ```ruby
96
- def get_token
97
- response = @api.request_access_token
98
- if response.success?
99
- puts response.data.to_json
100
- end
101
- end
85
+ api = Bootpay::RestClient.new(
86
+ application_id: '59bfc738e13f337dbd6ca48a',
87
+ private_key: 'pDc0NwlkEX3aSaHTp/PPL/i8vn5E/CqRChgyEp/gHD0='
88
+ )
89
+
90
+ api.request_access_token.success?
102
91
  ```
103
92
 
104
93
 
105
- ## 2. 결제 검증
106
- 결제창 및 정기결제에서 승인/취소된 결제건에 대하여 올바른 결제건인지 서버간 통신으로 결제검증을 합니다.
94
+ ## 2. 결제 단건 조회
95
+ 승인/취소된 결제건을 조회합니다. 위변조된 결제인지 검증하기 위해 사용됩니다.
107
96
  ```ruby
108
- def verification
109
- receipt_id = '612df0250d681b001de61de6'
110
- if @api.request_access_token.success?
111
- response = @api.verify(receipt_id)
112
- puts response.data.to_json
113
- end
97
+ api = Bootpay::RestClient.new(
98
+ application_id: '59bfc738e13f337dbd6ca48a',
99
+ private_key: 'pDc0NwlkEX3aSaHTp/PPL/i8vn5E/CqRChgyEp/gHD0='
100
+ )
101
+
102
+ if api.request_access_token.success?
103
+ response = api.receipt_payment(
104
+ "62a818cf1fc19203154a8f2e"
105
+ )
106
+ puts response.data.to_json
114
107
  end
115
108
  ```
116
109
 
117
110
 
118
111
  ## 3. 결제 취소 (전액 취소 / 부분 취소)
119
- price를 지정하지 않으면 전액취소 됩니다.
112
+ price를 지정하지 않으면 전액취소 됩니다.
120
113
  * 휴대폰 결제의 경우 이월될 경우 이통사 정책상 취소되지 않습니다
121
114
  * 정산받으실 금액보다 취소금액이 클 경우 PG사 정책상 취소되지 않을 수 있습니다. 이때 PG사에 문의하시면 되겠습니다.
122
- * 가상계좌의 경우 CMS 특약이 되어있지 않으면 취소되지 않습니다. 그러므로 결제 테스트시에는 가상계좌로 테스트 하지 않길 추천합니다.
115
+ * 가상계좌의 경우 CMS 특약이 되어있지 않으면 취소되지 않습니다. 그러므로 결제 테스트시에는 가상계좌로 테스트 하지 않길 추천합니다.
123
116
 
124
- 부분취는 카드로 결제된 건만 가능하며, 일부 PG사만 지원합니다. 요청시 price에 금액을 지정하시면 되겠습니다.
117
+ 부분취는 카드로 결제된 건만 가능하며, 일부 PG사만 지원합니다. 요청시 price에 금액을 지정하시면 되겠습니다.
125
118
  * (지원가능 PG사: 이니시스, kcp, 다날, 페이레터, 나이스페이, 카카오페이, 페이코)
126
119
 
127
- 간혹 개발사에서 실수로 여러번 부분취소를 보내서 여러번 취소되는 경우가 있기때문에, 부트페이에서는 부분취소 중복 요청을 막기 위해 cancel_id 라는 필드를 추가했습니다. cancel_id를 지정하시면, 해당 건에 대해 중복 요청방지가 가능합니다.
120
+ 간혹 개발사에서 실수로 여러번 부분취소를 보내서 여러번 취소되는 경우가 있기때문에, 부트페이에서는 부분취소 중복 요청을 막기 위해 cancel_id 라는 필드를 추가했습니다. cancel_id를 지정하시면, 해당 건에 대해 중복 요청방지가 가능합니다.
128
121
  ```ruby
129
- def cancel
130
- if @api.request_access_token.success?
131
- response = @api.cancel_payment(
132
- receipt_id: "612df0250d681b001de61de6",
133
- cancel_username: 'test',
134
- cancel_message: 'test',
135
- cancel_price: 1000, # 부분취소 요청시
136
- refund: { # 가상계좌 환불 요청시, 단 CMS 특약이 되어있어야만 환불요청이 가능하다.
137
- account: '675601010124', # 환불계좌
138
- accountholder: '홍길동', # 환불계좌주
139
- bankcode: Bootpay::BANKCODE["국민은행"] # 은행코드
140
- }
141
- )
142
- puts response.data.to_json
143
- end
122
+ api = Bootpay::RestClient.new(
123
+ application_id: '59bfc738e13f337dbd6ca48a',
124
+ private_key: 'pDc0NwlkEX3aSaHTp/PPL/i8vn5E/CqRChgyEp/gHD0='
125
+ )
126
+ if api.request_access_token.success?
127
+ response = api.cancel_payment(
128
+ receipt_id: "624a56111fc19202e4746df2",
129
+ cancel_price: 1000,
130
+ cancel_username: 'test_user',
131
+ cancel_message: 'test_message',
132
+ )
133
+ puts response.data.to_json
144
134
  end
145
135
  ```
146
136
 
147
- ## 4. 빌링키 발급
148
- REST API 방식으로 고객으로부터 카드 정보를 전달하여, PG사에게 빌링키를 발급받을 수 있습니다.
137
+ ## 4-1. 카드 빌링키 발급
138
+ REST API 방식으로 고객의 카드 정보를 전달하여, PG사로부터 빌링키를 발급받을 수 있습니다. (부트페이에서는 PG사의 빌링키를 개발사에게 전달하지 않고, 부트페이가 내부적으로 발급한 빌링키를 전달합니다)
149
139
  발급받은 빌링키를 저장하고 있다가, 원하는 시점, 원하는 금액에 결제 승인 요청하여 좀 더 자유로운 결제시나리오에 적용이 가능합니다.
150
- * 비인증 정기결제(REST API) 방식을 지원하는 PG사만 사용 가능합니다.
140
+ * 비인증 정기결제(REST API) 방식을 지원하는 PG사만 사용 가능합니다.
151
141
  ```ruby
152
- def get_billing_key
153
- if @api.request_access_token.success?
154
- response = @api.get_billing_key(
155
- order_id: '1234',
156
- pg: 'nicepay',
157
- item_name: '테스트 결제',
158
- card_no: '', # 할당 필요
159
- card_pw: '', # 값 할당 필요
160
- expire_year: '', # 값 할당 필요
161
- expire_month: '', # 값 할당 필요
162
- identify_number: '' # 값 할당 필요
163
- )
164
- puts response.data.to_json
165
- end
142
+ api = Bootpay::RestClient.new(
143
+ application_id: '59bfc738e13f337dbd6ca48a',
144
+ private_key: 'pDc0NwlkEX3aSaHTp/PPL/i8vn5E/CqRChgyEp/gHD0='
145
+ )
146
+
147
+ if api.request_access_token.success?
148
+ response = @api.request_subscribe_billing_key(
149
+ subscription_id: '1234',
150
+ pg: 'nicepay',
151
+ order_name: '테스트 결제',
152
+ card_no: '', # 값 할당 필요, 카드번호
153
+ card_pw: '', # 값 할당 필요, 카드 비밀번호 2자리
154
+ card_expire_year: '', # 값 할당 필요, 카드 유효기간 연도 2자리
155
+ card_expire_month: '', # 값 할당 필요, 카드 유효기간 월 2자리
156
+ card_identity_no: '' # 값 할당 필요, 카드 소유주 생년월일
157
+ )
158
+ puts response.data.to_json
166
159
  end
160
+
161
+ ```
162
+
163
+
164
+ ## 4-2. 계좌 빌링키 발급
165
+ REST API 방식으로 고객의 계좌 정보를 전달하여, PG사에게 빌링키 발급을 요청합니다. 요청 후 빌링키가 바로 발급되진 않고, 출금동의 확인 절차까지 진행해야 빌링키가 발급됩니다.
166
+ 먼저 빌링키를 요청합니다.
167
+ ```ruby
168
+ res1 = api.request_subscribe_automatic_transfer_billing_key(
169
+ pg: 'nicepay',
170
+ order_name: '테스트 결제',
171
+ price: 100,
172
+ tax_free: 0,
173
+ subscription_id: Time.current.to_i,
174
+ username: '홍길동',
175
+ user: {
176
+ phone: '01012341234',
177
+ username: '홍길동',
178
+ email: 'test@bootpay.co.kr'
179
+ },
180
+ bank_name: '국민',
181
+ bank_account: '675123412342472',
182
+ identity_no: '901014',
183
+ cash_receipt_identity_no: '01012341234',
184
+ phone: '01012341234',
185
+ )
186
+ print res1.data.to_json
187
+ ```
188
+ 이후 빌링키 발급 요청시 응답받은 receipt_id로, 출금 동의 확인을 요청합니다.
189
+
190
+ ```ruby
191
+ res2 = api.publish_automatic_transfer_billing_key(receipt_id: res1.data[:receipt_id])
192
+ print "\n\n" + res2.data.to_json
167
193
  ```
168
194
 
169
- ## 4-1. 발급된 빌링키로 결제 승인 요청
195
+
196
+ ## 4-3. 결제 요청하기
170
197
  발급된 빌링키로 원하는 시점에 원하는 금액으로 결제 승인 요청을 할 수 있습니다. 잔액이 부족하거나 도난 카드 등의 특별한 건이 아니면 PG사에서 결제를 바로 승인합니다.
171
198
 
172
199
  ```ruby
173
- def subscribe_billing
174
- billing_key = '612deb53019943001fb52312'
175
- if @api.request_access_token.success?
176
- response = @api.subscribe_billing(
177
- billing_key: billing_key,
178
- item_name: '테스트 결제',
179
- price: 1000,
180
- tax_free: 1000,
181
- order_id: '1234'
182
- )
183
- puts response.data.to_json
184
- end
200
+ api = Bootpay::RestClient.new(
201
+ application_id: '59bfc738e13f337dbd6ca48a',
202
+ private_key: 'pDc0NwlkEX3aSaHTp/PPL/i8vn5E/CqRChgyEp/gHD0='
203
+ )
204
+ if api.request_access_token.success?
205
+ response = api.request_subscribe_card_payment(
206
+ billing_key: '6295cd1d1fc19202e4e319b0',
207
+ order_name: '테스트결제',
208
+ price: 1000,
209
+ card_quota: '00',
210
+ order_id: Time.current.to_i,
211
+ user: {
212
+ phone: '01000000000',
213
+ username: '홍길동',
214
+ email: 'test@bootpay.co.kr'
215
+ }
216
+ )
217
+ puts response.data.to_json
185
218
  end
186
219
  ```
187
- ## 4-2. 발급된 빌링키로 결제 예약 요청
188
- 원하는 시점에 4-1로 결제 승인 요청을 보내도 되지만, 빌링키 발급 이후에 바로 결제 예약 할 수 있습니다. (빌링키당 최대 5건)
220
+ ## 4-4. 결제 예약하기
221
+ 원하는 시점에 4-1로 결제 승인 요청을 보내도 되지만, 빌링키 발급 이후에 바로 결제 예약 할 수 있습니다. (빌링키당 최대 10건)
189
222
  ```ruby
190
- def subscribe_reserve_billing
191
- billing_key = '612deb53019943001fb52312'
192
- if @api.request_access_token.success?
193
- response = @api.subscribe_reserve_billing(
194
- billing_key: billing_key,
195
- item_name: '테스트 결제',
196
- price: 1000,
197
- tax_free: 1000,
198
- order_id: '1234',
199
- execute_at: (Time.now + 10.seconds).to_i # 10초 뒤 결제
200
- )
201
- puts response.data.to_json
202
- end
223
+ api = Bootpay::RestClient.new(
224
+ application_id: '59bfc738e13f337dbd6ca48a',
225
+ private_key: 'pDc0NwlkEX3aSaHTp/PPL/i8vn5E/CqRChgyEp/gHD0='
226
+ )
227
+ if api.request_access_token.success?
228
+ response = api.subscribe_payment_reserve(
229
+ billing_key: '628c0d0d1fc19202e5ef2866',
230
+ order_name: '테스트결제',
231
+ price: 1000,
232
+ order_id: Time.current.to_i,
233
+ user: {
234
+ phone: '01000000000',
235
+ username: '홍길동',
236
+ email: 'test@bootpay.co.kr'
237
+ },
238
+ reserve_execute_at: (Time.current + 30.seconds).iso8601
239
+ )
240
+ print response.data.to_json
203
241
  end
204
242
  ```
205
- ## 4-2-1. 발급된 빌링키로 결제 예약 - 취소 요청
206
- 빌링키로 예약된 결제건을 취소합니다.
243
+
244
+ ## 4-5. 예약 조회하기
245
+ 예약시 응답받은 reserveId로 예약된 건을 조회합니다.
246
+ ```ruby
247
+ api = Bootpay::RestClient.new(
248
+ application_id: '59bfc738e13f337dbd6ca48a',
249
+ private_key: 'pDc0NwlkEX3aSaHTp/PPL/i8vn5E/CqRChgyEp/gHD0='
250
+ )
251
+ if api.request_access_token.success?
252
+ reserve_id = "628c0d0d1fc19202e5ef2866"
253
+ response = api.subscribe_payment_reserve_lookup(reserve_id)
254
+ print response.data.to_json
255
+ ```
256
+
257
+
258
+
259
+ ## 4-6. 예약 취소하기
260
+ 예약시 응답받은 reserveId로 예약된 건을 취소합니다.
207
261
  ```ruby
208
- def subscribe_reserve_cancel
209
- reserve_id = '612deb53019943001fb52312'
210
- if @api.request_access_token.success?
211
- response = @api.subscribe_reserve_cancel(reserve_id)
212
- puts response.data.to_json
262
+ api = Bootpay::RestClient.new(
263
+ application_id: '59bfc738e13f337dbd6ca48a',
264
+ private_key: 'pDc0NwlkEX3aSaHTp/PPL/i8vn5E/CqRChgyEp/gHD0='
265
+ )
266
+ if api.request_access_token.success?
267
+ response = api.subscribe_payment_reserve(
268
+ billing_key: '623028630e019e036fe98478',
269
+ order_name: '테스트결제',
270
+ price: 1000,
271
+ order_id: Time.current.to_i,
272
+ user: {
273
+ phone: '01000000000',
274
+ username: '홍길동',
275
+ email: 'test@bootpay.co.kr'
276
+ },
277
+ reserve_execute_at: (Time.current + 5.seconds).iso8601
278
+ )
279
+ puts response.data.to_json
280
+ if response.success?
281
+ puts "cancel reserve_id: #{response.data[:reserve_id]}"
282
+ cancel = api.cancel_subscribe_reserve(response.data[:reserve_id])
283
+ puts cancel.data.to_json
213
284
  end
214
285
  end
215
286
  ```
216
- ## 4-3. 빌링키 삭제
217
- 발급된 빌링키로 이상 사용되지 않도록, 삭제 요청합니다.
218
- ```ruby
219
- def destroy_billing_key
220
- if @api.request_access_token.success?
221
- response = @api.destroy_billing_key('6100e7ea0d681b001fd4de69')
222
- puts response.data.to_json
223
- end
287
+ ## 4-7. 빌링키 삭제하기
288
+ 발급된 빌링키를 삭제합니다. 삭제하더라도 예약된 결제건은 취소되지 않습니다. 예약된 결제건 취소를 원하시면 예약 취소하기를 요청하셔야 합니다.
289
+ ```ruby
290
+ api = Bootpay::RestClient.new(
291
+ application_id: '59bfc738e13f337dbd6ca48a',
292
+ private_key: 'pDc0NwlkEX3aSaHTp/PPL/i8vn5E/CqRChgyEp/gHD0='
293
+ )
294
+ if api.request_access_token.success?
295
+ response = api.destroy_billing_key(
296
+ '6257bafb1fc19202e47471f7:'
297
+ )
298
+ print response.data.to_json
224
299
  end
225
300
  ```
226
- ## 5. 사용자 토큰 발급
227
- (부트페이 단독) 부트페이에서 제공하는 간편결제창, 생체인증 기반의 결제 사용을 위해서는 개발사에서 회원 고유번호를 관리해야하며, 해당 회원에 대한 사용자 토큰을 발급합니다.
228
- 토큰값을 기반으로 클라이언트에서 결제요청 하시면 되겠습니다.
229
- ```ruby
230
- def destroy_billing_key
231
- if @api.request_access_token.success?
232
- billing_key = '612debc70d681b0039e6133d'
233
- response = @api.destroy_billing_key(billing_key)
234
- puts response.data.to_json
235
- end
301
+
302
+ ## 4-8. 빌링키 조회하기
303
+ 클라이언트에서 빌링키 발급시, 보안상 클라이언트 이벤트에 빌링키를 전달해주지 않습니다. 그러므로 이 API를 통해 조회해야 합니다.
304
+ 다음은 빌링키 발급 요청했던 receiptId 로 빌링키를 조회합니다.
305
+ ```ruby
306
+ api = Bootpay::RestClient.new(
307
+ application_id: '59bfc738e13f337dbd6ca48a',
308
+ private_key: 'pDc0NwlkEX3aSaHTp/PPL/i8vn5E/CqRChgyEp/gHD0='
309
+ )
310
+ if api.request_access_token.success?
311
+ response = api.lookup_subscribe_billing_key(
312
+ "624e4f7c1fc19202e4746f91"
313
+ )
314
+ print response.data.to_json
236
315
  end
237
316
  ```
238
- ## 6. 결제 링크 생성
239
- (부트페이 단독) 요청 하시면 결제링크가 리턴되며, 해당 url을 고객에게 안내, 결제 유도하여 결제를 진행할 수 있습니다.
317
+
318
+ ## 5. 회원 토큰 발급요청
319
+ ㅇㅇ페이 사용을 위해 가맹점 회원의 토큰을 발급합니다. 가맹점은 회원의 고유번호를 관리해야합니다.
320
+ 이 토큰값을 기반으로 클라이언트에서 결제요청(payload.user_token) 하시면 되겠습니다.
240
321
  ```ruby
241
- def request_link
242
- if @api.request_access_token.success?
243
- response = @api.request_link(
244
- pg: 'nicepay',
245
- price: 1000,
246
- tax_free: 1000,
247
- order_id: '1234',
248
- name: '결제테스트'
249
- )
250
- puts response.data.to_json
251
- end
322
+ api = Bootpay::RestClient.new(
323
+ application_id: '59bfc738e13f337dbd6ca48a',
324
+ private_key: 'pDc0NwlkEX3aSaHTp/PPL/i8vn5E/CqRChgyEp/gHD0='
325
+ )
326
+ if api.request_access_token.success?
327
+ response = api.request_user_token(
328
+ user_id: 'gosomi1',
329
+ phone: '01012345678'
330
+ )
331
+ print response.data.to_json
252
332
  end
253
- ```
333
+ ```
254
334
 
255
- ## 7. 서버 승인 요청
335
+ ## 6. 서버 승인 요청
256
336
  결제승인 방식은 클라이언트 승인 방식과, 서버 승인 방식으로 총 2가지가 있습니다.
257
337
 
258
338
  클라이언트 승인 방식은 javascript나 native 등에서 confirm 함수에서 진행하는 일반적인 방법입니다만, 경우에 따라 서버 승인 방식이 필요할 수 있습니다.
259
339
 
260
- 필요한 이유
261
- 1. 100% 안정적인 결제 후 고객 안내를 위해 - 클라이언트에서 PG결제 진행 후 승인 완료될 때 onDone이 수행되지 않아 (인터넷 환경 등), 결제 이후 고객에게 안내하지 못할 수 있습니다
262
- 2. 단일 트랜잭션의 개념이 필요할 경우 - 재고파악이 중요한 커머스를 운영할 경우 트랜잭션 개념이 필요할 수 있겠으며, 이를 위해서는 서버 승인을 사용해야 합니다.
340
+ 필요한 이유
341
+ 1. 100% 안정적인 결제 후 고객 안내를 위해 - 클라이언트에서 PG결제 진행 후 승인 완료될 때 onDone이 수행되지 않아 (인터넷 환경 등), 결제 이후 고객에게 안내하지 못할 수 있습니다
342
+ 2. 단일 트랜잭션의 개념이 필요할 경우 - 재고파악이 중요한 커머스를 운영할 경우 트랜잭션 개념이 필요할 수 있겠으며, 이를 위해서는 서버 승인을 사용해야 합니다.
263
343
 
264
344
  ```ruby
265
- def submit
266
- receipt_id = '612e09260d681b0021e61ab9'
267
- if @api.request_access_token.success?
268
- response = @api.server_submit(receipt_id)
269
- puts response.data.to_json
270
- end
345
+ api = Bootpay::RestClient.new(
346
+ application_id: '59bfc738e13f337dbd6ca48a',
347
+ private_key: 'pDc0NwlkEX3aSaHTp/PPL/i8vn5E/CqRChgyEp/gHD0='
348
+ )
349
+ if api.request_access_token.success?
350
+ response = api.confirm_payment(
351
+ "61d3d41b1fc19202e483320b"
352
+ )
353
+ print response.data.to_json
271
354
  end
272
355
  ```
273
356
 
274
- ## 8. 본인 인증 결과 조회
275
- 다날 본인인증 후 결과값을 조회합니다.
357
+ ## 7. 본인 인증 결과 조회
358
+ 다날 본인인증 후 결과값을 조회합니다.
276
359
  다날 본인인증에서 통신사, 외국인여부, 전화번호 이 3가지 정보는 다날에 추가로 요청하셔야 받으실 수 있습니다.
277
360
  ```ruby
278
- def certificate
279
- receipt_id = '612e09260d681b0021e61ab9'
280
- if @api.request_access_token.success?
281
- response = @api.certificate(receipt_id)
282
- puts response.data.to_json
283
- end
361
+ api = Bootpay::RestClient.new(
362
+ application_id: '59bfc738e13f337dbd6ca48a',
363
+ private_key: 'pDc0NwlkEX3aSaHTp/PPL/i8vn5E/CqRChgyEp/gHD0='
364
+ )
365
+ if api.request_access_token.success?
366
+ response = api.certificate(
367
+ "624d2e531fc19202e4746f40"
368
+ )
369
+ print response.data.to_json
370
+ end
371
+ ```
372
+
373
+
374
+ ## 8. (에스크로 이용시) PG사로 배송정보 보내기
375
+ 현금 거래에 한해 구매자의 안전거래를 보장하는 방법으로, 판매자와 구매자의 온라인 전자상거래가 원활하게 이루어질 수 있도록 중계해주는 매매보호서비스입니다. 국내법에 따라 전자상거래에서 반드시 적용이 되어 있어야합니다. PG에서도 에스크로 결제를 지원하며, 에스크로 결제 사용을 원하시면 PG사 가맹시에 에스크로결제를 미리 얘기하고나서 진행을 하시는 것이 수월합니다.
376
+
377
+ PG사로 배송정보( 이니시스, KCP만 지원 )를 보내서 에스크로 상태를 변경하는 API 입니다.
378
+ ```ruby
379
+ api = Bootpay::RestClient.new(
380
+ application_id: '59bfc738e13f337dbd6ca48a',
381
+ private_key: 'pDc0NwlkEX3aSaHTp/PPL/i8vn5E/CqRChgyEp/gHD0=',
382
+ mode: 'development'
383
+ )
384
+ if api.request_access_token.success?
385
+ response = api.shipping_start(
386
+ receipt_id: "62a818cf1fc19203154a8f2e",
387
+ tracking_number: '123456',
388
+ delivery_corp: 'CJ대한통운',
389
+ user: {
390
+ username: '강훈',
391
+ phone: '01095735114',
392
+ address: '경기도 화성시 동탄기흥로 277번길 59',
393
+ zipcode: '08490'
394
+ }
395
+ )
396
+ print response.data.to_json
284
397
  end
285
398
  ```
286
399
 
@@ -290,7 +403,7 @@ end
290
403
 
291
404
  ## Documentation
292
405
 
293
- [부트페이 개발매뉴얼](https://bootpay.gitbook.io/docs/)을 참조해주세요
406
+ [부트페이 개발매뉴얼](https://developer.bootpay.co.kr/)을 참조해주세요
294
407
 
295
408
  ## 기술문의
296
409
 
data/Rakefile CHANGED
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "bundler/gem_tasks"
4
- require "rubocop/rake_task"
4
+ require "rspec/core/rake_task"
5
5
 
6
- RuboCop::RakeTask.new
6
+ RSpec::Core::RakeTask.new(:spec)
7
7
 
8
- task default: :rubocop
8
+ task default: :spec
data/bin/console CHANGED
@@ -2,7 +2,7 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require "bundler/setup"
5
- require "backend/ruby"
5
+ require "bootpay/rest/client"
6
6
 
7
7
  # You can add fixtures and/or initialization code here to make experimenting
8
8
  # with your gem easier. You can also use a different console, if you like.