J'essaie de mettre en œuvre un modèle de produit Serveur d'achat intégré. J'ai lu la documentation Apple et je n'ai pas compris ce que je dois faire, mais je fais quelque chose de mal quelque part. Je suppose que je ne sais rien à propos de PHP :(, donc j'essaie de comprendre quelque chose seulement maintenant, mais j'ai aussi cherché dans ce forum et j'ai trouvé beaucoup de choses intéressantes qui m'a aidé. par étape ce que je fais dans mon application: - j'ai créé le mécanisme pour acheter un article du magasin et semble travailler
- dans mon storeobserver j'ai ajouté les deux méthodes: encoder et vérifierReceipt (copié de link text) à très le reçu
- J'utilise un serveur ftp pour télécharger mes fichiers achats in-app et je veux l'utiliser également pour héberger le fichier php validator
achat dans l'application Mise en œuvre du modèle de produit serveur
Maintenant, je colle ma méthode et mon fichier php, probablement je suis faire quelque chose de mal ici:
méthode verifyReceipt
- (BOOL)verifyReceipt:(SKPaymentTransaction *)transaction {
NSString *jsonObjectString = [self encode:(uint8_t *)transaction.transactionReceipt.bytes length:transaction.transactionReceipt.length];
NSString *completeString = [NSString stringWithFormat:@"ftp://user:[email protected]/DDDD/validator.php?receipt=%@", jsonObjectString];
NSURL *urlForValidation = [NSURL URLWithString:completeString];
NSMutableURLRequest *validationRequest = [[NSMutableURLRequest alloc] initWithURL:urlForValidation];
[validationRequest setHTTPMethod:@"GET"];
NSData *responseData = [NSURLConnection sendSynchronousRequest:validationRequest returningResponse:nil error:nil];
[validationRequest release];
NSString *responseString = [[NSString alloc] initWithData:responseData encoding: NSUTF8StringEncoding];
NSLog(@"%@",responseString);
NSInteger response = [responseString integerValue];
[responseString release];
return (response == 0);
}
J'appelle méthode verifyReceipt ainsi:
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions{
BOOL verification=false;
for (SKPaymentTransaction *transaction in transactions)
{
switch (transaction.transactionState)
{
case SKPaymentTransactionStatePurchased:
verification=[self verifyReceipt:transaction];
if (verification) {
[self completeTransaction:transaction];
}
break;
.......
validator.php sur le serveur ftp
<?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_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $receipt);
$response_json = curl_exec($curl_handle);
curl_close($curl_handle);
$response = json_decode($response_json);
// Save the data here!
$myFile = "testFile.txt";
$fh = fopen($myFile, 'w') or die("can't open file");
fwrite($fh, $response);
fclose($fh);
echo $response->status;
?>
je peux » t comprendre w le chapeau ne fonctionne pas correctement, mais sur le serveur le fichier testFile.txt n'est pas généré et la fonction verifyReceipt retourne toujours vrai car sur mon iPhone, la transaction se termine toujours avec succès (même si je modifie manuellement le jsonObjectString). Toute suggestion est très très appréciée !!!!!