Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.


UI Steps


UI Step

Requirements

An active PAYONE - Account is required. If you do not have one yet, please contact us.


UI Step

Plugin Installation

You have 2 ways to install our plugin:

UI Expand
titleInstallation via Composer
Go to the root directory of your Magento 2 installation and execute the following commands.


Code Block
composer require payone-gmbh/magento-2
php bin/magento setup:upgrade
php bin/magento setup:di:compile
php bin/magento cache:clean



UI Expand
titleInstallation via Github

You are invited to download or contribute to our plugin on github!

Section


Column
width33%



Column
width33%

UI Button
colorgreen
newWindowtrue
sizelarge
displayblock
icondownload
titleDownload from Github
urlhttps://github.com/PAYONE-GmbH/magento-2/releases


Column
width33%






UI Step

PAYONE - Portal configuration

To send the transaction status to the correct address, the log in to the PAYONE Merchant Interface (PMI).


Under Configuration → Payment Portals → YOUR_PORTAL → Advanced → TransactionStatus URL

UI Text Box
typeinfo
<SHOPURL>/index.php/payone/transactionstatus

UI Text Box
typenote

Please leave the hash check on md5 to ensure correct communication between PAYONE and the store.

Additional Response-data

Under General, set the Additional Response data for both Live and Test modes to "on".


UI Step

Magento 2 - Admin configuration

  • Click on PAYONE → General

  • Please enter your access data from the PMI here:

UI Text Box
typenote

We strongly recommend to use a maximum of 5 characters as prefix. If no reference number prefix is set, only the Magento order number will be transmitted.

  • Specify whether after a successful payment by "Authorization" automatically send an email with the invoice to the customer:


UI Step

Payment methods setup

  • Click on PAYONE → Payment


  • Enable/disable the desired payment types in the "Enabled" field.

UI Text Box
typewarning

Due to limitations introduced in Magento 2.3.1, all payment methods are active by default after the initial installation. Please make sure that you deactivate all payment methods you don't need before launch!

Special adjustments

Some payment methods require special adjustments. The next points are only relevant to you if you use the specific payment method:


UI Expand
titlecreditcard

Under CreditCard-Type, select which credit cards you want to offer.

Determines whether the credit card verification number is queried. This is only possible if the acquirer allows it.

UI Text Box
typeinfo

From a purely technical point of view, querying the CVC is optional. However, most end customers are used to the query.



UI Expand
titledirect debit


Field

Description

Request BICToggles whether the BIC is queried in the checkout. Use this configuration for better compatibility with bank accounts from outside DACH

Validate Bank Code

Turns on a bank account check using "bankaccountcheck" prompt.

UI Text Box
typewarning

This setting is part of our optional Risk Management Module


List of supported SEPA countries

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.

Mandates enabled

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.

Mandates download enabledSelect 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.



UI Expand
titlePayPal

With PayPal Express Enabled you decide if the PayPal Express button should be displayed in the shopping cart.


UI Expand
titleAmazon Pay

Integration Settings in Seller Central

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.

Also please make sure to store all your shop URLs as allowed Javascript Origin in Seller Central.

  1. From the Seller Central home page, select “Integration - Integration Central” from the navigation bar on top-left side
  2. From Integration Central page, scroll down to the “Manage client ID/store ID(s)” section, and click “View client ID/store ID(s)”
  3. 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 informatio
  4. If you click on the “Edit” button, you can edit all the details of the client configuration
  5. 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

Retrieve Configuration in Magento Backend

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.Aktivieren Sie die Zahlungsmethode

Please note that you can only make live payments after the payment method is allowed for live payments in Seller Central

FieldDescriptionExample
Amazon Client IDDisplays the current Client ID
Amazon Seller IDDisplays the current Seller ID
Get configuration

click this button to retrieve the current configuration from PAYONE.

UI Text Box
typewarning

This payment method won't work before the configuration has been saved!



Amazon Button Type
  • Amazon Pay (normal) 
  • Pay (smaller)
  • Amazon Pay (smallest)

Amazon Button Color
  • Gold
  • Light grey
  • Dark grey

 

Amazon Mode
  • Automatic (uses the client's default language)
  • English
  • German
  • French
  • Italian
  • Spanish

Amazon Mode
  • Always Synchronous
  • Asynchronous on failure
async on failure can have better conversion rate, but can complicate your workflow.


UI Text Box
typenote

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:

Code Block
languagebash
php bin/magento module:disable Amazon_Payment




UI Expand
titleKlarna


UI Text Box
typeinfo

The Klarna payment methods:

  • Klarna Pay Later
  • Klarna Pay Now
  • Klarna Slice it

are grouped in a Klarna Base Payment method.


UI Expand
titleRatepay

Ratepay requires the Setting of one or more shop IDs. You'll receive these from Ratepay. Once added, click "Refresh Ratepay Shop-IDs". Valid Shop IDs will show up with their configuration set by Ratepay.


UI Expand
titleApple Pay

FieldDescription
EnabledYes/ No
TitleName of the payment method, which appears in the checkout
Apple Pay Merchant Id

This value can be taken from the Apple Developer Portal as "Identifier" of your Merchant ID:

Certificate filePlease upload the merchant_id.perm file. You can find the file in the Apple Developer Portal.
Private key filePlease upload the merchant_id.key file. You can find the file in the Apple Developer Portal.
Private key password

Here you can set the password for using the private key

Allowed card typesSelect 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.


UI Text Box
typetip

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

Additionally, Apple requires validation of the store domain for Apple Pay. To do this, follow the instructions in the Apple Developer Portal:




UI Step

Editing the orders

  • Click on PAYONE → Orders

Overview

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.

Capture

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.

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.

Partial captures are also possible by simply adjusting the billable quantity of the items.

Refund

Already captured funds can be returned by creating a credit memo for an existing invoice.

UI Text Box
typeinfo

Please ensure to create a credit memo within an invoice object, not in the order!

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. 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.


UI Step

Extended configurations

Here you will find separate setting options that allow you to customize our plugin more precisely to your needs.

UI Expand
titleSend invoicing information

Click on PAYONE → General → Send invoicing information activate the transmission of item data to create an invoice on the PAYONE platform.

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.


UI Expand
titleStatus Mapping

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.


UI Expand
titleCustom styling hosted-Iframe
  • Click on PAYONE → General → Payment Creditcard → Input configuration → Custom styling hosted-Iframe

Field

Description

Type

  • Numeric - Only numbers are allowed and for mobile devices the numeric keyboard is used input type="tel"
  • Password - input type="password"
  • Text - input type="text"

Digit-count

Length of the field in characters (HTML attribute size)

Max-digits

Maximum length of input (HTML attribute maxlength)

iframe

  • Standard - Uses width and height from standard style
  • Custom - Uses width and height from the following fields

Width

CSS - Specify width

Height

CSS - Indication of height

Style

  • Standard - Uses CSS specification from Standard
  • Custom - Uses CSS specification from the following field

CSS

Specification of CSS properties for field
Deactivated with previous selection of Standard

Standard-style

  • Input - CSS specification for all input fields (HTML input)
  • Selection - CSS specification for all selection fields (HTML select )

iframe

  • Width - CSS spezification
  • Height - CSS spezification

Error-output


Active

Yes/No

Language

Select the language in which the error message is to be output.

Preview

At this point you can see how the appearance looks according to the previous setting of the credit card payment method in Checkout.


UI Expand
titleSimple Protect

Simple Protect

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:

  • your magento 2 shop database
  • the current checkout session
  • 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 extensions like the PAYONE Protect Functions
  • and many more.

Here is an example of some complex decisions that can be performed using our simple protect framework:

UI Text Box

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:

Githubdownload
Repohttps://github.com/PAYONE-GmbH/magento-2/tree/simple-protect
TooltipSimple Protect Framework

After that, please follow the intructions for installing the Simple Protect Template here:

Githubdownload
Repohttps://github.com/PAYONE-GmbH/magento-2-simple-protect
TooltipSimple Protect Template


UI Text Box
typewarning

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.

Configuration

  • Click on PAYONE → Protect


UI Text Box
typewarning

This option only affects requests regarding the PAYONE - API like adresscheck or consumerscore. Any other code will be executed as developed.

Entry points / Points of action

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.


Code Block
languagephp
titleExample of full implementation
linenumberstrue
collapsetrue
<?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 <http://www.gnu.org/licenses/>.
 *
 * PHP version 5
 *
 * @category  Payone
 * @package   Payone_Magento2_SimpleProtect
 * @author    FATCHIP GmbH <support@fatchip.de>
 * @copyright 2003 - 2019 Payone GmbH
 * @license   <http://www.gnu.org/licenses/> 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->databaseResource = $resource;
        $this->checkoutSession = $checkoutSession;
        $this->scopeConfig = $scopeConfig;
    }

    /**
     * Returns configured operation mode used for the addresscheck and consumerscore
     *
     * @return string
     */
    public function getOperationMode()
    {
        return $this->scopeConfig->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->databaseResource->getConnection();
        $oSelect = $db->select()
            ->from($this->databaseResource->getTableName('sales_order'), ['COUNT(entity_id)'])
            ->where("customer_id = :customerId");
        $iCount = $db->fetchOne($oSelect, ['customerId' => $oCustomer->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->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->getFirstname();
        $sAddress .= $oAddress->getLastname();
        $sAddress .= $oAddress->getCity();
        $sAddress .= $oAddress->getPostcode();
        $sAddress .= $oAddress->getCountry();
        $sAddress .= $oAddress->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->getAddressHash($oBilling) != $this->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->getCode(), $this->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->getBillingAddress();
        #$oAddress = $oQuote->getShippingAddress();

        #$sAddresscheckType = AddressCheckType::NONE;
        $sAddresscheckType = AddressCheckType::BASIC;
        #$sAddresscheckType = AddressCheckType::PERSON;
        #$sAddresscheckType = AddressCheckType::BONIVERSUM_BASIC;
        #$sAddresscheckType = AddressCheckType::BONIVERSUM_PERSON;

        return $this->protectFunnel->executeAddresscheck($oAddress, $this->getOperationMode(), $sAddresscheckType, $this->getModuleVersion());
    }

    /**
     * Examples of all the options for consumerscore usage
     *
     * @param  Quote $oQuote
     * @return ConsumerscoreResponse|bool
     */
    protected function executeConsumerscore(Quote $oQuote)
    {
        $oAddress = $oQuote->getBillingAddress();
        #$oAddress = $oQuote->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->protectFunnel->executeConsumerscore($oAddress, $this->getOperationMode(), $sConsumerscoreType, $sAddresscheckType, $this->getModuleVersion());
    }

    /**
     * Check rules for recurring registered customers
     *
     * @param  Quote $oQuote
     * @return bool
     */
    protected function isOnlySafePaymentApplicableForRecurringCustomer(Quote $oQuote)
    {
        if ($oQuote->getBaseGrandTotal() > 400 || $this->isCustomerWhitelisted($oQuote->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 && $this->isBillingAndShippingAddressTheSame($oQuote->getBillingAddress(), $oQuote->getShippingAddress()) === false) {
            return true;
        }

        if ($oQuote->getBaseGrandTotal() > 120) {
            return true;
        }

        if ($blIsPrePaymentSelection === false && !in_array($oQuote->getPayment()->getMethodInstance()->getCode(), $this->safePaymentMethods)) {
            $oResponse = $this->executeConsumerscore($oQuote);
            if ($oResponse instanceof ConsumerscoreResponse && ($oResponse->getStatus() != 'VALID' || $oResponse->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->checkoutSession->getPayoneSimpleProtectOnlySafePaymentsAllowed() === true) {
            return true;
        }

        if ($oQuote->getCustomerId() === null) { // if guest checkout
            return true;
        }

        if ($this->isRecurringCustomer($oQuote->getCustomer()) === true) {
            return $this->isOnlySafePaymentApplicableForRecurringCustomer($oQuote);
        }
        return $this->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->isOnlySafePaymentApplicable($oQuote, true) === true) {
            return $this->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->isOnlySafePaymentApplicable($oQuote, false) === true) {
            $sMethodCode = $oQuote->getPayment()->getMethodInstance()->getCode();
            if (!in_array($sMethodCode, $this->safePaymentMethods)) {
                $this->checkoutSession->setPayoneSimpleProtectOnlySafePaymentsAllowed(true);
                throw new FilterMethodListException(__('Please select another payment method.'), $this->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;
    }
}


UI Text Box
typetip

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.

handlePrePaymentSelection

Implementing this method gives you 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

Code Block
languagephp
linenumberstrue
@param  Quote $oQuote
@param  MethodInterface[] $aPaymentMethods
@return MethodInterface[]

public function handlePrePaymentSelection(Quote $oQuote, $aPaymentMethods)
{
    if ($this->isOnlySafePaymentApplicable($oQuote, true) === true) {
        return $this->getSafePaymentMethods($aPaymentMethods);
    }
    return $aPaymentMethods;
}

handlePostPaymentSelection

Implementing this method gives you 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

Code Block
languagephp
linenumberstrue
@param  Quote $oQuote
@return void
@throws LocalizedException
@throws FilterMethodListException

public function handlePostPaymentSelection(Quote $oQuote)
{
    if ($this->isOnlySafePaymentApplicable($oQuote, false) === true) {
        $sMethodCode = $oQuote->getPayment()->getMethodInstance()->getCode();
        if (!in_array($sMethodCode, $this->safePaymentMethods)) {
            $this->checkoutSession->setPayoneSimpleProtectOnlySafePaymentsAllowed(true);
            throw new FilterMethodListException(__('Please select another payment method.'), $this->safePaymentMethods);
        }
    }
}

handleEnterOrChangeBillingAddress

Implementing this method gives you the following possibilities:

  1. Returning true will just continue the process without changing anything
  2. Returning a (changed) address object instance of AddressInterface will show an address correction prompt to the customer
  3. Throwing a LocalizedException will show the given exception message to the customer

Code Block
languagephp
linenumberstrue
@param AddressInterface $oAddressData
@param bool $blIsVirtual
@param double $dTotal
@return AddressInterface|bool
@throws LocalizedException

public function handleEnterOrChangeBillingAddress(AddressInterface $oAddressData, $blIsVirtual, $dTotal)
    {
        $response = $this->protectFunnel->executeAddresscheck($oAddressData, $this->getOperationMode(), AddressCheckType::BASIC);
        if ($oAddressData->getCity() == "FalscheStadt") {
            $oAddressData->setCity($response->getCity());
            return $oAddressData;
        }
        return true;
    }

handleEnterOrChangeShippingAddress

Implementing this method gives you the following possibilities:

  1. Returning true will just continue the process without changing anything
  2. Returning a (changed) address object instance of AddressInterface will show an address correction prompt to the customer
  3. Throwing a LocalizedException will show the given exception message to the customer

Code Block
languagephp
linenumberstrue
@param AddressInterface $oAddressData
@param bool $blIsVirtual
@param double $dTotal
@return AddressInterface|bool
@throws LocalizedException

public function handleEnterOrChangeShippingAddress(AddressInterface $oAddressData, $blIsVirtual, $dTotal)
    {
        $response = $this->protectFunnel->executeAddresscheck($oAddressData, $this->getOperationMode(), AddressCheckType::BASIC);
        if ($oAddressData->getCity() == "FalscheStadt") {
            $oAddressData->setCity($response->getCity());
            return $oAddressData;
        }
        return true;
    }


UI Expand
titleProtect (Legacy)
  • Click on PAYONE → Protect

Address Validation

Field

Description

Enabled

Activating the address check

Mode

Choice between Test / Live. This determines whether the PAYONE platform is addressed in Test or Live mode.

Check Billing Address

Configuration with which check the invoice address is to be checked.

Check Shipping Address

Configuration with which check the delivery address is to be checked.

Check Billing Address for virtual orders

Select yes/no whether the billing address should be checked for virtual orders.

Confirm address correction

Selection yes/no whether an address correction must be confirmed by the buyer.
Person Status Mapping

Assignment of individual person status returns to a traffic light value.

UI Text Box

Works only with the address check "Person", which returns personal information


Message to display for invalid data

Error message to be displayed at status "INVALID"

Response ERROR handling

What should be executed after an error in the extension or the PAYONE platform?

Minimum Order Total

Minimum amount to execute an address check.

Maximum Order Total

Maximum amount to execute an address check.

lifetime

Number of days in which no new address validation is performed.

Credit Assessment

Field

Description

Enabled

Activation of the credit rating check

Mode

Choice between Test / Live. This determines whether the PAYONE platform is addressed in Test or Live mode.

Integration Event

Selection of "Before/After" payment selection.

Creditrating-Checktype

  • Infoscore (hard criteria)
  • Infoscore (all criteria)
  • Infoscore (all criteria with boniscore)
  • Boniversum VERITA Score

Default values for unknown scores

Selection of a traffic light color for the return status "Unknown"

only affects Boniversum verita score!


Response ERROR handlingWhat to do if an error occurs in the integration or on the PAYONE platform?

Insufficient score error message

Message displayed to the customer when an insufficient point value is reached.

Minimum Order Total

Minimum amount to carry out a credit check.

Maximum Order Total

Maximum amount to carry out a credit check.

lifetime

Number of days in which no new credit check is performed.


UI Text Box
typeinfo

Service provider for address- and credit checks

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.




UI Expand
titleList of PAYONE IPs
  • Click on PAYONE → Misc

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.


UI Expand
titleTransactions-Status Forwarding
  • Click on PAYONE → Misc

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.


UI Expand
titleInvoicing Data
  • Click on PAYONE → Misc


Invoicing Data - Discount

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

Invoicing Data - Shipping Costs

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.

Invoicing Data - Voucher

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.


UI Expand
titleExport Configuration
  • Click on PAYONE → Export Configuration

Clicking Export configuration will download a file.

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.


UI Expand
titlePAYONE Logs
  • Click on PAYONE → Logs


In the Logs section you can find all the information about the processed payments and communication with the PAYONE platform.

UI Expand
titleAPI Logs
  • Click on PAYONE → API


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.

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.


UI Expand
titleTransactionsstatus Logs
  • Click on PAYONE → Transactionsstatus

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.

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.

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.





Quick Facts

Integrationquickfacts
TXURLindex.php/payone/transactionstatus
Repohttps://github.com/PAYONE-GmbH/magento-2/releases
Version3.35.0
SHOPID7
Systemmagento2

Table of Contents

Table of Contents
outlinetrue
indent2em