J'essaie de charger une page Web qui utilise Stripe.js dans un WKWebView sur iOS (à l'aide de Xamarin.Forms).

Tout fonctionne bien (peut accepter les paiements par carte), sauf pour Apple Pay : paymentRequest.canMakePayment() renvoie toujours null.

La même page Web à l'intérieur d'un SFSafariViewController fonctionne bien, donc le problème semble être lié aux restrictions à l'intérieur de WKWebView. Cependant, selon https://webkit.org/blog /9674/new-webkit-features-in-safari-13/ cela devrait maintenant être pris en charge et en effet le même WKWebView charge également la page de démonstration officielle d'Apple Pay (https://applepaydemo.apple.com/) sans aucun problème.

Il semblerait que le problème soit finalement avec la façon dont Stripe.js fonctionne sous le capot (peut-être en ce qui concerne l'injection de script).

Mon moteur de rendu personnalisé dans Xamarin ressemble à ceci :

        WKWebView wkWebView;
        protected override void OnElementChanged(ElementChangedEventArgs<NativeWebView> e)
        {
            base.OnElementChanged(e);

            if (Control == null)
            {
                var config = new WKWebViewConfiguration();
                wkWebView = new WKWebView(Frame, config);
                wkWebView.WeakNavigationDelegate = new WebNavigationDelegate();
                SetNativeControl(wkWebView);
            }

            if (e.NewElement != null)
                Control.LoadRequest(new NSUrlRequest(new NSUrl(Element.Url)));
        }

Et le JS de la page Web (tiré des exemples Stripe Element) :

            //set up payment request
            var paymentRequest = stripe.paymentRequest({
                country: 'GB',
                currency: 'gbp',
                total: {
                    label: 'sample order',
                    amount: 100,
                },
                requestPayerName: true,
                requestPayerEmail: true,
            });

            paymentRequest.canMakePayment().then(function (result) {
                // result is always false!
                ...
            });

Y a-t-il peut-être des paramètres supplémentaires qui peuvent être ajoutés au WKWebView pour que cela fonctionne ?

0
Strillo 2 nov. 2020 à 13:29

1 réponse

Meilleure réponse

Ce n'est plus un problème. Il a été reconnu par Stripe comme une faille dans leur wrapper JS et a été corrigé dans les récentes mises à jour de la bibliothèque officielle.

0
Strillo 9 déc. 2020 à 17:17