※ 결제정보 검증기능 적용 안내


Note: 아래 검증절차를 적용하지 않아 발생하는 결제정보 위변조 관련 사고에 대해서는 NHN KCP에서 책임을 질 수 없는 부분이오니
반드시 결제 연동 시 검증절차를 확인해주시기 바랍니다.

가맹점에서는 결제정보 검증을 위해 실제 처리해야할 결제수단과 결제금액을, 승인요청시에 아래 변수에 맞게 넘겨주시기 바랍니다.


1. 결제금액검증 파라미터 : ordr_mony

실제 결제요청 금액


2. 결제수단 검증 파라미터 : pay_type

신용카드 : PACA

계좌이체 : PABK

가상계좌 : PAVC

휴 대 폰 : PAMC


3. 주문번호 검증 파라미터 : ordr_no

실제 결제요청 주문번호

※ 소스 적용 방법

[pp_cli 라이브러리 통신 모듈]

pp_ax_hub 또는 pp_cli_hub 페이지 수정. (jsp 샘플예시)

jsp 샘플 외에 다른 언어처리에 대해서는 support@kcp.co.kr로 문의주시면 원하는 언어에 대해 안내드립니다.



if ( req_tx.equals( "pay" ) )
{
   c_PayPlus.mf_set_enc_data( f_get_parm( request.getParameter( "enc_data" ) ),
                             f_get_parm( request.getParameter( "enc_info" ) ) );

   /* ordr_data에 결제 유효성 검증 */
   int ordr_data_set_no;
   ordr_data_set_no = c_PayPlus.mf_add_set( "ordr_data" );

   c_PayPlus.mf_set_us( ordr_data_set_no, "ordr_mony", "1004" ); // 실제 결제될 금액이 1004원이라면  ** 결제금액 유효성 검증 **
   c_PayPlus.mf_set_us( ordr_data_set_no, "pay_type", "PACA" ); // 실제 결제할 수단이 신용카드라면 PACA세팅 ** 결제수단 유효성 검증 **
   //c_PayPlus.mf_set_us( ordr_data_set_no, "ordr_no", "TEST123456789" ); // 실제 처리할 주문번호가 TEST123456789라면 ** 주문번호검증 **
}
   /*  ordr_no의 경우 결제창으로 전달하는 주문번호와
       실제 승인요청때 처리하는 주문번호가 동일해야하는 경우 검증처리바랍니다.
       다를경우 주문번호 검증은 하지 않으시기 바랍니다.                       */

                              

결제창에서 처리한 결제요청 금액과 ordr_mony 값이 다를 경우,
응답코드 : 8059, 응답메시지 : 포맷에러(지불정보-공통:결제금액 불일치)

결제창에서 처리한 결제수단 및 주문번호 값이 다를 경우,
응답코드 : 8350, 응답메시지 : '결제정보 검증 불일치' 가 리턴됩니다.



[API 통신 모듈]

kcp_api_page 에서 결제 API req파라미터에 추가.


JSONObject json_req = new JSONObject();

   json_req.put("tran_cd", tran_cd);
   json_req.put("site_cd", site_cd);
   json_req.put("kcp_cert_info", kcp_cert_info);
   json_req.put("enc_data", enc_data);
   json_req.put("enc_info", enc_info);
   json_req.put("ordr_mony","1004");  // 실제 결제될 금액이 1004원이라면   ** 결제금액 유효성 검증 **
   json_req.put("pay_type", "PACA"); // 실제 결제할 수단이 신용카드라면 PACA세팅 ** 결제수단 유효성 검증 **
   //json_req.put("ordr_no", "TEST123456789"); // 실제 처리할 주문번호가 TEST123456789라면 ** 주문번호검증 **

   /*  ordr_no의 경우 결제창으로 전달하는 주문번호와
       실제 승인요청때 처리하는 주문번호가 동일해야하는 경우 검증처리바랍니다.
       다를경우 주문번호 검증은 하지 않으시기 바랍니다.                       */
                              

결제창에서 처리한 결제요청 금액과 ordr_mony 값이 다를 경우,
응답코드 : S006, 응답메시지 : 거래금액 불일치 발생

결제창에서 처리한 결제수단 및 주문번호 값이 다를 경우,
응답코드 : 8350, 응답메시지 : '결제정보 검증 불일치' 가 리턴됩니다.

※ 결제금액과 결제수단은 필수로 적용해주시기 바라며, ordr_no (주문번호)도 검증에 사용하시도록 권장드립니다.
자세한 문의는 NHNKCP 기술지원팀 support@kcp.co.kr 로 문의주시기 바랍니다.
감사합니다.

전체 소스 보기 ▼



<%
    /* =  지불 요청 정보 설정                                                          = */
    String req_tx         = f_get_parm( request.getParameter( "req_tx"         ) ); // 요청 종류
    String tran_cd        = f_get_parm( request.getParameter( "tran_cd"        ) ); // 처리 종류
    String ordr_idxx      = f_get_parm( request.getParameter( "ordr_idxx"      ) ); // 쇼핑몰에서 결제창으로 전달한 주문번호
    String good_name      = f_get_parm( request.getParameter( "good_name"      ) ); // 상품명
    String res_cd         = "";                                                     // 응답코드
    String res_msg        = "";                                                     // 응답 메세지
    String tno            = f_get_parm( request.getParameter( "tno"            ) ); // KCP 거래 고유 번호
    String use_pay_method = f_get_parm( request.getParameter( "use_pay_method" ) ); // 결제 방법
    String bSucc          = "";                                                     // 업체 DB 처리 성공 여부

    /* =   인스턴스 생성 및 초기화(변경 불가)                                           = */
    J_PP_CLI_N c_PayPlus = new J_PP_CLI_N();
    c_PayPlus.mf_init( "", g_conf_gw_url, g_conf_gw_port, g_conf_tx_mode, g_conf_log_dir );
    c_PayPlus.mf_init_set();
    /* =   인스턴스 생성 및 초기화 END                                                 = */

    /* =   처리 요청 정보 설정                                                        = */
    if ( req_tx.equals( "pay" ) )
    {
            c_PayPlus.mf_set_enc_data( f_get_parm( request.getParameter( "enc_data" ) ),
                                       f_get_parm( request.getParameter( "enc_info" ) ) );
            int ordr_data_set_no;
            ordr_data_set_no = c_PayPlus.mf_add_set( "ordr_data" );

            c_PayPlus.mf_set_us( ordr_data_set_no, "ordr_mony", "1004" ); // 실제 결제될 금액이 1004원이라면  ** 결제금액 유효성 검증 **
            c_PayPlus.mf_set_us( ordr_data_set_no, "pay_type", "PACA" ); // 실제 결제할 수단이 신용카드라면 PACA로 세팅 ** 결제수단 유효성 검증 **
            // c_PayPlus.mf_set_us( ordr_data_set_no, "ordr_no", "TEST123456789" ); // 실제 처리할 주문번호가 TEST123456789라면 ** 주문번호검증 **

    }

    /* =   처리 요청 정보 설정 END                                                    = */

    /* =   실행                                                                     = */
    if ( tran_cd.length() > 0 )
    {
        c_PayPlus.mf_do_tx( g_conf_site_cd, g_conf_site_key, tran_cd, "", ordr_idxx, g_conf_log_level, "0" );
    }
    else
    {
        c_PayPlus.m_res_cd  = "9562";
        c_PayPlus.m_res_msg = "연동 오류|tran_cd값이 설정되지 않았습니다.";
    }

        res_cd  = c_PayPlus.m_res_cd;  // 결과 코드
        res_msg = c_PayPlus.m_res_msg; // 결과 메시지
    /* =   실행 END                                                               = */

%>

                            


<%
    /*=---------------------------  요청정보  --------------------------------= */
    String tran_cd              = f_get_parm( request.getParameter( "tran_cd"  )); // 요청타입
    String site_cd              = f_get_parm( request.getParameter( "site_cd"  )); // 사이트코드
    // 인증서정보(직렬화)
    String kcp_cert_info        = "발급받은 인증서 정보";
    String enc_data             = f_get_parm( request.getParameter( "enc_data" )); // 암호화 인증데이터
    String enc_info             = f_get_parm( request.getParameter( "enc_info" )); // 암호화 인증데이터
    /* = -------------------------------------------------------------------------- = */
    String use_pay_method       = f_get_parm( request.getParameter( "use_pay_method" )); // 결제 방법
    String ordr_idxx            = f_get_parm( request.getParameter( "ordr_idxx" )); // 쇼핑몰에서 결제창으로 전달한 주문번호

    JSONObject json_req = new JSONObject();

    json_req.put("tran_cd", tran_cd);
    json_req.put("site_cd", site_cd);
    json_req.put("kcp_cert_info", kcp_cert_info);
    json_req.put("enc_data", enc_data);
    json_req.put("enc_info", enc_info);
    json_req.put("ordr_mony","1004"); // 실제 결제될 금액이 1004원이라면   ** 결제금액 유효성 검증 **
    json_req.put("pay_type", "PACA"); // 실제 결제할 수단이 신용카드라면 PACA로 세팅 ** 결제수단 유효성 검증 **
    //json_req.put("ordr_no","TEST123456789"); // 실제 처리할 주문번호가 TEST123456789라면 ** 주문번호검증 **

    String temp_req_data = json_req.toString();
    String req_data = temp_req_data.replace(",",",\r\n");

    String inputLine = null;
    StringBuffer outResult = new StringBuffer();
%>