Apple - Non-Consumable IAP не указан в квитанции при проверке с помощью Apple
В настоящее время мы сталкиваемся с проблемой, заключающейся в том, что наш неиспользованный IAP не указан в ответе, когда мы проверяем квитанцию на сервере яблок. Помимо одного нерасходуемого IAP, у нас есть автоматически возобновляемые и невозобновляемые подписки, но они работают должным образом и указаны в квитанции. В квитанции не отображается только неиспользованный IAP, в результате чего пользователь не может использовать приложение, даже если он заплатил за него.
Здесь поток в нашем приложении следующий:
- Покупка совершается пользователем (это работает, потому что есть счет от Apple, который пользователь отправляет нам для подтверждения)
- Получить квитанцию
- Отправьте квитанцию на наш сервер
- Отправьте квитанцию с нашего сервера в Apple
- Разобрать ответ
- Подтвердите результат и отправьте обратно, является ли пользователь действительным или нет
Для простоты мы используем SwiftyStoreKit в нашем приложении для совершения покупок, получения квитанций и т. Д.
На стороне сервера мы используем магазин квитанцию-валидатор легкого PHP Lib
$validator = new iTunesValidator($debug ? iTunesValidator::ENDPOINT_SANDBOX : iTunesValidator::ENDPOINT_PRODUCTION);
try {
$response = $validator->setSharedSecret($sharedSecret)->setReceiptData($receiptBase64Data)->validate();
} catch (Exception $e) {
throw new Exception($e->getMessage());
}
//is receipt valid
if ($response->isValid()) {
//check if receipt is not empty
if (!empty($response->getLatestReceiptInfo())) {
$purchases = $response->getLatestReceiptInfo();
// purchases holds all the test purchases from the past but only auto-renewable and non-renewing subscriptions are listed
Я также попробовал это без библиотеки php, используя следующий скрипт, но результат тот же:
$applesharedsecret = "applesecretfromyourdevaccount";
$receiptbytes = "......applereceipt.......";
$appleurl = "https://buy.itunes.apple.com/verifyReceipt"; // for production
// use https://sandbox.itunes.apple.com/verifyReceipt for testing with sandbox receipt
$request = json_encode(array("receipt-data" => $receiptbytes,"password"=>$applesharedsecret));
$ch = curl_init($appleurl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
$jsonresult = curl_exec($ch);
curl_close($ch);
var_dump($jsonresult); // see the details of the receipt.
Мы что-то упускаем? Я вижу все остальные IAP из нашего