공개 (답변 중복 등록)/(문의 삭제 시 답변 잔존) 수정과 동형 결함 전수 해소.
- 문의 답변 단일성: 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파일)
7.2 KiB
Identity API 레퍼런스
소유: plugin
sirsoft-verification_nhnkcp· 생성:php artisan api:docgen(실측 기반). @generated 블록은 재생성 시 갱신되며, 사람이 작성한 설명은 보존됩니다.
TL;DR (5초 요약)
1. 마이페이지 본인확인 카드 조회 API 1개 + 인증기관 콜백/결과 전달용 웹 엔드포인트 2개
2. 카드 API 는 로그인 사용자 본인의 정보만, 그것도 마스킹된 형태로만 반환한다
3. CI/DI 등 동일인 식별값은 어떤 응답에도 포함되지 않는다
4. 콜백/브리지는 브라우저·인증기관이 호출하는 화면 흐름용이라 JSON API 가 아니다
5. 본인확인 시작(challenge)·검증은 코어 IDV API(/api/identity/*)를 그대로 사용한다
GET /api/plugins/sirsoft-verification_nhnkcp/me/identity/nhnkcp
- 라우트명:
api.plugins.sirsoft-verification_nhnkcp.me.identity.nhnkcp.show - 컨트롤러:
Plugins\Sirsoft\VerificationNhnkcp\Http\Controllers\MyKcpIdentityShowController@show - 인증/권한:
auth:sanctum+check.user_status:active(로그인 + 활성 상태 필수)
요청 파라미터
요청 파라미터 없음.
요청 예시
GET /api/plugins/sirsoft-verification_nhnkcp/me/identity/nhnkcp HTTP/1.1
Host: g7_3.dev
Accept: application/json
Authorization: Bearer {token}
응답 필드 (data 내부)
| 필드 | 타입 | 예시 | 설명 |
|---|---|---|---|
method |
string | NHN KCP 휴대폰 본인확인 |
인증 수단 표시명 (요청 로케일로 번역) |
verified_at |
string|null | 2026-07-28 14:32:09 |
최종 인증 시각. 재인증 시 그 시각으로 갱신 |
name_masked |
string | 홍*동 |
실명 마스킹 (성과 끝 글자만 노출). 두 글자 이름은 김*, 한 글자 이름은 가릴 자리가 없어 원문 그대로 |
birthday_masked |
string | 1990-**-** |
생년월일 마스킹 (연도만 노출). 생년월일 미수신 시 빈 문자열 |
phone_masked |
string | 010-****-5678 |
휴대폰 마스킹 (앞 3자리 + 뒤 4자리) |
is_adult |
boolean | true |
생년월일 기준 만 19세 이상 여부 |
is_adult_known |
boolean | true |
성인 여부를 판정할 수 있었는지. false 면 is_adult 는 "미성년"이 아니라 "확인 불가"를 뜻한다 |
is_foreigner |
boolean | false |
외국인 여부 (KCP local_code 기준) |
인증 내역이 없으면 data 는 null 이다 (화면은 빈 상태 카드를 표시).
CI/DI 및 그 해시, 평문 이름·휴대폰·생년월일은 응답에 포함되지 않는다.
is_adult_known 이 false 인 경우는 인증기관 응답에 생년월일이 없었던 때다. 이때 화면은
생년월일을 「제공되지 않음」, 성인 여부를 「확인 불가」로 표시해야 하며, 성인 확인이 필요한
기능은 계속 차단된다(is_adult 는 false 로 내려간다).
응답 예시
{
"success": true,
"message": "요청이 성공적으로 처리되었습니다.",
"data": {
"method": "NHN KCP 휴대폰 본인확인",
"verified_at": "2026-07-28 14:32:09",
"name_masked": "홍*동",
"birthday_masked": "1990-**-**",
"phone_masked": "010-****-5678",
"is_adult": true,
"is_adult_known": true,
"is_foreigner": false
}
}
생년월일을 받지 못한 경우:
{
"success": true,
"message": "요청이 성공적으로 처리되었습니다.",
"data": {
"method": "NHN KCP 휴대폰 본인확인",
"verified_at": "2026-07-29 01:45:36",
"name_masked": "홍*동",
"birthday_masked": "",
"phone_masked": "010-****-5678",
"is_adult": false,
"is_adult_known": false,
"is_foreigner": false
}
}
인증 내역이 없는 경우:
{
"success": true,
"message": "요청이 성공적으로 처리되었습니다.",
"data": null
}
에러 응답
| 상태 | 조건 | 비고 |
|---|---|---|
| 401 | 비로그인 요청 | 코어 인증 미들웨어가 차단 |
| 403 | 정지·탈퇴 등 비활성 사용자 | check.user_status:active |
설명
마이페이지 본인확인 카드가 사용하는 조회 API 다. 사용자가 자기 본인확인 정보를 확인할 수 있게 하되 (개인정보 열람권), 화면에 필요한 최소 정보만 마스킹해 내려준다. 다른 사용자의 정보를 조회할 수 있는 경로는 없다 — 대상은 항상 요청자 본인이다.
인증 흐름용 웹 엔드포인트
아래 두 경로는 JSON API 가 아니라 브라우저·인증기관이 직접 호출하는 화면 흐름의 일부다. 클라이언트가 임의로 호출하는 용도가 아니므로 요청 규격은 KCP 표준창 규약을 따른다.
POST /plugins/sirsoft-verification_nhnkcp/plugin/nhnkcp/callback
- 라우트명:
web.plugins.sirsoft-verification_nhnkcp.plugin.verification_nhnkcp.callback - 호출 주체: KCP 표준창 (거래등록 시 지정한
Ret_URL) - 인증/권한: 없음. 외부 form POST 이므로 CSRF 검사에서 면제된다.
| 파라미터 | 타입 | 설명 |
|---|---|---|
res_cd |
string | 표준창 결과 코드. 0000 정상 / 9999 사용자 취소 / 그 외 실패 |
res_msg |
string | 결과 메시지 (URL 인코딩되어 올 수 있어 서버가 디코딩) |
reg_cert_key |
string | 거래등록 시 발급된 거래키. 거래 역조회 1순위 |
param_opt_1 |
string | 거래등록 시 우리가 실어 보낸 challenge 식별자. 거래키 부재 시 역조회 폴백 |
응답은 항상 302 redirect 이며, 결과는 아래 브리지 경로로 전달된다. 개인정보는 주소에 싣지 않는다
(성공 시 verification_token + challenge_id, 실패 시 identity_error 만 전달).
GET /plugins/sirsoft-verification_nhnkcp/plugin/nhnkcp/bridge
- 라우트명:
web.plugins.sirsoft-verification_nhnkcp.plugin.verification_nhnkcp.bridge - 호출 주체: 콜백 처리 후의 브라우저 (표준창 팝업 또는 전환된 페이지)
- 인증/권한: 없음 (전달값만 사용)
| 파라미터 | 타입 | 설명 |
|---|---|---|
verification_token |
string | 인증 성공 시 발급된 1회용 토큰 |
challenge_id |
string | 대응하는 본인확인 요청 식별자 |
identity_error |
string | 실패 시 사유 코드 (9999, NOT_ADULT, DUPLICATE, REMOTE_CALL_FAILED 등) |
identity_error_message |
string | 실패 시 사유 메시지 (콜백 Resolver 가 발신 — kginicis 브리지에는 없는 본 플러그인 고유 필드) |
네 쿼리 파라미터는 모두 KcpBridgeRequest 가 string 형식으로 검증한다 — 배열 주입
(?verification_token[]=x)은 422 로 차단된다. 종전에는 (string) 캐스팅이 배열을 "Array"
문자열로 바꿔 브리지 payload 에 유입시킬 수 있었다. 길이 상한은 두지 않는다 (토큰 길이가
코어 발급 정책에 종속되기 때문).
응답은 HTML 이며 두 갈래로 동작한다. 부모창이 있으면(PC 팝업) 동일 origin 으로 결과를 전달하고 창을 닫는다. 부모창이 없으면(모바일 페이지 전환) 보관해 둔 원래 주소로 결과를 붙여 되돌아간다.