iOS 7服务器收据验证(php)

时间:2013-12-27 12:07:43

标签: php ios iphone objective-c ios7

我想验证iOS 6和iOS 7的iap收据(非耗材和自动续订订阅)。

由于我使用服务器来遵循iOS 6的最佳做法,我也想将它用于iOS 7(主要用于订阅)。 这是一个报刊杂志的应用程序,所以我在我的服务器上保留收据,我想检查哪些收据包含有效订阅,以便我可以向这些用户发送推送通知,以便后续下载下一期。 对于iOS 6,一切正常,但在iOS 7中存在很多混乱。

receipt validation documentation中,它表示要验证自动续订订阅收据,我们会发送带有共享密钥的JSON对象,然后我们会收到具有特定状态的响应。

这适用于iOS 7吗?这对我来说不是很清楚。

iOS 7收据的状态是指应用程序收据本身(而非应用程序购买中的特定应用程序)。那么如果我必须检查应用收据中的每个iap条目(例如,将iap到期日期与当前日期进行比较),我是否必须在我的服务器上实现应用收据解析?

还有办法通知我要检查的具体购买吗? 我猜不是。

我是否必须使用我的服务器进行iOS 6和iOS 7的设备验证?如果是,怎么样? :S

1 个答案:

答案 0 :(得分:13)

对于iOS7,您不会向服务器发送SKPaymentTransaction的{​​{1}},而是发送应用收据(在base64编码之后就像transactionReceipt一样)。

您可以尝试在此answer中运行实现,以了解如何发送它以及查看从App Store返回的JSON响应的结构。

JSON响应有一个transactionReceipt字段,其中包含用户已提出的应用内购买列表以及有关其过期的信息,例如:

  

“latest_receipt_info”:({
  “量”: “1”,
  “PRODUCT_ID”: “com.example.subscription_30”,
  “TRANSACTION_ID”: “1000000097606958”,
  “original_transaction_id”: “1000000097606821”,
  “purchase_date”:“2014-01-01 13:22:25 Etc / GMT”,
  “purchase_date_ms”: “1388582545000”,
  “purchase_date_pst”:“2014-01-01 05:22:25 America / Los_Angeles”,
  “original_purchase_date”:“2014-01-01 11:10:40 Etc / GMT”,
  “original_purchase_date_ms”: “1388574640000”,
  “original_purchase_date_pst”:“2014-01-01 03:10:40 America / Los_Angeles”,

  “expires_date”:“2014-01-01 11:14:35 Etc / GMT”,
  “expires_date_ms”: “1388574875000”,
  “expires_date_pst”:“2014-01-01 03:14:35 America / Los_Angeles”,

  “web_order_line_item_id”: “1000000027707568”},
  ...)

JSON响应还包含一个latest_receipt_info字段,其中包含您可以存储在服务器上并与Apple存储的iOS6收据一样发送到Apple验证服务器的收据(base64编码)。

看起来您需要手动计算是否有任何有效订阅。也许是这样的(未经测试):

latest_receipt

如果这不起作用并且您需要为iOS7执行本地应用收据验证,则可以查看我的github library以获取自动续订订阅或RMStore。希望这有帮助!