CINXE.COM

PAYONE Documentation Platform | Integration Guide Magento 2

<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="author" content="PAYONE"> <title>PAYONE Documentation Platform | Integration Guide Magento 2 </title> <meta name="description" content=""> <link rel="icon" href="https://docs.payone.com/bl-themes/payone-docs/img/favicon.ico" type="image/png"> <link rel="stylesheet" type="text/css" href="https://docs.payone.com/bl-themes/payone-docs/css/font-line-aw-1.3.0/css/line-awesome.min.css?version=3.15.0"> <!-- Theme --> <link rel="stylesheet" type="text/css" href="https://docs.payone.com/bl-themes/payone-docs/css/bulma.min.css?version=3.15.0"> <link rel="stylesheet" type="text/css" href="https://docs.payone.com/bl-themes/payone-docs/css/bulma-tooltip.min.css?version=3.15.0"> <link rel="stylesheet" type="text/css" href="https://docs.payone.com/bl-themes/payone-docs/css/bulma.overrides.css?version=3.15.0"> <link rel="stylesheet" type="text/css" href="https://docs.payone.com/bl-themes/payone-docs/css/payone.icons.css?version=3.15.0"> <link rel="stylesheet" type="text/css" href="https://docs.payone.com/bl-themes/payone-docs/css/payone.misc.css?version=3.15.0"> <!-- Highlight --> <link rel="stylesheet" type="text/css" href="https://docs.payone.com/bl-themes/payone-docs/css/highlight.github.min.css?version=3.15.0"> <!-- Api template --> <link rel="stylesheet" type="text/css" href="https://docs.payone.com/bl-themes/payone-docs/php/api/api-template.css?version=3.15.0"> <!-- Load Plugins: Site head --> <link rel="canonical" href="https://docs.payone.com/integration/plugins/integration-guide-magento-2"/> <!-- Robots plugin --> </head> <body> <!-- Load Bludit Plugins: Site Body Begin --> <div class="site_container" id="payone-sitecontainer"> <!-- Navbar --> <div id="navbardiv_on_index"> <nav class="navbar" role="navigation" aria-label="main navigation"> <div class="navbar-brand"> <a class="navbar-item" href="https://docs.payone.com"> <img src="/bl-themes/payone-docs/img/logo.svg" width="150" height="44" class="mt-3 mb-3"> </a> <a role="button" class="navbar-burger" data-target="navbarMenuContent" aria-label="menu" aria-expanded="false"> <span aria-hidden="true"></span> <span aria-hidden="true"></span> <span aria-hidden="true"></span> </a> <button id="mobileSubmenu" title="Open submenu"></button> </div> <div id="static top right sight" class="navbar-menu" style="display: block !important;"> <div class="navbar-end"> <div class="navbar-item"><div class="field has-addons"><div class="control"><input type="hidden" id="jspluginPayoneSearchMinChars" value="3" readonly><span id="jspluginPayoneSearchTextTooltip"><input type="text" class="input is-primary" id="jspluginPayoneSearchText" /> </span></div><div class="control"><button id="jspluginPayoneSearchButton" class="button is-primary" onClick="pluginPayoneSearch()" ><i class="payone-icon-tiny payone-white-search"></i></button></div></div></div><script> function openMinCharsMessage() { const tooltip = document.getElementById("jspluginPayoneSearchTextTooltip"); const minChars = document.getElementById("jspluginPayoneSearchMinChars").value; const message = 'Please enter at least ' + minChars + ' characters!'; tooltip.dataset.tooltip = message; tooltip.classList.add( 'has-tooltip-left', 'has-tooltip-arrow', 'has-tooltip-primary', 'has-tooltip-active' ); } function pluginPayoneSearch() { const text = document.getElementById("jspluginPayoneSearchText").value; const minChars = document.getElementById("jspluginPayoneSearchMinChars").value; const valid = (text.length >= minChars); if (!valid) { openMinCharsMessage(); return false; } window.open('https://docs.payone.com/'+'search/'+text, '_self'); return true; } document.getElementById("jspluginPayoneSearchText").onkeypress = function(e) { if (!e) e = window.event; var keyCode = e.keyCode || e.which; if (keyCode == '13'){ pluginPayoneSearch(); return false; } } </script> <div id="login" class="navbar-item"> <div class="buttons"> <a class="btn btn-outline-primary" type="button" href="https://login.pay1.de/"> Login PMI </a> </div> </div> <!-- <div id="signup" class="navbar-item"> <div class="buttons"> <a class="btn btn-primary" type="button" src="https://www.payone.com/DE-de/formulare/enterprise"> Sign up </a> </div> </div> --> </div> </div> </nav> <nav class="navbar payone-hide-navbar-mobile"> <div id="navbarMenuContent" class="navbar-menu box"> <div class="navbar-start"> <a class="navbar-item" href="/pcp/payone-commerce-platform"> PAYONE Commerce Platform </a> <a class="navbar-item" href="/payment-methods/"> Payment Methods </a> <div class="navbar-item has-dropdown is-hoverable"> <a class="navbar-link" href="/integration"> Integration </a> <div class="navbar-dropdown"> <a class="navbar-item" href="/integration/plugins"> Plugins </a> <hr class="navbar-divider"> <a class="navbar-item" href="/integration/channel-server-api"> Server API </a> <hr class="navbar-divider"> <a class="navbar-item" href="/integration/channel-client-api"> Client API </a> <hr class="navbar-divider"> <a class="navbar-item" href="/integration/channel-payone-link"> Channel PAYONE Link </a> <hr class="navbar-divider"> <a class="navbar-item" href="/integration/channel-frontend"> Channel Frontend </a> <hr class="navbar-divider"> <a class="navbar-item" href="/integration/response-handling"> Response Handling </a> <hr class="navbar-divider"> <a class="navbar-item" href="/integration/testdata"> Testdata </a> </div> </div> <a class="navbar-item" href="/advanced-features"> Advanced Features </a> <div class="navbar-item has-dropdown is-hoverable"> <a class="navbar-link"> Security & Risk Management </a> <div class="navbar-dropdown"> <a class="navbar-item" href="/security-risk-management/3d-secure"> 3DS </a> <hr class="navbar-divider"> <a class="navbar-item" href="/security-risk-management/fraudprevention"> Fraud </a> <hr class="navbar-divider"> <a class="navbar-item" href="/security-risk-management/consumerscore"> Consumer score </a> </div> </div> <div class="navbar-item has-dropdown is-hoverable"> <a class="navbar-link"> Information </a> <div class="navbar-dropdown"> <a class="navbar-item" href="/information/general-information"> General information </a> <hr class="navbar-divider"> <a class="navbar-item" href="/information/platform-codes"> Platform codes </a> <hr class="navbar-divider"> <a class="navbar-item" href="/information/payone-merchant-interface"> PAYONE Merchant Interface (PMI) </a> <hr class="navbar-divider"> <a class="navbar-item" href="/information/sequence-diagrams"> Sequence diagrams </a> <hr class="navbar-divider"> <a class="navbar-item" href="/information/privacy-policy"> Privacy Policy </a> <hr class="navbar-divider"> <a class="navbar-item" href="https://www.payone.com/DE-de/service/kontakt" target="_blank"> Contact (DE) </a> <hr class="navbar-divider"> <a class="navbar-item" href="https://www.payone.com/DE-de/service/feedback-beschwerde" target="_blank"> Report an issue (DE) </a> </div> </div> </div> </div> </nav> </div> <div class="payone-breadcrumbs"> <nav class="breadcrumb has-arrow-separator is-small payone-breadcrumbs-nav" aria-label="breadcrumbs"> <ul> <li class=""><a href="/integration">Integration</a></li><li class=""><a href="/integration/plugins">Plugins</a></li><li class="is-active"><a href="/integration/plugins/integration-guide-magento-2">Integration Guide Magento 2</a></li><!-- <li><a href="#">Bulma</a></li> <li><a href="#">Documentation</a></li> <li><a href="#">Components</a></li> <li class="is-active"><a href="#" aria-current="page">Breadcrumb</a></li> --> </ul> </nav> <div class="payone-breadcrumbs-toc"> <div class="navbar-item has-dropdown is-hoverable"> <a class="navbar-link payone-font-smaller"> Table Of Contents </a> <div class="navbar-dropdown payone-navbar-dropdown-toc is-right"> <a href="#Introduction" class="navbar-item" style="padding-left: 1rem;"><i class="payone-icon-nano payone-blue-right"></i>&nbsp;&nbsp;INTRODUCTION</a><a href="#Requirements" class="navbar-item" style="padding-left: 1rem;"><i class="payone-icon-nano payone-blue-right"></i>&nbsp;&nbsp;REQUIREMENTS</a><a href="#InstallPlugin" class="navbar-item" style="padding-left: 1rem;"><i class="payone-icon-nano payone-blue-right"></i>&nbsp;&nbsp;PLUGIN INSTALLATION</a><a href="#PortalConfig" class="navbar-item" style="padding-left: 1rem;"><i class="payone-icon-nano payone-blue-right"></i>&nbsp;&nbsp;PAYONE - PORTAL CONFIGURATION</a><a href="#AdminConfig" class="navbar-item" style="padding-left: 1rem;"><i class="payone-icon-nano payone-blue-right"></i>&nbsp;&nbsp;MAGENTO 2 - ADMIN CONFIGURATION</a> </div> </div> </div> </div> <div class="docs-container is-flex"> <aside id="aside" class="column is-2 is-narrow-mobile is-fullheight is-hidden-touch"><ul class="tree"><li><a target="_self" href="https://docs.payone.com/integration">Integration</a><ul style="display:none"><li><a target="_self" href="https://docs.payone.com/integration/plugins">Plugins</a><ul style="display:none"><li><a target="_self" href="https://docs.payone.com/integration/plugins/integration-guide-shopware-6">Integration Guide Shopware 6 </a></li><li><a target="_self" href="https://docs.payone.com/integration/plugins/shopware-6-integrationsanleitung">Integrationsanleitung Shopware 6 </a></li><li><a target="_self" href="https://docs.payone.com/integration/plugins/integration-guide-magento-2">Integration Guide Magento 2</a></li><li><a target="_self" href="https://docs.payone.com/integration/plugins/integrationsanleitung-magento-2">Integrationsanleitung Magento 2</a></li><li><a target="_self" href="https://docs.payone.com/integration/plugins/integration-guide-shopware-5">Integration Guide Shopware 5</a></li><li><a target="_self" href="https://docs.payone.com/integration/plugins/integrationsanleitung-shopware-5">Integrationsanleitung Shopware 5</a></li><li><a target="_self" href="https://docs.payone.com/integration/plugins/integration-guide-woocommerce">Integration Guide WooCommerce</a></li><li><a target="_self" href="https://docs.payone.com/integration/plugins/integrationsanleitung-woocommerce">Integrationsanleitung WooCommerce</a></li><li><a target="_self" href="https://docs.payone.com/integration/plugins/integrationsanleitung-oxid-6">Integrationsanleitung Oxid 6</a></li><li><a target="_self" href="https://docs.payone.com/integration/plugins/integration-guide-oxid-6">Integration Guide Oxid 6</a></li><li><a target="_self" href="https://docs.payone.com/integration/plugins/integrationsanleitung-oxid-7">Integrationsanleitung Oxid 7</a></li><li><a target="_self" href="https://docs.payone.com/integration/plugins/integration-guide-oxid-7">Integration Guide Oxid 7</a></li><li><a target="_self" href="https://docs.payone.com/integration/plugins/installationsanleitung-magento-1">Installationsanleitung Magento 1</a></li><li><a target="_self" href="https://docs.payone.com/integration/plugins/integration-guide-magento-1">Integration Guide Magento 1</a></li></ul></li><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api">Channel-Server-API</a><ul style="display:none"><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api/server-api-preauthorization">Server API - Preauthorization</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api/server-api-authorization">Server API - Authorization</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api/server-api-capture">Server API - Capture</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api/server-api-refund">Server API - Refund</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api/server-api-debit">Server API - Debit</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api/server-api-managemandate">Server API - Managemandate</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api/server-api-getinvoice">Server API - Getinvoice</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api/server-api-getfile">Server API - Getfile</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api/server-api-vauthorizatuion">Server API - Vauthorization</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api/server-api-creditcardcheck">Server API - Creditcardcheck</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api/server-api-getuser">Server API - Getuser</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api/server-api-updateuser">Server API - Updateuser</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api/server-api-3dscheck">Server API - 3dscheck</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api/server-api-bankaccountcheck">Server API - Bankaccountcheck</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api/server-api-addresscheck">Server API - Addresscheck</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api/server-api-createaccess">Server API - Createaccess</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api/server-api-updateaccess">Server API - Updateaccess</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api/server-api-updatereminder">Server API - Updatereminder</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api/server-api-general-definitions">Server API - General Interface Definitions</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api/server-api-checkout-demo-app">Server API - checkout demo app</a></li></ul></li><li><a target="_self" href="https://docs.payone.com/integration/channel-client-api">Channel-Client-API</a><ul style="display:none"><li><a target="_self" href="https://docs.payone.com/integration/channel-client-api/client-api-preauthorization">Client API - Preauthorization</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-client-api/client-api-authorization">Client API - Authorization</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-client-api/client-api-creditcardcheck">Client API - Creditcardcheck</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-client-api/client-api-managemandate">Client API - Managemandate</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-client-api/client-api-general-interface-definitions">Client API - General Interface Definitions</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-client-api/client-api-createaccess">Client API - Createaccess</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-client-api/client-api-vauthorization">Client API - Vauthorization</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-client-api/client-api-bankaccountcheck">Client API - Bankaccountcheck</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-client-api/client-api-ajax-mode">Client API - AJAX-Mode</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-client-api/client-api-redirect-mode">Client API - Redirect-Mode</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-client-api/client-api-addresscheck">Client API - Addresscheck</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-client-api/client-api-hosted-iframe-mode">Client API - Hosted iFrame Mode </a><ul style="display:none"><li><a target="_self" href="https://docs.payone.com/integration/channel-client-api/client-api-hosted-iframe-mode/hosted-iframe-examples">Hosted Iframe Examples</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-client-api/client-api-hosted-iframe-mode/client-api-additional-tips">Client API - Additional Tips</a></li></ul></li><li><a target="_self" href="https://docs.payone.com/integration/channel-client-api/calculation-of-the-hash-value">Client API - Calculation of the HASH value</a></li></ul></li><li><a target="_self" href="https://docs.payone.com/integration/channel-payone-link">PAYONE Link</a><ul style="display:none"><li><a target="_blank" href="https://docs.payone.com/integration/channel-payone-link/payone-link-api?fullwidth=1">PAYONE Link - API</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-payone-link/payone-link-notification-api">PAYONE Link - Notification-API</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-payone-link/how-to-verify-notifications">PAYONE Link - How to Verify Notifications</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-payone-link/payone-link-authorization">PAYONE Link - Authorization + Linkstatus</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-payone-link/payone-link-complete-bash-example">PAYONE Link - Complete Bash Example + HMAC SHA256 Examples</a></li></ul></li><li><a target="_self" href="https://docs.payone.com/integration/channel-frontend">Channel-Frontend</a><ul style="display:none"><li><a target="_self" href="https://docs.payone.com/integration/channel-frontend/frontend-available-payment-types">Frontend - Available payment types</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-frontend/payment-portals-access-shop">Payment portals (Access - Shop Versions)</a></li></ul></li><li><a target="_self" href="https://docs.payone.com/integration/response-handling">Response Handling</a><ul style="display:none"><li><a target="_self" href="https://docs.payone.com/integration/response-handling/transactionstatus-notification"> Transactionstatus Notifications - Samples and Responses</a></li><li><a target="_self" href="https://docs.payone.com/integration/response-handling/json-responses">JSON-Responses</a></li><li><a target="_self" href="https://docs.payone.com/integration/response-handling/json-examples">JSON Examples</a></li></ul></li><li><a target="_self" href="https://docs.payone.com/integration/testdata">Testdata</a></li></ul></li></ul></aside> <div id="payone-modal-submenu" class="modal"> <div class="modal-background"></div> <div class="modal-card"> <header class="modal-card-head"> <p class="modal-card-title"> Integration </p> <button class="delete payone-primary-background" aria-label="close"></button> </header> <section class="modal-card-body"> <ul class="tree"> <li><a target="_self" href="https://docs.payone.com/integration">Integration</a><ul style="display:none"><li><a target="_self" href="https://docs.payone.com/integration/plugins">Plugins</a><ul style="display:none"><li><a target="_self" href="https://docs.payone.com/integration/plugins/integration-guide-shopware-6">Integration Guide Shopware 6 </a></li><li><a target="_self" href="https://docs.payone.com/integration/plugins/shopware-6-integrationsanleitung">Integrationsanleitung Shopware 6 </a></li><li><a target="_self" href="https://docs.payone.com/integration/plugins/integration-guide-magento-2">Integration Guide Magento 2</a></li><li><a target="_self" href="https://docs.payone.com/integration/plugins/integrationsanleitung-magento-2">Integrationsanleitung Magento 2</a></li><li><a target="_self" href="https://docs.payone.com/integration/plugins/integration-guide-shopware-5">Integration Guide Shopware 5</a></li><li><a target="_self" href="https://docs.payone.com/integration/plugins/integrationsanleitung-shopware-5">Integrationsanleitung Shopware 5</a></li><li><a target="_self" href="https://docs.payone.com/integration/plugins/integration-guide-woocommerce">Integration Guide WooCommerce</a></li><li><a target="_self" href="https://docs.payone.com/integration/plugins/integrationsanleitung-woocommerce">Integrationsanleitung WooCommerce</a></li><li><a target="_self" href="https://docs.payone.com/integration/plugins/integrationsanleitung-oxid-6">Integrationsanleitung Oxid 6</a></li><li><a target="_self" href="https://docs.payone.com/integration/plugins/integration-guide-oxid-6">Integration Guide Oxid 6</a></li><li><a target="_self" href="https://docs.payone.com/integration/plugins/integrationsanleitung-oxid-7">Integrationsanleitung Oxid 7</a></li><li><a target="_self" href="https://docs.payone.com/integration/plugins/integration-guide-oxid-7">Integration Guide Oxid 7</a></li><li><a target="_self" href="https://docs.payone.com/integration/plugins/installationsanleitung-magento-1">Installationsanleitung Magento 1</a></li><li><a target="_self" href="https://docs.payone.com/integration/plugins/integration-guide-magento-1">Integration Guide Magento 1</a></li></ul></li><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api">Channel-Server-API</a><ul style="display:none"><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api/server-api-preauthorization">Server API - Preauthorization</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api/server-api-authorization">Server API - Authorization</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api/server-api-capture">Server API - Capture</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api/server-api-refund">Server API - Refund</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api/server-api-debit">Server API - Debit</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api/server-api-managemandate">Server API - Managemandate</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api/server-api-getinvoice">Server API - Getinvoice</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api/server-api-getfile">Server API - Getfile</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api/server-api-vauthorizatuion">Server API - Vauthorization</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api/server-api-creditcardcheck">Server API - Creditcardcheck</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api/server-api-getuser">Server API - Getuser</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api/server-api-updateuser">Server API - Updateuser</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api/server-api-3dscheck">Server API - 3dscheck</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api/server-api-bankaccountcheck">Server API - Bankaccountcheck</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api/server-api-addresscheck">Server API - Addresscheck</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api/server-api-createaccess">Server API - Createaccess</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api/server-api-updateaccess">Server API - Updateaccess</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api/server-api-updatereminder">Server API - Updatereminder</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api/server-api-general-definitions">Server API - General Interface Definitions</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-server-api/server-api-checkout-demo-app">Server API - checkout demo app</a></li></ul></li><li><a target="_self" href="https://docs.payone.com/integration/channel-client-api">Channel-Client-API</a><ul style="display:none"><li><a target="_self" href="https://docs.payone.com/integration/channel-client-api/client-api-preauthorization">Client API - Preauthorization</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-client-api/client-api-authorization">Client API - Authorization</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-client-api/client-api-creditcardcheck">Client API - Creditcardcheck</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-client-api/client-api-managemandate">Client API - Managemandate</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-client-api/client-api-general-interface-definitions">Client API - General Interface Definitions</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-client-api/client-api-createaccess">Client API - Createaccess</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-client-api/client-api-vauthorization">Client API - Vauthorization</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-client-api/client-api-bankaccountcheck">Client API - Bankaccountcheck</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-client-api/client-api-ajax-mode">Client API - AJAX-Mode</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-client-api/client-api-redirect-mode">Client API - Redirect-Mode</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-client-api/client-api-addresscheck">Client API - Addresscheck</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-client-api/client-api-hosted-iframe-mode">Client API - Hosted iFrame Mode </a><ul style="display:none"><li><a target="_self" href="https://docs.payone.com/integration/channel-client-api/client-api-hosted-iframe-mode/hosted-iframe-examples">Hosted Iframe Examples</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-client-api/client-api-hosted-iframe-mode/client-api-additional-tips">Client API - Additional Tips</a></li></ul></li><li><a target="_self" href="https://docs.payone.com/integration/channel-client-api/calculation-of-the-hash-value">Client API - Calculation of the HASH value</a></li></ul></li><li><a target="_self" href="https://docs.payone.com/integration/channel-payone-link">PAYONE Link</a><ul style="display:none"><li><a target="_blank" href="https://docs.payone.com/integration/channel-payone-link/payone-link-api?fullwidth=1">PAYONE Link - API</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-payone-link/payone-link-notification-api">PAYONE Link - Notification-API</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-payone-link/how-to-verify-notifications">PAYONE Link - How to Verify Notifications</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-payone-link/payone-link-authorization">PAYONE Link - Authorization + Linkstatus</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-payone-link/payone-link-complete-bash-example">PAYONE Link - Complete Bash Example + HMAC SHA256 Examples</a></li></ul></li><li><a target="_self" href="https://docs.payone.com/integration/channel-frontend">Channel-Frontend</a><ul style="display:none"><li><a target="_self" href="https://docs.payone.com/integration/channel-frontend/frontend-available-payment-types">Frontend - Available payment types</a></li><li><a target="_self" href="https://docs.payone.com/integration/channel-frontend/payment-portals-access-shop">Payment portals (Access - Shop Versions)</a></li></ul></li><li><a target="_self" href="https://docs.payone.com/integration/response-handling">Response Handling</a><ul style="display:none"><li><a target="_self" href="https://docs.payone.com/integration/response-handling/transactionstatus-notification"> Transactionstatus Notifications - Samples and Responses</a></li><li><a target="_self" href="https://docs.payone.com/integration/response-handling/json-responses">JSON-Responses</a></li><li><a target="_self" href="https://docs.payone.com/integration/response-handling/json-examples">JSON Examples</a></li></ul></li><li><a target="_self" href="https://docs.payone.com/integration/testdata">Testdata</a></li></ul></li> </ul> </section> <footer class="modal-card-foot"> <div class="buttons"> <button class="btn btn-outline-primary">Cancel</button> </div> </footer> </div> </div> <!-- Content --> <section class="section"> <div class="column is-12 mb-3 payone-sitedivs"> <div class="pagetitle"> <h2 class="h2Header">Integration Guide Magento 2</h2> </div> <div id="navigation"><nav class="in-page-sub-nav" id="subnavbar"> <table style="width: 100%;"> <tbody> <tr> <td style="width: 20.0%;"> <p class="navbar">Introduction</p> </td> <td style="width: 20.0%;"> <p class="navbar">Requirements</p> </td> <td style="width: 20.0%;"> <p class="navbar">Plugin Installation</p> </td> <td style="width: 20.0%;"> <p class="navbar" style="text-align: center;">PAYONE - Portal configuration</p> </td> <td style="width: 20.0%;"> <p class="navbar"><a href="#AdminConfig" title="Admin_config">Magento 2 - Admin configuration</a></p> </td> </tr> </tbody> </table> </nav></div> <div class="payone-white-content-section" title="Introduction"> <h4 class="h4Header" id="Introduction">Introduction</h4> <p>Our Magento2 plugin offers regular updates and comprehensive integration support, providing a flexible, ready-to-use solution for seamless online payment acceptance:</p> <div class="is-relative"><a href="#/" class="my_plus my_radius"></a><span class="OptionalsSpan">Offers the following payment methods</span></div> <div class="responsesDivcontent"> <p></p> <ul style="list-style: disc inside;"> <li>Credit Cards (Visa, Mastercard, American Express, JCB, Diners Club, Maestro International, Carde Bleue)</li> <li>Amazon Pay (V1) + (V2)</li> <li>Alipay</li> <li>Apple Pay</li> <li>Bancontact</li> <li>Barzahlen</li> <li>EPS</li> <li>iDEAL</li> <li>Klarna Payments</li> <li>Giropay</li> <li>PAYONE Secure Invoice</li> <li>PAYONE Secured Invoice, secured Direct Debit und secured Installments</li> <li>PAYONE Direct Debit</li> <li>PAYONE Open Invoice</li> <li>PAYONE Prepayment</li> <li>PayPal and PayPal Express</li> <li>PayPal v2 and PayPal Express v2</li> <li>PostFinance Card and E-Finance</li> <li>Przelewy24</li> <li>Sofort</li> <li>Ratepay Invoice, Direct Debit and Installments</li> <li>Trustly</li> <li>Unzer Invoice, Direct Debit and Installments</li> <li>WeChat Pay</li> </ul> </div> <p></p> <p>Stay updated on our latest enhancements and new features, such as payment methods and integration modes, by regularly checking our Release Notes for this plugin!</p> <p>Current Release:<strong> v3.13.1</strong></p> <div class="buttons"><a class="btn btn-success has-text-white" type="button" href="https://github.com/PAYONE-GmbH/magento-2/releases/tag/v3.13.1" target="_blank" rel="noopener"> Download Plugin </a></div> </div> <div class="payone-white-content-section" title="Requirements"> <h4 class="h4Header" id="Requirements">Requirements</h4> <p>An active PAYONE - Account is required. If you do not have one yet, <a href="https://www.payone.com/DE-de/service/kontakt" target="_blank" rel="noopener">please contact us</a>.</p> </div> <div class="payone-white-content-section" title="Install Plugin"> <h4 class="h4Header" id="InstallPlugin">Plugin Installation</h4> <p>You have 2 ways to install our plugin:</p> <div class="is-relative"><a href="#/" class="my_plus my_radius"></a><span class="OptionalsSpan">Installation via Composer<span></span></span></div> <div class="responsesDivcontent"> <p></p> <pre class="language-markup"><code>composer require payone-gmbh/magento-2 php bin/magento setup:upgrade php bin/magento setup:di:compile php bin/magento cache:clean</code></pre> </div> <p></p> <div class="is-relative"><a href="#/" class="my_plus my_radius"></a><span class="OptionalsSpan">Installation via Github<span></span></span></div> <div class="responsesDivcontent"> <p></p> <div class="buttons"><a class="btn btn-success has-text-white" type="button" href="https://github.com/PAYONE-GmbH/magento-2/releases" target="_blank" rel="noopener">Download von Github</a></div> </div> </div> <p></p> <div class="payone-white-content-section" title="Portal Config"> <h4 class="h4Header" id="PortalConfig">PAYONE - Portal configuration</h4> <p>To send the transaction status to the correct address, log in to the PAYONE Merchant Interface (PMI).</p> <p>Under Configuration → Payment Portals → YOUR_PORTAL → Advanced → TransactionStatus URL</p> <div class="infobox">&lt;SHOPURL&gt;/index.php/payone/transactionstatus</div> <p><a href="https://docs.payone.com/bl-content/uploads/pages/c26dff931b46dd445bed5bcefd63a1dd/M2_en_Admin.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/c26dff931b46dd445bed5bcefd63a1dd/M2_en_Admin.png" alt="" width="500"></a></p> <h5 class="h5Header">Additional Response-data</h5> <p>In the General settings, enable "Additional Response Data" for both Live and Test modes.</p> <p><a href="https://docs.payone.com/bl-themes/payone-docs/img/start_here/pmi-additional-resp-data.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-themes/payone-docs/img/start_here/pmi-additional-resp-data.png" width="400" height="156" alt=""></a></p> </div> <div class="payone-white-content-section" title="Admin Config"> <h4 class="h4Header" id="AdminConfig">Magento 2 - Admin configuration</h4> <ul style="list-style: disc inside;"> <li>Click on PAYONE → General</li> </ul> <p><a href="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-1.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/thumbnails/Magento2-1.png" alt="" width="272" height="272"></a></p> <ul style="list-style: disc inside;"> <li>Please enter your access data from the PMI here:</li> </ul> <p><a href="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-2.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/thumbnails/Magento2-2.png" alt="" width="279" height="279"></a></p> <div class="tryoutbox">We highly recommend using a prefix of up to 5 characters. If no prefix is set, only the Magento order number will be transmitted.</div> <ul style="list-style: disc inside;"> <li>Indicate whether to automatically send an invoice email to the customer following a successful payment authorization:</li> </ul> <p><a href="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-3.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-3.png" alt="" width="330" height="44"></a></p> <h5 class="h5Header">Payment methods setup</h5> <ul style="list-style: disc inside;"> <li>Click on PAYONE → Payment</li> </ul> <p><a href="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-4.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/thumbnails/Magento2-4.png" alt="" width="285" height="285"></a></p> <ul style="list-style: disc inside;"> <li>Enable/disable the desired payment types in the "Enabled" field.</li> </ul> <p><a href="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-5.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-5.png" alt="" width="400"></a></p> <div class="alertbox">Due to limitations introduced in Magento 2.3.1, all payment methods are enabled by default after the initial installation. Please ensure you deactivate any payment methods you don't need before launching!</div> <h5 class="h5Header">Special adjustments</h5> <p>Certain payment methods require special configurations. The following points are relevant only if you use these specific payment methods:</p> <div class="is-relative"><a href="#/" class="my_plus my_radius"></a><span class="OptionalsSpan">Secured Invoice (new) + Secured Installment<span></span></span></div> <div class="responsesDivcontent"> <p></p> <p>These two payment methods require their own payment portal. Please enter under PAYONE → Payment → Secured Invoice (new) or Secured Installment →  Use Global Settings to "No" and set a separate portal ID.</p> <div class="tryoutbox">For partially captured orders, refunds must match the captured amounts, as each capture generates a new receivable.</div> </div> <p></p> <div class="is-relative"><a href="#/" class="my_plus my_radius"></a><span class="OptionalsSpan">Klarna</span></div> <div class="responsesDivcontent"> <div class="tryoutbox">The Klarna payment methods:<br> - Klarna Pay Later<br> - Klarna Pay Now<br> - Klarna Slice it<br>are grouped in a Klarna Base Payment method.</div> <div><a href="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-15.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/thumbnails/Magento2-15.png" alt="" width="200"></a></div> </div> <p></p> <div class="is-relative"><a href="#/" class="my_plus my_radius"></a><span class="OptionalsSpan">Ratepay</span></div> <div class="responsesDivcontent"> <div><a href="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-16.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/thumbnails/Magento2-16.png" alt="" width="200"></a></div> <div>Ratepay requires the configuration of one or more shop IDs, which you will receive from Ratepay. After adding them, click "Refresh Ratepay Shop-IDs." Valid shop IDs will appear with their settings configured by Ratepay.</div> </div> <p></p> <div class="is-relative"><a href="#/" class="my_plus my_radius"></a><span class="OptionalsSpan">Amazon Pay</span></div> <div class="responsesDivcontent"> <div> <h5 class="h5Param">Integration Settings in Seller Central</h5> </div> <div> <p>Please enter the following URL under Integrator-URL in the item "Integration settings" in Seller Central: https://gpc-sys.pay1.de/gpc/amazon/1.0/notify - the "Seller URL" may remain empty. This URL ensures that the shop receives all notifications from Amazon.</p> </div> <div><a href="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-12.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/thumbnails/Magento2-12.png" alt="" width="200"></a></div> <div>Also please make sure to store all your shop URLs as allowed Javascript Origin in Seller Central.</div> <div></div> <ol style="padding-left: 25px;"> <li>From the Seller Central home page, select “Integration - Integration Central” from the navigation bar on top-left side</li> <li>From Integration Central page, scroll down to the “Manage client ID/store ID(s)” section, and click “View client ID/store ID(s)”</li> <li>If you have an existing client or Store ID registered, review the configuration of the selected store. You can click on the “Edit” link on the right side to edit information</li> <li>If you click on the “Edit” button, you can edit all the details of the client configuration</li> <li>From STEP 3, if you click on the “Create new configuration” link on top, you will be able to create a new client configuration providing all the relevant information</li> </ol> <p><a href="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-13.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/thumbnails/Magento2-13.png" alt="" width="200"></a></p> <h5 class="h5Param">Retrieve Configuration in Magento Backend</h5> <p>To activate the payment method, please use the "get configuration" button. This retrieves your client ID and Seller ID from our Platform. You should then see the values in the corresponding fields.</p> <p>Please note that you can only make live payments after the payment method is allowed for live payments in Seller Central</p> <p> <a href="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-14.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/thumbnails/Magento2-14.png" alt="" width="200"></a></p> <div> <table class="payone-simpleTable" style="width: 57.1374%;"> <thead> <tr> <th class="payone-simpleTh" style="width: 13.144%;">Field</th> <th class="payone-simpleTh" style="width: 86.856%;">Description</th> </tr> </thead> <tbody> <tr> <td class="payone-simpleTd" style="width: 13.144%;"> <p>Amazon Client ID</p> </td> <td class="payone-simpleTd" style="width: 86.856%;"> <p>Displays the current Client ID</p> </td> </tr> <tr> <td class="payone-simpleTd" style="width: 13.144%;"> <p>Amazon Seller ID</p> </td> <td class="payone-simpleTd" style="width: 86.856%;"> <p>Displays the current Seller ID</p> </td> </tr> <tr> <td class="payone-simpleTd" style="width: 13.144%;"> <p>Get configuration</p> </td> <td class="payone-simpleTd" style="width: 86.856%;"> <p>Click this button to retrieve the current configuration from PAYONE.</p> <div class="alertbox"> <p>This payment method won't work before the configuration has been saved!</p> </div> </td> </tr> <tr> <td class="payone-simpleTd" style="width: 13.144%;"> <p>Amazon Button Type</p> </td> <td class="payone-simpleTd" style="width: 86.856%;"> <ul style="list-style: disc inside;"> <li>Amazon Pay (normal) </li> <li>Pay (smaller)</li> <li>Amazon Pay (smallest)</li> </ul> </td> </tr> <tr> <td class="payone-simpleTd" style="width: 13.144%;"> <p>Amazon Button Type</p> </td> <td class="payone-simpleTd" style="width: 86.856%;"> <ul style="list-style: disc inside;"> <li>Gold</li> <li>Light grey</li> <li>Dark grey</li> </ul> </td> </tr> <tr> <td class="payone-simpleTd" style="width: 13.144%;"> <p>Amazon Mode</p> </td> <td class="payone-simpleTd" style="width: 86.856%;"> <ul style="list-style: disc inside;"> <li>Automatic (uses the client's default language)</li> <li>Englisch</li> <li>German</li> <li>French</li> <li>Italian</li> <li>Spanish</li> </ul> </td> </tr> <tr> <td class="payone-simpleTd" style="width: 13.144%;"> <p>Amazon Mode<br> </p> </td> <td class="payone-simpleTd" style="width: 86.856%;"> <ul style="list-style: disc inside;"> <li>Always Synchronous</li> <li>Asynchronous on failure</li> </ul> </td> </tr> </tbody> </table> </div> <div class="responsesDivcontent"> <div class="tryoutbox"> <p>In some cases there can be an interference between our plugin and the Amazon plugin provided in the Magento Core. So if you encounter "strange behavior" like disapperaing amazon buttons, you could try the following command in the magento root:</p> <div class="samplebox responsesDIV"> <div class="sampleboxheader sbflex-big"></div> <button type="button" class="payone-copy-text button payone-is-tiny btn-primary sbflex"> <span class="icon-text"> <span class="icon payone-is-tiny"> <i class="payone-copy-outline"></i> </span> <span>Copy</span> </span> </button> <button class="btn-primary button payone-is-tiny sbflex" aria-expanded="false"> <svg class="svg-Up svg2" version="1.1" viewbox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true" style="fill: currentColor;"> <polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon> </svg><span>expand</span> <!--<span class="sc-jcwpoC DVwyR"></span> --></button> <table class="samplecodebox sbflex-full"> <tbody> <tr style="height: 179px;"> <td> <pre class="language-markup"><code>php bin/magento module:disable Amazon_Payment </code></pre> </td> </tr> </tbody> </table> </div> </div> </div> </div> <p></p> <div class="is-relative"><a href="#/" class="my_plus my_radius"></a><span class="OptionalsSpan">creditcard</span></div> <div class="responsesDivcontent"> <p></p> <p><a href="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-6.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-6.png" alt="" width="200" height="150"></a></p> <p>Under CreditCard-Type, select which credit cards you want to offer.</p> <p>Determines whether the credit card verification number is queried. This is only possible if the acquirer allows it.</p> <div class="tryoutbox">From a purely technical point of view, querying the CVC is optional. However, most end customers are used to the query.</div> </div> <p></p> <div class="is-relative"><a href="#/" class="my_plus my_radius"></a><span class="OptionalsSpan">PAYONE Direct Debit</span></div> <div class="responsesDivcontent"> <p></p> <p><a href="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-7.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/thumbnails/Magento2-7.png" alt="" width="200"></a></p> <p><a href="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-8.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/thumbnails/Magento2-8.png" alt="" width="200"></a></p> <div> <table class="payone-simpleTable" style="width: 51.9064%; height: 349px;"> <thead> <tr style="height: 39px;"> <th class="payone-simpleTh" style="width: 25.5061%; height: 39px;">Field</th> <th class="payone-simpleTh" style="width: 74.4939%; height: 39px;">Description</th> </tr> </thead> <tbody> <tr> <td class="payone-simpleTd" style="width: 25.5061%; height: 66px;"> <p>Request BIC</p> </td> <td class="payone-simpleTd" style="width: 74.4939%; height: 66px;"> <p>Toggles whether the BIC is queried in the checkout. Use this configuration for better compatibility with bank accounts from outside DACH</p> </td> </tr> <tr style="height: 78px;"> <td class="payone-simpleTd" style="width: 25.5061%; height: 10px;"> <p>Validate Bank Code</p> </td> <td class="payone-simpleTd" style="width: 74.4939%; height: 10px;"> <p>Turns on a bank account check using "bankaccountcheck" prompt.</p> <div class="alertbox">This setting is part of our optional Risk Management Module</div> </td> </tr> <tr style="height: 78px;"> <td class="payone-simpleTd" style="width: 25.5061%; height: 78px;"> <p>List of supported SEPA countries</p> </td> <td class="payone-simpleTd" style="width: 74.4939%; height: 78px;"> <p>Multiple selection of the countries from which the payment type debit memo is supported. The PAYONE platform currently only supports direct debits for German bank accounts.</p> </td> </tr> <tr style="height: 78px;"> <td class="payone-simpleTd" style="width: 25.5061%; height: 78px;"> <p>Mandates enabled</p> </td> <td class="payone-simpleTd" style="width: 74.4939%; height: 78px;"> <p>Select Yes / No. Should the SEPA mandate manager be used? A check of the bank details is obligatory. A check against the POS lock list is not possible.</p> </td> </tr> <tr style="height: 78px;"> <td class="payone-simpleTd" style="width: 25.5061%; height: 78px;"> <p>Mandates download enabled</p> </td> <td class="payone-simpleTd" style="width: 74.4939%; height: 78px;"> <p>Select Yes / No. If Yes is selected, a link is offered after the order has been placed, via which the end customer can download the SEPA Mandate as a PDF file.</p> </td> </tr> </tbody> </table> </div> </div> <p></p> <div class="is-relative"><a href="#/" class="my_plus my_radius"></a><span class="OptionalsSpan">PayPal v2<span></span></span></div> <div class="responsesDivcontent"> <p></p> <p>In the test system, there is no need to enter a "PayPal Merchant ID" in the PayPal V2 settings. However, when moving to the live environment, the merchant's "PayPal Merchant ID" must be entered here.</p> <p>You can find a <a href="https://docs.payone.com/payment-methods/paypal/paypal-v2/paypalv2-credentials#/">detailed description</a> of where to locate your PayPal Merchant ID in your PayPal account.</p> <a href="https://docs.payone.com/bl-content/uploads/pages/c26dff931b46dd445bed5bcefd63a1dd/Magento2PPv2.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/c26dff931b46dd445bed5bcefd63a1dd/Magento2PPv2.png" alt="" width="300"></a></div> <p></p> <div class="is-relative"><a href="#/" class="my_plus my_radius"></a><span class="OptionalsSpan">Apple Pay<span></span></span></div> <div class="responsesDivcontent"> <p></p> <p><a href="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-9.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/thumbnails/Magento2-9.png" alt="" width="200"></a></p> <div> <table class="payone-simpleTable" style="width: 36.7604%;"> <thead> <tr> <th class="payone-simpleTh" style="width: 2.25225%;">Field</th> <th class="payone-simpleTh" style="width: 97.7477%;">Description</th> </tr> </thead> <tbody> <tr> <td class="payone-simpleTd" style="width: 2.25225%;"> <p>Enabled</p> </td> <td class="payone-simpleTd" style="width: 97.7477%;"> <p>Yes/ No</p> </td> </tr> <tr> <td class="payone-simpleTd" style="width: 2.25225%;"> <p>Title</p> </td> <td class="payone-simpleTd" style="width: 97.7477%;"> <p>Name of the payment method, which appears in the checkout</p> </td> </tr> <tr> <td class="payone-simpleTd" style="width: 2.25225%;"> <p>Apple Pay Merchant Id</p> </td> <td class="payone-simpleTd" style="width: 97.7477%;"> <p>This value can be taken from the Apple Developer Portal as "Identifier" of your Merchant ID:</p> <p><a href="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-10.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/thumbnails/Magento2-10.png" alt="" width="200"></a></p> </td> </tr> <tr> <td class="payone-simpleTd" style="width: 2.25225%;"> <p>Certificate file</p> </td> <td class="payone-simpleTd" style="width: 97.7477%;"> <p>Please upload your Merchant Identification Certificate from the Apple Developer Portal in .pem format. You can convert the merchant_id.cer file to .pem with this console command:</p> <p></p> <div class="samplebox responsesDIV"> <div class="sampleboxheader sbflex-big">Certificate file</div> <button type="button" class="payone-copy-text button payone-is-tiny btn-primary sbflex"> <span class="icon-text"> <span class="icon payone-is-tiny"> <i class="payone-copy-outline"></i> </span> <span>Copy</span> </span> </button> <button class="btn-primary button payone-is-tiny sbflex" aria-expanded="false"> <svg class="svg-Up svg2" version="1.1" viewbox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true" style="fill: currentColor;"> <polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon> </svg><span>expand</span> <!--<span class="sc-jcwpoC DVwyR"></span> --></button> <table class="samplecodebox sbflex-full"> <tbody> <tr style="height: 179px;"> <td> <pre class="language-markup"><code>openssl x509 -inform der -in merchant_id.cer -outform pem -out merchant_id.pem </code></pre> </td> </tr> </tbody> </table> </div> </td> </tr> <tr> <td class="payone-simpleTd" style="width: 2.25225%;"> <p>Private key file</p> </td> <td class="payone-simpleTd" style="width: 97.7477%;"> <p>Please upload the private key file used to create the Apple Pay CSR here.</p> </td> </tr> <tr> <td class="payone-simpleTd" style="width: 2.25225%;"> <p>Private key password</p> </td> <td class="payone-simpleTd" style="width: 97.7477%;"> <p>Here you can set the password for using the private key</p> </td> </tr> <tr> <td class="payone-simpleTd" style="width: 2.25225%;"> <p>Allowed card types</p> </td> <td class="payone-simpleTd" style="width: 97.7477%;"> <p>Select here the card types that are allowed for Apple Pay. Please only select the card types here that are also part of your PAYONE contract. </p> </td> </tr> </tbody> </table> </div> <div class="tryoutbox"> <p>In addition to the configuration in Magento, it is also necessary to set up the corresponding certificates to operate Apple Pay as a payment method. You can find instructions for this here: Special Remarks - Apple Pay</p> <p>Additionally, Apple requires validation of the store domain for Apple Pay. To do this, follow the instructions in the Apple Developer Portal:</p> <p><a href="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-11.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/thumbnails/Magento2-11.png" alt="" width="200"></a></p> </div> </div> <h5></h5> <h5 class="h5Header">Editing the orders</h5> <p>Click on PAYONE → Orders</p> <p><a href="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-17.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-17.png" alt="" width="200"></a></p> <h5 class="h5Param">Overview</h5> <a href="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-18.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-18.png" alt="" width="300"></a> <p>Here you will find a PAYONE-specific order overview similar to the Magento order overview. In addition to the standard information, you can view the payment status on the PAYONE platform, the exact type of payment (e.g. credit card brands) and, if applicable, the dunning status. A click on View opens the detailed view of the corresponding order.</p> <h5 class="h5Header">Capture</h5> <p>Preauthorized transactions have to be captured in order to trigger the actual cash flow. The PAYONE Plugin handles this step during creation of the invoice for a given order. Under PAYONE → Orders → Order view → Invoices you can trigger the capture with the invoice creation.</p> <p> </p> <p><a href="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-19.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-19.png" alt="" width="200"></a></p> <p>By selecting "Capture Online" in the dropdown list shown above, the debt will be collected on the PAYONE platform. If you do not want to capture the money but still want to create an invoice and receivable, please select "Capture Offline" instead.</p> <p>Partial captures are also possible by simply adjusting the billable quantity of the items.</p> <p><strong style="color: rgba(0, 150, 214, 1);">Refund</strong></p> <p>Already captured funds can be returned by creating a credit memo for an existing invoice.</p> <p><a href="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-20.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-20.png" alt="" width="200"></a></p> <p>Open the invoice details of the invoice to be credited. Click on Credit Memo in the upper right corner.</p> <p> <a href="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-21.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-21.png" alt="" width="300"></a></p> <p>Enter here the amount to be refunded:</p> <p> <a href="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-22.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-22.png" alt="" width="200"></a></p> <p>By selecting the "Refund" Button here, Money is sent back to the customer's payment method. "Refund Offline" will create the credit memo, but won't trigger any cash flow.</p> <p>Partial refunds are possible using the same method as with partial captures. You can also adjust the sum of the refund to account for fees during the refund, but keep in mind that some payment methods rely on cart items to match with the initial order.</p> <h5 class="h5Header">Extended configurations</h5> <p>Here you will find separate setting options that allow you to customize our plugin more precisely to your needs.</p> <div class="is-relative"><a href="#/" class="my_plus my_radius"></a><span class="OptionalsSpan">Send invoicing information</span></div> <div class="responsesDivcontent"> <p></p> <p>Click on PAYONE → General → Send invoicing information activate the transmission of item data to create an invoice on the PAYONE platform.</p> <p>The text can be freely selected and appears as dynamic text on the invoice or credit note. Various Magento variables can be used as placeholders.</p> <p><a href="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-23.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-23.png" alt="" width="200"></a></p> </div> <p></p> <div class="is-relative"><a href="#/" class="my_plus my_radius"></a><span class="OptionalsSpan">Status Mapping</span></div> <div class="responsesDivcontent"> <p></p> <p>Click on PAYONE → General → Status Mapping the different transaction statuses of the PAYONE platform can be mapped to Magento order statuses. If a new transaction status is received, the corresponding "Magento status" is set in the order overview in the Magento backend. This can be entered separately for each payment type.</p> <p><a href="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-24.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-24.png" alt="" width="300"></a></p> </div> <p></p> <div class="is-relative"><a href="#/" class="my_plus my_radius"></a><span class="OptionalsSpan">Custom styling hosted-Iframe</span></div> <div class="responsesDivcontent"> <p></p> <p>Click on PAYONE → General → Payment Creditcard → Input configuration → Custom styling hosted-Iframe</p> <p><a href="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-25.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-25.png" alt="" width="200"></a></p> <div> <table class="payone-simpleTable" style="width: 53.0648%; height: 573px;"> <thead> <tr style="height: 39px;"> <th class="payone-simpleTh" style="width: 1.42248%; height: 39px;">Feld</th> <th class="payone-simpleTh" style="width: 98.5775%; height: 39px;">Beschreibung</th> </tr> </thead> <tbody> <tr style="height: 36px;"> <td class="payone-simpleTd" style="width: 1.42248%; height: 36px;"> <p>Active</p> </td> <td class="payone-simpleTd" style="width: 98.5775%; height: 36px;"> <p>Yes/No</p> </td> </tr> <tr style="height: 57px;"> <td class="payone-simpleTd" style="width: 1.42248%; height: 57px;"> <p>Digit-count</p> </td> <td class="payone-simpleTd" style="width: 98.5775%; height: 57px;"> <p>Length of the field in characters (HTML attribute size)</p> </td> </tr> <tr style="height: 36px;"> <td class="payone-simpleTd" style="width: 1.42248%; height: 36px;"> <p>Width</p> </td> <td class="payone-simpleTd" style="width: 98.5775%; height: 36px;"> <p>CSS - Spezifiziert width</p> </td> </tr> <tr> <td class="payone-simpleTd" style="width: 1.42248%;"> <p>CSS</p> </td> <td class="payone-simpleTd" style="width: 98.5775%;"> <p>Specification of CSS properties for field<br>Deactivated with previous selection of Standard</p> </td> </tr> <tr style="height: 36px;"> <td class="payone-simpleTd" style="width: 1.42248%; height: 36px;"> <p>Height</p> </td> <td class="payone-simpleTd" style="width: 98.5775%; height: 36px;"> <p>CSS - Indication of height</p> </td> </tr> <tr> <td class="payone-simpleTd" style="width: 1.42248%; height: 10px;"> <p>iFrame</p> </td> <td class="payone-simpleTd" style="width: 98.5775%; height: 10px;"> <ul style="list-style: disc inside;"> <li><strong>Standard </strong>- Uses width and height from standard style</li> <li><strong>Custom </strong>- Uses width and height from the following fields</li> </ul> </td> </tr> <tr style="height: 63px;"> <td class="payone-simpleTd" style="width: 1.42248%; height: 63px;"> <p>iFrame</p> </td> <td class="payone-simpleTd" style="width: 98.5775%; height: 63px;"> <ul style="list-style: disc inside;"> <li><strong>Width </strong>- CSS spezification</li> <li><strong>Height </strong>- CSS spezification</li> </ul> </td> </tr> <tr> <td class="payone-simpleTd" style="width: 1.42248%;"> <p>Language</p> </td> <td class="payone-simpleTd" style="width: 98.5775%;"> <p>Select the language in which the error message is to be output.</p> </td> </tr> <tr> <td class="payone-simpleTd" style="height: 10px; width: 1.42248%;"> <p>Standard-style</p> </td> <td class="payone-simpleTd" style="height: 10px; width: 98.5775%;"> <ul style="list-style: disc inside;"> <li><strong>Input  </strong>- CSS specification for all input fields (HTML input)</li> <li><strong>Selection </strong>- CSS specification for all selection fields (HTML select )</li> </ul> </td> </tr> <tr> <td class="payone-simpleTd" style="height: 10px; width: 1.42248%;"> <p>Style</p> </td> <td class="payone-simpleTd" style="height: 10px; width: 98.5775%;"> <ul style="list-style: disc inside;"> <li><strong>Standard </strong>- Uses CSS specification from Standard</li> <li><strong>Custom - </strong>Uses CSS specification from the following field<strong><br></strong></li> </ul> </td> </tr> <tr> <td class="payone-simpleTd" style="height: 89px; width: 1.42248%;"> <p>Type</p> </td> <td class="payone-simpleTd" style="height: 89px; width: 98.5775%;"> <ul style="list-style: disc inside;"> <li><strong>Numeric  </strong>- Only numbers are allowed and for mobile devices the numeric keyboard is used input type="tel"</li> <li><strong>Password </strong>- input type="password"</li> <li><strong>Text </strong>- input type="text"</li> </ul> </td> </tr> <tr style="height: 30px;"> <td class="payone-simpleTd" style="height: 10px; width: 1.42248%;"> <p>Max-digits</p> </td> <td class="payone-simpleTd" style="height: 10px; width: 98.5775%;"> <p>Maximum length of input (HTML attribute maxlength) </p> </td> </tr> </tbody> </table> </div> <h5 class="h5Param">Preview</h5> <p>At this point you can see how the appearance looks according to the previous setting of the credit card payment method in Checkout.</p> <p> <a href="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-26.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-26.png" alt="" width="200"></a></p> </div> <p></p> <div class="is-relative"><a href="#/" class="my_plus my_radius"></a><span class="OptionalsSpan">Simple Protect</span></div> <div class="responsesDivcontent"> <p></p> <p>Simple Protect is the easy and flexible way of using all the data you have, right in the moment when your shop is proccessing the checkout. You can i.e. gain information from:</p> <ul style="list-style: disc inside;"> <li>your magento 2 shop database</li> <li>the current checkout session</li> <li>external sources that can be reached and accessed from the shop server (Datawarehouse; csv / xml / txt - files that can be accessed with PHP; APIs or APIs or extensions like the PAYONE Protect Functions and many more.)</li> </ul> <p></p> <p>Here is an example of some complex decisions that can be performed using our simple protect framework:</p> <p> <a href="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-27.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-27.png" alt="" width="300"></a></p> <div class="tryoutbox"> <p>Simple Protect is currently under beta stage. If you want to use this functionality you have to download the PAYONE Integration from the Simple Protect branch<span style="color: #0d0d0d; font-size: 16px; font-weight: 400;">:</span></p> <a href="https://github.com/PAYONE-GmbH/magento-2/tree/simple-protect">https://github.com/PAYONE-GmbH/magento-2/tree/simple-protect</a><br><br> <p>After that, please follow the intructions for installing the Simple Protect Template here:</p> <a href="https://github.com/PAYONE-GmbH/magento-2-simple-protect">https://github.com/PAYONE-GmbH/magento-2-simple-protect</a></div> <div class="infobox"> <p>A complete example implementation you will find at:</p> <div class="buttons"><a class="btn btn-success has-text-white" type="button" href="https://github.com/PAYONE-GmbH/magento-2-simple-protect" target="_blank" rel="noopener"> Download from Github</a></div> </div> <div class="alertbox"> <p>Please be aware that all functions described in the legacy part of this documentation won't be available anymore when using simple protect. For the time being, we also don't offer a migration mechanism.<br>Be aware that you have to be compliant as described in the specifications of the <span style="color: #3598db;"><a href="https://de.wikipedia.org/wiki/Datenschutz-Grundverordnung" target="_blank" rel="noopener" style="color: #3598db;">GDPR</a></span></p> </div> <h5>Implementation</h5> <div class="circnum">1</div> <div> <p>First of all you have to initialize a database object:</p> <pre class="language-php"><code>/** * Database connection resource * * @var \Magento\Framework\App\ResourceConnection */ protected $databaseResource;</code></pre> <p></p> </div> <div class="circnum">2</div> <div> <p>__construct it</p> <pre class="language-php"><code>/** * Constructor * * @param \Magento\Framework\App\ResourceConnection $resource */ public function __construct( \Magento\Framework\App\ResourceConnection $resource ) { $this-&gt;databaseResource = $resource; }</code></pre> </div> <p></p> <div class="circnum">3</div> <div> <p>and then you can ask the database for information like these</p> <pre class="language-php"><code>/** * Get count of customers orders * * @param CustomerInterface $oCustomer * @return int */ protected function getCustomersOrderCount(CustomerInterface $oCustomer) { $db = $this-&gt;databaseResource-&gt;getConnection(); $oSelect = $db-&gt;select() -&gt;from($this-&gt;databaseResource-&gt;getTableName('sales_order'), ['COUNT(entity_id)']) -&gt;where("customer_id = :customerId"); $iCount = $db-&gt;fetchOne($oSelect, ['customerId' =&gt; $oCustomer-&gt;getId()]); if ($iCount === null) { return 0; } return $iCount; }</code></pre> </div> <p></p> <h4>Execute PAYONE protect checks</h4> <div class="infobox" style="background-position-y: 15px;"> <p>to be able for executing the protect check you have to init and construct the PAYONE protectFunnel</p> <br> <pre class="language-php"><code>/** * PAYONE Protect model providing access to consumerscore and addresscheck requests * * @var \Payone\Core\Model\SimpleProtect\ProtectFunnel */ protected $protectFunnel; public function __construct( \Payone\Core\Model\SimpleProtect\ProtectFunnel $protectFunnel ) { $this-&gt;protectFunnel = $protectFunnel; }</code></pre> </div> <h6>addresscheck</h6> <p>here is a simple method to execute the addresscheck with the billing address</p> <br> <pre class="language-php"><code>/** * Example for addresscheck usage * * @param Quote $oQuote * @return AddresscheckResponse|bool */ protected function executeAddresscheck(Quote $oQuote) { $oAddress = $oQuote-&gt;getBillingAddress(); $sAddresscheckType = AddressCheckType::BASIC; return $this-&gt;protectFunnel-&gt;executeAddresscheck($oAddress, $this-&gt;getOperationMode(), $sAddresscheckType); }</code></pre> <p></p> <p>if you want to perform the addresscheck on the shipping address you have to change the $oAddress - Variable this way</p> <pre class="language-php"><code>/** * getting the shipping address */ $oAddress = $oQuote-&gt;getShippingAddress();</code></pre> <p></p> <p>maybe you want to use another way / type for the addresscheck there are many more options</p> <pre class="language-php"><code>/** * Examples of all the types for addresscheck usage */ $sAddresscheckType = AddressCheckType::NONE; $sAddresscheckType = AddressCheckType::BASIC; $sAddresscheckType = AddressCheckType::PERSON; $sAddresscheckType = AddressCheckType::BONIVERSUM_BASIC; $sAddresscheckType = AddressCheckType::BONIVERSUM_BASIC;</code></pre> <p></p> <h6>consumerscore</h6> <p>here is a simple method to perform the consumerscore - request as in the addresscheck described you can also switch the address which you want to check</p> <pre class="language-php"><code>/** * getting the shipping address */ $oAddress = $oQuote-&gt;getShippingAddress();</code></pre> <p></p> <p>all options for the consumerscore are described here</p> <pre class="language-php"><code>/** * Examples of all the options for consumerscore usage */ $sConsumerscoreType = CreditratingCheckType::INFOSCORE_HARD; $sConsumerscoreType = CreditratingCheckType::INFOSCORE_ALL; $sConsumerscoreType = CreditratingCheckType::INFOSCORE_ALL_BONI; $sConsumerscoreType = CreditratingCheckType::BONIVERSUM_VERITA;</code></pre> <p></p> <p>an example</p> <pre class="language-php"><code>/** * Example for consumerscore usage * * @param Quote $oQuote * @return ConsumerscoreResponse|bool */ protected function executeConsumerscore(Quote $oQuote) { $oAddress = $oQuote-&gt;getBillingAddress(); $sConsumerscoreType = CreditratingCheckType::INFOSCORE_ALL; return $this-&gt;protectFunnel-&gt;executeConsumerscore($oAddress, $this-&gt;getOperationMode(), $sConsumerscoreType, $sAddresscheckType); }</code></pre> <p></p> <p>you can use the result from above like this</p> <pre class="language-php"><code>/** * Check the result of executing the consumerscore * @return bool */ $oResponse = $this-&gt;executeConsumerscore($oQuote); if ($oResponse instanceof ConsumerscoreResponse &amp;&amp; ($oResponse-&gt;getStatus() != 'VALID' || $oResponse-&gt;getScore() != 'G')) { return true; }</code></pre> <div class="infobox" style="background-position-y: 15px;"> <p>In the above example the call $oResponse-&gt;getScore() will give you the value score as described here</p> </div> <h6>Filter on the store view</h6> <p>if you need to have other decisions regarding a store view, you can ask for it with the existing magento objects like</p> <pre class="language-php"><code>/** * Change AddressCheckType for the stores * @default AddressCheckType::NONE */ $sAddresscheckType = AddressCheckType::NONE; if ($oQuote-&gt;getStore()-&gt;getName() == 'new Brands') { $sAddresscheckType = AddressCheckType::PERSON; } else if ($oQuote-&gt;getStore()-&gt;getCode() == 'old_Brands') { $sAddresscheckType = AddressCheckType::BASIC; }</code></pre> <p></p> </div> <h5 class="h5Param">Configuration</h5> <p>Click on PAYONE → Protect</p> <p><a href="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-28.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-28.png" alt="" width="200"></a></p> <p><a href="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-29.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-29.png" alt="" width="300"></a></p> <div class="alertbox">This option only affects requests regarding the PAYONE - API like adresscheck or consumerscore. Any other code will be executed as developed.</div> <div id="Entry_points__Points_of_action"> <h5 class="h5Param">Entry points / Points of action</h5> <p>The class app/code/Payone/SimpleProtect/Model/SimpleProtect/SimpleProtect.php is the central point to implement the decisions. The following methods reperesent the points where the actions are taking place.</p> <div class="samplebox responsesDIV"> <div class="sampleboxheader sbflex-big"><span class="sampleboxhtext has-text-white">Example of full implementation</span></div> <button type="button" class="payone-copy-text button payone-is-tiny btn-primary sbflex"> <span class="icon-text"> <span class="icon payone-is-tiny"> <i class="payone-copy-outline"></i> </span> <span>Copy</span> </span> </button> <button class="btn-primary button payone-is-tiny sbflex" aria-expanded="false"> <svg class="svg-Up svg2" version="1.1" viewbox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true" style="fill: currentColor;"> <polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon> </svg><span>expand</span> <!--<span class="sc-jcwpoC DVwyR"></span> --></button> <table class="samplecodebox sbflex-full"> <tbody> <tr style="height: 179px;"> <td> <pre class="language-php"><code>&lt;?php /** * PAYONE Magento 2 Connector is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * PAYONE Magento 2 Connector is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with PAYONE Magento 2 Connector. If not, see &lt;http://www.gnu.org/licenses/&gt;. * * PHP version 5 * * @category Payone * @package Payone_Magento2_SimpleProtect * @author FATCHIP GmbH &lt;support@fatchip.de&gt; * @copyright 2003 - 2019 Payone GmbH * @license &lt;http://www.gnu.org/licenses/&gt; GNU Lesser General Public License * @link http://www.payone.de */ namespace Payone\SimpleProtect\Model\SimpleProtect; use Magento\Payment\Model\MethodInterface; use Magento\Quote\Model\Quote; use Payone\Core\Model\SimpleProtect\SimpleProtect as OrigSimpleProtect; use Payone\Core\Model\PayoneConfig; use Magento\Customer\Api\Data\CustomerInterface; use Magento\Quote\Model\Quote\Address; use Payone\Core\Model\Source\AddressCheckType; use Payone\Core\Model\Source\CreditratingCheckType; use Magento\Framework\Exception\LocalizedException; use Payone\Core\Model\Exception\FilterMethodListException; use Payone\Core\Model\Api\Response\AddresscheckResponse; use Payone\Core\Model\Api\Response\ConsumerscoreResponse; use Magento\Quote\Api\Data\AddressInterface; use Magento\Store\Model\ScopeInterface; class SimpleProtect extends OrigSimpleProtect { const MODULE_VERSION = '1.0.0'; /** * Whitelist of safe payment methods * * @var array */ protected $safePaymentMethods = [ PayoneConfig::METHOD_ADVANCE_PAYMENT, PayoneConfig::METHOD_CREDITCARD, PayoneConfig::METHOD_PAYPAL ]; /** * PAYONE Protect model providing access to consumerscore and addresscheck requests * * @var \Payone\Core\Model\SimpleProtect\ProtectFunnel */ protected $protectFunnel; /** * Database connection resource * * @var \Magento\Framework\App\ResourceConnection */ protected $databaseResource; /** * Checkout session object * * @var \Magento\Checkout\Model\Session\Proxy */ protected $checkoutSession; /** * Scope config object * * @var \Magento\Framework\App\Config\ScopeConfigInterface */ protected $scopeConfig; /** * Constructor * * @param \Payone\Core\Model\SimpleProtect\ProtectFunnel $protectFunnel * @param \Magento\Framework\App\ResourceConnection $resource * @param \Magento\Checkout\Model\Session\Proxy $checkoutSession * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig */ public function __construct( \Payone\Core\Model\SimpleProtect\ProtectFunnel $protectFunnel, \Magento\Framework\App\ResourceConnection $resource, \Magento\Checkout\Model\Session\Proxy $checkoutSession, \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig ) { parent::__construct($protectFunnel); $this-&gt;databaseResource = $resource; $this-&gt;checkoutSession = $checkoutSession; $this-&gt;scopeConfig = $scopeConfig; } /** * Returns configured operation mode used for the addresscheck and consumerscore * * @return string */ public function getOperationMode() { return $this-&gt;scopeConfig-&gt;getValue('payone_general/global/protect_mode', ScopeInterface::SCOPE_STORES); } /** * Get count of customers orders * * @param CustomerInterface $oCustomer * @return int */ protected function getCustomersOrderCount(CustomerInterface $oCustomer) { $db = $this-&gt;databaseResource-&gt;getConnection(); $oSelect = $db-&gt;select() -&gt;from($this-&gt;databaseResource-&gt;getTableName('sales_order'), ['COUNT(entity_id)']) -&gt;where("customer_id = :customerId"); $iCount = $db-&gt;fetchOne($oSelect, ['customerId' =&gt; $oCustomer-&gt;getId()]); if ($iCount === null) { return 0; } return $iCount; } /** * Check if the customer has ordered before * * @param CustomerInterface $oCustomer * @return bool */ protected function isRecurringCustomer(CustomerInterface $oCustomer) { if ($this-&gt;getCustomersOrderCount($oCustomer) == 0) { return false; } return true; } /** * Possibility to whiteliste customers with custom functionality * * @param CustomerInterface $oCustomer * @return bool */ protected function isCustomerWhitelisted(CustomerInterface $oCustomer) { return true; // implement this for yourself or remove completely } /** * Generate hash of given address for comparison * * @param Address $oAddress * @return string */ protected function getAddressHash(Address $oAddress) { $sAddress = $oAddress-&gt;getFirstname(); $sAddress .= $oAddress-&gt;getLastname(); $sAddress .= $oAddress-&gt;getCity(); $sAddress .= $oAddress-&gt;getPostcode(); $sAddress .= $oAddress-&gt;getCountry(); $sAddress .= $oAddress-&gt;getStreetFull(); return md5($sAddress); } /** * Compare given addresses, return true if they are the same * * @param Address $oBilling * @param Address $oShipping * @return bool */ protected function isBillingAndShippingAddressTheSame(Address $oBilling, Address $oShipping) { if ($this-&gt;getAddressHash($oBilling) != $this-&gt;getAddressHash($oShipping)) { return false; } return true; } /** * Filter out all payment methods except for the safe payment methods * * @param MethodInterface[] $aPaymentMethods * @return MethodInterface[] */ protected function getSafePaymentMethods($aPaymentMethods) { $aReturn = []; foreach ($aPaymentMethods as $oPaymentMethod) { if (in_array($oPaymentMethod-&gt;getCode(), $this-&gt;safePaymentMethods) === true) { $aReturn[] = $oPaymentMethod; } } return $aReturn; } /** * Examples of all the options for addresscheck usage * * @param Quote $oQuote * @return AddresscheckResponse|bool */ protected function executeAddresscheck(Quote $oQuote) { $oAddress = $oQuote-&gt;getBillingAddress(); #$oAddress = $oQuote-&gt;getShippingAddress(); #$sAddresscheckType = AddressCheckType::NONE; $sAddresscheckType = AddressCheckType::BASIC; #$sAddresscheckType = AddressCheckType::PERSON; #$sAddresscheckType = AddressCheckType::BONIVERSUM_BASIC; #$sAddresscheckType = AddressCheckType::BONIVERSUM_PERSON; return $this-&gt;protectFunnel-&gt;executeAddresscheck($oAddress, $this-&gt;getOperationMode(), $sAddresscheckType, $this-&gt;getModuleVersion()); } /** * Examples of all the options for consumerscore usage * * @param Quote $oQuote * @return ConsumerscoreResponse|bool */ protected function executeConsumerscore(Quote $oQuote) { $oAddress = $oQuote-&gt;getBillingAddress(); #$oAddress = $oQuote-&gt;getShippingAddress(); #$sConsumerscoreType = CreditratingCheckType::INFOSCORE_HARD; $sConsumerscoreType = CreditratingCheckType::INFOSCORE_ALL; #$sConsumerscoreType = CreditratingCheckType::INFOSCORE_ALL_BONI; #$sConsumerscoreType = CreditratingCheckType::BONIVERSUM_VERITA; $sAddresscheckType = AddressCheckType::NONE; #$sAddresscheckType = AddressCheckType::BASIC; #$sAddresscheckType = AddressCheckType::PERSON; #$sAddresscheckType = AddressCheckType::BONIVERSUM_BASIC; #$sAddresscheckType = AddressCheckType::BONIVERSUM_PERSON; return $this-&gt;protectFunnel-&gt;executeConsumerscore($oAddress, $this-&gt;getOperationMode(), $sConsumerscoreType, $sAddresscheckType, $this-&gt;getModuleVersion()); } /** * Check rules for recurring registered customers * * @param Quote $oQuote * @return bool */ protected function isOnlySafePaymentApplicableForRecurringCustomer(Quote $oQuote) { if ($oQuote-&gt;getBaseGrandTotal() &gt; 400 || $this-&gt;isCustomerWhitelisted($oQuote-&gt;getCustomer()) === false) { return true; } return false; } /** * Check rules for first time registered customer * * @param Quote $oQuote * @param bool $blIsPrePaymentSelection * @return bool */ protected function isOnlySafePaymentApplicableForInitialOrder(Quote $oQuote, $blIsPrePaymentSelection) { if ($blIsPrePaymentSelection === false &amp;&amp; $this-&gt;isBillingAndShippingAddressTheSame($oQuote-&gt;getBillingAddress(), $oQuote-&gt;getShippingAddress()) === false) { return true; } if ($oQuote-&gt;getBaseGrandTotal() &gt; 120) { return true; } if ($blIsPrePaymentSelection === false &amp;&amp; !in_array($oQuote-&gt;getPayment()-&gt;getMethodInstance()-&gt;getCode(), $this-&gt;safePaymentMethods)) { $oResponse = $this-&gt;executeConsumerscore($oQuote); if ($oResponse instanceof ConsumerscoreResponse &amp;&amp; ($oResponse-&gt;getStatus() != 'VALID' || $oResponse-&gt;getScore() != 'G')) { return true; } } return false; } /** * Check if only safe payment methods are applicable * * @param Quote $oQuote * @param bool $blIsPrePaymentSelection * @return bool */ protected function isOnlySafePaymentApplicable(Quote $oQuote, $blIsPrePaymentSelection) { if ($this-&gt;checkoutSession-&gt;getPayoneSimpleProtectOnlySafePaymentsAllowed() === true) { return true; } if ($oQuote-&gt;getCustomerId() === null) { // if guest checkout return true; } if ($this-&gt;isRecurringCustomer($oQuote-&gt;getCustomer()) === true) { return $this-&gt;isOnlySafePaymentApplicableForRecurringCustomer($oQuote); } return $this-&gt;isOnlySafePaymentApplicableForInitialOrder($oQuote, $blIsPrePaymentSelection); } /************************* MAIN SIMPLEPROTECT HOOKS *************************/ /** * This method can be extended for individual custom behaviour * * Extending this method gives the following possibilities: * 1. Filtering out payment methods based on your own rule set * 2. Throwing a LocalizedException to send the user back to shipping method selection * * @param Quote $oQuote * @param MethodInterface[] $aPaymentMethods * @return MethodInterface[] */ public function handlePrePaymentSelection(Quote $oQuote, $aPaymentMethods) { if ($this-&gt;isOnlySafePaymentApplicable($oQuote, true) === true) { return $this-&gt;getSafePaymentMethods($aPaymentMethods); } return $aPaymentMethods; } /** * This method can be extended for individual custom behaviour * * Extending this method gives the following possibilities: * 1. Throwing a LocalizedException will stop the order creation and throw the user back to payment selection with the given thrown message * 2. Throwing a FilterMethodListException with an array of safe payment methods will stop the order creation and * throw the user back to payment selection with the given thrown message and remove all other payment methods except for the given ones * 3. Finishing the method - so throwing no Exception will finish the order creation * * @param Quote $oQuote * @return void * @throws LocalizedException * @throws FilterMethodListException */ public function handlePostPaymentSelection(Quote $oQuote) { if ($this-&gt;isOnlySafePaymentApplicable($oQuote, false) === true) { $sMethodCode = $oQuote-&gt;getPayment()-&gt;getMethodInstance()-&gt;getCode(); if (!in_array($sMethodCode, $this-&gt;safePaymentMethods)) { $this-&gt;checkoutSession-&gt;setPayoneSimpleProtectOnlySafePaymentsAllowed(true); throw new FilterMethodListException(__('Please select another payment method.'), $this-&gt;safePaymentMethods); } } } /** * This method can be extended to transfer the version of your Simple-Protect implementation to Payone * It is recommended to transfer the name of your module and the version, otherwise Payone doesn't know that it is a Simple-Protect call * * @return string|null */ public function getModuleVersion() { return 'Payone_SimpleProtect-'.self::MODULE_VERSION; } }</code></pre> </td> </tr> </tbody> </table> </div> <p></p> <div class="tryoutbox">We're curating more samples at Magento 2 - Simple Protect. Here you will find more information on how to gain data for your decisions. You're also invited to add more examples as issues on github or vial email at docs@payone.com.</div> <h5 class="h5Param">handlePrePaymentSelection</h5> <p>Implementing this method gives you the following possibilities:</p> <ol style="padding-left: 25px;"> <li>Throwing a LocalizedException will stop the order creation and throw the user back to payment selection with the given thrown message</li> <li>Throwing a FilterMethodListException with an array of safe payment methods will stop the order creation and throw the user back to payment selection with the given thrown message and remove all other payment methods except for the given ones</li> <li>Finishing the method - so throwing no Exception will finish the order creation</li> </ol> <div class="samplebox responsesDIV"> <div class="sampleboxheader sbflex-big">handlePrePaymentSelection</div> <button type="button" class="payone-copy-text button payone-is-tiny btn-primary sbflex"> <span class="icon-text"> <span class="icon payone-is-tiny"> <i class="payone-copy-outline"></i> </span> <span>Copy</span> </span> </button> <button class="btn-primary button payone-is-tiny sbflex" aria-expanded="false"> <svg class="svg-Up svg2" version="1.1" viewbox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true" style="fill: currentColor;"> <polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon> </svg><span>expand</span> <!--<span class="sc-jcwpoC DVwyR"></span> --></button> <table class="samplecodebox sbflex-full"> <tbody> <tr style="height: 179px;"> <td> <pre class="language-markup"><code>@param Quote $oQuote @param MethodInterface[] $aPaymentMethods @return MethodInterface[] public function handlePrePaymentSelection(Quote $oQuote, $aPaymentMethods) { if ($this-&gt;isOnlySafePaymentApplicable($oQuote, true) === true) { return $this-&gt;getSafePaymentMethods($aPaymentMethods); } return $aPaymentMethods; }</code></pre> </td> </tr> </tbody> </table> <p></p> </div> <p></p> <h5 class="h5Param">handlePostPaymentSelection</h5> <p>Implementing this method gives you the following possibilities:</p> <ol style="padding-left: 25px;"> <li>Throwing a LocalizedException will stop the order creation and throw the user back to payment selection with the given thrown message</li> <li>Throwing a FilterMethodListException with an array of safe payment methods will stop the order creation and throw the user back to payment selection with the given thrown message and remove all other payment methods except for the given ones</li> <li>Finishing the method - so throwing no Exception will finish the order creation</li> </ol> <div class="samplebox responsesDIV"> <div class="sampleboxheader sbflex-big">handlePostPaymentSelection</div> <button type="button" class="payone-copy-text button payone-is-tiny btn-primary sbflex"> <span class="icon-text"> <span class="icon payone-is-tiny"> <i class="payone-copy-outline"></i> </span> <span>Copy</span> </span> </button> <button class="btn-primary button payone-is-tiny sbflex" aria-expanded="false"> <svg class="svg-Up svg2" version="1.1" viewbox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true" style="fill: currentColor;"> <polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon> </svg><span>expand</span> <!--<span class="sc-jcwpoC DVwyR"></span> --></button> <table class="samplecodebox sbflex-full"> <tbody> <tr style="height: 179px;"> <td> <pre class="language-markup"><code>@param Quote $oQuote @return void @throws LocalizedException @throws FilterMethodListException public function handlePostPaymentSelection(Quote $oQuote) { if ($this-&gt;isOnlySafePaymentApplicable($oQuote, false) === true) { $sMethodCode = $oQuote-&gt;getPayment()-&gt;getMethodInstance()-&gt;getCode(); if (!in_array($sMethodCode, $this-&gt;safePaymentMethods)) { $this-&gt;checkoutSession-&gt;setPayoneSimpleProtectOnlySafePaymentsAllowed(true); throw new FilterMethodListException(__('Please select another payment method.'), $this-&gt;safePaymentMethods); } } }</code></pre> </td> </tr> </tbody> </table> </div> <h5 class="h5Param">handleEnterOrChangeBillingAddress</h5> <p>Implementing this method gives you the following possibilities:</p> <ol style="padding-left: 25px;"> <li>Returning true will just continue the process without changing anything</li> <li>Returning a (changed) address object instance of AddressInterface will show an address correction prompt to the customer</li> <li>Throwing a LocalizedException will show the given exception message to the customer</li> </ol> <div class="samplebox responsesDIV"> <div class="sampleboxheader sbflex-big">handleEnterOrChangeBillingAddress</div> <button type="button" class="payone-copy-text button payone-is-tiny btn-primary sbflex"> <span class="icon-text"> <span class="icon payone-is-tiny"> <i class="payone-copy-outline"></i> </span> <span>Copy</span> </span> </button> <button class="btn-primary button payone-is-tiny sbflex" aria-expanded="false"> <svg class="svg-Up svg2" version="1.1" viewbox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true" style="fill: currentColor;"> <polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon> </svg><span>expand</span> <!--<span class="sc-jcwpoC DVwyR"></span> --></button> <table class="samplecodebox sbflex-full"> <tbody> <tr style="height: 179px;"> <td> <pre class="language-markup"><code>@param AddressInterface $oAddressData @param bool $blIsVirtual @param double $dTotal @return AddressInterface|bool @throws LocalizedException public function handleEnterOrChangeBillingAddress(AddressInterface $oAddressData, $blIsVirtual, $dTotal) { $response = $this-&gt;protectFunnel-&gt;executeAddresscheck($oAddressData, $this-&gt;getOperationMode(), AddressCheckType::BASIC); if ($oAddressData-&gt;getCity() == "FalscheStadt") { $oAddressData-&gt;setCity($response-&gt;getCity()); return $oAddressData; } return true; }</code></pre> </td> </tr> </tbody> </table> </div> <p></p> <h5 class="h5Param">handleEnterOrChangeShippingAddress</h5> <p>Implementing this method gives you the following possibilities:</p> <ol style="padding-left: 25px;"> <li>Returning true will just continue the process without changing anything</li> <li>Returning a (changed) address object instance of AddressInterface will show an address correction prompt to the customer</li> <li>Throwing a LocalizedException will show the given exception message to the customer</li> </ol> <div class="samplebox responsesDIV"> <div class="sampleboxheader sbflex-big">handleEnterOrChangeShippingAddress</div> <button type="button" class="payone-copy-text button payone-is-tiny btn-primary sbflex"> <span class="icon-text"> <span class="icon payone-is-tiny"> <i class="payone-copy-outline"></i> </span> <span>Copy</span> </span> </button> <button class="btn-primary button payone-is-tiny sbflex" aria-expanded="false"> <svg class="svg-Up svg2" version="1.1" viewbox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true" style="fill: currentColor;"> <polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon> </svg><span>expand</span> <!--<span class="sc-jcwpoC DVwyR"></span> --></button> <table class="samplecodebox sbflex-full"> <tbody> <tr style="height: 179px;"> <td> <pre class="language-markup"><code>@param AddressInterface $oAddressData @param bool $blIsVirtual @param double $dTotal @return AddressInterface|bool @throws LocalizedException public function handleEnterOrChangeShippingAddress(AddressInterface $oAddressData, $blIsVirtual, $dTotal) { $response = $this-&gt;protectFunnel-&gt;executeAddresscheck($oAddressData, $this-&gt;getOperationMode(), AddressCheckType::BASIC); if ($oAddressData-&gt;getCity() == "FalscheStadt") { $oAddressData-&gt;setCity($response-&gt;getCity()); return $oAddressData; } return true; }</code></pre> </td> </tr> </tbody> </table> </div> <p></p> <div class="is-relative"><a href="#/" class="my_plus my_radius"></a><span class="OptionalsSpan">Protect (Legacy)</span></div> <div class="responsesDivcontent"> <p></p> <p>Click on PAYONE → Protect</p> <p><a href="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-30.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-30.png" alt="" width="200"></a></p> <h5 class="h5Param">Address Validation</h5> <p><a href="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-31.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-31.png" alt="" width="300"></a></p> <div> <table class="payone-simpleTable" style="width: 48.3453%;"> <thead> <tr> <th class="payone-simpleTh" style="width: 21.7629%;">Field</th> <th class="payone-simpleTh" style="width: 78.2371%;">Beschreibung</th> </tr> </thead> <tbody> <tr> <td class="payone-simpleTd" style="width: 21.7629%;"> <p>Enabled</p> </td> <td class="payone-simpleTd" style="width: 78.2371%;"> <p>Activating the address check</p> </td> </tr> <tr> <td class="payone-simpleTd" style="width: 21.7629%;"> <p>Mode</p> </td> <td class="payone-simpleTd" style="width: 78.2371%;"> <p>Choice between Test / Live. This determines whether the PAYONE platform is addressed in Test or Live mode.</p> </td> </tr> <tr> <td class="payone-simpleTd" style="width: 21.7629%;"> <p>Check Billing Address</p> </td> <td class="payone-simpleTd" style="width: 78.2371%;"> <p>Configuration with which check the invoice address is to be checked.</p> </td> </tr> <tr> <td class="payone-simpleTd" style="width: 21.7629%;"> <p>Check Shipping Address</p> </td> <td class="payone-simpleTd" style="width: 78.2371%;"> <p>Configuration with which check the delivery address is to be checked.</p> </td> </tr> <tr> <td class="payone-simpleTd" style="width: 21.7629%;"> <p>Check Billing Address for virtual orders</p> </td> <td class="payone-simpleTd" style="width: 78.2371%;"> <p>Select yes/no whether the billing address should be checked for virtual orders.</p> </td> </tr> <tr> <td class="payone-simpleTd" style="width: 21.7629%;"> <p>Confirm address correction</p> </td> <td class="payone-simpleTd" style="width: 78.2371%;"> <p>Selection yes/no whether an address correction must be confirmed by the buyer.</p> </td> </tr> <tr> <td class="payone-simpleTd" style="width: 21.7629%;"> <p>Person Status Mapping</p> </td> <td class="payone-simpleTd" style="width: 78.2371%;"> <p>Assignment of individual person status returns to a traffic light value.</p> <div class="tryoutbox">Works only with the address check "Person", which returns personal information</div> </td> </tr> <tr> <td class="payone-simpleTd" style="width: 21.7629%;"> <p>Message to display for invalid data</p> </td> <td class="payone-simpleTd" style="width: 78.2371%;"> <p>Error message to be displayed at status "INVALID"</p> </td> </tr> <tr> <td class="payone-simpleTd" style="width: 21.7629%;"> <p>Response ERROR handling</p> </td> <td class="payone-simpleTd" style="width: 78.2371%;"> <p>What should be executed after an error in the extension or the PAYONE platform?</p> </td> </tr> <tr> <td class="payone-simpleTd" style="width: 21.7629%;"> <p>Minimum Order Total</p> </td> <td class="payone-simpleTd" style="width: 78.2371%;"> <p>Minimum amount to execute an address check.</p> </td> </tr> <tr> <td class="payone-simpleTd" style="width: 21.7629%;"> <p>Maximum Order Total</p> </td> <td class="payone-simpleTd" style="width: 78.2371%;"> <p>Maximum amount to execute an address check.</p> </td> </tr> <tr> <td class="payone-simpleTd" style="width: 21.7629%;"> <p>lifetime</p> </td> <td class="payone-simpleTd" style="width: 78.2371%;"> <p>Number of days in which no new address validation is performed.</p> </td> </tr> </tbody> </table> </div> <h5 class="h5Param">Credit Assessment</h5> <p><a href="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-32.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-32.png" alt="" width="300"></a></p> <div> <table class="payone-simpleTable" style="width: 48.2339%;"> <thead> <tr> <th class="payone-simpleTh" style="width: 27.3083%;">Field</th> <th class="payone-simpleTh" style="width: 72.6917%;">Description</th> </tr> </thead> <tbody> <tr> <td class="payone-simpleTd" style="width: 27.3083%;"> <p>Enabled</p> </td> <td class="payone-simpleTd" style="width: 72.6917%;"> <p>Activation of the credit rating check</p> </td> </tr> <tr> <td class="payone-simpleTd" style="width: 27.3083%;"> <p>Mode</p> </td> <td class="payone-simpleTd" style="width: 72.6917%;"> <p>Choice between Test / Live. This determines whether the PAYONE platform is addressed in Test or Live mode.</p> </td> </tr> <tr> <td class="payone-simpleTd" style="width: 27.3083%;"> <p>Integration Event</p> </td> <td class="payone-simpleTd" style="width: 72.6917%;"> <p>Selection of "Before/After" payment selection.</p> </td> </tr> <tr> <td class="payone-simpleTd" style="width: 27.3083%;"> <p>Creditrating-Checktype<br> </p> </td> <td class="payone-simpleTd" style="width: 72.6917%;"> <ul style="list-style: disc inside;"> <li>Infoscore (hard criteria, all criteria, all criteria+ Boniscore)</li> <li>Boniversum (VERITA Score)</li> </ul> </td> </tr> <tr> <td class="payone-simpleTd" style="width: 27.3083%;"> <p>Default values for unknown scores</p> </td> <td class="payone-simpleTd" style="width: 72.6917%;"> <p>Selection of a traffic light color for the return status "Unknown"</p> </td> </tr> <tr> <td class="payone-simpleTd" colspan="2" style="background-color: #ecf0f1; width: 100%;"> <p>only affects Boniversum verita score!</p> </td> </tr> <tr> <td class="payone-simpleTd" style="width: 27.3083%;"> <p>Response ERROR handling</p> </td> <td class="payone-simpleTd" style="width: 72.6917%;"> <p>What to do if an error occurs in the integration or on the PAYONE platform?</p> </td> </tr> <tr> <td class="payone-simpleTd" style="width: 27.3083%;"> <p>Insufficient score error message</p> </td> <td class="payone-simpleTd" style="width: 72.6917%;"> <p>Message displayed to the customer when an insufficient point value is reached.</p> </td> </tr> <tr> <td class="payone-simpleTd" style="width: 27.3083%;"> <p>Minimum Order Total</p> </td> <td class="payone-simpleTd" style="width: 72.6917%;"> <p>Minimum amount to carry out a credit check.</p> </td> </tr> <tr> <td class="payone-simpleTd" style="width: 27.3083%;"> <p>Maximum Order Total</p> </td> <td class="payone-simpleTd" style="width: 72.6917%;"> <p>Maximum amount to carry out a credit check.</p> </td> </tr> <tr> <td class="payone-simpleTd" style="width: 27.3083%;"> <p>lifetime</p> </td> <td class="payone-simpleTd" style="width: 72.6917%;"> <p>Number of days in which no new credit check is performed.</p> </td> </tr> </tbody> </table> </div> <div class="tryoutbox"><strong>Service provider for address- and credit checks<br></strong>Various service providers are available for address and creditworthiness checks. Our support team will be happy to explain the range of services of the individual checks and which service provider is the right one for you.</div> <p></p> </div> <div class="is-relative"><a href="#/" class="my_plus my_radius"></a><span class="OptionalsSpan">List of PAYONE IPs</span></div> <div class="responsesDivcontent"> <p></p> <p>Click on PAYONE → Misc</p> <p><a href="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-33.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-33.png" alt="" width="200"></a></p> <p><a href="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-34.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-34.png" alt="" width="300"></a></p> <p>After the installation, the currently valid IP addresses are specified there. Only change if necessary. You only need to add these addresses if your system landscape works with load balancers or proxy systems, for example. Please consult your admin or hosting service provider.</p> </div> <div class="is-relative"><a href="#/" class="my_plus my_radius"></a><span class="OptionalsSpan">Transactions-Status Forwarding</span></div> <div class="responsesDivcontent"> <p></p> <p>Click on PAYONE → Misc</p> <p><a href="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-35.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-35.png" alt="" width="200"></a></p> <p><a href="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-36.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-36.png" alt="" width="300"></a></p> <p>At this point you can define which status is forwarded to which URL and how long the timeout is in seconds until the redirection attempt is terminated.</p> </div> <div class="is-relative"><a href="#/" class="my_plus my_radius"></a><span class="OptionalsSpan">Invoicing Data</span></div> <div class="responsesDivcontent"> <p>Click on PAYONE → Misc</p> <p><a href="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-35.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-35.png" alt="" width="200"></a></p> <p><a href="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-37.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-37.png" alt="" width="300"></a></p> <h5 class="h5Param">Invoicing Data - Discount</h5> <p>Here you can define a SKU that shall be used to identify discount items. This can be left blank unless you are experiencing issues with shopping cart items</p> <h5 class="h5Param">Invoicing Data - Shipping Costs</h5> <p>Here you can define a SKU that shall be used to identify shipping items. This can be left blank unless you are experiencing issues with shopping cart items.</p> <h5 class="h5Param">Invoicing Data - Shipping Costs</h5> <p>Here you can define a SKU that shall be used to identify shipping items. This can be left blank unless you are experiencing issues with shopping cart items.</p> <h5 class="h5Param">Invoicing Data - Voucher</h5> <p>Here you can define a SKU that shall be used to identify vouchers. This can be left blank unless you are experiencing issues with shopping cart items.</p> </div> <div class="is-relative"><a href="#/" class="my_plus my_radius"></a><span class="OptionalsSpan">Export Configuration</span></div> <div class="responsesDivcontent"> <p>Click on PAYONE → Export Configuration</p> <p><a href="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-38.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-38.png" alt="" width="200"></a></p> <p>Clicking Export configuration will download a file.</p> <p>You can now open this file with an XML editor and view or save it. This export is very important for every support request to the PAYONE team in order to avoid possible configuration problems. This file can also be used to determine whether any further extensions have been installed that could cause compatibility problems.</p> </div> <div class="is-relative"><a href="#/" class="my_plus my_radius"></a><span class="OptionalsSpan">PAYONE Logs</span></div> <div class="responsesDivcontent"> <p>Click on PAYONE → Logs</p> <p>In the Logs section you can find all the information about the processed payments and communication with the PAYONE platform.</p> <div class="is-relative"><a href="#/" class="my_plus my_radius"></a><span class="OptionalsSpan">API Logs<span></span></span></div> <div class="responsesDivcontent"> <div>Click on PAYONE → API</div> <div></div> <p>In this overview you will find all requests from the Magento shop to the PAYONE platform as well as the answers of the PAYONE platform to these requests. Only the requests that were transmitted to the PAYONE platform via Client API are not listed in this overview. This applies to credit card information that is transferred directly from the buyer's browser to the PAYONE platform using Ajax technology so that your shop does not come into contact with sensitive credit card information. By clicking on View, you can display an API request in detail.</p> <p><a href="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-39.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-39.png" alt="" width="300"></a></p> <p>In the left column you can see the request that the Magento shop has sent to the PAYONE platform. On the right you will find the answer. A detailed explanation of the respective parameters can be found in the technical documentation of the PAYONE platform in the PAYONE Merchant Interface (PMI) under Downloads → Documentation.<br><br></p> </div> </div> <div class="is-relative"><a href="#/" class="my_plus my_radius"></a><span class="OptionalsSpan">Transaktionsstatus Logs</span></div> <div class="responsesDivcontent"> <p>Click on PAYONE → Transactionsstatus</p> <p>The Transactions submenu item displays Magento received transaction status notifications for each order and transaction. These notifications are sent from the PAYONE platform to your shop. If there are any errors, you can find out here whether the transaction status was received correctly and what the current status is for a transaction. By clicking on View, you can display details on a transaction status.</p> <p><a href="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-40.png" target="_blank" rel="noopener"><img src="https://docs.payone.com/bl-content/uploads/pages/45112abd826dc8011bfb22b25862bd34/Magento2-40.png" alt="" width="300"></a></p> <p>On the details page, you will see all the transaction status information transmitted through the PAYONE platform to your shop. Thus, you can always track which data your Magento shop has received and processed.</p> <p>A detailed explanation of the respective parameters can be found in the technical documentation of the PAYONE platform in the PAYONE Merchant Interface (PMI) under Downloads → Documentation.</p> </div> </div> </div> </div> </section> <!-- Javascript --> <script src="https://docs.payone.com/bl-kernel/js/jquery.min.js?version=3.15.0"></script> <script src="https://docs.payone.com/bl-themes/payone-docs/js/highlight.min.js?version=3.15.0"></script> <script src="https://docs.payone.com/bl-themes/payone-docs/js/jquery-resizable.js?version=3.15.0"></script> <script src="https://docs.payone.com/bl-themes/payone-docs/js/payone.misc.js?version=3.15.0"></script> <script src="https://docs.payone.com/bl-themes/payone-docs/php/api/jquery.json-editor.min.js?version=3.15.0"></script> <script src="https://docs.payone.com/bl-themes/payone-docs/php/api/stickyNavigator.js?version=3.15.0"></script> <script src="https://docs.payone.com/bl-themes/payone-docs/php/api/autosize.js?version=3.15.0"></script> <script> hljs.initHighlighting(); </script> <script> autosize(document.querySelectorAll('.codetext')); </script> <script> $(function() { /***************************************** PHP generated Sidebar Add Active Navigation Class Based on URL *****************************************/ const browserPath = (location.pathname).slice(1); $('ul.tree li a').each(function(){ var $this = $(this); // We need to extract path from anchor href, so we can do exact comparision const checkLink = $this.attr('href'); const extractedPathWithDomain = checkLink.replace(/http(s)?(:)?(\/\/)?|(\/\/)/g, ''); const pathParts = extractedPathWithDomain.split('/'); pathParts.shift(); const extractedPath = pathParts.join('/'); if(browserPath === extractedPath) { $this.parent().addClass('is-active'); $this.parent().children('ul').show() } // for localhost only // or (window.location.hostname === "localhost" && window.location.pathname==="/bludit/") if (window.location.pathname==="/bludit-commercetools/") { $this.parent().removeClass('is-active'); } }); /************************ Sidebar SVG icon ************************/ jQuery('.svgCl').each(function(){ jQuery(this).css({'height': $(this).closest('ul').height($(this).height() + 5) + 'px'}); jQuery(this).css({'display': 'inline-block'}); }); /************************ Sidebar Nav items toggle open/close ************************/ $( 'ul.tree li' ).each( function() { if($(this).children('ul').length > 0) { $(this).addClass('parentLi'); $('li.parentLi > a').attr('href'); } if ($(this).find('ul > li').hasClass('is-active')) { $(this).addClass('activated'); $(this).children('ul').show(); // ul > display:none is hardcoded in sidebar.php } }); $( 'ul.tree li > ul > li' ).each( function() { $(this).addClass('parentLi'); if ($(this).hasClass('is-active')) { $(this).addClass('activated'); } }); }); // doc ready </script> <script> /************************ Copy to clipboard ************************/ function copyToClipboard(text) { var aux = document.createElement("input"); aux.setAttribute("value", text); document.body.appendChild(aux); aux.select(); document.execCommand("copy"); document.body.removeChild(aux); } function copyToClipboardAsFormatted(text) { navigator.clipboard.writeText(text); } function stripHtml(inputHtml) { const brToNewline = inputHtml.replace(/<br\s*[\/]?>/gi, "\n"); const content = brToNewline.replace(/<\/?[^>]+(>|$)/g, ""); return content; } $(function() { $( ".payone-copy-text" ).on( "click", function() { const currentCopyBtn = $(this); let parentNode = currentCopyBtn.closest('div.divcopybtn'); let payloadbox; if (parentNode.length > 0) { payloadbox = parentNode.next('div.payloadbox'); } else { parentNode = currentCopyBtn.closest('div.samplebox'); parentNode = parentNode.children('table'); parentNode = parentNode.children('tbody'); parentNode = parentNode.children('tr'); payloadbox = parentNode.children('td'); } if (payloadbox.length == 0) { return; } const preNode = payloadbox.children('pre'); const htmlContent = preNode.html(); const content = stripHtml(htmlContent); copyToClipboardAsFormatted(content); }); }); $(function() { $("h2").click(function() { var id = $(this).attr("id"); var permalink = "https://docs.payone.com/integration/plugins/integration-guide-magento-2"; var link = permalink+"#"+id; copyToClipboard(link); }); }); // doc ready </script> <script> /************************ Sticky navbar ************************/ // Declare the function first var myFunction; // When the user scrolls the page, assign myFunction window.onscroll = function() { if (typeof myFunction === "function") { myFunction(); } }; // Get the navbar var navbar = document.getElementById("subnavbar"); // Check if the navbar exists if (navbar) { // Get the offset position of the navbar var sticky = navbar.offsetTop; // Define the function myFunction = function() { if (window.scrollY >= sticky) { navbar.classList.add("sticky"); } else { navbar.classList.remove("sticky"); } }; } </script> <script src="https://docs.payone.com/bl-themes/payone-docs/php/api/api-template.js?version=3.15.0"></script> <!-- Load Plugins: Site Body End --> </div> </div> <div class="site_footer" id="footcontainer"> <footer class="footer site-footer"> <!-- Footer --> <div class="container"> <!-- Column 1 Links --> <div class="footer-column"> <h3 class="h3Footer">PAYONE</h3> <ul> <li><a href="https://www.payone.com/DE-de/agb">Terms and Conditions</a></li> <li><a href="https://www.payone.com/DE-de/impressum">Legal Notice</a></li> <li><a href="/information/privacy-policy">Privacy Policy</a></li> <li><a href="https://www.payone.com/DE-de/ueber-uns/presse">Press</a></li> </ul> </div> <!-- Column 2 Links --> <div class="footer-column"> <h3 class="h3Footer">Service</h3> <ul> <li><a href="https://www.payone.com/DE-de/service/kundenportale">Customer Portals</a></li> <li><a href="https://www.payone.com/DE-de/ueber-uns/partner">Partner</a></li> <li><a href="https://github.com/PAYONE-GmbH">Github</a></li> <li><a href="https://www.payone.com/DE-de/service/downloads">Downloads</a></li> <li><a href="https://www.payone.com/DE-de/service/kontakt">Contact</a></li> <li><a href="https://www.payone.com/DE-de/service/feedback-beschwerde">Feedback</a></li> </ul> </div> <!-- Column 3 Links --> <div class="footer-column"> </div> <!-- Column 4 Social and Logo --> <div class="footer-column-social"> <!-- Social Links --> <div class="social-links" style="width: 100%;justify-content: space-evenly;"> <p> <a href="https://www.instagram.com/payone_gmbh/" style="padding: 5px;"> <i class="payone-icon-medium payone-black-instagram"></i></a> <a href="https://www.linkedin.com/company/payone_gmbh" style="padding: 5px;"> <i class="payone-icon-medium payone-black-linkedin"></i></a> <a href="https://www.facebook.com/PAYONEGmbH/"><i class="payone-icon-medium payone-black-facebook"></i></a> <a href="https://github.com/PAYONE-GmbH/" style="padding: 5px;"> <i class="payone-icon-medium payone-black-github"></i></a> <a href="https://www.youtube.com/channel/UCM7Eky84PKzkyTILI6xga-Q" style="padding: 5px;"> <i class="payone-icon-medium payone-black-youtube"></i></a> </p> </div> </div> <div class="footer-column-copyright"> <!--<div class="footer-powered-copyright"> <p>Powered by <a href="https://www.bludit.com/" target="_blank" rel="noopener noreferrer">Bludit</a></p> <p>&copy; MyCompany 2023</p> </div>--> <div class="footer-powered-copyright"> <p ><span style="font-size:13px;">&copy; PAYONE GmbH, Powered by <a target="_blank" class="text-white" href="https://www.bludit.com">Bludit</a></span></p> </div> </div> <div class="footer-column-worldline"> <!-- Logo and Text --> <div class="logo-text"> <img src="//media3.payone.com/f/64176/4200x387/933f1413c4/payone_worldline_endorsement_dunkelgrau.png" alt="" style="max-width:200px;"> </div> </div> </div> </footer> </div> <button id="backToTopBtn" title="Go to page start"></button> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10