본문으로 건너뛰기

PG(Payment Gateway)를 이용한 인게임 결제

개요

  • PG를 이용해서 게임내 상품을 판매 가능합니다.
  • 빌링 시스템은 PG와 계약 후 기능을 랩핑해서 제공해드리고 있습니다.
  • 할인 포인트는 빌링 시스템이 아닌 게임 서버에서 직접 관리합니다.

결제 후 상품 지급 방법 결정

  • 빌링 시스템에서는 PG와 같은 외부 결제 후 상품 지급을 위해서 2가지 방법을 제공하고 있습니다.

상품 지급 API 연동

보상 인벤토리 시스템

  • 결제 후 ‘보상 인벤토리 시스템’에 빌링 시스템이 상품 추가 → 게임서버가 적절한 시점에 해당 시스템의 API를 이용해서 상품 지급
정보

보상 인벤토리 시스템이란?

  • 게임쪽에서 특정 시점에 주도적으로 지급 대상 상품 목록을 가져가는 방식의 기능을 제공하는 시스템
  • 게임 점검 또는 오류 발생으로 상품 지급 API가 실패할 수 있는데, 인벤토리 시스템을 이용하면 게임 서버가 주도적으로 처리 가능
  • 상품 지급 API 연동 방식보다는 개발 범위가 많을 수 있음

시퀀스 다이어그램

정보

실제 유저에게 판매할 상품의 전시(판매 기간, 유저 조건 특화 판매 등) 관리는 게임쪽에서 담당합니다.

  • 다만, 빌링 시스템에서 판매 가능한 상품의 등록 기능을 제공합니다.
    • 빌링 시스템에 판매 상품을 먼저 등록해야 PG로 결제가 가능합니다.(예. 구글 플레이 스토어에 상품 등록이 선행되어야 결제 가능한 것과 동일)
    • 일반적으로 사업PM을 통해서 상품 등록은 진행됩니다.
  • 등록된 상품 리스트를 게임 서버에서 조회 후 실제 유저에게 판매할 상품 리스트를 필터링(상품 전시) 후 판매하시면 됩니다.
    • 이때, 상품 가격과 상품명의 로컬라이징은 SDK를 통해서 제공되어 다른 결제 수단과 동일한 방식으로 구현 가능하십니다.

시퀀스 관련 추가 설명

  • 1-2. 게임서버가 빌링 시스템에 등록된 PG 판매 가능 상품 리스트를 조회하는 API(링크)
    • payment 파라미터 PG로 요청하여 PG로 판매 가능한 상품 리스트를 페이징으로 조회 가능
  • 1-6. SDK에서 사용하는 PG 상품의 가격 및 상품명 조회
    • 빌링 GW를 통해서 SDK가 직접 호출하며, 게임 클라이언트 개발자는 제공되는 랩핑된 메소드를 이용해서 구현
    • 상세 내용은 SDK 가이드를 확인
  • 2-2. 게임서버는 빌링에 구매 예약 및 유저의 결제 URL 요청(링크)

할인 포인트 라이프사이클 관리 참고 가이드

위험

해당 내용은 PG결제 유도를 위해서 게임내 할인 포인트(금액)를 이용할 때 라이프 사이클 관리에 대한 가이드입니다.

다만, 해당 내용은 참고를 위한 가이드이고 게임내 상황에 따라서 여러 구현 방법이 있을 수 있습니다.

할인 포인트 라이프 사이클 관리

  • 1단계: 결제 예약 및 포인트 동결 (Lock)
    • 빌링 예약 API(withGetPaymentUrl)를 호출하여 응답받은 boid를 해당 유저의 '동결(Lock)된 포인트'와 매핑하여 DB에 저장해야 합니다.
    • 이때 여러 기기에서 동시 결제를 시도하는 어뷰징을 막기 위해, 동시성 이슈 등의 보안 관련 방어 처리를 주의해서 구현해야 합니다. 낙관적 Lock, 비관적 Lock 등의 방법을 이용할 수 있습니다.
  • 2단계: 상품 지급 및 최종 차감 (Deduct)
    • 결제가 정상적으로 완료되면, 빌링 시스템이 게임 서버에서 제공하는 상품 지급 API를 호출하거나 인벤토리 시스템에 지급합니다.
    • 이때 게임 서버는 해당 결제 건의 boid에 매핑된 '동결 포인트'를 '영구 차감' 상태로 업데이트하고 상품을 지급할 수 있습니다.
  • 3단계: 결제 실패 및 취소에 따른 복구 (Rollback)
    • 유저가 인게임내에서 명확히 결제를 취소하거나 실패한 경우, boid에 묶여있던 동결 포인트를 다시 유저가 사용할 수 있도록 즉시 해제(Unlock)해야 합니다.
    • PG사 또는 관리툴 등을 통해서 취소시 게임서버에서 제공하는 회수 API를 호출해드릴 수 있습니다.(옵셔널 연동: API 제공 필요)

외부 브라우저 이탈 및 취소 대응

  • 인게임 복귀 시 상태 검증 (Polling)
    • 유저가 외부 브라우저에서 결제 과정을 거친 뒤 (성공, 실패, 취소, 단순 창 닫기 등) 다시 인게임 화면으로 돌아왔을 때, 클라이언트는 게임 서버에 상태 갱신을 요청해야 합니다.
    • 게임 서버는 제공된 빌링 구매리스트 조회 API(boidList조건)를 호출하여 해당 결제 건의 실제 상태를 빌링 시스템에 질의하고, 그 결과가 '취소/실패' 또는 예약상태 그대로 유지 중 이라면 즉시 포인트를 롤백시킵니다.
    • 참고로 결제 URL 요청 응답에 만료 만료일시 정보가 응답되며, 해당 시간이 경과되고 방치된 구매 요청 건의 포인트는 모두 재 사용 가능하도록 처리해주면 됩니다.
  • 만료된 구매 요청에 대한 배치 스케줄러 운용
    • 유저가 브라우저를 닫고 게임에도 접속하지 않는 '완전 이탈' 상태에 대비해야 합니다.
    • 일정 시간(예: 15분)이 지나도 최종 차감(Deduct) 처리가 되지 않은 '동결' 상태의 포인트들을 게임 서버의 배치 로직으로 찾아내어, boid 상태를 조회한 뒤 미결제 건임이 확실해지면 일괄 롤백 처리하도록 구현해야 합니다.