질문 Q #22379
CI 로 KCP 결제 연동개발하신분 질문드립니다.
lyh 2020-05-06 16:34:54

CI 인코딩 UTF-8 환경에서 개발하고 있습니다.

kcp 계좌번호 인증 부분에서 인코딩 문제가 있어 질문드립니다.

kcp 환경은 EUC-KR 로 되어있어서 UTF8->EUC로 변환하여 kcp로 보내고 있는데 인코딩 변환이 잘 안되어

계좌주명을 제대로 받지를 못해 진행이 안되는 상황입니다.

영문이름으로 진행시는 이상없었습니다.

결론은 CI PHP환경에서 UTF8 ->EUC 변경시 변경된 값이 kcp 모듈과 잘안된는것 같은데요..

혹시 이거와 비슷한 문제 겪으셨거나 해결하신분 있으면 공유 부탁드립니다

php 에서 iconv , mb_detect_encoding 함수 둘다 진행해봣었습니다.

 

2012년도에 저랑 동일한 문제를 겪으셨던 분 글이 있어서 참고로 공유드립니다

https://cikorea.net/bbs/view/qna?idx=9929&page=1&view_category=&lists_style=

답변 20
#1 포포탄 2020-05-06 16:48:26
header("Content-type: text/html; charset=euc-kr");

이 헤더 붙여서 스크립트 실행하여도 마찬가지인가요? 글자가 어떤 모양으로 깨지는지를 봐야 답하기 수월할 것 같네요.

#2 변종원(웅파) 2020-05-06 16:58:47
#3 lyh 2020-05-06 17:20:01

 

@포포탄 

네 php단에서 헤더붙여서해도 동일하고 폼단에서 스크립트로 charset 변경해서 보내도 동일하네요..

첨부 이미지는 "테스트" 입력후 iconv 사용하여 euc로 변환 결과값입니다  

#4 lyh 2020-05-06 17:25:01

@변종원(웅파)

보내주신 링크 참고하여  cp949, UHC로 모두 해보았지만 동일하네요 답변감사드립니다

#5 포포탄 2020-05-06 18:19:48

상품명같은 것은 잘 변환 되나요? 다른 한글도 잘 변환되는지도 궁금하네요.

글자깨지는 양상을 보면 일단 iconv에 문제가 있는 것은 아닌 것 같습니다.

 

간혹 파일 인코딩 상관없이 헤더에서 charset 지정되어있으면 해당 문자셋으로 프린트되는데 이거 잊어버리고 문자셋을 2번 컨버팅 하는 실수를 하기도 합니다. 이 부분도 확인해보셔야할 것 같습니다.

#6 한대승(불의회상) 2020-05-06 18:21:11
kcp 모듈이 linux 쉘에서 실행되는건지 확인해 보세요.
#7 lyh 2020-05-06 18:37:55

@한대승(불의회상)

모듈은 정상설치되었습니다. 다른건 이상없이 잘 동작하고 있습니다 답변감사드립니다

#8 lyh 2020-05-06 19:06:34

@포포탄

환불처리에서는 계좌번호랑 예금주명만 처리하여 다른 주문 정보(상품명 등등)은 확인하지 않습니다.

따로 테스트 페이지를 생성하여 서버단, 폼단 언어셋 정확하게 세팅해도 동일합니다

답변감사드립니다

#9 한대승(불의회상) 2020-05-07 09:20:44

@lyh 모듈이 linux 쉘에서 동작하는거면 폼, 서버 헤더 설정에 무관하게 쉘 언어환경을 따라갑니다.

#10 꾸꾸 2020-05-07 09:23:14

혹시 해결되셨나요?

결제 폼에서 submit 하기 전에 document의 charset을 EUC-KR로 변경 후 submit() 해보세요.

document.charset = 'EUC-KR';

form.submit();

document.charset = 'UTF-8';

#11 쌈닭 2020-05-07 10:45:52

http://blog.naver.com/grandwin/120067824645

요것도 한번 확인해 보세요.

#12 테러보이 2020-05-07 13:07:38

굳이 CI에서 발생 하는 문제 가 아니기 때문에 영카트를 참조하세요~

 

KCP에서 받는 경우

https://github.com/gnuboard/youngcart5/blob/master/shop/kcp/pp_cli_hub.php

setlocale(LC_CTYPE, 'ko_KR.euc-kr');

 

$buyr_name = iconv("utf-8", "cp949", $buyr_name);

 

#13 테러보이 2020-05-07 13:10:23

KCP로 보내는 경우

$bank_name  = iconv("cp949", "utf-8", $bank_name);

 

#14 lyh 2020-05-07 14:00:35

@한대승(불의회상)

 linux 쉘에서 동작하는것이 아니고 모듈은 리눅스에 설치했지만 웹상에서 호출해서 사용하고 있습니다. 

답변감사드립니다^^

#15 lyh 2020-05-07 14:01:00

@꾸꾸 

넵 ㅠㅠ 그방식도 해봤는데 안됐었습니다.. 감사드립니다

#16 lyh 2020-05-07 16:01:01

@쌈닭

그것도 잘체크해서 해봤습니다 ㅠㅠ 감사합니다.

#17 lyh 2020-05-07 16:04:38

@테러보이

저같은 경우에는 UTF-8 환경에서  EUC로 인코딩하여 kcp에 전송해주고 있습니다.

받을떄는 euc를 utf로 변환하여 잘뽑는데 문제는 보낼때가 안되네요..

#18 lyh 2020-05-07 19:23:01

지금까지 테스트결과

계좌 인증단계 바로 직전 UTF8 ->EUC-KR 변환은 되나

KCP측에서 받는 데이터는 null값이 들어가네요

영문으로 진행했을시에는 이상이 없었습니다.

 

결론은 CI 환경에서 iconv 혹은 mb_convert_encoding 함수를 사용하여 변환한것이 kcp모듈 호출할때 

다시 바뀌거나 인코딩이 잘못되어 euc-kr모듈과 호환이 안되는것 같습니다

 

#19 변종원(웅파) 2020-05-08 11:44:14

분리를 하셔야 하는게 ci 환경이라 그런게 아닙니다. 함수는 php 함수를 사용하는 것이고 ci환경에서 그런 문제가 발생하는지 확인하시려면

kcp 샘플코드를 동일서버의 일반 php가 실행될 수 있는 곳에 올리고 테스트해보시면 됩니다.

os는 어떻게 되는지요?

#20 lyh 2020-05-08 14:42:23

@변종원(웅파)

아 그렇네요 정정하겠습니다. 모든 CI환경이라는 의미는 아니었습니다ㅎㅎ CI를 사용하면서 저와 같은 문제를 겪으셨던 분이 있으면 혹시 도움을 받을까 해서 질문하였던 것입니다  이후에 해결이 된다면 후기 댓글 남기겠습니다. OS는 윈도우10 입니다. 답변감사드립니다