AppStore In-App-Kaufbestätigungsprobleme

8

Ich weiß, dass es einige Beiträge zu diesem Thema gab, aber keine scheint die Probleme anzugehen, auf die wir stoßen. Bisher denke ich, dass alles korrekt eingerichtet ist, wie in Referenzbibliothek für iOS-Referenzdokumente zum Überprüfen von Geschäftsbelegen . Allerdings erhalten wir während unserer POST-Anfrage an die AppStore-Verifikations-URL eine 21002 "java.lang.NullPointerException", so dass ich etwas falsch machen muss.

Einige Probleme, die mir aufgefallen sind, könnten dies verursachen:

1) EMPFANG AMBIGUITY

Die Dokumentation besagt, dass unsere iPhone-App nur die Quittung für die Verifizierung an unseren Server weiterleiten soll, aber nicht genau angibt, was die Quittung ist. Zuerst dachte ich, es könnte das gesamte JSON-Objekt unten sein, aber jetzt frage ich mich, ob die Quittung nur das "Kauf-Info" -Feld ist.

%Vor%

2) UNGÜLTIGES JSON

Die Daten sind in base64 kodiert und sobald sie decodiert sind, sollen sie die Informationen in einem gültigen JSON-Objekt liefern, aber von dem, was ich sehe, sind die Objekte definitiv nicht gültige JSON. Apple scheint "=" zu verwenden, wobei ":" und ";" wo "," sollte sein:

%Vor%

Ich frage mich, ob ein Grund, warum wir einen Fehler erhalten, der sein könnte, dass der von ihnen bereitgestellte Empfang kein gültiger JSON ist. Wenn wir also die Daten zur Verifizierung bereitstellen, lehnt der Server sie ab. Sollten wir alles dekodieren, das Objekt als gültiges JSON reparieren, es neu kodieren und es dann zur Überprüfung an Apple senden?

Ich hoffe, dass jemand anderer da draußen, der diese Arbeit hat, mich auf die zwei obigen Fragen in die richtige Richtung weisen kann oder besser noch den richtigen CURL-Aufruf liefert, der eine gültige Antwort erhält, die meine Probleme vollständig lösen würde / p>

Vielen Dank im Voraus für Ihre Hilfe!

    
Russell C. 09.03.2011, 00:58
quelle

3 Antworten

10

Wenn ich die Dokumentation richtig lese, sind Sie auf dem Holzweg. Der Beleg, den Sie zur Überprüfung senden, ist der Teil der Daten, der von der transactionReceipt -Eigenschaft zurückgegeben wird. Es sollte dir egal sein, was es dekodiert, oder ob es zu irgendetwas dekodiert. Sie base64-codieren es einfach, legen Sie es in ein JSON-Objekt als den Wert für einen Schlüssel "Empfangsdaten", und posten Sie dieses JSON-Objekt an Apple.

Wenn Sie die Antwort von Apple erhalten, das ist, was die Empfangsdaten im JSON-Format enthalten soll.

    
Anomie 09.03.2011, 01:37
quelle
4

Für alle anderen, die in Zukunft den 21002-Fehler bekommen. Es dauerte ein paar Stunden, um herauszufinden, was falsch lief. Im Allgemeinen bedeutet dies, dass die Base 64-codierte Zeichenfolge innerhalb des JSON, das Sie an Apple-Server senden, falsch ist. Dies bedeutet wahrscheinlich, dass Sie nicht Base-64-Codierung oder dass Ihre Codierung Routine fehlerhaft ist. Dies sind die Schritte, die Sie verwenden sollten:

1) Base-64 codiert alle NSData, die Sie von der transactionReceipt-Eigenschaft Ihres SKPaymentTransaction-Objekts erhalten, in ein NSString-Objekt. Sie können die folgende Methode verwenden.

2) Fügen Sie das in eine JSON-Zeichenfolge ein. Im objektiven C-Code wäre es:

%Vor%

3) HTTP POST das

4) Sie erhalten eine JSON-Zeichenfolge zurück - extrahieren Sie den Wert für "status". Wenn es 0 ist, wurde Ihre Quittung bestätigt - andernfalls handelt es sich um einen nicht bestätigten Kauf.

Unten ist der Code, den ich verwende, um die NSData in eine Base-64-codierte Zeichenfolge zu konvertieren:

%Vor%

Um es zu verwenden, tun Sie etwas wie:

%Vor%     
Cthutu 06.10.2011 16:05
quelle
2

Das sieht aus wie eine ASCII-Eigenschaftenliste - Sie sollten die NSPropertyListSerialization Klasse, um sie zu dekodieren.

BEARBEITEN

Was ist die Klasse des decodierten Objekts? Das sieht auch so aus, als ob Sie ein NSDictionary mit NSLog ()

ausgeben     
Dre 09.03.2011 01:03
quelle

Tags und Links