Files
Gnuboard7/plugins/_bundled/sirsoft-pay_kginicis/docs/api/transaction.md
T
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

10 KiB

Transaction API 레퍼런스

소유: plugin sirsoft-pay_kginicis · 생성: php artisan api:docgen (실측 기반). @generated 블록은 재생성 시 갱신되며, 사람이 작성한 설명은 보존됩니다.


TL;DR (5초 요약)

1. 이 문서는 실제 API 호출로 실측한 Transaction 엔드포인트 레퍼런스입니다
2. 각 엔드포인트: 메서드/URI/권한 + 요청 파라미터 표 + 요청 예시(raw HTTP) + 실측 응답 필드 표 + 응답 예시(envelope)
3. 응답 필드의 예시값·응답 예시 JSON 은 실제 호출 응답에서 관측된 값입니다
4. 갱신: 코드 변경 후 php artisan api:docgen 재실행
5. 설명(TODO) 칸은 사람이 채웁니다

POST /api/plugins/sirsoft-pay_kginicis/admin/transaction/query

  • 라우트명: api.plugins.sirsoft-pay_kginicis.admin.transaction.query
  • 컨트롤러: Plugins\Sirsoft\PayKginicis\Controllers\AdminTransactionController@query
  • 인증/권한: auth:sanctum + permission:sirsoft-ecommerce.orders.read

요청 파라미터

이름 위치 타입 필수 허용값 용도
tid body string 예 max 100 조회할 KG 이니시스 거래번호(TID). 누락·문자열 아님·100자 초과는 422 (TransactionQueryRequest 검증 — 국내 30자·해외 CBT 40자 형식을 모두 수용, 상한은 저장 컬럼 varchar(100))

요청 예시

POST /api/plugins/sirsoft-pay_kginicis/admin/transaction/query HTTP/1.1
Host: api.example.com
Accept: application/json
Authorization: Bearer {YOUR_TOKEN}
Content-Type: application/json

{
    "tid": "StdpayCARDSIRSOFT001202606191358556131"
}

응답 필드 (data 내부)

단건 응답: data 객체의 필드.

data 는 KG 이니시스 INIAPI v2 inquiry 응답(원본 키 그대로)에 화면 표시용 보강 필드(_ 접두 키)를 덧붙인 객체입니다. 원본 키는 결제수단·거래 상태에 따라 존재 여부가 달라지므로, 화면은 항상 _ 접두 필드를 기준으로 읽습니다. 보강 필드는 조회 응답 → 로컬 결제 레코드(ecommerce_order_payments) fallback → null 순으로 채워집니다.

필드 타입 실측 예시값 용도/설명
resultCode string 0000 KG 이니시스 조회 결과 코드 (원본 응답). CBT 로컬 조회 시에는 LOCAL_CBT
resultMsg string 정상처리 KG 이니시스 조회 결과 메시지 (원본 응답)
tid string StdpayCARDSIRSOFT001202606191358... 거래번호(TID)
_is_test_mode boolean true 이 거래가 테스트 모드 자격증명으로 결제/조회된 거래인지 여부
_is_cbt boolean true 일본 CBT(국가간 거래) 결제 여부. CBT 응답에만 포함
_is_local_confirmation boolean true KG 이니시스 조회 API 가 아닌 로컬 저장 승인/입금 정보로 구성된 결과인지 여부. CBT 응답에만 포함
_local_notice string CBT 거래는 한국 INIAPI 거래조회 대상이 아니므로 저장된 승인/입금 확인 정보로 표시됩니다. 로컬 확인 결과임을 알리는 안내 문구. CBT 응답에만 포함
_local_is_escrow boolean false 로컬 결제 레코드(ecommerce_order_payments.is_escrow) 기준 에스크로 결제 여부
_pay_method string Card KG 이니시스 결제수단 원본 코드 (Card/VBank/DirectBank/HPP/EasyPay/CVS 등)
_base_pay_method_label string 신용카드 결제수단 코드의 한국어 라벨 (미매핑 시 코드 원문, 없으면 -)
_embedded_pg_provider string | null kakaopay 간편결제 등에서 내부 결제사업자 코드 (없으면 null)
_embedded_pg_provider_label string | null 카카오페이 내부 결제사업자의 한국어 라벨 (없으면 null)
_pay_method_label string 카카오페이 (신용카드) 화면 표시용 최종 결제수단 라벨. 내부 결제사업자가 있으면 사업자 (기본수단) 형태
_auth_code string | null 30001234 승인번호 (카드 applNum 등)
_auth_date string | null 2026-06-19 13:58:55 승인 일시 (YYYY-MM-DD HH:MM:SS)
_total_price string | null 39000 결제(승인) 금액
_currency string WON 결제 통화. KG 국내 거래는 WON, CBT 거래는 JPY 등
_moid string | null 20260619-1358556131 주문번호(MOID)
_buyer_name string | null 홍길동 구매자 이름
_buyer_email string | null buyer@example.com 구매자 이메일
_buyer_tel string | null 01012345678 구매자 연락처
_status string | null 0 KG 이니시스 거래 상태 값 (원본 status)
_cancel_price string | null 39000 취소 금액 (취소 이력이 있는 경우)
_cancel_date string | null 2026-06-20 10:12:00 취소 일시
_part_cancel_list array [] 부분취소 이력 배열. 각 항목은 price / date / msg / tid
_card_name string | null 신한카드 카드사명
_card_num string | null 123456******7890 마스킹된 카드번호
_card_code string | null 03 카드사 코드
_card_quota string | null 일시불 할부 개월 표시값 (0 → 일시불, 그 외 N개월)
_card_interest string | null 0 무이자 여부 원본 값 (CBT 응답에서는 항상 null)
_vbank_num string | null 56212345678901 가상계좌 번호 (CBT 편의점결제는 접수번호)
_vbank_bank_code string | null 88 가상계좌 은행 코드
_vbank_bank_name string | null 신한(통합)은행 가상계좌 은행명. 미제공 시 은행 코드로 매핑
_vbank_holder string | null 홍길동 가상계좌 예금주명
_vbank_expire_date string | null 2026-06-20 08:59:59 가상계좌 입금 기한(KST). 로컬 vbank_due_at 이 있으면 그 값을 KST 로 변환해 사용
_vbank_status string | null 1 가상계좌 입금 상태 값
_vbank_paid_at string | null 2026-06-19 17:03:11 가상계좌 입금 완료 일시
_bank_code string | null 04 계좌이체 은행 코드
_bank_name string | null 국민은행 계좌이체 은행명. 미제공 시 은행 코드로 매핑
_bank_acnt_num string | null 12345678901234 계좌이체 출금 계좌번호
_hpp_num string | null 01012345678 휴대폰 결제 번호
_hpp_corp string | null SKT 휴대폰 결제 통신사
_escrow_status string | null 1 에스크로 상태 값
_escrow_confirm string | null 2026-06-21 09:00:00 에스크로 구매확정 일시
_inquiry_at string 2026-06-19 14:02:31 이 조회를 수행한 서버 시각
_cbt_cvs object | null null 일본 편의점결제(CVS) 거래일 때의 상세 상태. status / last_notify_at / last_notify_result / last_notify_reason / last_recheck_at / last_recheck_result / expired_at / expiry_reason / notify_history(최대 10건). CBT 응답에만 포함

응답 예시

HTTP/1.1 200
{
    "success": true,
    "message": "성공적으로 처리되었습니다.",
    "data": {
        "resultCode": "0000",
        "resultMsg": "정상처리",
        "tid": "StdpayCARDSIRSOFT001202606191358556131",
        "_is_test_mode": true,
        "_local_is_escrow": false,
        "_pay_method": "Card",
        "_base_pay_method_label": "신용카드",
        "_embedded_pg_provider": null,
        "_embedded_pg_provider_label": null,
        "_pay_method_label": "신용카드",
        "_auth_code": "30001234",
        "_auth_date": "2026-06-19 13:58:55",
        "_total_price": "39000",
        "_currency": "WON",
        "_moid": "20260619-1358556131",
        "_buyer_name": "홍길동",
        "_buyer_email": "buyer@example.com",
        "_buyer_tel": "01012345678",
        "_status": "0",
        "_cancel_price": null,
        "_cancel_date": null,
        "_part_cancel_list": [],
        "_card_name": "신한카드",
        "_card_num": "123456******7890",
        "_card_code": "03",
        "_card_quota": "일시불",
        "_card_interest": null,
        "_vbank_num": null,
        "_vbank_bank_code": null,
        "_vbank_bank_name": null,
        "_vbank_holder": null,
        "_vbank_expire_date": null,
        "_vbank_status": null,
        "_vbank_paid_at": null,
        "_bank_code": null,
        "_bank_name": null,
        "_bank_acnt_num": null,
        "_hpp_num": null,
        "_hpp_corp": null,
        "_escrow_status": null,
        "_escrow_confirm": null,
        "_inquiry_at": "2026-06-19 14:02:31"
    }
}

에러 응답

상태코드 의미 발생 조건
401 Unauthenticated 유효한 Bearer 토큰이 없거나 만료된 경우
403 Forbidden 요구 권한(sirsoft-ecommerce.orders.read)이 없는 경우
422 Unprocessable Entity tid 가 검증 규칙(필수, 문자열, 최대 100자)을 위반한 경우 (error.errors.tid 에 표준 validation 메시지 — 배열 주입도 문자열 규칙이 차단)
502 Bad Gateway KG 이니시스 조회 API 호출 실패(HTTP 오류·타임아웃 등) 시

설명

거래번호(TID)를 직접 입력받아 KG 이니시스 거래 상태를 조회하고 화면 표시용으로 보강해 반환하는 관리자 엔드포인트입니다. 로컬 결제 레코드(ecommerce_order_payments)에서 결제 시점 MID·테스트 모드·에스크로 여부를 해석해 해당 자격증명으로 KgInicisApiService::queryTransaction() 을 호출하며, 응답을 카드/가상계좌/간편결제/취소 이력 등 상세 필드로 정규화하고 은행 코드→은행명·할부 개월·날짜 포맷을 변환합니다. 일본 CBT 거래(TID INIJPG prefix 또는 통화 JPY)는 한국 INIAPI 조회 대상이 아니므로 저장된 로컬 승인/입금 확인 정보로 결과를 구성합니다. 관리자 인증(auth:sanctum)과 sirsoft-ecommerce.orders.read 권한이 필요하며, tid 는 TransactionQueryRequest 가 필수·문자열·최대 100자(국내 30자·해외 CBT 40자 형식 수용, 저장 컬럼 기준)로 검증해 위반 시 표준 validation 422, 토큰 누락·만료 401, 권한 부족 403, KG 이니시스 조회 실패 시 502 로 응답합니다.