본문 바로가기
API

[아임포트] 휴대폰 본인인증 API 연동

by 원동호 2021. 3. 17.
반응형

개발 환경 : Laravel Framework, php

 

상세 API 정보는 아래를 참고 하길 바란다.

 

docs.iamport.kr/tech/mobile-authentication

 

[가이드] 휴대폰 본인인증

휴대폰 본인인증 연동하기 휴대폰 본인인증 서비스란 본인 명의로 개통한 휴대폰을 이용하여 최소한의 개인정보를 입력하는 인증 절차를 거쳐 본인 여부와 입력한 정보의 정확성을 확인하여

docs.iamport.kr

 

1. 아임포트 라이브러리 추가하기

jQuery 기반이기 때문에 jQuery라이브러리를 추 가해줘야 한다.

<!-- jQuery -->
<script type="text/javascript" src="https://code.jquery.com/jquery-1.12.4.min.js" ></script>
  <!-- iamport.payment.js -->
<script type="text/javascript" src="https://cdn.iamport.kr/js/iamport.payment-1.1.5.js"></script>

 

 

2. 가맹점 식별코드 추가
let IMP = window.IMP; // <- 생략해도 무방함. 
IMP.init("본인가맹점고유번호"); 

init function 인자로 본인 가맹점 고유번호를 입력한다.

 

3. 인증창 호출
IMP.certification(
//파라미터 생략시 빈 object는 입력해줘야한것 같음. 제거 시 모듈 동작 안함.
        {},
        function (rsp) {
            //본인인증 성공 프로세스
            if (rsp.success) {
            
            }
            //본인인증 실패 프로세스
            else{
                alert("인증에 실패하였습니다. 에러 내용: " +  rsp.error_msg);
            }
        }
    );

추가 가능한 파라미터도 있으니 docs를 참고하여 필요한 파라미터가 있다면, 추가해 주면 된다.

파라미터 사용 안할 시 빈 object를 입력해줘야 할 것 같다. 제거 시 모듈 동작 안하는 현상 발생함.

4. 본인 웹서버에 imp_uid(고유번호) 전달하기
IMP.certification(
  function (rsp) { 
  	//인증 성공시
    if (rsp.success) { 
      // jQuery로 본인 웹서버로 요청
      $.ajax({
      	type: 'POST',
       	url: '인증정보 조회할 본인 웹서버 API 경로',
       	dataType: 'json',
       	data: {'imp_uid' : rsp.imp_uid},
      });
    }else{
      alert("인증에 실패하였습니다. 에러 내용: " +  rsp.error_msg);
    }
  });
  
  
  
  //callback rsp 인자 값
 {
      error_code: null
      error_msg: null
      imp_uid: "고유인증값"
      merchant_uid: "주문번호(신경안써도됌)"
      pg_provider: "danal" //PG사
      pg_type: "certification" //PG타입(본인인증)
      success: true // 성공
}

 

5. 서버에서 인증 정보 조회하기

인증 정보를 조회할 route를 추가해 준다.

※본인 인증 후 정보 조회 시 휴대폰 번호 값을 response로 받을려면 아임포트 측에 별도로 신청을

해줘야 값을 가져올 수 있음!!

//web.php
Route::post('/iamport/certificate', [Controller::class,'certificate']);

//Controller
function certificate(Request $request){
      //아임포트 관리자 페이지의 시스템설정->내정보->REST API 키 값을 입력한다.
      $imp_key = "REST API 키";
      //아임포트 관리자 페이지의 시스템설정->내정보->REST API Secret 값을 입력한다.
      $imp_secret = "REST API Secret";
      //본인인증 모듈을 호출한 페이지에서 ajax로 넘겨받은 imp_uid값을 저장한다.
      $imp_uid = $request->input('imp_uid');
    
      try{
        $getToken  = Http::withHeaders([
          'Content-Type' => 'application/json'
        ])->post('https://api.iamport.kr/users/getToken', [
          'imp_key' => $imp_key,
          'imp_secret' => $imp_secret,
        ]);
        /**
         * 본인인증한 사람의 정보를 얻기 위해서는 아임포트 API 통신을해야 한다.
         * api access_key를 얻기위해 아임포트에서 제공되는 imp_key,imp_secret을 이용하여
         * 아래 api로 token을 얻는다.
         * return 값이 json이므로 decode하여 원하는 값을 들고온다.
        */
        $getTokenJson = json_decode($getToken, true);
        
        //API TOKEN
        $access_token = $getTokenJson['response']['access_token'];
        $getCertifications=Http::withHeaders([
          'Authorization' => $access_token
        ])->get('https://api.iamport.kr/certifications/'.$imp_uid);

        $getCertificationsJson = json_decode($getCertifications,true);
        $responseData = $getCertificationsJson['response'];

        $result = ['code'=>200, 'message'=>'success','data'=>$responseData];
      }catch(Exception $e){
        $result = [
          'code' => 410,
          'message' => $e->getMessage()
        ];
      }

      return response()->json($result);
      
    }
    
    //$responseData 상세 값
    
   {
    "birth":, //무슨 표기법으로 표시한지 모르겠음.
    "birthday":"YYYY-MM-DD",
    "carrier":"SKT", //통신사
    "certified":true, //인증 성공 여부
    "certified_at":인증날짜,
    "foreigner":false, //외국인 여부
    "gender":"male", // 성별
    "imp_uid":"인증고유값",
    "merchant_uid":"신경안써도되는값",
    "name":"이름",
    "origin":"요청URL",
    "pg_provider":"danal", //PG사
    "pg_tid":"요청일시",
    "phone":"휴대폰번호",
    "unique_in_site":"뭔지 모르겠음",
    "unique_key":"뭔지 모르겠음"
    }

위 값을 파싱하여 본인인증에 사용하던, 계정 중복을 체크하던 필요한 부분에 사용하면 될 것 같음.

본인은 웹뷰로 데이터를 넘겨주기만 하면 되기때문에 데이터 전체를 return 해줬음.

 

document에 상세히 적혀 있어서 연동하는 부분은 어렵지 않았다!

 

 

반응형

댓글