Мне нужна помощь с парсингом ответа проверки чека 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.
Я занимаюсь этим впервые, любая помощь будет признательна, пожалуйста, скажите мне, если вам нужна дополнительная информация, я буду рад указать на это.
ОБНОВИТЬ:
Обратите внимание на элементы в массиве 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
Я имею в виду, что мог бы перебирать весь массив, но кажется немного странным, что нет более простого способа получить последнюю квитанцию. И могу ли я быть уверен, что в списке будет самая последняя квитанция? Мне нужно получить идентификатор транзакции с него, поэтому я должен быть уверен!
Спасибо!
Поэтому я хочу ответить на этот вопрос, потому что это может кому-то помочь, особенно, если он впервые сталкивается с этим.
То, что вызвало такую структуру ответа, было не на стороне PHP, а на стороне кода iPhone. Я не уверен, что там произошло, но я попросил разработчика прислать мне его описание проблемы, вот оно (цитата):
Проблема была в кодировании квитанции, это была ошибка документации Apple:
Apple говорит, что должен использовать стандартный метод base64encoding — после этого мы получаем этот странный ответ с этим массивом in_app receives.
Я нашел на GitHub класс, который делает проверки, которые делают много тестов:
1) отправляет квитанцию в Apple
2) проверяет уникальность ID транзакции
3) проверяет, являются ли объекты квитанции или транзакции действительными
И я видел, что они не использовали стандартный метод кодирования перед отправкой, но они используют пользовательскую категорию NSData + Base64. Я добавил эту категорию в проект и закодировал квитанцию методом из этой категории. После этого я начал получать ответы с новой структурой — той, которая нам нужна — без чеков в массиве, а с одним чеком со всеми необходимыми данными.
Других решений пока нет …