Я нахожусь в процессе настройки проверки получения автоматически возобновляемых подписок Apple на нашем сервере и заметил некоторые несоответствия с официальным документация. При проверке квитанции песочницы с помощью конечной точки sandbox verifyReceipt ответ выглядит следующим образом:
{
"auto_renew_status": 1,
"status": 0,
"auto_renew_product_id": "app.xxx",
"receipt": {
"original_purchase_date_pst": "2020-03-18 01:11:45 America/Los_Angeles",
"quantity": "1",
"unique_vendor_identifier": "6D2xxx194",
"bvrs": "2",
"expires_date_formatted": "2020-03-20 12:27:07 Etc/GMT",
"is_in_intro_offer_period": "false",
"purchase_date_ms": "1584703627636",
"expires_date_formatted_pst": "2020-03-20 05:27:07 America/Los_Angeles",
"is_trial_period": "false",
"item_id": "15xxx27",
"unique_identifier": "cd5xxx424",
"original_transaction_id": "100xxx735",
"subscription_group_identifier": "20xxx02",
"transaction_id": "100xxx439",
"web_order_line_item_id": "100xxx419",
"version_external_identifier": "0",
"purchase_date": "2020-03-20 11:27:07 Etc/GMT",
"product_id": "app.xxx",
"expires_date": "1584707227636",
"original_purchase_date": "2020-03-18 08:11:45 Etc/GMT",
"purchase_date_pst": "2020-03-20 04:27:07 America/Los_Angeles",
"bid": "app.xxx",
"original_purchase_date_ms": "1584519105000"
},
"latest_receipt_info": {
"original_purchase_date_pst": "2020-03-18 01:11:45 America/Los_Angeles",
"quantity": "1",
"unique_vendor_identifier": "6D2xxx194",
"bvrs": "2",
"expires_date_formatted": "2020-03-20 12:27:07 Etc/GMT",
"is_in_intro_offer_period": "false",
"purchase_date_ms": "1584703627000",
"expires_date_formatted_pst": "2020-03-20 05:27:07 America/Los_Angeles",
"is_trial_period": "false",
"item_id": "15xxx27",
"unique_identifier": "cd5xxx424",
"original_transaction_id": "100xxx735",
"subscription_group_identifier": "20xxx02",
"transaction_id": "100xxx439",
"bid": "app.xxx",
"web_order_line_item_id": "100xxx419",
"purchase_date": "2020-03-20 11:27:07 Etc/GMT",
"product_id": "app.xxx",
"expires_date": "1584707227000",
"original_purchase_date": "2020-03-18 08:11:45 Etc/GMT",
"purchase_date_pst": "2020-03-20 04:27:07 America/Los_Angeles",
"original_purchase_date_ms": "1584519105000"
},
"latest_receipt": "xxx"
}
Особо хочу отметить следующие поля этого ответа:
{
...
"latest_receipt_info": {
...
"expires_date": "1584707227000",
"expires_date_formatted": "2020-03-20 12:27:07 Etc/GMT",
"expires_date_formatted_pst": "2020-03-20 05:27:07 America/Los_Angeles",
"subscription_group_identifier": "20xxx02",
"bid": "app.xxx",
...
},
"receipt": {
...
"expires_date": "1584707227636",
"expires_date_formatted": "2020-03-20 12:27:07 Etc/GMT",
"expires_date_formatted_pst": "2020-03-20 05:27:07 America/Los_Angeles",
"subscription_group_identifier": "20xxx02",
"bid": "app.xxx",
...
},
...
}
Несоответствия с официальной документацией:
latest_receipt_info
задокументировано как массив, однако это один объект json.- В
latest_receipt_info
expires_date
не находится в «формате даты и времени, аналогичном ISO 8601», как документация говорит, но похоже, что это миллисекунды с начала эпохи (что должно бытьexpires_date_ms
). Однако мы можем найти ключexpires_date_formatted
в формате даты и времени. - Те же поля, что и в (2), также можно найти в квитанции, однако документация указывает только ключ
expiration_date
(аналогexpires_date
вlatest_receipt_info
в формате даты и времени) иexpiration_date_ms
(в миллисекундах с начала эпохи). - Задокументированный ключ
bundle_id
(здесь и здесь) отсутствует, но есть ключbid
, содержащий идентификатор пакета. - Ключ
subscription_group_identifer
не содержит точной строки, введенной в AppStoreConnect в качестве идентификатора группы подписки, как это задокументировано (здесь и здесь), но содержит целочисленное значение.
Итак, согласно документации, для меня ответ должен выглядеть так:
{
...
"latest_receipt_info": [
{
...
"expires_date": "2020-03-20 12:27:07 Etc/GMT",
"expires_date_ms": "1584707227000",
"expires_date_pst": "2020-03-20 05:27:07 America/Los_Angeles",
"subscription_group_identifier": "MY_SUBSCRIPTION_GROUP_ID",
"bundle_id": "app.xxx",
...
}
],
"receipt": {
...
"expiration_date": "2020-03-20 12:27:07 Etc/GMT",
"expiration_date_ms": "1584707227636",
"expiration_date_pst": "2020-03-20 05:27:07 America/Los_Angeles",
"subscription_group_identifier": "MY_SUBSCRIPTION_GROUP_ID",
"bundle_id": "app.xxx",
...
},
...
}
- Я не уверен, как справиться с этой ситуацией, это ошибка в API или документация просто неверна?
- Могу ли я ожидать таких же несоответствий для рабочей конечной точки (может ли кто-нибудь поделиться образцом ответа, пожалуйста)?
- Как насчет уведомлений в уведомлениях между серверами, есть ли несоответствия?
Заранее спасибо!