我们正在审查我们组织的某些应用的Microsoft商店集成。根据我们目前对应用商店的理解,我们计划使用获取用户服务器到服务器 API 的订阅来获取用户的购买并验证当前是否Active
对声明产品的购买。
API 需要传递一个StoreID
,该是登录到应用商店的用户Microsoft应用商店用户的用户标识符。应用需要通过从 Windows SDK 调用某些 API 并将其存储在本地来生成此StoreID
。
从商店购买成功后,StoreID
将通过名为ClaimPurchase
的 API 发送到我们的服务器,该 API 利用上述服务器服务器Get Subscriptions for a user
API 获取订阅以进行验证。
问题:
用户 A(我们系统中的用户(登录并购买订阅,并捕获ClaimPurchase
调用(通过设备上设置的某些代理(以检索 StoreID。
用户 A 向用户 B 出售商店 ID。用户 B 登录到应用程序(再次在设备上代理(,获取其身份验证参数(一些访问令牌(,并使用 HTTP 客户端与access token
和StoreID
进行ClaimPurchase
调用。
验证从服务器到服务器调用的调用时,将显示当前用户的订阅处于活动状态。
解决这个问题的一种方法是,每当成功ClaimPurchase
时,我们都会维护一个StoreID -> UserId
映射。并验证 StoreID 是否属于同一用户。
但以防万一用户 A 也生成了新的 StoreID,例如同时(生成 S1 时(S2
并出售给用户 B 而不是S1
。用户 B 在提出声明时使用 StoreIDS2
。
我们如何处理这种情况。Get Subscriptions for User
的 API 响应提供了一个id
字段(订阅 ID(和一个可映射到应用程序用户 ID 的beneficiary_id
。但这只有在两者从不更改处于活动状态的订阅时才有效。
我的问题又回到了:id
和beneficiary_id
会改变吗?
另外,有没有更好的方法来解决这个问题?
用户购买订阅加载项还是应用程序取决于他们获得的许可证是否处于活动状态,而不取决于应用商店 ID。购买订阅加载项需要应用商店 ID(在代码隐藏中启用(,而不是用户购买并获取应用商店 ID。应用商店 ID 属于开发人员而不是客户。因此,用户应该无法购买或出售应用商店 ID 来登录您的应用/加载项。
为应用程序启用订阅加载项时,应按照以下步骤操作:
1.确定客户是否已具有订阅的有效许可证。(应用程序许可证,附加许可证(
2.使用表示要代表客户购买的订阅的 StoreProduct 对象。
3.然后,代码确定订阅是否提供试用版。
4.调用请求购买异步方法以请求购买订阅
有关更多详细信息,请参阅文档:为您的应用启用订阅加载项