2010-11-20 41 views
0

Je fais une application pour iPhone/iPad qui utilise la fonctionnalité d'achat in-app. Du côté du serveur, je charge un script php pour la vérification du reçu. Voici le contenu du script:script PHP pour l'achat in-app

<?php 
$receipt = json_encode(array("receipt-data" => $_GET["receipt"])); 
// NOTE: use "buy" vs "sandbox" in production. 
$url = "https://sandbox.itunes.apple.com/verifyReceipt"; 
$curl_handle=curl_init(); 
curl_setopt($curl_handle, CURLOPT_URL, $url); 
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl_handle, CURLOPT_HEADER, 0); 
curl_setopt($curl_handle, CURLOPT_POST, true); 
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $receipt); 
$response_json = curl_exec($curl_handle); 
$response = json_decode($response_json); 
curl_close($curl_handle); 
print $response->{'status'}; 
?> 

Mon problème est que la variable de réponse est toujours vide, je ne peux pas recevoir de réponse. Aussi le response_json est vide et je ne peux pas comprendre quel est le problème. Je pense que quelque chose est côté serveur, mais je ne suis pas un expert de PHP et le serveur n'est pas sous mon contrôle direct. Quelqu'un peut-il me proposer un moyen de résoudre le problème ou de tester quel coulod?

Répondre

1

Remercions En cas d'échec curl_exec(), il retournera un booléen FAUX. Vous alimentez aveuglément la réponse à json_decode et supposez que vous obtiendrez quelque chose. Decoding boolean false vous donne un var vide. Au lieu de cela, essayez ceci:

... 
$response_json = curl_exec($curl_handle); 
if ($response_json === FALSE) { 
    die(curl_error($curl_handle)); 
} 
$response = json_decode($response_json); 
... 
+0

Merci beaucoup! En fait, j'ai essayé votre changement et maintenant je reçois cette erreur: "certificat de réglage d'erreur vérifier les emplacements: CAfile: /usr/local/share/curl/curl-ca-bundle.crt CApath: none"! Donc, c'est quelque chose à propos des paramètres de curl, maintenant je vais chercher un correctif ... – Marco