Как отправить запрос на подтверждение получения в Apple через JSON POST?

0

Я видел несколько вопросов об этом, но никто не исправляет мою проблему, когда я получаю ответ {status ": 21002}

Мой PHP-код:

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://sandbox.itunes.apple.com/verifyReceipt');
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLINFO_HEADER_OUT, true);

curl_setopt($curl, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode(array('receipt-data' => $receipt)));

print curl_exec($curl);
print curl_getinfo($curl, CURLINFO_HEADER_OUT);

вот мои сырые заголовки HTTP, идущие к яблоку:

POST /verifyReceipt HTTP/1.1
Host: sandbox.itunes.apple.com
Accept: */*
Content-Type: application/json
Content-Length: 3382
Expect: 100-continue

Значение квитанции $:

{"receipt_type":"ProductionSandbox","app_item_id":0,"original_purchase_date": ....

Я не буду включать все это, но он включает в себя приложение в поле.

Я также попытался получить base64_encode или json_decode $, но получил тот же ответ. За исключением того, что base64_encode также получает "exception":"java.lang.IllegalArgumentException"

Я уверен, что публикация правильная, но я отправляю неправильное содержимое? является ли квитанция $, которая должна быть обернута другими данными? или я должен просто отправить подмножество этих данных?

Теги:
app-store

1 ответ

0

Из значения вашего параметра $receipt, кажется, что вы смешиваете проверку валидации на местном и сервере. В соответствии с руководством по проверке квитанции и, в частности, с подтверждением поступлений в разделе " Магазин приложений ", параметр "данные приема" должен быть "базовыми данными для получения кодированных данных". Вместо того, чтобы декодировать данные квитанции на клиенте, просто base64 кодирует данные квитанции в виде строки и использует это для $receipt.

Я бы упростил base64 кодировать данные квитанции на стороне клиента, а затем отправить их на php. Здесь сжатая версия из примеров doc, и поскольку вы говорите о покупке магазина iTunes, я надеюсь, что obj-c - это то, что вам нужно. Чтобы получить эту строку, извлеките URL-адрес квитанции, прочитайте данные из него, затем base64 закодируйте его:

NSURL *url = [[NSBundle mainBundle] appStoreReceiptURL];
NSData *data = [NSData dataWithContentsOfURL:url];
NSString *encoded = [data base64EncodedStringWithOptions:0];

POST выглядит корректно иначе.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню