react-native-bootpay-api 4.0.6 → 4.0.7

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.
package/README.md CHANGED
@@ -82,7 +82,7 @@ react-native-bootpay-api는 내부적으로 아래의 모듈에 의존합니다.
82
82
 
83
83
  ## 사용예제
84
84
 
85
- ```dart
85
+ ```typescript
86
86
  import React, { useRef } from 'react';
87
87
 
88
88
  import {
@@ -91,28 +91,35 @@ import {
91
91
  Text,
92
92
  TouchableOpacity
93
93
  } from 'react-native';
94
- import { BootpayWebView } from 'react-native-bootpay-api';
94
+ import { BootpayWebView } from 'react-native-bootpay-api';
95
+ // import { WebView } from 'react-native-webview-bootpay';
95
96
 
96
97
 
97
98
  export default function App() {
98
99
  const bootpay = useRef<BootpayWebView>(null);
99
100
 
101
+
100
102
 
101
- const onPress = () => {
103
+ const goBootpayTest = () => {
102
104
  const payload = {
103
- pg: 'payletter', //['kcp', 'danal', 'inicis', 'nicepay', 'lgup', 'toss', 'payapp', 'easypay', 'jtnet', 'tpay', 'mobilians', 'payletter', 'onestore', 'welcome'] 중 택 1
104
- name: '마스카라', //결제창에 보여질 상품명
105
+ pg: '나이스페이', //['kcp', 'danal', 'inicis', 'nicepay', 'lgup', 'toss', 'payapp', 'easypay', 'jtnet', 'tpay', 'mobilians', 'payletter', 'onestore', 'welcome'] 중 택 1
106
+ method: '네이버페이', // ['카드', '휴대폰', '계좌이체', '가상계좌', '카카오페이', '네이버페이', '페이코', '카드자동'] 중 택 1
107
+ order_name: '마스카라', //결제창에 보여질 상품명
105
108
  order_id: '1234_1234', //개발사에 관리하는 주문번호
106
- method: 'card',
107
- price: 1000 //결제금액
109
+ // subscription_id: '12345_21345', //개발사에 관리하는 주문번호 (정기결제용)
110
+ // authentication_id: '12345_21345', //개발사에 관리하는 주문번호 (본인인증용)
111
+ // method: 'card',
112
+ // methods: ['card', 'vbank', 'bank', 'phone'], // 통합결제창 진행시 사용하고자 하는 결제수단 지정 가능, method와 함께 적용 불가
113
+ price: 1000, //결제금액
114
+ // taxFree: 0, //면세금액
108
115
  }
109
116
 
110
117
  //결제되는 상품정보들로 통계에 사용되며, price의 합은 결제금액과 동일해야함
111
118
  const items = [
112
119
  {
113
- item_name: '키보드', //통계에 반영될 상품명
120
+ name: '키보드', //통계에 반영될 상품명
114
121
  qty: 1, //수량
115
- unique: 'ITEM_CODE_KEYBOARD', //개발사에서 관리하는 상품고유번호
122
+ id: 'ITEM_CODE_KEYBOARD', //개발사에서 관리하는 상품고유번호
116
123
  price: 1000, //상품단가
117
124
  cat1: '패션', //카테고리 상 , 자유롭게 기술
118
125
  cat2: '여성상의', //카테고리 중, 자유롭게 기술
@@ -135,80 +142,158 @@ export default function App() {
135
142
 
136
143
  //기타 설정
137
144
  const extra = {
138
- app_scheme: "bootpayrnapi", //ios의 경우 카드사 호출 되돌아오기 위한 스키마명
139
- expire_month: "0", //정기결제가 적용되는 개월 (정기결제 사용시), 미지정일시 PG사 기본값에 따름
140
- vbank_result: true, //가상계좌 결과창을 볼지(true), 말지(false)
141
- start_at: "", //정기 결제 시작일 - 지정하지 않을 경우 - 그 날 당일로부터 결제가 가능한 Billing key 지급, "2020-10-14"
142
- end_at: "", // 정기결제 만료일 - 기간 없음 - 무제한, "2020-10-14"
143
- quota: "0,2,3", //결제금액이 5만원 이상시 할부개월 허용범위를 설정할 수 있음, [0(일시불), 2개월, 3개월] 허용, 미설정시 12개월까지 허용
144
- offer_period: "", //결제창 제공기간에 해당하는 string 값, 지원하는 PG만 적용됨
145
- popup: 1, //1이면 popup, 아니면 iframe 연동
146
- quick_popup: 1, //1: popup 호출시 버튼을 띄우지 않는다. 아닐 경우 버튼을 호출한다
147
- locale: "ko",
148
- disp_cash_result: "Y", // 현금영수증 보일지 말지.. 가상계좌 KCP 옵션
149
- escrow: "0", // 에스크로 쓸지 안쓸지
150
- theme: "purple",
151
- custom_background: "",
152
- custom_font_color: "",
153
- show_close_button: true
145
+ card_quota: "0,2,3", //결제금액이 5만원 이상시 할부개월 허용범위를 설정할 있음, [0(일시불), 2개월, 3개월] 허용, 미설정시 12개월까지 허용
146
+ app_scheme: "bootpayrnapi", //ios의 경우 카드사 호출 되돌아오기 위한 스키마명
147
+ show_close_button: false, // x 닫기 버튼 삽입 (닫기버튼이 없는 PG사를 위한 옵션)
148
+ }
149
+
150
+ if(bootpay != null && bootpay.current != null) bootpay.current.requestPayment(payload, items, user, extra);
151
+ }
152
+
153
+
154
+ const goBootpaySubscriptionTest = () => {
155
+ const payload = {
156
+ pg: '나이스페이', //['kcp', 'danal', 'inicis', 'nicepay', 'lgup', 'toss', 'payapp', 'easypay', 'jtnet', 'tpay', 'mobilians', 'payletter', 'onestore', 'welcome'] 중 택 1
157
+ method: '카드자동', // ['카드', '휴대폰', '계좌이체', '가상계좌', '카카오페이', '네이버페이', '페이코', '카드자동'] 중 택 1
158
+ order_name: '마스카라', //결제창에 보여질 상품명
159
+ // order_id: '1234_1234', //개발사에 관리하는 주문번호
160
+ subscription_id: '12345_21345', //개발사에 관리하는 주문번호 (카드자동결제용)
161
+ // authentication_id: '12345_21345', //개발사에 관리하는 주문번호 (본인인증용)
162
+ // method: 'card',
163
+ // methods: ['card', 'vbank', 'bank', 'phone'], // 통합결제창 진행시 사용하고자 하는 결제수단 지정 가능, method와 함께 적용 불가
164
+ price: 1000, //결제금액
165
+ // taxFree: 0, //면세금액
166
+ }
167
+
168
+ //결제되는 상품정보들로 통계에 사용되며, price의 합은 결제금액과 동일해야함
169
+ const items = [
170
+ {
171
+ name: '키보드', //통계에 반영될 상품명
172
+ qty: 1, //수량
173
+ id: 'ITEM_CODE_KEYBOARD', //개발사에서 관리하는 상품고유번호
174
+ price: 1000, //상품단가
175
+ cat1: '패션', //카테고리 상 , 자유롭게 기술
176
+ cat2: '여성상의', //카테고리 중, 자유롭게 기술
177
+ cat3: '블라우스', //카테고리 하, 자유롭게 기술
178
+ }
179
+ ]
180
+
181
+ //구매자 정보로 결제창이 미리 적용될 수 있으며, 통계에도 사용되는 정보
182
+ const user = {
183
+ id: 'user_id_1234', //개발사에서 관리하는 회원고유번호
184
+ username: '홍길동', //구매자명
185
+ email: 'user1234@gmail.com', //구매자 이메일
186
+ gender: 0, //성별, 1:남자 , 0:여자
187
+ birth: '1986-10-14', //생년월일 yyyy-MM-dd
188
+ phone: '01012345678', //전화번호, 페이앱 필수
189
+ area: '서울', // [서울,인천,대구,광주,부산,울산,경기,강원,충청북도,충북,충청남도,충남,전라북도,전북,전라남도,전남,경상북도,경북,경상남도,경남,제주,세종,대전] 중 택 1
190
+ addr: '서울시 동작구 상도로' //주소
191
+ }
192
+
193
+
194
+ //기타 설정
195
+ const extra = {
196
+ card_quota: "0,2,3", //결제금액이 5만원 이상시 할부개월 허용범위를 설정할 수 있음, [0(일시불), 2개월, 3개월] 허용, 미설정시 12개월까지 허용
197
+ app_scheme: "bootpayrnapi", //ios의 경우 카드사 앱 호출 후 되돌아오기 위한 앱 스키마명
198
+ show_close_button: false, // x 닫기 버튼 삽입 (닫기버튼이 없는 PG사를 위한 옵션)
154
199
  }
155
-
156
200
 
157
- if(bootpay != null && bootpay.current != null) bootpay.current.request(payload, items, user, extra);
201
+ if(bootpay != null && bootpay.current != null) bootpay.current.requestSubscription(payload, items, user, extra);
158
202
  }
159
203
 
204
+ const goBootpayAuthTest = () => {
205
+ const payload = {
206
+ pg: '다날', //['kcp', 'danal', 'inicis', 'nicepay', 'lgup', 'toss', 'payapp', 'easypay', 'jtnet', 'tpay', 'mobilians', 'payletter', 'onestore', 'welcome'] 중 택 1
207
+ method: '본인인증',
208
+ order_name: '마스카라', //본인인증 명
209
+ // order_id: '1234_1234', //개발사에 관리하는 주문번호
210
+ // subscription_id: '12345_21345', //개발사에 관리하는 주문번호 (정기결제용)
211
+ authentication_id: '12345_21345', //개발사에 관리하는 주문번호 (본인인증용)
212
+ // method: 'card',
213
+ // methods: ['card', 'vbank', 'bank', 'phone'], // 통합결제창 진행시 사용하고자 하는 결제수단 지정 가능, method와 함께 적용 불가
214
+ // price: 1000, //결제금액
215
+ // taxFree: 0, //면세금액
216
+ }
217
+
218
+
219
+
220
+ //기타 설정
221
+ const extra = {
222
+ app_scheme: "bootpayrnapi", //ios의 경우 카드사 앱 호출 후 되돌아오기 위한 앱 스키마명
223
+ show_close_button: false, // x 닫기 버튼 삽입 (닫기버튼이 없는 PG사를 위한 옵션)
224
+ }
225
+
226
+ if(bootpay != null && bootpay.current != null) bootpay.current.requestAuthentication(payload, [], {}, extra);
160
227
 
161
- const onCancel = (data) => {
162
- console.log('cancel', data);
228
+ }
163
229
 
164
- var json = JSON.stringify(data)
165
- console.log('cancel json', json);
230
+ const onCancel = (data: string) => {
231
+ console.log('cancel', data);
166
232
  }
167
233
 
168
- const onError = (data) => {
234
+ const onError = (data: string) => {
169
235
  console.log('error', data);
170
236
  }
171
237
 
172
- const onReady = (data) => {
238
+ const onIssued = (data: string) => {
173
239
  console.log('ready', data);
174
240
  }
175
241
 
176
- const onConfirm = (data) => {
242
+ const onConfirm = (data: string) => {
177
243
  console.log('confirm', data);
178
244
  if(bootpay != null && bootpay.current != null) bootpay.current.transactionConfirm(data);
179
245
  }
180
246
 
181
- const onDone = (data) => {
247
+ const onDone = (data: string) => {
182
248
  console.log('done', data);
183
249
  }
184
250
 
185
251
  const onClose = () => {
186
- console.log('closed');
252
+ console.log('-- closed');
187
253
  }
188
254
 
255
+ // React.useEffect(() => {
256
+ // BootpayApi.multiply(3, 7).then(setResult);
257
+ // }, []);
258
+
189
259
  return (
190
260
  <View style={styles.container}>
191
261
  <TouchableOpacity
192
262
  style={styles.button}
193
- onPress={onPress}
263
+ onPress={goBootpayTest}
264
+ >
265
+ <Text>일반결제 결제테스트</Text>
266
+ </TouchableOpacity>
267
+ <BootpayWebView
268
+ ref={bootpay}
269
+ ios_application_id={'5b8f6a4d396fa665fdc2b5e9'}
270
+ android_application_id={'5b8f6a4d396fa665fdc2b5e8'}
271
+ // ios_application_id={'5b9f51264457636ab9a07cdd'}
272
+ // android_application_id={'5b9f51264457636ab9a07cdc'}
273
+ onCancel={onCancel}
274
+ onError={onError}
275
+ onIssued={onIssued}
276
+ onConfirm={onConfirm}
277
+ onDone={onDone}
278
+ onClose={onClose}
279
+ />
280
+ <TouchableOpacity
281
+ style={styles.button}
282
+ onPress={goBootpaySubscriptionTest}
283
+ >
284
+ <Text>정기결제 테스트</Text>
285
+ </TouchableOpacity>
286
+ <TouchableOpacity
287
+ style={styles.button}
288
+ onPress={goBootpayAuthTest}
194
289
  >
195
- <Text>Press Here</Text>
196
- </TouchableOpacity>
197
- <BootpayWebView
198
- ref={bootpay}
199
- ios_application_id={'5b8f6a4d396fa665fdc2b5e9'}
200
- android_application_id={'5b8f6a4d396fa665fdc2b5e8'}
201
- onCancel={onCancel}
202
-
203
- onError={onError}
204
- onReady={onReady}
205
- onConfirm={onConfirm}
206
- onDone={onDone}
207
- onClose={onClose}
208
- />
290
+ <Text>본인인증 테스트</Text>
291
+ </TouchableOpacity>
209
292
 
210
293
  </View>
211
294
  );
295
+
296
+
212
297
  }
213
298
 
214
299
  const styles = StyleSheet.create({
@@ -220,9 +305,11 @@ const styles = StyleSheet.create({
220
305
  button: {
221
306
  alignItems: "center",
222
307
  backgroundColor: "#DDDDDD",
223
- padding: 10
308
+ padding: 10,
309
+ margin: 10,
224
310
  },
225
311
  });
312
+
226
313
  ```
227
314
 
228
315
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-bootpay-api",
3
- "version": "4.0.6",
3
+ "version": "4.0.7",
4
4
  "description": "React Native를 위한 bootpay 라이브러리 입니다.",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -10,7 +10,7 @@ export class BootpayWebView extends Component {
10
10
 
11
11
  webView = useRef<WebView>(null);
12
12
 
13
- _VERSION = "4.0.6";
13
+ _VERSION = "4.0.7";
14
14
  _DEBUG = false;
15
15
  _payload = {};
16
16
 
@@ -129,6 +129,7 @@ export class BootpayWebView extends Component {
129
129
  display_success_result: extra.display_success_result ?? false, // 결제 완료되면 부트페이가 제공하는 완료창으로 보여주기 ( open_type이 iframe, popup 일때만 가능 )
130
130
  display_error_result: extra.display_error_result ?? true, // 결제가 실패하면 부트페이가 제공하는 실패창으로 보여주기 ( open_type이 iframe, popup 일때만 가능 )
131
131
  show_close_button: extra.show_close_button ?? false, // x 닫기 버튼 삽입 (닫기버튼이 없는 PG사를 위한 옵션)
132
+ use_welcomepayment: extra.use_welcomepayment ?? false, // 웰컴에서 스마트로 재판모듈 사용시 true
132
133
  };
133
134
 
134
135
 
@@ -212,6 +213,7 @@ export class BootpayWebView extends Component {
212
213
 
213
214
 
214
215
  const data = JSON.parse(res.data);
216
+ // console.log(`redirect: ${JSON.stringify(data)}`);
215
217
 
216
218
  switch (data.event) {
217
219
  case 'cancel':
@@ -221,7 +223,7 @@ export class BootpayWebView extends Component {
221
223
  if(this.props.onError != undefined) this.props.onError(data);
222
224
  break;
223
225
  case 'issued':
224
- if(this.props.onReady != undefined) this.props.onIssued(data);
226
+ if(this.props.onIssued != undefined) this.props.onIssued(data);
225
227
  break;
226
228
  case 'confirm':
227
229
  if(this.props.onConfirm != undefined) this.props.onConfirm(data);
@@ -235,7 +237,7 @@ export class BootpayWebView extends Component {
235
237
  break;
236
238
  }
237
239
 
238
- console.log(`redirect: ${JSON.stringify(data)}`);
240
+
239
241
 
240
242
  if(this._payload != undefined && this._payload.extra != undefined && this._payload.extra.open_type == 'redirect') {
241
243
 
@@ -246,6 +248,9 @@ export class BootpayWebView extends Component {
246
248
  } else if(data.event == 'error' && this._payload.extra.display_error_result != true ) {
247
249
  if(this.props.onClose != undefined) this.props.onClose(data);
248
250
  this.dismiss();
251
+ } else if(data.event == 'issued' && this._payload.extra.display_success_result != true ) {
252
+ if(this.props.onClose != undefined) this.props.onClose(data);
253
+ this.dismiss();
249
254
  } else if(data.event == 'cancel') {
250
255
  if(this.props.onClose != undefined) this.props.onClose(data);
251
256
  this.dismiss();