3

アプリ内購入を 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

4

0 に答える 0