feat(pay): 统一收银台四种模式(站内二维码/当前页跳转/表单提交/JSAPI)

- PaymentOrchestrator 统一返回 mode + code_url/payment_url/form_html/jsapi_params
- 支付宝:当面付二维码 / 电脑网站支付 / H5;微信:Native / H5 / JSAPI(WechatOpenid 静默授权)
- 易支付:PC mapi 二维码,移动端自动提交表单
- 删除旧键 alipay_payment_type / wechat_payment_type / epay_device 与 redirect/qr_content 字段
- 新增 pay-cashier.js,移除 window.open,订单状态接口改为 /pay/order/{n}
- 拆分 credits.js(affiliate / withdraw-history)至 1000 行以内

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
kate522andClaude Fable 5 committed 2026-10-29 14:01:28 +08:00
1 parent b340b77d5a
commit 1df2822f01
28 files changed
+1255 -836

No files matched your search

+14 -13
View File
@@ -281,7 +281,7 @@
const maxTries = 40;
const timer = setInterval(function () {
tries += 1;
fetch(REST_BASE + '/pay/content/order/' + encodeURIComponent(orderNumber), {
fetch(REST_BASE + '/pay/order/' + encodeURIComponent(orderNumber), {
method: 'GET',
credentials: 'same-origin',
headers: restHeaders(),
@@ -673,13 +673,17 @@
}
const data = (r.json && r.json.data) ? r.json.data : r.json;
delete button.dataset.aksrtOperationKey;
if (data && data.redirect && (data.payment_url || data.qr_content)) {
if (data.payment_url) {
window.open(data.payment_url, '_blank');
}
renderScanPay(data, returnFocusEl);
if (data && data.mode) {
if (window.AksrtModalRuntime) window.AksrtModalRuntime.invalidate(['orders']);
if (data.order_number) pollOrderPaid(data.order_number, returnFocusEl);
if (data.mode === 'qrcode') {
renderScanPay(data, returnFocusEl);
} else if (window.AksrtPayCashier) {
close();
window.AksrtPayCashier.handle(data, {});
}
if ((data.mode === 'qrcode' || data.mode === 'jsapi') && data.order_number) {
pollOrderPaid(data.order_number, returnFocusEl);
}
return;
}
window.location.reload();
@@ -693,12 +697,9 @@
function renderScanPay(data, returnFocusEl) {
data = data || {};
let body = '';
if (data.qr_content) {
body += '<div class="aksrt-dl-modal__code-card"><div class="aksrt-dl-modal__code-caption">凭证内容</div>' +
'<code class="aksrt-dl-modal__code aksrt-dl-modal__code--wrap">' + escapeHtml(String(data.qr_content)) + '</code></div>';
}
body += '<p class="aksrt-dl-modal__msg">' + escapeHtml(data.message || '请使用手机扫码完成支付,支付后刷新页面。') + '</p>';
const body = window.AksrtPayCashier
? window.AksrtPayCashier.qrHtml(data)
: '<p class="aksrt-dl-modal__msg">' + escapeHtml('收银台组件未加载,请刷新页面重试。') + '</p>';
open(
dlView('pay', {
subtitle: '支付完成后页面会自动刷新',