Я только что завершил разработку своего приложения, создал свою учетную запись организации Apple, создал все, что мне нужно, на стороне подключения iTunes, но теперь моя проблема заключается в разработке проверка квитанции на стороне сервера (поскольку Проверка квитанций локально кажется, есть некоторые потенциальный человек в средних проблемах безопасности).
...
// Load the receipt from the app bundle.
NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL];
NSData *receipt = [NSData dataWithContentsOfURL:receiptURL];
if (!receipt) { /* No local receipt -- handle the error. */ }
/* ... Send the receipt data to your server ... */
...
Я хорошо понял процесс проверки, описанный на этой картинке:
Моя главная проблема в том, что я не большой специалист по вопросу о сервере, и если у вас есть несколько примеров того, что мне нужно кодировать для подтверждения получения и какую технологию я должен использовать (PHP, Angular или что-то еще …).
(Первый пример: На что билет, достаточно ли кода на стороне сервера для выполнения этой проверки?)
(Второй пример: Является ли этот процесс успешным с отправкой UDID и квитанции, закодированной в Base64, на сервер с JSON, запрос сервера в магазин приложений, отправка магазина приложений в порядке, а сервер отправка в приложение в порядке. Если это хороший процесс, я могу сделать это легко. Билет 2
Заранее спасибо.
Вот мое решение:
Я использую свой сервер для подтверждения получения чека следующим образом:
https://github.com/aporat/store-receipt-validator
use ReceiptValidator\iTunes\Validator as iTunesValidator;
$validator = new iTunesValidator(iTunesValidator::ENDPOINT_PRODUCTION); // Or iTunesValidator::ENDPOINT_SANDBOX if sandbox testing
$receiptBase64Data = 'ewoJ
......
OVG8xTlNCRmRHTXZSMDFVSWpzS2ZRPT0iOwoJImVudmlyb25tZW50IiA9ICJTYW5kYm94IjsKCSJwb2QiID0gIjEwMCI7Cgkic2lnbmluZy1zdGF0dXMiID0gIjAiOwp9';
try {
$response = $validator->setReceiptData($receiptBase64Data)->validate();
// $sharedSecret = '1234...'; // Generated in iTunes Connect's In-App Purchase menu
// $response = $validator->setSharedSecret($sharedSecret)->setReceiptData($receiptBase64Data)->validate(); // use setSharedSecret() if for recurring subscriptions
} catch (Exception $e) {
echo 'got error = ' . $e->getMessage() . PHP_EOL;
}
if ($response->isValid()) {
echo 'Receipt is valid.' . PHP_EOL;
echo 'Receipt data = ' . print_r($response->getReceipt()) . PHP_EOL;
} else {
echo 'Receipt is not valid.' . PHP_EOL;
echo 'Receipt result code = ' . $response->getResultCode() . PHP_EOL;
}
И WS на моем сервере отправьте мне нормально или нет.
(Для локального процесса на iPad, который не рекомендуется, вы можете найти его здесь: Я получаю 21004 в качестве значения состояния в ответ от тестового сервера Apple, тестирующего автообновляемые подписки в ios?)
Других решений пока нет …