yumi和 aslan
This commit is contained in:
parent
d1a2220183
commit
c6837f2f6b
311
common/api.js
311
common/api.js
@ -295,14 +295,23 @@ var default_api = 'https://api.global-interaction.com/';
|
|||||||
throw httpError;
|
throw httpError;
|
||||||
}
|
}
|
||||||
var code = payload && payload.code;
|
var code = payload && payload.code;
|
||||||
|
var errorCode = payload && payload.errorCode;
|
||||||
var isErrorCode =
|
var isErrorCode =
|
||||||
(typeof code === 'number' && code !== 0) ||
|
(typeof code === 'number' && code !== 0) ||
|
||||||
(typeof code === 'string' && code !== '' && code !== 'OK');
|
(typeof code === 'string' && code !== '' && code !== 'OK') ||
|
||||||
|
(typeof errorCode === 'number' && errorCode !== 0) ||
|
||||||
|
(typeof errorCode === 'string' &&
|
||||||
|
errorCode !== '' &&
|
||||||
|
errorCode !== '0' &&
|
||||||
|
errorCode !== 'OK');
|
||||||
if (isErrorCode) {
|
if (isErrorCode) {
|
||||||
var apiError = new Error(
|
var apiError = new Error(
|
||||||
payload.message || 'api_request_failed'
|
payload.message ||
|
||||||
|
payload.errorMsg ||
|
||||||
|
payload.error ||
|
||||||
|
'api_request_failed'
|
||||||
);
|
);
|
||||||
apiError.code = payload.code;
|
apiError.code = payload.code || payload.errorCode;
|
||||||
apiError.request_id = payload.request_id;
|
apiError.request_id = payload.request_id;
|
||||||
apiError.payload = payload;
|
apiError.payload = payload;
|
||||||
throw apiError;
|
throw apiError;
|
||||||
@ -310,6 +319,9 @@ var default_api = 'https://api.global-interaction.com/';
|
|||||||
return payload &&
|
return payload &&
|
||||||
Object.prototype.hasOwnProperty.call(payload, 'data')
|
Object.prototype.hasOwnProperty.call(payload, 'data')
|
||||||
? payload.data
|
? payload.data
|
||||||
|
: payload &&
|
||||||
|
Object.prototype.hasOwnProperty.call(payload, 'body')
|
||||||
|
? payload.body
|
||||||
: payload;
|
: payload;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -434,6 +446,14 @@ var default_api = 'https://api.global-interaction.com/';
|
|||||||
return activeAppConfig && activeAppConfig.adapter === 'aslan-web-pay';
|
return activeAppConfig && activeAppConfig.adapter === 'aslan-web-pay';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function isYumiWebPay() {
|
||||||
|
return activeAppConfig && activeAppConfig.adapter === 'yumi-web-pay';
|
||||||
|
}
|
||||||
|
|
||||||
|
function isConfiguredWebPay() {
|
||||||
|
return isAslanWebPay() || isYumiWebPay();
|
||||||
|
}
|
||||||
|
|
||||||
function appEndpoint(name, fallback) {
|
function appEndpoint(name, fallback) {
|
||||||
return (
|
return (
|
||||||
(activeAppConfig &&
|
(activeAppConfig &&
|
||||||
@ -459,6 +479,12 @@ var default_api = 'https://api.global-interaction.com/';
|
|||||||
return query;
|
return query;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function configuredWebPayUserQuery(displayUserID) {
|
||||||
|
return Object.assign(aslanUserQuery(displayUserID), {
|
||||||
|
sysOrigin: activeAppConfig.sys_origin || 'LIKEI',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function aslanPaymentMethods(options) {
|
function aslanPaymentMethods(options) {
|
||||||
var providers = (activeAppConfig && activeAppConfig.providers) || {};
|
var providers = (activeAppConfig && activeAppConfig.providers) || {};
|
||||||
var mifapay = providers.mifapay || {};
|
var mifapay = providers.mifapay || {};
|
||||||
@ -508,6 +534,246 @@ var default_api = 'https://api.global-interaction.com/';
|
|||||||
return methods;
|
return methods;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function firstValue(object, keys) {
|
||||||
|
object = object || {};
|
||||||
|
for (var i = 0; i < keys.length; i += 1) {
|
||||||
|
var value = object[keys[i]];
|
||||||
|
if (value !== undefined && value !== null && value !== '')
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
function normalizeCountryCode(value) {
|
||||||
|
return String(value || '')
|
||||||
|
.trim()
|
||||||
|
.toUpperCase();
|
||||||
|
}
|
||||||
|
|
||||||
|
function countryCodeFromCountry(country) {
|
||||||
|
country = country || {};
|
||||||
|
return normalizeCountryCode(
|
||||||
|
firstValue(country, [
|
||||||
|
'alphaTwo',
|
||||||
|
'alpha_two',
|
||||||
|
'countryCode',
|
||||||
|
'country_code',
|
||||||
|
'code',
|
||||||
|
])
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function countryNameFromCountry(country) {
|
||||||
|
return firstValue(country, [
|
||||||
|
'aliasName',
|
||||||
|
'enName',
|
||||||
|
'countryName',
|
||||||
|
'country_name',
|
||||||
|
'name',
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
function normalizeAmountUsd(value) {
|
||||||
|
var amount = Number(value || 0);
|
||||||
|
return Number.isFinite(amount) && amount > 0 ? amount : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
function decimalToMinor(value) {
|
||||||
|
return Math.round(normalizeAmountUsd(value) * 100);
|
||||||
|
}
|
||||||
|
|
||||||
|
function mapYumiContext(context) {
|
||||||
|
context = context || {};
|
||||||
|
var profile = context.userProfile || context.user_profile || {};
|
||||||
|
var countryList = context.countryList || context.country_list || [];
|
||||||
|
var selectedCountry = countryList[0] || {};
|
||||||
|
var country = selectedCountry.country || {};
|
||||||
|
var countryCode =
|
||||||
|
normalizeCountryCode(profile.countryCode || profile.country_code) ||
|
||||||
|
countryCodeFromCountry(country);
|
||||||
|
return {
|
||||||
|
auth_mode: 'display_user_id',
|
||||||
|
account: {
|
||||||
|
id: profile.id || '',
|
||||||
|
user_id: profile.id || '',
|
||||||
|
userId: profile.id || '',
|
||||||
|
display_user_id: profile.account || profile.id || '',
|
||||||
|
username: profile.userNickname || profile.user_nickname || '',
|
||||||
|
avatar: profile.userAvatar || profile.user_avatar || '',
|
||||||
|
country_code: countryCode,
|
||||||
|
countryCode: countryCode,
|
||||||
|
country_name:
|
||||||
|
profile.countryName ||
|
||||||
|
profile.country_name ||
|
||||||
|
countryNameFromCountry(country),
|
||||||
|
countryName:
|
||||||
|
profile.countryName ||
|
||||||
|
profile.country_name ||
|
||||||
|
countryNameFromCountry(country),
|
||||||
|
},
|
||||||
|
country_list: countryList.map(function (item) {
|
||||||
|
var itemCountry = item.country || {};
|
||||||
|
return {
|
||||||
|
id: item.id || '',
|
||||||
|
pay_country_id:
|
||||||
|
item.payCountryId || item.pay_country_id || item.id || '',
|
||||||
|
payCountryId:
|
||||||
|
item.payCountryId || item.pay_country_id || item.id || '',
|
||||||
|
country_id: item.countryId || item.country_id || '',
|
||||||
|
currency_code: item.currency || item.currency_code || '',
|
||||||
|
currencyCode: item.currency || item.currency_code || '',
|
||||||
|
country_code: countryCodeFromCountry(itemCountry),
|
||||||
|
countryCode: countryCodeFromCountry(itemCountry),
|
||||||
|
country_name: countryNameFromCountry(itemCountry),
|
||||||
|
countryName: countryNameFromCountry(itemCountry),
|
||||||
|
country: itemCountry,
|
||||||
|
};
|
||||||
|
}),
|
||||||
|
region_id: context.regionId || context.region_id || '',
|
||||||
|
regionId: context.regionId || context.region_id || '',
|
||||||
|
raw: context,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function mapYumiOptions(options) {
|
||||||
|
options = options || {};
|
||||||
|
var products = (options.commodity || options.products || []).map(
|
||||||
|
function (item) {
|
||||||
|
var content = Number(item.content || 0);
|
||||||
|
var awardContent = Number(item.awardContent || item.award_content || 0);
|
||||||
|
var amountUsd = normalizeAmountUsd(item.amountUsd || item.amount_usd);
|
||||||
|
return {
|
||||||
|
product_id: item.id,
|
||||||
|
productId: item.id,
|
||||||
|
pay_country_id:
|
||||||
|
item.payCountryId ||
|
||||||
|
item.pay_country_id ||
|
||||||
|
options.payCountryId ||
|
||||||
|
options.pay_country_id ||
|
||||||
|
'',
|
||||||
|
coin_amount:
|
||||||
|
(Number.isFinite(content) ? content : 0) +
|
||||||
|
(Number.isFinite(awardContent) ? awardContent : 0),
|
||||||
|
base_coin_amount: Number.isFinite(content) ? content : 0,
|
||||||
|
award_coin_amount: Number.isFinite(awardContent)
|
||||||
|
? awardContent
|
||||||
|
: 0,
|
||||||
|
amount_usdt: amountUsd,
|
||||||
|
amount_usdt_micro: Math.round(amountUsd * 1000000),
|
||||||
|
amount_minor: decimalToMinor(amountUsd),
|
||||||
|
currency_code: item.currency || item.currency_code || '',
|
||||||
|
raw: item,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
var firstProduct = products[0] || {};
|
||||||
|
var countryCode = normalizeCountryCode(
|
||||||
|
options.country_code || options.countryCode || ''
|
||||||
|
);
|
||||||
|
var currencyCode =
|
||||||
|
options.currency_code ||
|
||||||
|
options.currencyCode ||
|
||||||
|
firstProduct.currency_code ||
|
||||||
|
'';
|
||||||
|
return {
|
||||||
|
products: products,
|
||||||
|
payment_methods: yumiPaymentMethods(
|
||||||
|
Object.assign({}, options, {
|
||||||
|
pay_country_id:
|
||||||
|
options.payCountryId ||
|
||||||
|
options.pay_country_id ||
|
||||||
|
firstProduct.pay_country_id ||
|
||||||
|
'',
|
||||||
|
country_code: countryCode,
|
||||||
|
currency_code: currencyCode,
|
||||||
|
usd_to_currency_rate:
|
||||||
|
options.usd_to_currency_rate ||
|
||||||
|
options.usdToCurrencyRate ||
|
||||||
|
0,
|
||||||
|
})
|
||||||
|
),
|
||||||
|
pay_country_id:
|
||||||
|
options.payCountryId ||
|
||||||
|
options.pay_country_id ||
|
||||||
|
firstProduct.pay_country_id ||
|
||||||
|
'',
|
||||||
|
country_code: countryCode,
|
||||||
|
currency_code: currencyCode,
|
||||||
|
usd_to_currency_rate:
|
||||||
|
options.usd_to_currency_rate || options.usdToCurrencyRate || 0,
|
||||||
|
usdt_trc20_enabled: false,
|
||||||
|
raw: options,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function yumiPaymentMethods(options) {
|
||||||
|
var channels = (options.raw && options.raw.channels) || options.channels || [];
|
||||||
|
var supported = {};
|
||||||
|
channels.forEach(function (item) {
|
||||||
|
var channel = item.channel || {};
|
||||||
|
var details = item.details || {};
|
||||||
|
[
|
||||||
|
channel.channelCode,
|
||||||
|
channel.channel_code,
|
||||||
|
details.channelCode,
|
||||||
|
details.channel_code,
|
||||||
|
].forEach(function (code) {
|
||||||
|
if (code) supported[String(code)] = item;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return aslanPaymentMethods(options).filter(function (method) {
|
||||||
|
var channelCode =
|
||||||
|
method.channel_code ||
|
||||||
|
[method.pay_way, method.pay_type].filter(Boolean).join('_');
|
||||||
|
if (!Object.keys(supported).length) return true;
|
||||||
|
return !!supported[channelCode];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function mapYumiOrder(order) {
|
||||||
|
order = order || {};
|
||||||
|
var factoryCode = String(
|
||||||
|
order.factoryCode || order.factory_code || ''
|
||||||
|
).toUpperCase();
|
||||||
|
return {
|
||||||
|
order_id: order.orderId || order.order_id || '',
|
||||||
|
trade_no: order.tradeNo || order.trade_no || '',
|
||||||
|
provider_code: factoryCode === 'MIFA_PAY' ? 'mifapay' : factoryCode,
|
||||||
|
factory_code: factoryCode,
|
||||||
|
pay_url: order.requestUrl || order.request_url || order.pay_url || '',
|
||||||
|
currency_code: order.currency || order.currency_code || '',
|
||||||
|
country_code: order.countryCode || order.country_code || '',
|
||||||
|
provider_amount_minor: decimalToMinor(order.amount),
|
||||||
|
status: 'pending',
|
||||||
|
raw: order,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function mapYumiOrderStatus(order) {
|
||||||
|
order = order || {};
|
||||||
|
var status = String(order.status || '').toUpperCase();
|
||||||
|
var normalized =
|
||||||
|
order.success === true || status === 'SUCCESS'
|
||||||
|
? 'credited'
|
||||||
|
: order.finished === true || status === 'FAIL'
|
||||||
|
? 'failed'
|
||||||
|
: 'pending';
|
||||||
|
var factoryCode = String(
|
||||||
|
order.factoryCode || order.factory_code || ''
|
||||||
|
).toUpperCase();
|
||||||
|
return {
|
||||||
|
order_id: order.orderId || order.order_id || '',
|
||||||
|
trade_no: order.tradeNo || order.trade_no || '',
|
||||||
|
provider_code: factoryCode === 'MIFA_PAY' ? 'mifapay' : factoryCode,
|
||||||
|
factory_code: factoryCode,
|
||||||
|
currency_code: order.currency || order.currency_code || '',
|
||||||
|
provider_amount_minor: decimalToMinor(order.amount),
|
||||||
|
status: normalized,
|
||||||
|
failure_reason: order.reason || '',
|
||||||
|
raw: order,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
var rechargeAPI = {
|
var rechargeAPI = {
|
||||||
context: function (displayUserID) {
|
context: function (displayUserID) {
|
||||||
if (isAslanWebPay()) {
|
if (isAslanWebPay()) {
|
||||||
@ -516,13 +782,19 @@ var default_api = 'https://api.global-interaction.com/';
|
|||||||
query: aslanUserQuery(displayUserID),
|
query: aslanUserQuery(displayUserID),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
if (isYumiWebPay()) {
|
||||||
|
return request(appEndpoint('context', '/order/web/pay/user-profile'), {
|
||||||
|
method: 'GET',
|
||||||
|
query: configuredWebPayUserQuery(displayUserID),
|
||||||
|
}).then(mapYumiContext);
|
||||||
|
}
|
||||||
return request('/api/v1/recharge/h5/context', {
|
return request('/api/v1/recharge/h5/context', {
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
query: { display_user_id: displayUserID || '' },
|
query: { display_user_id: displayUserID || '' },
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
options: function (displayUserID, extra) {
|
options: function (displayUserID, extra) {
|
||||||
if (isAslanWebPay()) {
|
if (isConfiguredWebPay()) {
|
||||||
var query = Object.assign(aslanUserQuery(displayUserID), {
|
var query = Object.assign(aslanUserQuery(displayUserID), {
|
||||||
payCountryId:
|
payCountryId:
|
||||||
extra && (extra.pay_country_id || extra.payCountryId),
|
extra && (extra.pay_country_id || extra.payCountryId),
|
||||||
@ -536,6 +808,14 @@ var default_api = 'https://api.global-interaction.com/';
|
|||||||
query: query,
|
query: query,
|
||||||
}).then(function (options) {
|
}).then(function (options) {
|
||||||
options = options || {};
|
options = options || {};
|
||||||
|
if (isYumiWebPay()) {
|
||||||
|
return mapYumiOptions(
|
||||||
|
Object.assign({}, options, {
|
||||||
|
country_code:
|
||||||
|
query.countryCode || options.country_code,
|
||||||
|
})
|
||||||
|
);
|
||||||
|
}
|
||||||
options.payment_methods = aslanPaymentMethods(options);
|
options.payment_methods = aslanPaymentMethods(options);
|
||||||
options.usdt_trc20_enabled = false;
|
options.usdt_trc20_enabled = false;
|
||||||
return options;
|
return options;
|
||||||
@ -566,6 +846,20 @@ var default_api = 'https://api.global-interaction.com/';
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
if (isYumiWebPay()) {
|
||||||
|
return request(appEndpoint('orders', '/order/web/pay/recharge'), {
|
||||||
|
method: 'POST',
|
||||||
|
body: {
|
||||||
|
applicationId: activeAppConfig.application_id,
|
||||||
|
goodsId: payload && payload.product_id,
|
||||||
|
payCountryId: payload && payload.pay_country_id,
|
||||||
|
userId: payload && payload.user_id,
|
||||||
|
channelCode: payload && payload.channel_code,
|
||||||
|
newVersion: true,
|
||||||
|
appVersion: 'h5',
|
||||||
|
},
|
||||||
|
}).then(mapYumiOrder);
|
||||||
|
}
|
||||||
return request('/api/v1/recharge/h5/orders', {
|
return request('/api/v1/recharge/h5/orders', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
query: { language: readLanguageQuery() },
|
query: { language: readLanguageQuery() },
|
||||||
@ -593,6 +887,15 @@ var default_api = 'https://api.global-interaction.com/';
|
|||||||
{ method: 'GET' }
|
{ method: 'GET' }
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
if (isYumiWebPay()) {
|
||||||
|
return request(appEndpoint('order', '/order/web/pay/order-status'), {
|
||||||
|
method: 'GET',
|
||||||
|
query: {
|
||||||
|
orderId: orderID || '',
|
||||||
|
userId: displayUserID || '',
|
||||||
|
},
|
||||||
|
}).then(mapYumiOrderStatus);
|
||||||
|
}
|
||||||
return request(
|
return request(
|
||||||
'/api/v1/recharge/h5/orders/' +
|
'/api/v1/recharge/h5/orders/' +
|
||||||
encodeURIComponent(orderID || ''),
|
encodeURIComponent(orderID || ''),
|
||||||
|
|||||||
194
recharge/config/yumi.json
Normal file
194
recharge/config/yumi.json
Normal file
@ -0,0 +1,194 @@
|
|||||||
|
{
|
||||||
|
"app": "yumi",
|
||||||
|
"adapter": "yumi-web-pay",
|
||||||
|
"application_id": "2048200000000000701",
|
||||||
|
"sys_origin": "LIKEI",
|
||||||
|
"type": "GOLD",
|
||||||
|
"api": {
|
||||||
|
"prod": "https://jvapi.haiyihy.com/",
|
||||||
|
"test": "https://jvapi.haiyihy.com/",
|
||||||
|
"local": "http://127.0.0.1:13000/"
|
||||||
|
},
|
||||||
|
"headers": {
|
||||||
|
"Req-Sys-Origin": "origin=LIKEI;originChild=LIKEI;",
|
||||||
|
"Req-Client": "H5",
|
||||||
|
"Req-App-Intel": "version=1.0.0;build=1;channel=h5;"
|
||||||
|
},
|
||||||
|
"endpoints": {
|
||||||
|
"context": "/order/web/pay/user-profile",
|
||||||
|
"options": "/order/web/pay/commodity",
|
||||||
|
"orders": "/order/web/pay/recharge",
|
||||||
|
"order": "/order/web/pay/order-status"
|
||||||
|
},
|
||||||
|
"providers": {
|
||||||
|
"mifapay": {
|
||||||
|
"provider_code": "mifapay",
|
||||||
|
"provider_name": "MiFaPay",
|
||||||
|
"status": "active",
|
||||||
|
"countries": [
|
||||||
|
{
|
||||||
|
"country_code": "AE",
|
||||||
|
"country_name": "United Arab Emirates",
|
||||||
|
"currency_code": "AED",
|
||||||
|
"methods": [
|
||||||
|
{ "pay_way": "Card", "pay_type": "CreditCard", "method_name": "UAE Credit Card", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/ae/card-creditcard.png" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"country_code": "BD",
|
||||||
|
"country_name": "Bangladesh",
|
||||||
|
"currency_code": "BDT",
|
||||||
|
"methods": [
|
||||||
|
{ "pay_way": "Ewallet", "pay_type": "Nagad", "method_name": "Nagad", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/bd/ewallet-nagad.png" },
|
||||||
|
{ "pay_way": "Ewallet", "pay_type": "bKash", "method_name": "bKash", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/bd/ewallet-bkash.png" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"country_code": "BH",
|
||||||
|
"country_name": "Bahrain",
|
||||||
|
"currency_code": "BHD",
|
||||||
|
"methods": [
|
||||||
|
{ "pay_way": "Card", "pay_type": "CreditCard", "method_name": "Bahrain Credit Card", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/bh/card-creditcard.png" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"country_code": "EG",
|
||||||
|
"country_name": "Egypt",
|
||||||
|
"currency_code": "EGP",
|
||||||
|
"methods": [
|
||||||
|
{ "pay_way": "Card", "pay_type": "CreditCard", "method_name": "Egypt Credit Card", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/eg/card-creditcard.png" },
|
||||||
|
{ "pay_way": "Ewallet", "pay_type": "FawryPay", "method_name": "FawryPay", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/eg/ewallet-fawrypay.png" },
|
||||||
|
{ "pay_way": "Ewallet", "pay_type": "Meeza", "method_name": "Meeza", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/eg/ewallet-meeza.png" },
|
||||||
|
{ "pay_way": "Ewallet", "pay_type": "Opay", "method_name": "Opay", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/eg/ewallet-opay.png" },
|
||||||
|
{ "pay_way": "Ewallet", "pay_type": "Orange", "method_name": "Orange", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/eg/ewallet-orange.png" },
|
||||||
|
{ "pay_way": "Ewallet", "pay_type": "Vodafone", "method_name": "Vodafone", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/eg/ewallet-vodafone.png" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"country_code": "GLOBAL",
|
||||||
|
"country_name": "Global",
|
||||||
|
"currency_code": "USD",
|
||||||
|
"methods": [
|
||||||
|
{ "pay_way": "BankTransfer", "pay_type": "UnionPay", "method_name": "UnionPay", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/global/banktransfer-unionpay.png" },
|
||||||
|
{ "pay_way": "Card", "pay_type": "CreditCard", "method_name": "Credit Card", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/global/card-creditcard.png" },
|
||||||
|
{ "pay_way": "Ewallet", "pay_type": "ApplePay", "method_name": "Apple Pay", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/global/ewallet-applepay.png" },
|
||||||
|
{ "pay_way": "Ewallet", "pay_type": "GooglePay", "method_name": "Google Pay", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/global/ewallet-googlepay.png" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"country_code": "ID",
|
||||||
|
"country_name": "Indonesia",
|
||||||
|
"currency_code": "IDR",
|
||||||
|
"methods": [
|
||||||
|
{ "pay_way": "BankTransfer", "pay_type": "BCA", "method_name": "BCA Bank", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/id/banktransfer-bca.png" },
|
||||||
|
{ "pay_way": "BankTransfer", "pay_type": "BNI", "method_name": "BNI Bank", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/id/banktransfer-bni.png" },
|
||||||
|
{ "pay_way": "BankTransfer", "pay_type": "BRI", "method_name": "BRI Bank", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/id/banktransfer-bri.png" },
|
||||||
|
{ "pay_way": "BankTransfer", "pay_type": "Mandiri", "method_name": "Mandiri Bank", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/id/banktransfer-mandiri.png" },
|
||||||
|
{ "pay_way": "BankTransfer", "pay_type": "Permata", "method_name": "Permata Bank", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/id/banktransfer-permata.png" },
|
||||||
|
{ "pay_way": "BankTransfer", "pay_type": "QRIS", "method_name": "QRIS Bank Transfer", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/id/banktransfer-qris.png" },
|
||||||
|
{ "pay_way": "Ewallet", "pay_type": "DANA", "method_name": "DANA", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/id/ewallet-dana.png" },
|
||||||
|
{ "pay_way": "Ewallet", "pay_type": "LinkAja", "method_name": "LinkAja", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/id/ewallet-linkaja.png" },
|
||||||
|
{ "pay_way": "Ewallet", "pay_type": "OVO", "method_name": "OVO", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/id/ewallet-ovo.png" },
|
||||||
|
{ "pay_way": "Ewallet", "pay_type": "ShopeePay", "method_name": "ShopeePay", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/id/ewallet-shopeepay.png" },
|
||||||
|
{ "pay_way": "QR", "pay_type": "QRIS", "method_name": "QRIS", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/id/qr-qris.png" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"country_code": "IN",
|
||||||
|
"country_name": "India",
|
||||||
|
"currency_code": "INR",
|
||||||
|
"methods": [
|
||||||
|
{ "pay_way": "Ewallet", "pay_type": "BHIM", "method_name": "BHIM", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/in/ewallet-bhim.png" },
|
||||||
|
{ "pay_way": "Ewallet", "pay_type": "GooglePay", "method_name": "Google Pay", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/in/ewallet-googlepay.png" },
|
||||||
|
{ "pay_way": "Ewallet", "pay_type": "Mobikwik", "method_name": "Mobikwik", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/in/ewallet-mobikwik.png" },
|
||||||
|
{ "pay_way": "Ewallet", "pay_type": "Paytm", "method_name": "Paytm", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/in/ewallet-paytm.png" },
|
||||||
|
{ "pay_way": "Ewallet", "pay_type": "PhonePe", "method_name": "PhonePe", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/in/ewallet-phonepe.png" },
|
||||||
|
{ "pay_way": "Ewallet", "pay_type": "UPI", "method_name": "UPI", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/in/ewallet-upi.png" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"country_code": "KW",
|
||||||
|
"country_name": "Kuwait",
|
||||||
|
"currency_code": "KWD",
|
||||||
|
"methods": [
|
||||||
|
{ "pay_way": "Card", "pay_type": "KENT", "method_name": "KENT", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/kw/card-kent.png" },
|
||||||
|
{ "pay_way": "Card", "pay_type": "Knet", "method_name": "KNET", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/kw/card-knet.png" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"country_code": "MY",
|
||||||
|
"country_name": "Malaysia",
|
||||||
|
"currency_code": "MYR",
|
||||||
|
"methods": [
|
||||||
|
{ "pay_way": "BankTransfer", "pay_type": "FPX", "method_name": "FPX", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/my/banktransfer-fpx.png" },
|
||||||
|
{ "pay_way": "Ewallet", "pay_type": "TNG", "method_name": "Touch n Go", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/my/ewallet-tng.png" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"country_code": "OM",
|
||||||
|
"country_name": "Oman",
|
||||||
|
"currency_code": "OMR",
|
||||||
|
"methods": [
|
||||||
|
{ "pay_way": "Card", "pay_type": "CreditCard", "method_name": "Oman Credit Card", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/om/card-creditcard.png" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"country_code": "PH",
|
||||||
|
"country_name": "Philippines",
|
||||||
|
"currency_code": "PHP",
|
||||||
|
"methods": [
|
||||||
|
{ "pay_way": "BankTransfer", "pay_type": "QRPH", "method_name": "QRPH Bank Transfer", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/ph/banktransfer-qrph.png" },
|
||||||
|
{ "pay_way": "Ewallet", "pay_type": "Gcash", "method_name": "GCash", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/ph/ewallet-gcash.png" },
|
||||||
|
{ "pay_way": "Ewallet", "pay_type": "PayMaya", "method_name": "PayMaya", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/ph/ewallet-paymaya.png" },
|
||||||
|
{ "pay_way": "QR", "pay_type": "QRPH", "method_name": "QRPH", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/ph/qr-qrph.png" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"country_code": "PK",
|
||||||
|
"country_name": "Pakistan",
|
||||||
|
"currency_code": "PKR",
|
||||||
|
"methods": [
|
||||||
|
{ "pay_way": "Ewallet", "pay_type": "Easypaisa", "method_name": "Easypaisa", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/pk/ewallet-easypaisa.png" },
|
||||||
|
{ "pay_way": "Ewallet", "pay_type": "JazzCash", "method_name": "JazzCash", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/pk/ewallet-jazzcash.png" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"country_code": "QA",
|
||||||
|
"country_name": "Qatar",
|
||||||
|
"currency_code": "QAR",
|
||||||
|
"methods": [
|
||||||
|
{ "pay_way": "Card", "pay_type": "CreditCard", "method_name": "Qatar Credit Card", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/qa/card-creditcard.png" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"country_code": "SA",
|
||||||
|
"country_name": "Saudi Arabia",
|
||||||
|
"currency_code": "SAR",
|
||||||
|
"methods": [
|
||||||
|
{ "pay_way": "Card", "pay_type": "MADA", "method_name": "MADA", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/sa/card-mada.png" },
|
||||||
|
{ "pay_way": "Ewallet", "pay_type": "ApplePay", "method_name": "Apple Pay", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/sa/ewallet-applepay.png" },
|
||||||
|
{ "pay_way": "Ewallet", "pay_type": "STCPay", "method_name": "STCPay", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/sa/ewallet-stcpay.png" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"country_code": "TH",
|
||||||
|
"country_name": "Thailand",
|
||||||
|
"currency_code": "THB",
|
||||||
|
"methods": [
|
||||||
|
{ "pay_way": "BankTransfer", "pay_type": "PromptPay", "method_name": "PromptPay", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/th/banktransfer-promptpay.png" },
|
||||||
|
{ "pay_way": "Ewallet", "pay_type": "TrueMoney", "method_name": "TrueMoney", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/th/ewallet-truemoney.png" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"country_code": "VN",
|
||||||
|
"country_name": "Vietnam",
|
||||||
|
"currency_code": "VND",
|
||||||
|
"methods": [
|
||||||
|
{ "pay_way": "BankTransfer", "pay_type": "VN_BankTransfer", "method_name": "Vietnam Bank Transfer", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/vn/banktransfer-vn-banktransfer.png" },
|
||||||
|
{ "pay_way": "QR", "pay_type": "VietQR", "method_name": "VietQR", "logo_url": "https://media.haiyihy.com/admin/payment/mifapay/logos/vn/qr-vietqr.png" }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1385,11 +1385,12 @@
|
|||||||
products.length > 0
|
products.length > 0
|
||||||
);
|
);
|
||||||
products.forEach(function (product) {
|
products.forEach(function (product) {
|
||||||
|
var currentProductID = productID(product);
|
||||||
var button = document.createElement('button');
|
var button = document.createElement('button');
|
||||||
button.type = 'button';
|
button.type = 'button';
|
||||||
button.className =
|
button.className =
|
||||||
'choice' +
|
'choice' +
|
||||||
(product.product_id === state.selectedProductID
|
(currentProductID === state.selectedProductID
|
||||||
? ' is-selected'
|
? ' is-selected'
|
||||||
: '');
|
: '');
|
||||||
button.innerHTML =
|
button.innerHTML =
|
||||||
@ -1401,7 +1402,7 @@
|
|||||||
escapeHTML(formatUSD(product)) +
|
escapeHTML(formatUSD(product)) +
|
||||||
'</span>';
|
'</span>';
|
||||||
button.addEventListener('click', function () {
|
button.addEventListener('click', function () {
|
||||||
state.selectedProductID = product.product_id;
|
state.selectedProductID = currentProductID;
|
||||||
// 档位、支付方式和订单必须是一组同源快照;切档位时清空旧支付方式和旧订单,防止旧金额被带入新订单。
|
// 档位、支付方式和订单必须是一组同源快照;切档位时清空旧支付方式和旧订单,防止旧金额被带入新订单。
|
||||||
state.selectedMethodKey = '';
|
state.selectedMethodKey = '';
|
||||||
state.order = null;
|
state.order = null;
|
||||||
@ -1641,7 +1642,7 @@
|
|||||||
window.HyAppAPI.recharge
|
window.HyAppAPI.recharge
|
||||||
.createOrder({
|
.createOrder({
|
||||||
display_user_id: targetDisplayUserID(),
|
display_user_id: targetDisplayUserID(),
|
||||||
product_id: product.product_id,
|
product_id: productID(product),
|
||||||
user_id: currentAccountUserID(),
|
user_id: currentAccountUserID(),
|
||||||
pay_country_id:
|
pay_country_id:
|
||||||
method.payCountryID ||
|
method.payCountryID ||
|
||||||
@ -1769,7 +1770,7 @@
|
|||||||
renderOrder();
|
renderOrder();
|
||||||
}
|
}
|
||||||
return window.HyAppAPI.recharge
|
return window.HyAppAPI.recharge
|
||||||
.getOrder(state.order.order_id, targetDisplayUserID())
|
.getOrder(state.order.order_id, orderStatusUserID())
|
||||||
.then(function (payload) {
|
.then(function (payload) {
|
||||||
state.order = payload.order || payload;
|
state.order = payload.order || payload;
|
||||||
renderOrder();
|
renderOrder();
|
||||||
@ -1811,7 +1812,7 @@
|
|||||||
window.HyAppAPI.recharge
|
window.HyAppAPI.recharge
|
||||||
.getOrder(
|
.getOrder(
|
||||||
pending.order_id,
|
pending.order_id,
|
||||||
targetDisplayUserID() || pending.display_user_id
|
orderStatusUserID() || pending.display_user_id
|
||||||
)
|
)
|
||||||
.then(function (payload) {
|
.then(function (payload) {
|
||||||
state.order = payload.order || payload;
|
state.order = payload.order || payload;
|
||||||
@ -2083,7 +2084,7 @@
|
|||||||
((state.options && state.options.products) || []).find(
|
((state.options && state.options.products) || []).find(
|
||||||
function (item) {
|
function (item) {
|
||||||
return (
|
return (
|
||||||
item.product_id === state.selectedProductID
|
productID(item) === state.selectedProductID
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
) || null
|
) || null
|
||||||
@ -2109,10 +2110,10 @@
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var hasSelectedProduct = products.some(function (product) {
|
var hasSelectedProduct = products.some(function (product) {
|
||||||
return product.product_id === state.selectedProductID;
|
return productID(product) === state.selectedProductID;
|
||||||
});
|
});
|
||||||
if (!hasSelectedProduct) {
|
if (!hasSelectedProduct) {
|
||||||
state.selectedProductID = products[0].product_id;
|
state.selectedProductID = productID(products[0]);
|
||||||
}
|
}
|
||||||
var methods = availableMethods();
|
var methods = availableMethods();
|
||||||
if (!methods.length) {
|
if (!methods.length) {
|
||||||
@ -2159,6 +2160,10 @@
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function orderStatusUserID() {
|
||||||
|
return currentAccountUserID() || targetDisplayUserID();
|
||||||
|
}
|
||||||
|
|
||||||
function isTerminalOrder(order) {
|
function isTerminalOrder(order) {
|
||||||
return (
|
return (
|
||||||
!!order &&
|
!!order &&
|
||||||
@ -2393,12 +2398,22 @@
|
|||||||
return [
|
return [
|
||||||
'h5',
|
'h5',
|
||||||
Date.now(),
|
Date.now(),
|
||||||
product.product_id,
|
productID(product),
|
||||||
method.key.replace(/[^a-zA-Z0-9_:-]/g, ''),
|
method.key.replace(/[^a-zA-Z0-9_:-]/g, ''),
|
||||||
randomCommandSuffix(),
|
randomCommandSuffix(),
|
||||||
].join(':');
|
].join(':');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function productID(product) {
|
||||||
|
product = product || {};
|
||||||
|
return String(
|
||||||
|
product.product_id ||
|
||||||
|
product.productId ||
|
||||||
|
product.id ||
|
||||||
|
''
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
function randomCommandSuffix() {
|
function randomCommandSuffix() {
|
||||||
if (
|
if (
|
||||||
window.crypto &&
|
window.crypto &&
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user