Wie validiere ich die Bestätigung des Google-Belegs lokal mit dem alten Bestell-ID-Format?

9

Ich möchte die Validierung des Google-Belegs bestätigen, aber da ich keinen Kundenschlüssel habe, kann ich die Google API nicht verwenden : Ссылка

Also mache ich lokale Validierung mit public key , signedData und signature .

Alles funktioniert gut, seit ich orderId mit format:

habe

GPA.XXXX-XXXX-XXXX-XXXXX

Dieser Code funktioniert jedoch nicht für das alte Muster orderId , das wie folgt aussieht:

%Vor%

Ich bekomme eine Ausnahme:

  

Signaturausnahme java.security.SignatureException: Signaturlänge nicht korrekt: 294 erhalten, aber 256

erwartet

So ist es mir gelungen, PublicKey bu fails on verify zu generieren:

%Vor%

Ich weiß, dass RSA Signatur 256 sein sollte, in meinem Fall 294

Hinweis: Google Play-Bestell-ID wurde auf ein neues Format aktualisiert

Codebeispiel

%Vor%

DefaultSignatureValidator.class :

%Vor%

Irgendwelche Ideen, wie man es bestätigt?

Wenn Sie eine Lösung haben, egal in welcher Sprache Clojure, Skala, Ruby, Java .....

    
snaggs 27.08.2017, 06:37
quelle

1 Antwort

4

In der Annahme, dass Sie versuchen, einen echten Beleg zu validieren: Wenn Sie SignatureException erhalten - das bedeutet, dass nichts anderes als die angegebene Signatur ungültig ist . Und Ihr Code muss solche Signaturen entsprechend behandeln, d. H.

%Vor%

Sie haben einen Code angefordert, der sich auf die Verarbeitung für die alte OrderId bezieht: hier Geh . Wie Sie sehen können, ist der Validierungsabschnitt in Ruby für Ihren identisch. Auch hier gibt es kein Problem mit Ihrem Code. Das Problem besteht insbesondere darin, Quittungssignaturen zu erhalten.

Und jetzt, die Antwort auf warum haben Sie ungültige Signaturen. Sie sind nicht allein darin, dass ungültige Signaturen eintreffen, insbesondere für altformatierte Auftrags-IDs wie hier gefragt (und dort und überall ), die weit kommen, nachdem Google auf die neuen GPA-fixierten IDs umgestellt hat. Übrigens können Sie überprüfen, ob Sie die folgenden Bedingungen haben:

  

Die Suche nach den orderIds in der Auftragsverwaltungs-Registerkarte der GooglePlay-Konsole liefert keine Ergebnisse für diese orderIds.

Die Ursache, die am meisten logisch in den Sinn kommt, ist betrügerische Aktivität . Sehen Sie sich diese Antwort an, um beispielsweise zu erfahren, wie betrügerischer Fluss aussehen kann

Zurück zu Ihrer Frage, wie Sie den Beleg mit der alten Auftrags-ID lokal validieren können - validieren Sie ihn genau wie einen mit der neuen Auftrags-ID (wie Sie es bereits tun) und betrachten Sie die Signatur mit der falschen Länge als eine, die nicht stimmt gültig.

    
Kostiantyn 03.09.2017, 13:10
quelle