32장. 결제 Unknown Outcome 실습
우리 서버가 authorize 요청을 보내고 provider가 성공 처리한 직후 network response를 끊는다. client에게 즉시 실패라고 단정하지 않고 PENDING_CONFIRMATION과 조회 URL을 제공한다.
worker는 같은 idempotency key로 provider lookup을 한다. provider result가 success면 내부 order를 paid로 전이하고 receipt를 저장한다. not found면 replay window·provider SLA까지 제한적으로 확인한다. 새 key로 authorize하지 않는다.
결제 요청 body hash가 이전 key의 hash와 다르면 conflict로 막는다. amount, currency, merchant order ID, provider account을 대사한다. webhook과 lookup이 동시에 확정해도 한 번만 상태 전이하게 한다.
운영 dashboard에 unknown outcome count/age, lookup success, duplicate prevention, manual reconciliation을 둔다. customer support에는 재결제를 권하기 전 lookup하는 절차를 준다.