5. 결제 승인과 콜백 처리하기
이 단계에서는 결제를 최종 완료 처리해요. 2단계에서 설정한 autoExecute 값에 따라 가맹점이 할 일이 달라져요.
autoExecute: true로 생성했다면 토스가 자동으로 승인하니, 가맹점은 콜백을 받아서 결제 완료를 확인해요.autoExecute: false로 생성했다면 가맹점이 승인 API를 직접 호출해서 결제를 완료해요.
자동 승인이면 콜백으로 완료 확인하기
autoExecute: true로 결제를 생성했다면, 토스는 출금을 완료한 뒤 결제 생성 시 전달받은 resultCallback URL로 결제 결과를 POST 요청해요. 가맹점 서버는 이 콜백을 받았을 때 주문을 결제 완료 상태로 변경하고 재고 차감 같은 후속 로직을 처리하면 돼요.
콜백 V2 기준으로 다음과 같은 본문이 전달돼요. 카드 결제라면 카드 승인 정보가 함께 포함돼요.
{
"status": "PAY_COMPLETE",
"payToken": "example-payToken",
"orderNo": "2026-0712-000001",
"payMethod": "CARD",
"amount": 35000,
"discountedAmount": 0,
"paidAmount": 35000,
"paidTs": "2026-07-12 14:22:37",
"transactionId": "dc3b951a-9781-462e-ab5a-b8a0bea0222a"
}status에는 결제 완료 시PAY_COMPLETE가 전달돼요. 결제 완료 이외의 상태는 콜백으로 전달되지 않아요.paidAmount는 할인 금액을 제외하고 실제 지불 수단으로 승인된 금액이에요.
카드 승인 정보를 포함한 전체 필드는 결제 결과 callback 레퍼런스에서 확인할 수 있어요.
콜백을 받으려면 방화벽을 먼저 확인하세요. 가맹점 서버가 자체 방화벽을 사용한다면 토스페이의 IP를 허용해야 콜백이 도착해요. 방화벽 정보를 확인하세요.
수동 승인이면 승인 API 호출하기
autoExecute: false로 결제를 생성했다면, 4단계에서 PAY_APPROVED 상태를 확인한 뒤 재고 확인 같은 검증을 마치고 승인 API를 호출해요. 승인이 완료되어야 실제 출금이 일어나요.
결제 승인 API Endpoint
POST https://pay.toss.im/api/v2/execute
결제를 생성한 상점의 apiKey와 승인할 결제 건의 payToken 두 가지만 있으면 돼요.
curl https://pay.toss.im/api/v2/execute \
-H "Content-Type: application/json" \
-d '{
"apiKey": "sk_test_w5lNQylNqa5lNQe013Nq",
"payToken": "example-payToken"
}'결제 금액 검증 같은 선택 파라미터는 가맹점 결제 승인 레퍼런스에서 확인할 수 있어요.
응답을 못 받았다면 결제 상태 확인하기
네트워크 문제로 승인 응답이나 콜백을 받지 못할 수도 있어요. 이럴 때는 결제 상태 확인 API로 해당 결제 건의 현재 상태를 직접 조회할 수 있어요. apiKey와 payToken(또는 orderNo)으로 조회해요.
결제 상태 확인 API Endpoint
POST https://pay.toss.im/api/v2/status
curl https://pay.toss.im/api/v2/status \
-H "Content-Type: application/json" \
-d '{
"apiKey": "sk_test_w5lNQylNqa5lNQe013Nq",
"payToken": "example-payToken"
}'응답의 payStatus가 PAY_COMPLETE면 결제가 완료된 거예요. retUrl 파라미터와 콜백 본문에서는 필드명이 status였지만, 상태 확인 API 응답에서는 payStatus라는 이름으로 같은 상태 값을 전달해요. 상태 값 전체 목록은 결제 상태 레퍼런스를 참고하세요.
다음 단계
첫 결제를 완주했어요. 이제 실제 오픈 전에 점검할 것들이 남았어요. 6. 테스트와 라이브 전환하기로 이동하세요.