【问题标题】:Getting receipt from current in-app purchase after successful validation?成功验证后从当前应用内购买获得收据?
【发布时间】:2015-03-13 02:15:01
【问题描述】:

我在解析 Apple 收据验证响应(沙盒)方面需要帮助。因此,用户使用 iPhone 应用程序进行应用程序内购买,并将收据发送给我,我使用 PHP 的 Apple Services () 对其进行验证。验证没问题,我得到了响应,所以现在我需要提取一个事务 ID,以便将其存储在数据库中,但我不知道应该从 in_app 键中提取哪个收据。那里根本没有一张收据,而是一个包含所有先前收据的数组。此响应是在应用中进行“消耗品”和“非续订订阅”后获得的。

我找到了几篇文章,但每篇文章都直接引用收据,因为它是一个包含所有数据的单一属性,但不是在这里。

例如。 https://github.com/chrismaddern/iOS-Receipt-Validator-PHP 看起来很有前途,但最后他是这样打开收据的:

return $decoded_response->receipt;

不适用于我的回复。我想这是旧的回应或其他什么。

这个也是https://gist.github.com/jamesstout/5073237

我是第一次处理这个问题,我们将不胜感激,如果您需要更多信息,请告诉我,我很乐意指出。

更新:

注意 in_app 数组中的项目,这些是收据,但没有以任何方式排序,例如 original_purchase_date_pst 是前 4 个项目:

[0] 2015-01-12 10:33:13 Etc/GMT
[1] 2015-01-12 11:35:53 Etc/GMT
[2] 2015-01-12 11:12:36 Etc/GMT
[3] 2015-01-12 11:15:57 Etc/GMT

我的意思是我可以遍历整个数组,但似乎有点奇怪,没有更简单的方法来获取最新的收据。我可以确定清单中会有最新的收据吗?我需要从中获取交易 ID,所以我必须确定!

谢谢!

【问题讨论】:

  • 那么in_app 数组中索引 0 处的项目是最近购买的吗?这些项目的日期是否默认排序?如果不是,您需要根据日期对该对象数组进行排序,并从最近的对象中获取 id。
  • 更新了问题,如下图。
  • 我猜您需要遍历对象数组才能找到最新的对象。我不确定purchase_date_*original_purchase_date_* 之间可能有什么区别。两者的默认排序有区别吗?
  • 问题是购买日期总是一样的,总是2015-01-13 19:33:45 Etc/GMT。很奇怪。
  • 那可能是最初的应用“购买”日期。

标签: php ios validation receipt


【解决方案1】:

所以我想回答这个问题,因为它可能会对外面的人有所帮助,特别是如果这个人是第一次处理这个问题。

导致这种响应结构的不是 PHP 端,而是 iPhone 代码端。我不确定那里发生了什么,但我要求开发人员将他对问题的描述发送给我,所以这里是(引用):

问题在于收据编码,Apple 文档失败:

Apple 说要使用 base64 编码的标准方法 - 之后我们收到带有 in_app 收据数组的奇怪响应。

我在 github 上发现了一个进行验证的类,它进行了许多测试:

1) 向 Apple 发送收据 2) 检查 transactionID 是否唯一 3) 检查收据或交易对象是否有效

而且我看到他们在发送之前没有使用标准编码方法,而是使用自定义类别 NSData+Base64。我将此类别添加到项目中,并使用此类别中的方法对收据进行编码。之后,我开始收到具有新结构的响应——我们需要的那个——数组中没有收据,但只有一个包含所有需要数据的收据。

【讨论】:

  • 当你回答你自己的问题并说你“找到了一个解决你的问题的 github 类”时,如果你分享你的解决方案,这对所有人来说都很棒。只是说解决方案使用了自定义类别并没有多大帮助。你找到的课程是什么?
猜你喜欢
  • 2011-10-12
  • 2010-11-20
  • 1970-01-01
  • 1970-01-01
  • 2013-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多