Анализ квитанции о покупке в приложении в WP8

Я пытаюсь написать phonegap WP8 ​​в плагине покупки приложений. В моем плагине я хочу получить «идентификатор заказа». Я знаю, что это возможно, поэтому квитанция имеет уникальный идентификатор.

Когда я попробую это,

string receipt = await CurrentApp.RequestProductPurchaseAsync(productListing.ProductId, false);

строка квитанции такая:

<?xml version="1.0" ?> 
- <Receipt Version="1.0" CertificateId="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" xmlns="http://schemas.microsoft.com/windows/2012/store/receipt">
  <ProductReceipt PurchasePrice="1.0" PurchaseDate="10:32:31 AM" Id="0fba8b37-95ed-4c57-b16a-00f9ac25d696" AppId="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" ProductId="img.2" ProductType="Consumable" PublisherUserId="00000000000000000000000000000000000000000000" PublisherDeviceId="00000000-0000-0000-0000-000000000000" MicrosoftProductId="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" /> 
- <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
- <SignedInfo>
  <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-xxxx-00000000" /> 
  <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" /> 
- <Reference URI="">
- <Transforms>
  <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /> 
  </Transforms>
  <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /> 
  <DigestValue>whocares</DigestValue> 
  </Reference>
  </SignedInfo>
  <SignatureValue>whocares</SignatureValue> 
  </Signature>
  </Receipt>

Как я могу получить Id (это атрибут элемента ProductReceipt) из этой строки? Эта ссылка и любые другие подобные ссылки у меня не работают.


person madjack    schedule 25.08.2014    source источник


Ответы (2)


Проверьте свою квитанцию, она не содержит «идентификатор заказа», но имеет «Идентификатор» в «Productreceipt». Я думаю, вам нужен этот идентификатор.

Вот метод, который я реализовал для своего проекта для анализа квитанции xml. Он предоставит словарь в ответ, и вы можете легко найти идентификатор в словаре.

private string ParseReceiptData(string xmlReceipt)
    {
        Dictionary AttributeDict = new Dictionary();
        var xd = XDocument.Parse(xmlReceipt).Descendants();
        foreach (var node in xd)
        {
            if (node.Name.LocalName.Equals("ProductReceipt"))
            {
                var attribute = node.Attributes();
                foreach (var attrib in attribute)
                {
                    AttributeDict.Add(attrib.Name.LocalName, attrib.Value);
                }
            }
        }
        var purchaseDate = Convert.ToDateTime(AttributeDict["PurchaseDate"]);
        var Expdate = purchaseDate.Add(TimeSpan.FromDays(30)).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.fffZ");
        AttributeDict.Add("ExpiryDate", Expdate);
        return JsonConvert.SerializeObject(AttributeDict);
    }
person Abhishek    schedule 25.08.2014
comment
Я попробую. Но атрибут переменной был нулевым. Во всяком случае, я нашел ответ. Спасибо за ответ. - person madjack; 26.08.2014
comment
Его возвращаемое значение для меня простым разбором. Не знаю, почему вы получаете нуль, и, поскольку вы нашли ответ, нет необходимости проверять дальше. - person Abhishek; 26.08.2014

Я нашел это. На самом деле, это было очень легко.

XDocument xml = XDocument.Parse(receipt);
XElement productReceipt = xml.Root.Elements().FirstOrDefault();
string orderId = productReceipt.Attribute("Id").Value;
person madjack    schedule 26.08.2014