UNPKG

iamport-react-native

Version:

리액트 네이티브용 아임포트 결제/본인인증 연동 라이브러리

289 lines (287 loc) 14.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _queryString = _interopRequireDefault(require("query-string")); var _reactNative = require("react-native"); var _constants = require("../constants"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } class IamportUrl { // Android only constructor(url) { this.url = url; this.scheme = url.split('://', 1)[0]; let splittedUrl = [this.scheme, url.slice(this.scheme.length + 3)]; if (_reactNative.Platform.OS === 'ios') { this.path = this.scheme.startsWith('itms') ? `https://${splittedUrl[1]}` : this.url; } else if (_reactNative.Platform.OS === 'android') { if (this.isAppUrl()) { if (this.scheme.includes('intent')) { let intentUrl = splittedUrl[1].split('#Intent;'); let host = intentUrl[0]; let args = intentUrl[1].split(';'); if (this.scheme !== 'intent') { this.scheme = this.scheme.split(':')[1]; this.path = this.scheme + '://' + host; } args.forEach(s => { if (s.startsWith('scheme')) { let scheme = s.split('=')[1]; this.path = scheme + '://' + host; this.scheme = scheme; } else if (s.startsWith('package')) { this.package = s.split('=')[1]; } }); } else { this.path = this.url; } } else { this.path = this.url; } } } getUrl() { return this.url; } isPaymentOver(redirectUrl, data) { if (this.url.startsWith(redirectUrl)) { return true; } if ((data === null || data === void 0 ? void 0 : data.pay_method) === 'trans') { const decodeUrl = decodeURIComponent(this.url); const parsedUrl = _queryString.default.parse(decodeUrl); const scheme = data === null || data === void 0 ? void 0 : data.app_scheme; /** * [IOS] 웹 표준 이니시스 - 실시간 계좌이체 대비 * 아래 로직대로 동작해야 최종적으로 결제가 승인된 후 콜백 함수가 호출됨 * 1. 사파리 앱에서 복귀(app_scheme://imp_uid=%26merchant_uid=%26m_redirect_url=) * 2. 최종 결제 승인을 위해 이니시스가 HTTP 리퀘스트 호출 * 3. "다음" 버튼이 있는 최종 화면으로 이동 * 4. "다음" 버튼을 클릭 * 5. 1번과 마찬가지로 app_scheme://imp_uid=%26merchant_uid=%26m_redirect_url=로 HTTP 리퀘스트 호출 * 6. 콜백 함수 호출 * 따라서 현재 handleOpenURL이 트리거 되는 사유가 1번 때문인지 5번 때문인지 구분이 필요하여 * 이를 위한 isInicisTransPaid 플래그 추가 */ if (data.pg.startsWith('html5_inicis') && _reactNative.Platform.OS === 'ios') { var _data$app_scheme; const query = parsedUrl; if (query.m_redirect_url !== null && scheme === ((_data$app_scheme = data.app_scheme) === null || _data$app_scheme === void 0 ? void 0 : _data$app_scheme.toLowerCase())) { var _query$m_redirect_url; if ((_query$m_redirect_url = query.m_redirect_url) !== null && _query$m_redirect_url !== void 0 && _query$m_redirect_url.includes(redirectUrl)) { return true; } } } } } isAppUrl() { return !['http', 'https', 'about:blank', 'about:srcdoc'].includes(this.scheme); } isIframeLoaded() { return this.url !== 'about:blank' && !this.url.startsWith(_constants.IMPConst.IMP_SDK_URL); } getAppUrl() { return this.path; } getMarketUrl() { if (_reactNative.Platform.OS === 'ios') { switch (this.scheme) { case 'kftc-bankpay': // 뱅크페이 return _constants.IMPConst.IOS_MARKET_PREFIX + 'id398456030'; case 'ispmobile': // ISP/페이북 return _constants.IMPConst.IOS_MARKET_PREFIX + 'id369125087'; case 'hdcardappcardansimclick': // 현대카드 앱카드 return _constants.IMPConst.IOS_MARKET_PREFIX + 'id702653088'; case 'shinhan-sr-ansimclick': // 신한 앱카드 return _constants.IMPConst.IOS_MARKET_PREFIX + 'id572462317'; case 'kb-acp': // KB국민 앱카드 return _constants.IMPConst.IOS_MARKET_PREFIX + 'id695436326'; case 'mpocket.online.ansimclick': // 삼성앱카드 return _constants.IMPConst.IOS_MARKET_PREFIX + 'id535125356'; case 'lottesmartpay': // 롯데 모바일결제 return _constants.IMPConst.IOS_MARKET_PREFIX + 'id668497947'; case 'lotteappcard': // 롯데 앱카드 return _constants.IMPConst.IOS_MARKET_PREFIX + 'id688047200'; case 'cloudpay': // 하나1Q페이(앱카드) return _constants.IMPConst.IOS_MARKET_PREFIX + 'id847268987'; case 'citimobileapp': // 시티은행 앱카드 return _constants.IMPConst.IOS_MARKET_PREFIX + 'id1179759666'; case 'payco': // 페이코 return _constants.IMPConst.IOS_MARKET_PREFIX + 'id924292102'; case 'kakaotalk': // 카카오톡 return _constants.IMPConst.IOS_MARKET_PREFIX + 'id362057947'; case 'lpayapp': // 롯데 L.pay return _constants.IMPConst.IOS_MARKET_PREFIX + 'id1036098908'; case 'wooripay': // 우리페이 return _constants.IMPConst.IOS_MARKET_PREFIX + 'id1201113419'; case 'com.wooricard.wcard': // 우리WON카드 return _constants.IMPConst.IOS_MARKET_PREFIX + 'id1499598869'; case 'nhallonepayansimclick': // NH농협카드 올원페이(앱카드) return _constants.IMPConst.IOS_MARKET_PREFIX + 'id1177889176'; case 'hanawalletmembers': // 하나카드(하나멤버스 월렛) return _constants.IMPConst.IOS_MARKET_PREFIX + 'id1038288833'; case 'shinsegaeeasypayment': // 신세계 SSGPAY return _constants.IMPConst.IOS_MARKET_PREFIX + 'id666237916'; case 'naversearchthirdlogin': // 네이버페이 앱 로그인 return _constants.IMPConst.IOS_MARKET_PREFIX + 'id393499958'; case 'lguthepay-xpay': // 페이나우 return _constants.IMPConst.IOS_MARKET_PREFIX + 'id760098906'; case 'lmslpay': // 롯데 L.POINT return _constants.IMPConst.IOS_MARKET_PREFIX + 'id473250588'; case 'liivbank': // Liiv 국민 return _constants.IMPConst.IOS_MARKET_PREFIX + 'id1126232922'; case 'supertoss': // 토스 return _constants.IMPConst.IOS_MARKET_PREFIX + 'id839333328'; case 'newsmartpib': // 우리WON뱅킹 return _constants.IMPConst.IOS_MARKET_PREFIX + 'id1470181651'; case 'ukbanksmartbanknonloginpay': // 케이뱅크 페이 return _constants.IMPConst.IOS_MARKET_PREFIX + 'id1178872627'; case 'kakaobank': return _constants.IMPConst.IOS_MARKET_PREFIX + 'id1258016944'; default: return this.url; } } else if (_reactNative.Platform.OS === 'android') { if (this.package != null) { return _constants.IMPConst.ANDROID_MARKET_PREFIX + this.package; } switch (this.scheme) { case _constants.IMPConst.ANDROID_APPSCHEME.ISP: return _constants.IMPConst.ANDROID_MARKET_PREFIX + _constants.IMPConst.ANDROID_PACKAGE.PACKAGE_ISP; case _constants.IMPConst.ANDROID_APPSCHEME.BANKPAY: return _constants.IMPConst.ANDROID_MARKET_PREFIX + _constants.IMPConst.ANDROID_PACKAGE.PACKAGE_BANKPAY; case _constants.IMPConst.ANDROID_APPSCHEME.KB_BANKPAY: return _constants.IMPConst.ANDROID_MARKET_PREFIX + _constants.IMPConst.ANDROID_PACKAGE.PACKAGE_KB_BANKPAY; case _constants.IMPConst.ANDROID_APPSCHEME.NH_BANKPAY: return _constants.IMPConst.ANDROID_MARKET_PREFIX + _constants.IMPConst.ANDROID_PACKAGE.PACKAGE_NH_BANKPAY; case _constants.IMPConst.ANDROID_APPSCHEME.MG_BANKPAY: return _constants.IMPConst.ANDROID_MARKET_PREFIX + _constants.IMPConst.ANDROID_PACKAGE.PACKAGE_MG_BANKPAY; case _constants.IMPConst.ANDROID_APPSCHEME.KN_BANKPAY: return _constants.IMPConst.ANDROID_MARKET_PREFIX + _constants.IMPConst.ANDROID_PACKAGE.PACKAGE_KN_BANKPAY; case _constants.IMPConst.ANDROID_APPSCHEME.KAKAOPAY: return _constants.IMPConst.ANDROID_MARKET_PREFIX + _constants.IMPConst.ANDROID_PACKAGE.PACKAGE_KAKAOPAY; case _constants.IMPConst.ANDROID_APPSCHEME.SMILEPAY: return _constants.IMPConst.ANDROID_MARKET_PREFIX + _constants.IMPConst.ANDROID_PACKAGE.PACKAGE_SMILEPAY; case _constants.IMPConst.ANDROID_APPSCHEME.CHAIPAY: return _constants.IMPConst.ANDROID_MARKET_PREFIX + _constants.IMPConst.ANDROID_PACKAGE.PACKAGE_CHAIPAY; case _constants.IMPConst.ANDROID_APPSCHEME.PAYCO: return _constants.IMPConst.ANDROID_MARKET_PREFIX + _constants.IMPConst.ANDROID_PACKAGE.PACKAGE_PAYCO; case _constants.IMPConst.ANDROID_APPSCHEME.HYUNDAICARD: return _constants.IMPConst.ANDROID_MARKET_PREFIX + _constants.IMPConst.ANDROID_PACKAGE.PACKAGE_HYUNDAICARD; case _constants.IMPConst.ANDROID_APPSCHEME.TOSS: return _constants.IMPConst.ANDROID_MARKET_PREFIX + _constants.IMPConst.ANDROID_PACKAGE.PACKAGE_TOSS; case _constants.IMPConst.ANDROID_APPSCHEME.SHINHANCARD: return _constants.IMPConst.ANDROID_MARKET_PREFIX + _constants.IMPConst.ANDROID_PACKAGE.PACKAGE_SHINHANCARD; case _constants.IMPConst.ANDROID_APPSCHEME.SHINHANSUPERSOL: return _constants.IMPConst.ANDROID_MARKET_PREFIX + _constants.IMPConst.ANDROID_PACKAGE.PACKAGE_SHINHANSUPERSOL; case _constants.IMPConst.ANDROID_APPSCHEME.HANACARD: return _constants.IMPConst.ANDROID_MARKET_PREFIX + _constants.IMPConst.ANDROID_PACKAGE.PACKAGE_HANACARD; case _constants.IMPConst.ANDROID_APPSCHEME.SAMSUNGCARD: return _constants.IMPConst.ANDROID_MARKET_PREFIX + _constants.IMPConst.ANDROID_PACKAGE.PACKAGE_SAMSUNGCARD; case _constants.IMPConst.ANDROID_APPSCHEME.KBCARD: return _constants.IMPConst.ANDROID_MARKET_PREFIX + _constants.IMPConst.ANDROID_PACKAGE.PACKAGE_KBCARD; case _constants.IMPConst.ANDROID_APPSCHEME.NHCARD: return _constants.IMPConst.ANDROID_MARKET_PREFIX + _constants.IMPConst.ANDROID_PACKAGE.PACKAGE_NHCARD; case _constants.IMPConst.ANDROID_APPSCHEME.CITICARD: return _constants.IMPConst.ANDROID_MARKET_PREFIX + _constants.IMPConst.ANDROID_PACKAGE.PACKAGE_CITICARD; case _constants.IMPConst.ANDROID_APPSCHEME.LOTTECARD: return _constants.IMPConst.ANDROID_MARKET_PREFIX + _constants.IMPConst.ANDROID_PACKAGE.PACKAGE_LOTTECARD; case _constants.IMPConst.ANDROID_APPSCHEME.LPAY: return _constants.IMPConst.ANDROID_MARKET_PREFIX + _constants.IMPConst.ANDROID_PACKAGE.PACKAGE_LPAY; case _constants.IMPConst.ANDROID_APPSCHEME.SSGPAY: return _constants.IMPConst.ANDROID_MARKET_PREFIX + _constants.IMPConst.ANDROID_PACKAGE.PACKAGE_SSGPAY; case _constants.IMPConst.ANDROID_APPSCHEME.KPAY: return _constants.IMPConst.ANDROID_MARKET_PREFIX + _constants.IMPConst.ANDROID_PACKAGE.PACKAGE_KPAY; case _constants.IMPConst.ANDROID_APPSCHEME.KBANKPAY: return _constants.IMPConst.ANDROID_MARKET_PREFIX + _constants.IMPConst.ANDROID_PACKAGE.PACKAGE_KBANKPAY; case _constants.IMPConst.ANDROID_APPSCHEME.PAYNOW: return _constants.IMPConst.ANDROID_MARKET_PREFIX + _constants.IMPConst.ANDROID_PACKAGE.PACKAGE_PAYNOW; case _constants.IMPConst.ANDROID_APPSCHEME.WOORIWONCARD: return _constants.IMPConst.ANDROID_MARKET_PREFIX + _constants.IMPConst.ANDROID_PACKAGE.PACKAGE_WOORIWONCARD; case _constants.IMPConst.ANDROID_APPSCHEME.LPOINT: return _constants.IMPConst.ANDROID_MARKET_PREFIX + _constants.IMPConst.ANDROID_PACKAGE.PACKAGE_LPOINT; case _constants.IMPConst.ANDROID_APPSCHEME.KTFAUTH: return _constants.IMPConst.ANDROID_MARKET_PREFIX + _constants.IMPConst.ANDROID_PACKAGE.PACKAGE_KTFAUTH; case _constants.IMPConst.ANDROID_APPSCHEME.LGTAUTH: return _constants.IMPConst.ANDROID_MARKET_PREFIX + _constants.IMPConst.ANDROID_PACKAGE.PACKAGE_LGTAUTH; case _constants.IMPConst.ANDROID_APPSCHEME.SKTAUTH: return _constants.IMPConst.ANDROID_MARKET_PREFIX + _constants.IMPConst.ANDROID_PACKAGE.PACKAGE_SKTAUTH; case _constants.IMPConst.ANDROID_APPSCHEME.WOORIWONBANK: return _constants.IMPConst.ANDROID_MARKET_PREFIX + _constants.IMPConst.ANDROID_PACKAGE.PACKAGE_WOORIWONBANK; case _constants.IMPConst.ANDROID_APPSCHEME.KAKAOBANK: return _constants.IMPConst.ANDROID_MARKET_PREFIX + _constants.IMPConst.ANDROID_PACKAGE.PACKAGE_KAKAOBANK; default: return this.url; } } else { return this.url; } } getQuery() { return _queryString.default.parse(this.getStringifiedQuery()); } getStringifiedQuery() { const decodedUrl = decodeURIComponent(this.url); return _queryString.default.extract(decodedUrl); } getInicisTransQuery(redirectUrl) { const { m_redirect_url, imp_uid, merchant_uid } = this.getQuery(); const inicisTransQuery = { imp_uid, merchant_uid }; if (m_redirect_url !== null && m_redirect_url !== void 0 && m_redirect_url.includes(redirectUrl)) { inicisTransQuery.merchant_uid = typeof merchant_uid === 'object' ? merchant_uid[0] : merchant_uid; } else { inicisTransQuery.merchant_uid = merchant_uid; } return inicisTransQuery; } async launchApp() { if (_reactNative.Platform.OS === 'ios' || _reactNative.Platform.OS === 'android') { try { if (await _reactNative.Linking.canOpenURL(this.url)) { return await _reactNative.Linking.openURL(this.getAppUrl()); } else { return await _reactNative.Linking.openURL(this.getAppUrl()); } } catch (e) { return await _reactNative.Linking.openURL(this.getMarketUrl()); } } } } var _default = exports.default = IamportUrl; //# sourceMappingURL=IamportUrl.js.map