use*_*820 7 in-app-purchase ios
我在服务器端验证苹果收据时遇到问题.我试图在互联网上找到解决方案,但没有成功.
所以,描述:首先,应用程序是针对iOS7的.其次,我有一些项目(type = Non-Renewing Subscription).因此,用户可以购买一件或多件物品,然后他应该手动更新它们(再次购买).
应用程序向服务器端发送收据,我向Apple发出请求并获得带有大量 in_app收据的结果.就像是:
"in_app":[
{
"quantity":"1", "product_id":"...", "transaction_id":"...",
"original_transaction_id":"...", "purchase_date":"...",
"purchase_date_ms":"...", "purchase_date_pst":"...",
"original_purchase_date":"...",
"original_purchase_date_ms":"...", "original_purchase_date_pst":"...",
"is_trial_period":"..."},
{
"quantity":"1", "product_id":"...",
"transaction_id":"...","original_transaction_id":"...",
"purchase_date":"...", "purchase_date_ms":"...",
"purchase_date_pst":"...", "original_purchase_date":"...",
"original_purchase_date_ms":"...", "original_purchase_date_pst":"...",
"is_trial_period":"..."}
]
Run Code Online (Sandbox Code Playgroud)
因此,"in_app"中的每个"收据"都有transaction_id.但我如何识别当前购买的transactionId?我想验证它,并确保这是独一无二的.
我担心的是:如果有人会收到一张有效收据,他就可以破解我们的服务器端API,并使用相同的有效收据进行无限数量的应用内购买.
我应该以某种方式解密并检查transaction_id的"原始"收据,即我发送给Apple进行验证的收据?
任何帮助/建议将受到高度赞赏.先感谢您.
此致,马克西姆
@道格·史密斯
\n\n\n\n如果您浏览此页面上的不同字段,您会发现
\n\n\n\n\n原始事务标识符::\n 对于恢复先前事务的事务,原始事务的事务标识符。否则,与事务标识符相同。\n 此值对应于原始事务\xe2\x80\x99s transactionIdentifier 属性。\n 自动续订订阅的续订链中的所有收据都具有相同的此字段值。
\n
因此,对于非自动续订订阅,您必须在服务器端跟踪两件事:
\n\n一旦掌握了这两件事,您就可以在这两个参数上编写逻辑,如下所示:
\n\n::如果请求的类型为“购买”,并且您已经拥有与其他用户 ID 关联的该收据的原始交易标识符,则您可以阻止该购买。
\n\n::如果请求的类型为“恢复购买”,并且请求来自与数据库中原始事务标识符关联的同一用户 ID,则允许他以其他方式阻止其恢复。
\n\n此外,你可以根据你的需要,基于这些东西得出你自己的逻辑。
\n\n如果您还有任何疑问,请告诉我。
\n