stripe.redirectToCheckout не работает в мобильном Safari - PullRequest
1 голос
/ 14 марта 2020

Я использую Stripe для интеграции оформления iDeal на моем сайте пиццерии. Процесс делится на две части:

  1. Некоторые javascript для вызова кассы. NET (asmx) webservice

        function iDealCheckout() {
    
        $.ajax({
            type: "POST",
            url: "iDealSession.asmx/CreateiDealSession",
            data: "{'Guid':'" + bestelguid + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                //alert("session Id: " + data.d.sessionId + " totaal: " + data.d.totaal);
                Id = data.d.sessionId;
                var stripe = Stripe('--------------------------------------'); //key is masked here
    
                stripe.redirectToCheckout({
                    // Make the id field from the Checkout Session creation API response
                    // available to this file, so you can provide it as parameter here
                    // instead of the {{CHECKOUT_SESSION_ID}} placeholder.
                    sessionId: Id
                }).then(function (result) {
                    // If `redirectToCheckout` fails due to a browser or network
                    // error, display the localized error message to your customer
                    // using `result.error.message`.
                    alert(result.error.message);
                });
            },
            error: function () {
                alert("CreateiDealSession mislukt");
            }
        });
    }
    

Вызов ajax возвращает идентификатор сеанса, который используется для вызова stripe.redirectToCheckout, который перенаправляет на страницу оплаты iDeal.

Веб-метод .asmx, который возвращает идентификатор сеанса:

public class values
{
    public string sessionId;
    public string totaal;
}

[WebMethod(EnableSession = true)]
public values CreateiDealSession(string Guid)
{
    DataTable dt = new DataTable();
    string query = "SELECT * FROM Bestellingen WHERE Hashcode=@Guid";
    string constr = ConfigurationManager.ConnectionStrings["Pizzas"].ConnectionString;
    using (SqlConnection con = new SqlConnection(constr))
    {
        using (SqlCommand cmd = new SqlCommand(query))
        {
            cmd.Connection = con;
            cmd.Parameters.AddWithValue("@Guid", Guid);
            using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
            {
                sda.Fill(dt);
            }
        }
    }

    double totaal = 0;
    foreach (DataRow row in dt.Rows)
    {
        double stukprijs = double.Parse(row["Prijs"].ToString());
        var subtotaal = stukprijs * int.Parse(row["Aantal"].ToString());
        totaal += subtotaal;
    }

    totaal = totaal * 100;
    long amount = Convert.ToInt32(totaal);

    StripeConfiguration.ApiKey = "-------------------------------------"; //apikey is masked here

    var options = new SessionCreateOptions
    {
        PaymentMethodTypes = new List<string>
        {
            "ideal",
        },
        LineItems = new List<SessionLineItemOptions>
        {
            new SessionLineItemOptions
            {
                Name = "Uw bestelling bij pizzeria I Colori",
                Description = "Pasta's & Pizza's",
                Amount = amount,
                Currency = "eur",
                Quantity = 1,
            },
        },
        SuccessUrl = "https://pizzeria.aspworld.nl/Success.html?session_id={CHECKOUT_SESSION_ID}",
        CancelUrl = "https://example.com/cancel",
    };

    var service = new Stripe.Checkout.SessionService();
    Stripe.Checkout.Session session = service.Create(options);
    values values = new values();
    values.sessionId = session.Id;
    values.totaal = amount.ToString();
    return values;
}

Теперь все это работает без проблем на мобильных и настольных компьютерах Chrome и Firefox и браузер перенаправляет на страницу оплаты iDeal. Но stripe.redirectToCheckout не работает в мобильном Safari, как Android и iOS.

...