Files
HeuJung 3ebbda5d86 feat(board,ecommerce,pay,verification,templates,core): 문의 답변 사슬·답글 삭제 정책·검증 계약 + 실패 사유 표면화 전수
공개 (답변 중복 등록)/(문의 삭제 시 답변 잔존) 수정과 동형 결함 전수 해소.

- 문의 답변 단일성: 1차(피벗 is_answered) + 2차(게시판 리스너 duplicate 마커) 이중 방어,
 경합 경로에서도 사유(reply_already_exists 422)가 보존되도록 훅 반환 계약 확장
- 질문·답변·피벗 생명주기 대칭: 삭제/복원/영구삭제 훅 연동 + 고아 데이터 백필 업그레이드 스텝
- 게시판별 답글 삭제 정책(cascade/block) 신설, 정렬 화이트리스트·per_page 게이트
 (전량 조회 소비처 200/999 를 수용하는 상한 999 — 조였다가 관리자 화면 2곳 422 회귀 즉시 정정)
- 결제/본인인증 플러그인 검증 계약: FormRequest 15종 승격 + 컨트롤러 catch 정합.
 거래 조회 tid 상한은 저장 컬럼(varchar 100) 기준 — 해외 CBT TID(40자) 수용
- onError 토스트 고정 문구 전수 해소(67건/50파일/15확장) — 서버 실패 사유를 그대로 표면화,
 change-password 오변수(response→error) 교정
- 코어 플러그인 설정 검증 안내의 항목 표시명이 스키마 라벨(ko/en) 폴백에 덮여 요청 로케일
 (ja) 라벨을 잃던 회귀 정정 — 번역 등록이 있으면 그것을 우선 (7.0.7 미출시 기능 자체 결함)
- 사전 결함 정리(Icon 등가표 27·darkmode 2·validated 통일), API 문서·CHANGELOG·ja 팩 동기
- develop(60652fdc0) 리베이스: getTable 정비와 병합 — 양측 의도 보존 (충돌 18파일)
2026-08-17 17:04:44 +09:00

4.4 KiB

에스크로 API 레퍼런스

소유: 플러그인 sirsoft-pay_nicepayments. 관리자 주문 상세의 에스크로 배송 등록 화면이 쓰는 JSON API 표면이다. 결제대행사 서버가 직접 호출하는 통보 경로(vbank.md)와는 인증·접근 제어가 다르다.


TL;DR (5초 요약)

1. 에스크로(EscrowYN=Y) 결제 건의 TID/상태를 조회하고, 배송 정보를 나이스페이먼츠에 등록한다
2. 두 경로 모두 Bearer 토큰 + admin 미들웨어 + 이커머스 주문 권한이 필요하다
3. 배송 등록이 성공하면 구매자에게 구매확정 안내가 결제대행사를 통해 자동 발송된다
4. 결제대행사 호출 실패는 502 로 구분된다 — 응답 본문에 예외 원문을 싣지 않는다
5. 대상 TID 를 찾지 못하면 422 (등록 가능한 에스크로 결제가 아님)

공통 규약

항목 값
인증 Authorization: Bearer {token} (auth:sanctum + admin)
응답 봉투 코어 ResponseHelper 표준 (success / message / data)
권한 조회 sirsoft-ecommerce.orders.read · 등록 sirsoft-ecommerce.orders.update

에스크로 결제 목록 조회

항목 값
라우트명 api.plugins.sirsoft-pay_nicepayments.admin.orders.escrow-payments
메서드/URI GET /api/plugins/sirsoft-pay_nicepayments/admin/orders/{orderNumber}/escrow-payments
권한 sirsoft-ecommerce.orders.read

경로 파라미터

이름 타입 필수 설명
orderNumber string 예 주문번호

응답 필드 (data.escrow_payments[])

필드 타입 설명
id integer 결제 레코드 ID
transaction_id string 나이스페이먼츠 TID
payment_method string 결제수단 (가상계좌·카드 등)
payment_status string 결제 상태

해당 주문에 에스크로 결제가 없으면 escrow_payments 는 빈 배열이다.

응답 예시

{
  "success": true,
  "message": "요청이 성공했습니다.",
  "data": {
    "escrow_payments": [
      {
        "id": 812,
        "transaction_id": "nicepay20260814012345",
        "payment_method": "vbank",
        "payment_status": "paid"
      }
    ]
  }
}

에스크로 배송 등록

항목 값
라우트명 api.plugins.sirsoft-pay_nicepayments.admin.escrow.register-delivery
메서드/URI POST /api/plugins/sirsoft-pay_nicepayments/admin/escrow/register-delivery
권한 sirsoft-ecommerce.orders.update

요청 파라미터

이름 타입 필수 제약 설명
tid string 예 최대 30자 대상 에스크로 결제의 나이스페이먼츠 TID (나이스페이먼츠 TID 규격 30자 — 초과 시 422)
delivery_name string 예 최대 100자 택배사명
tracking_number string 예 최대 100자 송장번호
buyer_address string 예 최대 200자 구매자 배송지
register_name string 예 최대 50자 등록자명

동작

나이스페이먼츠에 배송 정보를 등록한다. 등록이 완료되면 구매자에게 구매확정 안내가 결제대행사를 통해 자동 발송된다.

응답 예시

{
  "success": true,
  "message": "요청이 성공했습니다.",
  "data": {
    "ResultCode": "0000",
    "ResultMsg": "정상처리"
  }
}

에러

상태코드 사유 응답
401 토큰 누락·만료 코어 표준
403 sirsoft-ecommerce.orders.update 권한 없음 코어 표준
422 요청 파라미터 검증 위반, 또는 해당 TID 로 등록 가능한 에스크로 결제를 찾지 못함 error.errors.message 에 사유
502 결제대행사 호출 실패 (네트워크·응답 파싱·자격증명 오류 등) common.failed

502 응답 본문에는 예외 원문을 싣지 않는다 — 원인은 서버 로그(NicePayments: escrow delivery registration failed)에만 기록된다. 이미 번역된 예외 메시지를 응답의 메시지 키 자리에 넘기면 키 해석에 실패해 내부 오류 원문이 그대로 관리자 화면에 노출되기 때문이다. 상세: docs/backend/exceptions.md "예외 → 응답 매핑".