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

Я видел несколько вопросов по этому вопросу, но ни один из них не помог мне решить проблему, где я получил ответ {«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"

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

0

Решение

От стоимости вашего $receipt Параметр, кажется, что вы смешиваете локальную и серверную квитанцию ​​проверки. Согласно руководству по подтверждению получения, а именно Проверка квитанций в App Store В этом разделе параметром квитанции должны быть «данные квитанции в кодировке base64». Вместо того, чтобы декодировать данные квитанции на клиенте, просто base64 кодирует данные квитанции в виде строки и использует их для $receipt,

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

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

POST выглядит правильно в противном случае.

0

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

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