2015-02-24 3 views
0

Я видел несколько вопросов, но никто на самом деле не исправить мой вопрос, где я получаю ответ { «статус»: 21002}Как отправить запрос проверки чека на яблоко через JSON POST?

Мой код 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, похоже, что вы смешиваете проверку валидации на местном и сервере. Согласно руководству по проверке квитанции и, в частности, разделу Validating Receipts With the App Store, параметр данных приема должен быть «базовыми данными, полученными при кодировании». Вместо того, чтобы декодировать данные квитанции на клиенте, просто base64 кодирует данные квитанции в виде строки и использует это для $receipt.

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

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

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

Смежные вопросы