전자결제 [KCP] [PHP] UTF-8 웹페이지에 사용하기
페이지 정보
본문
KCP 결제방식이 2016년도에 웹표준 결제창이 도입되면서 UTF-8 일때의 처리내용이 변경되었습니다.
본 강좌는 KCP에서 공식 배포하는 샘플을 기준으로 작성하였습니다.
KCP
├ bin
│ ├ pp_cli ... FTP 업로드시 binary mode 로 업로드
│ ├ pp_cli__linux_32__2_14.tar.gz
│ └ pp_cli__linux_64__2_14.tar.gz
│
├ cfg
│ └ site_conf_inc.php ... 사이트코드, bin 경로 등 변경
│
├ mobile_sample ... Mobile 관련 결제가 진행됩니다.
│ ├ css
│ │ ├ btn_receipt.png
│ │ ├ btn_vcn.png
│ │ ├ style.css ... utf-8 변경
│ │ └ style_mobile.css ... utf-8 변경
│ ├ js
│ │ ├ approval_key.js ... utf-8 변경
│ │ └ KCPComLibrary.php ... utf-8 변경
│ ├ app.zip
│ ├ KCPPaymentService.wsdl
│ ├ order_approval.php ... utf-8 변경
│ ├ order_mobile.php ... utf-8 변경 / setlocale 추가 / form에 accept-charset 추가
│ ├ pp_cli_hub.php ... utf-8 변경 / setlocale 추가 / iconv 적용
│ ├ pp_cli_hub_lib.php ... utf-8 변경
│ ├ real_KCPPaymentService.wsdl
│ └ result.php ... utf-8 변경
│
├ sample ... PC 관련 결제가 진행됩니다.
│ ├ css
│ │ ├ index.css ... utf-8 변경
│ │ ├ sample.css ... utf-8 변경
│ │ └ style.css ... utf-8 변경
│ ├ img
│ │ └ ...
│ ├ common_return.php
│ ├ order.php ... utf-8 변경 / setlocale 추가 / form에 accept-charset 추가
│ ├ pp_cli_hub.php ... utf-8 변경 / setlocale 추가 / iconv 적용
│ ├ pp_cli_hub_lib.php ... utf-8 변경
│ └ result.php ... utf-8 변경 / setlocale 추가
│
└ index.html
Ⅰ. 공통
1. bin 폴더에 pp_cli 업로드 ( 꼭 Binary 모드로 전송 )
32bit 서버는 pp_cli__linux_32__2_14.tar.gz 압축푼 pp_cli 업로드
64bit 서버는 pp_cli__linux_64__2_14.tar.gz 압축푼 pp_cli 업로드
2. cfg / site_conf_inc.php 중요 변경사항
utf-8 로 변경
BIN 절대경로 입력 (bin전까지)
g_conf_site_cd, g_conf_site_key 설정
사이트명 설정(한글 불가) : 반드시 영문자로 설정
Ⅱ. PC 모드 KCP 결제
결제후 결과값의 한글이 깨진 모습
UTF-8 처리후 한글이 정상적으로 보이는 화면
1. utf-8 로 변경
sample / order.php
sample / pp_cli_hub.php
sample / pp_cli_hub_lib.php
sample / result.php
smaple / css / index.css , sample.css , style.css
2. sample / order.php , pp_cli_hub.php , result.php 1~2줄 setlocale 코드 추가
<?
를 아래와 같이 변경
<?php
// locale ko_KR.euc-kr 로 설정
setlocale(LC_CTYPE, 'ko_KR.euc-kr');
3. sample / order.php 142줄
<form name="order_info" method="post">
를 아래와 같이 변경
<form name="order_info" method="post" accept-charset="euc-kr">
4. sample / order.php 408~409줄 고객 아이디 설정
/* 가맹점에서 관리하는 고객 아이디 설정을 해야 합니다. 상품권 결제 시 반드시 입력하시기 바랍니다.
<input type="hidden" name="shop_user_id" value=""/> */
를 아래와 같이 변경해서 쇼핑몰의 shop_user_id 가 노출되도록 수정
/* 가맹점에서 관리하는 고객 아이디 설정을 해야 합니다. 상품권 결제 시 반드시 입력하시기 바랍니다. */
<input type="hidden" name="shop_user_id" value="<?php //echo $member['mb_id']; // ex.그누보드 ?>"/>
5. sample / pp_cli_hub.php 132~133줄
/* 1 원은 실제로 업체에서 결제하셔야 될 원 금액을 넣어주셔야 합니다. 결제금액 유효성 검증 */
$c_PayPlus->mf_set_ordr_data( "ordr_mony", "1" );
를 아래와 같이 변경합니다.
/* 1 원은 실제로 업체에서 결제하셔야 될 원 금액을 넣어주셔야 합니다. 결제금액 유효성 검증 */
$c_PayPlus->mf_set_ordr_data( "ordr_mony", $_POST['good_mny'] );
6. sample / pp_cli_hub.php 338줄
$bSucc = ""; // DB 작업 실패 또는 금액 불일치의 경우 "false" 로 세팅
를 아래와 같이 내용 추가
$bSucc = ""; // DB 작업 실패 또는 금액 불일치의 경우 "false" 로 세팅
$res_msg = iconv("EUC-KR", "UTF-8", $res_msg);
$card_name = iconv("EUC-KR", "UTF-8", $card_name);
$good_name = iconv("EUC-KR", "UTF-8", $good_name);
$buyr_name = iconv("EUC-KR", "UTF-8", $buyr_name);
// 주문결과를 디비에 저장하기 Start
include_once "../../common.php"; // 그누보드5 설정
include_once "../../data/dbconfig.php";
$dbconn = mysqli_connect(G5_MYSQL_HOST,G5_MYSQL_USER,G5_MYSQL_PASSWORD,G5_MYSQL_DB);
$shop_order_table = "order_table"; // DB 주문 테이블
$shop_price_field = "price_filed"; // DB 주문가격 필드
$shop_order_field = "order_filed"; // DB 주문번호 필드
$shop_auth_code = "auth_code"; // DB 주문번호 필드
$query = " select {$shop_price_field} from {$shop_order_table} where {$shop_order_field} = '{$ordr_idxx}' ";
$result = mysqli_query($dbconn,$query);
$data = mysqli_fetch_array($result);
$check_price = $data[0];
if ($check_price) {
if ($amount==$check_price) {
if ( $req_tx == "pay" && $res_cd == "0000" ) {
$query = " update {$shop_order_table} set {$shop_auth_code}='{$tno}' where {$shop_order_field} = '{$ordr_idxx}' ";
$result = mysqli_query($dbconn,$query);
}
} else {
$bSucc = "false";
$query = " update {$shop_order_table} set {$shop_auth_code}='결제오류' where orderNumber = '{$ordr_idxx}' ";
$result = mysqli_query($dbconn,$query);
}
}
// 주문결과를 디비에 저장하기 End
Ⅱ. Mobile 모드 KCP 결제
1. utf-8 로 변경
mobile_sample / js / approval_key.js
mobile_sample / js / KCPComLibrary.php
mobile_sample / order_approval.php
mobile_sample / order_mobile.php
mobile_sample / pp_cli_hub.php
mobile_sample / pp_cli_hub_lib.php
mobile_sample / result.php
mobile_sample / css / style.css , style_mobile.css
2. mobile_sample / order_mobile.php , pp_cli_hub.php , result.php 의 2줄에 setlocale 코드 추가
<?
를 아래와 같이 변경
<?php
// locale ko_KR.euc-kr 로 설정
setlocale(LC_CTYPE, 'ko_KR.euc-kr');
3. order_approval.php 에서 charSetType 변경
// 쇼핑몰 페이지에 맞는 문자셋을 지정해 주세요.
$charSetType = "euc-kr"; // UTF-8인 경우 "utf-8"로 설정
를 아래와 같이 변경
// 쇼핑몰 페이지에 맞는 문자셋을 지정해 주세요.
$charSetType = "utf-8"; // UTF-8인 경우 "utf-8"로 설정
4. order_mobile.php 228줄
<form name="order_info" method="post">
를 아래와 같이 변경
<form name="order_info" method="post" accept-charset="euc-kr">
5. order_mobile.php 228줄
<form name="pay_form" method="post" action="pp_cli_hub.php">
를 아래와 같이 변경
<form name="pay_form" method="post" action="pp_cli_hub.php" accept-charset="euc-kr">
6. order_mobile.php 의 script 변경
v_frm.action = PayUrl;
를 아래와 같이 변경
//v_frm.action = PayUrl;
// utf-8 인코딩 방식에 따른 변경 -- Start
if(v_frm.encoding_trans == undefined) {
v_frm.action = PayUrl;
} else {
if(v_frm.encoding_trans.value == "UTF-8") {
v_frm.action = PayUrl.substring(0,PayUrl.lastIndexOf("/")) + "/jsp/encodingFilter/encodingFilter.jsp";
v_frm.PayUrl.value = PayUrl;
} else {
v_frm.action = PayUrl;
}
}
// utf-8 인코딩 방식에 따른 변경 -- End
7. order_mobile.php 에 php 5.4 / 5.5 / 7.x 대응 코드 추가
Notice: Undefined index: req_tx in /home/happyjung/www/kcp_test/mobile_sample.php on line 32
7-1. php.ini 설정을 변경해서 오류를 안보이게 하는 방법
추천하고 싶지 않지만 6-2 방법이 없으면 이렇게라도 해야 정상 이용이 가능합니다.
7-2. 찾는중입니다.
8. order_mobile.php 파일의 위치가 다른 폴더에 존재하는 경우
위와 같은 오류화면이 보이면 아래의 사항을 확인하세요
mobile_sample / js / approval_key.js 와
mobile_sample / order_approval.php 는
반드시 order_mobile.php 와 동일 폴더에 위치를 해야 합니다.
mobile_order.php 가 실행될때 kcp의 결제요청을 approval_key.js 에서 ajax 로 호출하는데 이때 order_approval.php 를 사용합니다.
올바르게 설정된 경우 아래와 같은 화면이 나타납니다.
성공적으로 거래가 등록 되었습니다.
참고자료
https://ncube.net/8841
http://faultnote.tistory.com/343
https://m.blog.naver.com/aramjo/120178428858
본 강좌는 KCP에서 공식 배포하는 샘플을 기준으로 작성하였습니다.
KCP
├ bin
│ ├ pp_cli ... FTP 업로드시 binary mode 로 업로드
│ ├ pp_cli__linux_32__2_14.tar.gz
│ └ pp_cli__linux_64__2_14.tar.gz
│
├ cfg
│ └ site_conf_inc.php ... 사이트코드, bin 경로 등 변경
│
├ mobile_sample ... Mobile 관련 결제가 진행됩니다.
│ ├ css
│ │ ├ btn_receipt.png
│ │ ├ btn_vcn.png
│ │ ├ style.css ... utf-8 변경
│ │ └ style_mobile.css ... utf-8 변경
│ ├ js
│ │ ├ approval_key.js ... utf-8 변경
│ │ └ KCPComLibrary.php ... utf-8 변경
│ ├ app.zip
│ ├ KCPPaymentService.wsdl
│ ├ order_approval.php ... utf-8 변경
│ ├ order_mobile.php ... utf-8 변경 / setlocale 추가 / form에 accept-charset 추가
│ ├ pp_cli_hub.php ... utf-8 변경 / setlocale 추가 / iconv 적용
│ ├ pp_cli_hub_lib.php ... utf-8 변경
│ ├ real_KCPPaymentService.wsdl
│ └ result.php ... utf-8 변경
│
├ sample ... PC 관련 결제가 진행됩니다.
│ ├ css
│ │ ├ index.css ... utf-8 변경
│ │ ├ sample.css ... utf-8 변경
│ │ └ style.css ... utf-8 변경
│ ├ img
│ │ └ ...
│ ├ common_return.php
│ ├ order.php ... utf-8 변경 / setlocale 추가 / form에 accept-charset 추가
│ ├ pp_cli_hub.php ... utf-8 변경 / setlocale 추가 / iconv 적용
│ ├ pp_cli_hub_lib.php ... utf-8 변경
│ └ result.php ... utf-8 변경 / setlocale 추가
│
└ index.html
Ⅰ. 공통
1. bin 폴더에 pp_cli 업로드 ( 꼭 Binary 모드로 전송 )
32bit 서버는 pp_cli__linux_32__2_14.tar.gz 압축푼 pp_cli 업로드
64bit 서버는 pp_cli__linux_64__2_14.tar.gz 압축푼 pp_cli 업로드
2. cfg / site_conf_inc.php 중요 변경사항
utf-8 로 변경
BIN 절대경로 입력 (bin전까지)
g_conf_site_cd, g_conf_site_key 설정
사이트명 설정(한글 불가) : 반드시 영문자로 설정
Ⅱ. PC 모드 KCP 결제
결제후 결과값의 한글이 깨진 모습
UTF-8 처리후 한글이 정상적으로 보이는 화면
1. utf-8 로 변경
sample / order.php
sample / pp_cli_hub.php
sample / pp_cli_hub_lib.php
sample / result.php
smaple / css / index.css , sample.css , style.css
2. sample / order.php , pp_cli_hub.php , result.php 1~2줄 setlocale 코드 추가
<?
를 아래와 같이 변경
<?php
// locale ko_KR.euc-kr 로 설정
setlocale(LC_CTYPE, 'ko_KR.euc-kr');
3. sample / order.php 142줄
<form name="order_info" method="post">
를 아래와 같이 변경
<form name="order_info" method="post" accept-charset="euc-kr">
4. sample / order.php 408~409줄 고객 아이디 설정
/* 가맹점에서 관리하는 고객 아이디 설정을 해야 합니다. 상품권 결제 시 반드시 입력하시기 바랍니다.
<input type="hidden" name="shop_user_id" value=""/> */
를 아래와 같이 변경해서 쇼핑몰의 shop_user_id 가 노출되도록 수정
/* 가맹점에서 관리하는 고객 아이디 설정을 해야 합니다. 상품권 결제 시 반드시 입력하시기 바랍니다. */
<input type="hidden" name="shop_user_id" value="<?php //echo $member['mb_id']; // ex.그누보드 ?>"/>
5. sample / pp_cli_hub.php 132~133줄
/* 1 원은 실제로 업체에서 결제하셔야 될 원 금액을 넣어주셔야 합니다. 결제금액 유효성 검증 */
$c_PayPlus->mf_set_ordr_data( "ordr_mony", "1" );
를 아래와 같이 변경합니다.
/* 1 원은 실제로 업체에서 결제하셔야 될 원 금액을 넣어주셔야 합니다. 결제금액 유효성 검증 */
$c_PayPlus->mf_set_ordr_data( "ordr_mony", $_POST['good_mny'] );
6. sample / pp_cli_hub.php 338줄
$bSucc = ""; // DB 작업 실패 또는 금액 불일치의 경우 "false" 로 세팅
를 아래와 같이 내용 추가
$bSucc = ""; // DB 작업 실패 또는 금액 불일치의 경우 "false" 로 세팅
$res_msg = iconv("EUC-KR", "UTF-8", $res_msg);
$card_name = iconv("EUC-KR", "UTF-8", $card_name);
$good_name = iconv("EUC-KR", "UTF-8", $good_name);
$buyr_name = iconv("EUC-KR", "UTF-8", $buyr_name);
// 주문결과를 디비에 저장하기 Start
include_once "../../common.php"; // 그누보드5 설정
include_once "../../data/dbconfig.php";
$dbconn = mysqli_connect(G5_MYSQL_HOST,G5_MYSQL_USER,G5_MYSQL_PASSWORD,G5_MYSQL_DB);
$shop_order_table = "order_table"; // DB 주문 테이블
$shop_price_field = "price_filed"; // DB 주문가격 필드
$shop_order_field = "order_filed"; // DB 주문번호 필드
$shop_auth_code = "auth_code"; // DB 주문번호 필드
$query = " select {$shop_price_field} from {$shop_order_table} where {$shop_order_field} = '{$ordr_idxx}' ";
$result = mysqli_query($dbconn,$query);
$data = mysqli_fetch_array($result);
$check_price = $data[0];
if ($check_price) {
if ($amount==$check_price) {
if ( $req_tx == "pay" && $res_cd == "0000" ) {
$query = " update {$shop_order_table} set {$shop_auth_code}='{$tno}' where {$shop_order_field} = '{$ordr_idxx}' ";
$result = mysqli_query($dbconn,$query);
}
} else {
$bSucc = "false";
$query = " update {$shop_order_table} set {$shop_auth_code}='결제오류' where orderNumber = '{$ordr_idxx}' ";
$result = mysqli_query($dbconn,$query);
}
}
// 주문결과를 디비에 저장하기 End
Ⅱ. Mobile 모드 KCP 결제
1. utf-8 로 변경
mobile_sample / js / approval_key.js
mobile_sample / js / KCPComLibrary.php
mobile_sample / order_approval.php
mobile_sample / order_mobile.php
mobile_sample / pp_cli_hub.php
mobile_sample / pp_cli_hub_lib.php
mobile_sample / result.php
mobile_sample / css / style.css , style_mobile.css
2. mobile_sample / order_mobile.php , pp_cli_hub.php , result.php 의 2줄에 setlocale 코드 추가
<?
를 아래와 같이 변경
<?php
// locale ko_KR.euc-kr 로 설정
setlocale(LC_CTYPE, 'ko_KR.euc-kr');
3. order_approval.php 에서 charSetType 변경
// 쇼핑몰 페이지에 맞는 문자셋을 지정해 주세요.
$charSetType = "euc-kr"; // UTF-8인 경우 "utf-8"로 설정
를 아래와 같이 변경
// 쇼핑몰 페이지에 맞는 문자셋을 지정해 주세요.
$charSetType = "utf-8"; // UTF-8인 경우 "utf-8"로 설정
4. order_mobile.php 228줄
<form name="order_info" method="post">
를 아래와 같이 변경
<form name="order_info" method="post" accept-charset="euc-kr">
5. order_mobile.php 228줄
<form name="pay_form" method="post" action="pp_cli_hub.php">
를 아래와 같이 변경
<form name="pay_form" method="post" action="pp_cli_hub.php" accept-charset="euc-kr">
6. order_mobile.php 의 script 변경
v_frm.action = PayUrl;
를 아래와 같이 변경
//v_frm.action = PayUrl;
// utf-8 인코딩 방식에 따른 변경 -- Start
if(v_frm.encoding_trans == undefined) {
v_frm.action = PayUrl;
} else {
if(v_frm.encoding_trans.value == "UTF-8") {
v_frm.action = PayUrl.substring(0,PayUrl.lastIndexOf("/")) + "/jsp/encodingFilter/encodingFilter.jsp";
v_frm.PayUrl.value = PayUrl;
} else {
v_frm.action = PayUrl;
}
}
// utf-8 인코딩 방식에 따른 변경 -- End
7. order_mobile.php 에 php 5.4 / 5.5 / 7.x 대응 코드 추가
Notice: Undefined index: req_tx in /home/happyjung/www/kcp_test/mobile_sample.php on line 32
7-1. php.ini 설정을 변경해서 오류를 안보이게 하는 방법
추천하고 싶지 않지만 6-2 방법이 없으면 이렇게라도 해야 정상 이용이 가능합니다.
7-2. 찾는중입니다.
8. order_mobile.php 파일의 위치가 다른 폴더에 존재하는 경우
위와 같은 오류화면이 보이면 아래의 사항을 확인하세요
mobile_sample / js / approval_key.js 와
mobile_sample / order_approval.php 는
반드시 order_mobile.php 와 동일 폴더에 위치를 해야 합니다.
mobile_order.php 가 실행될때 kcp의 결제요청을 approval_key.js 에서 ajax 로 호출하는데 이때 order_approval.php 를 사용합니다.
올바르게 설정된 경우 아래와 같은 화면이 나타납니다.
성공적으로 거래가 등록 되었습니다.
참고자료
https://ncube.net/8841
http://faultnote.tistory.com/343
https://m.blog.naver.com/aramjo/120178428858
댓글목록
등록된 댓글이 없습니다.