我需要帮助解析Apple收据验证响应(沙盒)。因此,用户使用iPhone应用程序进行应用程序内购买,并向我发送收据,我使用Apple的Apple Services()验证。验证没问题,我得到了回复,所以现在我需要提取一个交易ID,这样我就可以将它存储在数据库中,但是我不知道应该从in_app密钥中提取哪个收据。那里根本没有单个收据,但也包含所有先前收据的数组。这个响应是在"消耗品"之后得到的。和"非续订订阅"是在应用程序中制作的。
我发现了一些涉及此内容的文章,但是EACH直接引用收据,因为它是一个包含所有数据的单个属性,但不在此处。
EG。 https://github.com/chrismaddern/iOS-Receipt-Validator-PHP看起来很有希望,但最后他以这种方式打开收据:
return $decoded_response->receipt;
不响应我的回复。我想这是旧的回应或其他什么。
这也是https://gist.github.com/jamesstout/5073237。
我是第一次处理此问题,如果您需要其他信息,请告诉我,我很乐意将其指出。
UPDATE:
注意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,所以我必须确定!
谢谢!
答案 0 :(得分:0)
所以我想回答这个问题,它可能有助于某些人,特别是如果这是第一次处理这个问题。
引起这种响应结构的事情并非在PHP方面,而是在iPhone代码方面。我不确定那里发生了什么,但我让开发人员把他对问题的描述发给我,所以这里是(引用):
问题在于收据编码,Apple文档失败了:
Apple说要使用base64encoding的标准方法 - 之后我们收到带有in_app收据数组的奇怪响应。
我在github上找到了一个进行多次测试的验证课程:
1)向Apple发送收据 2)检查transactionID是否唯一 3)检查收据或交易对象是否有效
我看到他们在发送之前没有使用标准编码方法,但他们使用自定义类别NSData + Base64。我将此类别添加到项目中,并使用此类别中的方法对收据进行编码。之后我开始收到新结构的回复 - 我们需要的回复 - 没有收据在阵列中,但是收据包含所有需要的数据。