Frage

Ich war in den letzten Tagen versucht, meine erste in-app purchse iPhone-Anwendung zu testen. Leider kann ich nicht den Weg finden, um iTunes-Server zu sprechen, um die transactionReceipt zu überprüfen.

Weil es mein erster Versuch mit dieser Technologie wählte ich die Quittung direkt aus dem iPhone, um zu überprüfen, anstatt Server-Unterstützung. Aber nach dem Versuch, die POST-Anforderung mit einem JSON senden onbject von Google Code mit dem JSON api erstellt, itunes gibt immer eine seltsame Antwort (statt dem „status = 0“ string ich warte).

Hier ist der Code, den ich verwende den Empfang zu überprüfen:

- (void)recordTransaction:(SKPaymentTransaction *)transaction {
    NSString *receiptStr = [[NSString alloc] initWithData:transaction.transactionReceipt encoding:NSUTF8StringEncoding];
    NSDictionary *jsonDictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"algo mas",@"receipt-data",nil];

    NSString *jsonString = [jsonDictionary JSONRepresentation];
    NSLog(@"string to send: %@",jsonString);

    NSLog(@"JSON Created");
    urlData = [[NSMutableData data] retain];

    //NSURL *sandboxStoreURL = [[NSURL alloc] initWithString:@"https://sandbox.itunes.apple.com/verifyReceipt"];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://sandbox.itunes.apple.com/verifyReceipt"]];
    [request setHTTPMethod:@"POST"];
    [request setHTTPBody:[jsonString dataUsingEncoding:NSUTF8StringEncoding]];
    NSLog(@"will create connection");
    [[NSURLConnection alloc] initWithRequest:request delegate:self];
}

vielleicht bin ich etwas vergessen in dem Header Wunsch, aber ich denke, dass das Problem bei dem Verfahren, das ich das JSON-Objekt erstellen verwenden.

Hier ist, wie das JSON-Objekt aussieht, bevor ich es den HTTPBody hinzufügen:

    string to send: {"receipt-data":"{\n\t\"signature\" = \"AUYMbhY

       ...........

D0gIjEuMCI7Cn0=\";\n\t\"pod\" = \"100\";\n\t\"signing-status\" = \"0\";\n}"}

Die Antworten, die ich habe:

  

vollständige Antwort {       Ausnahme = „java.lang.IllegalArgumentException: Objektliste Parsing fehlgeschlagen beim Versuch, String ohne Anführungszeichen lesen Keine zulässigen Zeichen gefunden wurden bei Zeilennummer: 1, Spalte:.. 0“;       status = 21002;   }

Vielen Dank für Ihre Unterstützung.

War es hilfreich?

Lösung

Ich habe gerade festgelegt, dass nach 2 Tagen kämpfen. Sie haben den Eingang zu kodieren Base64 verwendet, bevor es in JSON-Objekt einfügen. Wie die (Rubin):

dataForVerification = {"receipt-data" => Base64.encode64(receipt)}.to_json

Base64 ist nicht überall in den offiziellen Dokumenten erwähnt (zumindest für SDK 3.0), nur auf ein paar Blogs.

Zum Beispiel hier der Typ, den Empfang in Base64 codiert, bevor er es den PHP-Server, sich aber nicht in PHP dekodieren zurück, so Base64-codierte Zeichenfolge zu iTunes senden.

Andere Tipps

Re: "21002: java.lang.IllegalArgumentException: propertyListFromString ein Objekt analysiert, aber es gibt noch mehr Text in der Zeichenfolge:."

Ich reparierte ein ähnliches Problem in meinem Code, indem Sie die Belegdaten in Einwickeln {} vor der Codierung.

Der resultierende Empfang wie folgt aussieht:

{
    "signature" = "A[...]OSzQ==";
    "purchase-info" = "ew[...]fQ==";
    "pod" = "100";
    "signing-status" = "0";
}

Hier ist der Code, den ich verwenden:

receipt = "{%s}" % receipt    // This step was not specified - trial and error
encoded = base64.b64encode(receipt)
fullpost = '{ "receipt-data" : "%s" }' % encoded
req = urllib2.Request(url, fullpost)
response = urllib2.urlopen(req)

Apples Antwort:

{"receipt":{"item_id":"371235", "original_transaction_id":"1012307", "bvrs":"1.0", "product_id":"com.foo.cup", "purchase_date":"2010-05-25 21:05:36 Etc/GMT", "quantity":"1", "bid":"com.foo.messenger", "original_purchase_date":"2010-05-25 21:05:36 Etc/GMT", "transaction_id":"11237"}, "status":0}

Viel Glück!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top