본문으로 건너뛰기
Elimapi

주문 API 참조

개요

이 페이지는 주문 모듈의 상태, 엔드포인트, 매개변수, 오류 코드를 정리합니다. 전체 워크플로는 Taobao/1688 주문 및 결제 가이드를 참고하세요. webhook으로 주문 업데이트를 수신하는 방법은 별도 참조 페이지가 있습니다.

적용 범위: 여러 시장을 지원합니다. 결제는 VND, USD 또는 RMB(CNY) 로 통일됩니다 — 구매 지갑은 이 세 가지 통화 중 하나로 충전하며, API의 잔액과 주문 금액은 공통 단위(*_cny)로 정규화됩니다.

Elim은 주문 이행과 결제를 담당하는 기술 플랫폼 입니다 — 소매 판매를 하지 않으며 최종 고객을 직접 상대하지 않습니다. 여러분의 시스템은 구매 지갑 을 통해 Elim에 결제하고, Elim이 다시 플랫폼의 판매자에게 결제합니다. 따라서 모든 주문에는 서로 독립적인 두 개의 상태 가 있습니다 — 플랫폼 상태(status)와 Elim과의 결제 상태(payment_status) — 여기에 플랫폼 측 결제 결과 표시(platform_payment_status)가 더해집니다.

모든 엔드포인트는 JWT 인증(Authorization: Bearer <token>) 또는 API Key(x-api-key)가 필요합니다. API 요청 인증을 참고하세요.

플랫폼 상태 (status)

Taobao / 1688 측의 주문 처리 진행 상황입니다.

설명
creating주문이 막 생성되어 플랫폼 확인 대기 중
pending_payment플랫폼이 주문을 생성함, 결제 대기 중
paid플랫폼 측에서 주문이 결제됨
shipped창고에서 출고되어 배송 중
completed주문 완료, 수령 확인됨
cancelled주문이 취소됨
unknown플랫폼에서 상태를 읽어올 수 없음
creating → pending_payment → paid → shipped → completed
                                            ↘ cancelled

Elim 결제 상태 (payment_status)

사용자와 Elim 사이의 결제 진행 상황입니다. status독립적 입니다.

설명지갑 내 자금
unpaid주문 생성 시 기본값 — 결제 요청 미전송영향 없음
requested사용자가 결제 요청을 전송함보류됨 (frozen_balance)
approvedElim이 요청을 승인하고 플랫폼에 결제 중계속 보류
paid결제 완료balance에서 차감됨
rejectedElim이 요청을 거절함 (rejection_reason에 사유)다시 해제됨
refunded결제된 주문이 지갑으로 환불됨balance다시 가산됨
unpaid → requested → approved → paid → refunded
   ↑         ↓
   └──── rejected

requested 상태에서 사용자는 자신의 요청을 철회하여 unpaid로 되돌릴 수 있습니다(cancel-payment-request 참고). approved 이후에는 환불로만 되돌릴 수 있습니다.

플랫폼 결제 결과 (platform_payment_status)

Elim이 플랫폼에 결제를 시도한 후에만 값이 존재합니다.

설명
pending플랫폼에 결제 지시를 전송 중
success플랫폼이 결제를 기록함
failed플랫폼이 오류를 반환함 — Elim이 수동으로 처리
unknown결과 미확정

인터페이스에는 항상 statuspayment_status를 함께 표시하세요. platform_payment_status는 주로 문제 발생 시 진단용입니다.

주문 엔드포인트

접두사 /v1/orders. Rate limit은 초 단위 윈도우 기준입니다.

엔드포인트메서드설명Rate limit
/v1/orders/previewPOST주문 미리보기: 예상 합계, 재고 확인 — 주문 미생성, 차감 없음20 / 60s
/v1/ordersPOST플랫폼에 실제 주문 생성10 / 60s
/v1/ordersGET현재 사용자의 주문 목록(페이지네이션)30 / 60s
/v1/orders/statsGET기간 / 상태별 주문 집계 통계30 / 60s
/v1/orders/:idGET주문 상세 — 호출할 때마다 플랫폼에서 최신 상태를 자동 동기화30 / 60s
/v1/orders/:id/cancelPOST아직 취소 가능한 상태일 때 주문 취소10 / 60s
/v1/orders/:id/logistic-detail?package_id=<int>GET중국 국내 배송 추적 (Taobao 전용)20 / 60s

미리보기 및 주문 생성 — 본문

{
  "platform": "alibaba",
  "receiver_address": {
    "name": "Nguyen Van A",
    "phone": "02812345678",
    "mobile": "13800138000",
    "address": "广州市天河区体育西路123号",
    "province": "广东省",
    "city": "广州市",
    "area": "天河区",
    "town": "天河南街道"
  },
  "line_items": [
    { "product_ref": "734467086498", "sku_ref": "5578084256927", "quantity": 2, "price": 15.5 }
  ],
  "preview_token": "c5f75ec1-9f8d-4bf6-9de2-048d50fef349",
  "idempotency_key": "checkout-2026-08-25-001",
  "remark": "판매자를 위한 메모",
  "promotion_id": "PROMO123"
}
필드타입필수설명
platformstringtaobao 또는 alibaba(1688)
receiver_addressAddress중국 내 유효한 배송 주소
warehouse_addressAddress아니오발송 창고 주소
line_itemsLineItem[]품목 목록(아래 참고)
preview_tokenstring아니오미리보기에서 받은 토큰; 1회용, 10분 후 만료. 주문 생성 시 함께 보내 미리본 가격을 고정
idempotency_keystring권장체크아웃마다의 중복 방지 키. 동일 키의 반복 요청은 같은 주문을 반환
client_order_idstring아니오여러분 시스템의 주문 코드(생략 시 자동 생성)
promotion_idstring아니오프로모션 코드
remarkstring아니오판매자를 위한 메모

line_items[]

각 요소는 product_ref + sku_ref 쌍으로 품목을 식별하며, 상품 검색 / 상세에서 직접 가져옵니다.

필드타입필수설명
product_refstring상품 검색 응답의 상품 ID 또는 링크
sku_refstring해당 SKU ID — Taobao: skus[].id · 1688: skus[].spec_id
quantitynumber수량
pricenumber아니오단가(CNY) — 미리보기가 정확한 수치를 반환하도록 제공 권장

mp_id + mp_skuid(marketplace ID) 쌍도 하위 호환을 위해 계속 허용됩니다.

receiver_address

필드필수설명
name수령인 이름
phone유선 전화번호
mobile휴대폰 번호
address상세 주소(중국어)
province / city / area권장성 / 시 / 구·현
town아니오읍 / 면 / 동

미리보기 응답

{
  "success": true,
  "preview_token": "c5f75ec1-9f8d-4bf6-9de2-048d50fef349",
  "currency": "CNY",
  "total_product_amount": 31.0,
  "total_post_fee": 8.0,
  "total_amount": 39.0,
  "shops": [
    {
      "seller_id": "b2b-2201234567",
      "seller_name": "广州某某贸易有限公司",
      "post_fee": 8.0,
      "shop_amount": 31.0,
      "items": [
        { "product_id": "734467086498", "sku_id": "5578084256927", "quantity": 2, "unit_price": 15.5, "total_price": 31.0 }
      ]
    }
  ],
  "unavailable_items": []
}
필드설명
total_product_amount총 상품 금액(CNY)
total_post_fee중국 국내 배송비 합계
total_amount플랫폼에 지불할 총액 = 상품 + 배송비
unavailable_items[]주문 불가 품목(품절 / 잘못된 SKU / 판매 중단). 이 배열이 비어 있지 않으면 주문을 생성하지 마세요

주문 생성 응답

{
  "status": "pending_payment",
  "data": {
    "id": "ORD0000000123",
    "order_list": [
      {
        "success": true,
        "amount": 39.0,
        "post_fee": 8.0,
        "lines": [
          { "sub_id": "E2101234567890", "product_id": "734467086498", "sku_id": "5578084256927", "quantity": 2, "amount": 31.0 }
        ]
      }
    ]
  }
}
필드설명
data.idORD + 10자리 숫자 형식의 내부 주문 ID — 이후 모든 작업에 사용
status성공 시 pending_payment; 판별 불가 시 unknown결제 플로를 중단 하고 주문 상세로 재확인
data.order_list[]플랫폼의 상점 + 품목 상세 — 영수증 작성에 사용

새 주문은 항상 payment_status = unpaid 상태입니다.

주문 목록 — 필터 매개변수

GET /v1/orders

매개변수타입설명
pagenumber현재 페이지(기본값 1)
sizenumber페이지당 주문 수(기본값 20)
platformstringtaobao / alibaba — 비우면 둘 다
statusstring플랫폼 상태로 필터
payment_statusstringElim 결제 상태로 필터
client_order_idstring여러분의 주문 코드로 필터
created_from / created_toISO date생성일 범위

응답: { total, page, size, items: OrderListItem[] }.

{
  "total": 1, "page": 1, "size": 20,
  "items": [
    {
      "id": "ORD0000000123",
      "platform": "alibaba",
      "status": "paid",
      "payment_status": "paid",
      "total_amount_cny": 39.0,
      "total_amount": 39.0,
      "products": [
        { "id": "734467086498", "name": "某某商品", "price": 15.5, "quantity": 2, "img_urls": ["https://..."] }
      ],
      "created_at": "2026-04-09T10:30:00.000Z"
    }
  ]
}

목록의 line_items / products는 주문 생성 시점의 스냅샷입니다. 최신 데이터가 필요하면 GET /v1/orders/:id를 호출하세요.

주문 상세 — 플랫폼별 차이

GET /v1/orders/:id — 응답 전에 플랫폼에서 상태를 자동 동기화합니다.

플랫폼품목 목록배송
1688products[]logistics.logistics_info[]가 응답에 포함됨
Taobaoline_items[]GET /v1/orders/:id/logistic-detail?package_id=<int>를 별도 호출

platform 필드는 목록 응답에 이미 있습니다 — 상세를 호출하기 전에 표시 방식을 정하기 위해 저장해 두세요.

package_id는 Taobao 주문 상세 응답에서 얻는 정수 이며, ORD... ID가 아닙니다.

주문 취소 — 조건

POST /v1/orders/:id/cancelstatuscreating 또는 pending_payment일 때만 가능.

주문에 아직 플랫폼 주문 코드가 없는 경우: { "success": true, "message": "Internal order cancelled, no external order to cancel" }.

구매 지갑 엔드포인트

접두사 /v1/purchasing.

엔드포인트메서드설명
/v1/purchasing/walletGET지갑 잔액
/v1/purchasing/wallet/transactionsGET거래 내역(페이지네이션)
/v1/purchasing/exchange-ratesGET적용 중인 환율

GET /v1/purchasing/wallet

{
  "balance": 1670.30,
  "frozen_balance": 286.50,
  "available_balance": 1383.80,
  "total_deposited": 5000.00,
  "total_spent": 3329.70,
  "updated_at": "2026-06-19T00:00:00.000Z"
}
필드설명
balanceCNY 총 잔액
frozen_balancerequested / approved 주문을 위해 보류된 금액
available_balancebalance − frozen_balance — 실제 사용 가능한 금액. 이 값을 주문 금액과 비교하세요
total_deposited / total_spent누적 수치

GET /v1/purchasing/wallet/transactions

매개변수: page, size, type, date_from, date_to. 응답: { total, page, size, items }.

type의미
deposit지갑 충전
order_freeze결제 요청 전송 시 자금 보류
order_unfreeze요청 철회 또는 거절 시 자금 해제
order_deduction주문 결제 완료 시 차감
order_refund주문 환불이 지갑으로 입금
admin_adjustmentElim이 잔액을 수동 조정

GET /v1/purchasing/exchange-rates

통화쌍(VND→CNY, USD→CNY)별 활성 환율 배열: source_currency, target_currency, rate(시장 환율), markup_percent, effective_rate(마크업 적용 후 Elim이 적용하는 환율).

주문 결제 엔드포인트

접두사 /v1/purchasing/orders/:id. :idORD... 형식.

엔드포인트메서드시작 상태도달 상태설명
/request-paymentPOSTunpaidrequested주문을 확정하고 결제 요청 전송 — 지갑에서 자금 보류
/cancel-payment-requestPOSTrequestedunpaid요청 철회 — 보류된 자금 해제
/confirmPOSTunpaidpaid직접 결제(활성화된 곳에서) — 승인 단계 없이 즉시 차감
/paymentGET주문의 결제 기록 상세

POST …/request-payment

{
  "success": true,
  "order_id": "ORD0000000123",
  "frozen_amount": 286.50,
  "goods_amount_cny": 281.50,
  "shipping_fee_cny": 0,
  "service_fee_cny": 5.00
}

지갑 잔액 부족 오류 — 400:

{
  "error": "insufficient_balance",
  "current_balance": 120.00,
  "available_balance": 90.00,
  "required": 286.50,
  "deficit": 196.50
}

POST …/confirm

{
  "order_id": "ORD0000000123",
  "goods_amount_cny": 281.50,
  "shipping_fee_cny": 0,
  "service_fee_cny": 5.00,
  "total_amount_cny": 286.50,
  "payment_status": "paid",
  "wallet_balance_after": 1383.80
}

wallet_balance_after를 사용하면 GET /v1/purchasing/wallet를 다시 호출하지 않고도 표시 잔액을 갱신할 수 있습니다.

Elim이 수행하는 상태 전이

사용자는 이 작업들을 호출하지 않습니다. payment_status가 어떻게 바뀌고 언제 payment.updated를 받는지 설명하기 위해 나열합니다.

Elim 작업시작도달지갑 영향
요청 승인requestedapproved자금 계속 보류
요청 거절requestedrejected보류된 자금 해제; rejection_reason에 사유
플랫폼 결제 성공approvedpaid보류 자금 차감; platform_payment_status = success
플랫폼 결제 실패approvedunpaidplatform_payment_status = failed; Elim이 연락해 처리
환불paidrefundedbalance에 다시 가산; order_refund 거래 생성

webhook으로 주문 업데이트 수신

webhook을 등록하면 주문의 status 또는 payment_status가 변경될 때마다 Elim이 여러분의 시스템을 호출합니다 — 상태를 계속 폴링할 필요가 없어집니다. 주문 모듈과 관련된 두 이벤트:

이벤트전송 시점
order.updated주문 status 변경: 플랫폼 동기화, 주기적 동기화, 또는 취소
payment.updatedpayment_status 변경: 요청 전송, 요청 철회, 승인, 거절, 플랫폼 결제 완료/실패, 또는 환불

Payload에는 주문 스냅샷이 담깁니다: data.order.id, status, payment_status, platform_payment_status, total_amount_cny, updated_at. 처리 후 HTTP 2xx를 반환하세요.

등록 엔드포인트, 전체 payload 구조, 헤더, HMAC 서명 검증 및 재시도 정책: Webhook 참조 를 확인하세요.

오류 코드

HTTP상황처리 방법
400insufficient_balancedeficit 만큼 CNY를 추가 충전한 뒤 요청 재전송
400Cannot request payment: current status is "..."주문이 더 이상 unpaid가 아님
400잘못된 플랫폼 ID 형식product_ref / sku_ref 확인
401JWT 만료새 토큰 발급
403본인 계정이 아닌 주문에 접근자신의 주문만 조작
404주문 / 결제 기록 없음ORD... ID 재확인
422LINE_ITEM_SKU_NOT_RESOLVABLE / LINE_ITEM_PRODUCT_NOT_RESOLVABLE(Taobao)sku_ref / product_ref 오류 — 상품 상세에서 다시 가져오기
429Rate limit 초과약 60초 대기 후 호출 간격 조절
502Taobao/1688 플랫폼 무응답재시도; 중복 주문 생성 금지

오류 응답은 { statusCode, message, error } 형태를 따릅니다. message는 때때로 베트남어이며 그대로 표시할 수 있습니다.

ID 규칙

  • 내부 주문 ID: ORD + 10자리 숫자, 예: ORD0000000123. 모든 엔드포인트에 사용.
  • 플랫폼 주문 코드(order_id): Taobao/1688이 발급하며, 주문 생성 성공 후에만 존재.
  • package_id: 정수, Taobao 배송 추적에 사용.

관련 링크