商铺端核销,调用相机报无效签名修复

This commit is contained in:
2026-07-07 17:55:12 +08:00
parent 5fef6ae2b1
commit 67eed11276
4 changed files with 54 additions and 5 deletions
+12 -2
View File
@@ -12,6 +12,7 @@ import {
sessionFromWechatLogin,
} from '../lib/wechat-auth';
import { isWechatEnv, weixinSdk } from '../lib/weixin';
import { stripOAuthParamsFromLocation } from '@dukang/weixin-sdk';
import WechatScanAuthModal from '../components/WechatScanAuthModal';
const PENDING_SCAN_KEY = 'shop_pending_scan';
@@ -20,6 +21,14 @@ function formatMoney(n: number) {
return n.toLocaleString('zh-CN', { minimumFractionDigits: 0, maximumFractionDigits: 2 });
}
function formatScanError(e: unknown): string {
const msg = e instanceof Error ? e.message : '扫码失败,请重试';
if (/invalid signature/i.test(msg)) {
return '微信 JSSDK 签名校验失败:请确认公众号已配置 JS 接口安全域名为 shop.runxian.top,并刷新页面后重试';
}
return msg;
}
export default function HomePage() {
const navigate = useNavigate();
const { applySession } = useStoreSession();
@@ -51,11 +60,12 @@ export default function HomePage() {
}
setAuthModalOpen(false);
setAuthError('');
stripOAuthParamsFromLocation();
setSearchParams({}, { replace: true });
const shouldScan = sessionStorage.getItem(PENDING_SCAN_KEY) === '1';
sessionStorage.removeItem(PENDING_SCAN_KEY);
if (shouldScan) {
void runScan();
window.setTimeout(() => void runScan(), 0);
}
})
.catch((e) => {
@@ -81,7 +91,7 @@ export default function HomePage() {
}
navigate(`/redeem?token=${encodeURIComponent(token)}`);
} catch (e) {
setScanMsg(e instanceof Error ? e.message : '扫码失败,请重试');
setScanMsg(formatScanError(e));
} finally {
setScanning(false);
}