gpt4 book ai didi

c# - 验证 Windows Phone 应用内购买收据

转载 作者:数据小太阳 更新时间:2023-10-29 02:22:13 25 4
gpt4 key购买 nike

我正在开发 Windows Phone 8 应用程序。我的应用程序将包含应用程序内购买。我试图理解收据的概念。据我了解,有人在我的应用程序内购买产品后,会生成收据。

<?xml version="1.0"?>
<Receipt Version="1.0" CertificateId="{Identifier1}" xmlns="http://schemas.microsoft.com/windows/2012/store/receipt">
<ProductReceipt PurchasePrice="${PurchaseAmount}" PurchaseDate="{DateTime}" Id="{Guid1}" AppId="{Guid2}" ProductId="{ProductName}" ProductType="Consumable" PublisherUserId="{Identifier2}" PublisherDeviceId="{Identifier3}" MicrosoftProductId="{Guid3}" />
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
<SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" />
<Reference URI="">
<Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /></Transforms>
<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
<DigestValue>{Identifier4}</DigestValue>
</Reference>
</SignedInfo>

<SignatureValue>{HashedValue}</SignatureValue>
</Signature>
</Receipt>

太棒了!不过,我不确定如何判断这张收据是否来自微软的服务器。有人可以向我解释如何验证吗?我看到了这个:http://code.msdn.microsoft.com/wpapps/In-app-purchase-receipt-c3e0bce4但是,这对我来说没有意义。我不明白示例中的证书。 “IapReceiptProduction.cer”是固定的吗?或者只是为了这个样本?

如果这是一个愚蠢的问题,我很抱歉。

最佳答案

“Receipt”XML 元素中的“CertificateId”属性决定了使用哪个证书签署 Windows 应用商店收据。获得 CertificateID(示例中的“{Identifier1}”)后,您可以从以下代码示例中指定为“certificateUrl”的 URL 下载所需的证书。这是您以编程方式下载证书的方式:

public static X509Certificate2 RetrieveCertificate(string certificateId)
{
const int MaxCertificateSize = 10000;

// We are attempting to retrieve the following url. The getAppReceiptAsync website at
// http://msdn.microsoft.com/en-us/library/windows/apps/windows.applicationmodel.store.currentapp.getappreceiptasync.aspx
// lists the following format for the certificate url.
String certificateUrl = String.Format("https://go.microsoft.com/fwlink/?LinkId=246509&cid={0}", certificateId);

// Make an HTTP GET request for the certificate
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(certificateUrl);
request.Method = "GET";

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

// Retrieve the certificate out of the response stream
byte[] responseBuffer = new byte[MaxCertificateSize];
Stream resStream = response.GetResponseStream();
int bytesRead = ReadResponseBytes(responseBuffer, resStream);

if (bytesRead < 1)
{
//TODO: Handle error here
}

return new X509Certificate2(responseBuffer);
}

您可以查看此代码示例的更多内容 here . “IapReceiptProduction.cer”包含在该示例中只是为了展示收据验证的工作原理,而无需通过代码下载证书。获得证书后,您可以使用 System.Security.Cryptography.Xml.SignedXml用于验证收据的 API,如您链接的代码示例中所示。

关于c# - 验证 Windows Phone 应用内购买收据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15912720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com