in packages-fetcher/console-fetcher-risk-prompt/src/util/handle-risk-prompt-dialog-submit/index.ts [27:143]
export default async function handleRiskPromptDialogSubmit({
contentContext,
setRiskCanceledErrorProps,
reRequestWithVerifyResult,
...dialogSubmitProps
}: THandleRiskPromptDialogSubmitProps): Promise<void> {
const {
data, updateData, lock, unlock, close
} = contentContext;
const {
dialogSubmitType
} = dialogSubmitProps;
const {
errorMessageObject,
oldMainOrMpkData,
currentSubVerificationDeviceType
} = data;
const isMpkDowngradeInOldMainRisk = oldMainOrMpkData?.isMpkDowngrade;
// 基于当前风控弹窗的账号类型以及风控验证类型,来更新错误信息
const updateErrorMessage = (errorMessage: string): void => {
const keyOfErrorMessageObject = ((): TKeyofErrorMessageObject => {
if (dialogSubmitType === ERiskType.NEW_SUB && currentSubVerificationDeviceType) {
return currentSubVerificationDeviceType;
}
return ESceneKey.MAIN_ACCOUNT;
})();
updateData({
errorMessageObject: {
...errorMessageObject,
[keyOfErrorMessageObject]: errorMessage
}
});
};
// 锁定 dialog
lock(true);
updateData({
dialogBlocked: true
});
updateErrorMessage('');
const riskPromptVerifyResult = await getRiskPromptVerifyResult({
dialogData: data,
dialogSubmitProps,
updateErrorMessage,
setRiskCanceledErrorProps
});
if (riskPromptVerifyResult) {
const slsRiskLoggerCommonPayload = {
dialogSubmitProps,
isMpkDowngradeInOldMainRisk,
currentSubVerificationDeviceType
};
if (!reRequestWithVerifyResult) {
slsRiskLogger({
...slsRiskLoggerCommonPayload,
slsResultType: ESlsResultType.RISK_PROMPT_RESOLVE
});
// 如果 riskPrompt 的参数不带 reRequestWithVerifyResult,那么 close 函数的参数只有 riskPromptVerifyResult
close(riskPromptVerifyResult);
return;
}
// 如果 riskPrompt 的参数中,有重新请求被风控接口的函数 reRequestWithVerifyResult
try {
const reRequestResponse = await reRequestWithVerifyResult(riskPromptVerifyResult);
slsRiskLogger({
...slsRiskLoggerCommonPayload,
slsResultType: ESlsResultType.SUCCESS
});
// 如果有 reRequestWithVerifyResult,那么弹窗 close 时对外输出的数据中会包含重新请求被风控接口的响应 reRequestResponse
close({
...riskPromptVerifyResult,
reRequestResponse
});
} catch (error) {
const {
code
} = error as FetcherError;
const riskSlsErrorCommonPayload = getRiskSlsErrorCommonPayload(error as FetcherError);
slsRiskLogger({
...slsRiskLoggerCommonPayload,
...riskSlsErrorCommonPayload
});
// 如果报错是风控验证错误,那么提示用户验证码错误,且不关闭风控弹窗
if (code && CODE_RISK_ERROR_ARRAY.includes(code)) {
updateErrorMessage(intl('message:code_incorrect'));
} else {
// 如果重新请求后触发了正常的报错,那么抛出 error,并关闭弹窗
close(error as Error, true);
throw error;
}
} finally {
updateData({
dialogBlocked: false
});
unlock();
}
} else {
updateData({
dialogBlocked: false
});
unlock();
}
}