주문 처리하기
결제 완료된 주문을 발주확인·발송·배송완료까지 처리하고, 발송 전 주문 취소와 배송 추적까지 다루기
결제 완료된 주문을 발주확인·발송·배송완료까지 처리합니다. 발송 전 판매자 취소와 배송 추적도 다룹니다.
준비
- 권한: 소유자·관리자·스태프 또는
order:rw - 테스트 주문: 시작하기의 결제를 받는 경우를 따라 만듭니다.
주문 상품 상태
주문은 상품 단위로 처리합니다. 상품마다 상태가 따로 바뀝니다.
| 상태 | 셀러가 할 일 |
|---|---|
| 결제완료 | 발주확인 |
| 배송준비중 | 발송처리 |
| 배송중 | 배송완료 |
| 배송완료 · 구매확정 · 취소 | 없음 |
배송 없는 상품(MANUAL)은 발송 대신 제공 처리를 하고 배송완료(DELIVERED)가 제공 완료를 뜻합니다(비실물 상품 판매하기).
응답의 quantity는 주문 수량, canceledQuantity는 누적 취소 수량, activeQuantity는 남은 수량입니다. 일부만 취소되면 상태는 그대로입니다.
1. 주문 확인
상점 플랫폼에서 상점 관리 › 판매 › 주문으로 이동합니다(소유자·관리자·스태프).
- 목록에서 주문을 선택합니다. 주문 상세가 열립니다.
테스트 결제 주문에는 테스트 결제 배지가 붙습니다.
2. 발주확인
주문 상세의 주문 상품 행에서 **[발주확인]**을 누릅니다. 상태가 배송준비중으로 바뀝니다. 발송처리는 배송준비중인 상품만 할 수 있습니다.
API: POST /v1/order-items/{orderItemId}/confirm, 여러 건은 POST /v1/order-items/confirm
3. 발송처리
- 주문 상품 행의 **[발송처리]**를 누릅니다.
- 배송 방법(택배·직접배송·퀵서비스·배송 없음)을 고릅니다.
- 택배·퀵서비스면 택배사와 송장번호를 입력하고 **[발송처리]**를 누릅니다.
완료 기준: 상태가 배송중으로 바뀝니다.
| 할 일 | API |
|---|---|
| 발송처리 | POST /v1/order-items/{orderItemId}/dispatch, 여러 건은 POST /v1/order-items/dispatch |
| 택배사 코드 조회 | GET /v1/carriers |
| 송장 수정 | PUT /v1/order-items/{orderItemId}/dispatch/tracking |
| 발송 지연(사유·예상 발송일) | POST /v1/order-items/{orderItemId}/hold |
4. 배송완료
- 발송처리·배송중인 상품 행의 **[배송완료]**를 누릅니다.
- 여러 건은 왼쪽 체크박스로 고르고 **[선택 N건 배송완료]**를 누릅니다.
클레임이 진행 중인 상품은 클레임을 끝낸 뒤 누릅니다.
완료 기준: 상태가 배송완료로 바뀌고 구매확정 예정일(autoDecisionDate)이 잡힙니다.
API: POST /v1/order-items/{orderItemId}/delivered, 여러 건은 POST /v1/order-items/delivered에 { "orderItemIds": [...] } (항목별 결과)
배송 추적
택배 발송 상품은 주문 상세의 배송 추적 카드에서 단계와 이력을 봅니다.
단계는 접수(ACCEPTED, 집화) → 이동 중(IN_TRANSIT) → 배송 출발(OUT_FOR_DELIVERY) → 배송완료(DELIVERED)입니다.
- 택배사가 배송완료를 알리면 자동으로 배송완료가 됩니다.
ORDER.DELIVERED웹훅이 나갑니다. - 택배 발송만 대상입니다. 클레임 진행 중이거나 배송완료 뒤 다른 이력(배달 실패 등)이 붙으면 직접 누릅니다.
- 발송 후 30일까지 주기적으로 조회하고, 송장을 고치면 새 송장으로 조회합니다.
- 택배사에 송장이 아직 없으면
송장 미등록, 추적을 지원하지 않는 택배사면추적 미지원입니다.
trackingEvents는 이력(오래된 것부터), tracking은 마지막 조회 결과입니다(null이면 추적 대상 아님). 단계·결과는 값이 늘 수 있어 문자열로 받습니다.
{
"status": "DISPATCHED",
"trackingEvents": [
{ "status": "집화처리", "location": "강남집배점", "occurredAt": "2026-09-24T01:00:00.000Z", "stage": "ACCEPTED" }
],
"tracking": { "result": "FOUND", "stage": "ACCEPTED", "checkedAt": "2026-09-24T13:05:00.000Z", "carrierDeliveredAt": null }
}tracking.result는 FOUND(조회됨) · NOT_FOUND(송장 미등록) · UNSUPPORTED_CARRIER(추적 미지원)입니다.
deliveredAt은 반영 시각, tracking.carrierDeliveredAt은 택배사가 알린 완료 시각입니다.
자동 배송완료·자동 구매확정
상점 플랫폼에서 설정 › 상점 정보로 이동합니다(소유자·관리자).
- 자동 배송완료·구매확정 카드에서 두 대기일을 정합니다(각각 기본 7일, 0~30일).
| 설정 | 하는 일 |
|---|---|
| 자동 배송완료 대기일 | 발송 후 이 기간이 지난 발송처리·배송중 상품을 배송완료로 바꿉니다. 추적이 먼저 알리면 그때 바뀝니다 |
| 자동 구매확정 대기일 | 배송완료 후 이 기간이 지나면 구매확정합니다 |
0이면 끕니다. 클레임 진행 중인 상품은 빠집니다.- 구매자가 구매확정을 연장하면 1회당 7일씩 미뤄집니다.
- 반품·교환 가능 기간은 자동 구매확정 대기일과 같습니다. 3일로 줄이면 반품·교환도 배송완료 후 3일까지입니다.
- 기한은 배송완료 시각부터 셉니다.
API: PATCH /v1/store의 autoDeliverDays·autoConfirmDays. 현재 값은 GET /v1/store입니다.
판매자 취소
발송할 수 없으면 주문 상세의 상품 행에서 **[판매자 취소]**를 누릅니다. 결제완료·발주확인에서만 됩니다.
판매자 취소는 되돌릴 수 없습니다. 확정하면 취소 수량만큼 바로 PG로 환불됩니다.
- 취소 사유(재고 소진·가격 오류·배송 불가·기타)를 고릅니다.
- 취소 수량(기본은 남은 수량 전체)과 상세 사유를 입력하고 **[취소 확정]**을 누릅니다.
취소 수량만큼 PG로 환불되고 재고가 돌아갑니다.
API: POST /v1/order-items/{orderItemId}/cancel. quantity를 생략하면 남은 수량 전체입니다.
{ "reason": "OUT_OF_STOCK", "detail": "입고 지연", "quantity": 1 }| 응답 필드 | 뜻 |
|---|---|
refundAmount | 실제 환불 금액 |
quantity · canceledQuantity | 이번 취소 수량 · 누적 취소 수량 |
deliveryFeeRefundAmount | 환불액에 포함된 배송비 |
deliveryFeeChargeAmount | 조건부 무료배송 미달로 뺀 배송비 |
- 수량 비율로 환불합니다. 남은 수량이 0이 되면 상태가
취소가 됩니다. - 판매자 취소는 판매자 귀책입니다. 배송 묶음이 모두 취소되고
sellerFaultFreeShipping이 켜져 있으면 그 묶음 배송비도 주문 당시 금액으로 환불합니다(환불 정책과 배송비). - 사유는 판매자 메모에 덧붙습니다.
- 웹훅
ORDER.CANCELED를 구독하면 취소 수량·환불액이 담긴 이벤트가 옵니다(웹훅).
| 오류 | 원인 |
|---|---|
400 INVALID_QUANTITY | 남은 수량보다 큼 |
409 ALREADY_CANCELED | 남은 수량이 0 |
409 CLAIM_IN_PROGRESS | 구매자가 취소·반품·교환을 요청함. 상점 관리 › 판매 › 클레임에서 처리합니다 |
취소·반품·교환 요청
구매자 요청은 취소·반품·교환 처리하기를, 상태 알림은 웹훅을 보십시오.