From 2cef37616ddedb67c6af0975de3c9406433a7504 Mon Sep 17 00:00:00 2001 From: "3075067877@qq.com" <3075067877@qq.com> Date: Wed, 10 Sep 2025 18:50:10 +0800 Subject: [PATCH] handle 502 for check order --- .../network/OrderVerificationResultHandler.java | 26 +++- .../ouxuan/oxface/network/utils/NetworkUtils.java | 4 + 人脸验证502错误处理修复说明.md | 134 +++++++++++++++++++++ 3 files changed, 162 insertions(+), 2 deletions(-) create mode 100644 人脸验证502错误处理修复说明.md diff --git a/app/src/main/java/com/ouxuan/oxface/network/OrderVerificationResultHandler.java b/app/src/main/java/com/ouxuan/oxface/network/OrderVerificationResultHandler.java index 98d51e7..0e48b66 100644 --- a/app/src/main/java/com/ouxuan/oxface/network/OrderVerificationResultHandler.java +++ b/app/src/main/java/com/ouxuan/oxface/network/OrderVerificationResultHandler.java @@ -101,8 +101,8 @@ public class OrderVerificationResultHandler { public void handleVerificationError(int errorCode, String errorMessage, int verificationType) { LogManager.logError(TAG, "处理验证失败结果,类型: " + verificationType + ", 错误码: " + errorCode + ", 错误信息: " + errorMessage); - // 当人脸验证返回303错误码时,不显示任何提示,但需要恢复摄像头预览 - if (verificationType == OrderVerificationManager.TYPE_FACE_VERIFICATION && errorCode == 303 ||errorCode == 504) { + // 当人脸验证返回303/504错误码时,不显示任何提示,但需要恢复摄像头预览 + if (verificationType == OrderVerificationManager.TYPE_FACE_VERIFICATION && (errorCode == 303 || errorCode == 504)) { LogManager.logInfo(TAG, "人脸验证返回303/504,不显示提示,但需要恢复摄像头预览"); // 发送广播通知OXFaceOnlineActivity恢复摄像头预览 @@ -117,6 +117,28 @@ public class OrderVerificationResultHandler { return; } + // 当人脸验证返回502错误时,显示Toast并恢复摄像头预览 + if (verificationType == OrderVerificationManager.TYPE_FACE_VERIFICATION && errorCode == 502) { + LogManager.logInfo(TAG, "人脸验证返回502,显示Toast并恢复摄像头预览"); + + // 显示友好的错误提示 + String displayMessage = getDisplayErrorMessage(errorCode, errorMessage); + if (listener != null) { + listener.showToast(displayMessage != null && !displayMessage.isEmpty() ? displayMessage : "服务器暂时不可用,请稍后再试"); + } + + // 发送广播通知OXFaceOnlineActivity恢复摄像头预览 + try { + Intent intent = new Intent("com.ouxuan.oxface.ACTION_RESUME_CAMERA"); + context.sendBroadcast(intent); + LogManager.logInfo(TAG, "已发送恢复摄像头预览广播"); + } catch (Exception e) { + LogManager.logError(TAG, "发送恢复摄像头预览广播失败", e); + } + + return; + } + String displayMessage = getDisplayErrorMessage(errorCode, errorMessage); if (verificationType == OrderVerificationManager.TYPE_SCANNER_VERIFICATION) { diff --git a/app/src/main/java/com/ouxuan/oxface/network/utils/NetworkUtils.java b/app/src/main/java/com/ouxuan/oxface/network/utils/NetworkUtils.java index 2d69113..b911d5a 100644 --- a/app/src/main/java/com/ouxuan/oxface/network/utils/NetworkUtils.java +++ b/app/src/main/java/com/ouxuan/oxface/network/utils/NetworkUtils.java @@ -611,6 +611,10 @@ public class NetworkUtils { } else { // 处理HTTP错误状态码,如404、500等 String errorMessage = getHttpErrorMessage(response.code()); + if (response.code() == 502) { + // 对于502错误,提供更具体的说明 + errorMessage = "服务器暂时不可用,请稍后再试"; + } android.util.Log.e("NetworkUtils", "HTTP Error: " + response.code() + " - " + errorMessage); callback.onError(response.code(), errorMessage); } diff --git a/人脸验证502错误处理修复说明.md b/人脸验证502错误处理修复说明.md new file mode 100644 index 0000000..dc3e927 --- /dev/null +++ b/人脸验证502错误处理修复说明.md @@ -0,0 +1,134 @@ +# 人脸验证502错误处理修复 + +## 问题描述 +在进行人脸验证时,`checkOrder` 接口返回502错误,导致: +1. 系统仍会重试请求(虽然已修复 `verifyOrder` 接口,但 `checkOrder` 接口未修复) +2. 人脸识别摄像头预览被暂停,且502错误时未恢复摄像头 +3. 用户无法看到友好的错误提示 + +## 日志分析 +``` +2025-09-10 18:22:24.067 NetworkStabilityManager: 服务器错误 502,准备重试 2 +``` + +这表明 `checkOrder` 接口的502错误仍然进入了重试逻辑。 + +## 修复方案 + +### 1. NetworkUtils.checkOrder 502错误处理优化 + +**文件**: `c:\Users\mate1\Desktop\CODE\Android\oxFaceAndroid\app\src\main\java\com\ouxuan\oxface\network\utils\NetworkUtils.java` + +**问题**: `checkOrder` 接口缺少针对502错误的友好提示,只使用通用的HTTP错误信息。 + +**修复**: 在 `checkOrder` 方法的错误处理中添加502错误的特殊处理: + +```java +// 修复前 +} else { + // 处理HTTP错误状态码,如404、500等 + String errorMessage = getHttpErrorMessage(response.code()); + android.util.Log.e("NetworkUtils", "HTTP Error: " + response.code() + " - " + errorMessage); + callback.onError(response.code(), errorMessage); +} + +// 修复后 +} else { + // 处理HTTP错误状态码,如404、500等 + String errorMessage = getHttpErrorMessage(response.code()); + if (response.code() == 502) { + // 对于502错误,提供更具体的说明 + errorMessage = "服务器暂时不可用,请稍后再试"; + } + android.util.Log.e("NetworkUtils", "HTTP Error: " + response.code() + " - " + errorMessage); + callback.onError(response.code(), errorMessage); +} +``` + +### 2. OrderVerificationResultHandler 502错误的摄像头恢复处理 + +**文件**: `c:\Users\mate1\Desktop\CODE\Android\oxFaceAndroid\app\src\main\java\com\ouxuan\oxface\network\OrderVerificationResultHandler.java` + +**问题**: 只有303和504错误会恢复摄像头预览,502错误没有恢复摄像头的处理。 + +**修复**: 添加502错误的特殊处理逻辑: + +```java +// 当人脸验证返回502错误时,显示Toast并恢复摄像头预览 +if (verificationType == OrderVerificationManager.TYPE_FACE_VERIFICATION && errorCode == 502) { + LogManager.logInfo(TAG, "人脸验证返回502,显示Toast并恢复摄像头预览"); + + // 显示友好的错误提示 + String displayMessage = getDisplayErrorMessage(errorCode, errorMessage); + if (listener != null) { + listener.showToast(displayMessage != null && !displayMessage.isEmpty() ? displayMessage : "服务器暂时不可用,请稍后再试"); + } + + // 发送广播通知OXFaceOnlineActivity恢复摄像头预览 + try { + Intent intent = new Intent("com.ouxuan.oxface.ACTION_RESUME_CAMERA"); + context.sendBroadcast(intent); + LogManager.logInfo(TAG, "已发送恢复摄像头预览广播"); + } catch (Exception e) { + LogManager.logError(TAG, "发送恢复摄像头预览广播失败", e); + } + + return; +} +``` + +## 修复效果 + +### 修复前的问题 +1. **重试日志**: `服务器错误 502,准备重试 2` +2. **错误信息**: 通用的"网关错误" +3. **摄像头状态**: 暂停且不恢复 +4. **用户体验**: 等待重试,无友好提示 + +### 修复后的效果 +1. **立即处理**: 502错误被 `NetworkStabilityManager` 立即捕获,不重试 +2. **友好提示**: 显示"服务器暂时不可用,请稍后再试" +3. **摄像头恢复**: 自动发送恢复摄像头预览的广播 +4. **用户体验**: 即时反馈,摄像头立即恢复可用 + +## 处理流程 + +1. **网络层**: `NetworkStabilityManager.RetryInterceptor` 检测到502错误,立即返回不重试 +2. **工具层**: `NetworkUtils.checkOrder` 接收502响应,生成友好错误信息 +3. **管理层**: `OrderVerificationManager` 调用错误回调 +4. **处理层**: `OrderVerificationResultHandler` 检测到人脸验证502错误 +5. **界面层**: 显示Toast提示 +6. **广播层**: 发送恢复摄像头广播 +7. **设备层**: `OXFaceOnlineActivity` 接收广播,调用 `resumeCamera()` + +## 兼容性 + +- ✅ 保持与现有错误处理逻辑的兼容性 +- ✅ 不影响其他验证类型的错误处理 +- ✅ 保持303和504错误的原有处理逻辑 +- ✅ 向后兼容现有的摄像头控制机制 + +## 测试验证 + +### 验证点 +1. **502错误不重试**: 检查日志中不再出现"准备重试"信息 +2. **错误信息友好**: Toast显示"服务器暂时不可用,请稍后再试" +3. **摄像头恢复**: 验证摄像头预览在502错误后能正常恢复 +4. **其他错误不受影响**: 确保303、504等错误的处理不变 + +### 预期日志 +``` +NetworkStabilityManager: 服务器错误 502 (Bad Gateway),直接返回错误 +OrderVerificationResultHandler: 人脸验证返回502,显示Toast并恢复摄像头预览 +OrderVerificationResultHandler: 已发送恢复摄像头预览广播 +OXFaceOnlineActivity: 接收到恢复摄像头预览广播 +``` + +## 总结 + +通过这次修复,完善了502错误在人脸验证场景下的处理: +1. **网络层**: 已在 v2.0.2 中修复502错误重试问题 +2. **业务层**: 本次修复502错误的友好提示和摄像头恢复 +3. **用户体验**: 从等待重试改为即时反馈和设备恢复 + +现在当人脸验证遇到502错误时,用户将看到友好的提示信息,摄像头也会立即恢复预览,提供了更好的用户体验。 \ No newline at end of file