【发布时间】:2019-12-15 02:02:48
【问题描述】:
我们正在审查我们组织的一些应用的 Microsoft Store 集成。根据我们目前对商店的理解,我们计划使用Get subscriptions for a user 服务器到服务器 API 来获取用户的购买并验证对声明产品的购买当前是否为 Active。
API 需要传递 StoreID,这是登录到商店的 Microsoft Store 用户的用户标识符。应用需要通过从 Windows SDK 调用some API 来生成这个StoreID 并将其存储在本地。
从商店购买成功后,StoreID 将通过名为 ClaimPurchase 的 API 发送到我们的服务器,该 API 使用上述服务器-服务器 Get Subscriptions for a user API 来获取订阅以进行验证。
问题:
用户 A(我们系统中的用户)登录并购买订阅并捕获 ClaimPurchase 调用(通过设备上设置的某些代理)以检索 StoreID。
用户 A 向用户 B 出售 StoreID。用户 B 登录到应用程序(再次在设备上代理),获取他们的身份验证参数(一些访问令牌)并使用 HTTP 客户端通过 access token 和 StoreID 进行 ClaimPurchase 调用。
当从服务器到服务器调用验证调用时,它将显示当前用户的订阅处于活动状态。
解决此问题的一种方法是,每当成功创建ClaimPurchase 时,我们都会维护StoreID -> UserId 映射。并验证StoreID属于同一个用户。
但以防万一用户 A 也生成了一个新的 StoreID,比如同时(生成 S1 时)S2 并出售给用户 B 而不是 S1。用户 B 在提出声明时使用 StoreID S2。
我们如何处理这种情况。 Get Subscriptions for User 的 API 响应提供了一个 id 字段(订阅 ID)和一个可以映射到应用程序用户 ID 的 beneficiary_id。但这只有在两者在其活动状态下从未更改订阅时才有效。
我的问题又回到了:id 和 beneficiary_id 改变了吗?
另外,有没有更好的处理方法?
【问题讨论】:
标签: uwp in-app-purchase windows-store-apps app-store windows-store