본문 바로가기
안드로이드/기타

안드로이드 결제 시스템 구현 (feat 부트페이, 인앱결제x)

by 안드뽀개기 2022. 2. 24.
반응형

부트페이를 이용한 결제시스템 구현에 대해 알아보겠습니다.
부트페이는 여러 PG사를 동시에 사용할 수 있고, 결제 이전에 UI Interface를 제공하고 PG사와 결제 로직을 처리해주는 결제모듈을 제공합니다.

먼저, 부트페이 개발문서를 보면 다음과 같은 화면이 나오며, PG 결제 > PG, 결제수단, Android 선택을 하여 코드를 살펴보겠습니다.

 

 



 

 

저는 개발문서에 올라온 코드에서 필수적인 부분만 작성했습니다.


 - setApplication(applicationId) : 부트페이에서 지급하는 applicationId를 설정합니다. appicationId는 부트페이에 로그인 > 왼쪽 상단의 결제 설치 > 인증키 및 보안  > Android 선택 > Android Application ID 복사하여 사용
 - setPG : 사용할 PG를 설정 - setBootUser : BootUser().setPhone("01012345678")와 같이 전화번호가 필수로 필요합니다. 설정 안할 시 오류를 발생시킵니다.

 - setMethod : 결제수단 선택

 - setName : 상품명

 - setPrice : 상품가격

 - setOrderId : 결제 고유번호를 생성하여 설정해야 합니다.

 

위 설정으로 결제진행하면서 발생하는 이벤트에 대한 함수를 아래에 정리했습니다.


 - onError(message : String) :  결제 진행 중 오류가 발생하는 경우 호출됩니다. message 파라미터에 오류에 대한 내용이 json형태로 전달됩니다.


 - onCancel(message : String) : 결제 진행 중 사용자가 결제 창을 취소 및 닫기한 경우 호출됩니다.

 

 - onReady(message : String) : 가상계좌 발급이 완료되면 호출되는 함수입니다. 가상계좌는 다른 결제와 다르게 입금할 계좌 번호 발급 이후 입금 후에 Feedback URL을 통해 통지가 됩니다. 발급된 가상계좌 정보를 ready 함수를 통해 확인하실 수 있습니다.

 

 - onDone(message : String) : PG에서 거래 승인 후 호출되는 함수 입니다. 결제 완료 후 호출이되며 message 파라미터로 결제정보에 대한 내용이 json형태로 전달됩니다. 

 

 - onConfirm(message : String) : 결제 승인이 되기 전 호출되는 함수입니다. 승인 이전 관련 로직을 서버 혹은 클라이언트에서 수행 후 결제를 승인해도 될 경우 Bootpay.confirm(data) 코드를 실행해주시면 PG에서 결제 승인이 진행이 됩니다.

주의할 점은 페이앱, 페이레터 PG는 이 함수가 호출이 안된다고 합니다. 

 

 

 

주의할 점

페이앱, 페이레터 PG를 이용해서 상품을 결제하고 상품명, 수량, 가격 등을 별도의 서버에 저장을 원하는 경우 주의하셔야합니다. 페이앱, 페이레터 PG는 결제전 함수인 onConfirm() 함수가 호출이 되지 않기 때문에, 결제 완료 함수인 onDone() 함수에서 별도의 서버에 데이터를 저장하는 로직을 작성하게 됩니다.ㅠ 하지만 결제정보에 대한 데이터를 서버에 저장할 때, 사용자가 onDone함수가 호출되기전 앱을 종료시켜버린다면 결제는 되지만 서버에는 데이터가 저장이 되지 않습니다.


이러한 문제를 해결하기 위해서 부트페이에서는 부트페이 서버로부터 결제완료 / 결제취소에 대한 Feedback 받기라는 기능이 있습니다. 이 기능을 구현한다면 결제완료 및 취소 시 설정된 Feedback URL로 결과를 통지해줍니다. 따라서 사용자가 결제시 앱을 강제 종료하여 서버에 데이터가 저장이 되지 않더라도 부트페이에서 결제 정보를  Feedback URL로 알려주기 때문에 결제정보에 대한 누락을 방지할 수 있습니다.

 

또한, 결제 검증하기 라는 기능을 구현하여 사용자가 결제한 상품정보 및 수량이 실제 결제되는 데이터와 일치하는지 검증을 반드시 해야합니다. 이는 onDone() 함수 호출 이후에 서버에서 처리하게 됩니다.

 

 

반응형