서버 설정 (코딩 없이 결제)

서버 측 IAP 인증을 설정하는 단계입니다.

now.gg 코딩 없이 결제 시스템은 구매의 진위 여부를 확인하기 위해 서버 측 인증을 사용하며 이후 게임은 구매한 상품을 유저에게 전달하고 구매를 소비한 것으로 표시합니다.

방법:

  • nowStudio에서 ‘코딩 없이 결제’을 선택합니다. (자세히)
  • 아래 단계를 통해 ‘코딩 없이 결제’ 관련 서버측 설정을 완료합니다.

순서

now.gg 코딩 없이 결제의 작업 프로세스는 다음과 같습니다.

  • 유저가 구매할 인앱 상품을 선택합니다.
  • now.gg 결제 모듈이 실행됩니다.
  • 결제가 성공적으로 처리되면 게임은 구매 토큰을 수령합니다.
  • 게임은 인증을 위해 구매 토큰을 게임 서버로 보냅니다.
  • 게임 서버는 now.gg 서버를 통해 구매 토큰을 인증합니다.
  • 게임은 인증에 성공하면 구매한 인앱 상품을 유저에게 할당합니다.

서버 설정

아래는 ‘코딩 없이 결제’의 서버 측 설정 단계를 설명합니다.
내용

1. 구매 인증

now.gg 코딩 없이 결제를 사용하여 인앱 구매를 인증하실 수 있습니다.

중요

  • 이미 다른 방식을 통해 구매를 확인하고 있는 경우 이미 사용하고 있는 동일한 URL 핸들러를 통해 purchase token(구매 토큰)을 받게 됩니다.
  • 구매 토큰-nowgg-로 시작하며 이를 사용하여 now.gg의 인앱 구매를 식별할 수 있습니다.

다음은 예시입니다.

def verify_purchase(package_name, product_id, purchase_token):

   # 게임별 인증 로직
    
    if purchase_token.startswith("-nowgg-"):
        response = verify_purchase_with_nowgg(
                   package_name, product_id, purchase_token)
    else:
        # 다른 방식을 통해 계속 인증합니다.

   # 게임별 응답 처리 로직

now.gg 샘플 인증 코드

다음 샘플 코드는 verifyPurchase API 관련 요청 방식을 보여드립니다.

import requests

  url = "https://cloud-api.bluestacks.cn/v2/seller/order/verifyPurchase"

  payload = 'purchaseToken=<nowgg_purchase_token>'
  headers = {
  'Authorization': '<payment_api_key_here>',
  'Content-Type': 'application/x-www-form-urlencoded'
  }

  response = requests.request("POST", url, headers=headers, data=payload)

  print(response.text)

중요

  • PurchaseToken – URL 핸들러에서 받은 purchaseToken을 사용합니다.
  • API 키Payment API Key는 nowStudio의 자격 증명에 있습니다. (자세히)

예상 응답

다음은 verifyPurchase API의 샘플 응답 메시지입니다.

{
    "success": true,
    "code": 0,
    "reason": "success",
    "data": {
      "purchaseTimeMillis": "1630529397125",
      "purchaseState": 0,
      "consumptionState": 0,
      "developerPayload": "<developer_payload>",
      "orderId": "<orderId_here>",
      "kind": "nowgg#productPurchase",
      "regionCode": "JP"
    }
  }

응답

변수 설명
success boolean 성공 여부를 true 또는 false로 반환합니다.
code int 성공하면 0을 반환하고 실패하면 0이 아닌 값을 반환합니다.
reason string 오류 코드와 관련된 메시지를 반환합니다. (여기서 제공)
purchaseTimeMillis string (int 64) 제품을 구매한 시간(에포크 이후 밀리초)입니다.
purchaseState int 주문의 구매 상태입니다. 관련 값은 다음과 같습니다.
0: 미결제, 1: 결제, 2: 실패
consumptionState int 인앱 상품의 소비 상태입니다. 관련 값은 다음과 같습니다.
0: 아직 소비되지 않음, 1: 소비됨
developerPayload string 주문 관련 추가 정보 포함을 위한 개발자 지정 문자열입니다.
orderId string 모든 인앱 구매 상품과 관련된 주문 ID(고유 거래 식별자)입니다.
kind string 하드코딩된 nowgg#productPurchase로 구매한 인앱 상품의 종류입니다.
regionCode string 제품이 부여된 당시 유저의 ISO 3166-1 alpha-2 지역 코드입니다.


2. 상품 소비

구매를 인증한 후에는 소비됨으로 표시해야 합니다.

구매 소비에는 다음이 포함됩니다.

  • 구매한 제품을 유저에게 할당합니다.
  • 제품이 소비되었음을 now.gg에 알립니다.

샘플 코드

다음 샘플 코드는 consumePurchase API를 통한 관련 요청 방법을 보여드립니다.

import requests

  url = "https://cloud-api.bluestacks.cn/v2/order/consumePurchase"

  payload = 'purchaseToken=nowgg-_purchase_token'
  headers = {
    'Authorization': 'payment_api_key_here',
    'Content-Type': 'application/x-www-form-urlencoded'
  }

  response = requests.request("POST", url, headers=headers, data=payload)

  print(response.text)

Important Information중요

  • PurchaseToken – URL 핸들러에서 받은 purchaseToken을 사용합니다.
  • API 키Payment API Key는 nowStudio의 자격 증명에 있습니다. (자세히)

예상 응답

다음은 consumePurchase API의 샘플 응답 메시지입니다.

 }  
   "success": true,
   "code": 0,
   "reason": "success",
   "data": {}
 }

응답

변수 설명
success boolean 성공 여부를 true 또는 false로 반환합니다.
code int 성공하면 0을 반환하고 실패하면 0이 아닌 값을 반환합니다.
reason string 오류 코드와 관련된 메시지를 반환합니다. (여기서 제공)
data object 응답 메시지로 반환된 데이터입니다.

에러 코드 매핑

코드 메시지 설명
3800 ERROR_CONSUMING_PRODUCT 제품을 소비하는 중에 오류가 발생했습니다.
3900 INVALID_AUTHORIZATION_KEY 승인을 위해 제공된 API 키가 잘못되었습니다.
3901 INVALID_PURCHASE_TOKEN 제공된 구매 토큰이 잘못되었습니다.

시퀀스 다이어그램

다음 다이어그램은 ‘코딩 없이 결제’의 전체 흐름을 보여드립니다.

×
클립보드에 복사된 텍스트
copyLinkText
질문이 있으신가요? 다음 주소로 문의하세요. dev-support@now.gg