NiceErrorMap.cs 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. using SharedKernel.Results;
  2. namespace Infrastructure.Kyc.Nice;
  3. /// <summary>
  4. /// NICE result_code → DPOT <see cref="Error"/> 매핑. 가이드 §4 응답 코드 + Handler 매핑 정책.
  5. /// 사용자에게 보일 메시지는 친절한 한국어로. 시스템 오류는 통합해서 일반 메시지로.
  6. /// </summary>
  7. internal static class NiceErrorMap
  8. {
  9. /// <summary>
  10. /// <paramref name="resultCode"/> 가 "0000" 일 때 호출하면 안 됨 (caller 가 success 처리).
  11. /// </summary>
  12. /// <param name="operation">"token" / "url" / "result" — 에러 코드 prefix 구성용.</param>
  13. public static Error Map(string? resultCode, string operation)
  14. {
  15. switch (resultCode)
  16. {
  17. // ── 사용자 직접 원인 ───────────────────────────────────
  18. case "3032":
  19. case "3033":
  20. return Error.Problem(
  21. "Nice.AuthFailedOrExpired",
  22. "본인인증에 실패했거나 유효시간이 만료되었습니다. 다시 시도해 주세요.");
  23. // ── 토큰 만료/유효성 (caller 가 cache 무효화 + 재시도 가능) ─
  24. case "1003":
  25. case "1004":
  26. case "3043":
  27. return Error.Problem(
  28. "Nice.TokenInvalid",
  29. "본인인증 서비스 인증이 만료되었습니다. 다시 시도해 주세요.");
  30. // ── 가맹점 설정 문제 (운영자 알림 대상) ─────────────────
  31. case "1007":
  32. return Error.Forbidden(
  33. "Nice.IpNotAllowed",
  34. "본인인증 서비스 설정에 문제가 있습니다. 관리자에게 문의해 주세요.");
  35. case "1008":
  36. return Error.Problem(
  37. "Nice.RateLimited",
  38. "본인인증 서비스 요청이 일시적으로 많습니다. 잠시 후 다시 시도해 주세요.");
  39. case "1006":
  40. case "1009":
  41. case "1012":
  42. return Error.Forbidden(
  43. "Nice.PermissionDenied",
  44. "본인인증 서비스 권한 설정에 문제가 있습니다. 관리자에게 문의해 주세요.");
  45. // ── 무결성/위변조 (운영자 알림 대상) ───────────────────
  46. case "3025":
  47. case "3027":
  48. case "9402":
  49. return Error.Problem(
  50. "Nice.IntegrityFailed",
  51. "본인인증 응답 검증에 실패했습니다. 다시 시도해 주세요.");
  52. // ── 정보 없음 (transaction expired or mismatched) ──────
  53. case "3029":
  54. return Error.NotFound(
  55. "Nice.NotFound",
  56. "본인인증 정보를 찾을 수 없습니다. 다시 시도해 주세요.");
  57. // ── 응답 자체 없음 ─────────────────────────────────────
  58. case null:
  59. case "":
  60. return Error.Problem(
  61. "Nice.NoResponse",
  62. "본인인증 서버 응답이 없습니다. 잠시 후 다시 시도해 주세요.");
  63. // ── 기타 시스템 오류 ───────────────────────────────────
  64. default:
  65. return Error.Problem(
  66. $"Nice.{operation}.{resultCode}",
  67. "본인인증 처리 중 일시적인 문제가 발생했습니다. 잠시 후 다시 시도해 주세요.");
  68. }
  69. }
  70. }