aslan的支付

This commit is contained in:
zhx 2026-06-23 20:38:26 +08:00
parent c8a91664fe
commit 599b66299b
4 changed files with 486 additions and 5 deletions

View File

@ -17,6 +17,7 @@ var default_api = 'https://api.global-interaction.com/';
var memoryEnv = ''; var memoryEnv = '';
var memoryAccessToken = ''; var memoryAccessToken = '';
var memoryAppCode = ''; var memoryAppCode = '';
var activeAppConfig = null;
function currentQueryParams() { function currentQueryParams() {
var params = new URLSearchParams(window.location.search); var params = new URLSearchParams(window.location.search);
@ -114,6 +115,8 @@ var default_api = 'https://api.global-interaction.com/';
function resolveBaseURL() { function resolveBaseURL() {
var env = resolveEnv(); var env = resolveEnv();
var configuredAPI = activeAppAPIBaseURL(env);
if (configuredAPI) return configuredAPI;
if (env === 'test') if (env === 'test')
return isLocalDevOrigin() return isLocalDevOrigin()
? devProxyBase('/__api_test__/') ? devProxyBase('/__api_test__/')
@ -122,6 +125,14 @@ var default_api = 'https://api.global-interaction.com/';
return normalizeBaseURL(default_api); return normalizeBaseURL(default_api);
} }
function activeAppAPIBaseURL(env) {
var api = activeAppConfig && activeAppConfig.api;
if (!api) return '';
if (env === 'local' && api.local) return normalizeBaseURL(api.local);
if (env === 'test' && api.test) return normalizeBaseURL(api.test);
return api.prod || api.default ? normalizeBaseURL(api.prod || api.default) : '';
}
function buildURL(path, query) { function buildURL(path, query) {
var url = new URL(path.replace(/^\/+/, ''), resolveBaseURL()); var url = new URL(path.replace(/^\/+/, ''), resolveBaseURL());
if (query) { if (query) {
@ -181,7 +192,7 @@ var default_api = 'https://api.global-interaction.com/';
} }
function getAppCode() { function getAppCode() {
var queryAppCode = readQuery('app_code') || readQuery('appCode'); var queryAppCode = readQuery('app') || readQuery('app_code') || readQuery('appCode');
if (queryAppCode) { if (queryAppCode) {
memoryAppCode = queryAppCode; memoryAppCode = queryAppCode;
if (shouldPersist()) if (shouldPersist())
@ -215,6 +226,43 @@ var default_api = 'https://api.global-interaction.com/';
if (shouldPersist()) window.localStorage.removeItem(APP_CODE_KEY); if (shouldPersist()) window.localStorage.removeItem(APP_CODE_KEY);
} }
function setAppConfig(config) {
activeAppConfig = config || null;
if (activeAppConfig && activeAppConfig.app) {
setAppCode(activeAppConfig.app);
}
return activeAppConfig;
}
function getAppConfig() {
return activeAppConfig;
}
function loadAppConfig(scope) {
var appCode = String(getAppCode() || 'lalu').trim().toLowerCase();
if (!appCode || appCode === 'lalu') {
activeAppConfig = null;
return Promise.resolve(null);
}
var scopePath = String(scope || '').replace(/^\/+|\/+$/g, '');
var configPath =
(scopePath ? '/' + scopePath : '.') + '/config/' + appCode + '.json';
var configURL = new URL(configPath, window.location.origin + window.location.pathname);
return window
.fetch(configURL.toString(), { cache: shouldPersist() ? 'default' : 'no-store' })
.then(function (response) {
if (!response.ok) return null;
return response.json();
})
.then(function (config) {
return setAppConfig(config);
})
.catch(function () {
activeAppConfig = null;
return null;
});
}
function errorMessageForResponse(response, payload) { function errorMessageForResponse(response, payload) {
if (response.status === 409) return 'Duplicate request.'; if (response.status === 409) return 'Duplicate request.';
return payload.message || response.statusText || 'request_failed'; return payload.message || response.statusText || 'request_failed';
@ -276,7 +324,11 @@ var default_api = 'https://api.global-interaction.com/';
function request(path, options) { function request(path, options) {
var opts = options || {}; var opts = options || {};
var headers = Object.assign({}, opts.headers || {}); var headers = Object.assign(
{},
(activeAppConfig && activeAppConfig.headers) || {},
opts.headers || {}
);
var token = getAccessToken(); var token = getAccessToken();
var appCode = getAppCode(); var appCode = getAppCode();
var url = buildURL(path, opts.query); var url = buildURL(path, opts.query);
@ -378,20 +430,139 @@ var default_api = 'https://api.global-interaction.com/';
// H5 充值 API 只做路径和参数名封装token、app_code、env、错误 envelope 仍由 request 统一处理。 // H5 充值 API 只做路径和参数名封装token、app_code、env、错误 envelope 仍由 request 统一处理。
// 金额、金币数、普通/币商钱包、MiFaPay 参数和 USDT 链上校验都以后端订单快照为准。 // 金额、金币数、普通/币商钱包、MiFaPay 参数和 USDT 链上校验都以后端订单快照为准。
function isAslanWebPay() {
return activeAppConfig && activeAppConfig.adapter === 'aslan-web-pay';
}
function appEndpoint(name, fallback) {
return (
(activeAppConfig &&
activeAppConfig.endpoints &&
activeAppConfig.endpoints[name]) ||
fallback
);
}
function aslanUserQuery(displayUserID) {
var value = String(displayUserID || '').trim();
var query = {
applicationId: activeAppConfig.application_id,
type: activeAppConfig.type || 'GOLD',
sysOrigin: activeAppConfig.sys_origin || 'ATYOU',
};
if (/^\d+$/.test(value)) {
query.userId = value;
} else if (value) {
query.account = value;
}
return query;
}
function aslanPaymentMethods(options) {
var providers = (activeAppConfig && activeAppConfig.providers) || {};
var mifapay = providers.mifapay || {};
var countries = mifapay.countries || [];
var countryCode = String(
options.country_code || options.countryCode || ''
).toUpperCase();
var candidates = countries.filter(function (country) {
return (
String(country.country_code || '').toUpperCase() === countryCode ||
String(country.country_code || '').toUpperCase() === 'GLOBAL'
);
});
var methods = [];
candidates.forEach(function (country) {
(country.methods || []).forEach(function (method, index) {
methods.push(
Object.assign({}, method, {
method_id: [
mifapay.provider_code || 'mifapay',
country.country_code,
method.pay_way,
method.pay_type,
index,
].join(':'),
provider_code: mifapay.provider_code || 'mifapay',
provider_name: mifapay.provider_name || 'MiFaPay',
country_code: country.country_code,
country_name: country.country_name,
currency_code:
country.country_code === 'GLOBAL'
? options.currency_code || country.currency_code
: country.currency_code,
usd_to_currency_rate:
options.usd_to_currency_rate ||
options.usdToCurrencyRate ||
0,
pay_country_id:
options.pay_country_id ||
options.payCountryId ||
'',
status: mifapay.status || 'active',
})
);
});
});
return methods;
}
var rechargeAPI = { var rechargeAPI = {
context: function (displayUserID) { context: function (displayUserID) {
if (isAslanWebPay()) {
return request(appEndpoint('context', '/order/web/pay/h5/context'), {
method: 'GET',
query: aslanUserQuery(displayUserID),
});
}
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) { options: function (displayUserID, extra) {
if (isAslanWebPay()) {
var query = Object.assign(aslanUserQuery(displayUserID), {
payCountryId:
extra && (extra.pay_country_id || extra.payCountryId),
regionId: extra && (extra.region_id || extra.regionId),
userId: extra && (extra.user_id || extra.userId),
});
return request(appEndpoint('options', '/order/web/pay/h5/options'), {
method: 'GET',
query: query,
}).then(function (options) {
options = options || {};
options.payment_methods = aslanPaymentMethods(options);
options.usdt_trc20_enabled = false;
return options;
});
}
return request('/api/v1/recharge/h5/options', { return request('/api/v1/recharge/h5/options', {
method: 'GET', method: 'GET',
query: { display_user_id: displayUserID || '' }, query: { display_user_id: displayUserID || '' },
}); });
}, },
createOrder: function (payload) { createOrder: function (payload) {
if (isAslanWebPay()) {
return request(appEndpoint('orders', '/order/web/pay/h5/orders'), {
method: 'POST',
body: {
applicationId: activeAppConfig.application_id,
goodsId: payload && payload.product_id,
payCountryId: payload && payload.pay_country_id,
userId: payload && payload.user_id,
providerCode: payload && payload.provider_code,
payWay: payload && payload.pay_way,
payType: payload && payload.pay_type,
channelCode: payload && payload.channel_code,
returnUrl: payload && payload.return_url,
commandId: payload && payload.command_id,
type: (activeAppConfig && activeAppConfig.type) || 'GOLD',
language: readLanguageQuery() || 'en',
},
});
}
return request('/api/v1/recharge/h5/orders', { return request('/api/v1/recharge/h5/orders', {
method: 'POST', method: 'POST',
query: { language: readLanguageQuery() }, query: { language: readLanguageQuery() },
@ -410,6 +581,15 @@ var default_api = 'https://api.global-interaction.com/';
); );
}, },
getOrder: function (orderID, displayUserID) { getOrder: function (orderID, displayUserID) {
if (isAslanWebPay()) {
return request(
appEndpoint('order', '/order/web/pay/h5/orders/{orderId}').replace(
'{orderId}',
encodeURIComponent(orderID || '')
),
{ method: 'GET' }
);
}
return request( return request(
'/api/v1/recharge/h5/orders/' + '/api/v1/recharge/h5/orders/' +
encodeURIComponent(orderID || ''), encodeURIComponent(orderID || ''),
@ -976,6 +1156,9 @@ var default_api = 'https://api.global-interaction.com/';
getAppCode: getAppCode, getAppCode: getAppCode,
setAccessToken: setAccessToken, setAccessToken: setAccessToken,
setAppCode: setAppCode, setAppCode: setAppCode,
setAppConfig: setAppConfig,
getAppConfig: getAppConfig,
loadAppConfig: loadAppConfig,
request: request, request: request,
get: function (path, query) { get: function (path, query) {
return request(path, { method: 'GET', query: query }); return request(path, { method: 'GET', query: query });

View File

@ -1,6 +1,6 @@
(function () { (function () {
var TOKEN_KEYS = ['token', 'access_token', 'accessToken']; var TOKEN_KEYS = ['token', 'access_token', 'accessToken'];
var APP_CODE_KEYS = ['app_code', 'appCode']; var APP_CODE_KEYS = ['app', 'app_code', 'appCode'];
var USER_READY_EVENT = 'hyapp:user-ready'; var USER_READY_EVENT = 'hyapp:user-ready';
var USER_ERROR_EVENT = 'hyapp:user-error'; var USER_ERROR_EVENT = 'hyapp:user-error';

193
recharge/config/aslan.json Normal file
View File

@ -0,0 +1,193 @@
{
"app": "aslan",
"adapter": "aslan-web-pay",
"application_id": "1963531459019739137",
"sys_origin": "ATYOU",
"type": "GOLD",
"api": {
"prod": "https://api.atuchat.com/",
"test": "https://api.atuchat.com/",
"local": "http://127.0.0.1:1100/"
},
"headers": {
"req-sys-origin": "origin=ATYOU;originChild=ATYOU",
"Req-Atyou": "true"
},
"endpoints": {
"context": "/order/web/pay/h5/context",
"options": "/order/web/pay/h5/options",
"orders": "/order/web/pay/h5/orders",
"order": "/order/web/pay/h5/orders/{orderId}"
},
"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" }
]
}
]
}
}
}

View File

@ -1064,6 +1064,10 @@
var state = { var state = {
context: null, context: null,
options: null, options: null,
appConfig: null,
selectedPayCountryID: '',
selectedCountryCode: '',
selectedCurrencyCode: '',
selectedProductID: 0, selectedProductID: 0,
selectedMethodKey: '', selectedMethodKey: '',
order: null, order: null,
@ -1149,6 +1153,25 @@
(pendingOrder && pendingOrder.display_user_id) || (pendingOrder && pendingOrder.display_user_id) ||
''; '';
nodes.displayUserID.value = displayUserID; nodes.displayUserID.value = displayUserID;
var configReady =
window.HyAppAPI && window.HyAppAPI.loadAppConfig
? window.HyAppAPI.loadAppConfig('recharge')
: Promise.resolve(null);
configReady
.then(function (config) {
state.appConfig =
config ||
(window.HyAppAPI &&
window.HyAppAPI.getAppConfig
? window.HyAppAPI.getAppConfig()
: null);
})
.finally(function () {
continueInit(current, displayUserID);
});
}
function continueInit(current, displayUserID) {
if (current.token) { if (current.token) {
// token 模式必须隐藏账号输入,目标用户只能由服务端鉴权结果决定,不能让前端改充值对象。 // token 模式必须隐藏账号输入,目标用户只能由服务端鉴权结果决定,不能让前端改充值对象。
nodes.accountSearch.classList.add('hidden'); nodes.accountSearch.classList.add('hidden');
@ -1216,10 +1239,18 @@
.then(function (context) { .then(function (context) {
// context 只返回安全账号信息和 audience_type前端不读取手机号、邮箱、余额等敏感字段。 // context 只返回安全账号信息和 audience_type前端不读取手机号、邮箱、余额等敏感字段。
state.context = context; state.context = context;
selectPayCountryFromContext(context);
return window.HyAppAPI.recharge.options( return window.HyAppAPI.recharge.options(
context.auth_mode === 'token' context.auth_mode === 'token'
? '' ? ''
: context.account.display_user_id : context.account.display_user_id,
{
pay_country_id: state.selectedPayCountryID,
country_code: state.selectedCountryCode,
region_id:
context.region_id || context.regionId,
user_id: currentAccountUserID(),
}
); );
}) })
.then(function (options) { .then(function (options) {
@ -1308,6 +1339,9 @@
var previousID = currentAccountDisplayUserID(); var previousID = currentAccountDisplayUserID();
state.context = null; state.context = null;
state.options = null; state.options = null;
state.selectedPayCountryID = '';
state.selectedCountryCode = '';
state.selectedCurrencyCode = '';
state.selectedProductID = 0; state.selectedProductID = 0;
state.selectedMethodKey = ''; state.selectedMethodKey = '';
state.order = null; state.order = null;
@ -1550,6 +1584,22 @@
providerCode: providerCode:
method.provider_code || 'mifapay', method.provider_code || 'mifapay',
methodID: method.method_id, methodID: method.method_id,
payCountryID:
method.pay_country_id ||
state.selectedPayCountryID,
countryCode:
method.country_code ||
state.selectedCountryCode,
currencyCode:
method.currency_code ||
state.selectedCurrencyCode,
payWay: method.pay_way,
payType: method.pay_type,
channelCode:
method.channel_code ||
[method.pay_way, method.pay_type]
.filter(Boolean)
.join('_'),
}); });
}); });
return methods; return methods;
@ -1582,8 +1632,21 @@
.createOrder({ .createOrder({
display_user_id: targetDisplayUserID(), display_user_id: targetDisplayUserID(),
product_id: product.product_id, product_id: product.product_id,
user_id: currentAccountUserID(),
pay_country_id:
method.payCountryID ||
state.selectedPayCountryID,
provider_code: method.providerCode, provider_code: method.providerCode,
payment_method_id: method.methodID || 0, payment_method_id: method.methodID || 0,
pay_way: method.payWay || '',
pay_type: method.payType || '',
channel_code: method.channelCode || '',
country_code:
method.countryCode ||
state.selectedCountryCode,
currency_code:
method.currencyCode ||
state.selectedCurrencyCode,
command_id: commandID(product, method), command_id: commandID(product, method),
return_url: externalPayReturnURL(), return_url: externalPayReturnURL(),
}) })
@ -2076,6 +2139,16 @@
: ''; : '';
} }
function currentAccountUserID() {
if (!state.context || !state.context.account) return '';
return (
state.context.account.user_id ||
state.context.account.userId ||
state.context.account.id ||
''
);
}
function isTerminalOrder(order) { function isTerminalOrder(order) {
return ( return (
!!order && !!order &&
@ -2111,6 +2184,10 @@
); );
} }
if (window.HyAppAPI && window.HyAppAPI.getAppCode) { if (window.HyAppAPI && window.HyAppAPI.getAppCode) {
url.searchParams.set(
'app',
window.HyAppAPI.getAppCode()
);
url.searchParams.set( url.searchParams.set(
'app_code', 'app_code',
window.HyAppAPI.getAppCode() window.HyAppAPI.getAppCode()
@ -2167,6 +2244,34 @@
return params; return params;
} }
function selectPayCountryFromContext(context) {
var countries =
(context && (context.country_list || context.countryList)) ||
[];
var selected = countries[0] || {};
state.selectedPayCountryID =
selected.pay_country_id ||
selected.payCountryId ||
selected.id ||
'';
state.selectedCountryCode = String(
selected.country_code ||
selected.countryCode ||
firstValue(selected.country || {}, [
'alphaTwo',
'alpha_two',
'countryCode',
'country_code',
]) ||
''
).toUpperCase();
state.selectedCurrencyCode =
selected.currency_code ||
selected.currencyCode ||
state.selectedCurrencyCode ||
'';
}
// command_id 给服务端幂等使用,包含时间、商品、方式和随机后缀;真实订单号仍由后端生成。 // command_id 给服务端幂等使用,包含时间、商品、方式和随机后缀;真实订单号仍由后端生成。
// 三方拒单会把本地订单置失败,后续重用同一 command_id 只会回放旧失败结果,所以每次点击都必须生成新命令。 // 三方拒单会把本地订单置失败,后续重用同一 command_id 只会回放旧失败结果,所以每次点击都必须生成新命令。
function commandID(product, method) { function commandID(product, method) {