0

Ich habe eine Android- und iOS-Anwendung, die Firebase-Cloud-Funktionen mit Stripe verwendet, um Zahlungen zu verarbeiten.Firebase Cloud-Funktionen (Stripe: AddPaymentSource)

Auf der Client-Seite handle ich die Token-Operation und schreibe dann in die Echtzeit-Datenbank. Wenn Sie fertig sind, wird die addPaymentSource Cloud-Funktion ausgelöst, die diese Zahlungsquelle für zukünftige Transaktionen speichert.

Interessanterweise funktioniert der Prozess zum Erstellen eines Tokens auf iOS und das Speichern dieser Ausgabe auf meinem Server wie erwartet. Mein Problem tritt auf, wenn ich versuche, meine iOS-Implementierung in meine Android-Anwendung zu kopieren. Die Firebase-Cloud-Funktion wird wie erwartet ausgelöst, gibt jedoch einen Fehler an meinen Server aus.

Fehler im Server gefunden:

"The source hash must include an 'object' key indicating what type of source to create." 

Code Auftraggeber:

public void tokenizePaymentFields(){ 
    Stripe stripe = new Stripe(getApplicationContext(), stripePublishableKey); 

    final Card stripeCard = new Card(validCard.getCardNumber() 
    ,Integer.valueOf(validCard.getExpiredDate().substring(0,2)),Integer.valueOf(validCard.getExpiredDate().substring(3,5)),validCard.getCvvCode()); 

    if (!stripeCard.validateCard()) { 
     Toast.makeText(getApplicationContext(), 
       "There was an error validating your card.", 
       Toast.LENGTH_LONG 
     ).show(); 
     return; 
    } 
    stripe.createToken(
      stripeCard, 
      new TokenCallback() { 
       public void onSuccess(Token token) { 
        // Send token to your server 
        pushToServer(token); 
       } 
       public void onError(Exception error) { 
        // Show localized error message 
        activitySubmitCreditCardBinding.progressCircle.setVisibility(View.INVISIBLE); 
        Toast.makeText(getApplicationContext(), 
          error.getLocalizedMessage(), 
          Toast.LENGTH_LONG 
        ).show(); 
       } 
      } 
    ); 
} 

Streifen (Firebase Cloud-Funktionen): https://github.com/firebase/functions-samples/tree/master/stripe

Antwort

2

Anstatt die gesamte token object auf Ihren Server zu senden, Sie sollte einfach die Tokens id, wie folgt senden:

public void onSuccess(Token token) { 
    // Send token to your server 
    pushToServer(token.getId()); 
} 

In Ihrer Server-Seite (Firebase) Code erwartet die charge creation request nur ein Token-ID im source Parameter, keine vollständiges Token-Objekt.

+0

Ehrfürchtig. Danke für Ihre Hilfe. – Cari95