收口微信支付订阅诊断日志

微信支付和订阅失败日志改为固定阶段标签

原生壳门禁拒绝支付订阅日志输出原生错误对象

同步宿主壳方案和共享决策记录
This commit is contained in:
2026-06-21 15:32:54 +08:00
parent 0b848d38bb
commit c84c77616c
7 changed files with 35 additions and 12 deletions
+18 -4
View File
@@ -2653,6 +2653,10 @@ function assertWechatPaymentResultBoundaries() {
for (const snippet of [
"function normalizePayError()",
"return 'wechat payment unavailable'",
'function logWechatPayFailure(label, _error)',
'console.error(`[wechat-pay] ${label}`)',
"logWechatPayFailure('parse params failed', error)",
"logWechatPayFailure('requestVirtualPayment failed', error)",
]) {
if (!paymentSource.includes(snippet)) {
throw new Error(`wechat payment bridge must include ${snippet}`);
@@ -2660,7 +2664,9 @@ function assertWechatPaymentResultBoundaries() {
}
if (
paymentSource.includes('JSON.stringify({\n errCode') ||
paymentSource.includes('String(error.errMsg || error)')
paymentSource.includes('String(error.errMsg || error)') ||
paymentSource.includes("console.error('[wechat-pay] parse params failed', error)") ||
paymentSource.includes("console.error('[wechat-pay] requestVirtualPayment failed', error)")
) {
throw new Error('wechat payment bridge must not expose native payment errors to H5');
}
@@ -2668,6 +2674,8 @@ function assertWechatPaymentResultBoundaries() {
'maps virtual payment cancel errCode to cancel result',
'hides ordinary payment native failure details from H5 result',
"errorMessage: 'wechat payment unavailable'",
"expect(console.error).toHaveBeenCalledWith(\n '[wechat-pay] requestVirtualPayment failed'",
'expect(console.error.mock.calls.flat()).not.toContain(payError)',
]) {
if (!paymentTestSource.includes(snippet)) {
throw new Error(`wechat payment bridge test must include ${snippet}`);
@@ -2687,20 +2695,26 @@ function assertWechatSubscribeResultBoundaries() {
for (const snippet of [
"WECHAT_SUBSCRIBE_UNAVAILABLE_REASON = 'wechat subscribe unavailable'",
"console.error('[subscribe-message] request failed', error)",
'function logWechatSubscribeFailure(label, _error)',
'console.error(`[subscribe-message] ${label}`)',
"logWechatSubscribeFailure('request failed', error)",
'WECHAT_SUBSCRIBE_UNAVAILABLE_REASON',
]) {
if (!subscribeSource.includes(snippet)) {
throw new Error(`wechat subscribe bridge must include ${snippet}`);
}
}
if (subscribeSource.includes("error && error.errMsg ? error.errMsg : 'failed'")) {
if (
subscribeSource.includes("error && error.errMsg ? error.errMsg : 'failed'") ||
subscribeSource.includes("console.error('[subscribe-message] request failed', error)")
) {
throw new Error('wechat subscribe bridge must not expose native subscribe errors to H5');
}
for (const snippet of [
'hides requestSubscribeMessage native failure details from H5 result',
'wechat%20subscribe%20unavailable',
"expect(console.error).toHaveBeenCalledWith(",
"expect(console.error).toHaveBeenCalledWith('[subscribe-message] request failed')",
'expect(console.error.mock.calls.flat()).not.toContain(subscribeError)',
]) {
if (!subscribeTestSource.includes(snippet)) {
throw new Error(`wechat subscribe bridge test must include ${snippet}`);