Laravel Cashier Unvollständige Ausnahmebehandlung für 3D Secure / SCA

Lesezeit: 3 Minuten

Benutzeravatar von Squiggs
Schnörkel.

Ich versuche derzeit, Laravel Cashier zu verwenden, um die Abrechnung in einer React-Anwendung abzuwickeln. Wenn ich eine Testkarte verwende, die 3D Secure erfordert (direkt aus der Stripes-Dokumentation gezogen) (4000000000003220), erhalte ich eine IncompletePayment exception Wurf.

Dies ist anscheinend normal, wie in der Dokumentation beschrieben:https://laravel.com/docs/6.x/billing#payments-requiring-additional-confirmation

try {
    $subscription = $user->newSubscription('default', $planId)
                            ->create($paymentMethod);
} catch (IncompletePayment $exception) {
    return redirect()->route(
        'cashier.payment',
        [$exception->payment->id, 'redirect' => route('home')]
    );
}

Jetzt empfiehlt Laravel, dass ich in diesem Szenario auf ihre „Bestätigungs“-Seite weiterleite. Hier liegt jedoch meine Verwirrung. Erstens habe ich den Kunden bereits über Stripe Elements in meiner React-Anwendung nach seiner Kreditkarte gefragt, sodass die Weiterleitung an eine von Laravel generierte serverseitige Seite wahrscheinlich ein hartes NEIN sein wird. Ich möchte dies alles elegant in meiner React-Anwendung handhaben.

Geben Sie hier die Bildbeschreibung ein

Ich habe auch bereits bestätigt, dass die Karte gegen 3D Secure über ein Popup wie das obige gültig ist, bevor ich etwas an den Server sende (was Stripe Elements Javascript bereits für mich gehandhabt hat), so dass die Dokumentation besagt:

Auf der Zahlungsbestätigungsseite wird der Kunde aufgefordert, seine Kreditkartendaten erneut einzugeben und alle von Stripe geforderten zusätzlichen Aktionen durchzuführen, wie z. B. die „3D Secure“-Bestätigung.

Scheint auf jeden Fall eine Wiederholung zu sein. Kann mir jemand sagen, was ich in diesem Szenario tun muss? Lose in meiner React App habe ich folgendes gemacht:

Generierte eine serverseitige Absicht und schickte sie zurück, um zu reagieren: Während des Abrechnungsprozesses:

stripe.confirmCardSetup(
            billingStatus.paymentIntent.client_secret,
            { 
              payment_method: {
                card: card,
                billing_details: {
                  name: 'Jenny Rosen'
                }
              }
            }
          )
            .then((res)=>{
              console.log(res);
              processPayment(  res );
            });

Der Prozess Payment method trifft auf den Server:

 var data = new FormData();
            data.append( "coreId", plan.id );
            data.append( "productId", plan.product_id );
            data.append( "planId", plan.stripe_plan_id );
            data.append( "paymentMethod", res.setupIntent.payment_method );

            billingApi.pay( data, function(res){
                BIG FAT 500 SERVER ERROR HERE. (IncompletePayment Exception)
            });

Ich bin auf Github auf ein Beispielproblem gestoßen: https://github.com/laravel/cashier/issues/743 Was mein Problem sehr genau widerspiegelt.

Ich verwende jedoch die neueste Version von Laravel und Cashier und habe überprüft, dass die in der geschlossenen Lösung zitierte Codezeile vorhanden ist (was sie ist), sodass möglicherweise etwas anderes vor sich geht.

Ich bin etwas verwirrt darüber, wie der Kontrollfluss aussehen sollte, um dies für diese Art von Karten zum Laufen zu bringen. Bei Standardkarten, die kein 3DS benötigen, funktioniert alles einwandfrei. Sollte ich die Ausnahme abfangen und die Dinge in React anders handhaben? B. den Benutzer bitten, seine Kartendaten zweimal zu bestätigen?

Ich sollte auch erwähnen, dass ich Webhooks aktiviert habe und diese erfolgreich lokal aufgelöst werden – ich habe das Dashboard überprüft.

  • hast du diese lösung probiert? github.com/laravel/cashier/issues/743#issuecomment-525818592

    – Touqeer Shafi

    26. November 2019 um 8:57 Uhr

  • @TouqeerShafi – diese Lösung wurde in die Laravel-Kerncodebasis integriert, aber ja, ich habe den Code nachverfolgt und er ist bereits vorhanden.

    – Schnörkel.

    26. November 2019 um 9:02 Uhr

  • Basierend auf dieser Antwort github.com/laravel/cashier/issues/743#issuecomment-525817530 Hinzufügen off_session => true to buildPayload behebt das Problem.

    – Eyad Jaabo

    28. November 2019 um 13:42 Uhr


  • @EyadJaabo – Wie bereits erwähnt, wurde dieser Fix bereits mit Laravel Cashier zusammengeführt und ist daher in meiner Codebasis vorhanden.

    – Schnörkel.

    28. November 2019 um 13:58 Uhr

  • @Squiggs. laravel.com/docs/8.x/billing#checkout

    – Kylian

    9. September 2021 um 12:21 Uhr

1430570cookie-checkLaravel Cashier Unvollständige Ausnahmebehandlung für 3D Secure / SCA

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy