기술 포스트
결제 게이트웨이 연동 시작하기
결제 앱을 구축하고 운영하려면 최소 두 가지 유형의 통합을 처리할 수 있어야 합니다. 먼저, 필요한 하드웨어(즉, 카드 리더기 및 연결된 장치)를 통합하는 방법을 파악해야 합니다. 그다음, 온라인 결제 게이트웨이(거래를 승인하고 정산을 처리하는 주체)와 같은 결제 '백엔드'와의 통합 방법을 이해해야 합니다.
이전 게시물저는 이 과정에서 하드웨어 통합 부분에 대해 많은 이야기를 해왔습니다. 실제로 이 부분은 그다지 어렵지 않은데, ID TECH 카드 리더기를 사용하면 당사의 Universal SDK 를 통해 고수준 언어 환경에서 장치와 통신하거나, 아키텍처에 Node JS를 도입할 의향이 있다면 순수 JavaScript 방식으로 구현할 수도 있습니다. 어느 방식을 선택하든 ID TECH 장치와의 통신은 그리 복잡한 문제가 아닙니다.
그러나 여전히 다음과 같은 질문이 남습니다. 신용카드 리더기로 카드의 칩 또는 마그네틱 띠를 읽은 후, 해당 정보를 어떻게 승인된 거래로 전환할 수 있을까요?
아마도 이미 어떤 신용카드 프로세서가 요청을 처리할지는 결정되어 있을 것입니다. 그렇다면 핵심 과제는 해당 프로세서 또는 게이트웨이가 온라인 요청 처리를 위해 어떤 SDK 지원을 제공하는지 파악하는 것입니다.
대부분의 게이트웨이 또는 프로세서는 개발자 프로그램이나 온라인 개발자 포털을 운영하며, 이를 통해 결제 앱 개발에 필요한 SDK를 제공합니다. 이러한 SDK는 일반적으로 프로세서의 결제 API에 접근하기 위한 프런트엔드 및 백엔드 구성 요소를 함께 구축할 수 있도록 지원합니다. 결제 API는 실시간 승인을 받기 위해 MagStripe 데이터 및/또는 ICC(칩 카드) 데이터를 네트워크를 통해 백엔드 프로세서로 전송하는 기능을 지원합니다.
결제 승인은 지원해야 할 여러 온라인 요청 유형 중 하나에 불과합니다. 그 외 주요 요청 유형은 아래 표에 정리되어 있습니다.
요청 유형
설명
Auth
결제 승인 요청
Conf
이전 승인 요청을 확인합니다
Offline
오프라인 EMV 거래를 정산합니다
PreAuth
소액 거래를 통해 카드 정보의 유효성을 확인합니다
Refund
이미 정산된 거래를 환불합니다
Test
프로세서와의 연결 상태를 테스트합니다
VoiceReferralNotification
음성 조회 요청 결과를 프로세서에 통보
취소(Void)
정산이 완료되지 않은 거래를 취소하는 데 사용
결제 프로세서의 SDK 문서를 살펴보면, 각 거래 유형마다 상당히 많은 결과 코드 및/또는 오류 코드가 적용된다는 것을 알 수 있습니다. 그렇다면 이 모든 오류 유형을 어떻게 테스트할 수 있을까요? 대부분의 프로세서는 테스트 샌드박스 환경에서 특정 오류를 발생시키기 위해 거래 금액의 센트 단위를 특정 값으로 설정하는 방식을 제공합니다. (예를 들어, '금액 초과' 오류 코드가 1243인 경우, SDK에서 $12.43 금액으로 테스트 거래를 제출하면 해당 오류를 재현할 수 있습니다.) 자세한 내용은 해당 프로세서의 SDK 문서를 참고하시기 바랍니다.
많은 결제 프로세서는 사전 인증된(반통합형) '인앱(in app)' 솔루션을 제공하여 암호화된 카드 데이터를 거의 투명하게 백엔드로 직접 전달할 수 있도록 지원합니다. 이 방식을 사용하면 결제 앱이 PCI 범위(scope)에서 제외됩니다. 반면, 일부 프로세서는 PCI 범위 관련 사항을 직접 처리하도록 요구하는데, 이 경우에는 암호화된 카드 데이터를 방화벽 뒤에 있는 자체 서버 앱으로 전송한 후, HSM의 도움을 받아 카드 데이터를 복호화하고 이를 매입사 또는 게이트웨이로 전달하게 됩니다.
지금까지 개괄적인 내용을 살펴보았으니, 이제 결제 백엔드와의 실제 연동이 어떤 의미를 갖는지 구체적으로 알아보겠습니다.
물론 이 사례가 모든 상황에 적용되는 것은 아니지만(어떤 단일 사례도 그럴 수는 없습니다), 백엔드 연동 시 실제로 맞닥뜨릴 수 있는 상황의 특성을 이해하는 데 도움이 될 것입니다.
이 사례에서 저는 EMV 거래에 대한 실시간 승인을 받기 위해 거래 데이터를 CreditCall 테스트 서버로 전송하는 '가상 단말기(virtual terminal)' 데모 앱 개발을 담당하게 되었습니다. CreditCall은 HTTPS를 통해 접근할 수 있는 백엔드 서버 API를 제공하며, 이는 ChipDNA Direct API, 이를 Java, C++, Perl 또는 기타 언어로 제공되는 SDK를 활용하여 "개발 기반"으로 사용할 수 있습니다. 저는 Java 버전을 선택했습니다.
저는 ChipDNA Direct 웹사이트에서 개발자 계정을 등록하고, 이메일을 통해 CreditCall 테스트 서버에 접근할 수 있는 자격 증명을 신속하게 발급받았습니다. 또한 CreditCall의 Java SDK를 다운로드하여 샘플 코드를 살펴보기 시작했습니다. 저는 특히 EMV 거래를 승인 요청으로 제출하는 방법을 익히고자 했습니다. 마침 예제 코드 파일 중 하나인 ExampleAuthEMV.java에 제가 필요로 했던 코드가 그대로 담겨 있었습니다.
저는 Java 클래스 두 개를 작성하는 작업에 착수했습니다. 하나는 브라우저 기반 프런트엔드로부터 HTTP 요청을 처리하는 서블릿 클래스이고, 다른 하나는 서블릿이 수집한 브라우저 데이터를 CreditCall 백엔드로 전달하는 "워커" 클래스입니다. 전자는 약 250줄, 후자는 92줄의 Java 코드로 완성되었습니다.
서블릿 클래스의 코드는 별도로 소개하지 않겠습니다. 이 클래스는 표준 Java 서블릿 코드와 크게 다르지 않으며, 다만 AJAX를 통해 폼 필드 값으로 전송된 TLV 값을 런타임 시 java.util.Hashtable 객체에 저장하는 기능을 수행합니다. 이렇게 저장된 Hashtable은 워커 클래스의 정적 메서드인 authorize()에 전달됩니다. 워커 클래스는 CreditCall ChipDNA Direct SDK의 헬퍼(라이브러리) 클래스를 활용하여 com.creditcall.Request 객체를 생성하고, 이 객체를 Client 객체에 전달하면 Client 객체가 CreditCall 서버를 호출하는 방식입니다. 코드는 다음과 같습니다:
이 코드는 매우 간결하고 자명하여 추가적인 설명이 거의 필요하지 않습니다. 핵심은 CreditCall의 Request 로 이동하여 Flash 쿠키를 관리할 수도 있으며, Client 클래스가 최종적으로 CreditCall 서버에 전송되는 XML 문서 생성을 자동으로 처리한다는 점입니다. 개발자는 원시 XML을 직접 확인하거나 수정, 파싱하거나 신경 쓸 필요가 전혀 없습니다(이것이 바로 설계 본래의 의도입니다).
18번과 19번 줄에는 테스트 계정 자격 증명을 입력해야 합니다. (위에 표시된 자격 증명은 임의로 작성된 것입니다. 코드를 그대로 사용하지 마십시오!) 69번 줄에서는 CreditCall 엔드포인트 URL을 설정하며, 72번 줄에서 실제 아웃바운드 HTTPS 호출이 실행됩니다.
CreditCall 서버는 거래 데이터에 포함되는 TLV 태그에 대해 크게 까다롭지 않습니다. 다만 필수 카드 데이터가 담긴 태그, 즉 접촉식 EMV의 경우 태그 5A 및 57, 비접촉식의 경우 태그 56, 그리고 암호문 정보가 담긴 9F26과 9F27은 반드시 포함해야 합니다. EMV 데이터에 대한 응답으로 CreditCall 서버는 일반적으로 태그 8A, 89, 91에 대한 TLV를 반환하며, 칩 카드에 스크립트를 전달해야 하는 경우 선택적으로 71 또는 72도 반환합니다. 승인 코드는 태그 89에 포함되어 있습니다.
시행착오를 거치면서 알게 된 사실은, CreditCall 서버 앱이 카드에서 AAC 암호문이 제시된다고 해서 무조건 빠르게 거래를 거절하지는 않는다는 점입니다. (태그 9F27의 상위 비트를 확인하면 암호문 유형을 파악할 수 있습니다. 비트가 모두 0이면 AAC, 즉 거절을 의미합니다.) 이는 예상 밖의 결과가 아닙니다. 카드의 판단은 말 그대로 권고 사항에 불과하기 때문입니다. EMV 거래에 대한 최종 승인 여부는 일반적으로 매입사가 결정하며, 카드의 결정은 번복될 수 있고 실제로 번복되는 경우도 적지 않습니다.
보시다시피, 이러한 실습을 통해 EMV에 관한 다양하고 흥미로운 세부 사항들을 배울 수 있습니다. 결제 앱 코드를 검증하는 데 있어 실제 승인 거래를 직접 수행해보는 것만큼 효과적인 방법은 없습니다!
EMV 거래에 관한 더 많은 정보가 필요하신가요? ID TECH 지식 베이스의 개발자 홈 페이지를 확인해 보세요. 또한 저희의 EMV 개발 백서를 다운로드하시거나, 평가 키트 도입을 위해 전문가에게 무료로 전화 문의하세요:
