주문서 요청에서 extra.separately_confirmed: true 로 연 주문은 결제창에서 인증만 끝나고 승인은 보류돼요. 가맹점 서버가 주문을 확인한 뒤 이 API 로 결제를 승인해요. 승인이 끝나면 주문이 결제 완료(payment_completed)가 되고 order.done 웹훅이 나가요.
구매확정은 구매자 쪽(쇼핑몰 주문 내역)에서 처리돼요. 서버용 구매확정 API 는 없어요.
API 엔드포인트
분리 승인 주문은 결제창이 끝나면 redirect_url 로 event=confirm 과 order_number 가 돌아와요. 그 값을 받아 금액·재고를 확인한 뒤 호출해요. 이미 승인된 주문에 다시 부르면 201 ORDER_COMPLETED_ALREADY가 오류 형식으로 와요. 재시도라면 성공으로 처리해도 돼요.
승인 대기(payment_confirm_ready) 상태가 아니면 ORDER_RECEIPT_NOT_CONFIRM_READY로 거절돼요. 호출 전에 주문 상세에서 상태를 확인해요.
요청 파라미터
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
order_number |
String | 필수 | 주문번호 |
주문 목록 응답의 order_number(예: 25071182085082524116)를 넣어요. order_id를 넣으면 주문을 찾지 못해요.
코드 예제
curl -X POST "https://api.bootapi.com/v1/order/confirm" \
-H "Authorization: Basic {base64(client_key:secret_key)}" \
-H "Content-Type: application/json" \
-d '{
"order_number": "25071182085082524116"
}'bashrequire 'bootpay'
commerce = BootpayStore::RestClient.new(client_key: 'your-commerce-client-key', secret_key: 'your-commerce-secret-key')
response = commerce.order_confirm(order_number: '25071182085082524116')
puts responseruby응답
{
"order_number": "25071182085082524116",
"order_name": "Professional 플랜",
"status": "payment_completed",
"receipt_status": "receipt_success",
"receipt_id": "68707c598bbe23d076af189c",
"price": 29900,
"purchased_at": "2026-08-01T12:00:00+09:00",
"created_at": "2026-07-30T09:12:04+09:00",
"products": [],
"user": { "user_id": "67e4b4425ec892162491d0ec", "name": "홍길동" },
"result_data": { "receipt_id": "68707c598bbe23d076af189c" }
}json응답 파라미터
승인된 주문 객체가 돌아와요. 주문 상세 응답에서 order_purchases 를 뺀 모양이에요. 승인 여부는 status 로 확인해요.
| 파라미터 | 타입 | 설명 |
|---|---|---|
| order_number | String | 주문번호 |
| status | String | 승인 후 주문 상태 (payment_completed) |
| receipt_status | String | 결제(영수증) 상태 (receipt_success) |
| 나머지 | — | 주문 상세 응답 필드와 같아요 |
에러 코드
인증·권한 관련 에러는 에러 코드표를 참고해요.
| 코드 | 메시지 | 대처 방법 |
|---|---|---|
ORDER_NOT_FOUND |
주문을 찾을 수 없어요. | order_number가 맞는지 확인해요 |
ORDER_RECEIPT_NOT_CONFIRM_READY |
승인 대기 상태의 결제가 아니에요. | 분리 승인(separately_confirmed) 주문인지, 결제창이 끝났는지 확인해요 |
ORDER_COMPLETED_ALREADY |
이미 승인한 주문이에요. | HTTP 201 오류 형식으로 와요. 재시도라면 성공으로 처리해요 |
ORDER_CONFIRM_PAYMENT_FAILED |
결제 승인에 실패했어요. | 응답 message·payload.pg_error_code 로 PG 사유를 확인해요 |
ORDER_REQUEST_TYPE_INVALID |
승인할 수 없는 주문 유형이에요. | 일반 상품 주문·구독 신청 주문만 승인할 수 있어요 |
함께 보기
주문 처리 API 원문 — 결제 승인 요청·응답과 오류
주문서 요청 —
extra.separately_confirmed로 분리 승인 주문을 열어요주문 상세 — 승인 전에 현재 상태를 확인해요
