@paykka/card-checkout-ui 0.13.1 → 0.13.5
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/dist/card-checkout-ui.js +21 -21
- package/dist/card-checkout-ui.umd.cjs +21 -21
- package/dist/es/_commonjsHelpers.js +82 -1
- package/dist/es/api/modules/get-browser-params.js +4 -1
- package/dist/es/api/modules/opay-wallet/index.js +16 -0
- package/dist/es/api/modules/paga-wallet/index.js +16 -0
- package/dist/es/api/modules/pic-pay/index.js +16 -0
- package/dist/es/api/modules/pix/index.js +16 -0
- package/dist/es/api/modules/vietqr/index.js +4 -0
- package/dist/es/components/AliPay/index.js +29 -35
- package/dist/es/components/Boost/index.js +34 -40
- package/dist/es/components/Card/index.js +35 -39
- package/dist/es/components/DropIn/index.js +42 -2
- package/dist/es/components/EncryptedCard/index.js +5 -1
- package/dist/es/components/GooglePay/index.js +1 -0
- package/dist/es/components/GrabPay/index.js +34 -40
- package/dist/es/components/GuideCard/index.js +6 -1
- package/dist/es/components/LinePay/index.js +34 -40
- package/dist/es/components/MayBankQRPay/index.js +35 -41
- package/dist/es/components/NinePay/index.js +34 -40
- package/dist/es/components/SecuredFieldsProvider/index.js +23 -7
- package/dist/es/components/SecuredIframe/index.js +36 -59
- package/dist/es/components/Sepa/index.js +17 -21
- package/dist/es/components/ShopeePay/index.js +34 -40
- package/dist/es/components/TNGWallet/index.js +34 -40
- package/dist/es/components/ThreeDS/index.js +32 -7
- package/dist/es/components/WechatPay/index.js +19 -24
- package/dist/es/components/business/QRCodeModal/QRCodeModal.js +6 -6
- package/dist/es/components/index.js +5 -0
- package/dist/es/components/internal/Form/FormItem.js +1 -1
- package/dist/es/components/internal/Form/util.js +1 -1
- package/dist/es/components/internal/Select/SelectMenu.js +2 -2
- package/dist/es/components/internal/icons/IconError.js +7 -4
- package/dist/es/components/internal/icons/IconOpayWallet.js +71 -0
- package/dist/es/components/internal/icons/IconPagaWallet.js +141 -0
- package/dist/es/components/internal/icons/IconPaymaya.js +42 -86
- package/dist/es/components/internal/icons/IconPicPay.js +49 -0
- package/dist/es/components/internal/icons/IconPix.js +75 -0
- package/dist/es/components/internal/icons/IconVietqr.js +45 -0
- package/dist/es/components/internal/icons/IconVietqrComplete.js +49 -0
- package/dist/es/components/wallets/GCash/GCash.js +20 -25
- package/dist/es/components/wallets/OpayWallet/OpayWallet.js +346 -0
- package/dist/es/components/wallets/OpayWallet/index.js +1 -0
- package/dist/es/components/wallets/OpayWallet/opay-wallet.js +1 -0
- package/dist/es/components/wallets/OpayWallet/type.js +1 -0
- package/dist/es/components/wallets/PagaWallet/PagaWallet.js +346 -0
- package/dist/es/components/wallets/PagaWallet/index.js +1 -0
- package/dist/es/components/wallets/PagaWallet/paga-wallet.js +1 -0
- package/dist/es/components/wallets/PagaWallet/type.js +1 -0
- package/dist/es/components/wallets/Paymaya/Paymaya.js +34 -40
- package/dist/es/components/wallets/PicPay/PicPay.js +346 -0
- package/dist/es/components/wallets/PicPay/index.js +1 -0
- package/dist/es/components/wallets/PicPay/pic-pay.js +1 -0
- package/dist/es/components/wallets/PicPay/type.js +1 -0
- package/dist/es/components/wallets/Pix/Pix.js +346 -0
- package/dist/es/components/wallets/Pix/index.js +1 -0
- package/dist/es/components/wallets/Pix/pix2.js +1 -0
- package/dist/es/components/wallets/Pix/type.js +1 -0
- package/dist/es/components/wallets/Vietqr/Vietqr.js +380 -0
- package/dist/es/components/wallets/Vietqr/index.js +1 -0
- package/dist/es/components/wallets/Vietqr/type.js +1 -0
- package/dist/es/components/wallets/Vietqr/vietqr2.js +1 -0
- package/dist/es/components/wallets/Zalopay/Zalopay.js +17 -21
- package/dist/es/components/wallets/index.js +8 -0
- package/dist/es/constant.js +32 -2
- package/dist/es/core/checkout.js +24 -1
- package/dist/es/core/create.js +1 -1
- package/dist/es/core/session.js +2 -23
- package/dist/es/core/theme.js +65 -0
- package/dist/es/core.js +34 -34
- package/dist/es/i18n/locales/de-DE.js +8 -2
- package/dist/es/i18n/locales/en-GB.js +8 -2
- package/dist/es/i18n/locales/es-ES.js +8 -2
- package/dist/es/i18n/locales/fr-FR.js +8 -2
- package/dist/es/i18n/locales/ja-JP.js +8 -2
- package/dist/es/i18n/locales/ko-KR.js +8 -2
- package/dist/es/i18n/locales/nl-NL.js +8 -2
- package/dist/es/i18n/locales/pt-PT.js +8 -2
- package/dist/es/i18n/locales/ru-RU.js +8 -2
- package/dist/es/i18n/locales/zh-CN.js +10 -4
- package/dist/es/i18n/locales/zh-HK.js +10 -4
- package/dist/es/i18n/locales/zh-TW.js +10 -4
- package/dist/es/index.js +17 -5
- package/dist/es/style.css +1 -1
- package/dist/es/utils/format.js +0 -5
- package/dist/es/utils/object.js +31 -1
- package/dist/es/utils/string.js +10 -0
- package/dist/es/utils/system-info/is-ua-webview.js +14 -12
- package/dist/es/utils/theme.js +7 -0
- package/dist/style.css +1 -1
- package/dist/types/api/modules/get-browser-params.d.ts +1 -0
- package/dist/types/api/modules/index.d.ts +5 -0
- package/dist/types/api/modules/opay-wallet/index.d.ts +4 -0
- package/dist/types/api/modules/paga-wallet/index.d.ts +4 -0
- package/dist/types/api/modules/pic-pay/index.d.ts +4 -0
- package/dist/types/api/modules/pix/index.d.ts +4 -0
- package/dist/types/api/modules/vietqr/index.d.ts +4 -0
- package/dist/types/components/DropIn/type.d.ts +3 -2
- package/dist/types/components/SecuredFieldsProvider/type.d.ts +5 -0
- package/dist/types/components/SecuredIframe/HiddenIframe.d.ts +3 -1
- package/dist/types/components/ThreeDS/components/ThreeDSAuth/type.d.ts +2 -0
- package/dist/types/components/business/QRCodeModal/type.d.ts +2 -0
- package/dist/types/components/index.d.ts +1 -3
- package/dist/types/components/internal/Loading/Loading.d.ts +1 -0
- package/dist/types/components/internal/Select/SelectMenu.d.ts +1 -1
- package/dist/types/components/internal/icons/IconOpayWallet.d.ts +2 -0
- package/dist/types/components/internal/icons/IconPagaWallet.d.ts +2 -0
- package/dist/types/components/internal/icons/IconPicPay.d.ts +2 -0
- package/dist/types/components/internal/icons/IconPix.d.ts +2 -0
- package/dist/types/components/internal/icons/IconVietqr.d.ts +2 -0
- package/dist/types/components/internal/icons/IconVietqrComplete.d.ts +2 -0
- package/dist/types/components/internal/icons/index.d.ts +6 -0
- package/dist/types/components/wallets/OpayWallet/OpayWallet.d.ts +10 -0
- package/dist/types/components/wallets/OpayWallet/index.d.ts +2 -0
- package/dist/types/components/wallets/OpayWallet/type.d.ts +40 -0
- package/dist/types/components/wallets/PagaWallet/PagaWallet.d.ts +10 -0
- package/dist/types/components/wallets/PagaWallet/index.d.ts +2 -0
- package/dist/types/components/wallets/PagaWallet/type.d.ts +40 -0
- package/dist/types/components/wallets/PicPay/PicPay.d.ts +10 -0
- package/dist/types/components/wallets/PicPay/index.d.ts +2 -0
- package/dist/types/components/wallets/PicPay/type.d.ts +40 -0
- package/dist/types/components/wallets/Pix/Pix.d.ts +10 -0
- package/dist/types/components/wallets/Pix/index.d.ts +2 -0
- package/dist/types/components/wallets/Pix/type.d.ts +40 -0
- package/dist/types/components/wallets/Vietqr/Vietqr.d.ts +10 -0
- package/dist/types/components/wallets/Vietqr/index.d.ts +2 -0
- package/dist/types/components/wallets/Vietqr/type.d.ts +39 -0
- package/dist/types/components/wallets/index.d.ts +8 -0
- package/dist/types/components/wallets/type.d.ts +9 -0
- package/dist/types/constant.d.ts +11 -1
- package/dist/types/core/checkout.d.ts +4 -0
- package/dist/types/core/index.d.ts +1 -0
- package/dist/types/core/session.d.ts +1 -11
- package/dist/types/core/theme.d.ts +7 -0
- package/dist/types/i18n/locales/de-DE.d.ts +6 -0
- package/dist/types/i18n/locales/en-GB.d.ts +6 -0
- package/dist/types/i18n/locales/es-ES.d.ts +6 -0
- package/dist/types/i18n/locales/fr-FR.d.ts +6 -0
- package/dist/types/i18n/locales/ja-JP.d.ts +6 -0
- package/dist/types/i18n/locales/ko-KR.d.ts +6 -0
- package/dist/types/i18n/locales/nl-NL.d.ts +6 -0
- package/dist/types/i18n/locales/pt-PT.d.ts +6 -0
- package/dist/types/i18n/locales/ru-RU.d.ts +6 -0
- package/dist/types/i18n/locales/zh-CN.d.ts +6 -0
- package/dist/types/i18n/locales/zh-HK.d.ts +6 -0
- package/dist/types/i18n/locales/zh-TW.d.ts +6 -0
- package/dist/types/types/message.d.ts +29 -25
- package/dist/types/utils/index.d.ts +3 -2
- package/dist/types/utils/object.d.ts +7 -0
- package/dist/types/utils/string.d.ts +1 -0
- package/dist/types/utils/style.d.ts +1 -1
- package/dist/types/utils/system-info/is-ua-webview.d.ts +1 -1
- package/dist/types/utils/theme.d.ts +4 -0
- package/package.json +67 -67
- package/dist/es/utils/deep-freeze.js +0 -13
- package/dist/es/utils/obj.js +0 -22
- package/dist/types/utils/deep-freeze.d.ts +0 -1
- package/dist/types/utils/obj.d.ts +0 -6
|
@@ -21,6 +21,8 @@ var EFieldType = /* @__PURE__ */ ((EFieldType2) => {
|
|
|
21
21
|
const SECURED_FILED_ATTR = "data-sf";
|
|
22
22
|
const SECURED_IFRAME_CLASS_NAME = "secured-iframe";
|
|
23
23
|
const HIDDEN_IFRAME_NAME = "hidden-pay-iframe";
|
|
24
|
+
const FIELD_IFRAME_NAME = "field-pay-iframe";
|
|
25
|
+
const THREE_DS_IFRAME_NAME = "three-ds-iframe";
|
|
24
26
|
const getFieldElements = (rootNode) => {
|
|
25
27
|
return rootNode ? Array.prototype.slice.call(rootNode.querySelectorAll(`[${SECURED_FILED_ATTR}]`)) : [];
|
|
26
28
|
};
|
|
@@ -35,11 +37,12 @@ class SecuredField {
|
|
|
35
37
|
}
|
|
36
38
|
/** 初始化表单区域iframe */
|
|
37
39
|
init() {
|
|
38
|
-
const { iframeSrc, iframeClassName, fieldNode } = this.config;
|
|
40
|
+
const { iframeSrc, iframeClassName, fieldNode, iframeName } = this.config;
|
|
39
41
|
const iframeEl = createIframe(iframeSrc);
|
|
40
42
|
iframeEl.width = "100%";
|
|
41
43
|
iframeEl.height = "100%";
|
|
42
44
|
iframeEl.style.border = "none";
|
|
45
|
+
iframeEl.name = iframeName;
|
|
43
46
|
fieldNode.appendChild(iframeEl);
|
|
44
47
|
const iframe = fieldNode.querySelector(`.${iframeClassName}`);
|
|
45
48
|
if (!iframe) {
|
|
@@ -51,10 +54,12 @@ class SecuredField {
|
|
|
51
54
|
/** 表单区域iframe加载回调 */
|
|
52
55
|
onFieldIframeLoad() {
|
|
53
56
|
this.iframeWindow = this.iframe.contentWindow;
|
|
54
|
-
const { fieldType, placeholder, style, hiddenIframeName, supportedCardBrands } = this.config;
|
|
57
|
+
const { fieldType, placeholder, style, hiddenIframeName, supportedCardBrands, checkoutId } = this.config;
|
|
55
58
|
const data = {
|
|
56
59
|
action: MessageAction.INIT,
|
|
60
|
+
checkoutId,
|
|
57
61
|
config: {
|
|
62
|
+
checkoutId,
|
|
58
63
|
fieldType,
|
|
59
64
|
placeholder,
|
|
60
65
|
style,
|
|
@@ -68,12 +73,13 @@ class SecuredField {
|
|
|
68
73
|
}
|
|
69
74
|
}
|
|
70
75
|
const SecuredFieldsProvider = w((props, ref) => {
|
|
71
|
-
const { sessionMode, i18n, targetElement } = props;
|
|
76
|
+
const { sessionMode, i18n, targetElement, checkoutId } = props;
|
|
72
77
|
const rootNodeRef = A(null);
|
|
73
78
|
const hiddenIframe = A(null);
|
|
74
79
|
const payment = (formData, extraParams) => {
|
|
75
80
|
const data = {
|
|
76
81
|
action: MessageAction.PAYMENT,
|
|
82
|
+
checkoutId,
|
|
77
83
|
formData,
|
|
78
84
|
extraParams,
|
|
79
85
|
locale: props.i18n.locale
|
|
@@ -102,7 +108,8 @@ const SecuredFieldsProvider = w((props, ref) => {
|
|
|
102
108
|
validate: () => {
|
|
103
109
|
Object.values(securedFieldMap.current).forEach((field) => {
|
|
104
110
|
const data = {
|
|
105
|
-
action: MessageAction.VALIDATE
|
|
111
|
+
action: MessageAction.VALIDATE,
|
|
112
|
+
checkoutId
|
|
106
113
|
};
|
|
107
114
|
postMessageToIframe(data, field.iframe.contentWindow, cdnOrigin);
|
|
108
115
|
});
|
|
@@ -135,7 +142,7 @@ const SecuredFieldsProvider = w((props, ref) => {
|
|
|
135
142
|
};
|
|
136
143
|
const initHiddenIframe = async () => {
|
|
137
144
|
const iframeEl = createIframe(`${cdnUrl}/secured-iframe.html`);
|
|
138
|
-
iframeEl.name = `${HIDDEN_IFRAME_NAME}-${Date.now()}`;
|
|
145
|
+
iframeEl.name = `${HIDDEN_IFRAME_NAME}-${checkoutId}-${Date.now()}`;
|
|
139
146
|
iframeEl.width = "0";
|
|
140
147
|
iframeEl.height = "0";
|
|
141
148
|
iframeEl.style.border = "none";
|
|
@@ -143,6 +150,7 @@ const SecuredFieldsProvider = w((props, ref) => {
|
|
|
143
150
|
const data = {
|
|
144
151
|
action: MessageAction.INIT,
|
|
145
152
|
hidden: true,
|
|
153
|
+
checkoutId,
|
|
146
154
|
apiUrl,
|
|
147
155
|
cdnUrl,
|
|
148
156
|
apiPrefix
|
|
@@ -161,6 +169,7 @@ const SecuredFieldsProvider = w((props, ref) => {
|
|
|
161
169
|
hiddenIframeName: hiddenIframe.current.name,
|
|
162
170
|
rootNode: rootNodeRef.current,
|
|
163
171
|
iframeSrc: `${cdnUrl}/secured-iframe.html`,
|
|
172
|
+
iframeName: `${FIELD_IFRAME_NAME}-${checkoutId}-${Date.now()}`,
|
|
164
173
|
iframeClassName: SECURED_IFRAME_CLASS_NAME,
|
|
165
174
|
fieldType,
|
|
166
175
|
placeholder: securedFieldPlaceholderMap[fieldType],
|
|
@@ -171,7 +180,8 @@ const SecuredFieldsProvider = w((props, ref) => {
|
|
|
171
180
|
onAfterPayment: props.onAfterPayment,
|
|
172
181
|
onPaymentError: props.onPaymentError,
|
|
173
182
|
onPaymentTimeout: props.onPaymentTimeout,
|
|
174
|
-
onValidStatusChanged: props.onValidStatusChanged
|
|
183
|
+
onValidStatusChanged: props.onValidStatusChanged,
|
|
184
|
+
checkoutId
|
|
175
185
|
});
|
|
176
186
|
});
|
|
177
187
|
};
|
|
@@ -185,6 +195,10 @@ const SecuredFieldsProvider = w((props, ref) => {
|
|
|
185
195
|
if (!Reflect.has(feedbackData, "action")) {
|
|
186
196
|
return;
|
|
187
197
|
}
|
|
198
|
+
console.log(feedbackData, checkoutId);
|
|
199
|
+
if (feedbackData.checkoutId !== checkoutId) {
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
188
202
|
switch (feedbackData.action) {
|
|
189
203
|
case MessageAction.FOCUS:
|
|
190
204
|
(_a = props.onFocus) == null ? void 0 : _a.call(props, feedbackData);
|
|
@@ -228,8 +242,10 @@ const SecuredFieldsProvider = w((props, ref) => {
|
|
|
228
242
|
});
|
|
229
243
|
export {
|
|
230
244
|
EFieldType,
|
|
245
|
+
FIELD_IFRAME_NAME,
|
|
231
246
|
HIDDEN_IFRAME_NAME,
|
|
232
247
|
SECURED_FILED_ATTR,
|
|
233
248
|
SECURED_IFRAME_CLASS_NAME,
|
|
234
|
-
SecuredFieldsProvider
|
|
249
|
+
SecuredFieldsProvider,
|
|
250
|
+
THREE_DS_IFRAME_NAME
|
|
235
251
|
};
|
|
@@ -192,6 +192,7 @@ const useSecuredInput = () => {
|
|
|
192
192
|
};
|
|
193
193
|
const inputClassNameMap = generateClassNameMap("input");
|
|
194
194
|
const FieldIframe = (props) => {
|
|
195
|
+
const { checkoutId } = props;
|
|
195
196
|
const hiddenIframe = window.parent.frames[props.hiddenIframeName];
|
|
196
197
|
const inputRef = A(null);
|
|
197
198
|
const { initSecuredInput, getConfigByFieldType, getCurrCardBrand, cardBin, value, brand } = useSecuredInput();
|
|
@@ -277,11 +278,15 @@ const FieldIframe = (props) => {
|
|
|
277
278
|
}, []);
|
|
278
279
|
const onReceiveMessage = (event) => {
|
|
279
280
|
const { data } = event;
|
|
280
|
-
const
|
|
281
|
-
if (!Reflect.has(
|
|
281
|
+
const feedbackData = safeParse(data);
|
|
282
|
+
if (!Reflect.has(feedbackData, "action")) {
|
|
282
283
|
return;
|
|
283
284
|
}
|
|
284
|
-
|
|
285
|
+
console.log(feedbackData, checkoutId);
|
|
286
|
+
if (feedbackData.checkoutId !== checkoutId) {
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
if (feedbackData.action === MessageAction.VALIDATE) {
|
|
285
290
|
try {
|
|
286
291
|
const inputConfig = getConfigByFieldType();
|
|
287
292
|
inputConfig.validator();
|
|
@@ -317,6 +322,7 @@ const FieldIframe = (props) => {
|
|
|
317
322
|
var _a;
|
|
318
323
|
const data = {
|
|
319
324
|
action: MessageAction.BIN_VALUE,
|
|
325
|
+
checkoutId,
|
|
320
326
|
binValue,
|
|
321
327
|
fieldType: props.fieldType,
|
|
322
328
|
brand: (_a = getCurrCardBrand(binValue)) == null ? void 0 : _a.code
|
|
@@ -326,6 +332,7 @@ const FieldIframe = (props) => {
|
|
|
326
332
|
const sendBrandMessage = (brand2) => {
|
|
327
333
|
const data = {
|
|
328
334
|
action: MessageAction.BRAND,
|
|
335
|
+
checkoutId,
|
|
329
336
|
brand: brand2,
|
|
330
337
|
fieldType: props.fieldType
|
|
331
338
|
};
|
|
@@ -334,6 +341,7 @@ const FieldIframe = (props) => {
|
|
|
334
341
|
const sendFocusMessage = (focus) => {
|
|
335
342
|
const data = {
|
|
336
343
|
action: MessageAction.FOCUS,
|
|
344
|
+
checkoutId,
|
|
337
345
|
focus,
|
|
338
346
|
fieldType: props.fieldType
|
|
339
347
|
};
|
|
@@ -357,7 +365,8 @@ const FieldIframe = (props) => {
|
|
|
357
365
|
action: MessageAction.VALID_STATUS_CHANGED,
|
|
358
366
|
status,
|
|
359
367
|
errorTip: err == null ? void 0 : err.message,
|
|
360
|
-
fieldType: props.fieldType
|
|
368
|
+
fieldType: props.fieldType,
|
|
369
|
+
checkoutId
|
|
361
370
|
};
|
|
362
371
|
postMessageToIframe(validData, window.parent);
|
|
363
372
|
if (status !== "success") {
|
|
@@ -369,14 +378,16 @@ const FieldIframe = (props) => {
|
|
|
369
378
|
const validWithValueData = {
|
|
370
379
|
action: MessageAction.VALID_WITH_VALUE,
|
|
371
380
|
value: value.current,
|
|
372
|
-
fieldType: props.fieldType
|
|
381
|
+
fieldType: props.fieldType,
|
|
382
|
+
checkoutId
|
|
373
383
|
};
|
|
374
384
|
postMessageToIframe(validWithValueData, hiddenIframe, cdnOrigin);
|
|
375
385
|
};
|
|
376
386
|
const sendActivatedMessage = () => {
|
|
377
387
|
const data = {
|
|
378
388
|
action: MessageAction.ACTIVATED,
|
|
379
|
-
fieldType: props.fieldType
|
|
389
|
+
fieldType: props.fieldType,
|
|
390
|
+
checkoutId
|
|
380
391
|
};
|
|
381
392
|
postMessageToIframe(data, window.parent);
|
|
382
393
|
};
|
|
@@ -384,6 +395,7 @@ const FieldIframe = (props) => {
|
|
|
384
395
|
const data = {
|
|
385
396
|
action: MessageAction.VALIDATED,
|
|
386
397
|
fieldType: props.fieldType,
|
|
398
|
+
checkoutId,
|
|
387
399
|
status
|
|
388
400
|
};
|
|
389
401
|
postMessageToIframe(data, window.parent);
|
|
@@ -399,7 +411,7 @@ const FieldIframe = (props) => {
|
|
|
399
411
|
}
|
|
400
412
|
);
|
|
401
413
|
};
|
|
402
|
-
const HiddenIframe = () => {
|
|
414
|
+
const HiddenIframe = ({ checkoutId }) => {
|
|
403
415
|
const formData = {
|
|
404
416
|
expYear: "",
|
|
405
417
|
expMonth: "",
|
|
@@ -409,59 +421,34 @@ const HiddenIframe = () => {
|
|
|
409
421
|
const onReceiveMessage = async (event) => {
|
|
410
422
|
const { data } = event;
|
|
411
423
|
const parsedData = safeParse(data);
|
|
412
|
-
console.log(parsedData);
|
|
413
424
|
if (!Reflect.has(parsedData, "action")) {
|
|
414
425
|
return;
|
|
415
426
|
}
|
|
427
|
+
console.log(parsedData, checkoutId);
|
|
428
|
+
if (parsedData.checkoutId !== checkoutId) {
|
|
429
|
+
return;
|
|
430
|
+
}
|
|
416
431
|
if (parsedData.action === MessageAction.VALID_WITH_VALUE) {
|
|
417
432
|
const feedbackData = parsedData;
|
|
418
433
|
switch (feedbackData.fieldType) {
|
|
419
434
|
case EFieldType.CVV: {
|
|
420
435
|
formData.cvv = feedbackData.value;
|
|
421
|
-
setMessageList([
|
|
422
|
-
...messageList,
|
|
423
|
-
{
|
|
424
|
-
name: "CVV",
|
|
425
|
-
label: `收到值:${feedbackData.value}`
|
|
426
|
-
}
|
|
427
|
-
]);
|
|
428
436
|
break;
|
|
429
437
|
}
|
|
430
438
|
case EFieldType.CARD_NUMBER: {
|
|
431
439
|
formData.cardNo = trimAll(feedbackData.value);
|
|
432
|
-
setMessageList([
|
|
433
|
-
...messageList,
|
|
434
|
-
{
|
|
435
|
-
name: "卡号",
|
|
436
|
-
label: `收到值:${feedbackData.value}`
|
|
437
|
-
}
|
|
438
|
-
]);
|
|
439
440
|
break;
|
|
440
441
|
}
|
|
441
442
|
case EFieldType.EXPIRE_DATE: {
|
|
442
443
|
const [expMonth, expYear] = feedbackData.value.split("/");
|
|
443
444
|
formData.expMonth = expMonth;
|
|
444
445
|
formData.expYear = `20${expYear}`;
|
|
445
|
-
setMessageList([
|
|
446
|
-
...messageList,
|
|
447
|
-
{
|
|
448
|
-
name: "卡有效期",
|
|
449
|
-
label: `收到值:${feedbackData.value}`
|
|
450
|
-
}
|
|
451
|
-
]);
|
|
452
446
|
break;
|
|
453
447
|
}
|
|
454
448
|
}
|
|
455
449
|
} else if (parsedData.action === MessageAction.PAYMENT) {
|
|
456
450
|
const feedbackData = parsedData;
|
|
457
451
|
pay(feedbackData.formData, feedbackData.locale, feedbackData.extraParams);
|
|
458
|
-
setMessageList([
|
|
459
|
-
...messageList,
|
|
460
|
-
{
|
|
461
|
-
name: "表单组件",
|
|
462
|
-
label: `进行支付,${JSON.stringify(formData || {})}`
|
|
463
|
-
}
|
|
464
|
-
]);
|
|
465
452
|
} else if (parsedData.action === MessageAction.ENCRYPT_CARD) {
|
|
466
453
|
const feedbackData = parsedData;
|
|
467
454
|
try {
|
|
@@ -471,8 +458,6 @@ const HiddenIframe = () => {
|
|
|
471
458
|
console.log("error", error);
|
|
472
459
|
sendCardEncryptionFailedMessage(error);
|
|
473
460
|
}
|
|
474
|
-
} else if (parsedData.action === MessageAction.DEBUG_MODE) {
|
|
475
|
-
console.log("hidden iframe 开启测试模式");
|
|
476
461
|
}
|
|
477
462
|
};
|
|
478
463
|
y(() => {
|
|
@@ -501,6 +486,7 @@ const HiddenIframe = () => {
|
|
|
501
486
|
const sendAfterPaymentMessage = (response) => {
|
|
502
487
|
const data = {
|
|
503
488
|
action: MessageAction.AFTER_PAYMENT,
|
|
489
|
+
checkoutId,
|
|
504
490
|
response
|
|
505
491
|
};
|
|
506
492
|
postMessageToIframe(data, window.parent);
|
|
@@ -508,6 +494,7 @@ const HiddenIframe = () => {
|
|
|
508
494
|
const sendPaymentErrorMessage = (error) => {
|
|
509
495
|
const data = {
|
|
510
496
|
action: MessageAction.PAYMENT_ERROR,
|
|
497
|
+
checkoutId,
|
|
511
498
|
error: {
|
|
512
499
|
message: error.message,
|
|
513
500
|
code: error.code
|
|
@@ -517,19 +504,22 @@ const HiddenIframe = () => {
|
|
|
517
504
|
};
|
|
518
505
|
const sendPaymentTimeoutMessage = () => {
|
|
519
506
|
const data = {
|
|
520
|
-
action: MessageAction.PAYMENT_TIMEOUT
|
|
507
|
+
action: MessageAction.PAYMENT_TIMEOUT,
|
|
508
|
+
checkoutId
|
|
521
509
|
};
|
|
522
510
|
postMessageToIframe(data, window.parent);
|
|
523
511
|
};
|
|
524
512
|
const sendHiddenIframeReadyMessage = () => {
|
|
525
513
|
const data = {
|
|
526
|
-
action: MessageAction.HIDDEN_IFRAME_READY
|
|
514
|
+
action: MessageAction.HIDDEN_IFRAME_READY,
|
|
515
|
+
checkoutId
|
|
527
516
|
};
|
|
528
517
|
postMessageToIframe(data, window.parent);
|
|
529
518
|
};
|
|
530
519
|
const sendCardEncryptedMessage = (encryptedInfo) => {
|
|
531
520
|
const data = {
|
|
532
521
|
action: MessageAction.CARD_ENCRYPTED,
|
|
522
|
+
checkoutId,
|
|
533
523
|
encryptedInfo
|
|
534
524
|
};
|
|
535
525
|
postMessageToIframe(data, window.parent);
|
|
@@ -537,6 +527,7 @@ const HiddenIframe = () => {
|
|
|
537
527
|
const sendCardEncryptionFailedMessage = (error) => {
|
|
538
528
|
const data = {
|
|
539
529
|
action: MessageAction.CARD_ENCRYPTION_FAILED,
|
|
530
|
+
checkoutId,
|
|
540
531
|
error
|
|
541
532
|
};
|
|
542
533
|
postMessageToIframe(data, window.parent);
|
|
@@ -544,36 +535,22 @@ const HiddenIframe = () => {
|
|
|
544
535
|
y(() => {
|
|
545
536
|
sendHiddenIframeReadyMessage();
|
|
546
537
|
}, []);
|
|
547
|
-
|
|
548
|
-
const messageListRef = A(null);
|
|
549
|
-
y(() => {
|
|
550
|
-
if (messageListRef.current) {
|
|
551
|
-
messageListRef.current.scrollTop = messageListRef.current.scrollHeight;
|
|
552
|
-
}
|
|
553
|
-
}, [messageList]);
|
|
554
|
-
return /* @__PURE__ */ u(b, { children: /* @__PURE__ */ u("div", { style: "width: 100%; height: 100%; overflow-y: auto", ref: messageListRef, children: messageList.map((message) => /* @__PURE__ */ u("div", { style: { fontSize: "18px", marginBottom: "4px" }, children: [
|
|
555
|
-
/* @__PURE__ */ u("span", { style: { color: "#4f43df" }, children: [
|
|
556
|
-
"[",
|
|
557
|
-
message.name,
|
|
558
|
-
"]"
|
|
559
|
-
] }),
|
|
560
|
-
/* @__PURE__ */ u("span", { children: [
|
|
561
|
-
": ",
|
|
562
|
-
message.label
|
|
563
|
-
] })
|
|
564
|
-
] })) }) });
|
|
538
|
+
return /* @__PURE__ */ u(b, {});
|
|
565
539
|
};
|
|
566
540
|
const SecuredIframe = () => {
|
|
567
541
|
const [fieldIframeConfig, setFieldIframeConfig] = h();
|
|
568
542
|
const [hidden, setHidden] = h(false);
|
|
569
543
|
const [hasInit, setHasInit] = h(false);
|
|
544
|
+
const checkoutId = A("");
|
|
570
545
|
const onReceiveMessage = (event) => {
|
|
571
546
|
const { data } = event;
|
|
572
547
|
const feedbackData = safeParse(data);
|
|
573
548
|
if (!Reflect.has(feedbackData, "action")) {
|
|
574
549
|
return;
|
|
575
550
|
}
|
|
551
|
+
console.log(feedbackData, checkoutId.current);
|
|
576
552
|
if (feedbackData.action === MessageAction.INIT) {
|
|
553
|
+
checkoutId.current = feedbackData.checkoutId;
|
|
577
554
|
setHidden(feedbackData.hidden);
|
|
578
555
|
setFieldIframeConfig(feedbackData.config);
|
|
579
556
|
if (feedbackData.apiUrl) {
|
|
@@ -591,7 +568,7 @@ const SecuredIframe = () => {
|
|
|
591
568
|
return;
|
|
592
569
|
};
|
|
593
570
|
window.addEventListener("message", onReceiveMessage);
|
|
594
|
-
return /* @__PURE__ */ u(b, { children: hasInit && (hidden ? /* @__PURE__ */ u(HiddenIframe, {}) : /* @__PURE__ */ u(FieldIframe, { ...fieldIframeConfig })) });
|
|
571
|
+
return /* @__PURE__ */ u(b, { children: hasInit && (hidden ? /* @__PURE__ */ u(HiddenIframe, { checkoutId: checkoutId.current }) : /* @__PURE__ */ u(FieldIframe, { ...fieldIframeConfig, checkoutId: checkoutId.current })) });
|
|
595
572
|
};
|
|
596
573
|
export {
|
|
597
574
|
SecuredIframe
|
|
@@ -3,7 +3,7 @@ import { useBEM } from "../../hooks/useBEM.js";
|
|
|
3
3
|
import { CoreContext } from "../../core/context.js";
|
|
4
4
|
import "../../utils/card-brand/brands.js";
|
|
5
5
|
import "../../utils/system-info/get-browser-info.js";
|
|
6
|
-
import {
|
|
6
|
+
import { normalizedClass, formatAmount, trimAll } from "../../utils/format.js";
|
|
7
7
|
import { formatPaymentResult } from "../../utils/payment.js";
|
|
8
8
|
import { isTimeoutError } from "../../api/http.js";
|
|
9
9
|
import { getBrowserParams } from "../../api/modules/get-browser-params.js";
|
|
@@ -25,7 +25,7 @@ import { AccountNameField } from "../AccountNameField/index.js";
|
|
|
25
25
|
const { bem } = useBEM("sepa");
|
|
26
26
|
const fieldClassNames = bem("field");
|
|
27
27
|
const Sepa = w((props, ref) => {
|
|
28
|
-
var _a, _b
|
|
28
|
+
var _a, _b;
|
|
29
29
|
const { session, core } = props;
|
|
30
30
|
const addressCore = core.getAddressCore();
|
|
31
31
|
let emailState = createEmailCore();
|
|
@@ -53,13 +53,6 @@ const Sepa = w((props, ref) => {
|
|
|
53
53
|
const disabledEmail = A(false);
|
|
54
54
|
const [requiredBill, setRequiredBill] = h(false);
|
|
55
55
|
const [isCheckoutEnabled, setIsCheckoutEnabled] = h(false);
|
|
56
|
-
const formStyle = {
|
|
57
|
-
[cssVarPrefix("button-bg-color")]: (_a = session == null ? void 0 : session.colors) == null ? void 0 : _a.primary,
|
|
58
|
-
[cssVarPrefix("button-bg-color-hover")]: (_b = session == null ? void 0 : session.colors) == null ? void 0 : _b.primaryHover,
|
|
59
|
-
[cssVarPrefix("button-bg-color-active")]: (_c = session == null ? void 0 : session.colors) == null ? void 0 : _c.primaryActive,
|
|
60
|
-
[cssVarPrefix("button-text-color")]: (_e = (_d = session == null ? void 0 : session.checkout) == null ? void 0 : _d.theme) == null ? void 0 : _e.payButtonTextColor,
|
|
61
|
-
[cssVarPrefix("input-color")]: (_f = session == null ? void 0 : session.colors) == null ? void 0 : _f.primary
|
|
62
|
-
};
|
|
63
56
|
F(ref, () => ({
|
|
64
57
|
updateAddress: () => {
|
|
65
58
|
var _a2;
|
|
@@ -79,10 +72,13 @@ const Sepa = w((props, ref) => {
|
|
|
79
72
|
const processOnSuccess = (res) => {
|
|
80
73
|
var _a2, _b2;
|
|
81
74
|
setSubmitButtonStatus("success");
|
|
82
|
-
(_b2 = props.onSuccess) == null ? void 0 : _b2.call(
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
75
|
+
(_b2 = props.onSuccess) == null ? void 0 : _b2.call(
|
|
76
|
+
props,
|
|
77
|
+
formatPaymentResult({
|
|
78
|
+
...res,
|
|
79
|
+
returnUrl: (_a2 = session == null ? void 0 : session.checkout) == null ? void 0 : _a2.returnUrl
|
|
80
|
+
})
|
|
81
|
+
);
|
|
86
82
|
};
|
|
87
83
|
y(() => {
|
|
88
84
|
session.ready().then(() => {
|
|
@@ -185,7 +181,7 @@ const Sepa = w((props, ref) => {
|
|
|
185
181
|
};
|
|
186
182
|
};
|
|
187
183
|
async function pay(search = false, timeout) {
|
|
188
|
-
var _a2, _b2,
|
|
184
|
+
var _a2, _b2, _c, _d, _e;
|
|
189
185
|
try {
|
|
190
186
|
const requestOptions = { locale: i18n.locale, timeout };
|
|
191
187
|
let res = null;
|
|
@@ -201,7 +197,7 @@ const Sepa = w((props, ref) => {
|
|
|
201
197
|
requestOptions
|
|
202
198
|
);
|
|
203
199
|
} else {
|
|
204
|
-
const extraParams = (
|
|
200
|
+
const extraParams = (_d = (_c = core.config)._getExtraParams) == null ? void 0 : _d.call(_c, "payment", PaymentMethod.SEPA_DEBIT);
|
|
205
201
|
res = await sepaPay(await getPaymentParams(), extraParams, requestOptions);
|
|
206
202
|
}
|
|
207
203
|
return processAfterPayment(res, search);
|
|
@@ -216,14 +212,14 @@ const Sepa = w((props, ref) => {
|
|
|
216
212
|
} else {
|
|
217
213
|
const message = error.i18nKey ? i18n.get(error.i18nKey) : error.message;
|
|
218
214
|
setErrorMsg(message);
|
|
219
|
-
(
|
|
215
|
+
(_e = props.onError) == null ? void 0 : _e.call(props, new PayKKaError("API_ERROR", message, { code: error.code, cause: error }));
|
|
220
216
|
setSubmitButtonStatus("unSubmit");
|
|
221
217
|
return { end: true };
|
|
222
218
|
}
|
|
223
219
|
}
|
|
224
220
|
}
|
|
225
221
|
const processAfterPayment = (res, search = false) => {
|
|
226
|
-
var _a2, _b2,
|
|
222
|
+
var _a2, _b2, _c;
|
|
227
223
|
const { status, orderStatus, errorMessage, errorCode, sessionId } = res;
|
|
228
224
|
sessionId && (session.sessionId = sessionId);
|
|
229
225
|
if (status === "PROCESSING") {
|
|
@@ -253,7 +249,7 @@ const Sepa = w((props, ref) => {
|
|
|
253
249
|
return { end: true };
|
|
254
250
|
} else if (status === "EXPIRED") {
|
|
255
251
|
setSubmitButtonStatus("unSubmit");
|
|
256
|
-
(
|
|
252
|
+
(_c = props.onExpired) == null ? void 0 : _c.call(props);
|
|
257
253
|
return { end: true };
|
|
258
254
|
}
|
|
259
255
|
setSubmitButtonStatus("unSubmit");
|
|
@@ -267,7 +263,7 @@ const Sepa = w((props, ref) => {
|
|
|
267
263
|
session,
|
|
268
264
|
core
|
|
269
265
|
},
|
|
270
|
-
children: sessionReady && isCheckoutEnabled && i18n.ready.value && /* @__PURE__ */ u(Form, { form, ref: setFormRef, onFormChange: (form2) => setForm(form2), children: /* @__PURE__ */ u("div", { className: normalizedClass(COMMON_CLASS_NAME, bem()),
|
|
266
|
+
children: sessionReady && isCheckoutEnabled && i18n.ready.value && /* @__PURE__ */ u("div", { className: core.theme.className, children: /* @__PURE__ */ u(Form, { form, ref: setFormRef, onFormChange: (form2) => setForm(form2), children: /* @__PURE__ */ u("div", { className: normalizedClass(COMMON_CLASS_NAME, bem()), children: [
|
|
271
267
|
/* @__PURE__ */ u("div", { className: fieldClassNames, children: /* @__PURE__ */ u(
|
|
272
268
|
EmailField,
|
|
273
269
|
{
|
|
@@ -283,13 +279,13 @@ const Sepa = w((props, ref) => {
|
|
|
283
279
|
{
|
|
284
280
|
ref: addressFieldRef,
|
|
285
281
|
value: form.address,
|
|
286
|
-
country: ((
|
|
282
|
+
country: ((_a = session == null ? void 0 : session.checkout) == null ? void 0 : _a.country) || ((_b = session == null ? void 0 : session.checkout) == null ? void 0 : _b.bill.country),
|
|
287
283
|
onAddressChange: (value) => setForm(Object.assign(form, { address: value }))
|
|
288
284
|
}
|
|
289
285
|
) }),
|
|
290
286
|
!!errorMsg && /* @__PURE__ */ u(Info, { content: errorMsg, style: { marginTop: "12px" } }),
|
|
291
287
|
Button()
|
|
292
|
-
] }) })
|
|
288
|
+
] }) }) })
|
|
293
289
|
}
|
|
294
290
|
);
|
|
295
291
|
});
|