Получение квитанции от текущей покупки в приложении после успешной проверки?

Мне нужна помощь в анализе ответа Apple о проверке квитанции (песочнице). Таким образом, пользователь совершает покупку в приложении с помощью приложения для iPhone и отправляет мне квитанцию, которую я проверяю с помощью Apple Services () с помощью PHP. Проверка прошла успешно, я получаю ответ, поэтому теперь мне нужно получить идентификатор транзакции, чтобы сохранить его в БД, но я не знаю, какую квитанцию ​​мне следует извлечь из ключа in_app. Там просто не одна квитанция, а массив, содержащий все предыдущие квитанции. Этот ответ получен после того, как в приложении были сделаны «Расходные материалы» и «Непродлеваемая подписка».

Я нашел несколько статей, посвященных этому, но КАЖДЫЙ ссылался непосредственно на квитанцию, так как это было одно свойство, которое содержит все данные, но не здесь.

Например. https://github.com/chrismaddern/iOS-Receipt-Validator-PHP выглядит многообещающе, но в итоге открывает чек вот так:

return $decoded_response->receipt;

Не работает для моего ответа. Я думаю, это старый ответ или что-то в этом роде.

Этот также https://gist.github.com/jamesstout/5073237.

Я имею дело с этим в первый раз, любая помощь будет оценена, пожалуйста, сообщите мне, если вам нужна дополнительная информация, я буду рад указать на это.

Ответ Apple после подтверждения полученияОБНОВЛЕНИЕ:

Обратите внимание на элементы в массиве 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

Я имею в виду, что я мог бы перебрать весь массив, но кажется немного странным, что нет более простого способа получить последнюю квитанцию. И могу ли я быть уверен, что в списке будет последняя квитанция? Мне нужно будет получить идентификатор транзакции, поэтому я должен быть уверен!

Спасибо!


person Adrian    schedule 14.01.2015    source источник
comment
Является ли элемент с индексом 0 в массиве in_app самой последней покупкой? Дата этих элементов отсортирована по умолчанию? Если нет, вам нужно будет отсортировать этот массив объектов по дате и взять идентификатор из самого последнего.   -  person Mike Brant    schedule 14.01.2015
comment
обновил вопрос, изображение ниже.   -  person Adrian    schedule 14.01.2015
comment
Я предполагаю, что вам нужно будет перебрать массив объектов, чтобы найти самый последний. Я не уверен, какая разница между purchase_date_* и original_purchase_date_* может быть. Есть ли разница в сортировке по умолчанию между ними?   -  person Mike Brant    schedule 14.01.2015
comment
дело в том, что дата покупки всегда одна и та же, это всегда 2015-01-13 19:33:45 Ec/GMT. Странный.   -  person Adrian    schedule 14.01.2015
comment
Вероятно, это дата первоначальной покупки приложения.   -  person Mike Brant    schedule 14.01.2015


Ответы (1)


Поэтому я хочу ответить на этот вопрос, потому что это может помочь кому-то, особенно если он сталкивается с этим впервые.

То, что вызвало эту структуру ответа, было не на стороне PHP, а на стороне кода iPhone. Я не уверен, что там произошло, но я попросил разработчика прислать мне его описание проблемы, так что вот оно (цитата):

Проблема была в кодировке квитанции, это был сбой документации Apple:

введите здесь описание изображения

Apple говорит использовать стандартный метод base64encoding - после этого мы получаем этот странный ответ с этим массивом квитанций in_app.

Я нашел на github класс, который делает проверки, которые делают много тестов:

1) отправляет квитанцию ​​в Apple 2) проверяет уникальность идентификатора транзакции 3) проверяет действительность объектов квитанции или транзакции

И я видел, что они не использовали стандартный метод кодирования перед отправкой, а использовали пользовательскую категорию NSData+Base64. Я добавил эту категорию в проект и закодировал чек методом из этой категории. После этого я стал получать ответы с новой структурой - той, которая нам нужна - без квитанций в массиве, а одна квитанция со всеми необходимыми данными.

person Adrian    schedule 15.01.2015
comment
Когда вы отвечаете на свой вопрос и говорите, что нашли класс github, который решил вашу проблему, было бы здорово, если бы вы поделились своим решением. Просто сказать, что решение использовало пользовательскую категорию, не очень помогает. Какой класс вы нашли? - person mbeaty; 19.07.2015