iFrame

Zahlungsseiten per iFrame einbinden.

Mit der iFrame-Integration zeigst du ein zahls.ch Tool auf deiner Website an. Kopiere die Code-Snippets auf deine Seite.

Integration

Beispiele

Zahlungsseite aus dem Pages-Tool

<iframe
    src="https://{INSTANCE_NAME}.zahls.ch/pay?tid={PAYMENT_TEMPLATE_ID}"
    width="530"
    height="700"
    allow="payment *">
</iframe> 
  • INSTANCE_NAME – Name der Zahlungsinstanz
  • PAYMENT_TEMPLATE_ID – Seiten-ID einer Zahlungsseite: Pages-Tool

Zahlungsseite mit Terminal

<iframe
    src="https://{INSTANCE_NAME}.zahls.ch/vpos"
    width="530"
    height="700"
    allow="payment *">
</iframe> 
  • INSTANCE_NAME – Name der Zahlungsinstanz

Weitere Integrationen mit Tools

Erweitert

Ein eingebetteter zahls.ch-iFrame sendet Nachrichten an die Seite. Du kannst sie abfangen und verarbeiten. Das folgende Beispiel zeigt das Abfangen der Nachrichten.

var iFrame = jQuery('iframe');

var postMessage = function(e) {
  if (typeof e.data === 'string') {
    try {
      var data = JSON.parse(e.data);
    } catch (e) {}
    if (data && data.zahls) {
      jQuery.each(data.zahls, function(name, value) {
        switch (name) {
          // implement functions here
        }
      });
    }
  }
};

iFrame.on('load', function() {
        jQuery(this)[0].contentWindow.postMessage(JSON.stringify({origin: window.location.origin}), iFrame.attr('src'));
});

window.addEventListener('message', postMessage, false);

Es gibt vier Nachrichtentypen:

  • height: Setzt die iFrame-Höhe dynamisch, damit innerhalb des iFrames nicht gescrollt werden muss. Setze appview nicht, wenn du eine dynamische Höhe willst!
  • top: Hast du dynamische Höhe implementiert, brauchst du vermutlich Scroll-Logik, damit die Seite bei Bedarf scrollt (z. B. bei «In den Warenkorb» oder «Zur Kasse»).
  • transaction: Transaktionsdaten inklusive Status – du erhältst das Transaktionsobjekt.
  • closeModal: Schliess-Event des iFrames. Der Wert enthält die Redirect-URL, mit der du den Kunden von der iFrame-Seite weiterleitest. Der iFrame darf auf deiner Seite keine Redirects ausführen – du musst die Weiterleitung selbst auslösen.

Vollständiges Code-Beispiel:

var iFrame = jQuery('iframe');
var transaction = null;
var lastPostMessageHeight = 0;

var updateIframeHeight = function() {
  var height = lastPostMessageHeight;
    
  // This can be changed individually.
  // Currently the full height is only applied for big displays (> 590px in width)
  if (window.innerWidth <= 590) {
    iFrame.css('height', '100%');
  } else if (height) {
    iFrame.css('height', height + 'px');
  }
};

var scrollPage = function(offset) {
  var positionToScrollTo = iFrame.position().top + offset;
  jQuery('body, html').animate({scrollTop: positionToScrollTo}, 1000, 'linear', function() {
    jQuery(window).trigger('scroll')
  });
};

var postMessage = function(e) {
  if (typeof e.data === 'string') {
    try {
      var data = JSON.parse(e.data);
    } catch (e) {}
    if (data && data.zahls) {
      jQuery.each(data.zahls, function(name, value) {
        switch (name) {
          // Adjust the height of the iFrame
          case 'height':
            lastPostMessageHeight = parseInt(value);
            updateIframeHeight();
            break;
          // Scroll the page to a given point
          case 'top':
            scrollPage(parseInt(value));
            break;
          // Retrieve the transaction
          case 'transaction':
            if (typeof value === 'object') {
              transaction = value;
            }
            break;
          // Redirect from page with iFrame to given URL
          case 'closeModal':
            window.location.href = value;
            break;
        }
      });
    }
  }
};

window.addEventListener('message', postMessage, false);

iFrame.on('load', function() {
  jQuery(this)[0].contentWindow.postMessage(JSON.stringify({origin: window.location.origin}), iFrame.attr('src'));
  jQuery(window).resize(updateIframeHeight);
  updateIframeHeight();
});

var t;
jQuery(window).scroll(function(event) {
  window.clearTimeout(t);
  t = window.setTimeout(function() {
    iFrame[0].contentWindow.postMessage(JSON.stringify({scrollTopShoppingCart: jQuery(window).scrollTop() - iFrame.position().top}), iFrame.attr('src'));
  }, 100);
});