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

iOS 7服务器收据验证(php),第1张

概述我想验证iOS 6和iOS 7的iap收据(非消费和自动续订). 由于我使用服务器来遵循iOS 6的最佳实践,我也想将它用于iOS 7(主要用于订阅). 这是一个报刊杂志的应用程序,所以我在我的服务器上保留收据,我想检查哪些收据包含有效订阅,以便我可以向这些用户发送推送通知,以便后续下载下一期. 对于iOS 6,一切正常,但在iOS 7中存在很多混乱. 在receipt validation do @H_419_2@ 我想验证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

解决方法 对于iOS7,您不会将SKPaymentTransaction的transactionReceipt发送到您的服务器,而是发送应用收据(在base64编码之后,就像您对transactionReceipt一样).

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

JsON响应有一个latest_receipt_info字段,其中包含用户已进行的应用内购买列表以及有关其过期的信息,例如:

“latest_receipt_info”:({
“quantity”:”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字段,其中包含您可以存储在服务器上的收据(base64编码),并发送到Apple的验证服务器,就像您存储的iOS6收据一样.

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

$desired_product_IDentifIEr = <IDentifIEr of your in-app purchase>;$response = <JsON response you get from Apple verification server>;$receipt = Json_decode($response);  $latest_expiration_interval_since_1970 = 0;for ($receipt_info in $receipt['latest_receipt_info']) {    if ($receipt_info['product_ID'] != $desired_product_IDentifIEr)        continue;    $expiration_interval_since_1970 = intval(doubleval($receipt_info['expires_date_ms']) / 1000.0);    if ($expiration_interval_since_1970 > $latest_expiration_interval_since_1970) {        $latest_expiration_interval_since_1970 = $expiration_interval_since_1970;    }}$is_subscription_active = ($latest_expiration_interval_since_1970 > time());

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

@H_419_2@ 总结

以上是内存溢出为你收集整理的iOS 7服务器收据验证(php)全部内容,希望文章能够帮你解决iOS 7服务器收据验证(php)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/web/1006212.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存