javascript - Miten tiedän, että 3D Secure 2 -todennus toimii sen jälkeen, kun olen päivittänyt stripe.js-version 3:een


Olen päivittänyt sivuston käyttämään uusinta stripe-php:tä (6.39.0) ja se lataa nyt stripe.js-version 3. Olen tehnyt kaikki tarvittavat muutokset koodiini niin, että luottokorttikenttäni näytetään nyt Stripe Elementsin avulla. Testitapahtumat toimivat ja olen päivittänyt live-sivuston, ja oikeat maksut hyväksytään.

Syynä siihen, että tein tämän päivityksen, oli se, että Stripe ilmoitti minulle, että minun piti päivittää sivusto, jotta sen Stripe-integraatio toimisi Vahvan Asiakastunnistautumisen (SCA) kanssa, joka on pakollinen EU:ssa syyskuuhun 2019 mennessä.

Stripellä on erilaisia luottokorttitestinumeroita, joita voit käyttää testataksesi asioita, jotka ilmenevät maksujen käsittelyn yhteydessä. Nämä numerot löytyvät täältä: https://stripe.com/docs/testing#cards

4000000000003220 simuloi maksutapahtumia, joissa 3D Secure 2 -todennus on suoritettava. Mutta kun käytän tätä koodia, Stripe hylkää maksun ja palauttaa viestin:

"Korttiasi ei hyväksytty. Tämä tapahtuma vaatii todennusta. Tarkista korttitietosi ja yritä uudelleen."

Tarkoittaako tämä, että 3D Secure 2 toimii vai ei?

Todellisessa maailmassa se avaisi ikkunan, jossa olisi käyttöliittymä asiakkaan kortin myöntäjältä. Joten en ole varma, toimiiko integraationi vai ei. Kuten aiemmin todettiin, maksut hyväksytään, mutta minun täytyy olla valmis, kun vahva asiakastunnistus vaaditaan syyskuussa.

Vastaus #1

Näyttää siltä, että sinulla on integraatio-ongelma JS-osan kanssa. Yksinkertaisen veloituksen tekemiseksi (seuraava esimerkki ei toimi tilauksille), sinun on toteutettava se näin:

Ensin sinun täytyy luoda maksuaikomus (ohje täällä: https://stripe.com/docs/api/payment_intents/create):

\Stripe\PaymentIntent::create([
  "amount" => 2000,
  "currency" => "usd",
  "payment_method_types" => ["card"],
]);

Kun PaymentIntent-vastauksesi palautetaan, sinulla on client_secret-avain (dokumentaatio täällä: https://stripe.com/docs/api/payment_intents/object). Näet, että maksusi tila on "requires_payment_method"

{
  "id": "pi_1Dasb62eZvKYlo2CPsLtD0kn",
  "object": "payment_intent",
  "amount": 1000,
  "amount_capturable": 0,
  "amount_received": 0,
  ...
  "client_secret": "pi_1Dasb62eZvKYlo2CPsLtD0kn_secret_6aR6iII8CYaFCrwygLBnJW8js",
  ...
  "status": "requires_payment_method",
  ...
}

Palvelinpuolella sinun täytyy tallentaa tämä objekti. Voit nyt näyttää maksulomakkeesi JS-osalla aiemmalla client_secret-avaimella (ohje täällä: https://stripe.com/docs/payments/payment-intents/verifying-status). Ajatuksena on, että sinun täytyy kutsua JS-funktiota lähetyspainikkeen klikkauksessa, mutta älä lähetä! Odota vastausta ennen lähettämistä. Jollain jQueryllä tämän pitäisi näyttää tältä:

var $mySubmitButton = $('#my-submit-button'),
    $myPaymentForm = $('#my-payment-form'),
    clientSecret = $cardButton.data('client-secret'); // put your client-secret somewhere

$mySubmitButton.on('click', function(e) {
  
    e.preventDefault();

    // Disable button to disallow multiple click
    $(this).attr("disabled", true);

    stripe.handleCardPayment(
        clientSecret,
        {
            payment_method: clientMethod, // if you have a clientMethod
        }
    ).then(function(result) {
        if (result.error) {
            // show error message
            // then enable button
            $mySubmitButton.attr("disabled", false);
        } else {
            // Submit form
            $myPaymentForm.submit();
        }
    });
});

Jos kaikki menee hyvin, kun klikkaat lähetä-painiketta, sinulla on testin 3D-turvapopup, jossa on vaihtoehdot "onnistuu" tai "epäonnistuu" turvallisuustesti. Jos klikkaat onnistuminen-painiketta, lomakkeesi lähetetään ja sinun täytyy odottaa webhookia "charged.success" vahvistamaan tapahtuma.

Kun se on vastaanotettu, muuta palvelinobjektisi tilaa ja ilmoita käyttäjälle tapahtumasta.

Minun tapauksessani, kun lomake on lähetetty, näytän latauskuvakkeen ja tarkistan ajax-kutsulla joka sekunti, onko maksuaikomukseni tila muuttunut (webhookin kautta). Testiympäristössäsi voit käyttää http://requestbin.net ja Postmania.

Varo: jotkut tällä sivulla mainitut kortit eivät toimi oikein (et voi lisätä niitä) https://stripe.com/docs/testing#cards (kohta 3D Secure -testikorttien numerot ja tokenit). Vahvistettu heidän tukensa kanssa.

Jos käytät tallennettua korttia, voit testata vain näillä korteilla: https://stripe.com/docs/payments/cards/charging-saved-cards#testing