PHP 구모듈에서 현모듈 업데이트 문의

자사몰(https://rchemyagent.com) 결제 오류 관련 KCP 결제 모듈 문의

서버 호스팅 측의 최신 PHP 보안 정책 업데이트 이후, 기존 사용 중이던 KCP 결제 모듈 연결이 차단되어 비회원 및 네이버 연동 결제 등 카드/모바일 결제가 진행되지 않고 있습니다.

현재 사용 중인 사이트(rchemyagent.com)에 위 영카트 KCP API 모듈 패치/업데이트 작업을 적용하여 당장 결제 오류를 조치해 주실 수 있는지 확인 부탁드립니다.

작업 가능 여부와 예상 소요 시간/비용이 있다면 함께 안내해 주시면 감사하겠습니다.

답변 7개

선생님 https://sir.kr/jobs/requests 의뢰하시면 접수하겠습니다. 
위 답변들 말씀처럼 호스팅에서 exec를 막아 옛 KCP 모듈(pp_cli)이 안 도는 경우로 보입니다. 사이트 화면을 보니 몇 가지 덧붙일 것이 있어 적습니다.
1. 지금 판이 꽤 오래됐습니다
화면 소스에 붙은 버전 표시(ver=171106)와 jQuery 1.8.3을 보면 2017년 무렵 영카트5로 보입니다. 이 판에서 5.6.48로 한 번에 올리면 DB 변경, 테마·스킨 차이, PHP 8 호환까지 같이 손봐야 해서 하루 안에 끝내기 어렵습니다. "당장 결제부터"라면 지금 판은 그대로 두고 KCP 통신만 REST 방식으로 바꾸는 쪽이 빠릅니다. 판 올리기는 결제가 살아난 뒤 따로 계획하시는 게 안전합니다.
2. KCP 인증서는 지금 바로 신청해 두세요
REST 방식에는 사이트코드별 서비스 인증서와 개인키가 필요하고, 이건 가맹점 본인만 받을 수 있습니다(KCP 파트너관리자 > 기술관리센터 > 인증센터 > KCP-PG API). 누구에게 맡기시든 이게 먼저 있어야 작업이 시작되니, 오늘 신청해 두시면 시간이 줄어듭니다.
3. 고칠 때까지
주문서 위나 공지에 "카드결제 점검 중입니다. 무통장입금으로 주문 부탁드립니다"를 띄워 두세요. 카드결제를 시도하다 그냥 나가는 손님을 줄일 수 있습니다. 네이버페이 쪽은 연결 방식에 따라 따로 봐야 해서, 카드결제를 고칠 때 같이 확인해야 합니다.
4. 맡기시는 경우
문의하신 작업(현재 판 유지 + KCP REST 이식 + 테스트 결제·취소 확인 + 운영 반영)은 인증서를 받은 날부터 하루면 됩니다. 작업 전에 파일과 DB를 백업하고, PC·모바일 결제와 관리자 취소까지 확인한 뒤 넘겨드립니다.

같은 증상(«exec 함수실행이 불가능»)의 원인과 확인 순서를 따로 정리해 두었습니다: https://sangsangin.co.kr/blog/board.php?id=62

상상인 · https://thanksfor.co.kr/
호스팅에서 PHP의 exec 실행을 막으면 기존 KCP 결제 모듈(pp_cli)은 동작하지 않습니다.
관리자 결제설정 화면에 exec 관련 경고가 뜨는지 먼저 확인해 보세요.
이 경우 KCP 파일만 최신으로 교체해서는 해결되지 않고, REST API 방식으로 전환해야 합니다.

방법은 두 가지입니다.
1. 영카트 5.6.44 이상으로 업데이트한 뒤 쇼핑몰설정에서 KCP REST API 선택
2. 현재 버전을 유지하고 REST 통신만 이식 <- 코드 수정하고, rest api 키 발급 받고 운영에 적용하고 테스트 하는데 4~5시간 정도 걸렸습니다. 

저는 타 사이트에서 영카트에 2번 방식을 적용했습니다.
핵심은 기존 클래스와 함수 이름을 그대로 두고, 내부 통신만 REST로 바꾸는 것입니다.
이렇게 하면 주문 처리 코드와 화면을 거의 수정하지 않아도 됩니다.

[수정 내용]
1) shop/kcp/kcp_rest_lib.php 신규 작성
   - C_PP_CLI_T, C_PAYPLUS_CLI_T 클래스의 mf_set_*, mf_do_tx, mf_get_res_data 사용법 유지
   - mf_do_tx 안에서 exec 대신 curl로 KCP에 JSON POST
   - 승인: /gw/enc/v1/payment
   - 취소, 부분취소, 에스크로 상태변경: /gw/mod/v1/cancel
   - 현금영수증 발행: /gw/hub/v1/payment
   - 운영 서버 spl.kcp.co.kr, 테스트 서버 stg-spl.kcp.co.kr

2) 기존 라이브러리가 새 파일을 불러오도록 내용 교체
   - shop/kcp/pp_ax_hub_lib.php
   - shop/kcp/pp_cli_hub_lib.php
   - mobile/shop/kcp/pp_ax_hub_lib.php

3) 승인 파일에 REST 필수값 추가
   - shop/kcp/pp_ax_hub.php, mobile/shop/kcp/pp_ax_hub.php
   - ordr_mony, ordr_no, pay_type (카드 PACA, 계좌이체 PABK, 가상계좌 PAVC, 휴대폰 PAMC)
   - 개인결제는 $od_settle_case가 아니라 $pp_settle_case를 쓰므로 같이 처리해야 합니다.

4) 인증서 설정
   - KCP 파트너관리자 → 기술관리센터 → 인증센터 → KCP-PG API에서 발급
   - 인증서, 개인키, 개인키 비밀번호를 data/kcp_rest_config.php에 저장
   - 요청할 때 kcp_cert_info에 인증서를 줄바꿈 없이 한 줄로 넣습니다.

5) adm/shop_admin/configform.php
   - pp_cli를 더 쓰지 않으므로 module_exec_check 호출을 주석 처리

[주의할 점]
- 취소 요청에는 "site_cd^tno^mod_type"을 개인키로 SHA256 서명한 kcp_sign_data가 필요합니다.
- 기존 부분취소 코드 RN07, STPA는 REST에서 STPC로 바꿔야 합니다.
- 구버전 코드는 응답을 EUC-KR로 받는 곳이 있어 그대로 두면 한글이 깨질 수 있습니다.
  응답은 CP949로 변환해서 돌려주고, 보내는 값은 UTF-8로 맞췄습니다.
- 서버에서 curl, openssl, TLS 1.2를 쓸 수 있는지 먼저 확인하세요.
- 사이트별로 운영 인증서를 따로 발급받아야 합니다.

[테스트]
테스트 코드 T0000으로 PC와 모바일 결제, 고객 취소, 관리자 전체·부분 취소를 확인한 뒤 운영에 반영하세요.
운영 반영 전에는 기존 파일을 백업하고, 반영 후 소액 결제와 취소를 다시 확인하세요.
네이버 연동 결제는 연결 방식에 따라 별도 확인이 필요합니다.
 
1 홈페이지 소스 분석후 직접 한다
2 https://sir.kr/jobs/requests 의뢰해서 진행한다
3 홈페이지 새로 개발한다

호스팅에서 PHP 보안 정책으로 exec 같은 실행 함수를 막으면, 영카트의 기존 KCP 결제 모듈(pp_cli)이 동작하지 않습니다. 기존 모듈은 서버에서 실행 파일을 exec로 돌려 KCP와 통신하는 방식이기 때문입니다.

그누보드 5.6.44부터 exec 없이 HTTPS로 통신하는 「KCP REST API」 연동 방식이 추가되었습니다. 호스팅을 옮기지 않고 이 방식으로 바꾸시면 됩니다.

1. 그누보드를 최신판으로 올립니다

  • 오늘(11-09) 배포된 5.6.48을 권합니다. 이 버전에서 KCP REST 방식의 모바일 실결제창이 열리지 않던 문제가 고쳐졌습니다(운영 결제창 주소 rsmpay.kcp.co.kr 허용).
  • 5.6.43 이하에서 올리시는 경우 관리자 > DB 업그레이드에서 마이그레이션을 꼭 실행하세요(5.6.44의 KCP 연동 방식 항목이 여기서 추가됩니다).
  • 작업 전에 파일과 DB를 백업하고, 직접 고친 파일은 덮어쓰지 말고 비교해서 병합하세요.

2. KCP에서 REST용 인증서와 개인키를 받습니다

  • 해당 사이트코드의 API 이용 활성화와 함께 서비스 인증서, PKCS8 개인키를 발급받습니다.
  • 운영용은 KCP 파트너관리자 > 기술관리센터 > 인증센터 > KCP-PG API에서 발급합니다. 테스트용은 KCP 개발자센터의 테스트 인증서·개인키를 쓸 수 있습니다.

3. 서버에 두고 config.php에 경로를 적습니다

  • 인증서와 개인키는 웹 루트 밖에 두세요.
  • config.php 등에 G5_KCP_REST_CERT_PATH, G5_KCP_REST_PRIVATE_KEY_PATH, G5_KCP_REST_PRIVATE_KEY_PASSWORD를 선언합니다.
  • PHP에 cURL(TLS 1.2 이상), OpenSSL, JSON, iconv 확장이 있어야 합니다.

4. 쇼핑몰설정에서 방식을 바꿉니다

  • 쇼핑몰설정 > KCP 결제 연동 방식을 「KCP REST API」로 선택합니다.
  • 결제 테스트 모드에서 PC·모바일 승인과 취소를 먼저 확인한 뒤 운영으로 전환하세요.
  • 전환 전에 진행 중인 결제가 없는지, 미완료 승인·취소가 없는지 KCP 관리자에서 대조해 두시면 안전합니다.

참고: 그누보드 공식 문서 https://github.com/gnuboard/gnuboard5/blob/master/docs/kcp-rest-api.md
5.6.48 배포 노트: https://github.com/gnuboard/gnuboard5/releases/tag/v5.6.48

그누에서 따로 해당을 해주지는 않아서 직접 작업이 힘드시면 https://sir.kr/jobs/requests 에 동일한 내용을 올리시면 많은분들이 견적을 주실겁니다.

현재 보내주신 자사몰링크내에 정확한 테스트가 어렵지만

적용되어있는 결제모듈이 구형버전인건 확인되었습니다.

KCP 모듈자체가 결제창 호출 및 코드자체를 NHN KCP 자체내에서 제공하기때문에

누락된 필수 전송요소만 채우면 되지않을까 싶습니다만..

보통 예상소요시간은 4~5시간으로 예상되네요.

원하시는 요소가 기존 PHP 그누보드버전은 그대로 납둔채 KCP 모듈자체만 최신화 하는걸 원하시는건가요?

만약에 AI를 다루신다면 충분히 쉽게 처리가능해보입니다.

답변을 작성하려면 로그인이 필요합니다.