ios — обнаружение статуса подписки iTunes в переполнении стека

Я пытаюсь найти способ проверить статус подписки пользователя в Apple Store из бэкэнда (PHP / Laravel). Мы уже знаем UUID пользователя, и у нас есть настройка подписки на Apple. Пользователь получает доступ к приложению после подписки на услугу через Apple в течение пробного периода, и мне нужно проверить, действительно ли пользователь подписался на услугу после завершения пробного периода или нет.

Мой вопрос: как вы общаетесь с Apple Store, чтобы получить статус подписки пользователя, используя PHP / Laravel в качестве бэкэнда?

Чтобы уточнить, приложение позволяет пользователям подписаться на услугу через веб-приложение и мобильное приложение. Через Интернет легко получить статус подписки пользователя, так как для этого мы используем Stripe. Однако в приложении пользователи подписываются на сервис через Apple Store. Итак, еще раз, как вы общаетесь с Apple Store, чтобы получить статус подписки пользователя, используя PHP / Laravel в качестве бэкэнда?

2

Решение

Вы можете запросить эту информацию в App Store с доверенного сервера.

Конечная точка для среды песочницы https://sandbox.itunes.apple.com/verifyReceipt
и для производства это https://buy.itunes.apple.com/verifyReceipt

В качестве полезной нагрузки JSON необходимо отправить следующее:

receipt-data
Если его нет на вашем сервере, его можно получить, вызвав appStoreReceiptURL метод NSBundle, Прочитайте все содержимое этого файла и отправьте его на свой сервер.

Password (Только для автоматически обновляемых подписок это будет общий секрет вашего приложения)

exclude-old-transactions Используется только для квитанций приложений в стиле iOS7, которые содержат автоматически обновляемые или невозобновляемые подписки. Если значение равно true, ответ включает только самую последнюю транзакцию продления для любых подписок.

Затем он вернет полезную нагрузку, содержащую квитанцию status и некоторая другая дополнительная информация.

Проверьте эту статью в Apple

используйте cURL для вызова конечной точки App Store (ссылка выше). Вот грубый пример, вам нужно изменить его для вашей конкретной среды и заполнить необходимые переменные.

$service_url = [one of the two above];
$curl = curl_init($service_url);
$curl_post_data = array(
'receipt-data' => $receiptData,
'password' => $password, //Only required for certain types of subscription
'exclude-old-transactions' => $excludeoldtransactions //Depends on your use case, check Apple link
);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $curl_post_data);
$curl_response = curl_exec($curl);
if ($curl_response === false) {
$info = curl_getinfo($curl);
curl_close($curl);
die('error occured during curl exec. Additioanl info: ' . var_export($info));
}
curl_close($curl);
$decoded = json_decode($curl_response);
if (isset($decoded->response->status) && $decoded->response->status == 'ERROR') {
die('error occured: ' . $decoded->response->errormessage);
}
echo 'response ok!';
var_dump($decoded->response);

http://php.net/manual/en/book.curl.php

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]