diff --git a/src/pages/Payment/MultiPaymentWindow.js b/src/pages/Payment/MultiPaymentWindow.js
index a53f8ac6..f1bbcef9 100644
--- a/src/pages/Payment/MultiPaymentWindow.js
+++ b/src/pages/Payment/MultiPaymentWindow.js
@@ -346,27 +346,27 @@ const MultiPaymentWindow = (props) => {
-
-
+
-
+
-
+
-
+
@@ -374,7 +374,7 @@ const MultiPaymentWindow = (props) => {
{props.browserType==mobileBrowser?
null
:
-
+
}
diff --git a/src/pages/Payment/index.js b/src/pages/Payment/index.js
index 02789d16..21bdefe5 100644
--- a/src/pages/Payment/index.js
+++ b/src/pages/Payment/index.js
@@ -106,6 +106,12 @@ const Index = () => {
setTotalAmount(totalAmount);
setSelectedPaymentMethod("")
setConfirmPayment(false)
+ setOnReady(false)
+ setAvailableMethods([])
+ setFPSStatus({})
+ setCreditCardStatus({})
+ setUnionPayStatus({})
+ setPPSStatus({})
if (totalAmount > 0) {
getAvailablePayment()
getTransactionId()
@@ -190,48 +196,97 @@ const Index = () => {
}
}, [afterConfirmPayment]);
- const getAvailablePayment = () =>{
+ const filterPreferPaymentMethodsByLimit = (methods, amount, limits) => {
+ if (!methods) {
+ return [];
+ }
+ if (!limits) {
+ return methods;
+ }
+ return methods.filter((method) => {
+ const key = (method || "").toLowerCase();
+ let maxLimit;
+ if (key === "fps") {
+ maxLimit = limits.fpsLimitRecord?.maxLimit;
+ } else if (key === "pps" || key === "ppsb") {
+ maxLimit = limits.ppsbLimitRecord?.maxLimit;
+ } else if (key === "unionpay") {
+ maxLimit = limits.unionPlayLimitRecord?.maxLimit;
+ } else if (key === "visa" || key === "mastercard" || key === "jcb" || key === "creditcard") {
+ maxLimit = limits.creditCardLimitRecord?.maxLimit;
+ } else {
+ return true;
+ }
+ return maxLimit == null || amount <= maxLimit;
+ });
+ };
+
+ const filterAvailableMethodsByLimit = (methods, amount, limits) => {
+ if (!methods) {
+ return [];
+ }
+ if (!limits) {
+ return methods;
+ }
+ return methods.filter((method) => {
+ if (method.subtype === "FPS") {
+ return limits.fpsLimitRecord?.maxLimit == null || amount <= limits.fpsLimitRecord.maxLimit;
+ }
+ if (method.subtype === "PPS") {
+ return limits.ppsbLimitRecord?.maxLimit == null || amount <= limits.ppsbLimitRecord.maxLimit;
+ }
+ if (method.subtype === "CreditCard") {
+ const isUnionPay = method.supportedcard?.some((card) => card === "UnionPay");
+ if (isUnionPay) {
+ return limits.unionPlayLimitRecord?.maxLimit == null || amount <= limits.unionPlayLimitRecord.maxLimit;
+ }
+ return limits.creditCardLimitRecord?.maxLimit == null || amount <= limits.creditCardLimitRecord.maxLimit;
+ }
+ return true;
+ });
+ };
+
+ const requestPaymentAvailability = (methods, limits) => {
HttpUtils.post({
url: UrlUtils.PAYMENT_AVAILABLE_PAYMENT,
params: {
"locale": locale === 'en' ?local.en:locale === 'zh-HK' ?local.zh:local.cn,
"amount": totalAmount,
- // "eserviceids": [
- // "", ""
- // ],
- "preferpaymentmethods": preferpaymentmethods
+ "preferpaymentmethods": methods
},
onSuccess: (responseData) => {
- let availableMethods = responseData.availablepaymentmethods;
+ let availableMethods = filterAvailableMethodsByLimit(
+ responseData.availablepaymentmethods || [], totalAmount, limits
+ );
setAvailableMethods(availableMethods);
- HttpUtils.get({
- url: UrlUtils.PAYMENT_LIMIT_SETTING_LIST,
- params: {},
- onSuccess: (responseData) => {
- // console.log(responseData)
- setPaymentLimit(responseData)
-
- },
- onError: () =>{
- // setOnReady(true)
- }
- });
+ if (availableMethods.length === 0) {
+ setOnReady(true)
+ }
},
onError: () =>{
setOnReady(true)
}
});
-
+ };
+
+ const getAvailablePayment = () =>{
HttpUtils.get({
url: UrlUtils.PAYMENT_LIMIT_SETTING_LIST,
params: {},
onSuccess: (responseData) => {
- // console.log(responseData)
setPaymentLimit(responseData)
-
+ const methodsWithinLimit = filterPreferPaymentMethodsByLimit(
+ preferpaymentmethods, totalAmount, responseData
+ );
+ if (methodsWithinLimit.length === 0) {
+ setAvailableMethods([])
+ setOnReady(true)
+ return;
+ }
+ requestPaymentAvailability(methodsWithinLimit, responseData);
},
onError: () =>{
- // setOnReady(true)
+ requestPaymentAvailability(preferpaymentmethods);
}
});
@@ -383,7 +438,7 @@ const Index = () => {
setFPSStatus(method)
}
} else if (method.subtype === "CreditCard") {
- method.supportedcard.forEach((supportedcard) => {
+ (method.supportedcard || []).forEach((supportedcard) => {
if (supportedcard === "JCB" || supportedcard === "MasterCard" || supportedcard === "Visa") {
setCreditCardStatus(method)
} else {