IOS: event handling la falla de verificación de recepción de compras en la aplicación

Integré compras en la aplicación con mi aplicación ios. Pero el problema fue que Apple devolvió "datos de respuestas no válidas" después de la verificación de recibo de compra en la aplicación contra el server de iTunes. ¿No sé por qué?. Esto también está sucediendo solo para pocos usuarios, no para todos. ¿Cuál fue el problema real aquí cualquiera sabe o enfrenta este problema ?. Además, cuando falla la verificación del recibo, ¿Apple cobrará por esa compra o no ?.

Aquí mi código del lado del server para verificar el recibo comprado contra el server de ituens:

<?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; } ?> 

Cualquier ayuda que se debe apreciar.

Gracias, -loganathan