新增sms的mock

This commit is contained in:
2026-10-13 23:30:41 +08:00
parent f8732d3848
commit 5135207bf8
4 changed files with 71 additions and 4 deletions
+6 -4
View File
@@ -1,19 +1,21 @@
// Message Gateway 内容发送接口 Mock:POST /ewl/msgw/v1/messages/content/send // Message Gateway 内容发送接口 Mock:POST /ewl/msgw/v1/messages/content/send
// 后端短信已从旧 SMS Hub(/SMSToken + /SMSRequest/Post)切换到该接口,认证复用 EDIP Token。 // 后端短信已从旧 SMS Hub(/SMSToken + /SMSRequest/Post)切换到该接口,认证复用 EDIP Token。
// 响应严格按真实网关信封:HTTP 200 + status/errorCode,成功时 smsid 为全小写字段、errorCode 为空字符串。 // 响应严格按真实网关信封:HTTP 200 + status/errorCode,成功时 smsid 为全小写字段、errorCode 为空字符串。
const { getForcedErrorCode, getForcedErrorMsg } = require('./smsErrorState')
function registerMessageGatewayContentSendRoute({ app }) { function registerMessageGatewayContentSendRoute({ app }) {
app.post('/ewl/msgw/v1/messages/content/send', (req, res) => { app.post('/ewl/msgw/v1/messages/content/send', (req, res) => {
const data = req.body?.data || {} const data = req.body?.data || {}
const recipients = Array.isArray(data.recipients) ? data.recipients : [] const recipients = Array.isArray(data.recipients) ? data.recipients : []
// 错误注入:MOCK_SMS_FORCE_ERROR_CODE=8923 模拟供应商暂不可用(后端应重试), // 错误注入:优先取运行时开关(/mock-api/sms/content-send-error),回落环境变量。
// MOCK_SMS_FORCE_ERROR_CODE=8907 模拟号码非法(后端不应重试) // 8923 属供应商暂不可用(后端应重试),8907 属号码非法(后端不应重试)
const forcedErrorCode = process.env.MOCK_SMS_FORCE_ERROR_CODE || '' const forcedErrorCode = getForcedErrorCode()
if (forcedErrorCode) { if (forcedErrorCode) {
return res.status(200).json({ return res.status(200).json({
status: false, status: false,
errorCode: forcedErrorCode, errorCode: forcedErrorCode,
message: process.env.MOCK_SMS_FORCE_ERROR_MSG || 'Mock message gateway error', message: getForcedErrorMsg(),
data: null, data: null,
}) })
} }
+25
View File
@@ -0,0 +1,25 @@
// Message Gateway 内容发送 Mock 的运行时错误码开关。
// 目的:联调时可在进程内切换 errorCode(如 8923 可重试、8907 不可重试),不必反复重启 Mock 进程。
// 初值取环境变量 MOCK_SMS_FORCE_ERROR_CODE,之后由 /mock-api/sms/content-send-error 覆盖。
const state = {
forcedErrorCode: (process.env.MOCK_SMS_FORCE_ERROR_CODE || '').trim(),
forcedErrorMsg: process.env.MOCK_SMS_FORCE_ERROR_MSG || 'Mock message gateway error',
}
function setForcedErrorCode(errorCode, errorMsg) {
state.forcedErrorCode = errorCode == null ? '' : String(errorCode).trim()
if (errorMsg != null && String(errorMsg).trim() !== '') {
state.forcedErrorMsg = String(errorMsg).trim()
}
return { errorCode: state.forcedErrorCode, errorMsg: state.forcedErrorMsg }
}
function getForcedErrorCode() {
return state.forcedErrorCode
}
function getForcedErrorMsg() {
return state.forcedErrorMsg
}
module.exports = { setForcedErrorCode, getForcedErrorCode, getForcedErrorMsg }
@@ -0,0 +1,38 @@
// Message Gateway 内容发送 Mock 的错误码开关节点(仅联调用)。
// 用途:进程内切换 errorCode,验后端重试语义(8911-8930 应重试,8901-8910 不应重试),避免反复重启 Mock。
const { setForcedErrorCode, getForcedErrorCode, getForcedErrorMsg } = require('../ewl/msgw/smsErrorState')
function registerSmsContentSendErrorOverrideRoute({ app }) {
const route = '/mock-api/sms/content-send-error'
app.get(route, (req, res) =>
res.status(200).json({
success: true,
message: 'SMS content send error override retrieved successfully.',
data: { errorCode: getForcedErrorCode(), errorMsg: getForcedErrorMsg() },
}),
)
app.post(route, (req, res) => {
const body = req.body && typeof req.body === 'object' ? req.body : {}
const override = setForcedErrorCode(body.errorCode ?? '', body.errorMsg)
return res.status(200).json({
success: true,
message: 'SMS content send error override saved successfully.',
data: override,
})
})
app.delete(route, (req, res) => {
const cleared = setForcedErrorCode('', null)
return res.status(200).json({
success: true,
message: 'SMS content send error override cleared successfully.',
data: cleared,
})
})
}
module.exports = registerSmsContentSendErrorOverrideRoute
+2
View File
@@ -22,6 +22,7 @@ const registerPrizeRedemptionsSyncRoute = require('./api/v1/prizeRedemptionsSync
const registerPromotionRedeemFulfillmentOverridesRoute = require('./mockApi/promotionRedeemFulfillmentOverrides') const registerPromotionRedeemFulfillmentOverridesRoute = require('./mockApi/promotionRedeemFulfillmentOverrides')
const registerSmsPortalRoutes = require('./sms/smsPortal') const registerSmsPortalRoutes = require('./sms/smsPortal')
const registerMessageGatewayContentSendRoute = require('./ewl/msgw/contentSend') const registerMessageGatewayContentSendRoute = require('./ewl/msgw/contentSend')
const registerSmsContentSendErrorOverrideRoute = require('./mockApi/smsContentSendErrorOverride')
function registerRoutes({ app, context, ldapService }) { function registerRoutes({ app, context, ldapService }) {
registerHealthzRoute({ app, ldapService }) registerHealthzRoute({ app, ldapService })
@@ -48,6 +49,7 @@ function registerRoutes({ app, context, ldapService }) {
registerPromotionRedeemFulfillmentOverridesRoute({ app, context }) registerPromotionRedeemFulfillmentOverridesRoute({ app, context })
registerSmsPortalRoutes({ app }) registerSmsPortalRoutes({ app })
registerMessageGatewayContentSendRoute({ app }) registerMessageGatewayContentSendRoute({ app })
registerSmsContentSendErrorOverrideRoute({ app })
} }
module.exports = { registerRoutes } module.exports = { registerRoutes }