react-native-bootpay-api 1.4.3 → 1.5.2
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/CHANGELOG.md +12 -0
- package/lib/commonjs/BootpayAnalytics.js +1 -3
- package/lib/commonjs/BootpayAnalytics.js.map +1 -1
- package/lib/commonjs/BootpayWebView.js +23 -6
- package/lib/commonjs/BootpayWebView.js.map +1 -1
- package/lib/module/BootpayAnalytics.js +2 -3
- package/lib/module/BootpayAnalytics.js.map +1 -1
- package/lib/module/BootpayWebView.js +25 -8
- package/lib/module/BootpayWebView.js.map +1 -1
- package/package.json +55 -99
- package/src/BootpayAnalytics.js +2 -3
- package/src/BootpayWebView.js +30 -8
- package/src/UserInfo.d.ts +15 -0
- package/src/UserInfo.d.ts.map +1 -0
- package/src/UserInfo.js +67 -0
package/CHANGELOG.md
CHANGED
|
@@ -9,13 +9,11 @@ var _reactNativeBase = _interopRequireDefault(require("react-native-base64"));
|
|
|
9
9
|
|
|
10
10
|
var _reactNativeDeviceInfo = _interopRequireDefault(require("react-native-device-info"));
|
|
11
11
|
|
|
12
|
-
var _reactNativeCryptoAesCbc = _interopRequireDefault(require("react-native-crypto-aes-cbc"));
|
|
13
|
-
|
|
14
12
|
var _reactNative = require("react-native");
|
|
15
13
|
|
|
16
14
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
15
|
|
|
18
|
-
// import CryptoJS from 'crypto-js';
|
|
16
|
+
// import CryptoJS from 'crypto-js';
|
|
19
17
|
var Aes = _reactNative.NativeModules.Aes;
|
|
20
18
|
|
|
21
19
|
const userTrace = async (applicationId, userId, phone, email, gender, birth, area) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["BootpayAnalytics.js"],"names":["Aes","NativeModules","userTrace","applicationId","userId","phone","email","gender","birth","area","payload","DeviceInfo","getVersion","key","getRandomKey","iv","data","encrypt","JSON","stringify","stringToHex","then","cipher","response","fetch","method","headers","Accept","body","session_key","getSessionKey","json","e","console","log","error","pageTrace","url","pageType","items","str","hex","i","l","length","charCodeAt","toString","text","keys","charAt","Math","floor","random","keyValue","base64","encode","ivValue","strEncode","hmac256","hash"],"mappings":";;;;;;;AAEA;;AACA;;AAGA
|
|
1
|
+
{"version":3,"sources":["BootpayAnalytics.js"],"names":["Aes","NativeModules","userTrace","applicationId","userId","phone","email","gender","birth","area","payload","DeviceInfo","getVersion","key","getRandomKey","iv","data","encrypt","JSON","stringify","stringToHex","then","cipher","response","fetch","method","headers","Accept","body","session_key","getSessionKey","json","e","console","log","error","pageTrace","url","pageType","items","str","hex","i","l","length","charCodeAt","toString","text","keys","charAt","Math","floor","random","keyValue","base64","encode","ivValue","strEncode","hmac256","hash"],"mappings":"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","sourcesContent":["\n \nimport base64 from 'react-native-base64'\nimport DeviceInfo from 'react-native-device-info';\n\n// import CryptoJS from 'crypto-js'; \nimport { NativeModules } from 'react-native'\nvar Aes = NativeModules.Aes\n\n\nconst userTrace = async (applicationId, userId, phone, email, gender, birth, area) => { \n try { \n const payload = {\n \"id\": userId, \n \"ver\": DeviceInfo.getVersion(),\n \"application_id\": applicationId, \n \"phone\": phone,\n \"email\": email,\n \"gender\": gender,\n \"birth\": birth,\n \"area\": area\n };\n\n var key = getRandomKey(32);\n var iv = getRandomKey(16);\n \n try { \n const data = await Aes.encrypt(JSON.stringify(payload), stringToHex(key), stringToHex(iv)).then(cipher => cipher);\n\n const response = await fetch(\n 'https://analytics.bootpay.co.kr/login',\n {\n method: 'POST',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n data: data,\n session_key: await getSessionKey(key, iv)\n })\n }\n );\n const json = await response.json();\n return json;\n } catch (e) {\n console.log(e);\n } \n } catch (error) {\n console.error(error);\n }\n}\n\nconst pageTrace = async (applicationId, url, pageType, items) => { \n try { \n const payload = {\n \"application_id\": applicationId, \n \"url\": url, \n \"page_type\": pageType,\n \"items\": items,\n \"referer\": ''\n }; \n\n var key = getRandomKey(32);\n var iv = getRandomKey(16);\n \n try { \n const data = await Aes.encrypt(JSON.stringify(payload), stringToHex(key), stringToHex(iv)).then(cipher => cipher);\n\n const response = await fetch(\n 'https://analytics.bootpay.co.kr/call',\n {\n method: 'POST',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n data: data,\n session_key: await getSessionKey(key, iv)\n })\n }\n );\n const json = await response.json();\n return json;\n } catch (e) {\n console.log(e);\n } \n } catch (error) {\n console.error(error);\n }\n}\n\nconst stringToHex = (str) => {\n var hex = ''\n for (var i = 0, l = str.length; i < l; i++) {\n hex += str.charCodeAt(i).toString(16)\n }\n return hex\n}\n\nconst getRandomKey = (length) => {\n var text = '';\n var keys = 'abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n\n for (var i = 0; i < length; i++)\n text += keys.charAt(Math.floor(Math.random() * keys.length));\n\n return text;\n}\n\n\nconst getSessionKey = async (key, iv) => {\n const keyValue = base64.encode(key);\n const ivValue = base64.encode(iv);\n\n return `${keyValue}##${ivValue}`;\n}\n\nconst strEncode = async (str, key, iv) => {\n return await Aes.encrypt(str, key, iv).then(cipher => {\n Aes.hmac256(cipher, key).then(hash => {\n console.log('HMAC', hash)\n return hash;\n })\n })\n\n}\n\nexport { userTrace, pageTrace }\n"]}
|
|
@@ -33,8 +33,6 @@ class BootpayWebView extends _react.Component {
|
|
|
33
33
|
firstLoad: false
|
|
34
34
|
});
|
|
35
35
|
|
|
36
|
-
_defineProperty(this, "s", void 0);
|
|
37
|
-
|
|
38
36
|
_defineProperty(this, "request", async (payload, items, user, extra) => {
|
|
39
37
|
payload.application_id = _reactNative.Platform.OS == 'ios' ? this.props.ios_application_id : this.props.android_application_id;
|
|
40
38
|
payload.items = items;
|
|
@@ -182,6 +180,19 @@ class BootpayWebView extends _react.Component {
|
|
|
182
180
|
});
|
|
183
181
|
}
|
|
184
182
|
|
|
183
|
+
// canGoBack() {
|
|
184
|
+
// console.log('canGoBack');
|
|
185
|
+
// if(this.webView.current) {
|
|
186
|
+
// return this.webView.current.canGoBack();
|
|
187
|
+
// }
|
|
188
|
+
// return false;
|
|
189
|
+
// }
|
|
190
|
+
// goBack() {
|
|
191
|
+
// console.log('GoBack');
|
|
192
|
+
// if(this.webView.goBack) {
|
|
193
|
+
// this.webView.current.goBack();
|
|
194
|
+
// }
|
|
195
|
+
// }
|
|
185
196
|
async componentWillUnmount() {
|
|
186
197
|
this.setState({
|
|
187
198
|
visibility: false,
|
|
@@ -195,7 +206,12 @@ class BootpayWebView extends _react.Component {
|
|
|
195
206
|
render() {
|
|
196
207
|
return /*#__PURE__*/_react.default.createElement(_reactNative.Modal, {
|
|
197
208
|
animationType: 'slide',
|
|
198
|
-
transparent: false
|
|
209
|
+
transparent: false // shouldCloseOnOverlayClick={true}
|
|
210
|
+
,
|
|
211
|
+
onRequestClose: () => {
|
|
212
|
+
console.log('onRequestClose');
|
|
213
|
+
this.dismiss();
|
|
214
|
+
},
|
|
199
215
|
visible: this.state.visibility
|
|
200
216
|
}, /*#__PURE__*/_react.default.createElement(_reactNative.SafeAreaView, {
|
|
201
217
|
style: {
|
|
@@ -221,7 +237,8 @@ class BootpayWebView extends _react.Component {
|
|
|
221
237
|
style: [styles.overlay],
|
|
222
238
|
source: require('../images/close.png')
|
|
223
239
|
})), /*#__PURE__*/_react.default.createElement(_reactNativeWebviewBootpay.default, {
|
|
224
|
-
ref: wv => this.webView = wv
|
|
240
|
+
ref: wv => this.webView = wv // ref={btWebView}
|
|
241
|
+
,
|
|
225
242
|
useWebKit: true,
|
|
226
243
|
originWhitelist: ['*'],
|
|
227
244
|
source: {
|
|
@@ -229,8 +246,8 @@ class BootpayWebView extends _react.Component {
|
|
|
229
246
|
},
|
|
230
247
|
injectedJavaScript: this.state.script,
|
|
231
248
|
javaScriptEnabled: true,
|
|
232
|
-
javaScriptCanOpenWindowsAutomatically: true
|
|
233
|
-
|
|
249
|
+
javaScriptCanOpenWindowsAutomatically: true // scalesPageToFit={true}
|
|
250
|
+
,
|
|
234
251
|
onMessage: this.onMessage,
|
|
235
252
|
onShouldStartLoadWithRequest: this.onShouldStartLoadWithRequest
|
|
236
253
|
})));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["BootpayWebView.js"],"names":["BootpayWebView","Component","useRef","WebView","visibility","script","firstLoad","payload","items","user","extra","application_id","Platform","OS","props","ios_application_id","android_application_id","user_info","quickPopup","undefined","quick_popup","setState","getMountJavascript","generateScript","showCloseButton","show_close_button","UserInfo","updateInfo","removePaymentWindow","getBootpayPlatform","getAnalyticsData","onError","onCancel","onReady","onConfirm","onClose","onDone","JSON","stringify","nativeEvent","data","json","action","message","dismiss","parse","url","callJavaScript","webView","injectJavaScript","uuid","getBootpayUUID","bootpaySK","getBootpaySK","bootLastTime","getBootpayLastTime","elaspedTime","Date","now","componentWillUnmount","setBootpayLastTime","render","state","flex","cancelData","closeData","styles","overlay","require","wv","uri","onMessage","onShouldStartLoadWithRequest","StyleSheet","create","container","justifyContent","alignItems","backgroundColor","welcome","fontSize","textAlign","margin","width","height","right","alignSelf"],"mappings":"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","sourcesContent":["\n\nimport React, { Component, useRef } from 'react';\nimport { SafeAreaView, Modal, Platform, TouchableOpacity, Image, StyleSheet } from 'react-native';\nimport WebView from 'react-native-webview-bootpay';\nimport UserInfo from './UserInfo'\n\nexport class BootpayWebView extends Component {\n webView = useRef<WebView>(null); \n\n state = {\n visibility: false, \n script: '',\n firstLoad: false\n } \ns\n async componentWillUnmount() {\n this.setState(\n {\n visibility: false, \n firstLoad: false,\n showCloseButton: false\n }\n )\n UserInfo.setBootpayLastTime(Date.now());\n }\n \n render() {\n\n\n return <Modal\n animationType={'slide'}\n transparent={false}\n visible={this.state.visibility}>\n <SafeAreaView style={{ flex: 1 }}>\n {\n this.state.showCloseButton &&\n <TouchableOpacity\n onPress={() => {\n var cancelData = {\n action: 'BootpayCancel',\n message: '사용자에 의해 취소되었습니다'\n }\n var closeData = {\n action: 'BootpayClose',\n message: '결제창이 닫혔습니다'\n }\n \n if(this.props.onCancel != undefined) this.props.onCancel(cancelData);\n if(this.props.onClose != undefined) this.props.onClose(closeData); \n\n this.setState({visibility: false})\n } }>\n <Image \n style={[styles.overlay]}\n source={require('../images/close.png')} />\n </TouchableOpacity>\n }\n <WebView\n ref={(wv) => this.webView = wv}\n useWebKit={true}\n originWhitelist={['*']}\n source={{\n uri: 'https://inapp.bootpay.co.kr/3.3.3/production.html'\n }}\n injectedJavaScript={this.state.script}\n javaScriptEnabled={true}\n javaScriptCanOpenWindowsAutomatically={true}\n scalesPageToFit={true} \n onMessage={this.onMessage}\n onShouldStartLoadWithRequest={this.onShouldStartLoadWithRequest}\n />\n </SafeAreaView>\n\n </Modal>\n }\n\n request = async (payload, items, user, extra) => { \n\n payload.application_id = Platform.OS == 'ios' ? this.props.ios_application_id : this.props.android_application_id;\n payload.items = items;\n payload.user_info = user;\n payload.extra = extra; \n \n\n var quickPopup = '';\n\n if(extra != undefined && extra.quick_popup != undefined) {\n if(extra.quick_popup == 1) {\n quickPopup = 'BootPay.startQuickPopup();';\n }\n } \n \n\n //visibility가 true가 되면 webview onLoaded가 실행됨\n this.setState(\n {\n visibility: true,\n script: `\n ${await this.getMountJavascript()}\n ${quickPopup}\n ${this.generateScript(payload)}\n `,\n firstLoad: false,\n showCloseButton: extra.show_close_button || false \n }\n ) \n\n UserInfo.updateInfo();\n }\n\n dismiss = () => {\n this.setState(\n ({ visibility }) => ({\n visibility: false\n })\n )\n this.removePaymentWindow();\n }\n \n\n getMountJavascript = async () => { \n return `\n ${this.getBootpayPlatform()}\n ${await this.getAnalyticsData()}\n `; \n }\n\n\n generateScript= (payload) => { \n const onError = '.error(function(data){ window.BootpayRNWebView.postMessage( JSON.stringify(data) ); })';\n const onCancel = '.cancel(function(data){ window.BootpayRNWebView.postMessage( JSON.stringify(data) ); })';\n const onReady = '.ready(function(data){ window.BootpayRNWebView.postMessage( JSON.stringify(data) ); })';\n const onConfirm = '.confirm(function(data){ window.BootpayRNWebView.postMessage( JSON.stringify(data) ); })';\n const onClose = '.close(function(data){ window.BootpayRNWebView.postMessage(\"close\"); })';\n const onDone = '.done(function(data){ window.BootpayRNWebView.postMessage( JSON.stringify(data) ); })';\n\n return `BootPay.request(${JSON.stringify(payload)})` + onError + onCancel + onReady + onConfirm + onClose + onDone + '; void(0);';\n }\n\n onMessage = ({ nativeEvent }) => { \n if (nativeEvent == undefined || nativeEvent.data == undefined) return;\n \n if(nativeEvent.data == 'close') {\n if(this.props.onClose == undefined) return;\n var json = {\n action: 'BootpayClose',\n message: '결제창이 닫혔습니다'\n }\n this.props.onClose(json);\n this.dismiss();\n return;\n }\n\n const data = JSON.parse(nativeEvent.data);\n switch (data.action) {\n case 'BootpayCancel':\n if(this.props.onCancel != undefined) this.props.onCancel(data);\n this.setState(\n {\n visibility: false\n }\n )\n break;\n case 'BootpayError':\n if(this.props.onError != undefined) this.props.onError(data);\n this.setState(\n {\n visibility: false\n }\n )\n break;\n case 'BootpayBankReady':\n if(this.props.onReady != undefined) this.props.onReady(data);\n break;\n case 'BootpayConfirm':\n if(this.props.onConfirm != undefined) this.props.onConfirm(data);\n break;\n case 'BootpayDone':\n if(this.props.onDone != undefined) this.props.onDone(data);\n this.setState(\n {\n visibility: false\n }\n )\n break;\n }\n }\n\n onShouldStartLoadWithRequest = (url) => { \n return true;\n }\n\n getBootpayPlatform = () => { \n if(Platform.OS == 'ios') {\n return \"BootPay.setDevice('IOS');\";\n } else if(Platform.OS == 'android'){\n return \"BootPay.setDevice('ANDROID');\"; \n }\n }\n\n // setPayScript = () => {\n // const fullScript = this.generateScript(this.state.script);\n // this.injectJavaScript(fullScript);\n // if(this.state.showCloseButton == true) {\n // if(this.webView == null || this.webView == undefined) return; \n // this.webView.showCloseButton();\n // }\n // } \n\n transactionConfirm = (data) => {\n // console.log('transactionConfirm: ' + data);\n\n var json = JSON.stringify(data)\n this.callJavaScript(`\n BootPay.transactionConfirm(${json});\n `);\n }\n\n removePaymentWindow = () => {\n this.callJavaScript(`\n BootPay.removePaymentWindow();\n `);\n } \n\n callJavaScript = (script) => {\n if(this.webView == null || this.webView == undefined) return;\n\n // console.log('callJavascript: ' + script);\n\n this.webView.injectJavaScript(`\n javascript:(function(){${script} })()\n `);\n // this.webView.evalu\n } \n\n getAnalyticsData = async () => { \n const uuid = await UserInfo.getBootpayUUID(); \n const bootpaySK = await UserInfo.getBootpaySK();\n const bootLastTime = await UserInfo.getBootpayLastTime(); \n\n\n const elaspedTime = Date.now() - bootLastTime; \n return `window.BootPay.setAnalyticsData({uuid:'${uuid}',sk:'${bootpaySK}',sk_time:${bootLastTime},time:${elaspedTime}});`;\n // this.callJavaScript(`window.BootPay.setAnalyticsData({uuid:'${uuid}',sk:'${bootpaySK}',sk_time:${bootLastTime},time:${elaspedTime}});`); \n }\n} \n\n\nvar styles = StyleSheet.create({\n container: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n backgroundColor: '#F5FCFF',\n },\n welcome: {\n fontSize: 20,\n textAlign: 'center',\n margin: 10,\n },\n // Flex to fill, position absolute, \n // Fixed left/top, and the width set to the window width\n overlay: { \n width: 25,\n height: 25, \n right: 5,\n alignSelf: 'flex-end'\n } \n });"]}
|
|
1
|
+
{"version":3,"sources":["BootpayWebView.js"],"names":["BootpayWebView","Component","useRef","WebView","visibility","script","firstLoad","payload","items","user","extra","application_id","Platform","OS","props","ios_application_id","android_application_id","user_info","quickPopup","undefined","quick_popup","setState","getMountJavascript","generateScript","showCloseButton","show_close_button","UserInfo","updateInfo","removePaymentWindow","getBootpayPlatform","getAnalyticsData","onError","onCancel","onReady","onConfirm","onClose","onDone","JSON","stringify","nativeEvent","data","json","action","message","dismiss","parse","url","callJavaScript","webView","injectJavaScript","uuid","getBootpayUUID","bootpaySK","getBootpaySK","bootLastTime","getBootpayLastTime","elaspedTime","Date","now","componentWillUnmount","setBootpayLastTime","render","console","log","state","flex","cancelData","closeData","styles","overlay","require","wv","uri","onMessage","onShouldStartLoadWithRequest","StyleSheet","create","container","justifyContent","alignItems","backgroundColor","welcome","fontSize","textAlign","margin","width","height","right","alignSelf"],"mappings":"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","sourcesContent":["\n\nimport React, { Component, useRef, useEffect } from 'react';\nimport { SafeAreaView, Modal, Platform, TouchableOpacity, Image, StyleSheet, BackHandler} from 'react-native';\nimport WebView from 'react-native-webview-bootpay';\nimport UserInfo from './UserInfo'\n\nexport class BootpayWebView extends Component {\n webView = useRef<WebView>(null); \n\n \n state = {\n visibility: false, \n script: '',\n firstLoad: false\n } \n \n // canGoBack() {\n // console.log('canGoBack');\n // if(this.webView.current) {\n // return this.webView.current.canGoBack();\n // }\n // return false;\n // }\n\n // goBack() {\n // console.log('GoBack');\n // if(this.webView.goBack) {\n // this.webView.current.goBack();\n // }\n // }\n\n async componentWillUnmount() {\n this.setState(\n {\n visibility: false, \n firstLoad: false,\n showCloseButton: false\n }\n )\n UserInfo.setBootpayLastTime(Date.now());\n }\n \n render() { \n return <Modal\n animationType={'slide'}\n transparent={false}\n \n // shouldCloseOnOverlayClick={true} \n onRequestClose={()=> {\n console.log('onRequestClose');\n this.dismiss();\n }}\n visible={this.state.visibility}>\n <SafeAreaView style={{ flex: 1 }}>\n {\n this.state.showCloseButton &&\n <TouchableOpacity\n onPress={() => {\n var cancelData = {\n action: 'BootpayCancel',\n message: '사용자에 의해 취소되었습니다'\n }\n var closeData = {\n action: 'BootpayClose',\n message: '결제창이 닫혔습니다'\n }\n \n if(this.props.onCancel != undefined) this.props.onCancel(cancelData);\n if(this.props.onClose != undefined) this.props.onClose(closeData); \n\n this.setState({visibility: false})\n } }>\n <Image \n style={[styles.overlay]}\n source={require('../images/close.png')} />\n </TouchableOpacity>\n }\n <WebView\n ref={(wv) => this.webView = wv}\n // ref={btWebView}\n useWebKit={true}\n originWhitelist={['*']}\n source={{\n uri: 'https://inapp.bootpay.co.kr/3.3.3/production.html'\n }}\n injectedJavaScript={this.state.script}\n javaScriptEnabled={true}\n javaScriptCanOpenWindowsAutomatically={true}\n // scalesPageToFit={true} \n onMessage={this.onMessage}\n onShouldStartLoadWithRequest={this.onShouldStartLoadWithRequest}\n />\n </SafeAreaView>\n\n </Modal>\n }\n\n request = async (payload, items, user, extra) => { \n\n payload.application_id = Platform.OS == 'ios' ? this.props.ios_application_id : this.props.android_application_id;\n payload.items = items;\n payload.user_info = user;\n payload.extra = extra; \n \n\n var quickPopup = '';\n\n if(extra != undefined && extra.quick_popup != undefined) {\n if(extra.quick_popup == 1) {\n quickPopup = 'BootPay.startQuickPopup();';\n }\n } \n \n\n //visibility가 true가 되면 webview onLoaded가 실행됨\n this.setState(\n {\n visibility: true,\n script: `\n ${await this.getMountJavascript()}\n ${quickPopup}\n ${this.generateScript(payload)}\n `,\n firstLoad: false,\n showCloseButton: extra.show_close_button || false \n }\n ) \n\n UserInfo.updateInfo();\n }\n\n dismiss = () => {\n this.setState(\n ({ visibility }) => ({\n visibility: false\n })\n )\n this.removePaymentWindow();\n }\n \n\n getMountJavascript = async () => { \n return `\n ${this.getBootpayPlatform()}\n ${await this.getAnalyticsData()}\n `; \n }\n\n\n generateScript= (payload) => { \n const onError = '.error(function(data){ window.BootpayRNWebView.postMessage( JSON.stringify(data) ); })';\n const onCancel = '.cancel(function(data){ window.BootpayRNWebView.postMessage( JSON.stringify(data) ); })';\n const onReady = '.ready(function(data){ window.BootpayRNWebView.postMessage( JSON.stringify(data) ); })';\n const onConfirm = '.confirm(function(data){ window.BootpayRNWebView.postMessage( JSON.stringify(data) ); })';\n const onClose = '.close(function(data){ window.BootpayRNWebView.postMessage(\"close\"); })';\n const onDone = '.done(function(data){ window.BootpayRNWebView.postMessage( JSON.stringify(data) ); })';\n\n return `BootPay.request(${JSON.stringify(payload)})` + onError + onCancel + onReady + onConfirm + onClose + onDone + '; void(0);';\n }\n\n onMessage = ({ nativeEvent }) => { \n if (nativeEvent == undefined || nativeEvent.data == undefined) return;\n \n if(nativeEvent.data == 'close') {\n if(this.props.onClose == undefined) return;\n var json = {\n action: 'BootpayClose',\n message: '결제창이 닫혔습니다'\n }\n this.props.onClose(json);\n this.dismiss();\n return;\n }\n\n const data = JSON.parse(nativeEvent.data);\n switch (data.action) {\n case 'BootpayCancel':\n if(this.props.onCancel != undefined) this.props.onCancel(data);\n this.setState(\n {\n visibility: false\n }\n )\n break;\n case 'BootpayError':\n if(this.props.onError != undefined) this.props.onError(data);\n this.setState(\n {\n visibility: false\n }\n )\n break;\n case 'BootpayBankReady':\n if(this.props.onReady != undefined) this.props.onReady(data);\n break;\n case 'BootpayConfirm':\n if(this.props.onConfirm != undefined) this.props.onConfirm(data);\n break;\n case 'BootpayDone':\n if(this.props.onDone != undefined) this.props.onDone(data);\n this.setState(\n {\n visibility: false\n }\n )\n break;\n }\n }\n\n onShouldStartLoadWithRequest = (url) => { \n return true;\n }\n\n getBootpayPlatform = () => { \n if(Platform.OS == 'ios') {\n return \"BootPay.setDevice('IOS');\";\n } else if(Platform.OS == 'android'){\n return \"BootPay.setDevice('ANDROID');\"; \n }\n }\n\n // setPayScript = () => {\n // const fullScript = this.generateScript(this.state.script);\n // this.injectJavaScript(fullScript);\n // if(this.state.showCloseButton == true) {\n // if(this.webView == null || this.webView == undefined) return; \n // this.webView.showCloseButton();\n // }\n // } \n\n transactionConfirm = (data) => {\n // console.log('transactionConfirm: ' + data);\n\n var json = JSON.stringify(data)\n this.callJavaScript(`\n BootPay.transactionConfirm(${json});\n `);\n }\n\n removePaymentWindow = () => {\n this.callJavaScript(`\n BootPay.removePaymentWindow();\n `);\n } \n\n callJavaScript = (script) => {\n if(this.webView == null || this.webView == undefined) return;\n\n // console.log('callJavascript: ' + script);\n\n this.webView.injectJavaScript(`\n javascript:(function(){${script} })()\n `);\n // this.webView.evalu\n } \n\n getAnalyticsData = async () => { \n const uuid = await UserInfo.getBootpayUUID(); \n const bootpaySK = await UserInfo.getBootpaySK();\n const bootLastTime = await UserInfo.getBootpayLastTime(); \n\n\n const elaspedTime = Date.now() - bootLastTime; \n return `window.BootPay.setAnalyticsData({uuid:'${uuid}',sk:'${bootpaySK}',sk_time:${bootLastTime},time:${elaspedTime}});`;\n // this.callJavaScript(`window.BootPay.setAnalyticsData({uuid:'${uuid}',sk:'${bootpaySK}',sk_time:${bootLastTime},time:${elaspedTime}});`); \n }\n} \n\n\nvar styles = StyleSheet.create({\n container: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n backgroundColor: '#F5FCFF',\n },\n welcome: {\n fontSize: 20,\n textAlign: 'center',\n margin: 10,\n },\n // Flex to fill, position absolute, \n // Fixed left/top, and the width set to the window width\n overlay: { \n width: 25,\n height: 25, \n right: 5,\n alignSelf: 'flex-end'\n } \n });"]}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import base64 from 'react-native-base64';
|
|
2
|
-
import DeviceInfo from 'react-native-device-info'; // import CryptoJS from 'crypto-js';
|
|
2
|
+
import DeviceInfo from 'react-native-device-info'; // import CryptoJS from 'crypto-js';
|
|
3
3
|
|
|
4
|
-
import
|
|
5
|
-
import { NativeModules, Platform } from 'react-native';
|
|
4
|
+
import { NativeModules } from 'react-native';
|
|
6
5
|
var Aes = NativeModules.Aes;
|
|
7
6
|
|
|
8
7
|
const userTrace = async (applicationId, userId, phone, email, gender, birth, area) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["BootpayAnalytics.js"],"names":["base64","DeviceInfo","
|
|
1
|
+
{"version":3,"sources":["BootpayAnalytics.js"],"names":["base64","DeviceInfo","NativeModules","Aes","userTrace","applicationId","userId","phone","email","gender","birth","area","payload","getVersion","key","getRandomKey","iv","data","encrypt","JSON","stringify","stringToHex","then","cipher","response","fetch","method","headers","Accept","body","session_key","getSessionKey","json","e","console","log","error","pageTrace","url","pageType","items","str","hex","i","l","length","charCodeAt","toString","text","keys","charAt","Math","floor","random","keyValue","encode","ivValue","strEncode","hmac256","hash"],"mappings":"AAEA,OAAOA,MAAP,MAAmB,qBAAnB;AACA,OAAOC,UAAP,MAAuB,0BAAvB,C,CAEA;;AACA,SAASC,aAAT,QAA8B,cAA9B;AACA,IAAIC,GAAG,GAAGD,aAAa,CAACC,GAAxB;;AAGA,MAAMC,SAAS,GAAG,OAAOC,aAAP,EAAsBC,MAAtB,EAA8BC,KAA9B,EAAqCC,KAArC,EAA4CC,MAA5C,EAAoDC,KAApD,EAA2DC,IAA3D,KAAoE;AAClF,MAAI;AACA,UAAMC,OAAO,GAAG;AACZ,YAAMN,MADM;AAEZ,aAAOL,UAAU,CAACY,UAAX,EAFK;AAGZ,wBAAkBR,aAHN;AAIZ,eAASE,KAJG;AAKZ,eAASC,KALG;AAMZ,gBAAUC,MANE;AAOZ,eAASC,KAPG;AAQZ,cAAQC;AARI,KAAhB;AAWA,QAAIG,GAAG,GAAGC,YAAY,CAAC,EAAD,CAAtB;AACA,QAAIC,EAAE,GAAGD,YAAY,CAAC,EAAD,CAArB;;AAEA,QAAI;AACA,YAAME,IAAI,GAAG,MAAMd,GAAG,CAACe,OAAJ,CAAYC,IAAI,CAACC,SAAL,CAAeR,OAAf,CAAZ,EAAqCS,WAAW,CAACP,GAAD,CAAhD,EAAuDO,WAAW,CAACL,EAAD,CAAlE,EAAwEM,IAAxE,CAA6EC,MAAM,IAAIA,MAAvF,CAAnB;AAEA,YAAMC,QAAQ,GAAG,MAAMC,KAAK,CACxB,uCADwB,EAExB;AACIC,QAAAA,MAAM,EAAE,MADZ;AAEIC,QAAAA,OAAO,EAAE;AACLC,UAAAA,MAAM,EAAE,kBADH;AAEL,0BAAgB;AAFX,SAFb;AAMIC,QAAAA,IAAI,EAAEV,IAAI,CAACC,SAAL,CAAe;AACjBH,UAAAA,IAAI,EAAEA,IADW;AAEjBa,UAAAA,WAAW,EAAE,MAAMC,aAAa,CAACjB,GAAD,EAAME,EAAN;AAFf,SAAf;AANV,OAFwB,CAA5B;AAcE,YAAMgB,IAAI,GAAG,MAAMR,QAAQ,CAACQ,IAAT,EAAnB;AACA,aAAOA,IAAP;AACL,KAnBD,CAmBE,OAAOC,CAAP,EAAU;AACRC,MAAAA,OAAO,CAACC,GAAR,CAAYF,CAAZ;AACH;AACJ,GArCD,CAqCE,OAAOG,KAAP,EAAc;AACZF,IAAAA,OAAO,CAACE,KAAR,CAAcA,KAAd;AACH;AACJ,CAzCD;;AA2CA,MAAMC,SAAS,GAAG,OAAOhC,aAAP,EAAsBiC,GAAtB,EAA2BC,QAA3B,EAAqCC,KAArC,KAA+C;AAC7D,MAAI;AACA,UAAM5B,OAAO,GAAG;AACZ,wBAAkBP,aADN;AAEZ,aAAOiC,GAFK;AAGZ,mBAAaC,QAHD;AAIZ,eAASC,KAJG;AAKZ,iBAAW;AALC,KAAhB;AAQA,QAAI1B,GAAG,GAAGC,YAAY,CAAC,EAAD,CAAtB;AACA,QAAIC,EAAE,GAAGD,YAAY,CAAC,EAAD,CAArB;;AAEA,QAAI;AACA,YAAME,IAAI,GAAG,MAAMd,GAAG,CAACe,OAAJ,CAAYC,IAAI,CAACC,SAAL,CAAeR,OAAf,CAAZ,EAAqCS,WAAW,CAACP,GAAD,CAAhD,EAAuDO,WAAW,CAACL,EAAD,CAAlE,EAAwEM,IAAxE,CAA6EC,MAAM,IAAIA,MAAvF,CAAnB;AAEA,YAAMC,QAAQ,GAAG,MAAMC,KAAK,CACxB,sCADwB,EAExB;AACIC,QAAAA,MAAM,EAAE,MADZ;AAEIC,QAAAA,OAAO,EAAE;AACLC,UAAAA,MAAM,EAAE,kBADH;AAEL,0BAAgB;AAFX,SAFb;AAMIC,QAAAA,IAAI,EAAEV,IAAI,CAACC,SAAL,CAAe;AACjBH,UAAAA,IAAI,EAAEA,IADW;AAEjBa,UAAAA,WAAW,EAAE,MAAMC,aAAa,CAACjB,GAAD,EAAME,EAAN;AAFf,SAAf;AANV,OAFwB,CAA5B;AAcE,YAAMgB,IAAI,GAAG,MAAMR,QAAQ,CAACQ,IAAT,EAAnB;AACA,aAAOA,IAAP;AACL,KAnBD,CAmBE,OAAOC,CAAP,EAAU;AACRC,MAAAA,OAAO,CAACC,GAAR,CAAYF,CAAZ;AACH;AACJ,GAlCD,CAkCE,OAAOG,KAAP,EAAc;AACZF,IAAAA,OAAO,CAACE,KAAR,CAAcA,KAAd;AACH;AACJ,CAtCD;;AAwCA,MAAMf,WAAW,GAAIoB,GAAD,IAAS;AACzB,MAAIC,GAAG,GAAG,EAAV;;AACA,OAAK,IAAIC,CAAC,GAAG,CAAR,EAAWC,CAAC,GAAGH,GAAG,CAACI,MAAxB,EAAgCF,CAAC,GAAGC,CAApC,EAAuCD,CAAC,EAAxC,EAA4C;AACxCD,IAAAA,GAAG,IAAID,GAAG,CAACK,UAAJ,CAAeH,CAAf,EAAkBI,QAAlB,CAA2B,EAA3B,CAAP;AACH;;AACD,SAAOL,GAAP;AACH,CAND;;AAQA,MAAM3B,YAAY,GAAI8B,MAAD,IAAY;AAC7B,MAAIG,IAAI,GAAG,EAAX;AACA,MAAIC,IAAI,GAAG,gEAAX;;AAEA,OAAK,IAAIN,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGE,MAApB,EAA4BF,CAAC,EAA7B,EACIK,IAAI,IAAIC,IAAI,CAACC,MAAL,CAAYC,IAAI,CAACC,KAAL,CAAWD,IAAI,CAACE,MAAL,KAAgBJ,IAAI,CAACJ,MAAhC,CAAZ,CAAR;;AAEJ,SAAOG,IAAP;AACH,CARD;;AAWA,MAAMjB,aAAa,GAAG,OAAOjB,GAAP,EAAYE,EAAZ,KAAmB;AACrC,QAAMsC,QAAQ,GAAGtD,MAAM,CAACuD,MAAP,CAAczC,GAAd,CAAjB;AACA,QAAM0C,OAAO,GAAGxD,MAAM,CAACuD,MAAP,CAAcvC,EAAd,CAAhB;AAEA,SAAQ,GAAEsC,QAAS,KAAIE,OAAQ,EAA/B;AACH,CALD;;AAOA,MAAMC,SAAS,GAAG,OAAOhB,GAAP,EAAY3B,GAAZ,EAAiBE,EAAjB,KAAwB;AACtC,SAAO,MAAMb,GAAG,CAACe,OAAJ,CAAYuB,GAAZ,EAAiB3B,GAAjB,EAAsBE,EAAtB,EAA0BM,IAA1B,CAA+BC,MAAM,IAAI;AAClDpB,IAAAA,GAAG,CAACuD,OAAJ,CAAYnC,MAAZ,EAAoBT,GAApB,EAAyBQ,IAAzB,CAA8BqC,IAAI,IAAI;AAClCzB,MAAAA,OAAO,CAACC,GAAR,CAAY,MAAZ,EAAoBwB,IAApB;AACA,aAAOA,IAAP;AACH,KAHD;AAIH,GALY,CAAb;AAOH,CARD;;AAUA,SAASvD,SAAT,EAAoBiC,SAApB","sourcesContent":["\n \nimport base64 from 'react-native-base64'\nimport DeviceInfo from 'react-native-device-info';\n\n// import CryptoJS from 'crypto-js'; \nimport { NativeModules } from 'react-native'\nvar Aes = NativeModules.Aes\n\n\nconst userTrace = async (applicationId, userId, phone, email, gender, birth, area) => { \n try { \n const payload = {\n \"id\": userId, \n \"ver\": DeviceInfo.getVersion(),\n \"application_id\": applicationId, \n \"phone\": phone,\n \"email\": email,\n \"gender\": gender,\n \"birth\": birth,\n \"area\": area\n };\n\n var key = getRandomKey(32);\n var iv = getRandomKey(16);\n \n try { \n const data = await Aes.encrypt(JSON.stringify(payload), stringToHex(key), stringToHex(iv)).then(cipher => cipher);\n\n const response = await fetch(\n 'https://analytics.bootpay.co.kr/login',\n {\n method: 'POST',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n data: data,\n session_key: await getSessionKey(key, iv)\n })\n }\n );\n const json = await response.json();\n return json;\n } catch (e) {\n console.log(e);\n } \n } catch (error) {\n console.error(error);\n }\n}\n\nconst pageTrace = async (applicationId, url, pageType, items) => { \n try { \n const payload = {\n \"application_id\": applicationId, \n \"url\": url, \n \"page_type\": pageType,\n \"items\": items,\n \"referer\": ''\n }; \n\n var key = getRandomKey(32);\n var iv = getRandomKey(16);\n \n try { \n const data = await Aes.encrypt(JSON.stringify(payload), stringToHex(key), stringToHex(iv)).then(cipher => cipher);\n\n const response = await fetch(\n 'https://analytics.bootpay.co.kr/call',\n {\n method: 'POST',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n data: data,\n session_key: await getSessionKey(key, iv)\n })\n }\n );\n const json = await response.json();\n return json;\n } catch (e) {\n console.log(e);\n } \n } catch (error) {\n console.error(error);\n }\n}\n\nconst stringToHex = (str) => {\n var hex = ''\n for (var i = 0, l = str.length; i < l; i++) {\n hex += str.charCodeAt(i).toString(16)\n }\n return hex\n}\n\nconst getRandomKey = (length) => {\n var text = '';\n var keys = 'abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n\n for (var i = 0; i < length; i++)\n text += keys.charAt(Math.floor(Math.random() * keys.length));\n\n return text;\n}\n\n\nconst getSessionKey = async (key, iv) => {\n const keyValue = base64.encode(key);\n const ivValue = base64.encode(iv);\n\n return `${keyValue}##${ivValue}`;\n}\n\nconst strEncode = async (str, key, iv) => {\n return await Aes.encrypt(str, key, iv).then(cipher => {\n Aes.hmac256(cipher, key).then(hash => {\n console.log('HMAC', hash)\n return hash;\n })\n })\n\n}\n\nexport { userTrace, pageTrace }\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
2
|
|
|
3
|
-
import React, { Component, useRef } from 'react';
|
|
4
|
-
import { SafeAreaView, Modal, Platform, TouchableOpacity, Image, StyleSheet } from 'react-native';
|
|
3
|
+
import React, { Component, useRef, useEffect } from 'react';
|
|
4
|
+
import { SafeAreaView, Modal, Platform, TouchableOpacity, Image, StyleSheet, BackHandler } from 'react-native';
|
|
5
5
|
import WebView from 'react-native-webview-bootpay';
|
|
6
6
|
import UserInfo from './UserInfo';
|
|
7
7
|
export class BootpayWebView extends Component {
|
|
@@ -16,8 +16,6 @@ export class BootpayWebView extends Component {
|
|
|
16
16
|
firstLoad: false
|
|
17
17
|
});
|
|
18
18
|
|
|
19
|
-
_defineProperty(this, "s", void 0);
|
|
20
|
-
|
|
21
19
|
_defineProperty(this, "request", async (payload, items, user, extra) => {
|
|
22
20
|
payload.application_id = Platform.OS == 'ios' ? this.props.ios_application_id : this.props.android_application_id;
|
|
23
21
|
payload.items = items;
|
|
@@ -164,6 +162,19 @@ export class BootpayWebView extends Component {
|
|
|
164
162
|
});
|
|
165
163
|
}
|
|
166
164
|
|
|
165
|
+
// canGoBack() {
|
|
166
|
+
// console.log('canGoBack');
|
|
167
|
+
// if(this.webView.current) {
|
|
168
|
+
// return this.webView.current.canGoBack();
|
|
169
|
+
// }
|
|
170
|
+
// return false;
|
|
171
|
+
// }
|
|
172
|
+
// goBack() {
|
|
173
|
+
// console.log('GoBack');
|
|
174
|
+
// if(this.webView.goBack) {
|
|
175
|
+
// this.webView.current.goBack();
|
|
176
|
+
// }
|
|
177
|
+
// }
|
|
167
178
|
async componentWillUnmount() {
|
|
168
179
|
this.setState({
|
|
169
180
|
visibility: false,
|
|
@@ -176,7 +187,12 @@ export class BootpayWebView extends Component {
|
|
|
176
187
|
render() {
|
|
177
188
|
return /*#__PURE__*/React.createElement(Modal, {
|
|
178
189
|
animationType: 'slide',
|
|
179
|
-
transparent: false
|
|
190
|
+
transparent: false // shouldCloseOnOverlayClick={true}
|
|
191
|
+
,
|
|
192
|
+
onRequestClose: () => {
|
|
193
|
+
console.log('onRequestClose');
|
|
194
|
+
this.dismiss();
|
|
195
|
+
},
|
|
180
196
|
visible: this.state.visibility
|
|
181
197
|
}, /*#__PURE__*/React.createElement(SafeAreaView, {
|
|
182
198
|
style: {
|
|
@@ -202,7 +218,8 @@ export class BootpayWebView extends Component {
|
|
|
202
218
|
style: [styles.overlay],
|
|
203
219
|
source: require('../images/close.png')
|
|
204
220
|
})), /*#__PURE__*/React.createElement(WebView, {
|
|
205
|
-
ref: wv => this.webView = wv
|
|
221
|
+
ref: wv => this.webView = wv // ref={btWebView}
|
|
222
|
+
,
|
|
206
223
|
useWebKit: true,
|
|
207
224
|
originWhitelist: ['*'],
|
|
208
225
|
source: {
|
|
@@ -210,8 +227,8 @@ export class BootpayWebView extends Component {
|
|
|
210
227
|
},
|
|
211
228
|
injectedJavaScript: this.state.script,
|
|
212
229
|
javaScriptEnabled: true,
|
|
213
|
-
javaScriptCanOpenWindowsAutomatically: true
|
|
214
|
-
|
|
230
|
+
javaScriptCanOpenWindowsAutomatically: true // scalesPageToFit={true}
|
|
231
|
+
,
|
|
215
232
|
onMessage: this.onMessage,
|
|
216
233
|
onShouldStartLoadWithRequest: this.onShouldStartLoadWithRequest
|
|
217
234
|
})));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["BootpayWebView.js"],"names":["React","Component","useRef","SafeAreaView","Modal","Platform","TouchableOpacity","Image","StyleSheet","WebView","UserInfo","BootpayWebView","visibility","script","firstLoad","payload","items","user","extra","application_id","OS","props","ios_application_id","android_application_id","user_info","quickPopup","undefined","quick_popup","setState","getMountJavascript","generateScript","showCloseButton","show_close_button","updateInfo","removePaymentWindow","getBootpayPlatform","getAnalyticsData","onError","onCancel","onReady","onConfirm","onClose","onDone","JSON","stringify","nativeEvent","data","json","action","message","dismiss","parse","url","callJavaScript","webView","injectJavaScript","uuid","getBootpayUUID","bootpaySK","getBootpaySK","bootLastTime","getBootpayLastTime","elaspedTime","Date","now","componentWillUnmount","setBootpayLastTime","render","state","flex","cancelData","closeData","styles","overlay","require","wv","uri","onMessage","onShouldStartLoadWithRequest","create","container","justifyContent","alignItems","backgroundColor","welcome","fontSize","textAlign","margin","width","height","right","alignSelf"],"mappings":"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","sourcesContent":["\n\nimport React, { Component, useRef } from 'react';\nimport { SafeAreaView, Modal, Platform, TouchableOpacity, Image, StyleSheet } from 'react-native';\nimport WebView from 'react-native-webview-bootpay';\nimport UserInfo from './UserInfo'\n\nexport class BootpayWebView extends Component {\n webView = useRef<WebView>(null); \n\n state = {\n visibility: false, \n script: '',\n firstLoad: false\n } \ns\n async componentWillUnmount() {\n this.setState(\n {\n visibility: false, \n firstLoad: false,\n showCloseButton: false\n }\n )\n UserInfo.setBootpayLastTime(Date.now());\n }\n \n render() {\n\n\n return <Modal\n animationType={'slide'}\n transparent={false}\n visible={this.state.visibility}>\n <SafeAreaView style={{ flex: 1 }}>\n {\n this.state.showCloseButton &&\n <TouchableOpacity\n onPress={() => {\n var cancelData = {\n action: 'BootpayCancel',\n message: '사용자에 의해 취소되었습니다'\n }\n var closeData = {\n action: 'BootpayClose',\n message: '결제창이 닫혔습니다'\n }\n \n if(this.props.onCancel != undefined) this.props.onCancel(cancelData);\n if(this.props.onClose != undefined) this.props.onClose(closeData); \n\n this.setState({visibility: false})\n } }>\n <Image \n style={[styles.overlay]}\n source={require('../images/close.png')} />\n </TouchableOpacity>\n }\n <WebView\n ref={(wv) => this.webView = wv}\n useWebKit={true}\n originWhitelist={['*']}\n source={{\n uri: 'https://inapp.bootpay.co.kr/3.3.3/production.html'\n }}\n injectedJavaScript={this.state.script}\n javaScriptEnabled={true}\n javaScriptCanOpenWindowsAutomatically={true}\n scalesPageToFit={true} \n onMessage={this.onMessage}\n onShouldStartLoadWithRequest={this.onShouldStartLoadWithRequest}\n />\n </SafeAreaView>\n\n </Modal>\n }\n\n request = async (payload, items, user, extra) => { \n\n payload.application_id = Platform.OS == 'ios' ? this.props.ios_application_id : this.props.android_application_id;\n payload.items = items;\n payload.user_info = user;\n payload.extra = extra; \n \n\n var quickPopup = '';\n\n if(extra != undefined && extra.quick_popup != undefined) {\n if(extra.quick_popup == 1) {\n quickPopup = 'BootPay.startQuickPopup();';\n }\n } \n \n\n //visibility가 true가 되면 webview onLoaded가 실행됨\n this.setState(\n {\n visibility: true,\n script: `\n ${await this.getMountJavascript()}\n ${quickPopup}\n ${this.generateScript(payload)}\n `,\n firstLoad: false,\n showCloseButton: extra.show_close_button || false \n }\n ) \n\n UserInfo.updateInfo();\n }\n\n dismiss = () => {\n this.setState(\n ({ visibility }) => ({\n visibility: false\n })\n )\n this.removePaymentWindow();\n }\n \n\n getMountJavascript = async () => { \n return `\n ${this.getBootpayPlatform()}\n ${await this.getAnalyticsData()}\n `; \n }\n\n\n generateScript= (payload) => { \n const onError = '.error(function(data){ window.BootpayRNWebView.postMessage( JSON.stringify(data) ); })';\n const onCancel = '.cancel(function(data){ window.BootpayRNWebView.postMessage( JSON.stringify(data) ); })';\n const onReady = '.ready(function(data){ window.BootpayRNWebView.postMessage( JSON.stringify(data) ); })';\n const onConfirm = '.confirm(function(data){ window.BootpayRNWebView.postMessage( JSON.stringify(data) ); })';\n const onClose = '.close(function(data){ window.BootpayRNWebView.postMessage(\"close\"); })';\n const onDone = '.done(function(data){ window.BootpayRNWebView.postMessage( JSON.stringify(data) ); })';\n\n return `BootPay.request(${JSON.stringify(payload)})` + onError + onCancel + onReady + onConfirm + onClose + onDone + '; void(0);';\n }\n\n onMessage = ({ nativeEvent }) => { \n if (nativeEvent == undefined || nativeEvent.data == undefined) return;\n \n if(nativeEvent.data == 'close') {\n if(this.props.onClose == undefined) return;\n var json = {\n action: 'BootpayClose',\n message: '결제창이 닫혔습니다'\n }\n this.props.onClose(json);\n this.dismiss();\n return;\n }\n\n const data = JSON.parse(nativeEvent.data);\n switch (data.action) {\n case 'BootpayCancel':\n if(this.props.onCancel != undefined) this.props.onCancel(data);\n this.setState(\n {\n visibility: false\n }\n )\n break;\n case 'BootpayError':\n if(this.props.onError != undefined) this.props.onError(data);\n this.setState(\n {\n visibility: false\n }\n )\n break;\n case 'BootpayBankReady':\n if(this.props.onReady != undefined) this.props.onReady(data);\n break;\n case 'BootpayConfirm':\n if(this.props.onConfirm != undefined) this.props.onConfirm(data);\n break;\n case 'BootpayDone':\n if(this.props.onDone != undefined) this.props.onDone(data);\n this.setState(\n {\n visibility: false\n }\n )\n break;\n }\n }\n\n onShouldStartLoadWithRequest = (url) => { \n return true;\n }\n\n getBootpayPlatform = () => { \n if(Platform.OS == 'ios') {\n return \"BootPay.setDevice('IOS');\";\n } else if(Platform.OS == 'android'){\n return \"BootPay.setDevice('ANDROID');\"; \n }\n }\n\n // setPayScript = () => {\n // const fullScript = this.generateScript(this.state.script);\n // this.injectJavaScript(fullScript);\n // if(this.state.showCloseButton == true) {\n // if(this.webView == null || this.webView == undefined) return; \n // this.webView.showCloseButton();\n // }\n // } \n\n transactionConfirm = (data) => {\n // console.log('transactionConfirm: ' + data);\n\n var json = JSON.stringify(data)\n this.callJavaScript(`\n BootPay.transactionConfirm(${json});\n `);\n }\n\n removePaymentWindow = () => {\n this.callJavaScript(`\n BootPay.removePaymentWindow();\n `);\n } \n\n callJavaScript = (script) => {\n if(this.webView == null || this.webView == undefined) return;\n\n // console.log('callJavascript: ' + script);\n\n this.webView.injectJavaScript(`\n javascript:(function(){${script} })()\n `);\n // this.webView.evalu\n } \n\n getAnalyticsData = async () => { \n const uuid = await UserInfo.getBootpayUUID(); \n const bootpaySK = await UserInfo.getBootpaySK();\n const bootLastTime = await UserInfo.getBootpayLastTime(); \n\n\n const elaspedTime = Date.now() - bootLastTime; \n return `window.BootPay.setAnalyticsData({uuid:'${uuid}',sk:'${bootpaySK}',sk_time:${bootLastTime},time:${elaspedTime}});`;\n // this.callJavaScript(`window.BootPay.setAnalyticsData({uuid:'${uuid}',sk:'${bootpaySK}',sk_time:${bootLastTime},time:${elaspedTime}});`); \n }\n} \n\n\nvar styles = StyleSheet.create({\n container: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n backgroundColor: '#F5FCFF',\n },\n welcome: {\n fontSize: 20,\n textAlign: 'center',\n margin: 10,\n },\n // Flex to fill, position absolute, \n // Fixed left/top, and the width set to the window width\n overlay: { \n width: 25,\n height: 25, \n right: 5,\n alignSelf: 'flex-end'\n } \n });"]}
|
|
1
|
+
{"version":3,"sources":["BootpayWebView.js"],"names":["React","Component","useRef","useEffect","SafeAreaView","Modal","Platform","TouchableOpacity","Image","StyleSheet","BackHandler","WebView","UserInfo","BootpayWebView","visibility","script","firstLoad","payload","items","user","extra","application_id","OS","props","ios_application_id","android_application_id","user_info","quickPopup","undefined","quick_popup","setState","getMountJavascript","generateScript","showCloseButton","show_close_button","updateInfo","removePaymentWindow","getBootpayPlatform","getAnalyticsData","onError","onCancel","onReady","onConfirm","onClose","onDone","JSON","stringify","nativeEvent","data","json","action","message","dismiss","parse","url","callJavaScript","webView","injectJavaScript","uuid","getBootpayUUID","bootpaySK","getBootpaySK","bootLastTime","getBootpayLastTime","elaspedTime","Date","now","componentWillUnmount","setBootpayLastTime","render","console","log","state","flex","cancelData","closeData","styles","overlay","require","wv","uri","onMessage","onShouldStartLoadWithRequest","create","container","justifyContent","alignItems","backgroundColor","welcome","fontSize","textAlign","margin","width","height","right","alignSelf"],"mappings":"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","sourcesContent":["\n\nimport React, { Component, useRef, useEffect } from 'react';\nimport { SafeAreaView, Modal, Platform, TouchableOpacity, Image, StyleSheet, BackHandler} from 'react-native';\nimport WebView from 'react-native-webview-bootpay';\nimport UserInfo from './UserInfo'\n\nexport class BootpayWebView extends Component {\n webView = useRef<WebView>(null); \n\n \n state = {\n visibility: false, \n script: '',\n firstLoad: false\n } \n \n // canGoBack() {\n // console.log('canGoBack');\n // if(this.webView.current) {\n // return this.webView.current.canGoBack();\n // }\n // return false;\n // }\n\n // goBack() {\n // console.log('GoBack');\n // if(this.webView.goBack) {\n // this.webView.current.goBack();\n // }\n // }\n\n async componentWillUnmount() {\n this.setState(\n {\n visibility: false, \n firstLoad: false,\n showCloseButton: false\n }\n )\n UserInfo.setBootpayLastTime(Date.now());\n }\n \n render() { \n return <Modal\n animationType={'slide'}\n transparent={false}\n \n // shouldCloseOnOverlayClick={true} \n onRequestClose={()=> {\n console.log('onRequestClose');\n this.dismiss();\n }}\n visible={this.state.visibility}>\n <SafeAreaView style={{ flex: 1 }}>\n {\n this.state.showCloseButton &&\n <TouchableOpacity\n onPress={() => {\n var cancelData = {\n action: 'BootpayCancel',\n message: '사용자에 의해 취소되었습니다'\n }\n var closeData = {\n action: 'BootpayClose',\n message: '결제창이 닫혔습니다'\n }\n \n if(this.props.onCancel != undefined) this.props.onCancel(cancelData);\n if(this.props.onClose != undefined) this.props.onClose(closeData); \n\n this.setState({visibility: false})\n } }>\n <Image \n style={[styles.overlay]}\n source={require('../images/close.png')} />\n </TouchableOpacity>\n }\n <WebView\n ref={(wv) => this.webView = wv}\n // ref={btWebView}\n useWebKit={true}\n originWhitelist={['*']}\n source={{\n uri: 'https://inapp.bootpay.co.kr/3.3.3/production.html'\n }}\n injectedJavaScript={this.state.script}\n javaScriptEnabled={true}\n javaScriptCanOpenWindowsAutomatically={true}\n // scalesPageToFit={true} \n onMessage={this.onMessage}\n onShouldStartLoadWithRequest={this.onShouldStartLoadWithRequest}\n />\n </SafeAreaView>\n\n </Modal>\n }\n\n request = async (payload, items, user, extra) => { \n\n payload.application_id = Platform.OS == 'ios' ? this.props.ios_application_id : this.props.android_application_id;\n payload.items = items;\n payload.user_info = user;\n payload.extra = extra; \n \n\n var quickPopup = '';\n\n if(extra != undefined && extra.quick_popup != undefined) {\n if(extra.quick_popup == 1) {\n quickPopup = 'BootPay.startQuickPopup();';\n }\n } \n \n\n //visibility가 true가 되면 webview onLoaded가 실행됨\n this.setState(\n {\n visibility: true,\n script: `\n ${await this.getMountJavascript()}\n ${quickPopup}\n ${this.generateScript(payload)}\n `,\n firstLoad: false,\n showCloseButton: extra.show_close_button || false \n }\n ) \n\n UserInfo.updateInfo();\n }\n\n dismiss = () => {\n this.setState(\n ({ visibility }) => ({\n visibility: false\n })\n )\n this.removePaymentWindow();\n }\n \n\n getMountJavascript = async () => { \n return `\n ${this.getBootpayPlatform()}\n ${await this.getAnalyticsData()}\n `; \n }\n\n\n generateScript= (payload) => { \n const onError = '.error(function(data){ window.BootpayRNWebView.postMessage( JSON.stringify(data) ); })';\n const onCancel = '.cancel(function(data){ window.BootpayRNWebView.postMessage( JSON.stringify(data) ); })';\n const onReady = '.ready(function(data){ window.BootpayRNWebView.postMessage( JSON.stringify(data) ); })';\n const onConfirm = '.confirm(function(data){ window.BootpayRNWebView.postMessage( JSON.stringify(data) ); })';\n const onClose = '.close(function(data){ window.BootpayRNWebView.postMessage(\"close\"); })';\n const onDone = '.done(function(data){ window.BootpayRNWebView.postMessage( JSON.stringify(data) ); })';\n\n return `BootPay.request(${JSON.stringify(payload)})` + onError + onCancel + onReady + onConfirm + onClose + onDone + '; void(0);';\n }\n\n onMessage = ({ nativeEvent }) => { \n if (nativeEvent == undefined || nativeEvent.data == undefined) return;\n \n if(nativeEvent.data == 'close') {\n if(this.props.onClose == undefined) return;\n var json = {\n action: 'BootpayClose',\n message: '결제창이 닫혔습니다'\n }\n this.props.onClose(json);\n this.dismiss();\n return;\n }\n\n const data = JSON.parse(nativeEvent.data);\n switch (data.action) {\n case 'BootpayCancel':\n if(this.props.onCancel != undefined) this.props.onCancel(data);\n this.setState(\n {\n visibility: false\n }\n )\n break;\n case 'BootpayError':\n if(this.props.onError != undefined) this.props.onError(data);\n this.setState(\n {\n visibility: false\n }\n )\n break;\n case 'BootpayBankReady':\n if(this.props.onReady != undefined) this.props.onReady(data);\n break;\n case 'BootpayConfirm':\n if(this.props.onConfirm != undefined) this.props.onConfirm(data);\n break;\n case 'BootpayDone':\n if(this.props.onDone != undefined) this.props.onDone(data);\n this.setState(\n {\n visibility: false\n }\n )\n break;\n }\n }\n\n onShouldStartLoadWithRequest = (url) => { \n return true;\n }\n\n getBootpayPlatform = () => { \n if(Platform.OS == 'ios') {\n return \"BootPay.setDevice('IOS');\";\n } else if(Platform.OS == 'android'){\n return \"BootPay.setDevice('ANDROID');\"; \n }\n }\n\n // setPayScript = () => {\n // const fullScript = this.generateScript(this.state.script);\n // this.injectJavaScript(fullScript);\n // if(this.state.showCloseButton == true) {\n // if(this.webView == null || this.webView == undefined) return; \n // this.webView.showCloseButton();\n // }\n // } \n\n transactionConfirm = (data) => {\n // console.log('transactionConfirm: ' + data);\n\n var json = JSON.stringify(data)\n this.callJavaScript(`\n BootPay.transactionConfirm(${json});\n `);\n }\n\n removePaymentWindow = () => {\n this.callJavaScript(`\n BootPay.removePaymentWindow();\n `);\n } \n\n callJavaScript = (script) => {\n if(this.webView == null || this.webView == undefined) return;\n\n // console.log('callJavascript: ' + script);\n\n this.webView.injectJavaScript(`\n javascript:(function(){${script} })()\n `);\n // this.webView.evalu\n } \n\n getAnalyticsData = async () => { \n const uuid = await UserInfo.getBootpayUUID(); \n const bootpaySK = await UserInfo.getBootpaySK();\n const bootLastTime = await UserInfo.getBootpayLastTime(); \n\n\n const elaspedTime = Date.now() - bootLastTime; \n return `window.BootPay.setAnalyticsData({uuid:'${uuid}',sk:'${bootpaySK}',sk_time:${bootLastTime},time:${elaspedTime}});`;\n // this.callJavaScript(`window.BootPay.setAnalyticsData({uuid:'${uuid}',sk:'${bootpaySK}',sk_time:${bootLastTime},time:${elaspedTime}});`); \n }\n} \n\n\nvar styles = StyleSheet.create({\n container: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n backgroundColor: '#F5FCFF',\n },\n welcome: {\n fontSize: 20,\n textAlign: 'center',\n margin: 10,\n },\n // Flex to fill, position absolute, \n // Fixed left/top, and the width set to the window width\n overlay: { \n width: 25,\n height: 25, \n right: 5,\n alignSelf: 'flex-end'\n } \n });"]}
|
package/package.json
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-bootpay-api",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "1.5.2",
|
|
4
|
+
"description": "React Native를 위한 bootpay 라이브러리 입니다.",
|
|
5
5
|
"main": "lib/commonjs/index",
|
|
6
6
|
"module": "lib/module/index",
|
|
7
|
-
"types": "src/index.d.ts",
|
|
7
|
+
"types": "src/index.d.ts",
|
|
8
8
|
"react-native": "src/index",
|
|
9
9
|
"source": "src/index",
|
|
10
|
+
"contributors": [
|
|
11
|
+
"Bootpay <bootpay.co.kr@gmail.com>"
|
|
12
|
+
],
|
|
10
13
|
"files": [
|
|
11
14
|
"src",
|
|
12
15
|
"lib",
|
|
@@ -23,14 +26,18 @@
|
|
|
23
26
|
"!**/__mocks__"
|
|
24
27
|
],
|
|
25
28
|
"scripts": {
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"
|
|
29
|
+
"android": "react-native run-android",
|
|
30
|
+
"ios": "react-native run-ios --project-path example/ios",
|
|
31
|
+
"macos": "react-native run-macos --scheme WebviewExample --project-path example/macos",
|
|
32
|
+
"start": "cd example && react-native start",
|
|
33
|
+
"windows": "install-windows-test-app --project-directory example/windows && react-native run-windows --root example --arch x64",
|
|
34
|
+
"ci": "CI=true && yarn lint",
|
|
35
|
+
"ci:publish": "yarn semantic-release",
|
|
36
|
+
"lint": "yarn tsc --noEmit && yarn eslint ./src --ext .ts,.tsx",
|
|
37
|
+
"build": "yarn tsc",
|
|
38
|
+
"prepare": "yarn build",
|
|
39
|
+
"appium": "appium",
|
|
40
|
+
"test:windows": "yarn jest --setupFiles=./jest-setups/jest.setup.js"
|
|
34
41
|
},
|
|
35
42
|
"keywords": [
|
|
36
43
|
"react-native",
|
|
@@ -41,104 +48,53 @@
|
|
|
41
48
|
"author": "bootpay <bootpay.co.kr@gmail.com> (https://github.com/bootpay)",
|
|
42
49
|
"license": "MIT",
|
|
43
50
|
"bugs": {
|
|
44
|
-
"url": "https://
|
|
51
|
+
"url": "https://bootpay.channel.io/"
|
|
45
52
|
},
|
|
46
|
-
"homepage": "https://
|
|
53
|
+
"homepage": "https://www.bootpay.co.kr/",
|
|
47
54
|
"publishConfig": {
|
|
48
55
|
"registry": "https://registry.npmjs.org/"
|
|
49
56
|
},
|
|
50
57
|
"devDependencies": {
|
|
51
|
-
"@
|
|
52
|
-
"@
|
|
53
|
-
"@
|
|
58
|
+
"@babel/core": "^7.0.0",
|
|
59
|
+
"@babel/runtime": "^7.0.0",
|
|
60
|
+
"@react-native-community/cli": "^6.0.0",
|
|
61
|
+
"@react-native-community/cli-platform-android": "^6.0.0",
|
|
62
|
+
"@react-native-community/cli-platform-ios": "^6.0.0",
|
|
63
|
+
"@semantic-release/git": "7.0.16",
|
|
64
|
+
"@types/invariant": "^2.2.30",
|
|
54
65
|
"@types/jest": "^26.0.0",
|
|
55
|
-
"@types/react": "^
|
|
56
|
-
"@types/react-native": "0.
|
|
57
|
-
"
|
|
58
|
-
"eslint": "
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
"
|
|
63
|
-
"
|
|
64
|
-
"
|
|
65
|
-
"
|
|
66
|
-
"
|
|
67
|
-
"react-native
|
|
68
|
-
"
|
|
66
|
+
"@types/react": "^17.0.0",
|
|
67
|
+
"@types/react-native": "^0.64.0",
|
|
68
|
+
"@types/selenium-webdriver": "4.0.9",
|
|
69
|
+
"@typescript-eslint/eslint-plugin": "2.1.0",
|
|
70
|
+
"@typescript-eslint/parser": "2.1.0",
|
|
71
|
+
"appium": "1.17.0",
|
|
72
|
+
"eslint": "6.3.0",
|
|
73
|
+
"eslint-config-airbnb": "18.0.1",
|
|
74
|
+
"eslint-config-prettier": "6.2.0",
|
|
75
|
+
"eslint-plugin-import": "2.18.2",
|
|
76
|
+
"eslint-plugin-jsx-a11y": "6.2.3",
|
|
77
|
+
"eslint-plugin-react": "7.14.3",
|
|
78
|
+
"eslint-plugin-react-native": "3.7.0",
|
|
79
|
+
"jest": "^26.6.3",
|
|
80
|
+
"metro-react-native-babel-preset": "^0.66.2",
|
|
81
|
+
"react": "17.0.2",
|
|
82
|
+
"react-native": "^0.66.0-0",
|
|
83
|
+
"react-native-macos": "^0.66.0-0",
|
|
84
|
+
"react-native-test-app": "^1.3.2",
|
|
85
|
+
"react-native-windows": "^0.66.0-0",
|
|
86
|
+
"selenium-appium": "1.0.2",
|
|
87
|
+
"selenium-webdriver": "4.0.0-alpha.7",
|
|
88
|
+
"semantic-release": "15.13.24",
|
|
89
|
+
"typescript": "^4.0.0",
|
|
90
|
+
"react-native-webview-bootpay": "^11.18.13",
|
|
91
|
+
"react-native-device-info": "^8.7.0",
|
|
69
92
|
"react-native-sensitive-info": "^5.5.8",
|
|
70
|
-
"react-native-base64": "^0.2.1",
|
|
71
|
-
"react-native-
|
|
72
|
-
"react-native-aes-crypto": "^1.3.10"
|
|
93
|
+
"react-native-base64": "^0.2.1",
|
|
94
|
+
"react-native-aes-crypto": "^2.1.0"
|
|
73
95
|
},
|
|
74
96
|
"peerDependencies": {
|
|
75
97
|
"react": "*",
|
|
76
98
|
"react-native": "*"
|
|
77
|
-
},
|
|
78
|
-
"jest": {
|
|
79
|
-
"preset": "react-native",
|
|
80
|
-
"modulePathIgnorePatterns": [
|
|
81
|
-
"<rootDir>/example/node_modules",
|
|
82
|
-
"<rootDir>/lib/"
|
|
83
|
-
]
|
|
84
|
-
},
|
|
85
|
-
"commitlint": {
|
|
86
|
-
"extends": [
|
|
87
|
-
"@commitlint/config-conventional"
|
|
88
|
-
]
|
|
89
|
-
},
|
|
90
|
-
"release-it": {
|
|
91
|
-
"git": {
|
|
92
|
-
"commitMessage": "chore: release ${version}",
|
|
93
|
-
"tagName": "v${version}"
|
|
94
|
-
},
|
|
95
|
-
"npm": {
|
|
96
|
-
"publish": true
|
|
97
|
-
},
|
|
98
|
-
"github": {
|
|
99
|
-
"release": true
|
|
100
|
-
},
|
|
101
|
-
"plugins": {
|
|
102
|
-
"@release-it/conventional-changelog": {
|
|
103
|
-
"preset": "angular"
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
},
|
|
107
|
-
"eslintConfig": {
|
|
108
|
-
"root": true,
|
|
109
|
-
"extends": [
|
|
110
|
-
"@react-native-community",
|
|
111
|
-
"prettier"
|
|
112
|
-
],
|
|
113
|
-
"rules": {
|
|
114
|
-
"prettier/prettier": [
|
|
115
|
-
"error",
|
|
116
|
-
{
|
|
117
|
-
"quoteProps": "consistent",
|
|
118
|
-
"singleQuote": true,
|
|
119
|
-
"tabWidth": 2,
|
|
120
|
-
"trailingComma": "es5",
|
|
121
|
-
"useTabs": false
|
|
122
|
-
}
|
|
123
|
-
]
|
|
124
|
-
}
|
|
125
|
-
},
|
|
126
|
-
"eslintIgnore": [
|
|
127
|
-
"node_modules/",
|
|
128
|
-
"lib/"
|
|
129
|
-
],
|
|
130
|
-
"react-native-builder-bob": {
|
|
131
|
-
"source": "src",
|
|
132
|
-
"output": "lib",
|
|
133
|
-
"targets": [
|
|
134
|
-
"commonjs",
|
|
135
|
-
"module",
|
|
136
|
-
[
|
|
137
|
-
"typescript",
|
|
138
|
-
{
|
|
139
|
-
"project": "tsconfig.build.json"
|
|
140
|
-
}
|
|
141
|
-
]
|
|
142
|
-
]
|
|
143
99
|
}
|
|
144
100
|
}
|
package/src/BootpayAnalytics.js
CHANGED
|
@@ -3,9 +3,8 @@
|
|
|
3
3
|
import base64 from 'react-native-base64'
|
|
4
4
|
import DeviceInfo from 'react-native-device-info';
|
|
5
5
|
|
|
6
|
-
// import CryptoJS from 'crypto-js';
|
|
7
|
-
import
|
|
8
|
-
import { NativeModules, Platform } from 'react-native'
|
|
6
|
+
// import CryptoJS from 'crypto-js';
|
|
7
|
+
import { NativeModules } from 'react-native'
|
|
9
8
|
var Aes = NativeModules.Aes
|
|
10
9
|
|
|
11
10
|
|
package/src/BootpayWebView.js
CHANGED
|
@@ -1,19 +1,35 @@
|
|
|
1
1
|
|
|
2
2
|
|
|
3
|
-
import React, { Component, useRef } from 'react';
|
|
4
|
-
import { SafeAreaView, Modal, Platform, TouchableOpacity, Image, StyleSheet
|
|
3
|
+
import React, { Component, useRef, useEffect } from 'react';
|
|
4
|
+
import { SafeAreaView, Modal, Platform, TouchableOpacity, Image, StyleSheet, BackHandler} from 'react-native';
|
|
5
5
|
import WebView from 'react-native-webview-bootpay';
|
|
6
6
|
import UserInfo from './UserInfo'
|
|
7
7
|
|
|
8
8
|
export class BootpayWebView extends Component {
|
|
9
9
|
webView = useRef<WebView>(null);
|
|
10
10
|
|
|
11
|
+
|
|
11
12
|
state = {
|
|
12
13
|
visibility: false,
|
|
13
14
|
script: '',
|
|
14
15
|
firstLoad: false
|
|
15
16
|
}
|
|
16
|
-
|
|
17
|
+
|
|
18
|
+
// canGoBack() {
|
|
19
|
+
// console.log('canGoBack');
|
|
20
|
+
// if(this.webView.current) {
|
|
21
|
+
// return this.webView.current.canGoBack();
|
|
22
|
+
// }
|
|
23
|
+
// return false;
|
|
24
|
+
// }
|
|
25
|
+
|
|
26
|
+
// goBack() {
|
|
27
|
+
// console.log('GoBack');
|
|
28
|
+
// if(this.webView.goBack) {
|
|
29
|
+
// this.webView.current.goBack();
|
|
30
|
+
// }
|
|
31
|
+
// }
|
|
32
|
+
|
|
17
33
|
async componentWillUnmount() {
|
|
18
34
|
this.setState(
|
|
19
35
|
{
|
|
@@ -25,12 +41,13 @@ s
|
|
|
25
41
|
UserInfo.setBootpayLastTime(Date.now());
|
|
26
42
|
}
|
|
27
43
|
|
|
28
|
-
render() {
|
|
29
|
-
|
|
30
|
-
|
|
44
|
+
render() {
|
|
31
45
|
return <Modal
|
|
32
46
|
animationType={'slide'}
|
|
33
|
-
transparent={false}
|
|
47
|
+
transparent={false}
|
|
48
|
+
onRequestClose={()=> {
|
|
49
|
+
this.dismiss();
|
|
50
|
+
}}
|
|
34
51
|
visible={this.state.visibility}>
|
|
35
52
|
<SafeAreaView style={{ flex: 1 }}>
|
|
36
53
|
{
|
|
@@ -58,15 +75,20 @@ s
|
|
|
58
75
|
}
|
|
59
76
|
<WebView
|
|
60
77
|
ref={(wv) => this.webView = wv}
|
|
78
|
+
// ref={btWebView}
|
|
61
79
|
useWebKit={true}
|
|
62
80
|
originWhitelist={['*']}
|
|
63
81
|
source={{
|
|
64
82
|
uri: 'https://inapp.bootpay.co.kr/3.3.3/production.html'
|
|
65
83
|
}}
|
|
84
|
+
onRequestClose={()=> {
|
|
85
|
+
console.log('onRequestClose');
|
|
86
|
+
this.dismiss();
|
|
87
|
+
}}
|
|
66
88
|
injectedJavaScript={this.state.script}
|
|
67
89
|
javaScriptEnabled={true}
|
|
68
90
|
javaScriptCanOpenWindowsAutomatically={true}
|
|
69
|
-
scalesPageToFit={true}
|
|
91
|
+
// scalesPageToFit={true}
|
|
70
92
|
onMessage={this.onMessage}
|
|
71
93
|
onShouldStartLoadWithRequest={this.onShouldStartLoadWithRequest}
|
|
72
94
|
/>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Component } from 'react';
|
|
2
|
+
export default class UserInfo extends Component {
|
|
3
|
+
static getBootpayInfo: (key: string, defaultVal: any) => Promise<unknown>;
|
|
4
|
+
static setBootpayInfo: (key: string, val: any) => Promise<unknown>;
|
|
5
|
+
static getBootpayUUID: () => Promise<unknown>;
|
|
6
|
+
static getBootpaySK: () => Promise<unknown>;
|
|
7
|
+
static setBootpaySK: (val: string) => Promise<unknown>;
|
|
8
|
+
static newBootpaySK: (uuid: string, time: number) => Promise<unknown>;
|
|
9
|
+
static getBootpayLastTime: () => Promise<unknown>;
|
|
10
|
+
static setBootpayLastTime(val: number): Promise<unknown>;
|
|
11
|
+
static getBootpayUserId(): Promise<unknown>;
|
|
12
|
+
static setBootpayUserId: (val: string) => Promise<unknown>;
|
|
13
|
+
static updateInfo: () => Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=UserInfo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UserInfo.d.ts","sourceRoot":"","sources":["UserInfo.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIlC,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,SAAS;IAC3C,MAAM,CAAC,cAAc,QAAS,MAAM,cAAc,GAAG,sBAYpD;IAED,MAAM,CAAC,cAAc,QAAS,MAAM,OAAO,GAAG,sBAW7C;IAED,MAAM,CAAC,cAAc,yBAGpB;IAED,MAAM,CAAC,YAAY,yBAElB;IAED,MAAM,CAAC,YAAY,QAAS,MAAM,sBAEjC;IAED,MAAM,CAAC,YAAY,SAAU,MAAM,QAAQ,MAAM,sBAEhD;IAED,MAAM,CAAC,kBAAkB,yBAExB;IAED,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,MAAM;IAIrC,MAAM,CAAC,gBAAgB;IAIvB,MAAM,CAAC,gBAAgB,QAAS,MAAM,sBAErC;IAED,MAAM,CAAC,UAAU,sBAWhB;CACJ"}
|
package/src/UserInfo.js
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { Component } from 'react';
|
|
2
|
+
import DeviceInfo from 'react-native-device-info';
|
|
3
|
+
import SInfo from 'react-native-sensitive-info';
|
|
4
|
+
export default class UserInfo extends Component {
|
|
5
|
+
static getBootpayInfo = (key, defaultVal) => {
|
|
6
|
+
return new Promise((resolve, reject) => {
|
|
7
|
+
SInfo.getItem(key, {
|
|
8
|
+
sharedPreferencesName: 'bootpaySharedPrefs',
|
|
9
|
+
keychainService: 'bootpayKeychain'
|
|
10
|
+
}).then((res) => {
|
|
11
|
+
res == undefined ? resolve(defaultVal) : resolve(res);
|
|
12
|
+
resolve(res);
|
|
13
|
+
}).catch((error) => {
|
|
14
|
+
reject(error);
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
static setBootpayInfo = (key, val) => {
|
|
19
|
+
return new Promise((resolve, reject) => {
|
|
20
|
+
SInfo.setItem(String(key), String(val), {
|
|
21
|
+
sharedPreferencesName: 'bootpaySharedPrefs',
|
|
22
|
+
keychainService: 'bootpayKeychain'
|
|
23
|
+
}).then((res) => {
|
|
24
|
+
resolve(res);
|
|
25
|
+
}).catch((error) => {
|
|
26
|
+
reject(error);
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
static getBootpayUUID = () => {
|
|
31
|
+
let uuid = DeviceInfo.getUniqueId();
|
|
32
|
+
return UserInfo.setBootpayInfo('uuid', uuid);
|
|
33
|
+
};
|
|
34
|
+
static getBootpaySK = () => {
|
|
35
|
+
return UserInfo.getBootpayInfo('bootpay_sk', '');
|
|
36
|
+
};
|
|
37
|
+
static setBootpaySK = (val) => {
|
|
38
|
+
return UserInfo.setBootpayInfo('bootpay_sk', val);
|
|
39
|
+
};
|
|
40
|
+
static newBootpaySK = (uuid, time) => {
|
|
41
|
+
return UserInfo.setBootpaySK(`${uuid}_${time}`);
|
|
42
|
+
};
|
|
43
|
+
static getBootpayLastTime = async () => {
|
|
44
|
+
return await UserInfo.getBootpayInfo('bootpay_last_time', 0);
|
|
45
|
+
};
|
|
46
|
+
static setBootpayLastTime(val) {
|
|
47
|
+
return UserInfo.setBootpayInfo('bootpay_last_time', val);
|
|
48
|
+
}
|
|
49
|
+
static getBootpayUserId() {
|
|
50
|
+
return UserInfo.getBootpayInfo('bootpay_user_id', '');
|
|
51
|
+
}
|
|
52
|
+
static setBootpayUserId = (val) => {
|
|
53
|
+
return UserInfo.setBootpayInfo('bootpay_user_id', val);
|
|
54
|
+
};
|
|
55
|
+
static updateInfo = async () => {
|
|
56
|
+
const uuid = await UserInfo.getBootpayUUID();
|
|
57
|
+
const bootpaySK = await UserInfo.getBootpaySK();
|
|
58
|
+
const lastTime = await UserInfo.getBootpayLastTime();
|
|
59
|
+
let current = Date.now();
|
|
60
|
+
if (bootpaySK == '')
|
|
61
|
+
await UserInfo.newBootpaySK(uuid, current);
|
|
62
|
+
const isExpired = current - lastTime > 30 * 60 * 1000;
|
|
63
|
+
if (isExpired)
|
|
64
|
+
await UserInfo.newBootpaySK(uuid, current);
|
|
65
|
+
await UserInfo.setBootpayLastTime(current);
|
|
66
|
+
};
|
|
67
|
+
}
|