PurchaseEventArgs является составным json объектом, Для наглядности мы будем использовать Unity3D: MiniJSON который декодирует и кодирует простые строки JSON и не предназначен для использования с массивами строк JSON. Поэтому данные будем извлекать каскадом. Для работы со сложными объектами JSON лучше использовать библиотеку Newtonsoft.

public ReceiptData GetReceiptData(PurchaseEventArgs e)

    {
        ReceiptData data = new ReceiptData();

        if (e != null)
        {
            //Main receipt root
            var wrapper = Json.Deserialize(e.purchasedProduct.receipt) as Dictionary<string, object>;

            //Next level Paylod dict
            var payload = (string)wrapper["Payload"]; // For Apple this will be the base64 encoded ASN.1 receipt
            var payloadDict = Json.Deserialize(payload) as Dictionary<string, object>;

            //Stuff from json object
            string jsonString = (string)payloadDict["json"];  
            var receiptStringDetails = Json.Deserialize(jsonString) as Dictionary<string, object>;

            data.purchaseToken = (string)receiptStringDetails["purchaseToken"];
            data.orderId = (string)receiptStringDetails["orderId"];
            data.packageName = (string)receiptStringDetails["packageName"];
            data.productId = (string)receiptStringDetails["productId"];

            var purchaseTime = (long)receiptStringDetails["purchaseTime"];
            DateTime dateStartEra = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
            data.purchaseTime = dateStartEra.AddMilliseconds(purchaseTime);

            //Stuff from skuDetails object
            string skuDetailsString = (string)payloadDict["skuDetails"];
            var skuDetailsDict = Json.Deserialize(skuDetailsString) as Dictionary<string, object>;

            data.priceAmountMicros = Convert.ToInt64(skuDetailsDict["price_amount_micros"]);
            data.priceCurrencyCode = (string)skuDetailsDict["price_currency_code"];

            return data;
        }
        return data; 
    }

   public class ReceiptData
    {
        public string orderId;
        public string packageName;
        public string productId;
        public DateTime purchaseTime;
        public int purchaseState;
        public string purchaseToken;
        public long priceAmountMicros;
        public string priceCurrencyCode;
    }

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *