KCP 결제 모듈에서 자동 취소시 취소사유 한글깨짐 문제
쇼핑몰 솔루션의 결제모듈 부분을 작업하고 있는데.. kcp에서 제공하는 모듈을 보면 주문금액과 결제금액이 일치하지 않거나 주문시 DB 오류등이 발생했을 때 결제를 자동으로 취소하는 기능을 제공해주고 있다. 그런데 이 부분에서 취소사유를 넣게 되는데.. utf-8 환경이라면 한글이 깨지는 문제가 있다. 영어로 입력할까 싶은 생각도 잠시 했지만 다른 사람들도 사용하는 것이라 한글로 입력을 해야겠다는 생각에 머리 싸매고 작업 시작!!
해답은 php의 setlocale() 함수를 이용하면 된다.
문서 파일의 인코딩은 UTF-8 지정되어 있으며 서버의 환경 역시 UTF-8로 설정돼 있는 상태이다. 이런 상태에서 자동취소 기능을 이용하면 kcp 모듈의 pp_cli 에서 한글을 제대로 처리하지 못하게 되는데 이 때는 자동 취소를 처리하는 파일의 상단에 아래와 같은 코드를 추가해준다.
setlocale(LC_CTYPE, 'ko_KR.euc-kr');
그런데 여기서 한가지 주의할 것은 취소기능을 처리하는 파일 별도로 존재하고 자동 취소 기능을 실행할 때 취소 사유가 몇가지 경우라면 단순히 위 코드만 추가한다고 해서 해결되는 문제는 아니다. 취소 사유를 먼저 iconv 함수를 이용해 인코딩을 변경해주고 그 다음에 setlocale 함수를 실행해줘야 한다. 그리고 서버 환경이 UTF-8이 아니라면 실행할 필요가 없기 때문에 이 부분도 체크를 할 필요가 있을 것이다. 다음은 최종코드이다.
$def_locale = setlocale(LC_CTYPE, 0);
$cancel_msg = iconv("utf-8", "euc-kr", $cancel_msg);
if(preg_match("/utf[-]?8/i", $def_locale)) {
setlocale(LC_CTYPE, 'ko_KR.euc-kr');
}
테스트 서버에서는 이상없이 작동이 되는데.. 환경이 다르다면 어떨지는 모르겠다. 웹개발은 쉽지 않은 것 같다.