react-native-bootpay-api 4.0.0 → 4.0.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.
- package/README.md +139 -52
- package/package.json +2 -2
- package/src/BootpayWebView.js +105 -55
- package/src/index.d.ts +1 -33
- package/src/index.js +1 -20
package/README.md
CHANGED
|
@@ -82,7 +82,7 @@ react-native-bootpay-api는 내부적으로 아래의 모듈에 의존합니다.
|
|
|
82
82
|
|
|
83
83
|
## 사용예제
|
|
84
84
|
|
|
85
|
-
```
|
|
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
|
|
103
|
+
const goBootpayTest = () => {
|
|
102
104
|
const payload = {
|
|
103
|
-
pg: '
|
|
104
|
-
|
|
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
|
-
|
|
107
|
-
|
|
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
|
-
|
|
120
|
+
name: '키보드', //통계에 반영될 상품명
|
|
114
121
|
qty: 1, //수량
|
|
115
|
-
|
|
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
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
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.
|
|
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
|
-
|
|
162
|
-
console.log('cancel', data);
|
|
228
|
+
}
|
|
163
229
|
|
|
164
|
-
|
|
165
|
-
console.log('cancel
|
|
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
|
|
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={
|
|
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
|
-
|
|
196
|
-
|
|
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.
|
|
3
|
+
"version": "4.0.8",
|
|
4
4
|
"description": "React Native를 위한 bootpay 라이브러리 입니다.",
|
|
5
5
|
"main": "lib/commonjs/index",
|
|
6
6
|
"module": "lib/module/index",
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
"selenium-webdriver": "4.0.0-alpha.7",
|
|
88
88
|
"semantic-release": "15.13.24",
|
|
89
89
|
"typescript": "^4.0.0",
|
|
90
|
-
"react-native-webview-bootpay": "^11.18.
|
|
90
|
+
"react-native-webview-bootpay": "^11.18.14",
|
|
91
91
|
"react-native-device-info": "^8.7.0",
|
|
92
92
|
"react-native-sensitive-info": "^5.5.8",
|
|
93
93
|
"react-native-base64": "^0.2.1",
|
package/src/BootpayWebView.js
CHANGED
|
@@ -10,27 +10,16 @@ export class BootpayWebView extends Component {
|
|
|
10
10
|
|
|
11
11
|
webView = useRef<WebView>(null);
|
|
12
12
|
|
|
13
|
+
_VERSION = "4.0.8";
|
|
14
|
+
_DEBUG = false;
|
|
15
|
+
_payload = {};
|
|
16
|
+
|
|
13
17
|
|
|
14
18
|
state = {
|
|
15
19
|
visibility: false,
|
|
16
20
|
script: '',
|
|
17
21
|
firstLoad: false
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
// canGoBack() {
|
|
21
|
-
// console.log('canGoBack');
|
|
22
|
-
// if(this.webView.current) {
|
|
23
|
-
// return this.webView.current.canGoBack();
|
|
24
|
-
// }
|
|
25
|
-
// return false;
|
|
26
|
-
// }
|
|
27
|
-
|
|
28
|
-
// goBack() {
|
|
29
|
-
// console.log('GoBack');
|
|
30
|
-
// if(this.webView.goBack) {
|
|
31
|
-
// this.webView.current.goBack();
|
|
32
|
-
// }
|
|
33
|
-
// }
|
|
22
|
+
}
|
|
34
23
|
|
|
35
24
|
async componentWillUnmount() {
|
|
36
25
|
this.setState(
|
|
@@ -41,19 +30,7 @@ export class BootpayWebView extends Component {
|
|
|
41
30
|
}
|
|
42
31
|
)
|
|
43
32
|
UserInfo.setBootpayLastTime(Date.now());
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// componentDidMount() {
|
|
47
|
-
// // if(this.webView == null || this.webView == undefined || this.webView == false) return;
|
|
48
|
-
|
|
49
|
-
// console.log('componentDidMount: ' + this.close());
|
|
50
|
-
|
|
51
|
-
// this.webView.injectJavaScript(`
|
|
52
|
-
// javascript:(function(){${this.close()} })()
|
|
53
|
-
// `);
|
|
54
|
-
|
|
55
|
-
// }
|
|
56
|
-
|
|
33
|
+
}
|
|
57
34
|
render() {
|
|
58
35
|
return <Modal
|
|
59
36
|
animationType={'slide'}
|
|
@@ -91,7 +68,7 @@ export class BootpayWebView extends Component {
|
|
|
91
68
|
useWebKit={true}
|
|
92
69
|
originWhitelist={['*']}
|
|
93
70
|
source={{
|
|
94
|
-
uri: 'https://webview.bootpay.co.kr/4.0.
|
|
71
|
+
uri: 'https://webview.bootpay.co.kr/4.0.6/'
|
|
95
72
|
}}
|
|
96
73
|
onRequestClose={()=> {
|
|
97
74
|
// console.log('onRequestClose');
|
|
@@ -121,11 +98,42 @@ export class BootpayWebView extends Component {
|
|
|
121
98
|
this.bootpayRequest(payload, items, user, extra, "requestAuthentication");
|
|
122
99
|
}
|
|
123
100
|
|
|
124
|
-
bootpayRequest = async (payload, items, user, extra, requestMethod) => {
|
|
101
|
+
bootpayRequest = async (payload, items, user, extra, requestMethod) => {
|
|
102
|
+
|
|
125
103
|
payload.application_id = Platform.OS == 'ios' ? this.props.ios_application_id : this.props.android_application_id;
|
|
126
104
|
payload.items = items;
|
|
127
|
-
payload.user = user;
|
|
128
|
-
payload.extra =
|
|
105
|
+
payload.user = user;
|
|
106
|
+
payload.extra = {
|
|
107
|
+
card_quota: extra.card_quota ?? "",
|
|
108
|
+
seller_name: extra.seller_name ?? "",
|
|
109
|
+
delivery_day: extra.delivery_day ?? 1, //배송일자
|
|
110
|
+
locale: extra.locale ?? "ko",
|
|
111
|
+
offer_period: extra.offer_period ?? "" , //결제창 제공기간에 해당하는 string 값, 지원하는 PG만 적용됨
|
|
112
|
+
disp_cash_result: extra.disp_cash_result ?? true, // 현금영수증 보일지 말지.. 가상계좌 KCP 옵션
|
|
113
|
+
deposit_expiration: extra.deposit_expiration ?? "", //가상계좌 입금 만료일자 설정, yyyy-MM-dd
|
|
114
|
+
app_scheme: extra.app_scheme ?? "", //ios의 경우 카드사 앱 호출 후 되돌아오기 위한 앱 스키마명
|
|
115
|
+
use_card_point: extra.use_card_point ?? true, //카드 포인트 사용 여부 (토스만 가능)
|
|
116
|
+
direct_card: extra.direct_card ?? "", //해당 카드로 바로 결제창 (토스만 가능)
|
|
117
|
+
use_order_id: extra.use_order_id ?? false, //가맹점 order_id로 PG로 전송
|
|
118
|
+
international_card_only: extra.international_card_only ?? false, //해외 결제카드 선택 여부 (토스만 가능)
|
|
119
|
+
// phone_carrier: 'SKT', // ['SKT', 'KT', 'LGT'] 중 택 1
|
|
120
|
+
direct_app_card: extra.direct_app_card ?? false, //카드사앱으로 direct 호출
|
|
121
|
+
direct_samsungpay: extra.direct_samsungpay ?? false, //삼성페이 바로 띄우기
|
|
122
|
+
test_deposit: extra.test_deposit ?? false, //가상계좌 모의 입금
|
|
123
|
+
enable_error_webhook: extra.enable_error_webhook ?? false, //결제 오류시 Feedback URL로 webhook
|
|
124
|
+
separately_confirmed: extra.separately_confirmed ?? true, // confirm 이벤트를 호출할지 말지, false일 경우 자동승인
|
|
125
|
+
confirm_only_rest_api: extra.confirm_only_rest_api ?? false, // REST API로만 승인 처리
|
|
126
|
+
open_type: extra.open_type ?? 'redirect', // [그대로 지정] 페이지 오픈 type [iframe, popup, redirect] 중 택 1, 앱에서는 redriect가 default
|
|
127
|
+
use_bootpay_inapp_sdk: extra.use_bootpay_inapp_sdk ?? true, // [그대로 지정] native app에서는 redirect를 완성도있게 지원하기 위한 옵션
|
|
128
|
+
redirect_url: extra.redirect_url ?? 'https://api.bootpay.co.kr/v2', // [그대로 지정] open_type이 redirect일 경우 페이지 이동할 URL ( 오류 및 결제 완료 모두 수신 가능 )
|
|
129
|
+
display_success_result: extra.display_success_result ?? false, // 결제 완료되면 부트페이가 제공하는 완료창으로 보여주기 ( open_type이 iframe, popup 일때만 가능 )
|
|
130
|
+
display_error_result: extra.display_error_result ?? true, // 결제가 실패하면 부트페이가 제공하는 실패창으로 보여주기 ( open_type이 iframe, popup 일때만 가능 )
|
|
131
|
+
show_close_button: extra.show_close_button ?? false, // x 닫기 버튼 삽입 (닫기버튼이 없는 PG사를 위한 옵션)
|
|
132
|
+
use_welcomepayment: extra.use_welcomepayment ?? false, // 웰컴에서 스마트로 재판모듈 사용시 true
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
this._payload = payload;
|
|
129
137
|
|
|
130
138
|
|
|
131
139
|
//visibility가 true가 되면 webview onLoaded가 실행됨
|
|
@@ -158,6 +166,8 @@ export class BootpayWebView extends Component {
|
|
|
158
166
|
|
|
159
167
|
getMountJavascript = async () => {
|
|
160
168
|
return `
|
|
169
|
+
${this.getSDKVersion()}
|
|
170
|
+
${this.getEnvironmentMode()}
|
|
161
171
|
${this.getBootpayPlatform()}
|
|
162
172
|
${this.close()}
|
|
163
173
|
${await this.getAnalyticsData()}
|
|
@@ -183,28 +193,28 @@ export class BootpayWebView extends Component {
|
|
|
183
193
|
}
|
|
184
194
|
|
|
185
195
|
onMessage = ({ nativeEvent }) => {
|
|
186
|
-
|
|
187
|
-
|
|
196
|
+
// console.log(`onMessage: ${nativeEvent}, ${JSON.stringify(nativeEvent)}`);
|
|
197
|
+
|
|
198
|
+
if (nativeEvent == undefined) return;
|
|
188
199
|
|
|
189
|
-
|
|
200
|
+
const res = JSON.parse(JSON.stringify(nativeEvent));
|
|
201
|
+
|
|
190
202
|
|
|
191
|
-
if(
|
|
203
|
+
if(res.data == 'close') {
|
|
192
204
|
if(this.props.onClose == undefined) return;
|
|
193
205
|
var json = {
|
|
194
206
|
action: 'BootpayClose',
|
|
195
207
|
message: '결제창이 닫혔습니다'
|
|
196
|
-
}
|
|
197
|
-
// this.setState(
|
|
198
|
-
// {
|
|
199
|
-
// visibility: false
|
|
200
|
-
// }
|
|
201
|
-
// )
|
|
208
|
+
}
|
|
202
209
|
this.props.onClose(json);
|
|
203
210
|
this.dismiss();
|
|
204
211
|
return;
|
|
205
212
|
}
|
|
206
213
|
|
|
207
|
-
|
|
214
|
+
|
|
215
|
+
const data = JSON.parse(res.data);
|
|
216
|
+
// console.log(`redirect: ${JSON.stringify(data)}`);
|
|
217
|
+
|
|
208
218
|
switch (data.event) {
|
|
209
219
|
case 'cancel':
|
|
210
220
|
if(this.props.onCancel != undefined) this.props.onCancel(data);
|
|
@@ -213,7 +223,7 @@ export class BootpayWebView extends Component {
|
|
|
213
223
|
if(this.props.onError != undefined) this.props.onError(data);
|
|
214
224
|
break;
|
|
215
225
|
case 'issued':
|
|
216
|
-
if(this.props.
|
|
226
|
+
if(this.props.onIssued != undefined) this.props.onIssued(data);
|
|
217
227
|
break;
|
|
218
228
|
case 'confirm':
|
|
219
229
|
if(this.props.onConfirm != undefined) this.props.onConfirm(data);
|
|
@@ -223,7 +233,28 @@ export class BootpayWebView extends Component {
|
|
|
223
233
|
break;
|
|
224
234
|
case 'close':
|
|
225
235
|
if(this.props.onClose != undefined) this.props.onClose(data);
|
|
226
|
-
|
|
236
|
+
this.dismiss();
|
|
237
|
+
break;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
if(this._payload != undefined && this._payload.extra != undefined && this._payload.extra.open_type == 'redirect') {
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
if(data.event == 'done' && this._payload.extra.display_success_result != true) {
|
|
246
|
+
if(this.props.onClose != undefined) this.props.onClose(data);
|
|
247
|
+
this.dismiss();
|
|
248
|
+
} else if(data.event == 'error' && this._payload.extra.display_error_result != true ) {
|
|
249
|
+
if(this.props.onClose != undefined) this.props.onClose(data);
|
|
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();
|
|
254
|
+
} else if(data.event == 'cancel') {
|
|
255
|
+
if(this.props.onClose != undefined) this.props.onClose(data);
|
|
256
|
+
this.dismiss();
|
|
257
|
+
}
|
|
227
258
|
}
|
|
228
259
|
}
|
|
229
260
|
|
|
@@ -231,6 +262,24 @@ export class BootpayWebView extends Component {
|
|
|
231
262
|
return true;
|
|
232
263
|
}
|
|
233
264
|
|
|
265
|
+
getSDKVersion = () => {
|
|
266
|
+
if(Platform.OS == 'ios') {
|
|
267
|
+
return "Bootpay.setVersion('" + this._VERSION + "', 'ios_react_native')";
|
|
268
|
+
// return "Bootpay.setDevice('IOS');";
|
|
269
|
+
} else if(Platform.OS == 'android'){
|
|
270
|
+
return "Bootpay.setVersion('" + this._VERSION + "', 'android_react_native')";
|
|
271
|
+
// return "Bootpay.setDevice('ANDROID');";
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
getEnvironmentMode = () => {
|
|
276
|
+
if(this._DEBUG) {
|
|
277
|
+
return "Bootpay.setEnvironmentMode('development');";
|
|
278
|
+
|
|
279
|
+
}
|
|
280
|
+
return "";
|
|
281
|
+
}
|
|
282
|
+
|
|
234
283
|
getBootpayPlatform = () => {
|
|
235
284
|
if(Platform.OS == 'ios') {
|
|
236
285
|
return "Bootpay.setDevice('IOS');";
|
|
@@ -249,15 +298,16 @@ export class BootpayWebView extends Component {
|
|
|
249
298
|
// }
|
|
250
299
|
|
|
251
300
|
transactionConfirm = () => {
|
|
252
|
-
const script = "Bootpay.confirm()"
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
this.
|
|
256
|
-
this.
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
this.
|
|
260
|
-
|
|
301
|
+
const script = "Bootpay.confirm();"
|
|
302
|
+
// +
|
|
303
|
+
// ".then( function (res) {" +
|
|
304
|
+
// this.confirm() +
|
|
305
|
+
// this.issued() +
|
|
306
|
+
// this.done() +
|
|
307
|
+
// "}, function (res) {" +
|
|
308
|
+
// this.error() +
|
|
309
|
+
// this.cancel() +
|
|
310
|
+
// "})";
|
|
261
311
|
|
|
262
312
|
this.callJavaScript(script);
|
|
263
313
|
}
|
package/src/index.d.ts
CHANGED
|
@@ -8,36 +8,4 @@ import { userTrace, pageTrace } from './BootpayAnalytics'
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
export { BootpayWebView, userTrace, pageTrace }
|
|
11
|
-
|
|
12
|
-
// interface BootpayWebViewProps {
|
|
13
|
-
// ios_application_id: string;
|
|
14
|
-
// android_application_id: string;
|
|
15
|
-
|
|
16
|
-
// onCancel: (data: string) => void;
|
|
17
|
-
// onError: (data: string) => void;
|
|
18
|
-
// onReady: (data: string) => void;
|
|
19
|
-
// onConfirm: (data: string) => void;
|
|
20
|
-
// onDone: (data: string) => void;
|
|
21
|
-
// onClose: () => void;
|
|
22
|
-
// }
|
|
23
|
-
|
|
24
|
-
// export class BootpayWebView extends Component<BootpayWebViewProps> {
|
|
25
|
-
// request: (payload: Object, items: Object, user: Object, extra: Object) => Promise<string>;
|
|
26
|
-
// dismiss: () => Promise<string>;
|
|
27
|
-
// transactionConfirm: (data: string) => Promise<string>;
|
|
28
|
-
// }
|
|
29
|
-
|
|
30
|
-
// export class BootpayAnalytics {
|
|
31
|
-
// static userTrace: () => void;
|
|
32
|
-
// static pageTrace: () => void;
|
|
33
|
-
// }
|
|
34
|
-
|
|
35
|
-
// export const userTrace: () => void;
|
|
36
|
-
// export default function pageTrace(): void;
|
|
37
|
-
// export const userTrace: () => void;
|
|
38
|
-
|
|
39
|
-
// export default function PageTrace() : void;
|
|
40
|
-
|
|
41
|
-
// const Bootpay =
|
|
42
|
-
|
|
43
|
-
// export { BootpayWebView, userTrace, pageTrace }
|
|
11
|
+
|
package/src/index.js
CHANGED
|
@@ -3,23 +3,4 @@
|
|
|
3
3
|
import { BootpayWebView } from './BootpayWebView'
|
|
4
4
|
import { userTrace, pageTrace } from './BootpayAnalytics'
|
|
5
5
|
|
|
6
|
-
export { BootpayWebView, userTrace, pageTrace };
|
|
7
|
-
// export { useBootpay };
|
|
8
|
-
|
|
9
|
-
// import React, { Component } from 'react';
|
|
10
|
-
// import WebView from 'react-native-webview-bootpay';
|
|
11
|
-
|
|
12
|
-
// export class BootpayWebView extends Component {
|
|
13
|
-
// render() {
|
|
14
|
-
// return <WebView
|
|
15
|
-
// useWebKit={true}
|
|
16
|
-
// originWhitelist={['*']}
|
|
17
|
-
// source={{
|
|
18
|
-
// uri: 'https://www.google.com'
|
|
19
|
-
// }}
|
|
20
|
-
// javaScriptEnabled={true}
|
|
21
|
-
// javaScriptCanOpenWindowsAutomatically={true}
|
|
22
|
-
// scalesPageToFit={true}
|
|
23
|
-
// />
|
|
24
|
-
// }
|
|
25
|
-
// }
|
|
6
|
+
export { BootpayWebView, userTrace, pageTrace };
|