PG 두 곳의 규격 차이를 신경 쓰지 않아도 됩니다
PG 장애 시 사람 개입 없는 자동 우회
플랫폼 내부 처리 오버헤드 (P99)
매일 엑셀로 하던 정산 대사 작업
듀얼 PG 연동을 끝내는 데 걸리는 목표 기간
* 자동 우회 시간과 P99 처리 시간은 MVP 테스트 환경에서 측정한 값입니다. 연동 기간은 목표치입니다.
결제 승인부터 정산 대사까지,
AI가 운영합니다
PG를 붙이는 일보다 운영하는 일이 더 어렵습니다. 장애 대응, 에러 해석, 정산 검증을 WavPay가 맡습니다.
토스가 흔들리면,
나이스로 결제를 이어갑니다
승인 요청이 3초 안에 응답이 없거나 5xx 장애가 나면 WavPay가 결과를 확인하고 정리한 뒤 2순위 PG로 넘깁니다. 빌링키 결제는 고객이 아무것도 다시 입력하지 않아도 됩니다.
- 타임아웃이면 망취소를 먼저 확인해 이중 결제를 막습니다
- 연속 장애 시 서킷 브레이커가 해당 PG를 30초간 차단합니다
- 우회 중에도 5% 트래픽으로 복구를 감지해 자동 복귀합니다
FAILED_INTERNAL_SYSTEM_PROCESSING412ms9999, FAILED…
모호한 에러도 해석합니다
PG마다 다른 에러 코드를 하나의 기준으로 분류합니다. 망 오류는 다른 PG로 바로 재시도하고, 한도초과처럼 고객 카드 문제는 불필요한 재시도 없이 바로 안내합니다.
- 토스 에러 코드 카탈로그 + 한국어 메시지 규칙
- 처음 보는 코드는 AI가 분류하고 다음 거래부터 즉시 반영
- 고객에게 보여줄 안내 문구까지 함께 제공
0.01%p 수수료 차이도
다음 날 아침에 알려드립니다
매일 새벽 PG 정산 원장을 수집해 자사 주문, WavPay 승인 내역과 건별로 맞춰봅니다. 차액이 나오면 원인 분석 리포트를 Slack으로 보냅니다.
- 계약 수수료율 불일치, 부가세 오차 탐지
- 환불 수수료 이중 차감, 정산 누락 건 추적
- 취소 건 정산일 차이처럼 흔한 원인은 리포트에서 바로 설명
| 주문 | PG | 계약 수수료 | 실제 수수료 | 차액 |
|---|---|---|---|---|
| ORD-1021 | 토스 | 1,600원 | 1,600원 | 일치 |
| ORD-1022 | 토스 | 3,200원 | 3,300원 | +100원 |
| ORD-1023 | 나이스 | 900원 | 900원 | 일치 |
| ORD-1024 | 나이스 | -150원 | +150원 | 환불 수수료 재부과 |
대시보드를 뒤지는 대신
그냥 물어보세요
개발자와 재무 담당자가 평소 말로 질문하면, Copilot이 승인 시도, 라우팅 이력, 정산 결과를 직접 조회해 근거 수치와 함께 답합니다.
- PG·카드사·에러코드·시간대별로 원인을 쪼개 분석
- 읽기 전용 조회만 수행, 결제 데이터를 바꾸지 않음
- Slack에 그대로 붙여 넣을 수 있는 요약
- 해당 구간 실패율 18.4% (직전 1시간 0.9%)
- 실패의 92%가 타임아웃, 다른 카드사는 정상
- 23:14 이후 신한 거래 412건은 토스로 선제 우회돼 승인
PG 두 곳, 연동은 한 번
승인 파라미터, 웹훅 규격, 재시도 로직을 PG별로 따로 짤 필요가 없습니다.
멱등성 기본 내장
모든 요청에 Idempotency-Key가 자동으로 붙습니다. 더블 탭이나 네트워크 재전송에도 이중 결제가 생기지 않습니다.
표준 상태와 웹훅
INIT → AUTHORIZED → PAID 하나의 상태 모델. 웹훅은 HMAC 서명과 함께 오고, 실패하면 1분부터 6시간까지 다섯 번 재전송합니다.
카드 정보는 거치지 않습니다
카드번호와 CVC는 PG 결제창에서 토큰화됩니다. WavPay 서버에는 저장되지 않습니다.
import { WavPay } from '@wavpay/sdk/server'; const wavpay = new WavPay({ secretKey: process.env.WAVPAY_SECRET_KEY }); // 1. 결제 생성: WavPay가 지금 가장 안정적인 PG를 고릅니다 const { checkout } = await wavpay.payments.create({ orderId: 'ORD-1022', orderName: '프리미엄 구독', amount: 100000, method: 'CARD', successUrl, failUrl, }); // 2. 결제창 인증 후 successUrl에서 승인 const { payment, nextAction } = await wavpay.payments.confirm( paymentId, { providerTxId, amount: 100000 }, ); // PG 장애로 실패하면 nextAction에 2순위 PG 결제창 정보가 담겨 옵니다
개발, 운영, 재무팀의
반복 업무를 줄입니다
새벽 PG 장애에 온콜로 깨지 않아도 됩니다
엑셀 세 개를 나란히 띄우는 아침이 사라집니다