iamport-react-native 2.0.0-rc.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/android/build.gradle +1 -3
- package/ios/IamportReactNativeViewManager.m +5 -0
- package/lib/commonjs/components/Certification/index.js +36 -30
- package/lib/commonjs/components/Certification/index.js.map +1 -1
- package/lib/commonjs/components/ErrorOnParams/index.js +2 -10
- package/lib/commonjs/components/ErrorOnParams/index.js.map +1 -1
- package/lib/commonjs/components/Loading/index.js +3 -11
- package/lib/commonjs/components/Loading/index.js.map +1 -1
- package/lib/commonjs/components/Payment/index.js +23 -25
- package/lib/commonjs/components/Payment/index.js.map +1 -1
- package/lib/commonjs/constants/index.js +14 -4
- package/lib/commonjs/constants/index.js.map +1 -1
- package/lib/commonjs/utils/IamportUrl.js +36 -19
- package/lib/commonjs/utils/IamportUrl.js.map +1 -1
- package/lib/commonjs/utils/Validation.js +143 -3
- package/lib/commonjs/utils/Validation.js.map +1 -1
- package/lib/commonjs/utils/ValidationForPayment.js +4 -14
- package/lib/commonjs/utils/ValidationForPayment.js.map +1 -1
- package/lib/module/components/Certification/index.js +36 -29
- package/lib/module/components/Certification/index.js.map +1 -1
- package/lib/module/components/ErrorOnParams/index.js +3 -12
- package/lib/module/components/ErrorOnParams/index.js.map +1 -1
- package/lib/module/components/Loading/index.js +3 -11
- package/lib/module/components/Loading/index.js.map +1 -1
- package/lib/module/components/Payment/index.js +23 -25
- package/lib/module/components/Payment/index.js.map +1 -1
- package/lib/module/constants/index.js +14 -4
- package/lib/module/constants/index.js.map +1 -1
- package/lib/module/utils/IamportUrl.js +36 -19
- package/lib/module/utils/IamportUrl.js.map +1 -1
- package/lib/module/utils/Validation.js +143 -3
- package/lib/module/utils/Validation.js.map +1 -1
- package/lib/module/utils/ValidationForPayment.js +4 -14
- package/lib/module/utils/ValidationForPayment.js.map +1 -1
- package/lib/typescript/components/Certification/index.d.ts +1 -1
- package/lib/typescript/components/Payment/index.d.ts +1 -1
- package/lib/typescript/constants/index.d.ts +12 -2
- package/lib/typescript/utils/IamportUrl.d.ts +2 -2
- package/lib/typescript/utils/Validation.d.ts +52 -2
- package/lib/typescript/utils/ValidationForPayment.d.ts +0 -1
- package/package.json +18 -18
- package/src/components/Certification/index.tsx +69 -59
- package/src/components/ErrorOnParams/index.tsx +4 -23
- package/src/components/Loading/index.tsx +3 -11
- package/src/components/Payment/index.tsx +80 -81
- package/src/constants/index.ts +12 -1
- package/src/utils/IamportUrl.ts +42 -22
- package/src/utils/Validation.ts +142 -4
- package/src/utils/ValidationForPayment.ts +5 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.tsx"],"names":["React","
|
|
1
|
+
{"version":3,"sources":["index.tsx"],"names":["React","createRef","useState","View","WebView","Loading","ErrorOnParams","Validation","IMPConst","viewStyles","IamportUrl","Certification","userCode","tierCode","data","loading","callback","isWebViewLoaded","setIsWebViewLoaded","webview","validation","redirectUrl","M_REDIRECT_URL","m_redirect_url","undefined","trim","getIsValid","loadingContainer","webViewContainer","html","WEBVIEW_SOURCE_HTML","current","injectJavaScript","JSON","stringify","e","nativeEvent","decodeURIComponent","response","parse","request","url","iamportUrl","isAppUrl","launchApp","catch","code","message","imp_success","error_code","error_msg","isPaymentOver","getQuery","getMessage"],"mappings":"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","sourcesContent":["import React, { createRef, useState } from 'react';\nimport { View } from 'react-native';\nimport { WebView } from 'react-native-webview';\n\nimport Loading from '../Loading';\nimport ErrorOnParams from '../ErrorOnParams';\n\nimport { IMPData, Validation } from '../../utils/Validation';\nimport { IMPConst } from '../../constants';\n\nimport viewStyles from '../../styles';\nimport IamportUrl from '../../utils/IamportUrl';\n\ntype Props = {\n userCode: string;\n tierCode?: string;\n data: IMPData.CertificationData;\n loading?: any;\n callback: (response: any) => any;\n};\n\nfunction Certification({ userCode, tierCode, data, loading, callback }: Props) {\n const [isWebViewLoaded, setIsWebViewLoaded] = useState(false);\n const webview = createRef<WebView>();\n const validation = new Validation(userCode, loading, callback, data);\n let redirectUrl = IMPConst.M_REDIRECT_URL;\n if (data.m_redirect_url !== undefined && data.m_redirect_url.trim() !== '') {\n redirectUrl = data.m_redirect_url;\n }\n\n if (validation.getIsValid()) {\n const { loadingContainer, webViewContainer } = viewStyles;\n return (\n <>\n <WebView\n containerStyle={webViewContainer}\n ref={webview}\n source={{ html: IMPConst.WEBVIEW_SOURCE_HTML }}\n onLoadEnd={() => {\n if (!isWebViewLoaded) {\n // html이 load되고 최초 한번만 inject javascript\n if (tierCode) {\n webview.current?.injectJavaScript(`\n setTimeout(function() { IMP.agency(\"${userCode}\", \"${tierCode}\"); });\n `);\n } else {\n webview.current?.injectJavaScript(`\n setTimeout(function() { IMP.init(\"${userCode}\"); });\n `);\n }\n webview.current?.injectJavaScript(`\n setTimeout(function() {\n IMP.certification(${JSON.stringify(data)}, function(response) {\n window.ReactNativeWebView.postMessage(JSON.stringify(response));\n });\n });\n `);\n setIsWebViewLoaded(true);\n }\n }}\n onMessage={(e) => {\n let data = e.nativeEvent.data;\n if (decodeURIComponent(data) !== data) {\n data = decodeURIComponent(data);\n }\n let response = JSON.parse(data);\n\n if (typeof callback === 'function') {\n callback(response);\n }\n }}\n startInLoadingState\n renderLoading={() => (\n <View style={loadingContainer}>{loading || <Loading />}</View>\n )}\n originWhitelist={['*']} // https://github.com/facebook/react-native/issues/19986\n onShouldStartLoadWithRequest={(request) => {\n const { url } = request;\n // console.log('url: ' + url);\n const iamportUrl = new IamportUrl(url);\n if (iamportUrl.isAppUrl()) {\n /* 3rd-party 앱 오픈 */\n iamportUrl.launchApp().catch((e) => {\n const { code, message } = e;\n callback({\n imp_success: false,\n error_code: code,\n error_msg: message,\n });\n });\n\n return false;\n }\n if (iamportUrl.isPaymentOver(redirectUrl)) {\n callback(iamportUrl.getQuery());\n return false;\n }\n\n return true;\n }}\n />\n </>\n );\n }\n\n return <ErrorOnParams message={validation.getMessage()} />;\n}\n\nexport default Certification;\n"]}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { View, Image, Text,
|
|
3
|
-
StyleSheet } from 'react-native';
|
|
2
|
+
import { View, Image, Text, StyleSheet } from 'react-native';
|
|
4
3
|
|
|
5
4
|
const logo = require('../../img/iamport-logo.png');
|
|
6
5
|
|
|
@@ -9,29 +8,21 @@ function ErrorOnParams({
|
|
|
9
8
|
}) {
|
|
10
9
|
return /*#__PURE__*/React.createElement(View, {
|
|
11
10
|
style: styles.container
|
|
12
|
-
}, /*#__PURE__*/React.createElement(View, {
|
|
13
|
-
style: styles.contents
|
|
14
11
|
}, /*#__PURE__*/React.createElement(Image, {
|
|
15
|
-
style: styles.contents,
|
|
16
12
|
source: logo
|
|
17
13
|
}), /*#__PURE__*/React.createElement(Text, {
|
|
18
14
|
style: styles.text
|
|
19
|
-
}, message))
|
|
15
|
+
}, message));
|
|
20
16
|
}
|
|
21
17
|
|
|
22
18
|
const styles = StyleSheet.create({
|
|
23
19
|
container: {
|
|
24
|
-
flex: 1,
|
|
25
|
-
alignItems: 'center',
|
|
26
|
-
flexDirection: 'row',
|
|
27
|
-
justifyContent: 'center'
|
|
28
|
-
},
|
|
29
|
-
contents: {
|
|
30
20
|
flex: 1,
|
|
31
21
|
alignItems: 'center',
|
|
32
22
|
justifyContent: 'center'
|
|
33
23
|
},
|
|
34
24
|
text: {
|
|
25
|
+
textAlign: 'center',
|
|
35
26
|
fontSize: 16,
|
|
36
27
|
marginTop: 20,
|
|
37
28
|
lineHeight: 25
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.tsx"],"names":["React","View","Image","Text","StyleSheet","logo","require","ErrorOnParams","message","styles","container","
|
|
1
|
+
{"version":3,"sources":["index.tsx"],"names":["React","View","Image","Text","StyleSheet","logo","require","ErrorOnParams","message","styles","container","text","create","flex","alignItems","justifyContent","textAlign","fontSize","marginTop","lineHeight","button","backgroundColor","color","borderColor","borderWidth","borderRadius","paddingTop","paddingBottom","paddingLeft","paddingRight","fontWeight"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,IAAT,EAAeC,KAAf,EAAsBC,IAAtB,EAA4BC,UAA5B,QAA8C,cAA9C;;AAEA,MAAMC,IAAI,GAAGC,OAAO,CAAC,4BAAD,CAApB;;AAIA,SAASC,aAAT,CAAuB;AAAEC,EAAAA;AAAF,CAAvB,EAAgD;AAC9C,sBACE,oBAAC,IAAD;AAAM,IAAA,KAAK,EAAEC,MAAM,CAACC;AAApB,kBACE,oBAAC,KAAD;AAAO,IAAA,MAAM,EAAEL;AAAf,IADF,eAEE,oBAAC,IAAD;AAAM,IAAA,KAAK,EAAEI,MAAM,CAACE;AAApB,KAA2BH,OAA3B,CAFF,CADF;AAMD;;AAED,MAAMC,MAAM,GAAGL,UAAU,CAACQ,MAAX,CAAkB;AAC/BF,EAAAA,SAAS,EAAE;AACTG,IAAAA,IAAI,EAAE,CADG;AAETC,IAAAA,UAAU,EAAE,QAFH;AAGTC,IAAAA,cAAc,EAAE;AAHP,GADoB;AAM/BJ,EAAAA,IAAI,EAAE;AACJK,IAAAA,SAAS,EAAE,QADP;AAEJC,IAAAA,QAAQ,EAAE,EAFN;AAGJC,IAAAA,SAAS,EAAE,EAHP;AAIJC,IAAAA,UAAU,EAAE;AAJR,GANyB;AAY/BC,EAAAA,MAAM,EAAE;AACNC,IAAAA,eAAe,EAAE,MADX;AAENC,IAAAA,KAAK,EAAE,SAFD;AAGNC,IAAAA,WAAW,EAAE,MAHP;AAINC,IAAAA,WAAW,EAAE,CAJP;AAKNC,IAAAA,YAAY,EAAE,CALR;AAMNC,IAAAA,UAAU,EAAE,EANN;AAONC,IAAAA,aAAa,EAAE,EAPT;AAQNC,IAAAA,WAAW,EAAE,EARP;AASNC,IAAAA,YAAY,EAAE,EATR;AAUNZ,IAAAA,QAAQ,EAAE,EAVJ;AAWNC,IAAAA,SAAS,EAAE,EAXL;AAYNY,IAAAA,UAAU,EAAE;AAZN;AAZuB,CAAlB,CAAf;AA4BA,eAAevB,aAAf","sourcesContent":["import React from 'react';\nimport { View, Image, Text, StyleSheet } from 'react-native';\n\nconst logo = require('../../img/iamport-logo.png');\n\ntype ErrorProps = { message: string };\n\nfunction ErrorOnParams({ message }: ErrorProps) {\n return (\n <View style={styles.container}>\n <Image source={logo} />\n <Text style={styles.text}>{message}</Text>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n },\n text: {\n textAlign: 'center',\n fontSize: 16,\n marginTop: 20,\n lineHeight: 25,\n },\n button: {\n backgroundColor: '#fff',\n color: '#ff0000',\n borderColor: '#333',\n borderWidth: 1,\n borderRadius: 3,\n paddingTop: 10,\n paddingBottom: 10,\n paddingLeft: 20,\n paddingRight: 20,\n fontSize: 14,\n marginTop: 20,\n fontWeight: 'bold',\n },\n});\n\nexport default ErrorOnParams;\n"]}
|
|
@@ -6,26 +6,18 @@ const logo = require('../../img/iamport-logo.png');
|
|
|
6
6
|
function Loading() {
|
|
7
7
|
return /*#__PURE__*/React.createElement(View, {
|
|
8
8
|
style: styles.container
|
|
9
|
-
}, /*#__PURE__*/React.createElement(View, {
|
|
10
|
-
style: styles.contents
|
|
11
9
|
}, /*#__PURE__*/React.createElement(Image, {
|
|
12
|
-
style: styles.contents,
|
|
13
10
|
source: logo
|
|
14
11
|
}), /*#__PURE__*/React.createElement(Text, {
|
|
15
12
|
style: styles.text
|
|
16
|
-
}, "\uC7A0\uC2DC\uB9CC \uAE30\uB2E4\uB824\uC8FC\uC138\uC694..."))
|
|
13
|
+
}, "\uC7A0\uC2DC\uB9CC \uAE30\uB2E4\uB824\uC8FC\uC138\uC694..."));
|
|
17
14
|
}
|
|
18
15
|
|
|
19
16
|
const styles = StyleSheet.create({
|
|
20
|
-
container: {
|
|
21
|
-
flex: 1,
|
|
22
|
-
alignItems: 'center',
|
|
23
|
-
flexDirection: 'row',
|
|
24
|
-
justifyContent: 'center'
|
|
25
|
-
},
|
|
26
|
-
contents: {
|
|
17
|
+
container: {
|
|
27
18
|
flex: 1,
|
|
28
19
|
alignItems: 'center',
|
|
20
|
+
flexDirection: 'column',
|
|
29
21
|
justifyContent: 'center'
|
|
30
22
|
},
|
|
31
23
|
text: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.tsx"],"names":["React","View","Image","Text","StyleSheet","logo","require","Loading","styles","container","
|
|
1
|
+
{"version":3,"sources":["index.tsx"],"names":["React","View","Image","Text","StyleSheet","logo","require","Loading","styles","container","text","create","flex","alignItems","flexDirection","justifyContent","fontSize","marginTop","lineHeight"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,IAAT,EAAeC,KAAf,EAAsBC,IAAtB,EAA4BC,UAA5B,QAA8C,cAA9C;;AAEA,MAAMC,IAAI,GAAGC,OAAO,CAAC,4BAAD,CAApB;;AAEA,SAASC,OAAT,GAAmB;AACjB,sBACE,oBAAC,IAAD;AAAM,IAAA,KAAK,EAAEC,MAAM,CAACC;AAApB,kBACE,oBAAC,KAAD;AAAO,IAAA,MAAM,EAAEJ;AAAf,IADF,eAEE,oBAAC,IAAD;AAAM,IAAA,KAAK,EAAEG,MAAM,CAACE;AAApB,kEAFF,CADF;AAMD;;AAED,MAAMF,MAAM,GAAGJ,UAAU,CAACO,MAAX,CAAkB;AAC/BF,EAAAA,SAAS,EAAE;AACTG,IAAAA,IAAI,EAAE,CADG;AAETC,IAAAA,UAAU,EAAE,QAFH;AAGTC,IAAAA,aAAa,EAAE,QAHN;AAITC,IAAAA,cAAc,EAAE;AAJP,GADoB;AAO/BL,EAAAA,IAAI,EAAE;AACJM,IAAAA,QAAQ,EAAE,EADN;AAEJC,IAAAA,SAAS,EAAE,EAFP;AAGJC,IAAAA,UAAU,EAAE;AAHR;AAPyB,CAAlB,CAAf;AAcA,eAAeX,OAAf","sourcesContent":["import React from 'react';\nimport { View, Image, Text, StyleSheet } from 'react-native';\n\nconst logo = require('../../img/iamport-logo.png');\n\nfunction Loading() {\n return (\n <View style={styles.container}>\n <Image source={logo} />\n <Text style={styles.text}>잠시만 기다려주세요...</Text>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n alignItems: 'center',\n flexDirection: 'column',\n justifyContent: 'center',\n },\n text: {\n fontSize: 20,\n marginTop: 20,\n lineHeight: 25,\n },\n});\n\nexport default Loading;\n"]}
|
|
@@ -23,6 +23,12 @@ function Payment({
|
|
|
23
23
|
const [isInicisTransPaid, setIsInicisTransPaid] = useState(false);
|
|
24
24
|
const webview = /*#__PURE__*/createRef();
|
|
25
25
|
const smilepayRef = useRef(false);
|
|
26
|
+
let redirectUrl = IMPConst.M_REDIRECT_URL;
|
|
27
|
+
|
|
28
|
+
if (data.m_redirect_url !== undefined && data.m_redirect_url.trim() !== '') {
|
|
29
|
+
redirectUrl = data.m_redirect_url;
|
|
30
|
+
}
|
|
31
|
+
|
|
26
32
|
useEffect(() => {
|
|
27
33
|
const {
|
|
28
34
|
pg
|
|
@@ -67,7 +73,7 @@ function Payment({
|
|
|
67
73
|
var _webview$current;
|
|
68
74
|
|
|
69
75
|
(_webview$current = webview.current) === null || _webview$current === void 0 ? void 0 : _webview$current.injectJavaScript(`
|
|
70
|
-
window.location.href = "${
|
|
76
|
+
window.location.href = "${redirectUrl}?${iamportUrl.getInicisTransQuery(redirectUrl)}";
|
|
71
77
|
`);
|
|
72
78
|
} else {
|
|
73
79
|
setIsInicisTransPaid(true);
|
|
@@ -97,7 +103,7 @@ function Payment({
|
|
|
97
103
|
};
|
|
98
104
|
|
|
99
105
|
Linking.addEventListener('url', handleOpenURL);
|
|
100
|
-
}, [data, isInicisTransPaid, webview]);
|
|
106
|
+
}, [data, isInicisTransPaid, redirectUrl, webview]);
|
|
101
107
|
|
|
102
108
|
const removeLoadingNeeded = () => {
|
|
103
109
|
if (showLoading && Platform.OS === 'android') {
|
|
@@ -138,23 +144,17 @@ function Payment({
|
|
|
138
144
|
|
|
139
145
|
if (validation.getIsValid()) {
|
|
140
146
|
const {
|
|
141
|
-
wrapper,
|
|
142
147
|
loadingContainer,
|
|
143
148
|
webViewContainer
|
|
144
149
|
} = viewStyles;
|
|
145
|
-
return /*#__PURE__*/React.createElement(
|
|
146
|
-
|
|
147
|
-
}, /*#__PURE__*/React.createElement(View, {
|
|
148
|
-
style: webViewContainer
|
|
149
|
-
}, /*#__PURE__*/React.createElement(WebView, {
|
|
150
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(WebView, {
|
|
151
|
+
containerStyle: webViewContainer,
|
|
150
152
|
ref: webview,
|
|
151
153
|
source: webviewSource,
|
|
152
154
|
onLoadEnd: () => {
|
|
153
155
|
if (!isWebViewLoaded) {
|
|
154
156
|
var _webview$current5;
|
|
155
157
|
|
|
156
|
-
data.m_redirect_url = IMPConst.M_REDIRECT_URL;
|
|
157
|
-
|
|
158
158
|
if (data.pg.startsWith('eximbay')) {
|
|
159
159
|
data.popup = false;
|
|
160
160
|
}
|
|
@@ -191,25 +191,19 @@ function Payment({
|
|
|
191
191
|
/* PG사가 callback을 지원하는 경우, 결제결과를 받아 callback을 실행한다 */
|
|
192
192
|
,
|
|
193
193
|
onMessage: e => {
|
|
194
|
-
const {
|
|
195
|
-
data
|
|
196
|
-
} = e.nativeEvent;
|
|
197
194
|
/**
|
|
198
195
|
* [v1.6.0] 다날의 경우 response에 주문명(name)이 포함되어 있는데
|
|
199
196
|
* 주문명에 %가 들어갈 경우, decodeURIComponent시 URI malformed 에러가 발생하는 것 대비해
|
|
200
197
|
* 우선 encodeURIComponent를 한 후, decodeURIComponent가 끝나면
|
|
201
198
|
* 최종적으로 decodeURIComponent를 한 번 더 한다
|
|
202
199
|
*/
|
|
200
|
+
const encoded = encodeURIComponent(e.nativeEvent.data);
|
|
201
|
+
const decoded = decodeURIComponent(encoded);
|
|
202
|
+
const response = JSON.parse(decoded);
|
|
203
203
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
while (decodeURIComponent(response) !== data) {
|
|
207
|
-
response = decodeURIComponent(response);
|
|
204
|
+
if (typeof callback === 'function') {
|
|
205
|
+
callback(response);
|
|
208
206
|
}
|
|
209
|
-
|
|
210
|
-
response = decodeURIComponent(response);
|
|
211
|
-
response = JSON.parse(response);
|
|
212
|
-
callback(response);
|
|
213
207
|
},
|
|
214
208
|
originWhitelist: ['*'] // https://github.com/facebook/react-native/issues/19986
|
|
215
209
|
,
|
|
@@ -217,7 +211,8 @@ function Payment({
|
|
|
217
211
|
onShouldStartLoadWithRequest: request => {
|
|
218
212
|
const {
|
|
219
213
|
url
|
|
220
|
-
} = request;
|
|
214
|
+
} = request; // console.log(`url: ${url}`);
|
|
215
|
+
|
|
221
216
|
const iamportUrl = new IamportUrl(url);
|
|
222
217
|
|
|
223
218
|
if (iamportUrl.isAppUrl()) {
|
|
@@ -236,8 +231,11 @@ function Payment({
|
|
|
236
231
|
return false;
|
|
237
232
|
}
|
|
238
233
|
|
|
239
|
-
if (iamportUrl.isPaymentOver()) {
|
|
240
|
-
callback
|
|
234
|
+
if (iamportUrl.isPaymentOver(redirectUrl)) {
|
|
235
|
+
if (typeof callback === 'function') {
|
|
236
|
+
callback(iamportUrl.getQuery());
|
|
237
|
+
}
|
|
238
|
+
|
|
241
239
|
return false;
|
|
242
240
|
}
|
|
243
241
|
|
|
@@ -252,7 +250,7 @@ function Payment({
|
|
|
252
250
|
|
|
253
251
|
return true;
|
|
254
252
|
}
|
|
255
|
-
})
|
|
253
|
+
}), showLoading && /*#__PURE__*/React.createElement(View, {
|
|
256
254
|
style: loadingContainer
|
|
257
255
|
}, loading || /*#__PURE__*/React.createElement(Loading, null)));
|
|
258
256
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.tsx"],"names":["React","createRef","useEffect","useRef","useState","ValidationForPayment","ErrorOnParams","Linking","Platform","View","IMPConst","IamportUrl","WebView","viewStyles","Loading","Payment","userCode","tierCode","data","loading","callback","webviewSource","setWebviewSource","html","WEBVIEW_SOURCE_HTML","isWebViewLoaded","setIsWebViewLoaded","showLoading","setShowLoading","isInicisTransPaid","setIsInicisTransPaid","webview","smilepayRef","pg","startsWith","OS","current","baseUrl","SMILEPAY_BASE_URL","handleOpenURL","event","pay_method","iamportUrl","url","injectJavaScript","M_REDIRECT_URL","getInicisTransQuery","queryParameters","getQuery","scheme","niceTransRedirectionUrl","app_scheme","toLowerCase","callbackparam1","getStringifiedQuery","addEventListener","removeLoadingNeeded","isIframeWayPayment","customer_uid","validation","getIsValid","wrapper","loadingContainer","webViewContainer","m_redirect_url","popup","JSON","stringify","e","nativeEvent","response","encodeURIComponent","decodeURIComponent","parse","request","isAppUrl","launchApp","catch","code","message","imp_success","error_code","error_msg","isPaymentOver","isIframeLoaded","getMessage"],"mappings":"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","sourcesContent":["import React, { createRef, useEffect, useRef, useState } from 'react';\nimport type { IMPData } from '../../utils/Validation';\nimport ValidationForPayment from '../../utils/ValidationForPayment';\nimport ErrorOnParams from '../ErrorOnParams';\nimport { Linking, Platform, View } from 'react-native';\nimport { IMPConst } from '../../constants';\nimport IamportUrl from '../../utils/IamportUrl';\nimport WebView from 'react-native-webview';\nimport viewStyles from '../../styles';\nimport Loading from '../Loading';\nimport type { WebViewSource } from 'react-native-webview/lib/WebViewTypes';\n\ntype Props = {\n userCode: string;\n tierCode?: string;\n data: IMPData.PaymentData;\n loading: any;\n callback: (response: any) => any;\n};\n\nfunction Payment({ userCode, tierCode, data, loading, callback }: Props) {\n const [webviewSource, setWebviewSource] = useState<WebViewSource>({\n html: IMPConst.WEBVIEW_SOURCE_HTML,\n });\n const [isWebViewLoaded, setIsWebViewLoaded] = useState(false);\n const [showLoading, setShowLoading] = useState(true);\n const [isInicisTransPaid, setIsInicisTransPaid] = useState(false);\n const webview = createRef<WebView>();\n const smilepayRef = useRef(false);\n\n useEffect(() => {\n const { pg } = data;\n if (\n pg.startsWith('smilepay') &&\n Platform.OS === 'ios' &&\n !smilepayRef.current\n ) {\n /**\n * [feature/smilepay] IOS - 스마일페이 대비 코드 작성\n * 스마일페이 결제창을 iframe 방식으로 띄우기 때문에 WKWebView에서 서드 파티 쿠키가 허용되지 않아\n * WKWebView의 baseUrl을 강제로 스마일페이 URL로 적용\n */\n setWebviewSource({\n ...webviewSource,\n baseUrl: IMPConst.SMILEPAY_BASE_URL,\n });\n smilepayRef.current = true;\n }\n }, [data, webviewSource]);\n\n useEffect(() => {\n const handleOpenURL = (event: { url: string }) => {\n const { pg, pay_method } = data;\n if (pay_method === 'trans') {\n const iamportUrl = new IamportUrl(event.url);\n /**\n * [IOS] 웹 표준 이니시스 - 실시간 계좌이체 대비\n * 아래 로직대로 동작해야 최종적으로 결제가 승인된 후 콜백 함수가 호출됨\n * 1. 사파리 앱에서 복귀(app_scheme://imp_uid=%26merchant_uid=%26m_redirect_url=)\n * 2. 최종 결제 승인을 위해 이니시스가 HTTP 리퀘스트 호출\n * 3. \"다음\" 버튼이 있는 최종 화면으로 이동\n * 4. \"다음\" 버튼을 클릭\n * 5. 1번과 마찬가지로 app_scheme://imp_uid=%26merchant_uid=%26m_redirect_url=로 HTTP 리퀘스트 호출\n * 6. 콜백 함수 호출\n * 따라서 현재 handleOpenURL이 트리거 되는 사유가 1번 때문인지 5번 때문인지 구분이 필요하여\n * 이를 위한 isInicisTransPaid 플래그 추가\n */\n if (pg.startsWith('html5_inicis') && Platform.OS === 'ios') {\n if (isInicisTransPaid) {\n webview.current?.injectJavaScript(`\n window.location.href = \"${\n IMPConst.M_REDIRECT_URL\n }?${iamportUrl.getInicisTransQuery()}\";\n `);\n } else {\n setIsInicisTransPaid(true);\n }\n }\n\n /* 나이스 - 실시간 계좌이체 대비 */\n if (pg.startsWith('nice')) {\n const queryParameters = iamportUrl.getQuery();\n const scheme = iamportUrl.scheme;\n let niceTransRedirectionUrl;\n if (scheme === data.app_scheme?.toLowerCase()) {\n if (queryParameters.callbackparam1 != null) {\n niceTransRedirectionUrl = queryParameters.callbackparam1;\n }\n }\n webview.current?.injectJavaScript(`\n window.location.href = \"${niceTransRedirectionUrl}?${iamportUrl.getStringifiedQuery()}\";\n `);\n }\n }\n };\n Linking.addEventListener('url', handleOpenURL);\n }, [data, isInicisTransPaid, webview]);\n\n const removeLoadingNeeded = () => {\n if (showLoading && Platform.OS === 'android') {\n // 로딩상태. 안드로이드 플랫폼\n if (isWebViewLoaded) {\n // 웹뷰 로드 끝. 리디렉션 방식\n return true;\n }\n return isIframeWayPayment();\n }\n // IOS\n return false;\n };\n\n const isIframeWayPayment = () => {\n const { pg, pay_method, customer_uid } = data;\n if (pg.startsWith('html5_inicis') && customer_uid) {\n // 이니시스 빌링결제\n return true;\n }\n if (pg.startsWith('mobilians') && pay_method === 'phone') {\n // 모빌리언스 휴대폰 소액결제\n return true;\n }\n return (\n pg.startsWith('danal') ||\n pg.startsWith('danal_tpay') ||\n pg.startsWith('smilepay') ||\n pg.startsWith('payco') ||\n pg.startsWith('bluewalnut')\n );\n };\n\n const validation = new ValidationForPayment(\n userCode,\n loading,\n callback,\n data\n );\n if (validation.getIsValid()) {\n const { wrapper, loadingContainer, webViewContainer } = viewStyles;\n return (\n <View style={wrapper}>\n <View style={webViewContainer}>\n <WebView\n ref={webview}\n source={webviewSource}\n onLoadEnd={() => {\n if (!isWebViewLoaded) {\n data.m_redirect_url = IMPConst.M_REDIRECT_URL;\n if (data.pg.startsWith('eximbay')) {\n data.popup = false;\n }\n\n if (tierCode) {\n webview.current?.injectJavaScript(`\n setTimeout(function() { IMP.agency(\"${userCode}\", \"${tierCode}\"); });\n `);\n } else {\n webview.current?.injectJavaScript(`\n setTimeout(function() { IMP.init(\"${userCode}\"); });\n `);\n }\n webview.current?.injectJavaScript(`\n setTimeout(function() {\n IMP.request_pay(${JSON.stringify(\n data\n )}, function(response) {\n window.ReactNativeWebView.postMessage(JSON.stringify(response));\n });\n });\n `);\n setIsWebViewLoaded(true);\n }\n\n // only for Android\n if (removeLoadingNeeded()) {\n setShowLoading(false);\n }\n }}\n /* PG사가 callback을 지원하는 경우, 결제결과를 받아 callback을 실행한다 */\n onMessage={(e) => {\n const { data } = e.nativeEvent;\n /**\n * [v1.6.0] 다날의 경우 response에 주문명(name)이 포함되어 있는데\n * 주문명에 %가 들어갈 경우, decodeURIComponent시 URI malformed 에러가 발생하는 것 대비해\n * 우선 encodeURIComponent를 한 후, decodeURIComponent가 끝나면\n * 최종적으로 decodeURIComponent를 한 번 더 한다\n */\n let response = encodeURIComponent(data);\n while (decodeURIComponent(response) !== data) {\n response = decodeURIComponent(response);\n }\n response = decodeURIComponent(response);\n response = JSON.parse(response);\n callback(response);\n }}\n originWhitelist={['*']} // https://github.com/facebook/react-native/issues/19986\n sharedCookiesEnabled={true}\n onShouldStartLoadWithRequest={(request) => {\n const { url } = request;\n const iamportUrl = new IamportUrl(url);\n if (iamportUrl.isAppUrl()) {\n /* 3rd-party 앱 오픈 */\n iamportUrl.launchApp().catch((e) => {\n const { code, message } = e;\n callback({\n imp_success: false,\n error_code: code,\n error_msg: message,\n });\n });\n\n return false;\n }\n if (iamportUrl.isPaymentOver()) {\n callback(iamportUrl.getQuery());\n return false;\n }\n if (\n isWebViewLoaded &&\n showLoading &&\n iamportUrl.isIframeLoaded()\n ) {\n /**\n * only for IOS\n * iframe이 load되면(url이 about:blank 또는 https://service.iamport.kr이 아니면)\n * webview의 loading 상태를 해제한다\n */\n setShowLoading(false);\n }\n return true;\n }}\n />\n </View>\n {showLoading && (\n <View style={loadingContainer}>{loading || <Loading />}</View>\n )}\n </View>\n );\n }\n\n return <ErrorOnParams message={validation.getMessage()} />;\n}\n\nexport default Payment;\n"]}
|
|
1
|
+
{"version":3,"sources":["index.tsx"],"names":["React","createRef","useEffect","useRef","useState","ValidationForPayment","ErrorOnParams","Linking","Platform","View","IMPConst","IamportUrl","WebView","viewStyles","Loading","Payment","userCode","tierCode","data","loading","callback","webviewSource","setWebviewSource","html","WEBVIEW_SOURCE_HTML","isWebViewLoaded","setIsWebViewLoaded","showLoading","setShowLoading","isInicisTransPaid","setIsInicisTransPaid","webview","smilepayRef","redirectUrl","M_REDIRECT_URL","m_redirect_url","undefined","trim","pg","startsWith","OS","current","baseUrl","SMILEPAY_BASE_URL","handleOpenURL","event","pay_method","iamportUrl","url","injectJavaScript","getInicisTransQuery","queryParameters","getQuery","scheme","niceTransRedirectionUrl","app_scheme","toLowerCase","callbackparam1","getStringifiedQuery","addEventListener","removeLoadingNeeded","isIframeWayPayment","customer_uid","validation","getIsValid","loadingContainer","webViewContainer","popup","JSON","stringify","e","encoded","encodeURIComponent","nativeEvent","decoded","decodeURIComponent","response","parse","request","isAppUrl","launchApp","catch","code","message","imp_success","error_code","error_msg","isPaymentOver","isIframeLoaded","getMessage"],"mappings":"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","sourcesContent":["import React, { createRef, useEffect, useRef, useState } from 'react';\nimport type { IMPData } from '../../utils/Validation';\nimport ValidationForPayment from '../../utils/ValidationForPayment';\nimport ErrorOnParams from '../ErrorOnParams';\nimport { Linking, Platform, View } from 'react-native';\nimport { IMPConst } from '../../constants';\nimport IamportUrl from '../../utils/IamportUrl';\nimport WebView from 'react-native-webview';\nimport viewStyles from '../../styles';\nimport Loading from '../Loading';\nimport type { WebViewSource } from 'react-native-webview/lib/WebViewTypes';\n\ntype Props = {\n userCode: string;\n tierCode?: string;\n data: IMPData.PaymentData;\n loading?: any;\n callback: (response: any) => any;\n};\n\nfunction Payment({ userCode, tierCode, data, loading, callback }: Props) {\n const [webviewSource, setWebviewSource] = useState<WebViewSource>({\n html: IMPConst.WEBVIEW_SOURCE_HTML,\n });\n const [isWebViewLoaded, setIsWebViewLoaded] = useState(false);\n const [showLoading, setShowLoading] = useState(true);\n const [isInicisTransPaid, setIsInicisTransPaid] = useState(false);\n const webview = createRef<WebView>();\n const smilepayRef = useRef(false);\n let redirectUrl = IMPConst.M_REDIRECT_URL;\n if (data.m_redirect_url !== undefined && data.m_redirect_url.trim() !== '') {\n redirectUrl = data.m_redirect_url;\n }\n\n useEffect(() => {\n const { pg } = data;\n if (\n pg.startsWith('smilepay') &&\n Platform.OS === 'ios' &&\n !smilepayRef.current\n ) {\n /**\n * [feature/smilepay] IOS - 스마일페이 대비 코드 작성\n * 스마일페이 결제창을 iframe 방식으로 띄우기 때문에 WKWebView에서 서드 파티 쿠키가 허용되지 않아\n * WKWebView의 baseUrl을 강제로 스마일페이 URL로 적용\n */\n setWebviewSource({\n ...webviewSource,\n baseUrl: IMPConst.SMILEPAY_BASE_URL,\n });\n smilepayRef.current = true;\n }\n }, [data, webviewSource]);\n\n useEffect(() => {\n const handleOpenURL = (event: { url: string }) => {\n const { pg, pay_method } = data;\n if (pay_method === 'trans') {\n const iamportUrl = new IamportUrl(event.url);\n /**\n * [IOS] 웹 표준 이니시스 - 실시간 계좌이체 대비\n * 아래 로직대로 동작해야 최종적으로 결제가 승인된 후 콜백 함수가 호출됨\n * 1. 사파리 앱에서 복귀(app_scheme://imp_uid=%26merchant_uid=%26m_redirect_url=)\n * 2. 최종 결제 승인을 위해 이니시스가 HTTP 리퀘스트 호출\n * 3. \"다음\" 버튼이 있는 최종 화면으로 이동\n * 4. \"다음\" 버튼을 클릭\n * 5. 1번과 마찬가지로 app_scheme://imp_uid=%26merchant_uid=%26m_redirect_url=로 HTTP 리퀘스트 호출\n * 6. 콜백 함수 호출\n * 따라서 현재 handleOpenURL이 트리거 되는 사유가 1번 때문인지 5번 때문인지 구분이 필요하여\n * 이를 위한 isInicisTransPaid 플래그 추가\n */\n if (pg.startsWith('html5_inicis') && Platform.OS === 'ios') {\n if (isInicisTransPaid) {\n webview.current?.injectJavaScript(`\n window.location.href = \"${redirectUrl}?${iamportUrl.getInicisTransQuery(\n redirectUrl\n )}\";\n `);\n } else {\n setIsInicisTransPaid(true);\n }\n }\n\n /* 나이스 - 실시간 계좌이체 대비 */\n if (pg.startsWith('nice')) {\n const queryParameters = iamportUrl.getQuery();\n const scheme = iamportUrl.scheme;\n let niceTransRedirectionUrl;\n if (scheme === data.app_scheme?.toLowerCase()) {\n if (queryParameters.callbackparam1 != null) {\n niceTransRedirectionUrl = queryParameters.callbackparam1;\n }\n }\n webview.current?.injectJavaScript(`\n window.location.href = \"${niceTransRedirectionUrl}?${iamportUrl.getStringifiedQuery()}\";\n `);\n }\n }\n };\n Linking.addEventListener('url', handleOpenURL);\n }, [data, isInicisTransPaid, redirectUrl, webview]);\n\n const removeLoadingNeeded = () => {\n if (showLoading && Platform.OS === 'android') {\n // 로딩상태. 안드로이드 플랫폼\n if (isWebViewLoaded) {\n // 웹뷰 로드 끝. 리디렉션 방식\n return true;\n }\n return isIframeWayPayment();\n }\n // IOS\n return false;\n };\n\n const isIframeWayPayment = () => {\n const { pg, pay_method, customer_uid } = data;\n if (pg.startsWith('html5_inicis') && customer_uid) {\n // 이니시스 빌링결제\n return true;\n }\n if (pg.startsWith('mobilians') && pay_method === 'phone') {\n // 모빌리언스 휴대폰 소액결제\n return true;\n }\n return (\n pg.startsWith('danal') ||\n pg.startsWith('danal_tpay') ||\n pg.startsWith('smilepay') ||\n pg.startsWith('payco') ||\n pg.startsWith('bluewalnut')\n );\n };\n\n const validation = new ValidationForPayment(\n userCode,\n loading,\n callback,\n data\n );\n if (validation.getIsValid()) {\n const { loadingContainer, webViewContainer } = viewStyles;\n return (\n <>\n <WebView\n containerStyle={webViewContainer}\n ref={webview}\n source={webviewSource}\n onLoadEnd={() => {\n if (!isWebViewLoaded) {\n if (data.pg.startsWith('eximbay')) {\n data.popup = false;\n }\n\n if (tierCode) {\n webview.current?.injectJavaScript(`\n setTimeout(function() { IMP.agency(\"${userCode}\", \"${tierCode}\"); });\n `);\n } else {\n webview.current?.injectJavaScript(`\n setTimeout(function() { IMP.init(\"${userCode}\"); });\n `);\n }\n webview.current?.injectJavaScript(`\n setTimeout(function() {\n IMP.request_pay(${JSON.stringify(\n data\n )}, function(response) {\n window.ReactNativeWebView.postMessage(JSON.stringify(response));\n });\n });\n `);\n setIsWebViewLoaded(true);\n }\n\n // only for Android\n if (removeLoadingNeeded()) {\n setShowLoading(false);\n }\n }}\n /* PG사가 callback을 지원하는 경우, 결제결과를 받아 callback을 실행한다 */\n onMessage={(e) => {\n /**\n * [v1.6.0] 다날의 경우 response에 주문명(name)이 포함되어 있는데\n * 주문명에 %가 들어갈 경우, decodeURIComponent시 URI malformed 에러가 발생하는 것 대비해\n * 우선 encodeURIComponent를 한 후, decodeURIComponent가 끝나면\n * 최종적으로 decodeURIComponent를 한 번 더 한다\n */\n const encoded = encodeURIComponent(e.nativeEvent.data);\n const decoded = decodeURIComponent(encoded);\n const response = JSON.parse(decoded);\n if (typeof callback === 'function') {\n callback(response);\n }\n }}\n originWhitelist={['*']} // https://github.com/facebook/react-native/issues/19986\n sharedCookiesEnabled={true}\n onShouldStartLoadWithRequest={(request) => {\n const { url } = request;\n // console.log(`url: ${url}`);\n const iamportUrl = new IamportUrl(url);\n if (iamportUrl.isAppUrl()) {\n /* 3rd-party 앱 오픈 */\n iamportUrl.launchApp().catch((e) => {\n const { code, message } = e;\n callback({\n imp_success: false,\n error_code: code,\n error_msg: message,\n });\n });\n\n return false;\n }\n if (iamportUrl.isPaymentOver(redirectUrl)) {\n if (typeof callback === 'function') {\n callback(iamportUrl.getQuery());\n }\n return false;\n }\n if (isWebViewLoaded && showLoading && iamportUrl.isIframeLoaded()) {\n /**\n * only for IOS\n * iframe이 load되면(url이 about:blank 또는 https://service.iamport.kr이 아니면)\n * webview의 loading 상태를 해제한다\n */\n setShowLoading(false);\n }\n return true;\n }}\n />\n {showLoading && (\n <View style={loadingContainer}>{loading || <Loading />}</View>\n )}\n </>\n );\n }\n\n return <ErrorOnParams message={validation.getMessage()} />;\n}\n\nexport default Payment;\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
let IMPConst;
|
|
2
2
|
|
|
3
3
|
(function (_IMPConst) {
|
|
4
|
-
const PG = _IMPConst.PG = ['html5_inicis', 'inicis', 'uplus', 'kcp', 'kcp_billing', 'nice', 'jtnet', 'kakao', 'kakaopay', 'danal', 'danal_tpay', 'kicc', 'settle', 'mobilians', 'payco', 'eximbay', 'paypal', 'naverco', 'naverpay', 'smilepay', 'chai', 'payple', 'alipay', 'bluewalnut', 'tosspay'];
|
|
4
|
+
const PG = _IMPConst.PG = ['html5_inicis', 'inicis', 'uplus', 'kcp', 'kcp_billing', 'nice', 'jtnet', 'kakao', 'kakaopay', 'danal', 'danal_tpay', 'kicc', 'settle', 'mobilians', 'payco', 'eximbay', 'paypal', 'naverco', 'naverpay', 'smilepay', 'chai', 'payple', 'alipay', 'bluewalnut', 'tosspay', 'smartro'];
|
|
5
5
|
const PAY_METHOD = _IMPConst.PAY_METHOD = ['card', 'trans', 'vbank', 'phone', 'samsung', 'kpay', 'cultureland', 'smartculture', 'happymoney', 'booknlife', 'kakaopay', 'lpay', 'payco', 'ssgpay', 'tosspay', // 엑심베이 전용
|
|
6
6
|
'unionpay', // 유니온페이
|
|
7
7
|
'alipay', // 알리페이
|
|
@@ -27,7 +27,7 @@ let IMPConst;
|
|
|
27
27
|
<meta name='viewport' content='width=device-width, initial-scale=1.0'>
|
|
28
28
|
|
|
29
29
|
<script type='text/javascript' src='https://code.jquery.com/jquery-latest.min.js' ></script>
|
|
30
|
-
<script type='text/javascript' src='https://cdn.iamport.kr/js/iamport.payment-1.
|
|
30
|
+
<script type='text/javascript' src='https://cdn.iamport.kr/js/iamport.payment-1.2.0.js'></script>
|
|
31
31
|
</head>
|
|
32
32
|
<body></body>
|
|
33
33
|
</html>
|
|
@@ -55,9 +55,14 @@ let IMPConst;
|
|
|
55
55
|
LPAY: 'lpayapp',
|
|
56
56
|
SSGPAY: 'shinsegaeeasypayment',
|
|
57
57
|
KPAY: 'kpay',
|
|
58
|
+
KBANKPAY: 'ukbanksmartbanknonloginpay',
|
|
58
59
|
PAYNOW: 'lguthepay-xpay',
|
|
59
60
|
WOORIWONCARD: 'com.wooricard.smartapp',
|
|
60
|
-
LPOINT: 'lmslpay'
|
|
61
|
+
LPOINT: 'lmslpay',
|
|
62
|
+
KTFAUTH: 'ktauthexternalcall',
|
|
63
|
+
LGTAUTH: 'upluscorporation',
|
|
64
|
+
SKTAUTH: 'tauthlink',
|
|
65
|
+
WOORIWONBANK: 'wooribank'
|
|
61
66
|
};
|
|
62
67
|
const ANDROID_PACKAGE = _IMPConst.ANDROID_PACKAGE = {
|
|
63
68
|
PACKAGE_ISP: 'kvp.jjy.MispAndroid320',
|
|
@@ -82,9 +87,14 @@ let IMPConst;
|
|
|
82
87
|
PACKAGE_LPAY: 'com.lotte.lpay',
|
|
83
88
|
PACKAGE_SSGPAY: 'com.ssg.serviceapp.android.egiftcertificate',
|
|
84
89
|
PACKAGE_KPAY: 'com.inicis.kpay',
|
|
90
|
+
PACKAGE_KBANKPAY: 'com.kbankwith.smartbank',
|
|
85
91
|
PACKAGE_PAYNOW: 'com.lguplus.paynow',
|
|
86
92
|
PACKAGE_WOORIWONCARD: 'com.wooricard.smartapp',
|
|
87
|
-
PACKAGE_LPOINT: 'com.lottemembers.android'
|
|
93
|
+
PACKAGE_LPOINT: 'com.lottemembers.android',
|
|
94
|
+
PACKAGE_KTFAUTH: 'com.kt.ktauth',
|
|
95
|
+
PACKAGE_LGTAUTH: 'com.lguplus.smartotp',
|
|
96
|
+
PACKAGE_SKTAUTH: 'com.sktelecom.tauth',
|
|
97
|
+
PACKAGE_WOORIWONBANK: 'com.wooribank.smart.npib'
|
|
88
98
|
};
|
|
89
99
|
})(IMPConst || (IMPConst = {}));
|
|
90
100
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.ts"],"names":["PG","PAY_METHOD","CURRENCY","LANGUAGE","EN_AVAILABLE_PG","CARRIERS","ANDROID_MARKET_PREFIX","IOS_MARKET_PREFIX","M_REDIRECT_URL","NICE_TRANS_URL","IMP_SDK_URL","SMILEPAY_BASE_URL","WEBVIEW_SOURCE_HTML","ANDROID_APPSCHEME","ISP","BANKPAY","KB_BANKPAY","NH_BANKPAY","MG_BANKPAY","KN_BANKPAY","KAKAOPAY","SMILEPAY","CHAIPAY","PAYCO","HYUNDAICARD","TOSS","SHINHANCARD","HANACARD","SAMSUNGCARD","KBCARD","NHCARD","CITICARD","LOTTECARD","LPAY","SSGPAY","KPAY","PAYNOW","WOORIWONCARD","LPOINT","ANDROID_PACKAGE","PACKAGE_ISP","PACKAGE_BANKPAY","PACKAGE_KB_BANKPAY","PACKAGE_NH_BANKPAY","PACKAGE_MG_BANKPAY","PACKAGE_KN_BANKPAY","PACKAGE_KAKAOPAY","PACKAGE_SMILEPAY","PACKAGE_CHAIPAY","PACKAGE_PAYCO","PACKAGE_HYUNDAICARD","PACKAGE_TOSS","PACKAGE_SHINHANCARD","PACKAGE_HANACARD","PACKAGE_SAMSUNGCARD","PACKAGE_KBCARD","PACKAGE_NHCARD","PACKAGE_CITICARD","PACKAGE_LOTTECARD","PACKAGE_LPAY","PACKAGE_SSGPAY","PACKAGE_KPAY","PACKAGE_PAYNOW","PACKAGE_WOORIWONCARD","PACKAGE_LPOINT","IMPConst"],"mappings":";;;AACS,QAAMA,EAAE,kBAAG,CAChB,cADgB,EAEhB,QAFgB,EAGhB,OAHgB,EAIhB,KAJgB,EAKhB,aALgB,EAMhB,MANgB,EAOhB,OAPgB,EAQhB,OARgB,EAShB,UATgB,EAUhB,OAVgB,EAWhB,YAXgB,EAYhB,MAZgB,EAahB,QAbgB,EAchB,WAdgB,EAehB,OAfgB,EAgBhB,SAhBgB,EAiBhB,QAjBgB,EAkBhB,SAlBgB,EAmBhB,UAnBgB,EAoBhB,UApBgB,EAqBhB,MArBgB,EAsBhB,QAtBgB,EAuBhB,QAvBgB,EAwBhB,YAxBgB,EAyBhB,SAzBgB,CAAX;
|
|
1
|
+
{"version":3,"sources":["index.ts"],"names":["PG","PAY_METHOD","CURRENCY","LANGUAGE","EN_AVAILABLE_PG","CARRIERS","ANDROID_MARKET_PREFIX","IOS_MARKET_PREFIX","M_REDIRECT_URL","NICE_TRANS_URL","IMP_SDK_URL","SMILEPAY_BASE_URL","WEBVIEW_SOURCE_HTML","ANDROID_APPSCHEME","ISP","BANKPAY","KB_BANKPAY","NH_BANKPAY","MG_BANKPAY","KN_BANKPAY","KAKAOPAY","SMILEPAY","CHAIPAY","PAYCO","HYUNDAICARD","TOSS","SHINHANCARD","HANACARD","SAMSUNGCARD","KBCARD","NHCARD","CITICARD","LOTTECARD","LPAY","SSGPAY","KPAY","KBANKPAY","PAYNOW","WOORIWONCARD","LPOINT","KTFAUTH","LGTAUTH","SKTAUTH","WOORIWONBANK","ANDROID_PACKAGE","PACKAGE_ISP","PACKAGE_BANKPAY","PACKAGE_KB_BANKPAY","PACKAGE_NH_BANKPAY","PACKAGE_MG_BANKPAY","PACKAGE_KN_BANKPAY","PACKAGE_KAKAOPAY","PACKAGE_SMILEPAY","PACKAGE_CHAIPAY","PACKAGE_PAYCO","PACKAGE_HYUNDAICARD","PACKAGE_TOSS","PACKAGE_SHINHANCARD","PACKAGE_HANACARD","PACKAGE_SAMSUNGCARD","PACKAGE_KBCARD","PACKAGE_NHCARD","PACKAGE_CITICARD","PACKAGE_LOTTECARD","PACKAGE_LPAY","PACKAGE_SSGPAY","PACKAGE_KPAY","PACKAGE_KBANKPAY","PACKAGE_PAYNOW","PACKAGE_WOORIWONCARD","PACKAGE_LPOINT","PACKAGE_KTFAUTH","PACKAGE_LGTAUTH","PACKAGE_SKTAUTH","PACKAGE_WOORIWONBANK","IMPConst"],"mappings":"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","sourcesContent":["namespace IMPConst {\n export const PG = [\n 'html5_inicis',\n 'inicis',\n 'uplus',\n 'kcp',\n 'kcp_billing',\n 'nice',\n 'jtnet',\n 'kakao',\n 'kakaopay',\n 'danal',\n 'danal_tpay',\n 'kicc',\n 'settle',\n 'mobilians',\n 'payco',\n 'eximbay',\n 'paypal',\n 'naverco',\n 'naverpay',\n 'smilepay',\n 'chai',\n 'payple',\n 'alipay',\n 'bluewalnut',\n 'tosspay',\n 'smartro',\n ] as const;\n\n export const PAY_METHOD = [\n 'card',\n 'trans',\n 'vbank',\n 'phone',\n 'samsung',\n 'kpay',\n 'cultureland',\n 'smartculture',\n 'happymoney',\n 'booknlife',\n 'kakaopay',\n 'lpay',\n 'payco',\n 'ssgpay',\n 'tosspay',\n // 엑심베이 전용\n 'unionpay', // 유니온페이\n 'alipay', // 알리페이\n 'tenpay', // 텐페이\n 'wechat', // 위챗페이\n 'molpay', // 몰페이\n 'paysbuy', // 태국 paysbuy\n ] as const;\n export const CURRENCY = ['KRW', 'USD', 'EUR', 'JPY'] as const;\n export const LANGUAGE = ['ko', 'en'] as const;\n export const EN_AVAILABLE_PG = [\n 'inicis',\n 'html5_inicis',\n 'uplus',\n 'nice',\n 'eximbay',\n ] as const;\n export const CARRIERS = ['SKT', 'KTF', 'LGT', 'MVNO'] as const;\n\n export const ANDROID_MARKET_PREFIX = 'market://details?id=';\n export const IOS_MARKET_PREFIX = 'https://apps.apple.com/app/';\n export const M_REDIRECT_URL = 'http://detectchangingwebview/iamport/rn';\n export const NICE_TRANS_URL =\n 'https://web.nicepay.co.kr/smart/bank/payTrans.jsp';\n export const IMP_SDK_URL = 'https://service.iamport.kr';\n export const SMILEPAY_BASE_URL = 'https://www.mysmilepay.com';\n\n export const WEBVIEW_SOURCE_HTML = `\n<html>\n <head>\n <meta http-equiv='content-type' content='text/html; charset=utf-8'>\n <meta name='viewport' content='width=device-width, initial-scale=1.0'>\n\n <script type='text/javascript' src='https://code.jquery.com/jquery-latest.min.js' ></script>\n <script type='text/javascript' src='https://cdn.iamport.kr/js/iamport.payment-1.2.0.js'></script>\n </head>\n <body></body>\n</html>\n`;\n\n export const ANDROID_APPSCHEME = {\n ISP: 'ispmobile',\n BANKPAY: 'kftc-bankpay',\n KB_BANKPAY: 'kb-bankpay',\n NH_BANKPAY: 'nhb-bankpay',\n MG_BANKPAY: 'mg-bankpay',\n KN_BANKPAY: 'kn-bankpay',\n KAKAOPAY: 'kakaotalk',\n SMILEPAY: 'smilepayapp',\n CHAIPAY: 'chaipayment',\n PAYCO: 'payco',\n HYUNDAICARD: 'hdcardappcardansimclick',\n TOSS: 'supertoss',\n SHINHANCARD: 'shinhan-sr-ansimclick',\n HANACARD: 'cloudpay',\n SAMSUNGCARD: 'mpocket.online.ansimclick',\n KBCARD: 'kb-acp',\n NHCARD: 'nhallonepayansimclick',\n CITICARD: 'citimobileapp',\n LOTTECARD: 'lotteappcard',\n LPAY: 'lpayapp',\n SSGPAY: 'shinsegaeeasypayment',\n KPAY: 'kpay',\n KBANKPAY: 'ukbanksmartbanknonloginpay',\n PAYNOW: 'lguthepay-xpay',\n WOORIWONCARD: 'com.wooricard.smartapp',\n LPOINT: 'lmslpay',\n KTFAUTH: 'ktauthexternalcall',\n LGTAUTH: 'upluscorporation',\n SKTAUTH: 'tauthlink',\n WOORIWONBANK: 'wooribank',\n } as const;\n\n export const ANDROID_PACKAGE = {\n PACKAGE_ISP: 'kvp.jjy.MispAndroid320',\n PACKAGE_BANKPAY: 'com.kftc.bankpay.android',\n PACKAGE_KB_BANKPAY: 'com.kbstar.liivbank',\n PACKAGE_NH_BANKPAY: 'com.nh.cashcardapp',\n PACKAGE_MG_BANKPAY: 'kr.co.kfcc.mobilebank',\n PACKAGE_KN_BANKPAY: 'com.knb.psb',\n PACKAGE_KAKAOPAY: 'com.kakao.talk',\n PACKAGE_SMILEPAY: 'com.mysmilepay.app',\n PACKAGE_CHAIPAY: 'finance.chai.app',\n PACKAGE_PAYCO: 'com.nhnent.payapp',\n PACKAGE_HYUNDAICARD: 'com.hyundaicard.appcard',\n PACKAGE_TOSS: 'viva.republica.toss',\n PACKAGE_SHINHANCARD: 'com.shcard.smartpay',\n PACKAGE_HANACARD: 'com.hanaskard.paycla',\n PACKAGE_SAMSUNGCARD: 'kr.co.samsungcard.mpocket',\n PACKAGE_KBCARD: 'com.kbcard.cxh.appcard',\n PACKAGE_NHCARD: 'nh.smart.nhallonepay',\n PACKAGE_CITICARD: 'kr.co.citibank.citimobile',\n PACKAGE_LOTTECARD: 'com.lcacApp',\n PACKAGE_LPAY: 'com.lotte.lpay',\n PACKAGE_SSGPAY: 'com.ssg.serviceapp.android.egiftcertificate',\n PACKAGE_KPAY: 'com.inicis.kpay',\n PACKAGE_KBANKPAY: 'com.kbankwith.smartbank',\n PACKAGE_PAYNOW: 'com.lguplus.paynow',\n PACKAGE_WOORIWONCARD: 'com.wooricard.smartapp',\n PACKAGE_LPOINT: 'com.lottemembers.android',\n PACKAGE_KTFAUTH: 'com.kt.ktauth',\n PACKAGE_LGTAUTH: 'com.lguplus.smartotp',\n PACKAGE_SKTAUTH: 'com.sktelecom.tauth',\n PACKAGE_WOORIWONBANK: 'com.wooribank.smart.npib',\n } as const;\n}\n\nexport { IMPConst };\n"]}
|
|
@@ -39,8 +39,7 @@ class IamportUrl {
|
|
|
39
39
|
this.path = scheme + '://' + host;
|
|
40
40
|
this.scheme = scheme;
|
|
41
41
|
} else if (s.startsWith('package')) {
|
|
42
|
-
|
|
43
|
-
this.package = p;
|
|
42
|
+
this.package = s.split('=')[1];
|
|
44
43
|
}
|
|
45
44
|
});
|
|
46
45
|
} else {
|
|
@@ -56,8 +55,8 @@ class IamportUrl {
|
|
|
56
55
|
return this.url;
|
|
57
56
|
}
|
|
58
57
|
|
|
59
|
-
isPaymentOver() {
|
|
60
|
-
return this.url.includes(
|
|
58
|
+
isPaymentOver(redirectUrl) {
|
|
59
|
+
return this.url.includes(redirectUrl);
|
|
61
60
|
}
|
|
62
61
|
|
|
63
62
|
isAppUrl() {
|
|
@@ -132,6 +131,7 @@ class IamportUrl {
|
|
|
132
131
|
return IMPConst.IOS_MARKET_PREFIX + 'id1201113419';
|
|
133
132
|
|
|
134
133
|
case 'com.wooricard.wcard':
|
|
134
|
+
// 우리WON카드
|
|
135
135
|
return IMPConst.IOS_MARKET_PREFIX + 'id1499598869';
|
|
136
136
|
|
|
137
137
|
case 'nhallonepayansimclick':
|
|
@@ -166,6 +166,14 @@ class IamportUrl {
|
|
|
166
166
|
// 토스
|
|
167
167
|
return IMPConst.IOS_MARKET_PREFIX + 'id839333328';
|
|
168
168
|
|
|
169
|
+
case 'newsmartpib':
|
|
170
|
+
// 우리WON뱅킹
|
|
171
|
+
return IMPConst.IOS_MARKET_PREFIX + 'id1470181651';
|
|
172
|
+
|
|
173
|
+
case 'ukbanksmartbanknonloginpay':
|
|
174
|
+
// 케이뱅크 페이
|
|
175
|
+
return IMPConst.IOS_MARKET_PREFIX + 'id1178872627';
|
|
176
|
+
|
|
169
177
|
default:
|
|
170
178
|
return this.url;
|
|
171
179
|
}
|
|
@@ -241,6 +249,9 @@ class IamportUrl {
|
|
|
241
249
|
case IMPConst.ANDROID_APPSCHEME.KPAY:
|
|
242
250
|
return IMPConst.ANDROID_MARKET_PREFIX + IMPConst.ANDROID_PACKAGE.PACKAGE_KPAY;
|
|
243
251
|
|
|
252
|
+
case IMPConst.ANDROID_APPSCHEME.KBANKPAY:
|
|
253
|
+
return IMPConst.ANDROID_MARKET_PREFIX + IMPConst.ANDROID_PACKAGE.PACKAGE_KBANKPAY;
|
|
254
|
+
|
|
244
255
|
case IMPConst.ANDROID_APPSCHEME.PAYNOW:
|
|
245
256
|
return IMPConst.ANDROID_MARKET_PREFIX + IMPConst.ANDROID_PACKAGE.PACKAGE_PAYNOW;
|
|
246
257
|
|
|
@@ -250,6 +261,18 @@ class IamportUrl {
|
|
|
250
261
|
case IMPConst.ANDROID_APPSCHEME.LPOINT:
|
|
251
262
|
return IMPConst.ANDROID_MARKET_PREFIX + IMPConst.ANDROID_PACKAGE.PACKAGE_LPOINT;
|
|
252
263
|
|
|
264
|
+
case IMPConst.ANDROID_APPSCHEME.KTFAUTH:
|
|
265
|
+
return IMPConst.ANDROID_MARKET_PREFIX + IMPConst.ANDROID_PACKAGE.PACKAGE_KTFAUTH;
|
|
266
|
+
|
|
267
|
+
case IMPConst.ANDROID_APPSCHEME.LGTAUTH:
|
|
268
|
+
return IMPConst.ANDROID_MARKET_PREFIX + IMPConst.ANDROID_PACKAGE.PACKAGE_LGTAUTH;
|
|
269
|
+
|
|
270
|
+
case IMPConst.ANDROID_APPSCHEME.SKTAUTH:
|
|
271
|
+
return IMPConst.ANDROID_MARKET_PREFIX + IMPConst.ANDROID_PACKAGE.PACKAGE_SKTAUTH;
|
|
272
|
+
|
|
273
|
+
case IMPConst.ANDROID_APPSCHEME.WOORIWONBANK:
|
|
274
|
+
return IMPConst.ANDROID_MARKET_PREFIX + IMPConst.ANDROID_PACKAGE.PACKAGE_WOORIWONBANK;
|
|
275
|
+
|
|
253
276
|
default:
|
|
254
277
|
return this.url;
|
|
255
278
|
}
|
|
@@ -267,18 +290,18 @@ class IamportUrl {
|
|
|
267
290
|
return queryString.extract(decodedUrl);
|
|
268
291
|
}
|
|
269
292
|
|
|
270
|
-
getInicisTransQuery() {
|
|
293
|
+
getInicisTransQuery(redirectUrl) {
|
|
271
294
|
const {
|
|
272
295
|
m_redirect_url,
|
|
273
296
|
imp_uid,
|
|
274
297
|
merchant_uid
|
|
275
298
|
} = this.getQuery();
|
|
276
299
|
const inicisTransQuery = {
|
|
277
|
-
imp_uid
|
|
300
|
+
imp_uid,
|
|
278
301
|
merchant_uid
|
|
279
302
|
};
|
|
280
303
|
|
|
281
|
-
if (m_redirect_url !== null && m_redirect_url !== void 0 && m_redirect_url.includes(
|
|
304
|
+
if (m_redirect_url !== null && m_redirect_url !== void 0 && m_redirect_url.includes(redirectUrl)) {
|
|
282
305
|
inicisTransQuery.merchant_uid = typeof merchant_uid === 'object' ? merchant_uid[0] : merchant_uid;
|
|
283
306
|
} else {
|
|
284
307
|
inicisTransQuery.merchant_uid = merchant_uid;
|
|
@@ -288,19 +311,13 @@ class IamportUrl {
|
|
|
288
311
|
}
|
|
289
312
|
|
|
290
313
|
async launchApp() {
|
|
291
|
-
if (Platform.OS === 'ios') {
|
|
292
|
-
if (await Linking.canOpenURL(this.url)) {
|
|
293
|
-
return await Linking.openURL(this.getAppUrl());
|
|
294
|
-
}
|
|
295
|
-
|
|
314
|
+
if (Platform.OS === 'ios' || Platform.OS === 'android') {
|
|
296
315
|
try {
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
try {
|
|
303
|
-
return await Linking.openURL(this.getAppUrl());
|
|
316
|
+
if (await Linking.canOpenURL(this.url)) {
|
|
317
|
+
return await Linking.openURL(this.getAppUrl());
|
|
318
|
+
} else {
|
|
319
|
+
return await Linking.openURL(this.getAppUrl());
|
|
320
|
+
}
|
|
304
321
|
} catch (e) {
|
|
305
322
|
return await Linking.openURL(this.getMarketUrl());
|
|
306
323
|
}
|