{
  "issueId": "4374",
  "environment": "dev",
  "source": "user-provided checklist (Redmine #4374)",
  "sourceText": "요청자: 송인준\n[1] QA 요청 배경\n* https://itsm.bix.bz/issues/4374\n[2] 사전 데이터\n* \n[3] 사전 작업\n* \n[4] 권한별 테스트\n* \n[5] 검증 대상\n* 응답 확인\n[6] 체크리스트\n사전 준비 (가짜 통보 전송)\n* 개발계 api·consumer가 develop-rc 4694022cda 이후 버전으로 배포됐는지 확인\n* 통보는 https://api-dev.biscuitpay.com/api/v1/payment/notification/wannapayments로 전송 (별도 헤더 없이 빅스페이먼츠 테넌트로 처리됨)\n* MID는 빅스페이먼츠 테넌트의 단말기 MID 2132321123321 사용\n* 테스트 거래번호(refNo)는 매 테스트마다 새 값 사용\n* 가짜 승인 통보(cmd=0), 가짜 취소 통보(cmd=1, orgRefNo=원승인 refNo, tranDate·tranTime=취소일시, amount=이번 취소금액)\n* payment / payment_history / payment_log SQL로 결과 확인\n확인 항목\n* 가짜 승인 통보 전송 시 HTTP 200, Content-Type application/json;charset=UTF-8, 본문 {\"resultCode\":\"0000\"}으로 응답하는지 확인 (기존 SUCCESS 문자열이 아닌지)\n* 가짜 승인 통보 처리 후 결제가 1건 생성되고(승인 상태, 10,000원), 결제 로그 응답값에 resultCode 0000이 기록되는지 확인\n* 같은 가짜 승인 통보를 한 번 더 전송 시 같은 성공 응답을 반환하고 결제가 중복 생성되지 않는지 확인\n* 가짜 부분취소 통보(3,000원) 전송 시 성공 응답을 반환하고 취소금액 3,000원·부분취소 상태·취소 이력 1건이 반영되는지 확인\n* 부분취소가 DB에 반영된 뒤 같은 부분취소 통보를 다시 전송 시 같은 성공 응답을 반환하고, 취소금액과 취소 이력이 늘지 않으며, api 로그에 \"이미 반영된 취소 통보입니다\"가 남는지 확인 (반영 전에 바로 재전송하면 걸러지지 않는 것은 알려진 한계)\n* 같은 원거래에 취소일시가 다른 부분취소 통보(tranTime=102000, 2,000원) 전송 시 별도 취소로 반영되어 취소금액이 5,000원이 되는지 확인\n* 남은 금액(5,000원) 전체취소 통보 전송 시 취소 상태로 바뀌고, 같은 통보를 다시 보내도 같은 성공 응답에 상태·금액 변화가 없는지 확인\n* 필수값(tranDate)을 빼고 가짜 통보 전송 시 성공 응답이 아닌 HTTP 500을 반환하고 결제가 생성되지 않는지 확인\n* 통보 저장 실패 시 HTTP 500을 반환하는지 확인 (개발계 재현이 어려우면 단위 테스트·로컬 검증 결과로 대체)\n* 메인페이·코페이 등 다른 PG 통보 응답이 기존과 동일한지 확인\n* 다른 PG의 부분취소 통보가 기존과 동일하게 반영되는지 확인 (중복 차단은 워너페이먼츠만 적용)\n* 워너페이먼츠 측 테스트 통보로 성공 응답이 정상 수신 처리되는지 확인 (가능한 경우)",
  "scope": "개발계 워너페이먼츠 결제 통보 수신 응답(resultCode JSON·HTTP 500)과 취소 통보 중복 반영 차단 QA",
  "checklist": [
    "사전: 개발계 api·consumer가 develop-rc 4694022cda 이후 버전으로 배포됐는지 확인 (응답 형식으로 확인)",
    "가짜 승인 통보 전송 시 HTTP 200, Content-Type application/json;charset=UTF-8, 본문 {\"resultCode\":\"0000\"} (기존 SUCCESS 문자열 아님)",
    "가짜 승인 통보 처리 후 결제 1건(승인, 10,000원) 생성, 결제 로그 응답값 resultCode 0000",
    "같은 가짜 승인 통보 재전송 시 같은 성공 응답, 결제 중복 생성 없음",
    "가짜 부분취소 통보(3,000원) → 성공 응답, 취소금액 3,000원·부분취소 상태·취소 이력 1건",
    "부분취소 DB 반영 뒤 같은 부분취소 재전송 → 같은 성공 응답, 취소금액·취소 이력 증가 없음, api 로그 '이미 반영된 취소 통보입니다' (로그는 Rancher 접근 불가로 DB·단위 테스트로 대체)",
    "취소일시가 다른 부분취소(2,000원) → 별도 취소로 반영, 취소금액 5,000원",
    "잔액 5,000원 전체취소 → 취소 상태, 같은 통보 재전송 시 같은 성공 응답에 상태·금액 변화 없음",
    "필수값(tranDate) 누락 통보 → HTTP 500, 결제 미생성",
    "통보 저장 실패 시 HTTP 500 (개발계 재현 어려워 단위 테스트로 대체)",
    "메인페이·코페이 등 다른 PG 통보 응답 기존과 동일",
    "다른 PG 부분취소 통보 기존과 동일 반영 (중복 차단은 워너페이먼츠만, 단위 테스트·코드로 확인)",
    "워너페이먼츠 측 테스트 통보 수신 확인 (가능한 경우) → 개발계 워너페이먼츠 연동이 없어 대상 외",
    "참고: 구전산 거래내역(transaction) 반영 상태"
  ],
  "roles": [
    "ADMIN"
  ],
  "routeCandidates": "../../../../qa-results/issues/4374/dev/route-candidates.json",
  "setupSteps": [],
  "pages": [
    {
      "name": "워너페이먼츠 결제 통보",
      "application": "admin",
      "path": "/trade-history-v2",
      "tenantParam": "tenantId",
      "roles": [
        "ADMIN"
      ],
      "filters": []
    }
  ],
  "scenario": "wannapayments-notification-response"
}
