Admin API결제미완 캠페인
GET / — 결제미완 캠페인 목록
UNPAID + PAYMENT_PENDING 캠페인을 캠페인 단위로 조회합니다.
결제미완 캠페인 목록
UNPAID (캠페인비 결제 단계로 admin 이 되돌린 상태) 와 PAYMENT_PENDING (영업팀 결제 요청 후 처리 대기) 두 상태의 캠페인을 한 번에 조회합니다. 미게시 / 미제출 등 application 단위의 pending 목록 과 분리된 캠페인 단위 엔드포인트입니다.
HTTP 요청
GET /ai/admin/pending/payment-campaigns
Authorization: Bearer {access_token}Query Parameters
| 파라미터 | 타입 | 필수 | 기본값 | 설명 |
|---|---|---|---|---|
page | int | 아니오 | 0 | Spring Pageable |
size | int | 아니오 | 20 |
정렬은 서버 고정 — paymentRequestedAt ASC (없으면 registeredAt ASC). 오래 방치된 캠페인이 위로 옵니다. 클라이언트 sort 파라미터는 무시됩니다.
분류 기준
TB_CAMPAIGN_PAYMENT_VERIFICATION 행 단위로 판정합니다.
| 상태 | 식별 방법 | 비고 |
|---|---|---|
UNPAID | 행의 payment_status = UNPAID | admin 이 캠페인 단계 변경에서 UNPAID 로 되돌린 캠페인. 검증 메타(verifiedAt 등)는 초기화됨 |
PAYMENT_PENDING | 행의 payment_status = PAYMENT_PENDING | 영업팀 결제 요청 후 처리 대기 |
PAID (대상 아님) | 행의 payment_status = PAID | 결제 완료 처리됨 |
| 행 없음 (대상 아님) | — | 결제 트래킹 대상 아님 (CandyPay 정상 결제 등) |
응답
성공 응답 (200 OK)
{
"status": 200,
"code": null,
"message": "결제미완 캠페인 조회 성공",
"data": {
"items": [
{
"campaignNo": 2398,
"campaignTitle": "솔루션랩 5월 캠페인",
"registeredAt": "2026-04-30T11:20:00",
"contractDeadline": "2026-05-12T18:00:00",
"paymentStatus": "PAYMENT_PENDING",
"paymentRequestedAt": "2026-05-02T15:42:11",
"businessId": "biz_001",
"businessName": "솔루션랩",
"managerName": "홍길동",
"managerEmail": "manager@example.com",
"managerPhone": "010-1111-2222"
},
{
"campaignNo": 2401,
"campaignTitle": "코코미 7월 캠페인",
"registeredAt": "2026-05-04T09:00:00",
"contractDeadline": null,
"paymentStatus": "UNPAID",
"paymentRequestedAt": null,
"businessId": "biz_002",
"businessName": "코코미",
"managerName": "김담당",
"managerEmail": "kim@example.com",
"managerPhone": "010-3333-4444"
}
],
"page": { "number": 0, "size": 20, "totalElements": 2, "totalPages": 1 },
"summary": {
"UNPAID": 1,
"PAYMENT_PENDING": 1
}
}
}Response 스키마
PaymentPendingCampaignItemDto
| 필드명 | 타입 | 설명 |
|---|---|---|
campaignNo | int | 캠페인 번호 |
campaignTitle | string | 캠페인 제목 |
registeredAt | datetime | 캠페인 등록일 (Collab.regi_date) |
contractDeadline | datetime | null | 계약 마감일 (CampaignSchedule 의 CONTRACT_CREATION.endDate). 미설정 시 null |
paymentStatus | string | UNPAID 또는 PAYMENT_PENDING |
paymentRequestedAt | datetime | null | PAYMENT_PENDING 으로 전환된 시점 (verification.updatedAt). UNPAID 는 null |
businessId | string | 기업 회원 ID (Member.id) |
businessName | string | null | 기업명 |
managerName | string | null | 담당자 이름. Collab.manager → 기업 default 매니저 → Business.managerName 순으로 결정 |
managerEmail | string | null | 담당자 이메일 (담당자 결정 우선순위는 managerName 과 동일) |
managerPhone | string | null | 담당자 휴대폰 (담당자 결정 우선순위는 managerName 과 동일) |
summary
캠페인 상태별 건수. UNPAID / PAYMENT_PENDING 키별 카운트로 반환됩니다 (해당 상태 캠페인이 0 건이면 키가 누락될 수 있음).
정렬 동작
서버에서 다음 키로 ASC 정렬됩니다.
paymentRequestedAt가 있으면 우선 사용- 없으면
registeredAt사용 - 동률이면
campaignNoASC
따라서 결제 요청이 가장 오래 방치된 캠페인이 1번에, 아직 결제 요청 안 된 (UNPAID) 캠페인 중에서는 등록이 가장 오래된 캠페인이 위로 옵니다.
관련 API
- 결제미완 → 결제 완료 처리:
POST /ai/admin/campaigns/{campaignNo}/payment-verification - 캠페인 단계(결제 상태) 변경:
PATCH /ai/admin/campaigns/{campaignNo}/step - 영업팀 결제 요청 (Slack 발송):
POST /ai/saas/campaigns/{campaignNo}/payment-request