本文档阐述了服务器端IAP验证的步骤。
now.gg无代码支付(No Code Payment)实现了服务器端验证以确定购买的真实性。若验证成功,游戏可以将购买的产品分配给用户,并将购买标记为已消费(consumed)。
要在您的应用内实现无代码支付:
此处为now.gg无代码支付关联的工作流:
通过此步骤,您可以使用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:
# 继续同其它提供商验证
# 游戏特定的响应处理代码
以下示例代码演示了使用 verifyPurchase API的相关请求。
import requests
url = "https://payments-api.now.gg/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。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。 |
在您验证购买后,您应将其标记为已消费。
购买的消费包括:
以下示例代码演示了使用 consumePurchase API的相关请求。
import requests
url = "https://payments-api.now.gg/v2/order/consumePurchase"
payload = 'purchaseToken=-nowgg-purchaseToken'
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。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’)相关流程。
