windows-8 - 我们如何在服务器端验证 Windows 8 应用内账单收据?

标签 windows-8 windows-runtime store in-app

我目前正在为 Windows 8 开发的应用程序中实现应用程序内购买。

看完documentation :

  1. 请求应用程序的许可信息: msdn.microsoft.com/en-us/library/windows/apps/windows.applicationmodel.store.licenseinformation.aspx

这会告诉您该应用是否为试用版,以及使用应用内购买的产品列表。

  1. 要执行购买,您需要使用以下对象:

CurrentApp:在实时环境中。这仅在应用程序在商店中获得批准时才有效,因此您需要在打包以提交到商店之前进行此更改。

CurrentAppSimulator:调试和测试。

2.a.如果您在试用模式下运行应用程序,则购买应用程序调用: CurrentApp.RequestAppPurchaseAsync(真)

该参数请求获取一个包含 XML 的字符串,该字符串表示应用程序的所有收据和任何应用程序内购买。如果 includeReceipt 设置为 false,则此字符串为空。

2.b.从您的服务器验证购买。 Reference

我们要验证从服务器 2.a 获得的收据是否真实。要验证收据的真实性,您可以使用公共(public)证书检查收据的签名。要获取此证书,请使用以下 URL: go.microsoft.com/fwlink/?LinkId=246509&cid= 收据的 CertificateId 在哪里。

这是来自 CurrentAppSimulator 的真实收据:

<?xml version="1.0" encoding="utf-8"?>
    <Receipt Version="1.0" ReceiptDate="2012-08-23T14:21:40Z" CertificateId="" ReceiptDeviceId="9d6b1f28-cab8-421f-8f8d-23df2dc3abbe">
    <ProductReceipt Id="d9437a12-4f91-4ef0-b0bf-527ab9da2ec9" AppId="Zolmo.JamiesRecipes_40cj6885yhw56" ProductId="JMPK_0004" PurchaseDate="2012-08-23T14:21:40Z" ProductType="Durable" />
</Receipt>

没有 CertificateId,如何实现服务器端验证?我如何在商店中没有应用程序的情况下测试所有这些?

谢谢, 佩德罗

最佳答案

没有沙盒环境可以为 Windows 应用商店 进行这种端到端测试。不过,这应该可以帮助您更进一步:

Store 当前使用的 CertificateIdb809e47cd0110a4db043b3f73e83acd917fe1336(这可能会随着时间的推移而改变,因此您的代码应该以编程方式从已签名的收据)

证书下载地址变成这样: https://go.microsoft.com/fwlink/?LinkId=246509&cid=b809e47cd0110a4db043b3f73e83acd917fe1336

这是一个示例收据,您可以测试解析 CertificateId 值以在上面的 URL 中使用的代码,以及使用证书验证签名是否有效的代码由上面的 URL 返回:

<Receipt Version="1.0" ReceiptDate="2012-08-28T22:11:33Z" CertificateId="b809e47cd0110a4db043b3f73e83acd917fe1336" ReceiptDeviceId="4e362949-acc3-fe3a-e71b-89893eb4f528">
<AppReceipt Id="8ffa256d-eca8-712a-7cf8-cbf5522df24b" AppId="55428GreenlakeApps.CurrentAppSimulatorEventTest_z7q3q7z11crfr" PurchaseDate="2012-06-04T23:07:24Z" LicenseType="Full" />
<ProductReceipt Id="2559fa9a-9f86-0525-e655-536a6c96fac6" ProductId="Product1" PurchaseDate="2012-06-04T23:07:50Z" ExpirationDate="2012-06-07T23:07:49Z" ProductType="Durable" AppId="55428GreenlakeApps.CurrentAppSimulatorEventTest_z7q3q7z11crfr" />
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
    <SignedInfo>
        <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
        <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>npmBq7pdtq9FkfILSsHuVyD+QWiZg6J/klBKsyWhrw8=</DigestValue>
        </Reference>
    </SignedInfo>
    <SignatureValue>LKZSHmk6XjLaEHoJPFBB1GxVsFf2eilOXeyf2RvYtVvqjU4EIdOUfNM46sVifq3MyeE4N2s77iJmvdzgxmOM9tCimebiL7jsdpWakO0A9daImHESMPIrwZNham6jPCWaBUEOFT6PNy1v5MS+cdX25Wenk702L0wVQ6R8oGPlk5Im6Q62K69cvAFA3q/kiLHOyTZWHoIGw5lvFvAYI/aZhVoFQLv1FjK0Syg5nbMA19UrzwZ39jnJjcfuw/VX51uSv5Ze2x36HDXTpiw8wHoTzauGYzt9MXd4+qbiJ4AQys22AgO+cfAbDrTuH5duZ6DMeuFeEv8nu2p9PiVyBEOlZw==</SignatureValue>
</Signature>

关于windows-8 - 我们如何在服务器端验证 Windows 8 应用内账单收据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11985618/

相关文章:

java - 在.bat文件中设置java路径

xaml - 如何制作可执行的 Metro 风格应用程序?

windows-8 - 在 WinRT 中创建排序的 Collection View

angular - 如何使用选择快照?

xaml - 使用 Visual State Manager 优于在代码中处理 Current_SizeChanged 事件的优势(WinRT、XAML)

c++ - 如何结合RegisterDragDrop,RoInitialize在一个线程中一起工作?

.net - 获取英语异常消息而不是本地语言

javascript - 将div内容保存在cookie中

android - 如何将数据追加到新行中的文本文件中,(\n 不起作用)

c# - 在 Windows 8/WinRT/XAML 应用程序中列出时区?