Я пытаюсь найти способ проверить статус подписки пользователя в Apple Store из бэкэнда (PHP / Laravel). Мы уже знаем UUID пользователя, и у нас есть настройка подписки на Apple. Пользователь получает доступ к приложению после подписки на услугу через Apple в течение пробного периода, и мне нужно проверить, действительно ли пользователь подписался на услугу после завершения пробного периода или нет.
Мой вопрос: как вы общаетесь с Apple Store, чтобы получить статус подписки пользователя, используя PHP / Laravel в качестве бэкэнда?
Чтобы уточнить, приложение позволяет пользователям подписаться на услугу через веб-приложение и мобильное приложение. Через Интернет легко получить статус подписки пользователя, так как для этого мы используем Stripe. Однако в приложении пользователи подписываются на сервис через Apple Store. Итак, еще раз, как вы общаетесь с Apple Store, чтобы получить статус подписки пользователя, используя PHP / Laravel в качестве бэкэнда?
Вы можете запросить эту информацию в 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
и некоторая другая дополнительная информация.
используйте 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);
Других решений пока нет …