Überprüfen Sie den Empfang für den App-Kauf
Ich habe das Spiel mit in-app-Käufe für ein paar Tage, funktioniert alles einwandfrei bis zu dem Punkt, wo ich überprüfe den Empfang mit dem app store, da bin ich ständig immer wieder einen ungültigen status.
Leite ich den Empfang von Daten an mein PHP-server die Weiterleitung von dort auf den app-store und sobald ich eine gültige Antwort habe ich die Absicht, um den Eingang von Daten zu meiner Datenbank.
Des store-kit programming guide und die Referenzen sind weniger als nutzlos für diesen speziellen Bereich, wie Sie don T wirklich geben Ihnen jede Art von Beispiel, ich habe eine nützliche Artikeldas half mir ein wenig, aber etwas ist immer noch falsch.
Grundsätzlich bin ich Frage mich, ob jemand, der Erhalt der Validierung arbeitet, würde bereit sein zu teilen Ihren code bin ich nirgends bekommen.
Dank
InformationsquelleAutor der Frage Andy | 2009-08-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erste, es sind ein paar Tippfehler in den code gepostet. Dies versuchen. (Disclaimer: Refactoring et. al ist Links als übung für den Leser!)
Können Sie diese Internen Methoden auf die Klasse, die mit Ihren SKPaymentTransactionObserver Nachrichten:
Hinweis: Sie könnte so etwas wie libcrypto zu behandeln, base64-Codierung, aber dann bist du auf der Suche im export-Einschränkungen und zusätzliche Schritte bei der app-Zulassung Zeit. Aber ich schweife ab ...
Dann, wo immer Sie wollen kick-off-Aufzeichnung der Transaktion auf dem remote-server, call verifyReceipt: mit Ihrer Transaktion und stellen Sie sicher, es kommt wieder positiv.
Inzwischen auf Ihrem server, hier einige super-abgespeckte PHP, um Dinge zu handhaben:
Wo call-your-http-post-hier ist Ihre Lieblings-HTTP-post-Mechanismus. (cURL ist eine mögliche Wahl. YMMV. PHP.net hat die Schaufel!)
Eine Sache, die mich etwas besorgt ist die Länge der Nutzlast in die URL von der app an den server (per GET). Ich vergessen, wenn es eine Länge Ausgabe pro die RFCs. Vielleicht ist es OK, oder es ist server-spezifisch. (Leser: Beratung-willkommen auf diesem Teil!!!!)
Es kann auch einige balking das eine synchrone Anfrage. Möchten Sie vielleicht, um es zu veröffentlichen asynchron und die ol' UIActivityIndicatorView oder andere HUD. Case in point: Das initWithData:Codierung: Aufruf einer laaaangen Zeit für mich. Wenige Sekunden, eine kleine Ewigkeit im iPhone-land (oder sonst wo online, für diese Angelegenheit). Zeigt irgendeine Art von unbestimmter Status-LED kann ratsam sein.
InformationsquelleAutor der Antwort Joe D'Andrea
Den vollständigen source-code, als auch als gehostete Beispiel einer PHP-Implementierung ist verfügbar unter: http://www.chrismaddern.com/validate-app-store-iap-receipt-codes-online-tool/
Hoffe es hilft dir!
InformationsquelleAutor der Antwort Chris Maddern
Für alle, die sich Fragen, wie Sie zu behandeln Verbindung oder überprüfung Fehler auftreten, wenn Sie die In-App-Kauf-server-Modell. Erhalt Validierung stellt sicher, dass die Transaktion abgeschlossen ist und erfolgreich. Sie wollen nicht, dass aus dem iPhone, da kann man nicht wirklich Vertrauen des Benutzers Telefon.
Wenn der server down ist, sollten Sie nicht die Transaktion abzuschließen, aber es wird eine "Nichtverfügbarkeit Nachricht" an die Benutzer.
aufgerufen wird, werden Sie es später erneut.
Aberwenn Sie erfahren, dass ein Eingang ungültig ist, sollten Sie beenden die zugehörigen Transaktion. Wenn nicht, müssen Sie extra-Transaktionen Leben in die transaction queue. Das bedeutet, dass jedes mal, wenn Ihre app ausgeführt wird, paymentQueue:updatedTransaction: wird einmal aufgerufen werden, die pro Transaktion...
In meine apps, Erhalt die überprüfung erfolgt durch einen web service, der einen Fehler-code im Falle einer ungültigen Eingang. Das ist, warum ein externer server benötigt wird. Wenn ein Benutzer es irgendwie schafft, Sie zu überspringen Erhalt Validierung (durch das vortäuschen der web-service - "Erfolg" - Antwort), wird er nicht in der Lage zu entsperren der Inhalte /Zugriff auf Funktionen, da der server keine Spur von dem Kauf.
InformationsquelleAutor der Antwort leviathan
Nach kämpfen mit diesem für eine Weile, schließlich fand ich eine Liste der status-codes in apples Dokumentation einschließlich das gefürchtete 21002 ("Die Daten in den Eingangs-Daten Eigenschaft war ungültig."). Während ich gesehen habe Berichte von anderen status-codes, die nicht in dieser Liste enthalten sind, habe ich bisher nicht gesehen, alle über das hinaus, was Apple dokumentiert hat. Beachten Sie, dass diese codes sind nur gültig für die automatische Verlängerung von Abonnements, nicht andere Arten von in-app-Käufe (oder so, das Dokument sagt).
Dem betreffenden Dokument gefunden werden kann hier.
InformationsquelleAutor der Antwort t-dub
Ich bin überrascht, um nicht gefunden haben, Ray Wenderlich tutorial hier - nur mein Leben gerettet. Geht durch die Validierung von Einnahmen, ohne dass ein server (nicht empfohlen, aber schwer getan sowieso).
http://www.raywenderlich.com/23266/in-app-purchases-in-ios-6-tutorial-consumables-and-receipt-validation
InformationsquelleAutor der Antwort capikaw
Senden Sie die Erhalt als Datei auf Ihren PHP-server. In Ihrem PHP-Seite Sie können dieses Skript verwenden, um zu überprüfen:
https://gist.github.com/eduardo22i/9adc2191f71ea612a7d071342e1e4a6f
InformationsquelleAutor der Antwort Eduardo Irias
Nur zu öffnen, diese wieder und mein 2-Cent-im Gegenzug für die Geißelung diese Formulare für die Informationen.
Ich nur setup eine IAP-service in meinem app und lief in das gleiche 21002 Fehler. Ich fand den 21002 passiert, wenn entweder die post auf Ihren PHP-server ist leer (also die HTTP-request an den app store ist leer oder nicht richtig formatiert. Um unsere Arbeit, auf der iPhone-Seite setzen wir die post-Daten in einem NSString als base64-kodierte dann schickte Sie es an unsere server als HTTP-request.
Dann auf unserem server, wir stecken es in das und-array und json-ed. Wie diese:
Werden Sie feststellen, es ist das gleiche wie oben, außer wir sind mit einem POST anstelle von GET. Persönliche Präferenz wirklich.
Wir dann benutzt CURL, um es auf die sandbox und verwendet json_decode auf die Antwort.
InformationsquelleAutor der Antwort
Wenn Sie null Reaktionen oder Fehler-codes, z.B. 21002, versuchen Sie, diese Zeilen. Wenn Sie überprüft die curl-Fehler-codes, es ist ein SSL-Zertifikat Fehler...
InformationsquelleAutor der Antwort Kyle Poole