외부 결제 연동 규격

개요

외부결제란 원스토어 인앱결제 모듈(인앱 SDK)을 적용하지 않고, 개발사가 직접 결제 PG와 연동하여 결제서비스를 제공하는 것을 말합니다.

외부결제 적용 방법

  • 거래내역 전송

    • 외부결제를 사용하더라도 외부결제 거래내역(구매내역, 취소내역)을 원스토어로 전송해야 하며, 이에 대한 개발과 검증이 필요합니다.

    • 전달되는 거래내역은 원스토어 랭킹 및 서비스에 활용되며, 원스토어-개발사간 정산의 자료로도 활용됩니다.

  • 개발 및 검증 프로세스

    • (A) [개발사] 원스토어 개발자센터 > Apps > '상품등록' 버튼을 통해 신규앱을 등록합니다.

      • 상품 등록 화면에서 '외부결제 사용' 옵션을 '사용'으로 설정합니다.

      • 외부결제 사용 동의' 팝업에서 고지하는 내용에 대해 동의('확인') 합니다.

    • (B) [개발사] 상품 등록 화면에서 OAuth Key (Client_secret)를 발급 받습니다.

  • (C) [개발사] 외부결제 서버 API 규격을 참고하여 개발합니다.

    • OAuth AccessToken 발급, 거래내역 전송 등을 개발합니다.

  • (D) [개발사] Sandbox 환경(https://sbpp.onestore.co.kr)에서 거래내역이 정상적으로 전송되는지 충분히 확인합니다.

  • (E) [개발사] 원스토어 검증을 받기 위한 최종 APK를 원스토어 개발자센터에 업로드하고, 상용 환경과 연동합니다.

    • 개발사의 상용환경과 원스토어 상용환경(https://apis.onestore.co.kr/)을 연동해야 합니다.

    • 개발사가 연동하는 외부결제 PG사와의 연동도 상용환경으로 연동되어야 합니다.

  • (F) [개발사] 검증요청을 합니다.

  • (G) [원스토어] 개발사의 앱에서 결제하고 상용 환경에 거래내역이 정상적으로 전송되는지 확인합니다.

  • (H) [원스토어] 검증에 이용된 외부결제 건에 대해 개발사에 취소요청 합니다. (개발사 담당자에게 메일요청)

  • (I) [개발사] 요청된 검증 거래를 취소 처리 합니다.

  • (J) [원스토어] 상용환경에 취소 거래내역이 전송되는지 확인 후 검증완료 처리를 합니다.

  • (K) [개발사] 검증완료된 앱에 대해 판매개시 처리를 할 수 있습니다.

거래내역 전송 기준

  • 거래내역을 전송해야하는 기준은 다음과 같습니다.

    • 외부 결제가 발생하는 경우

      • 외부결제수단을 이용한 아이템 직접 구매 시

      • 외부결제수단을 이용한 앱 내 재화* 충전 시 (*앱 내 재화 : 해당 앱에서만 충전할 수 있고, 해당 앱 내의 아이템 구매에만 사용 가능한 재화)

      • 개발사 자체 결제수단**을 소진해서 아이템 구매 시 (**개발사 자체 결제수단 : 해당 앱 뿐만 아니라, 동일 개발사의 다른 앱 또는 Web 등 다른 채널을 통해 외부결제로 구매할 수 있고, 여러 앱에서 사용할 수 있는 결제 수단)

    • 제외 case (외부결제가 발생하지 않는 경우)

      • 개발사 자체 프로모션 결제수단(무료 쿠폰, 포인트성 캐시)을 통한 아이템 구매 시

      • 원스토어에서 배포한 국가가 아닌 다른 국가에서 거래가 발생한 경우

  • 거래내역은 구매ID(developerOrderId)를 기준으로 확인합니다.

    • 외부결제를 이용하는 앱은 '외부결제 완료 시', 구매ID를 사용자에게 제공해야 합니다. (결제완료 화면 내 및 이메일 고지 내) 원스토어 검증팀은 해당 앱의 외부결제/취소 시 거래내역이 정상적으로 원스토어로 전달되는지 구매ID를 기준으로 확인합니다.

  • 국가 코드와 통화코드 전송 시, 아래의 사항을 유의하시기 바랍니다.

    • 국가 코드는 원스토어를 통해 배포한 국가에서 발생한 거래에 대하여 ISO_3166-1_alpha-2 를 기준으로 전송합니다.

    • 통화 코드는 국가코드를 기준으로 ISO_4217 에 맞춰 전송하며, 국가 통화와 다른 통화로 거래가 발생한 경우 국가 통화로 환산하여 전송합니다. (구글 검색, 당일 00시 기준)

    • 국가 코드가 KR인 경우 Request Header의 x-market-code는 MKT_ONE으로 전송합니다.

    • 국가 코드가 KR이 아닌 경우 Request Header의 x-market-code는 MKT_GLB로 전송합니다.

  • 거래금액은 세금을 포함한 고객이 결제한 최종 거래금액을 전송합니다.

    • 원스토어 검증팀에 의해 확인 절차를 거치게 되며, 정확한 거래금액이 전달되지 않을 경우 검증 반려 또는 판매 중지 처리될 수 있습니다.

Server API

  • 외부결제 Server API란?

    • 개발사에서는 결제가 완료(성공)되면 해당 데이터를 원스토어로 전송하여 결제 이력을 동기화시키는 과정이 필요합니다. 또한 이미 결제가 성공하고 동기화가 완료된 결제 건에 대해 변동(취소)이 발생한 경우 역시 이력 전송이 필요합니다. 원스토어로 전송된 외부결제 구매/취소 내역은, 원스토어 랭킹에 반영되어 일반 고객들에게 노출되고 개발사와의 정산을 위한 자료로도 활용됩니다.

    • 외부결제 연동 API란, 개발사에서 발생한 외부결제 구매내역 및 취소내역을 원스토어로 전송하기 위해 제공되는 API입니다.

      • send3rdPartyPurchase (외부결제 구매내역전송)

      • cancel3rdPartyPurchase (외부결제 구매내역취소)

    • 각 API 연동을 위해서는 OAuth 인증이 선행되어야 하며, OAuth 인증을 위해서는 사전에 client_id와 client_secret을 발급받아야 합니다.

  • 연동 환경

    • 원스토어의 API서버는 그 목적에 따라 Sandbox(개발환경)와 상용 환경으로 분리하여 제공되고 있습니다.

      • Sandbox는 상용 API 규격을 그대로 적용한 가상의 연동 환경입니다.

      • 원스토어와 서버 API 연동을 위한 개발을 마친 후, 개발자센터에서 앱을 판매개시 하기 이전에 개발 검증 용도로 사용할 수 있습니다.

      • 개발사에서 전송된 결제 데이터는 랭킹이나 정산에 적용되지 않습니다.

      • 상용 환경은 고객의 결제 완료 또는 취소에 대해 결제이력을 동기화해야 하는 실 서비스 연동 환경입니다.

      • 상용 환경으로 전송된 데이터는 정산에 반영되므로, 상용 환경에서 결제 테스트를 진행하신 경우에는 반드시 결제 취소를 하셔야 합니다.

    • Sandbox와 상용 환경의 Host Domain 정보는 다음과 같습니다.

  • 연동 Flow

    • 외부결제 구매내역 전송

      • 사용자가 앱에서 상품 구매 요청을 하면, 앱은 연동 시 필요정보를 획득합니다. (4. Reference Code 참조)

      • 앱에서 획득한 정보와 함께 사용자의 구매 요청을 개발사의 서버로 전송합니다.

      • 개발사의 서버에서 외부결제(PG사 또는 타 마켓의 인앱결제)를 통해 결제 처리 후 앱으로 결과를 전송합니다.

      • 동시에, 외부결제 구매내역을 원스토어 API Server로 전송합니다.

        • (원스토어 OAuth AccessToken이 만료된 경우) OAuth AccessToken을 발급받은 후 API 연동을 수행합니다.

        • API 연동 결과를 상태 값으로 저장하는 것을 권장하며, 연동 실패 상태일 경우 재 시도를 수행합니다.

  • 원스토어 OAuth

    • 개요

      • 원스토어의 거래내역 전송 관련 Server API를 연동하기 위해서는 OAuth 인증 통한 AccessToken 발급이 필요합니다. AccessToken의 유효기간은 3600초이며, 유효기간이 만료 되거나 600초 미만으로 남은 경우에 getAccessToken()을 호출하면 새로운 토큰이 발급됩니다.

        • 기존의 AccessToken도 유효기간이 끝날 때까지는 사용이 가능합니다.

        • 다수의 AccessToken이 발행되는 방식이므로 개발사의 서비스 인스턴스별로 서로 다른 AccessToken을 취득하고 사용할 수 있는 형태가 됩니다.

      • 일반적인 연동 흐름은 다음과 같습니다.

      • AccessToken을 얻는 과정(1번)은 Server API 호출 시 인증 오류가 발생했을 때 호출하면 됩니다.

      • 원스토어의 Server API 의 호출을 위해서는 Authorization Bearer 스킴을 사용하며 호출 샘플은 아래와 같습니다. (Bearer의 값은 getAccessToken()을 호출하여 발급받은 AccessToken 값입니다)

        POST /v6/purchase/developer/com.onestore.game.goindol/send HTTP/1.1
        Host: iap-apis.onestore.net
        Authorization: Bearer 680b3621-1234-1234-1234-8adfaef561b4
        ...

      • getAccessToken (AccessToken 발급)

        • Desc: Server API사용을 위한 AccessToken을 발급합니다.

        • URI: /v6/oauth/token

        • Method: POST, PUT

        • Request Header

          Parameter NameDescriptionExample

          Content-Type

          http 요청시 Content Type으로 반드시 application/x-www-form-urlencoded 로 설정되어야 함

          Content-Type: application/x-www-form-urlencoded

          x-market-code

          마켓 구분 코드

          x-market-code: MKT_GLB

        • Request Body

          Element NameDescriptionExample

          client_id

          일반적으로 packageName과 동일

          com.onestore.game.goindol

          client_secret

          앱 등록 시 발급된 client secret 값

          vxIMAGcVz3DAx20uDBr/IDWNJAPNHFl7YruF4uxB6BI=

          grant_type

          고정값

          client_credentials

        • Example

          POST /v6/oauth/token HTTP/1.1
          Host: iap-apis.onestore.net
          Content-Type: application/x-www-form-urlencoded;charset=UTF-8
          x-market-code: MKT_GLB
          
          grant_type=client_credentials&client_id=com.onestore.game.goindol&client _secret=vxIMAGcVz3DAx20uDBr/IDWNJAPNHFl7YruF4uxB6BI=

        • Response Body

          Element NameData TypeData SizeDescription

          status

          String

          7

          Access Token 발급결과

          client_id

          String

          255

          OAuth 인증 client_id

          access_token

          String

          36

          token_type

          String

          6

          bearer 방식만 제공

          expires_in

          Integer

          10

          token 만료기한, 단위는 초(second)

          scope

          String

          1024

          token 사용 범위

        • Example

          {
              "status":"SUCCESS",
              "client_id":"com.onestore.game.goindol",
              "access_token":"680b3621-1234-1234-1234-8adfaef561b4",
              "token_type":"bearer",
              "expires_in":3010,
              "scope":"DEFAULT"
          }

Server API 상세

  • 외부결제 구매내역 및 취소내역을 원스토어 서버로 전송하기 위한 상세 규격입니다.

    • send3rdPartyPurchase (외부결제 구매내역 전송)

      • Desc: 개발사에서 외부결제수단으로 구매한 내역을 전송합니다.

      • URI: /v6/purchase/developer/{packageName}/send

      • Method: POST

      • Parameter: String packageName : API를 호출하는 앱의 패키지 네임 (Data Size : 128)

      • Request Header

        Parameter NameData TypeRequiredDescription

        Authorization

        String

        TRUE

        Access Token API를 통해 발급받은 access_token

        Content-Type

        String

        TRUE

        application/json

        x-market-code

        String

        FALSE

        마켓 구분 코드

        Example

        Request.setHeader("Authorization", " Bearer <Access-Token>");
        Request.setHeader("Content-Type", "application/json");
        Request.setHeader("x-market-code", "MKT_GLB");

      • Request Body

        Element NameData TypeData SizeRequiredDescription

        countryCode

        String

        2

        TRUE

        거래 건의 세금 납부 국가코드를 ISO_3166-1_alpha-2 기준으로 전송

        currencyCode

        String

        3

        TRUE

        ISO_4217 기준으로 전송

        adId

        String

        50

        TRUE

        단말에서 획득한 ADID (없는 경우 UNKNOWN_ADID로 전송)

        developerOrderId

        String

        100

        TRUE

        구매건을 식별하기 위한 개발사의 구매 ID (Unique한 값이어야 하며 중복 저장 시 오류발생, Error Response참조)

        developerProductList [

        TRUE

        developerProductId

        String

        150

        TRUE

        개발사의 인앱상품ID

        developerProductName

        String

        200

        TRUE

        개발사의 인앱상품명

        developerProductPrice

        Double

        10

        TRUE

        개발사의 인앱상품가격

        developerProductQty

        Integer

        10

        TRUE

        개발사의 인앱상품 구매수량

        ]

        simOperator

        String

        20

        TRUE

        단말에서 획득한 simOperator정보 (없는 경우 UNKNOWN_SIM_OPERATOR로 전송)

        installerPackageName

        String

        150

        TRUE

        단말에서 획득한 installerPackageName정보 (없는 경우 UNKNOWN_INSTALLER로 전송)

        purchaseMethodList

        TRUE

        purchaseMethodCd

        String

        30

        TRUE

        결제수단코드 (코드표 참조)

        purchasePrice

        Double

        10

        TRUE

        결제수단 별 결제금액

        totalPrice

        Double

        10

        TRUE

        결제 총액

        purchaseTime

        Long

        19

        TRUE

        1970년 1월 1일 이후 상품 구매가 이루어진 시간 (단위 : ms) (유효하지 않은 시간이 전송되는 경우 9002 오류발생, Error Response참조)

      • Example

        {
            "countryCode": "KR",
            "currencyCode": "KRW",
            "adId": "abcdefgh-abcd-1234-abcd-abcdefgh1234",
            "developerOrderId" : "your_order_id_1234567890",
            "developerProductList" : [
               {"developerProductId" : "your_product_id_1111",
               "developerProductName" : "A",
               "developerProductPrice" : 5000,
               "developerProductQty" : 2
               },
               {"developerProductId" : "your_product_id_2222",
               "developerProductName" : "B",
               "developerProductPrice" : 5000,
               "developerProductQty" : 1
               }
            ],
            "simOperator" : "45005",
            "installerPackageName" : "com.skt.skaf.A000Z00040",
            "purchaseMethodList" : [
               {"purchaseMethodCd" : "TRD_CREDITCARD",
               "purchasePrice" : 10000
               },
               {"purchaseMethodCd" : "TRD_PAYCO",
               "purchasePrice" : 5000
               }
            ],
            "totalPrice" : 15000,
            "purchaseTime" : 1345678920000
        }

      • Response Body

        Element NameData TypeData SizeRequiredDescription

        responseCode

        String

        50

        TRUE

        응답 코드

        responseMessage

        String

        500

        TRUE

        응답 메시지

        developerOrderId

        String

        100

        TRUE

        구매건을 식별하기 위한 개발사의 구매 ID

      • Example

        {
            "responseCode": "Success",
            "responseMessage": "Request has been completed successfully.",
            "developerOrderId": "test1695105094231"
        }
  • cancel3rdPartyPurchase (외부결제 구매내역 취소)

    • Desc: 개발사에서 외부결제수단으로 구매한 내역을 취소합니다.

    • URI: /v6/purchase/developer/{packageName}/cancel

    • Method: POST

    • Parameter: String packageName : API를 호출하는 앱의 패키지 네임 (Data Size : 128)

    • Request Header

      Parameter NameData TypeRequiredDescription

      Authorization

      String

      TRUE

      Access Token API를 통해 발급받은 access_token

      Content-Type

      String

      TRUE

      application/json

      x-market-code

      String

      FALSE

      마켓 구분 코드

    • Example

      Request.setHeader("Authorization", " Bearer <Access-Token>");
      Request.setHeader("Content-Type", "application/json");
      Request.setHeader("x-market-code", "MKT_GLB");

    • Request Body

      Element NameData TypeData SizeRequiredDescription

      developerOrderId

      String

      100

      TRUE

      구매건을 식별하기 위한 개발사의 구매 ID (중복 취소요청시 오류발생, Error Response참조)

      cancelTime

      Long

      19

      TRUE

      1970년 1월 1일 이후 상품 구매가 취소된 시간입니다. (단위: ms)

      cancelCd

      String

      30

      TRUE

      취소사유코드 (코드표참조)

    • Example

      {
          "developerOrderId" : "your_order_id_1234567890",
          "cancelTime" : 1345678920000,
          "cancelCd" : "TRD_CANCEL_USER"
      }

    • Response Body

      Element NameData TypeData SizeRequiredDescription

      responseCode

      String

      50

      TRUE

      응답 코드

      responseMessage

      String

      500

      TRUE

      응답 메시지

      developerOrderId

      String

      100

      TRUE

      구매건을 식별하기 위한 개발사의 구매 ID

    • Example

      {
          "responseCode": "Success",
          "responseMessage": "Request has been completed successfully.",
          "developerOrderId": "test1695105094231"
      }

코드표

  • 결제수단 코드(purchaseMethodCd)

    • 아래에 정의되지 않은 결제수단을 이용할 경우, 원스토어 개발자센터(devhelper@onestore.co.kr)에 문의 바랍니다.

      결제수단 코드 (purchaseMethodCd)결제수단명비고

      TRD_MOBILEBILLING

      휴대폰결제

      DCB, 소액결제

      TRD_CREDITCARD

      신용카드

      체크카드 포함

      TRD_11PAY

      11pay

      TRD_NAVERPAY

      네이버페이

      TRD_KAKAOPAY

      카카오페이

      TRD_PAYCO

      페이코

      TRD_SAMSUNGPAY

      삼성페이

      TRD_SSGPAY

      SSGPAY

      TRD_TOSS

      TOSS

      TRD_BANKTRANSFER

      계좌이체

      무통장입금, 가상계좌이체 포함

      TRD_TMONEY

      모바일 티머니

      TRD_CASHBEE

      모바일 캐시비

      TRD_OKCASHBAG

      OK캐쉬백

      TRD_CULTURELAND

      컬쳐캐시

      컬쳐랜드 컬쳐캐쉬

      TRD_HAPPYMONEY

      해피머니

      해피머니상품권

      TRD_BOOKNLIFE

      도서문화상품권

      TRD_CASHGATE

      편의점 캐쉬

      TRD_PAYPAL

      PayPal

      TRD_TMEMBERSHIP

      T 멤버십

      TRD_KTMEMBERSHIP

      KT 멤버십

      TRD_LGMEMBERSHIP

      U+ 멤버십

      TRD_GOOGLEPLAY

      Google Play

      TRD_BITCOIN

      비트 코인

      TRD_SKINSCASH

      Skins Cash

      TRD_AMAZONPAY

      Amazon Pay

      TRD_PURCHASE_ETC

      기타 결제수단

  • 취소사유 코드 (cancelCd)

    carrierCd취소사유명비고

    TRD_CANCEL_USER

    사용자요청 구매취소

    TRD_CANCEL_TEST

    테스트 구매취소

    TRD_CANCEL_ETC

    기타

    • Error Response

      서버 API에서는 정상적인 응답외에 Error 발생시, JSON 형식의 별도 Response를 응답합니다. 아래 내용을 참고하시기 바랍니다.

    • Response Body : JSON 형식

      Element NameData TypeDescription

      error

      Object

      에러정보

      code

      Integer

      에러코드

      message

      String

      에러메시지

    • Example

      {
          "error": {
              "code": "AccessTokenExpired",
              "message": "The access token was expired. Expired access token."
          }
      }

  • Error Codes

    RequiredValueNotExist

    필수값이 존재하지 않습니다. [ fields1, fields2, ... ]

    Request parameters are required. {0}

    NoSuchData

    조회된 결과값이 존재하지 않습니다.

    The requested data could not be found.

    InvalidRequest

    입력된 값이 유효하지 않습니다. [ fields1, fields2, ... ]

    Request parameters are invalid. {0}

    InternalError

    정의되지 않은 오류가 발생하였습니다.

    An undefined error has occurred.

    DuplicatedPurchase

    중복된 구매데이터입니다.

    The purchase are duplicated.

    PayMethodPriceSumNotMatch

    결제총액과 결제수단 별 결제금액의 합이 일치하지 않습니다.

    The total amount of payment and the sum of the amount of each payment method do not match.

    Not3rdPartyPurchaseProduct

    외부결제로 등록된 상품이 아닙니다.

    The product is not registered with external payment.

    Invalid3rdPartyCancelState

    외부결제 구매내역 전송/취소가 불가능한 판매상태입니다.

    It is in a sales state where it is impossible to send or cancel the purchase details of external payment.

    NotExistPurchaseOrCannotCancel

    취소할 구매데이터가 존재하지 않거나 취소할 수 없는 상태입니다.

    The purchase data to be canceled does not exist or cannot be canceled.

    Invalid3rdPartyMarketCodeOne

    국가/통화 코드를 확인해주세요. 대한민국이 아닌 국가에서 발생한 거래내역은 마켓 구분 코드 MKT_GLB로 전송해야 합니다.

    Please check the country/currency code. For transactions outside Korea, use MKT_GLB as the market code.

    Invalid3rdPartyMarketCodeGlb

    국가/통화 코드를 확인해주세요. 대한민국에서 발생한 거래내역은 마켓 구분 코드 MKT_ONE으로 전송해야 합니다.

    Please check the country/currency code. For transactions in Korea, use MKT_ONE as the market code.

    NotSupport3rdPartyCountryCode

    원스토어에서 판매중인 국가의 거래내역이 아닙니다.

    These transaction details are not related to distribution countries.

    NotMatch3rdPartyCurrencyCode

    거래가 발생한 국가의 국가 통화로 거래내역을 전송해야 합니다. ({0} 만 가능합니다)

    Use the local currency code for transaction details. (Only the {0} is allowed.)

Reference Code

  • 본 가이드는 원스토어에서 판매되는 외부결제 적용 앱의 거래내역 전송을 지원하기 위한 클라이언트 개발 내용을 포함하고 있습니다. 개발사는 다음에서 제공하는 내용들을 확인하고 직접 기능을 구현하거나 샘플 코드를 참조하여 사용할 수 있습니다.

앱 설치 인스톨러 정보 획득

  • 원스토어에서 설치된 어플리케이션은 총 4개의 install package 정보를 갖게 됩니다. (아래 표 참조)

  • 다음의 코드로 자신을 설치 해 준 Installer가 원스토어라면 해당앱의 결제 정보를 원스토어로 전달해야하며, 이 때 install package name도 같이 전달해야 합니다.

  • 만약, Installer 여부가 확인이 불가능하다면 "UNKNOWN_INSTALLER"를 전달하면 됩니다.

    Example

    /**
    * Returns the package name of the application that installed a package.
    * The OneStore has many installer package names.
    * Please check below list of package names.
    *
    * Google Play : com.android.vending
    *
    * ONE Store :
    * 1. com.skt.skaf.A000Z00040
    * 2. com.kt.olleh.storefront
    * 3. com.lguplus.appstore
    * 4. com.onestorecorp.gaa.storeapp
    *
    * Samsung Galaxy Apps : com.sec.android.app.samsungapps
    *
    * If you read null string, return the "UNKNOWN_INSTALLER".
    *
    * @param context application context
    * @return Name of installer package name or "UNKNOWN_INSTALLER"
    */
    public static String getInstallerPackageName(@NonNull Context context) {
        if (context != null) {
    
            Context applicationContext = context.getApplicationContext();
            PackageManager pm = applicationContext.getPackageManager();
            final String installPackageName =
    pm.getInstallerPackageName(applicationContext.getPackageName());
    
        if (!TextUtils.isEmpty(installPackageName)) {
             return installPackageName;
        }
       }
       return "UNKNOWN_INSTALLER";
    }
번호InstallerInstaller Package Name

1

ONE store SKT

com.skt.skaf.A000Z00040

2

ONE store KT

com.kt.olleh.storefront

3

ONE store LG U+

com.lguplus.appstore

4

ONE store GLOBAL

com.onestorecorp.gaa.storeapp

통신사 정보 획득

USIM 카드에서 통신사 정보를 획득하여 원스토어 외부결제 거래내역 전송 API를 통해 전달합니다.

  • 전달할 통신사 정보는 MCC+MNC 조합의 SIM Operator 정보로 5 ~ 6자리의 숫자로 구성되어 있습니다.

  • 만약 Wi-Fi Tablet과 같은 SIM Operator를 획득 할 수 없는 환경의 경우 "UNKNOWN_SIM_OPERATOR" 를 전달하면 됩니다.

    Example

    /**
    * Returns the MCC+MNC (mobile country code + mobile network code) of
    the provider of the SIM. 5 or 6 decimal digits
    * If you can't read of SinOpreater, return the "UNKOWN_SIM_OPERATOR".
    *
    * @param context application context
    * @return MCC+MNC information or "UNKNOWN_SIM_OPERATOR"
    */
    public static String getSimOperator(@NonNull Context context) 
        {if (context != null) {
    
           Context applicationContext = context.getApplicationContext();
           TelephonyManager telephonyManager =
                   (TelephonyManager)
    applicationContext.getSystemService(Context.TELEPHONY_SERVICE);
    
           if (telephonyManager != null && telephonyManager.getSimState()
    == TelephonyManager.SIM_STATE_READY) {
                return telephonyManager.getSimOperator();
           }
        }
        return "UNKNOWN_SIM_OPERATOR";
    }
  • Advertising ID 획득

    • Google Advertising ID의 경우 play service에서 제공하는 값으로 해당 값을 얻기 위해서는 google play service 라이브러리를 프로젝트에 반드시 포함시켜야 합니다.

    • Google Play Service 라이브러리 가이드는 다음의 링크에 따라 추가하시면 됩니다

    • 사용자가 Advertising ID를 받아오지 못하도록 설정하였다면 "UNKNOWN_ADID"를 전달하면 됩니다.

      Example

      /**
      * Returns the Google Advertising ID.
      * The getGoogleAdID Api has dependency of the google service.
      * Please check include google service api into your project.
      *
      * If you can't read of Advertising ID, return the "UNKNOWN_ADID".
      *
      * @param context application context
      * @return Google AdIDAdvertising ID or "UNKNOWN_ADID"
      */
      public static String getGoogleAdID(@NonNull Context context) {
          if (context != null) {
      
             Context applicationContext = context.getApplicationContext();
      
             try {
      com.google.android.gms.ads.identifier.AdvertisingIdClient.Info idInfo =
      
      com.google.android.gms.ads.identifier.AdvertisingIdClient.getAdvertising
      IdInfo(applicationContext);
      
                  if (idInfo != null) {
                      return idInfo.getId();
                  }
             } catch (GooglePlayServicesNotAvailableException e) {
            } catch (GooglePlayServicesRepairableException e) {
            } catch (IOException e) {
            }
          }
          return "UNKNOWN_ADID";
      }

기타

  • 외부결제 정산 프로세스

    • 외부결제 세금 정책

      • 개발자가 직접 외부결제를 통해 판매한 경우 부가세 및 기타 관련 세금 납부 의무는 개발자에게 있으며, 해당 국가에 직접 부가세 및 기타 관련 세금 납부의 책임을 집니다.

    • 외부결제 서비스이용료

      • 최종 소비자 결제 금액에서 부가세를 차감 후 서비스이용료를 계산합니다.

      • 외부결제로 여러 국가에서 거래가 발생되어도, 서비스이용료는 합산된 금액으로 매월 25일까지 가상계좌로 송금해 주세요.

        • 대한민국 소재 판매자 : KRW 송금

        • 대한민국 이외의 국가 소재 판매자 : USD 송금

      • 가상계좌 확인경로 : 개발자 센터 > 정산 > 외부결제 > 정산현황 > 하단

    • 수수료 증빙

      • 대한민국 소재 판매자 : 세금계산서 1장으로 발행 (한국+글로벌에서 판매한 수수료의 합)

        • 단, 한국에서 판매하는 경우 공동 사업으로 원스토어/ KT/ LG U+ 3사로 증빙이 분할되어 발행

      • 대한민국 이외 국가 소재 판매자 : 인보이스 1장으로 발행 (한국+글로벌에서 판매한 수수료의 합)

      • 경로 : 개발자 센터 > 정산 > 외부결제 > 정산현황> 세금계산서 / INVOICE

    • 증빙의 정보 수정

      • 세금계산서(인보이스) 내 회원정보 수정이 필요한경우, 판매월 말일까지 개발자센터(devhelper@onestore.co.kr)로 요청하셔야 합니다.

    • 수수료 미납

      • 수수료 미납이 지속될 경우, 판매약관에 따라 상품판매 중지 등 서비스가 제한될 수 있습니다.

기술/정책문의

Last updated