服务器端配置 - 无代码支付(No Code Payment)

本文档阐述了服务器端IAP验证的步骤。

now.gg无代码支付(No Code Payment)实现了服务器端验证以确定购买的真实性。若验证成功,游戏可以将购买的产品分配给用户,并将购买标记为已消费(consumed)。

要在您的应用内实现无代码支付:

  • 在 nowStudio 中选择无代码支付(‘No Code Payment’)- 按照此指南
  • 按照下列步骤实现无代码支付(’No Code Payment’)的服务器端配置。

工作流

此处为now.gg无代码支付关联的工作流:

  • 用户选择要购买的应用内产品。
  • now.gg支付将被调用。
  • 在支付成功处理后,游戏将得到一个购买令牌。
  • 游戏将购买令牌发送到其服务器验证。
  • 游戏服务器将同now.gg服务器验证购买令牌。
  • 验证成功后,游戏将购买的应用内产品分配给用户。

实现服务器端配置

本章节阐述了实现无代码支付的服务器端配置的步骤。
目录

1. 验证购买

通过此步骤,您可以使用now.gg无代码支付验证应用内购买。

重要信息

  • 如果您已经能够向其他提供商验证您的购买,您将在当前使用的同一个URL处理程序中收到 purchase token
  • now.gg 购买令牌(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:
        # 继续同其它提供商验证

   # 游戏特定的响应处理代码

nowgg验证示例代码

以下示例代码演示了使用 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秘钥(API Key)Payments API Key 可以在 nowStudio 的证书章节找到 更多信息

预期响应

以下是 verifyPurchase API的示例响应。

{
    "success": true,
    "code": 0,
    "codeMsg": "success",
    "data": {
      "purchaseTimeMillis": "1630529397125", // 此字段已弃用,请使用 purchaseTime 代替。
      "purchaseTime": "1630529397125",
      "purchaseState": 0,
      "consumptionState": 0,
      "developerPayload": "<developer_payload>",
      "orderId": "<orderId_here>",
      "kind": "nowgg#productPurchase",
      "regionCode": "US",
      "currency": "USD",
      "packageName": "<package_name>",
      "payStatusTxt": "Paid",
      "orderAmount": "25.15",
      "isTestOrder": false,
      "payTimeTxt": "2024 - 10 - 3006: 08: 01",
      "sellerGoodsId": "11223343"
    }
 }

响应参数

参数 类型 描述
success boolean 返回是否成功,true或false。
code int 成功返回0,失败返回非0
codeMsg string 返回错误码关联的消息。(错误码参考此处
purchaseTimeMillis(弃用) string 购买产品的时间,以自纪元(epoch)以来的毫秒数表示。此字段已弃用,请使用 purchaseTime 代替
purchaseTime string 产品的购买时间,自纪元以来的秒数。
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)。
currency string 购买使用的货币。 –  USD, INR等。
packageName string 您应用关联的 packageName
payStatusTxt string 已支付或未支付的状态。
orderAmount string 您购买的 orderAmount
isTestOrder boolean 返回是否是测试订单。
payTimeTxt string 购买关联的支付日期和时间。
sellerGoodsId string 已购买产品关联的产品ID。


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)

重要信息

  • 购买令牌(PurchaseToken)– 使用您从URL处理函数中收到的 purchaseToken
  • API秘钥(API Key)Payments API Key 可以在 nowStudio 的证书章节找到。更多信息

预期响应

以下是 consumePurchase API的示例响应。

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

响应参数

参数 类型 描述
success boolean 返回是否成功,true或false。
code int 成功返回0,失败返回非0
codeMsg string 返回错误码关联的消息。(此处提供
data object 作为响应返回的数据。

错误码映射

错误码 消息 描述
3800 ERROR_CONSUMING_PRODUCT 消费产品发生错误。
3900 INVALID_AUTHORIZATION_KEY 提供的用于授权的API秘钥无效。
3901 INVALID_PURCHASE_TOKEN 提供的购买令牌无效。

序列图

下面的序列图展示了完整的无代码支付(’No Code Payment’)相关流程。

×
文本已复制到剪贴板
copyLinkText
有疑问?请通过以下方式联系我们: dev-support@now.gg