주문 정보 외부 연동 API 문서 (v1.0)
Aedu 외부 API를 사용하면 총판에 속한 학원의 주문 정보를 외부 시스템(ERP, CRM 등)에서 조회할 수 있습니다.
기본 URL: https://api.aedu.co.kr
모든 API 요청에는 API Key와 API Secret이 필요합니다. 두 가지 방식을 지원합니다.
Authorization: Bearer {API_KEY}:{API_SECRET}
X-API-Key: {API_KEY}
X-API-Secret: {API_SECRET}
# 방법 1
curl -H "Authorization: Bearer aedu_abc123...:secret456..." \
https://api.aedu.co.kr/api/external/orders.php
# 방법 2
curl -H "X-API-Key: aedu_abc123..." \
-H "X-API-Secret: secret456..." \
https://api.aedu.co.kr/api/external/orders.php
API 키별로 분당 요청 수가 제한됩니다 (기본 100회/분). 응답 헤더에서 남은 횟수를 확인할 수 있습니다.
| 헤더 | 설명 |
|---|---|
X-RateLimit-Limit | 분당 최대 요청 수 |
X-RateLimit-Remaining | 남은 요청 수 |
Retry-After | 제한 초과 시 대기 시간(초) |
에러 발생 시 아래 형식으로 응답합니다.
{
"success": false,
"error": {
"code": 401,
"message": "유효하지 않은 API 키입니다."
}
}
| 코드 | 설명 |
|---|---|
| 200 | 성공 |
| 400 | 잘못된 요청 (파라미터 오류) |
| 401 | 인증 실패 (API 키/Secret 오류) |
| 403 | 권한 없음 (비활성 키, IP 차단, 만료) |
| 404 | 리소스를 찾을 수 없음 |
| 429 | 요청 한도 초과 (Rate Limit) |
| 500 | 서버 내부 오류 |
GET /api/external/orders.php
총판에 속한 주문 목록을 페이지네이션으로 조회합니다.
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
| page | integer | 선택 | 페이지 번호 (기본 1) |
| limit | integer | 선택 | 페이지당 건수 (기본 20, 최대 100) |
| academy_id | integer | 선택 | 학원 ID 필터 |
| payment_status | string | 선택 | 결제상태: pending, paid, refunded, cancelled |
| order_status | string | 선택 | 주문상태: pending, confirmed, preparing, shipped, delivered, cancelled |
| date_start | string | 선택 | 시작일 (YYYY-MM-DD) |
| date_end | string | 선택 | 종료일 (YYYY-MM-DD) |
| keyword | string | 선택 | 검색어 (주문번호, 수령인, 연락처) |
{
"success": true,
"data": {
"items": [
{
"id": 1,
"order_number": "ORD-20260318-0001",
"academy": {
"id": 1,
"name": "테스트학원"
},
"product_name": "초등 영어 기본반",
"member_name": "홍길동",
"member_phone": "010-1234-5678",
"amount": {
"total": 50000,
"discount": 5000,
"shipping_fee": 3000,
"payment": 48000
},
"payment": {
"status": "paid",
"method": "card",
"paid_at": "2026-03-18 10:30:00"
},
"order_status": "shipped",
"shipping": {
"name": "홍길동",
"phone": "010-1234-5678",
"address": "서울시 마포구 연남로 71",
"zipcode": "04001",
"company": "CJ대한통운",
"tracking_number": "1234567890",
"shipped_at": "2026-03-18 14:00:00",
"delivered_at": null
},
"created_at": "2026-03-18 09:00:00",
"updated_at": "2026-03-18 14:00:00"
}
],
"pagination": {
"total": 150,
"page": 1,
"limit": 20,
"total_pages": 8
}
}
}
curl -H "Authorization: Bearer aedu_abc123:secret456" \
"https://api.aedu.co.kr/api/external/orders.php?page=1&limit=10&payment_status=paid&date_start=2026-03-01"
GET /api/external/orders-detail.php
주문 ID 또는 주문번호로 상세 정보를 조회합니다. 주문 상품 목록이 포함됩니다.
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
| id | integer | 택1 | 주문 ID |
| order_number | string | 택1 | 주문번호 (예: ORD-20260318-0001) |
id 또는 order_number 중 하나는 반드시 필요합니다.
{
"success": true,
"data": {
"id": 1,
"order_number": "ORD-20260318-0001",
"academy": { "id": 1, "name": "테스트학원" },
"product_name": "초등 영어 기본반",
"member": {
"name": "홍길동",
"phone": "010-1234-5678",
"email": "hong@test.com"
},
"amount": {
"total": 50000,
"discount": 5000,
"shipping_fee": 3000,
"payment": 48000,
"cancelled": 0
},
"payment": { "status": "paid", "method": "card", "paid_at": "2026-03-18 10:30:00" },
"order_status": "shipped",
"shipping": { /* ... 배송 정보 ... */ },
"items": [
{
"id": 1,
"type": "book",
"name": "초등 영어 워크북 Level 1",
"quantity": 2,
"unit_price": 15000,
"discount_amount": 2000,
"total_price": 30000,
"final_price": 28000,
"status": "shipped"
}
],
"memo": null,
"created_at": "2026-03-18 09:00:00",
"updated_at": "2026-03-18 14:00:00"
}
}
# ID로 조회
curl -H "Authorization: Bearer aedu_abc123:secret456" \
"https://api.aedu.co.kr/api/external/orders-detail.php?id=1"
# 주문번호로 조회
curl -H "Authorization: Bearer aedu_abc123:secret456" \
"https://api.aedu.co.kr/api/external/orders-detail.php?order_number=ORD-20260318-0001"
GET /api/external/orders-stats.php
주문 요약 통계, 기간별 추이, 학원별 통계를 조회합니다.
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
| academy_id | integer | 선택 | 학원 ID 필터 |
| date_start | string | 선택 | 시작일 (YYYY-MM-DD) |
| date_end | string | 선택 | 종료일 (YYYY-MM-DD) |
| group_by | string | 선택 | 그룹핑: day(기본), month |
{
"success": true,
"data": {
"summary": {
"total_orders": 1500,
"pending_count": 50,
"paid_count": 1200,
"refunded_count": 30,
"cancelled_count": 220,
"shipped_count": 1100,
"delivered_count": 980,
"total_payment_amount": 75000000,
"paid_amount": 60000000
},
"trends": [
{
"period": "2026-03-18",
"order_count": 45,
"payment_amount": 2250000,
"paid_count": 40
}
],
"by_academy": [
{
"academy_id": 1,
"academy_name": "테스트학원",
"order_count": 500,
"payment_amount": 25000000
}
]
}
}
curl -H "Authorization: Bearer aedu_abc123:secret456" \
"https://api.aedu.co.kr/api/external/orders-stats.php?date_start=2026-03-01&date_end=2026-03-31&group_by=day"
import requests
API_KEY = "aedu_abc123..."
API_SECRET = "secret456..."
BASE_URL = "https://api.aedu.co.kr"
headers = {
"Authorization": f"Bearer {API_KEY}:{API_SECRET}"
}
# 주문 목록 조회
response = requests.get(
f"{BASE_URL}/api/external/orders.php",
headers=headers,
params={"payment_status": "paid", "limit": 50}
)
data = response.json()
if data["success"]:
for order in data["data"]["items"]:
print(f"주문 {order['order_number']}: {order['amount']['payment']}원")
const API_KEY = 'aedu_abc123...';
const API_SECRET = 'secret456...';
const BASE_URL = 'https://api.aedu.co.kr';
const response = await fetch(
`${BASE_URL}/api/external/orders.php?payment_status=paid&limit=50`,
{
headers: {
'Authorization': `Bearer ${API_KEY}:${API_SECRET}`
}
}
);
const data = await response.json();
if (data.success) {
data.data.items.forEach(order => {
console.log(`주문 ${order.order_number}: ${order.amount.payment}원`);
});
}
| 값 | 설명 |
|---|---|
| pending | 결제 대기 |
| paid | 결제 완료 |
| refunded | 환불 완료 |
| cancelled | 취소 |
| 값 | 설명 |
|---|---|
| pending | 주문 접수 |
| confirmed | 주문 확인 |
| preparing | 상품 준비중 |
| shipped | 배송중 |
| delivered | 배송 완료 |
| cancelled | 주문 취소 |
| 값 | 설명 | 엔드포인트 |
|---|---|---|
| orders.list | 주문 목록 조회 | /api/external/orders.php |
| orders.read | 주문 상세 조회 | /api/external/orders-detail.php |
| orders.stats | 주문 통계 조회 | /api/external/orders-stats.php |
각 API 키는 특정 총판에 연결되어 발급됩니다. API 호출 시 해당 총판에 소속된 학원의 주문 정보만 조회 가능하며, 다른 총판의 데이터에는 접근할 수 없습니다.
예를 들어 "서울총판"에 연결된 API 키로는 서울총판 소속 학원의 주문만 조회되고, "부산총판" 소속 학원의 주문은 조회되지 않습니다.
© 2025 (주)이미지에스알씨. Aedu API v1.0