결제는 성공했는데 주문 상태가 안 바뀔 때 (웹훅)

이런 증상이라면

결제창에서는 결제가 성공했다고 뜨는데, 내 DB의 주문 상태는 여전히 대기(pending)이고 완료로 안 바뀝니다.

🔎 이 문제는 대부분 코드가 아니라 대시보드·설정에 있습니다. AI에게 코드를 고쳐달라고 반복해도 안 풀리는 이유예요.

흔한 원인 (가능성 순)

1웹훅 URL이 배포 도메인이 아니거나 미설정대시보드

결제사 대시보드의 웹훅 URL이 localhost거나 비어 있으면, 결제 완료 알림이 서버로 오지 못해 상태가 안 바뀝니다.

2결제 승인(confirm) API 호출 누락코드

결제창 성공 ≠ 결제 완료. 서버에서 승인 API를 호출해야 실제 결제가 확정되고 상태를 바꿀 수 있습니다.

3웹훅 서명 검증 실패로 조용히 무시코드

서명/시크릿이 안 맞아 웹훅 핸들러가 요청을 버리면, 로그엔 아무 일도 없어 보이지만 상태가 안 바뀝니다.

확인·해결 순서

  1. 결제사(Toss/PortOne) 대시보드에서 웹훅 URL이 배포 도메인의 실제 엔드포인트인지 확인
  2. 로컬 테스트는 ngrok 등 터널로 외부에서 접근 가능한 URL 사용
  3. 서버 로그에서 웹훅이 실제로 도달하는지 + 승인 API 응답 확인
  4. 웹훅 서명 검증 통과 여부 로그 남기기

자주 묻는 질문

로컬에서 웹훅 테스트가 안 돼요.

결제사 서버가 내 localhost로 요청을 보낼 수 없어서입니다. ngrok 같은 터널로 공개 URL을 만들어 그 주소를 웹훅에 넣으세요.

위를 다 해봤는데도, 또는 AI(Cursor·Claude)한테 물어봐도 계속 같은 에러라면 — 에러 로그를 붙여넣으면 60초 안에 진짜 원인을 짚어드려요.

이 문제 무료로 AI 진단받기

관련 문제