You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中从Google Play支付收据JSON提取orderId的方法

解决Unity中解析Google Play支付收据获取orderId的问题

问题原因

你的代码错误在于直接从最外层解析结果里查找"json"键,但实际这个键是嵌套在Payload字段的内层JSON结构里的,所以会出现找不到键的错误。

正确解析步骤

  1. 解析最外层收据JSON,提取Payload字段的字符串内容
  2. 解析Payload对应的JSON字符串,得到包含"json"和"signature"的字典
  3. 解析"json"字段的字符串内容,最终获取orderId等支付详情

修正后的代码

// 1. 解析最外层收据
var receiptRoot = (Dictionary<string, object>)MiniJson.JsonDecode(boughtProduct.receipt);
// 提取Payload字符串
if (!receiptRoot.TryGetValue("Payload", out var payloadObj))
{
    Debug.LogError("找不到Payload字段");
    return;
}
string payloadStr = payloadObj.ToString();

// 2. 解析Payload的JSON内容
var payloadDict = (Dictionary<string, object>)MiniJson.JsonDecode(payloadStr);
// 提取内层json字符串和signature
if (!payloadDict.TryGetValue("json", out var jsonObj) || !payloadDict.TryGetValue("signature", out var signObj))
{
    Debug.LogError("找不到json或signature字段");
    return;
}
string innerJsonStr = jsonObj.ToString();
string signature = signObj.ToString();

Debug.Log($"签名: {signature}");

// 3. 解析内层json,获取orderId
var purchaseDetails = (Dictionary<string, object>)MiniJson.JsonDecode(innerJsonStr);
if (purchaseDetails.TryGetValue("orderId", out var orderIdObj))
{
    string orderId = orderIdObj.ToString();
    Debug.Log($"获取到orderId: {orderId}");
    // 这里可以处理其他支付信息,比如packageName、purchaseTime等
}
else
{
    Debug.LogError("找不到orderId字段");
}

原收据JSON示例

{"Payload":"{\"json\":\"{\\\"orderId\\\":\\\"GPA.3456-5593-26230\\\",\\\"packageName\\\":\\\"com.Game.Company\\\",\\\"productId\\\":\\\"com.game.company.unlockall\\\",\\\"purchaseTime\\\":1657566629633,\\\"purchaseState\\\":0,\\\"purchaseToken\\\":\\\"ogpffeblkohlejehffmpjdia.AO-J1OzgoZ0k9--lCtsD7a_vdqMNtpVO0M6twn8uojIt9nX5f15aT15xS8gflnTpi-7HCg9_1DLY-TFE-NyY3RP1moIGNjvinoMmBEtLAIGd13IJe3PhGjg\\\",\\\"acknowledged\\\":true}\",\"signature\":\"ADNDAJDAJDJAJDAJDJADJA==\",\"skuDetails\":\"{\\\"productId\\\":\\\"com.game.company.unlockall\\\",\\\"type\\\":\\\"inapp\\\",\\\"title\\\":\\\"Unlock All Chapters\\\",\\\"name\\\":\\\"Unlock All Chapters\\\",\\\"description\\\":\\\"Remove Ads and Unlock All Chapters\\\",\\\"price\\\":\\\"\\u20a9160.00\\\",\\\"price_amount_micros\\\":160000000,\\\"price_currency_code\\\":\\\"INR\\\",\\\"skuDetailsToken\\\":\\\"AEuhpteuwINhyl241tHPoLuXb\\\"}\"}","Store":"GooglePlay","TransactionID":"ogpffeblkohlejehzgoZ0k9--lCtsD7a_vdqMnX5f15aT15xS8gflnTpi-7HCg9_1DLY-GNjvinoMmBEtLAIGd13IJe3PhGjg"}

原尝试代码

var gpDetails = (Dictionary<string,object>)MiniJson.JsonDecode(boughtProduct.receipt);
      
var gpJson = (string)gpDetails["json"];
var gpSign = (string)gpDetails["signature"];

Debug.Log(gpSign + " sign"); 
Debug.Log(gpJson + " json"); //or try this

foreach (KeyValuePair<string, object> kvp in gpDetails) //or try this
{
    Debug.Log("Key = {0}, Value = {1}"+ kvp.Key);
}

内容的提问来源于stack exchange,提问作者Prathvi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 19:36:04