View Issue Details

IDProjectCategoryView StatusLast Update
0007975module PayPal Checkoutmodule PayPal checkout - subpublic2026-07-08 17:02
ReportereWorks GmbH Assigned To 
PrioritynormalSeverityminorReproducibilityhave not tried
Status acknowledgedResolutionopen 
Product Version2.9.1 / 3.8.1 
Summary0007975: Javascript Fehler "Can't find variable: ApplePayPaymentController"
DescriptionLaut unseren Logs tritt der Fehler im vierten Bestellschritt (cl=order) auf und wird durch https://github.com/OXID-eSales/paypal-module/blob/b-6.3.x/views/tpl/shared/applepay.tpl#L430 ausgelöst.

Die Ursache liegt dabei in der Minifizierung von https://github.com/OXID-eSales/paypal-module/blob/b-6.3.x/resources/build/js/paypal-frontend-applepay-payment-controller.js

In https://github.com/OXID-eSales/paypal-module/blob/b-6.3.x/out/src/js/paypal-frontend.min.js ist aus der paypal-frontend-applepay-payment-controller.js das hier geworden.

(
  ()=>{
    function e(e){
      return PayPalPaymentControllerBase.call(this,e),this.resetCurrentOrder(),this
    }
    
    window.addEventListener("load",function(){
      void 0===window.PayPalPayment&&void 0!==window.ApplePayPayPalPaymentControllerConfiguratorDefaults&&(window.PayPalPayment=new e)
    })
  })
()

Der Funktionsname ApplePayPaymentController wurde also gefressen und steht dem Template oben nicht mehr zur Verfügung.

Lustigerweise scheint der Fehler aber keine Auswirkung auf den eigentlichen Bestellabschluss zu haben, da die betroffenen Kunden ihre ApplePay Bestellung ungehindert abschließen können. Daher das Thema hier mal als kleinen Fehler eingestuft, der uns nur in den Logs auf die Nerven geht :)
Steps To ReproduceLeider noch keinen Weg gefunden es zu reproduzieren, allerdings treten mehrfach am Tag Meldungen dieser Art bei Kunden mit iPhone (aktuelle IOS Version) und Safari im Shop auf.
TagsNo tags attached.

Activities

QA

2026-07-08 16:57

administrator   ~0018589

Last edited: 2026-07-08 16:59

Der eigentliche Bug liegt nicht in der Minifizierung selbst, sondern tiefer.
Hier die konkrete fehlerhafte Stelle:
https://github.com/OXID-eSales/paypal-module/blob/b-6.3.x/views/tpl/shared/applepay.tpl#L430

window.addEventListener('load', function () {
    window.PayPalPayment = new ApplePayPaymentController(window.PayPalPaymentControllerConfiguratorDefaults);
    window.PayPalPayment.renderButton(typeof PayPalButtonStyle === 'object' ? PayPalButtonStyle : {});
});

Zwei Fehler in dieser einen Zeile (430):

1. ApplePayPaymentController existiert nirgends global
https://github.com/OXID-eSales/paypal-module/blob/b5dae8060634d4e6d2b6a93eb3bd2be60ae60e6f/resources/build/js/paypal-frontend-applepay-payment-controller.js#L2

let ApplePayPaymentController = function (config)

Der Hauptgrund ist Scope-Kapselung: Alles, was innerhalb der IIFE mit let, const oder var deklariert wird, bleibt lokal und "leakt" nicht in den globalen window-Scope.
Trotzdem versucht applepay.tpl am Ende einenload-Listener zu registrieren:
Dieser Code greift direkt auf den Bezeichner ApplePayPaymentController zu, der aber im globalen Scope des Templates gar nicht existiert

2. window.PayPalPaymentControllerConfiguratorDefaults ist ein Tippfehler. Oben im selben Script wird tatsächlich gesetzt:
js

   window.ApplePayPayPalPaymentControllerConfiguratorDefaults = { ... }

Der Name im load-Listener passt also nicht mal zur eigenen Variable weiter oben im selben Template.