이니페이 모바일 결제 (계좌이체) 개발 후기

신용카드 결제와 다른점

신용카드와 달리 계좌이체는 P_NOTI_URL을 추가로 설정한다. 모바일에서 결제 신청을 하면 이니시스 서버에서는 결제가 되었을 때 (입금 되었을때) P_NOTI_URL을 호출하는 방식이다.

인코딩 문제

NODE를 포함한 대부분의 언어에서 UTF8 언어셋을 기본으로 사용한다. 이는 다른 서비스와 연동할때도 전혀 문제될 것이 없었다.  EUC-KR를 사용하는 이니시스와 이를 Node.js 기반의 Hapi.js로 구현해야 할때는 문제가 될수 있었다. 어떤 삽질을 했는가 살펴보자. 여러번 시도를 했지만 요약하면 아래 두 가지 방법이었다.

'신용카드 결제와 똑같은 방법으로 하면 되겠지'

pipe를 사용하자. response 객체에 pipe 를 달아 디코딩한 것처럼 이니시스에서 들어오는 프로토콜의 request 객체에 pipe를 달면 되지 않겠는가 생각했다. 사실 hapi를 사용했기 때문에 request를 바로 사용하지 못하고 request.raw.req 객체를 사용해야 한다. 이번 경우는 아닌가 보다.

hapi 라우팅 구조를 해킹하자!

hapi 라우팅 구조를 보고 적절한 위치에서 디코딩해 주면 되지 않을까? 이번엔 http request의 'data', 'end' 이벤트를 걸어서 데이터 chunk를 모아서 디코딩하자. 여전히 안된다.

이니시스가 하라는대로 하자.

이니시스에서 제공하는 샘플파일 중 php 코드가 있다. php 서버를 별도로 만들었다. 역시 바로 되지는 않고 이도 디코딩 과정이 필요하다. 요청한 데이터를 부분적으로 iconv로 디코딩하니 해결된다.

iconv('EUCKR', 'UTF8', 파라메터)