iFrame

The iFrame integration allows you to display a Payrexx tool within your website. All you need to do is copy the code snippets onto your website.

Google Pay will only work with the attribute allow="payment *"!

Integration

Examples

<iframe
    src="https://{INSTANCE_NAME}.payrexx.com/pay?tid={PAYMENT_TEMPLATE_ID}"
    width="530"
    height="700"
    allow="payment *">
</iframe> 
  • INSTANCE_NAME - Name of the payment instance

  • PAYMENT_TEMPLATE_ID - Page ID of a payment Page: Pages Tool

More integrations with Tools

Advanced

An embedded Payrexx-iFrame sends messages to the page. These messages can be caught and processed. The following example shows how the messages can be caught.

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.payrexx) {
      jQuery.each(data.payrexx, 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);

There are four types of messages:

  • height: Used to dynamically set the height of the iFrame so that there is no need to scroll inside the iFrame. You should not set the param appview if you want a dynamic height!

  • top: If you have the dynamic height functionality implemented, you probably need to implement the scroll functionality to have the page scrolled if necessary. (e.g. on "Add to cart" button or on "Go to checkout").

  • transaction: For all the transaction data, like the status, you can receive the transaction object.

  • closeModal: Handle the iFrame close event. The value contains the redirect URL which you can use to lead the customer from the page with the iFrame to the according page. The iFrame is not allowed to make redirections on your site, therefore you need execute this redirection yourself.

Here you go with a full code example:

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.payrexx) {
      jQuery.each(data.payrexx, 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);
});

Last updated