アプリ内購入を iOS アプリに統合しました。しかし問題は、iTunes サーバーに対するアプリ内購入の領収書の検証後に、Apple が「無効な応答データ」を返すことがあるということでした。何故かはわからない?。また、これはすべてのユーザーではなく、少数のユーザーにのみ発生しています。ここでの実際の問題は何ですか? また、領収書の確認が失敗した場合、Apple はその購入に対して請求しますか、それとも請求しませんか?
ここで、iTunesサーバーに対して購入した領収書を確認するためのサーバー側のコード:
<?php
$devmode = FALSE; //TRUE; // change this to TRUE testing against sandbox
$receiptdata = $_POST['receiptdata'];
$email_id = base64_decode($_POST['user_email_id']);
$pwd = $_POST['pwd'];
if($devmode)
{
$appleURL = "https://sandbox.itunes.apple.com/verifyReceipt";
}
else
{
$appleURL = "https://buy.itunes.apple.com/verifyReceipt";
}
try {
$receipt = json_encode(array("receipt-data" => $receiptdata));
$response_json = do_post_request($appleURL, $receipt);
$response = json_decode($response_json);
if (!is_object($response)) {
throw new Exception('Invalid response data');
}
if (!isset($response->status) || $response->status != 0)
{
throw new Exception('Invalid receipt');
}
if($response->{'status'} == 0)
{
echo 'receipt verification success';
} else {
}
catch (Exception $ex) {
eecho 'exception got: ' . $ex->getMessage();
exit(0);
}
function do_post_request($endpoint, $postData, $optional_headers = null)
{
// create the cURL request
$ch = curl_init($endpoint);
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
// execute the cURL request and fetch response data
$response = curl_exec($ch);
$errno = curl_errno($ch);
$errmsg = curl_error($ch);
curl_close($ch);
// ensure the request succeeded
if ($errno != 0) {
throw new Exception($errmsg, $errno);
}
return $response;
}
?>
感謝しなければならない助け。
ありがとう、-loganathan