├── .gitattributes
├── .gitignore
├── view
├── frontend
│ ├── web
│ │ ├── images
│ │ │ ├── cc.png
│ │ │ ├── eps.png
│ │ │ ├── p24.png
│ │ │ ├── afterpay.png
│ │ │ ├── invoice.png
│ │ │ ├── paypal.png
│ │ │ ├── sepadd.png
│ │ │ ├── invoiceb2b.png
│ │ │ ├── salamantex.png
│ │ │ ├── installment.png
│ │ │ ├── paysafecard.png
│ │ │ └── sofortbanking.png
│ │ ├── js
│ │ │ ├── action
│ │ │ │ └── clear-cart.js
│ │ │ ├── model
│ │ │ │ └── min-age-validator.js
│ │ │ └── view
│ │ │ │ └── payment
│ │ │ │ ├── method-renderer
│ │ │ │ ├── standard.js
│ │ │ │ └── invoiceinstallment.js
│ │ │ │ └── method-renderer.js
│ │ └── template
│ │ │ └── payment
│ │ │ └── method-standard.html
│ ├── layout
│ │ ├── checkout_onepage_success.xml
│ │ ├── qentacheckoutpage_checkout_back.xml
│ │ └── qentacheckoutpage_checkout_failed.xml
│ └── templates
│ │ └── back.phtml
└── adminhtml
│ ├── email
│ └── contact_support_email.html
│ ├── web
│ ├── images
│ │ └── qenta-logo.svg
│ ├── js
│ │ ├── fundtransfer-loader.js
│ │ └── fundtransfer.js
│ └── styles.css
│ ├── templates
│ └── email
│ │ ├── support_modules.phtml
│ │ └── support_paymentmethods.phtml
│ └── layout
│ ├── adminhtml_system_config_edit.xml
│ ├── qentacheckoutpage_support_contact.xml
│ └── qentacheckoutpage_fundtransfer_transfer.xml
├── Controller
├── CsrfAwareActionWithoutCsrfSupport.php
├── CsrfAwareActionWithCsrfSupport.php
├── CsrfAwareAction.php
├── Adminhtml
│ ├── Support
│ │ ├── Index.php
│ │ ├── Contact.php
│ │ └── Sendrequest.php
│ ├── Fundtransfer
│ │ ├── Index.php
│ │ ├── Transfer.php
│ │ └── Submit.php
│ ├── Transactions
│ │ └── RefundReversal.php
│ └── Test
│ │ └── Config.php
└── Checkout
│ ├── Failed.php
│ └── Confirm.php
├── .env
├── .github
└── ISSUE_TEMPLATE.md
├── composer.json
├── Model
├── App
│ └── Config
│ │ ├── ReaderPool.php
│ │ └── ScopePool.php
├── Payment
│ ├── P24.php
│ ├── Ccard.php
│ ├── Paysafecard.php
│ ├── Sofortbanking.php
│ ├── Salamantex.php
│ ├── Afterpay.php
│ ├── Sepa.php
│ ├── Paypal.php
│ ├── Eps.php
│ └── Invoice.php
├── Config
│ ├── Source
│ │ ├── InvoiceProviders.php
│ │ ├── Txident.php
│ │ ├── OrderCreation.php
│ │ ├── Configurations.php
│ │ ├── DisplayModes.php
│ │ └── Layouts.php
│ └── Backend
│ │ ├── Secret.php
│ │ └── CustomerId.php
├── Plugin
│ └── FixSession.php
├── FundTransfer.php
└── Test.php
├── .docker
└── magento2
│ ├── ngrok.sh
│ ├── Dockerfile
│ └── init.sh
├── registration.php
├── etc
├── module.xml
├── email_templates.xml
├── frontend
│ ├── routes.xml
│ ├── sections.xml
│ └── di.xml
└── adminhtml
│ ├── routes.xml
│ └── di.xml
├── docker-compose.yml
├── Block
├── Checkout
│ └── Onepage
│ │ └── Success
│ │ └── Messages.php
└── Adminhtml
│ ├── Support
│ ├── Contact.php
│ └── Edit
│ │ └── Form.php
│ ├── Fundtransfer
│ └── Transfer.php
│ ├── Buttons.php
│ ├── Transactions
│ └── Detail
│ │ └── Plugin.php
│ └── Tabs.php_x
├── README.md
└── i18n
├── en_US.csv
└── de_AT.csv
/.gitattributes:
--------------------------------------------------------------------------------
1 | *.sh text eol=lf
2 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .idea/
2 | vendor
3 | .env
4 |
--------------------------------------------------------------------------------
/view/frontend/web/images/cc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hobex/magento2-qcp/HEAD/view/frontend/web/images/cc.png
--------------------------------------------------------------------------------
/view/frontend/web/images/eps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hobex/magento2-qcp/HEAD/view/frontend/web/images/eps.png
--------------------------------------------------------------------------------
/view/frontend/web/images/p24.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hobex/magento2-qcp/HEAD/view/frontend/web/images/p24.png
--------------------------------------------------------------------------------
/view/frontend/web/images/afterpay.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hobex/magento2-qcp/HEAD/view/frontend/web/images/afterpay.png
--------------------------------------------------------------------------------
/view/frontend/web/images/invoice.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hobex/magento2-qcp/HEAD/view/frontend/web/images/invoice.png
--------------------------------------------------------------------------------
/view/frontend/web/images/paypal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hobex/magento2-qcp/HEAD/view/frontend/web/images/paypal.png
--------------------------------------------------------------------------------
/view/frontend/web/images/sepadd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hobex/magento2-qcp/HEAD/view/frontend/web/images/sepadd.png
--------------------------------------------------------------------------------
/view/frontend/web/images/invoiceb2b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hobex/magento2-qcp/HEAD/view/frontend/web/images/invoiceb2b.png
--------------------------------------------------------------------------------
/view/frontend/web/images/salamantex.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hobex/magento2-qcp/HEAD/view/frontend/web/images/salamantex.png
--------------------------------------------------------------------------------
/view/frontend/web/images/installment.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hobex/magento2-qcp/HEAD/view/frontend/web/images/installment.png
--------------------------------------------------------------------------------
/view/frontend/web/images/paysafecard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hobex/magento2-qcp/HEAD/view/frontend/web/images/paysafecard.png
--------------------------------------------------------------------------------
/view/frontend/web/images/sofortbanking.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hobex/magento2-qcp/HEAD/view/frontend/web/images/sofortbanking.png
--------------------------------------------------------------------------------
/Controller/CsrfAwareActionWithoutCsrfSupport.php:
--------------------------------------------------------------------------------
1 | =')) {
13 | // @codingStandardsIgnoreLine
14 | require_once __DIR__ . '/CsrfAwareActionWithCsrfSupport.php';
15 | } else {
16 | // @codingStandardsIgnoreLine
17 | require_once __DIR__ . '/CsrfAwareActionWithoutCsrfSupport.php';
18 | }
19 |
--------------------------------------------------------------------------------
/Model/App/Config/ReaderPool.php:
--------------------------------------------------------------------------------
1 | _readers = $readers;
24 | }
25 |
26 | /**
27 | * Retrieve reader by scope type
28 | *
29 | * @param string $scopeType
30 | * @return mixed
31 | */
32 | public function getReader($scopeType)
33 | {
34 | return $this->_readers[$scopeType];
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/.docker/magento2/ngrok.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | set -e
4 |
5 | which ngrok >/dev/null
6 | if [[ $? == 0 ]]; then
7 | NGROK_BINARY="$(which ngrok)"
8 | else
9 | >&2 echo "Installing NGROK"
10 | cd ~/
11 | npm install ngrok
12 | NGROK_BINARY="~/node_modules/ngrok/bin/ngrok"
13 | fi
14 |
15 | function get_ngrok_url() {
16 | curl --fail -s localhost:4040/api/tunnels | jq -r .tunnels\[0\].public_url | sed 's/^http:/https:/'
17 | }
18 |
19 | function wait_for_ngrok() {
20 | while [[ -z ${RESPONSE} || ${RESPONSE} == 'null' ]]; do
21 | RESPONSE=$(get_ngrok_url)
22 | sleep 1;
23 | done
24 | }
25 |
26 | [[ ${1} ]] && NGROK_TOKEN=${1}
27 |
28 | if [[ -z ${NGROK_TOKEN} ]]; then
29 | echo 'NGROK token missing. Set NGROK_TOKEN env' >&2
30 | exit 1
31 | fi
32 |
33 | ${NGROK_BINARY} authtoken ${NGROK_TOKEN} >&/dev/null
34 | ${NGROK_BINARY} http https://localhost:443 >&/dev/null &
35 | wait_for_ngrok
36 | NGROK_URL=$(get_ngrok_url)
37 | NGROK_HOST=$(sed 's,^https\?://,,' <<< ${NGROK_URL})
38 | echo ${NGROK_HOST}
39 |
--------------------------------------------------------------------------------
/view/adminhtml/email/contact_support_email.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{var data.description}}
4 |
5 | {{trans "Product: %product" product=$versioninfo.product}}
6 | {{trans "Version: %product" product=$versioninfo.productVersion}}
7 | {{trans "Plugin name: %product" product=$versioninfo.pluginName}}
8 | {{trans "Plugin version: %product" product=$versioninfo.pluginVersion}}
9 |
10 | {{trans "Configuration:"}}
11 |
12 | {{var configstr}}
13 |
14 | {{trans "Active payment methods:"}}
15 |
16 | {{block class='Magento\\Framework\\View\\Element\\Template' area='adminhtml' template='Qenta_CheckoutPage::email/support_paymentmethods.phtml' methods=$mine}}
17 |
18 | {{trans "Foreign payment methods:"}}
19 |
20 | {{block class='Magento\\Framework\\View\\Element\\Template' area='adminhtml' template='Qenta_CheckoutPage::email/support_paymentmethods.phtml' methods=$foreign}}
21 |
22 | {{trans "Installed Modules:"}}
23 |
24 | {{block class='Magento\\Framework\\View\\Element\\Template' area='adminhtml' template='Qenta_CheckoutPage::email/support_modules.phtml' modules=$modules}}
25 |
--------------------------------------------------------------------------------
/view/adminhtml/web/images/qenta-logo.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/view/adminhtml/web/js/fundtransfer-loader.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Shop System Plugins - Terms of Use
3 | *
4 | * The plugins offered are provided free of charge by Qenta Payment CEE GmbH
5 | * (abbreviated to Qenta CEE) and are explicitly not part of the Qenta CEE range of
6 | * products and services.
7 | *
8 | * They have been tested and approved for full functionality in the standard configuration
9 | * (status on delivery) of the corresponding shop system. They are under General Public
10 | * License Version 2 (GPLv2) and can be used, developed and passed on to third parties under
11 | * the same terms.
12 | *
13 | * However, Qenta CEE does not provide any guarantee or accept any liability for any errors
14 | * occurring when used in an enhanced, customized shop system configuration.
15 | *
16 | * Operation in an enhanced, customized configuration is at your own risk and requires a
17 | * comprehensive test phase by the user of the plugin.
18 | *
19 | * Customers use the plugins at their own risk. Qenta CEE does not guarantee their full
20 | * functionality neither does Qenta CEE assume liability for any disadvantages related to
21 | * the use of the plugins. Additionally, Qenta CEE does not guarantee the full functionality
22 | * for customized shop systems or installed plugins of other vendors of plugins within the same
23 | * shop system.
24 | *
25 | * Customers are responsible for testing the plugin's functionality before starting productive
26 | * operation.
27 | *
28 | * By installing the plugin into the shop system the customer agrees to these terms of use.
29 | * Please do not use the plugin if you do not agree to these terms of use!
30 | */
31 |
32 | require([
33 | "Qenta_CheckoutPage/js/fundtransfer"
34 | ]);
35 |
--------------------------------------------------------------------------------
/view/adminhtml/templates/email/support_modules.phtml:
--------------------------------------------------------------------------------
1 |
33 | getModules() as $_m): ?>
34 |
35 |
--------------------------------------------------------------------------------
/view/adminhtml/web/styles.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Shop System Plugins - Terms of Use
3 | *
4 | * The plugins offered are provided free of charge by Qenta Payment CEE GmbH
5 | * (abbreviated to Qenta CEE) and are explicitly not part of the Qenta CEE range of
6 | * products and services.
7 | *
8 | * They have been tested and approved for full functionality in the standard configuration
9 | * (status on delivery) of the corresponding shop system. They are under General Public
10 | * License Version 2 (GPLv2) and can be used, developed and passed on to third parties under
11 | * the same terms.
12 | *
13 | * However, Qenta CEE does not provide any guarantee or accept any liability for any errors
14 | * occurring when used in an enhanced, customized shop system configuration.
15 | *
16 | * Operation in an enhanced, customized configuration is at your own risk and requires a
17 | * comprehensive test phase by the user of the plugin.
18 | *
19 | * Customers use the plugins at their own risk. Qenta CEE does not guarantee their full
20 | * functionality neither does Qenta CEE assume liability for any disadvantages related to
21 | * the use of the plugins. Additionally, Qenta CEE does not guarantee the full functionality
22 | * for customized shop systems or installed plugins of other vendors of plugins within the same
23 | * shop system.
24 | *
25 | * Customers are responsible for testing the plugin's functionality before starting productive
26 | * operation.
27 | *
28 | * By installing the plugin into the shop system the customer agrees to these terms of use.
29 | * Please do not use the plugin if you do not agree to these terms of use!
30 | */
31 |
32 | .qenta-logo {
33 | background: url(images/qenta-logo.svg) no-repeat 0 0;
34 | display: inline-block;
35 | width: 200px;
36 | height: 60px;
37 | }
38 |
--------------------------------------------------------------------------------
/registration.php:
--------------------------------------------------------------------------------
1 |
2 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/view/frontend/web/js/action/clear-cart.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Shop System Plugins - Terms of Use
3 | *
4 | * The plugins offered are provided free of charge by Qenta Payment CEE GmbH and are explicitly not part
5 | * of the Qenta Payment CEE GmbH range of products and services.
6 | *
7 | * They have been tested and approved for full functionality in the standard configuration
8 | * (status on delivery) of the corresponding shop system. They are under General Public
9 | * License Version 3 (GPLv3) and can be used, developed and passed on to third parties under
10 | * the same terms.
11 | *
12 | * However, Qenta Payment CEE GmbH does not provide any guarantee or accept any liability for any errors
13 | * occurring when used in an enhanced, customized shop system configuration.
14 | *
15 | * Operation in an enhanced, customized configuration is at your own risk and requires a
16 | * comprehensive test phase by the user of the plugin.
17 | *
18 | * Customers use the plugins at their own risk. Qenta Payment CEE GmbH does not guarantee their full
19 | * functionality neither does Qenta Payment CEE GmbH assume liability for any disadvantages related to
20 | * the use of the plugins. Additionally, Qenta Payment CEE GmbH does not guarantee the full functionality
21 | * for customized shop systems or installed plugins of other vendors of plugins within the same
22 | * shop system.
23 | *
24 | * Customers are responsible for testing the plugin's functionality before starting productive
25 | * operation.
26 | *
27 | * By installing the plugin into the shop system the customer agrees to these terms of use.
28 | * Please do not use the plugin if you do not agree to these terms of use!
29 | */
30 |
31 | require([
32 | 'Magento_Customer/js/customer-data'
33 | ], function (customerData) {
34 | var sections = ['cart'];
35 | customerData.invalidate(sections);
36 | customerData.reload(sections, true);
37 | });
38 |
--------------------------------------------------------------------------------
/docker-compose.yml:
--------------------------------------------------------------------------------
1 | services:
2 | magento2_db_qcp:
3 | image: mariadb:10.2
4 | restart: always
5 | environment:
6 | MYSQL_ROOT_PASSWORD: ${MAGENTO2_DB_ROOTPASS:-ABC123}
7 | MYSQL_DATABASE: ${MAGENTO2_DB_NAME:-magento}
8 | MYSQL_USER: ${MAGENTO2_DB_USER:-magento}
9 | MYSQL_PASSWORD: ${MAGENTO2_DB_PASS:-magento}
10 | magento2_elasticsearch_qcp:
11 | image: docker.io/bitnami/elasticsearch:7
12 | logging:
13 | driver: none
14 | magento2_qcp:
15 | container_name: magento2_qcp
16 | build:
17 | context: .docker/magento2/
18 | dockerfile: Dockerfile
19 | depends_on:
20 | - magento2_db_qcp
21 | - magento2_elasticsearch_qcp
22 | ports:
23 | - ${PORT_HTTP:-8005}:80
24 | - ${PORT_SSL:-8445}:443
25 | volumes:
26 | - ./:/tmp/plugin:ro
27 | environment:
28 | MAGENTO2_DB_HOST: ${MAGENTO2_DB_HOST:-magento2_db_qcp}
29 | MAGENTO2_DB_NAME: ${MAGENTO2_DB_NAME:-magento}
30 | MAGENTO2_DB_USER: ${MAGENTO2_DB_USER:-magento}
31 | MAGENTO2_DB_PASS: ${MAGENTO2_DB_PASS:-magento}
32 | MAGENTO2_TABLE_PREFIX: "m2_qcp_"
33 | MAGENTO2_LOCALE: ${MAGENTO2_LOCALE:-en_US}
34 | MAGENTO2_TITLE: ${MAGENTO2_TITLE:-QSHOP}
35 | MAGENTO2_ADMIN_USER: ${MAGENTO2_ADMIN_USER:-admin}
36 | MAGENTO2_ADMIN_PASS: ${MAGENTO2_ADMIN_PASS:-admin123}
37 | MAGENTO2_ADMIN_EMAIL: ${MAGENTO2_ADMIN_EMAIL:-admin@admin.com}
38 | MAGENTO2_BASEURL: ${MAGENTO2_BASEURL}
39 | MAGENTO2_VERSION: ${MAGENTO2_VERSION:-2.4-develop}
40 | PLUGIN_VERSION: ${PLUGIN_VERSION}
41 | PLUGIN_URL: ${PLUGIN_URL:-local}
42 | NGROK_TOKEN: ${NGROK_TOKEN}
43 | DEFAULT_COUNTRY_CODE: ${DEFAULT_COUNTRY_CODE:-AT}
44 | GITHUB_SERVER_URL: ${GITHUB_SERVER_URL}
45 | GITHUB_REPOSITORY: ${GITHUB_REPOSITORY}
46 | GITHUB_WORKSPACE: ${GITHUB_WORKSPACE}
47 | GITHUB_SHA: ${GITHUB_SHA}
48 | GITHUB_REF: ${GITHUB_REF}
49 |
--------------------------------------------------------------------------------
/view/adminhtml/layout/adminhtml_system_config_edit.xml:
--------------------------------------------------------------------------------
1 |
2 |
34 |
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/Controller/Adminhtml/Support/Index.php:
--------------------------------------------------------------------------------
1 | _redirect('adminhtml/system_config/edit/section/qenta_checkoutpage');
41 | }
42 |
43 | }
44 |
--------------------------------------------------------------------------------
/Controller/Adminhtml/Fundtransfer/Index.php:
--------------------------------------------------------------------------------
1 | _redirect('adminhtml/system_config/edit/section/qenta_checkoutpage');
41 | }
42 |
43 | }
44 |
--------------------------------------------------------------------------------
/etc/email_templates.xml:
--------------------------------------------------------------------------------
1 |
2 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/Block/Checkout/Onepage/Success/Messages.php:
--------------------------------------------------------------------------------
1 | setMessages($this->messageManager->getMessages(true));
40 | return parent::_toHtml();
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/etc/frontend/routes.xml:
--------------------------------------------------------------------------------
1 |
2 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/etc/frontend/sections.xml:
--------------------------------------------------------------------------------
1 |
2 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/view/adminhtml/templates/email/support_paymentmethods.phtml:
--------------------------------------------------------------------------------
1 |
33 | getMethods() as $code => $_m): ?>
34 | $val)
40 | printf("%s:%s\n", $key, $val);
41 | print "\n";
42 | ?>
43 |
--------------------------------------------------------------------------------
/Model/Payment/P24.php:
--------------------------------------------------------------------------------
1 |
2 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/Model/Payment/Sofortbanking.php:
--------------------------------------------------------------------------------
1 |
2 |
34 |
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/view/frontend/layout/checkout_onepage_success.xml:
--------------------------------------------------------------------------------
1 |
2 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/Model/Payment/Salamantex.php:
--------------------------------------------------------------------------------
1 |
2 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/Model/Config/Source/InvoiceProviders.php:
--------------------------------------------------------------------------------
1 | _dataHelper = $helper;
45 | }
46 |
47 | public function toOptionArray()
48 | {
49 | $list = array(
50 | array('value' => 'payolution', 'label' => 'payolution'),
51 | array('value' => 'qenta', 'label' => 'Qenta'),
52 | );
53 |
54 | return $list;
55 | }
56 | }
--------------------------------------------------------------------------------
/view/frontend/templates/back.phtml:
--------------------------------------------------------------------------------
1 |
33 |
34 |
50 |
51 |
52 |
= __('Redirect') ?>
53 |
= __('You will now be redirected') ?>
54 |
= __('If you are not redirected, please click') ?>
55 |
56 | hier.
57 |
58 |
59 |
--------------------------------------------------------------------------------
/Model/Config/Source/Txident.php:
--------------------------------------------------------------------------------
1 | _dataHelper = $helper;
45 | }
46 |
47 | public function toOptionArray()
48 | {
49 | $themes = array(
50 | array('value' => 'SINGLE', 'label' => $this->_dataHelper->__('Single')),
51 | array('value' => 'INITIAL', 'label' => $this->_dataHelper->__('Initial')),
52 | );
53 |
54 |
55 | return $themes;
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/Model/Payment/Sepa.php:
--------------------------------------------------------------------------------
1 | setTransactionIdentifier($this->getConfigData('txident'));
55 | }
56 | }
--------------------------------------------------------------------------------
/Model/Payment/Paypal.php:
--------------------------------------------------------------------------------
1 | setTransactionIdentifier($this->getConfigData('txident'));
55 | }
56 | }
--------------------------------------------------------------------------------
/etc/frontend/di.xml:
--------------------------------------------------------------------------------
1 |
2 |
34 |
36 |
37 |
38 |
39 | - Qenta\CheckoutPage\Model\ConfigProvider
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/Model/Config/Source/OrderCreation.php:
--------------------------------------------------------------------------------
1 | _dataHelper = $helper;
45 | }
46 |
47 | public function toOptionArray()
48 | {
49 | $themes = array(
50 | array('value' => 'before', 'label' => $this->_dataHelper->__('Create order before payment')),
51 | array('value' => 'after', 'label' => $this->_dataHelper->__('Create order after payment')),
52 | );
53 |
54 | return $themes;
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/view/adminhtml/layout/qentacheckoutpage_fundtransfer_transfer.xml:
--------------------------------------------------------------------------------
1 |
2 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/Model/Config/Source/Configurations.php:
--------------------------------------------------------------------------------
1 | _dataHelper = $helper;
45 | }
46 |
47 | public function toOptionArray()
48 | {
49 | $configs = array(
50 | array('value' => 'prod', 'label' => $this->_dataHelper->__('Production')),
51 | array('value' => 'demo', 'label' => $this->_dataHelper->__('Demo')),
52 | array('value' => 'test_3d', 'label' => $this->_dataHelper->__('Test'))
53 | );
54 |
55 | return $configs;
56 | }
57 | }
--------------------------------------------------------------------------------
/Model/Config/Source/DisplayModes.php:
--------------------------------------------------------------------------------
1 | _dataHelper = $helper;
46 | }
47 |
48 | public function toOptionArray()
49 | {
50 | $themes = array(
51 | array('value' => 'iframe', 'label' => $this->_dataHelper->__('Iframe')),
52 | array('value' => 'popup', 'label' => $this->_dataHelper->__('Popup')),
53 | array('value' => 'redirect', 'label' => $this->_dataHelper->__('Redirect')),
54 | );
55 |
56 | return $themes;
57 | }
58 | }
--------------------------------------------------------------------------------
/Model/Config/Source/Layouts.php:
--------------------------------------------------------------------------------
1 | _dataHelper = $helper;
45 | }
46 |
47 | public function toOptionArray()
48 | {
49 | $themes = array(
50 | array('value' => '', 'label' => __('No')),
51 | array('value' => 'desktop', 'label' => $this->_dataHelper->__('Desktop')),
52 | array('value' => 'tablet', 'label' => $this->_dataHelper->__('Tablet')),
53 | array('value' => 'smartphone', 'label' => $this->_dataHelper->__('Smartphone')),
54 | );
55 |
56 |
57 | return $themes;
58 | }
59 | }
60 |
--------------------------------------------------------------------------------
/Model/Plugin/FixSession.php:
--------------------------------------------------------------------------------
1 | header = $header;
51 | }
52 |
53 | public function beforeSetPublicCookie(
54 | PhpCookieManager $subject,
55 | $name,
56 | $value,
57 | PublicCookieMetadata $metadata = null
58 | ) {
59 | if ($metadata && method_exists($metadata, 'getSameSite') && ($name == 'PHPSESSID')) {
60 | if ($metadata->getSameSite() != 'None') {
61 | $metadata->setSecure(true);
62 | $metadata->setSameSite('None');
63 | }
64 | }
65 | return [$name, $value, $metadata];
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/view/frontend/web/js/model/min-age-validator.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Shop System Plugins - Terms of Use
3 | *
4 | * The plugins offered are provided free of charge by Qenta Payment CEE GmbH
5 | * (abbreviated to Qenta CEE) and are explicitly not part of the Qenta CEE range of
6 | * products and services.
7 | *
8 | * They have been tested and approved for full functionality in the standard configuration
9 | * (status on delivery) of the corresponding shop system. They are under General Public
10 | * License Version 2 (GPLv2) and can be used, developed and passed on to third parties under
11 | * the same terms.
12 | *
13 | * However, Qenta CEE does not provide any guarantee or accept any liability for any errors
14 | * occurring when used in an enhanced, customized shop system configuration.
15 | *
16 | * Operation in an enhanced, customized configuration is at your own risk and requires a
17 | * comprehensive test phase by the user of the plugin.
18 | *
19 | * Customers use the plugins at their own risk. Qenta CEE does not guarantee their full
20 | * functionality neither does Qenta CEE assume liability for any disadvantages related to
21 | * the use of the plugins. Additionally, Qenta CEE does not guarantee the full functionality
22 | * for customized shop systems or installed plugins of other vendors of plugins within the same
23 | * shop system.
24 | *
25 | * Customers are responsible for testing the plugin's functionality before starting productive
26 | * operation.
27 | *
28 | * By installing the plugin into the shop system the customer agrees to these terms of use.
29 | * Please do not use the plugin if you do not agree to these terms of use!
30 | */
31 |
32 | /*jshint browser:true jquery:true*/
33 | /*global alert*/
34 | define(
35 | [
36 | 'jquery',
37 | 'mage/validation'
38 | ],
39 | function ($) {
40 | 'use strict';
41 |
42 | return {
43 |
44 | minage: 0,
45 |
46 | /**
47 | * Validate checkout agreements
48 | *
49 | * @returns {Boolean}
50 | */
51 | validate: function (dob) {
52 | if (this.minage == 0)
53 | return true;
54 |
55 | var birthdate = new Date(dob);
56 |
57 | var year = birthdate.getFullYear();
58 | var today = new Date();
59 | if (year <= 1899 || year >= today.getFullYear() + 1) {
60 | return false;
61 | }
62 |
63 | var limit = new Date((today.getFullYear() - this.minage), today.getMonth(), today.getDate());
64 | return birthdate < limit;
65 | }
66 | };
67 | }
68 | );
69 |
--------------------------------------------------------------------------------
/Model/Payment/Eps.php:
--------------------------------------------------------------------------------
1 | getInfoInstance();
63 | $infoInstance->setAdditionalInformation('financialInstitution', 'EPS-SO');
64 |
65 | return $this;
66 | }
67 | }
--------------------------------------------------------------------------------
/view/frontend/layout/qentacheckoutpage_checkout_back.xml:
--------------------------------------------------------------------------------
1 |
2 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
--------------------------------------------------------------------------------
/view/frontend/layout/qentacheckoutpage_checkout_failed.xml:
--------------------------------------------------------------------------------
1 |
2 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
--------------------------------------------------------------------------------
/Controller/Checkout/Failed.php:
--------------------------------------------------------------------------------
1 | _resultPageFactory = $resultPageFactory;
51 | $this->_request = $context->getRequest();
52 | $this->urlBuilder = $context->getUrl(); // Initialize the URL builder
53 | }
54 |
55 | public function execute()
56 | {
57 | $redirectTo = 'checkout/cart';
58 | if ($this->_request->getParam('iframeused')) {
59 | $redirectUrl = $this->urlBuilder->getUrl($redirectTo, ['_secure' => true]);
60 |
61 | $page = $this->_resultPageFactory->create();
62 | $page->getLayout()->getBlock('checkout.failed')->addData(['redirectUrl' => $redirectUrl]);
63 | return $page;
64 | } else {
65 | $redirectUrl = $this->urlBuilder->getUrl($redirectTo, ['_secure' => true]);
66 | return $this->resultFactory->create(ResultFactory::TYPE_REDIRECT)->setUrl($redirectUrl);
67 | }
68 | }
69 | }
--------------------------------------------------------------------------------
/Model/Config/Backend/Secret.php:
--------------------------------------------------------------------------------
1 | setValue(trim(trim($this->getValue())));
67 |
68 | return $this;
69 | }
70 |
71 | }
72 |
--------------------------------------------------------------------------------
/Controller/Adminhtml/Support/Contact.php:
--------------------------------------------------------------------------------
1 | _dataHelper = $dataHelper;
56 | $this->_resultPageFactory = $resultPageFactory;
57 | }
58 |
59 | public function execute()
60 | {
61 | /** @var \Magento\Backend\Model\View\Result\Page $resultPage */
62 | $resultPage = $this->_resultPageFactory->create();
63 | $resultPage->setActiveMenu('Magento_Backend::system_store');
64 | $resultPage->getConfig()->getTitle()->prepend($this->_dataHelper->__('Qenta Checkout Page Support Request'));
65 |
66 | return $resultPage;
67 | }
68 |
69 | /**
70 | * Check currently called action by permissions for current user
71 | *
72 | * @return bool
73 | */
74 | protected function _isAllowed()
75 | {
76 | return $this->_authorization->isAllowed('Magento_Payment::payment');
77 | }
78 | }
79 |
--------------------------------------------------------------------------------
/Controller/Adminhtml/Fundtransfer/Transfer.php:
--------------------------------------------------------------------------------
1 | _dataHelper = $dataHelper;
56 | $this->_resultPageFactory = $resultPageFactory;
57 | }
58 |
59 | public function execute()
60 | {
61 | /** @var \Magento\Backend\Model\View\Result\Page $resultPage */
62 | $resultPage = $this->_resultPageFactory->create();
63 | $resultPage->setActiveMenu('Magento_Backend::system_store');
64 | $resultPage->getConfig()->getTitle()->prepend($this->_dataHelper->__('Qenta Checkout Page Fund Transfer'));
65 |
66 | return $resultPage;
67 | }
68 |
69 | /**
70 | * Check currently called action by permissions for current user
71 | *
72 | * @return bool
73 | */
74 | protected function _isAllowed()
75 | {
76 | return $this->_authorization->isAllowed('Magento_Payment::payment');
77 | }
78 | }
79 |
--------------------------------------------------------------------------------
/Block/Adminhtml/Support/Contact.php:
--------------------------------------------------------------------------------
1 | _coreRegistry = $registry;
66 | $this->_dataHelper = $dataHelper;
67 |
68 | $this->_objectId = 'id';
69 | $this->_controller = 'adminhtml_support';
70 | $this->_blockGroup = 'Qenta_CheckoutPage';
71 | $this->buttonList->remove('save');
72 | $this->buttonList->add(
73 | 'sendrequest',
74 | [
75 | 'label' => $this->_dataHelper->__('Send support request'),
76 | 'class' => 'save',
77 | 'onclick' => 'jQuery("#edit_form").submit();',
78 | ],
79 | -100, 0, 'footer'
80 | );
81 | }
82 |
83 |
84 | }
--------------------------------------------------------------------------------
/Block/Adminhtml/Fundtransfer/Transfer.php:
--------------------------------------------------------------------------------
1 | _coreRegistry = $registry;
66 | $this->_dataHelper = $dataHelper;
67 |
68 | $this->_objectId = 'id';
69 | $this->_controller = 'adminhtml_fundtransfer';
70 | $this->_blockGroup = 'Qenta_CheckoutPage';
71 | $this->buttonList->remove('save');
72 | $this->buttonList->add(
73 | 'sendrequest',
74 | [
75 | 'label' => $this->_dataHelper->__('Submit Transfer'),
76 | 'class' => 'save',
77 | 'onclick' => 'jQuery("#edit_form").submit();',
78 | ],
79 | -100, 0, 'footer'
80 | );
81 | }
82 |
83 |
84 | }
--------------------------------------------------------------------------------
/Block/Adminhtml/Buttons.php:
--------------------------------------------------------------------------------
1 | setElement($element);
41 |
42 | $url = $this->getUrl('qentacheckoutpage/test/config');
43 |
44 | $html = $this->getLayout()->createBlock('Magento\Backend\Block\Widget\Button')
45 | ->setType('button')
46 | ->setClass('scalable')
47 | ->setLabel('Test configuration')
48 | ->setOnClick("setLocation('$url')")
49 | ->toHtml();
50 |
51 | $html .= ' ';
52 |
53 | $url = $this->getUrl('qentacheckoutpage/support/contact');
54 | $html .= $this->getLayout()->createBlock('Magento\Backend\Block\Widget\Button')
55 | ->setType('button')
56 | ->setClass('scalable')
57 | ->setLabel('Contact support')
58 | ->setOnClick("setLocation('$url')")
59 | ->toHtml();
60 |
61 | $html .= ' ';
62 |
63 | $url = $this->getUrl('qentacheckoutpage/fundtransfer/transfer');
64 | $html .= $this->getLayout()->createBlock('Magento\Backend\Block\Widget\Button')
65 | ->setType('button')
66 | ->setClass('scalable')
67 | ->setLabel('Fund Transfer')
68 | ->setOnClick("setLocation('$url')")
69 | ->toHtml();
70 |
71 |
72 | return $html;
73 | }
74 | }
75 |
--------------------------------------------------------------------------------
/view/adminhtml/web/js/fundtransfer.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Shop System Plugins - Terms of Use
3 | *
4 | * The plugins offered are provided free of charge by Qenta Payment CEE GmbH
5 | * (abbreviated to Qenta CEE) and are explicitly not part of the Qenta CEE range of
6 | * products and services.
7 | *
8 | * They have been tested and approved for full functionality in the standard configuration
9 | * (status on delivery) of the corresponding shop system. They are under General Public
10 | * License Version 2 (GPLv2) and can be used, developed and passed on to third parties under
11 | * the same terms.
12 | *
13 | * However, Qenta CEE does not provide any guarantee or accept any liability for any errors
14 | * occurring when used in an enhanced, customized shop system configuration.
15 | *
16 | * Operation in an enhanced, customized configuration is at your own risk and requires a
17 | * comprehensive test phase by the user of the plugin.
18 | *
19 | * Customers use the plugins at their own risk. Qenta CEE does not guarantee their full
20 | * functionality neither does Qenta CEE assume liability for any disadvantages related to
21 | * the use of the plugins. Additionally, Qenta CEE does not guarantee the full functionality
22 | * for customized shop systems or installed plugins of other vendors of plugins within the same
23 | * shop system.
24 | *
25 | * Customers are responsible for testing the plugin's functionality before starting productive
26 | * operation.
27 | *
28 | * By installing the plugin into the shop system the customer agrees to these terms of use.
29 | * Please do not use the plugin if you do not agree to these terms of use!
30 | */
31 |
32 | define([
33 | 'jquery'
34 | ], function ($) {
35 |
36 | $('.transferfund-fieldset').each(function (index, fieldset) {
37 | $(fieldset).css('display', 'none');
38 | });
39 |
40 | $('#transferType').on('change', function (evt) {
41 |
42 | var fieldsetId = 'fields-' + $(this).val().toLowerCase();
43 | $('.transferfund-fieldset').each(function (index, fieldset) {
44 | if ($(fieldset).attr('id') == fieldsetId) {
45 | $(fieldset).css('display', 'block');
46 | $(fieldset).find('.fundtransfer-required').each(function (index, field) {
47 | $(field).addClass('required-entry');
48 | $('.field-' + $(field).attr('id')).addClass('required').addClass('_required');
49 | });
50 | } else {
51 | $(fieldset).css('display', 'none');
52 | $(fieldset).find('.fundtransfer-required').each(function (index, field) {
53 | $(field).removeClass('required-entry');
54 | $('.field-' + $(field).attr('id')).removeClass('required').removeClass('_required');
55 | });
56 | }
57 |
58 | if (fieldsetId == 'fields-existingorder' || fieldsetId == 'fields-sepa-ct') {
59 | $('#customerStatement').removeClass('required-entry');
60 | $('.field-customerStatement').removeClass('required').removeClass('_required');
61 | } else {
62 | $('#customerStatement').addClass('required-entry');
63 | $('.field-customerStatement').addClass('required').addClass('_required');
64 | }
65 | });
66 | }).trigger('change');
67 |
68 |
69 | });
70 |
--------------------------------------------------------------------------------
/Controller/Adminhtml/Transactions/RefundReversal.php:
--------------------------------------------------------------------------------
1 | _initTransaction();
48 | /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
49 | $resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
50 | if (!$txn) {
51 | return $resultRedirect->setPath('sales/*/');
52 | }
53 |
54 | /** @var \Magento\Sales\Model\Order\Payment\Interceptor $payment */
55 | $payment = $this->orderPaymentRepository->get($txn->getPaymentId());
56 |
57 | /** @var \Qenta\CheckoutPage\Model\AbstractPayment $methodInstance */
58 | $methodInstance = $payment->getMethodInstance();
59 | if ($methodInstance instanceof \Qenta\CheckoutPage\Model\AbstractPayment) {
60 | try {
61 | $methodInstance->refundReversal($payment, $txn);
62 | $this->messageManager->addSuccess(__('The refund has been reverted.'));
63 | } catch (\Magento\Framework\Exception\LocalizedException $e) {
64 | $this->messageManager->addError($e->getMessage());
65 | } catch (\Exception $e) {
66 | $this->messageManager->addError(__('We can\'t revert the refund.'));
67 | $this->_objectManager->get('Psr\Log\LoggerInterface')->critical($e);
68 | }
69 | }
70 |
71 | return $resultRedirect->setPath('sales/transactions/view', ['_current' => true]);
72 | }
73 |
74 | }
75 |
--------------------------------------------------------------------------------
/Model/Config/Backend/CustomerId.php:
--------------------------------------------------------------------------------
1 | getValue());
68 |
69 | if (!strlen($value ?? ''))
70 | return $this;
71 |
72 | if (strlen($value ?? '') != 7)
73 | throw new \Magento\Framework\Exception\LocalizedException(__('The Customer ID has a fixed length of 7.'));
74 |
75 | $this->setValue(trim($value));
76 |
77 |
78 | return $this;
79 | }
80 |
81 | }
82 |
--------------------------------------------------------------------------------
/Controller/Adminhtml/Test/Config.php:
--------------------------------------------------------------------------------
1 | _testModel = $testModel;
56 | $this->_dataHelper = $dataHelper;
57 | }
58 |
59 | public function execute()
60 | {
61 |
62 | $redirectUrl = $this->getUrl('adminhtml/system_config/edit/section/qenta_checkoutpage');
63 | $urls = [
64 | 'confirm' => $this->_url->getUrl('qentacheckoutpage/checkout/confirm',
65 | ['_secure' => true, '_nosid' => true]),
66 | 'return' => $this->_url->getUrl('qentacheckoutpage/checkout/back',
67 | ['_secure' => true, '_nosid' => true])
68 | ];
69 |
70 | try {
71 | $this->_testModel->config($urls);
72 | $this->messageManager->addNoticeMessage($this->_dataHelper->__('Configuration test ok'));
73 | } catch (\Exception $e) {
74 | $this->messageManager->addErrorMessage($e->getMessage());
75 | }
76 |
77 | $this->_redirect($redirectUrl);
78 | }
79 |
80 | /**
81 | * Check currently called action by permissions for current user
82 | *
83 | * @return bool
84 | */
85 | protected function _isAllowed()
86 | {
87 | return $this->_authorization->isAllowed('Magento_Payment::payment');
88 | }
89 | }
90 |
--------------------------------------------------------------------------------
/Controller/Adminhtml/Support/Sendrequest.php:
--------------------------------------------------------------------------------
1 | _supportModel = $supportModel;
61 | $this->_dataHelper = $dataHelper;
62 | $this->_resultPageFactory = $resultPageFactory;
63 | }
64 |
65 | public function execute()
66 | {
67 | $redirectUrl = $this->getUrl('qentacheckoutpage/support/contact');
68 |
69 | if (!($data = $this->getRequest()->getPostValue())) {
70 | $this->_redirect($redirectUrl);
71 | return;
72 | }
73 |
74 | $postObject = new \Magento\Framework\DataObject();
75 | $postObject->setData($data);
76 |
77 | try {
78 | $this->_supportModel->sendrequest($postObject);
79 | $this->messageManager->addNoticeMessage($this->_dataHelper->__('Support request sent successfully!'));
80 | } catch (\Exception $e) {
81 | $this->messageManager->addErrorMessage($e->getMessage());
82 | }
83 |
84 | $this->_redirect($redirectUrl);
85 | }
86 |
87 | /**
88 | * Check currently called action by permissions for current user
89 | *
90 | * @return bool
91 | */
92 | protected function _isAllowed()
93 | {
94 | return $this->_authorization->isAllowed('Magento_Payment::payment');
95 | }
96 | }
97 |
--------------------------------------------------------------------------------
/view/frontend/web/js/view/payment/method-renderer/standard.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Shop System Plugins - Terms of Use
3 | *
4 | * The plugins offered are provided free of charge by Qenta Payment CEE GmbH
5 | * (abbreviated to Qenta CEE) and are explicitly not part of the Qenta CEE range of
6 | * products and services.
7 | *
8 | * They have been tested and approved for full functionality in the standard configuration
9 | * (status on delivery) of the corresponding shop system. They are under General Public
10 | * License Version 2 (GPLv2) and can be used, developed and passed on to third parties under
11 | * the same terms.
12 | *
13 | * However, Qenta CEE does not provide any guarantee or accept any liability for any errors
14 | * occurring when used in an enhanced, customized shop system configuration.
15 | *
16 | * Operation in an enhanced, customized configuration is at your own risk and requires a
17 | * comprehensive test phase by the user of the plugin.
18 | *
19 | * Customers use the plugins at their own risk. Qenta CEE does not guarantee their full
20 | * functionality neither does Qenta CEE assume liability for any disadvantages related to
21 | * the use of the plugins. Additionally, Qenta CEE does not guarantee the full functionality
22 | * for customized shop systems or installed plugins of other vendors of plugins within the same
23 | * shop system.
24 | *
25 | * Customers are responsible for testing the plugin's functionality before starting productive
26 | * operation.
27 | *
28 | * By installing the plugin into the shop system the customer agrees to these terms of use.
29 | * Please do not use the plugin if you do not agree to these terms of use!
30 | */
31 |
32 | define(
33 | [
34 | 'Magento_Checkout/js/view/payment/default',
35 | 'Magento_Checkout/js/model/payment/additional-validators',
36 | 'Qenta_CheckoutPage/js/action/set-payment-method',
37 | 'jquery',
38 | 'mage/translate'
39 | ],
40 | function (Component, additionalValidators, setPaymentMethodAction, $, $t) {
41 | return Component.extend({
42 | defaults: {
43 | template: 'Qenta_CheckoutPage/payment/method-standard'
44 | },
45 | validate: function () {
46 | return true;
47 | },
48 | getInstructions: function () {
49 | if (!window.checkoutConfig.payment[this.getCode()])
50 | return '';
51 |
52 | return window.checkoutConfig.payment[this.getCode()].instructions;
53 | },
54 | getDisplayMode: function() {
55 | if (!window.checkoutConfig.payment[this.getCode()])
56 | return false;
57 |
58 | return window.checkoutConfig.payment[this.getCode()].displaymode;
59 | },
60 | getLogoUrl: function() {
61 | if (!window.checkoutConfig.payment[this.getCode()])
62 | return false;
63 |
64 | return window.checkoutConfig.payment[this.getCode()].logo_url
65 | },
66 | getBackUrl: function() {
67 | if (!window.checkoutConfig.payment[this.getCode()])
68 | return false;
69 |
70 | return window.checkoutConfig.payment[this.getCode()].back_url
71 | },
72 | placeQentaOrder: function () {
73 |
74 | if (this.validate() && additionalValidators.validate())
75 | {
76 | this.selectPaymentMethod(); // save selected payment method in Quote
77 |
78 | setPaymentMethodAction(this.messageContainer, this.getDisplayMode());
79 | }
80 | return false;
81 | }
82 | });
83 | }
84 | );
85 |
--------------------------------------------------------------------------------
/.docker/magento2/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM php:8.2.0-apache
2 |
3 | # set PATH for composer binaries
4 | ENV PATH="~/.composer/vendor/bin:${PATH}"
5 |
6 | # reduce APT noise
7 | ENV DEBIAN_FRONTEND=noninteractive
8 |
9 | # use proper shell
10 | SHELL ["/bin/bash", "-c"]
11 |
12 | # to avoid all too common aborts because of debian repo timeouts
13 | RUN echo 'APT::Acquire::Retries "30";' > /etc/apt/apt.conf.d/80-retries
14 |
15 | # upgrade package list and default packages
16 | RUN apt-get -qq update
17 | RUN apt-get -qq upgrade
18 |
19 | # install npm nodesource repo
20 | RUN curl -sL https://deb.nodesource.com/setup_12.x | bash -
21 |
22 | # install dependencies aand tools
23 | RUN apt-get -q install -y git unzip vim mariadb-client zip jq nodejs
24 |
25 | # install php extension dependencies
26 | RUN apt-get -qq install libmemcached-dev libzip-dev zlib1g-dev libpng-dev libjpeg-dev libfreetype6-dev libwebp-dev libonig-dev libtidy-dev libicu-dev libxml2-dev libxslt-dev
27 |
28 | # clean up to reduce docker image size
29 | RUN apt-get -qq autoremove
30 |
31 | # install PHP extensions required
32 | RUN pecl install xdebug-3.3.1
33 |
34 | RUN docker-php-ext-configure gd --with-jpeg --with-freetype --with-webp
35 | RUN docker-php-ext-install -j64 intl sockets soap gd mbstring mysqli pdo pdo_mysql tidy bcmath xsl zip
36 | RUN docker-php-ext-enable intl sockets xsl zip xdebug gd mbstring mysqli pdo pdo_mysql tidy bcmath
37 |
38 | # enable apache modules
39 | RUN a2enmod rewrite headers ext_filter expires
40 |
41 | # create self-signed cert and enable SSL on apache
42 | RUN openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/ssl-cert-snakeoil.key -out /etc/ssl/certs/ssl-cert-snakeoil.pem -subj "/C=AT/ST=Vienna/L=Vienna/O=Security/OU=Development/CN=example.com"
43 | RUN a2ensite default-ssl
44 | RUN a2enmod ssl
45 |
46 | # get composer binary from composer docker image
47 | COPY --from=composer /usr/bin/composer /usr/bin/composer
48 |
49 | # add user and dir for executing composer
50 | RUN useradd -u 431 -r -g www-data -s /sbin/nologin -c "magento user" magento
51 |
52 | # set permissions for magento user
53 | RUN mkdir -p /home/magento && chown -R magento:www-data /home/magento /etc/ssl /var/www
54 |
55 | # install ngrok
56 | COPY --from=ngrok/ngrok:debian /bin/ngrok /usr/bin/ngrok
57 |
58 | # magento is greedy
59 | RUN echo memory_limit=4G > /usr/local/etc/php/conf.d/give_me_more_memory__give_me_MOOOORE.ini
60 |
61 | # continue as user for correct permissions
62 | USER magento
63 |
64 | # clone magento2 base and sample data
65 | # checkout all branches to have them in the image to speed up checkout in entrypoint
66 | RUN git config --global http.version HTTP/1.1
67 | RUN git config --global http.postBuffer 524288000
68 |
69 | RUN git clone --depth=1 https://github.com/magento/magento2 /var/www/magento2
70 | RUN cd /var/www/magento2 && git fetch --unshallow
71 | RUN for BRANCH in $(git branch -a | grep remotes | grep -v HEAD | grep -v master); do git branch --track "${BRANCH#remotes/origin/}" "${BRANCH}"; done
72 |
73 | RUN git config --global http.version HTTP/1.1
74 | RUN git config --global http.postBuffer 524288000
75 |
76 | RUN git clone --depth=1 https://github.com/magento/magento2-sample-data /var/www/magento2/magento2-sample-data
77 | RUN cd /var/www/magento2/magento2-sample-data && git fetch --unshallow
78 |
79 | RUN for BRANCH in $(git branch -a | grep remotes | grep -v HEAD | grep -v master); do git branch --track "${BRANCH#remotes/origin/}" "${BRANCH}"; done
80 | # copy entrypoint script
81 | COPY init.sh /usr/local/bin/init.sh
82 |
83 | # copy ngrok script
84 | COPY ngrok.sh /usr/local/bin/ngrok.sh
85 |
86 | # copy plugin
87 | RUN mkdir /tmp/plugin
88 | COPY . /tmp/plugin/
89 |
90 | # make scripts executable
91 | USER root
92 | RUN chmod +x /usr/local/bin/*.sh
93 |
94 | WORKDIR /var/www/html
95 | USER magento
96 |
97 | # override default entrypoin with ours
98 | ENTRYPOINT [ "init.sh" ]
99 |
100 | EXPOSE 80
101 | EXPOSE 443
102 |
--------------------------------------------------------------------------------
/view/frontend/web/js/view/payment/method-renderer.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Shop System Plugins - Terms of Use
3 | *
4 | * The plugins offered are provided free of charge by Qenta Payment CEE GmbH
5 | * (abbreviated to Qenta CEE) and are explicitly not part of the Qenta CEE range of
6 | * products and services.
7 | *
8 | * They have been tested and approved for full functionality in the standard configuration
9 | * (status on delivery) of the corresponding shop system. They are under General Public
10 | * License Version 2 (GPLv2) and can be used, developed and passed on to third parties under
11 | * the same terms.
12 | *
13 | * However, Qenta CEE does not provide any guarantee or accept any liability for any errors
14 | * occurring when used in an enhanced, customized shop system configuration.
15 | *
16 | * Operation in an enhanced, customized configuration is at your own risk and requires a
17 | * comprehensive test phase by the user of the plugin.
18 | *
19 | * Customers use the plugins at their own risk. Qenta CEE does not guarantee their full
20 | * functionality neither does Qenta CEE assume liability for any disadvantages related to
21 | * the use of the plugins. Additionally, Qenta CEE does not guarantee the full functionality
22 | * for customized shop systems or installed plugins of other vendors of plugins within the same
23 | * shop system.
24 | *
25 | * Customers are responsible for testing the plugin's functionality before starting productive
26 | * operation.
27 | *
28 | * By installing the plugin into the shop system the customer agrees to these terms of use.
29 | * Please do not use the plugin if you do not agree to these terms of use!
30 | */
31 |
32 | define(
33 | [
34 | 'uiComponent',
35 | 'Magento_Checkout/js/model/payment/renderer-list'
36 | ],
37 | function (
38 | Component,
39 | rendererList
40 | ) {
41 | 'use strict';
42 | rendererList.push(
43 | {
44 | type: 'qenta_checkoutpage_select',
45 | component: 'Qenta_CheckoutPage/js/view/payment/method-renderer/standard'
46 | },
47 | {
48 | type: 'qenta_checkoutpage_ccard',
49 | component: 'Qenta_CheckoutPage/js/view/payment/method-renderer/standard'
50 | },
51 | {
52 | type: 'qenta_checkoutpage_afterpay',
53 | component: 'Qenta_CheckoutPage/js/view/payment/method-renderer/standard'
54 | },
55 | {
56 | type: 'qenta_checkoutpage_eps',
57 | component: 'Qenta_CheckoutPage/js/view/payment/method-renderer/standard'
58 | },
59 | {
60 | type: 'qenta_checkoutpage_sofortbanking',
61 | component: 'Qenta_CheckoutPage/js/view/payment/method-renderer/standard'
62 | },
63 | {
64 | type: 'qenta_checkoutpage_p24',
65 | component: 'Qenta_CheckoutPage/js/view/payment/method-renderer/standard'
66 | },
67 | {
68 | type: 'qenta_checkoutpage_paysafecard',
69 | component: 'Qenta_CheckoutPage/js/view/payment/method-renderer/standard'
70 | },
71 | {
72 | type: 'qenta_checkoutpage_paypal',
73 | component: 'Qenta_CheckoutPage/js/view/payment/method-renderer/standard'
74 | },
75 | {
76 | type: 'qenta_checkoutpage_salamantex',
77 | component: 'Qenta_CheckoutPage/js/view/payment/method-renderer/standard'
78 | },
79 | {
80 | type: 'qenta_checkoutpage_sepa',
81 | component: 'Qenta_CheckoutPage/js/view/payment/method-renderer/standard'
82 | },
83 | {
84 | type: 'qenta_checkoutpage_invoice',
85 | component: 'Qenta_CheckoutPage/js/view/payment/method-renderer/invoiceinstallment'
86 | }
87 | );
88 |
89 | return Component.extend({
90 |
91 | });
92 | }
93 | );
--------------------------------------------------------------------------------
/Model/Payment/Invoice.php:
--------------------------------------------------------------------------------
1 | getData('additional_data');
67 |
68 | /** @var \Magento\Quote\Model\Quote\Payment $infoInstance */
69 | $infoInstance = $this->getInfoInstance();
70 | $infoInstance->setAdditionalInformation('customerDob', $additionalData['customerDob']);
71 |
72 | return $this;
73 | }
74 |
75 | /**
76 | * Determine method availability based on quote amount and config data
77 | *
78 | * @param \Magento\Quote\Api\Data\CartInterface|null $quote
79 | *
80 | * @return bool
81 | */
82 | public function isAvailable(\Magento\Quote\Api\Data\CartInterface $quote = null)
83 | {
84 | $avail = parent::isAvailable($quote);
85 | if ($avail === false) {
86 | return false;
87 | }
88 |
89 | if ($quote === null) {
90 | return false;
91 | }
92 |
93 | if ($this->getConfigData('provider') == 'payolution') {
94 | return $this->_isAvailablePayolution($quote);
95 | }
96 |
97 | return true;
98 | }
99 |
100 | /**
101 | * force transmitting the basket data
102 | *
103 | * @return bool
104 | */
105 | protected function forceSendingBasket()
106 | {
107 | return $this->getConfigData('provider') == 'qenta';
108 | }
109 |
110 |
111 | }
--------------------------------------------------------------------------------
/view/frontend/web/js/view/payment/method-renderer/invoiceinstallment.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Shop System Plugins - Terms of Use
3 | *
4 | * The plugins offered are provided free of charge by Qenta Payment CEE GmbH
5 | * (abbreviated to Qenta CEE) and are explicitly not part of the Qenta CEE range of
6 | * products and services.
7 | *
8 | * They have been tested and approved for full functionality in the standard configuration
9 | * (status on delivery) of the corresponding shop system. They are under General Public
10 | * License Version 2 (GPLv2) and can be used, developed and passed on to third parties under
11 | * the same terms.
12 | *
13 | * However, Qenta CEE does not provide any guarantee or accept any liability for any errors
14 | * occurring when used in an enhanced, customized shop system configuration.
15 | *
16 | * Operation in an enhanced, customized configuration is at your own risk and requires a
17 | * comprehensive test phase by the user of the plugin.
18 | *
19 | * Customers use the plugins at their own risk. Qenta CEE does not guarantee their full
20 | * functionality neither does Qenta CEE assume liability for any disadvantages related to
21 | * the use of the plugins. Additionally, Qenta CEE does not guarantee the full functionality
22 | * for customized shop systems or installed plugins of other vendors of plugins within the same
23 | * shop system.
24 | *
25 | * Customers are responsible for testing the plugin's functionality before starting productive
26 | * operation.
27 | *
28 | * By installing the plugin into the shop system the customer agrees to these terms of use.
29 | * Please do not use the plugin if you do not agree to these terms of use!
30 | */
31 |
32 | define(
33 | [
34 | 'Qenta_CheckoutPage/js/view/payment/method-renderer/standard',
35 | 'Qenta_CheckoutPage/js/action/set-payment-method',
36 | 'Qenta_CheckoutPage/js/model/min-age-validator',
37 | 'mage/url',
38 | 'jquery',
39 | 'mage/translate'
40 | ],
41 | function (Component, setPaymentMethodAction, minAgeValidator, url, $, $t) {
42 | return Component.extend({
43 |
44 | customerData: {},
45 | customerDob: null,
46 | defaults: {
47 | template: 'Qenta_CheckoutPage/payment/method-invoiceinstallment'
48 | },
49 | initObservable: function () {
50 | this._super().observe('customerDob');
51 | return this;
52 | },
53 | initialize: function () {
54 | this._super();
55 | this.customerData = window.customerData;
56 | this.customerDob(this.customerData.dob);
57 | return this;
58 | },
59 |
60 | getData: function () {
61 | var parent = this._super(),
62 | additionalData = {};
63 |
64 | additionalData.customerDob = this.customerDob();
65 |
66 | return $.extend(true, parent, {'additional_data': additionalData});
67 | },
68 | getMinAge: function() {
69 | if (!window.checkoutConfig.payment[this.getCode()])
70 | return 0;
71 |
72 | return window.checkoutConfig.payment[this.getCode()].min_age
73 | },
74 | isB2B: function() {
75 | return false;
76 | },
77 | validate: function () {
78 | minAgeValidator.minage = this.getMinAge();
79 | if (!this.isB2B() && !minAgeValidator.validate(this.customerDob())) {
80 | var errorPane = $('#' + this.getCode() + '-dob-error');
81 | errorPane.html($t('You have to be %age% years or older to use this payment.'.replace('%age%', minAgeValidator.minage)));
82 | errorPane.css('display', 'block');
83 | return false;
84 | }
85 |
86 | var form = $('#' + this.getCode() + '-form');
87 | return $(form).validation() && $(form).validation('isValid');
88 | },
89 |
90 | getConsentText: function () {
91 | return window.checkoutConfig.payment[this.getCode()].consenttxt;
92 | }
93 |
94 | });
95 | }
96 | );
97 |
--------------------------------------------------------------------------------
/view/frontend/web/template/payment/method-standard.html:
--------------------------------------------------------------------------------
1 |
33 |
34 |
35 |
39 |
40 |
41 |
![]()
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
82 |
83 |
84 |
--------------------------------------------------------------------------------
/Model/FundTransfer.php:
--------------------------------------------------------------------------------
1 | _dataHelper = $dataHelper;
56 | }
57 |
58 | /**
59 | * @param \Magento\Framework\DataObject $postObject
60 | *
61 | * @return \QentaCEE\QPay\Response\Toolkit\TransferFund
62 | * @throws \Exception
63 | */
64 | public function sendrequest($postObject)
65 | {
66 | $backendClient = $this->_dataHelper->getBackendClient();
67 |
68 | $type = strtoupper($postObject['transferType']);
69 |
70 | $client = $backendClient->transferfund($type);
71 |
72 | if (strlen($postObject['orderNumber'] ?? '')) {
73 | $client->setOrderNumber($postObject['orderNumber']);
74 | }
75 | if (strlen($postObject['orderReference'] ?? '')) {
76 | $client->setOrderReference($postObject['orderReference']);
77 | }
78 | if (strlen($postObject['creditNumber'] ?? '')) {
79 | $client->setCreditNumber($postObject['creditNumber']);
80 | }
81 |
82 | switch ($type) {
83 | case \QentaCEE\QPay\ToolkitClient::$TRANSFER_FUND_TYPE_EXISTING:
84 | /** @var \QentaCEE\QPay\Request\Backend\TransferFund\Existing $client */
85 | if (strlen($postObject['customerStatement'] ?? '')) {
86 | $client->setCustomerStatement($postObject['customerStatement']);
87 | }
88 |
89 | $ret = $client->send($postObject['amount'], $postObject['currency'], $postObject['orderDescription'],
90 | $postObject['sourceOrderNumber']);
91 | break;
92 |
93 | case \QentaCEE\QPay\ToolkitClient::$TRANSFER_FUND_TYPE_SEPACT:
94 | /** @var \QentaCEE\QPay\Request\Backend\TransferFund\SepaCT $client */
95 | $ret = $client->send($postObject['amount'], $postObject['currency'], $postObject['orderDescription'],
96 | $postObject['bankAccountOwner'],
97 | $postObject['bankBic'], $postObject['bankAccountIban']);
98 | break;
99 |
100 | default:
101 | throw new \Exception($this->_dataHelper->__('Invalid fund transfer type'));
102 | }
103 |
104 | return $ret;
105 | }
106 | }
107 |
--------------------------------------------------------------------------------
/Controller/Adminhtml/Fundtransfer/Submit.php:
--------------------------------------------------------------------------------
1 | _fundTransferModel = $fundTransferModel;
67 | $this->_dataHelper = $dataHelper;
68 | $this->_resultPageFactory = $resultPageFactory;
69 | $this->_logger = $logger;
70 | }
71 |
72 | public function execute()
73 | {
74 | $redirectUrl = $this->getUrl('qentacheckoutpage/fundtransfer/transfer');
75 |
76 | if (!( $data = $this->getRequest()->getPostValue() )) {
77 | $this->_redirect($redirectUrl);
78 |
79 | return;
80 | }
81 |
82 | $postObject = new \Magento\Framework\DataObject();
83 | $postObject->setData($data);
84 |
85 |
86 | $this->_session->setQentaCheckoutPageFundTrandsferFormData($postObject);
87 |
88 | try {
89 | $return = $this->_fundTransferModel->sendrequest($postObject);
90 | if ($return->hasFailed()) {
91 | $this->messageManager->addErrorMessage($return->getError()->getMessage());
92 | } else {
93 | $this->_logger->debug(__METHOD__ . ':' . print_r($postObject->getData(), true));
94 | $this->_session->unsQentaCheckoutPageFundTrandsferFormData();
95 | $this->messageManager->addNoticeMessage($this->_dataHelper->__('Fund transfer submitted successfully!'));
96 | $this->messageManager->addNoticeMessage($this->_dataHelper->__('Credit number' . ':' . $return->getCreditNumber()));
97 | }
98 |
99 | } catch (\Exception $e) {
100 | $this->messageManager->addErrorMessage($e->getMessage());
101 | }
102 |
103 | $this->_redirect($redirectUrl);
104 | }
105 |
106 | /**
107 | * Check currently called action by permissions for current user
108 | *
109 | * @return bool
110 | */
111 | protected function _isAllowed()
112 | {
113 | return $this->_authorization->isAllowed('Magento_Payment::payment');
114 | }
115 | }
116 |
117 |
--------------------------------------------------------------------------------
/Block/Adminhtml/Transactions/Detail/Plugin.php:
--------------------------------------------------------------------------------
1 | _coreRegistry = $registry;
86 | $this->adminHelper = $adminHelper;
87 | $this->_urlBuilder = $context->getUrlBuilder();
88 | $this->orderPaymentRepository = $orderPaymentRepository;
89 | }
90 |
91 | public function beforeGetLayout(\Magento\Sales\Block\Adminhtml\Transactions\Detail $subject)
92 | {
93 | $this->_txn = $this->_coreRegistry->registry('current_transaction');
94 | if (!$this->_txn) {
95 | return;
96 | }
97 |
98 | if ($this->_txn->getTxnType() != Transaction::TYPE_REFUND)
99 | return;
100 |
101 | /** @var \Magento\Sales\Model\Order\Payment\Interceptor $payment */
102 | $payment = $this->orderPaymentRepository->get($this->_txn->getPaymentId());
103 |
104 | $methodInstance = $payment->getMethodInstance();
105 |
106 | if ($methodInstance instanceof \Qenta\CheckoutPage\Model\AbstractPayment) {
107 | $addInfo = $this->_txn->getAdditionalInformation('raw_details_info');
108 |
109 | if (isset($addInfo['orderNumber']) && isset($addInfo['creditNumber'])) {
110 | $fetchUrl = $this->_urlBuilder->getUrl('qentacheckoutpage/transactions/refundreversal', ['_current' => true]);
111 | $subject->addButton('refundreversal', ['label' => __('Refund Reversal'), 'onclick' => "setLocation('{$fetchUrl}')", 'class' => 'button']);
112 | }
113 | }
114 |
115 | }
116 | }
117 |
--------------------------------------------------------------------------------
/Block/Adminhtml/Tabs.php_x:
--------------------------------------------------------------------------------
1 | _dataHelper = $dataHelper;
58 | $this->setId('qentacheckoutpage_tabs');
59 | //$this->setDestElementId('support_contact_form');
60 | $this->setTitle($this->_dataHelper->__('Qenta Checkout Page Support'));
61 | }
62 |
63 | /**
64 | * @return $this
65 | */
66 | protected function _beforeToHtml()
67 | {
68 | //$this->getUrl('adminhtml/qentacheckoutpage/support/contact')
69 | $this->addTab(
70 | 'support_request',
71 | [
72 | 'label' => $this->_dataHelper->__('Support Request'),
73 | 'title' => $this->_dataHelper->__('Support Request'),
74 | 'content' => $this->getLayout()->createBlock(
75 | 'Qenta\CheckoutPage\Block\Adminhtml\Support\Edit\Form'
76 | )->toHtml(),
77 | //'url' => $this->getUrl('qentacheckoutpage/support/contact'),
78 | 'active' => true
79 | ]
80 | );
81 |
82 | $this->addTab(
83 | 'fund_transfer',
84 | [
85 | 'label' => $this->_dataHelper->__('Fund Transfer'),
86 | 'title' => $this->_dataHelper->__('Fund Transfer'),
87 | 'content' => $this->getLayout()->createBlock(
88 | 'Qenta\CheckoutPage\Block\Adminhtml\Fundtransfer\Edit\Form'
89 | )->toHtml(),
90 | // 'url' => $this->getUrl('qentacheckoutpage/fundtransfer/transfer')
91 | ]
92 | );
93 |
94 | $this->addTab(
95 | 'config',
96 | [
97 | 'label' => $this->_dataHelper->__('Configuration'),
98 | 'title' => $this->_dataHelper->__('Configuration'),
99 | 'url' => $this->getUrl('adminhtml/system_config/edit/section/qenta_checkoutpage'),
100 | ]
101 | );
102 |
103 | $this->addTab(
104 | 'backto_system',
105 | [
106 | 'label' => $this->_dataHelper->__('Payment Methods'),
107 | 'title' => $this->_dataHelper->__('Payment Methods'),
108 | 'url' => $this->getUrl('adminhtml/system_config/edit/section/payment'),
109 | ]
110 | );
111 |
112 | return parent::_beforeToHtml();
113 | }
114 |
115 | }
116 |
--------------------------------------------------------------------------------
/Controller/Checkout/Confirm.php:
--------------------------------------------------------------------------------
1 | _dataHelper = $dataHelper;
95 | $this->_cart = $cart;
96 | $this->_url = $context->getUrl();
97 | $this->_logger = $logger;
98 | $this->_quoteManagement = $quoteManagement;
99 | $this->_orderManagement = $orderManagement;
100 | }
101 |
102 | public function execute()
103 | {
104 | $this->_logger->debug(__METHOD__ . ':' . print_r($this->_request->getPost()->toArray(), true));
105 |
106 | try {
107 |
108 | $return = \QentaCEE\QPay\ReturnFactory::getInstance($this->_request->getPost()->toArray(),
109 | $this->_dataHelper->getConfigData('basicdata/secret'));
110 |
111 | if (!$return->validate()) {
112 | throw new \Exception('Validation error: invalid response');
113 | }
114 |
115 | if (!strlen($return->mage_orderId ?? '')) {
116 | throw new \Exception('Magento OrderId is missing');
117 | }
118 |
119 | if (!strlen($return->mage_quoteId ?? '')) {
120 | throw new \Exception('Magento QuoteId is missing');
121 | }
122 |
123 | $this->_orderManagement->processOrder($return);
124 |
125 | die( \QentaCEE\QPay\ReturnFactory::generateConfirmResponseString() );
126 | } catch (\Exception $e) {
127 | $this->_logger->debug(__METHOD__ . ':' . $e->getMessage());
128 | $this->_logger->debug(__METHOD__ . ':' . $e->getTraceAsString());
129 |
130 | die( \QentaCEE\QPay\ReturnFactory::generateConfirmResponseString($e->getMessage()) );
131 | }
132 | }
133 | }
--------------------------------------------------------------------------------
/Block/Adminhtml/Support/Edit/Form.php:
--------------------------------------------------------------------------------
1 | _dataHelper = $dataHelper;
60 | }
61 |
62 | protected function _prepareForm()
63 | {
64 | /** @var \Magento\Framework\Data\Form $form */
65 | $form = $this->_formFactory->create([
66 | 'data' => [
67 | 'id' => 'edit_form',
68 | //'action' => $this->getData('action'),
69 | 'action' => $this->getUrl('*/*/sendrequest', array('id' => $this->getRequest()->getParam('id'))),
70 | 'method' => 'post'
71 | ]
72 | ]
73 | );
74 |
75 | $form->setUseContainer(true);
76 |
77 | $fieldset = $form->addFieldset('form_form', array('legend' => $this->_dataHelper->__('Contact Form')));
78 | $fieldset->addField('to', 'select', [
79 | 'label' => $this->_dataHelper->__('To'),
80 | 'class' => 'required-entry',
81 | 'required' => true,
82 | 'name' => 'to',
83 | 'options' => array(
84 | 'support@qenta.com' => 'Support Team Qenta CEE, Austria'
85 | )
86 | ]);
87 |
88 | $fieldset->addField('replyto', 'text', array(
89 | 'label' => $this->_dataHelper->__('Your e-mail address'),
90 | 'class' => 'validate-email',
91 | 'name' => 'replyto'
92 | ));
93 |
94 | $fieldset->addField('description', 'textarea', array(
95 | 'label' => $this->_dataHelper->__('Your message'),
96 | 'class' => 'required-entry',
97 | 'required' => true,
98 | 'name' => 'description',
99 | 'style' => 'height:30em;width:50em'
100 | ));
101 |
102 |
103 | $this->setForm($form);
104 |
105 | return parent::_prepareForm();
106 | }
107 |
108 | /**
109 | * Prepare label for tab
110 | *
111 | * @return string
112 | */
113 | public function getTabLabel()
114 | {
115 | return $this->_dataHelper->__('Support Request');
116 | }
117 |
118 | /**
119 | * Prepare title for tab
120 | *
121 | * @return string
122 | */
123 | public function getTabTitle()
124 | {
125 | return $this->_dataHelper->__('Support Request');
126 | }
127 |
128 | /**
129 | * {@inheritdoc}
130 | */
131 | public function canShowTab()
132 | {
133 | return true;
134 | }
135 |
136 | /**
137 | * {@inheritdoc}
138 | */
139 | public function isHidden()
140 | {
141 | return false;
142 | }
143 | }
144 |
--------------------------------------------------------------------------------
/i18n/en_US.csv:
--------------------------------------------------------------------------------
1 | "Active payment methods:","Available payment methods:"
2 | "Allowed Customer Group","Allowed customer group"
3 | "Amount","Amount"
4 | "An error occurred during the payment process","An error occurred during the payment process."
5 | "Bank account owner","Bank account owner"
6 | "Billing/Shipping Address must be identical","Billing and shipping address must be identical."
7 | "Choose your bank...","Please select your bank."
8 | "Configuration test ok","Configuration test OK"
9 | "Configuration","Configuration"
10 | "consent","consent"
11 | "Consumer e-mail address","Consumer e-mail address"
12 | "Consumer wallet ID","Consumer wallet ID"
13 | "Contact Form","Contact form"
14 | "Create order before payment","Always"
15 | "Create order after payment","Only for successful payments"
16 | "Credit number","Credit number"
17 | "You have canceled the payment process!","Payment process has been canceled.",
18 | "Customer statement","Shop reference in posting test"
19 | "Currency","Currency"
20 | "Demo","Demo"
21 | "Desktop","Desktop"
22 | "Existing order","Existing order"
23 | "Existing order data","Existing order data"
24 | "Foreign payment methods:","Third-party payment methods:"
25 | "fraud attemmpt detected, cart has been modified during checkout!","Fraud attempt detected. Cart has been modified during checkout."
26 | "Fund Transfer","Fund transfer"
27 | "Fund transfer type","Fund transfer type"
28 | "Fund transfer submitted successfully!","Fund transfer submitted successfully."
29 | "I agree that the data which are necessary for the liquidation of purchase on account and which are used to complete the identy and credit check are transmitted to payolution. My %s can be revoked at any time with effect for the future.","I agree that the data which are necessary for the liquidation of invoice payments which are used to complete the identity and credit check are transmitted to payolution. My %s can be revoked at any time with future effect."
30 | "Iframe","Iframe"
31 | "Installed Modules:","Installed modules:"
32 | "Invalid fund transfer type","Invalid fund transfer type"
33 | "No order number found.","No order number found."
34 | "Order with obligation to pay", "Order with obligation to pay"
35 | "Order description","Order description"
36 | "Order number","Order number"
37 | "Order reference","Order reference"
38 | "Payment Methods","Payment methods"
39 | "Please enter a valid e-mail address (reply to).","Please enter a valid e-mail address."
40 | "Please enter a valid e-mail address.","Please enter a valid e-mail address."
41 | "Please select the fund transfer type","Please select a fund transfer type"
42 | "Plugin name: %product","Plugin name: %product"
43 | "Plugin version: %product","Plugin version: %product"
44 | "Popup","Pop-up"
45 | "Product: %product","Product: %product"
46 | "Production","Production"
47 | Provider,Provider
48 | "Redirect","Redirect"
49 | "Refund not allowed for this order.","Refund is not allowed for this order."
50 | "Send support request","Send support request"
51 | "SEPA-CT data","SEPA-CT data"
52 | "Smartphone","Smartphone"
53 | "Source order number","Source order number"
54 | "Submit Transfer","Submit transfer"
55 | "Support request sent successfully!","Support request sent successfully."
56 | "Support Request","Support Request"
57 | "Tablet","Tablet"
58 | "Test","Test"
59 | "The payment authorization is pending.","Payment authorization is pending."
60 | "The payment has been successfully completed.","Payment has been completed successfully."
61 | "The Customer ID has a fixed length of 7.","Customer ID has a fixed length of 7."
62 | "To","To"
63 | "Version: %product","Version: %product"
64 | "Void not possible anymore for this payment, please try cancel instead!","Voiding not possible any more for this payment. Please try to cancel instead."
65 | "Qenta Checkout Page Fund Transfer","Qenta Checkout Page Fund Transfer"
66 | "Qenta Checkout Page Credit Card - Mail Order / Telephone Order","Qenta Checkout Page Credit Card - Mail Order/Telephone Order"
67 | "Qenta Checkout Page Credit Card","Qenta Checkout Page Credit Card"
68 | "Qenta Checkout Page eps Online-Überweisung","Qenta Checkout Page eps-Überweisung"
69 | "Qenta Checkout Page Invoice","Qenta Checkout Page Invoice"
70 | "Qenta Checkout Page PayPal","Qenta Checkout Page PayPal"
71 | "Qenta Checkout Page paysafecard","Qenta Checkout Page paysafecard"
72 | "Qenta Checkout Page Przelewy24","Qenta Checkout Page Przelewy24"
73 | "Qenta Checkout Page Select","Qenta Checkout Page Select"
74 | "Qenta Checkout Page SEPA Direct Debit","Qenta Checkout Page SEPA Direct Debit"
75 | "Qenta Checkout Page Online bank transfer.","Qenta Checkout Page Online bank transfer."
76 | "Qenta Checkout Page Fund Transfer","Qenta Checkout Page Fund Transfer"
77 | "Qenta Checkout Page Support Request","Qenta Checkout Page Support Request"
78 | "Qenta Checkout Page Support","Qenta Checkout Page Support"
79 | "You will be redirected to Qenta Checkout Page when you place an order.","You will be redirected to Qenta Checkout Page when placing an order."
80 | "Your e-mail address","Your e-mail address"
81 | "Your message","Your message"
82 | "Your order will be processed as soon as we receive the payment confirmation from your bank.","Your order will be processed as soon as we receive the payment confirmation from your bank."
83 | "You will now be redirected", "You will now be redirected."
84 | "If you are not redirected, please click", "If you are not redirected, please click"
85 |
--------------------------------------------------------------------------------
/Model/App/Config/ScopePool.php:
--------------------------------------------------------------------------------
1 | _readerPool = $readerPool;
76 | $this->_dataFactory = $dataFactory;
77 | $this->_cache = $cache;
78 | $this->_cacheId = $cacheId;
79 | $this->_scopeResolverPool = $scopeResolverPool;
80 | }
81 |
82 | /**
83 | * Retrieve config section
84 | *
85 | * @param string $scopeType
86 | * @param string|\Magento\Framework\DataObject|null $scopeCode
87 | * @return \Magento\Framework\App\Config\DataInterface
88 | */
89 | public function getScope($scopeType, $scopeCode = null)
90 | {
91 | $scopeCode = $this->_getScopeCode($scopeType, $scopeCode);
92 |
93 | $code = $scopeType . '|' . $scopeCode;
94 |
95 | if (!isset($this->_scopes[$code])) {
96 | // Key by url to support dynamic {{base_url}} and port assignments
97 | $host = $this->getRequest()->getHttpHost();
98 | $port = $this->getRequest()->getServer('SERVER_PORT');
99 | $path = $this->getRequest()->getBasePath();
100 |
101 | $urlInfo = $host . $port . trim($path, '/');
102 | $cacheKey = $this->_cacheId . '|' . $code . '|' . $urlInfo;
103 | $data = $this->_cache->load($cacheKey);
104 |
105 | if ($data) {
106 | $data = unserialize($data);
107 | } else {
108 | $reader = $this->_readerPool->getReader($scopeType);
109 | if ($scopeType === ScopeConfigInterface::SCOPE_TYPE_DEFAULT) {
110 | $data = $reader->read();
111 | } else {
112 | $data = $reader->read($scopeCode);
113 | }
114 |
115 | $this->_cache->save(serialize($data), $cacheKey, [self::CACHE_TAG]);
116 | }
117 | $this->_scopes[$code] = $this->_dataFactory->create(['data' => $data]);
118 | }
119 | return $this->_scopes[$code];
120 | }
121 |
122 | /**
123 | * Retrieve scope code value
124 | *
125 | * @param string $scopeType
126 | * @param string|\Magento\Framework\DataObject|null $scopeCode
127 | * @return string
128 | */
129 | protected function _getScopeCode($scopeType, $scopeCode)
130 | {
131 | return $this->getScopeCodeResolver()->resolve($scopeType, $scopeCode);
132 | }
133 |
134 | /**
135 | * @deprecated
136 | * @return ScopeCodeResolver
137 | */
138 | public function getScopeCodeResolver()
139 | {
140 | if ($this->scopeCodeResolver === null) {
141 | $this->scopeCodeResolver = ObjectManager::getInstance()->get(ScopeCodeResolver::class);
142 | }
143 | return $this->scopeCodeResolver;
144 | }
145 |
146 | /**
147 | * @deprecated
148 | * @return RequestInterface
149 | */
150 | private function getRequest()
151 | {
152 | if ($this->request === null) {
153 | $this->request = ObjectManager::getInstance()->get(RequestInterface::class);
154 | }
155 | return $this->request;
156 | }
157 |
158 | /**
159 | * Clear cache of all scopes
160 | *
161 | * @return void
162 | */
163 | public function clean()
164 | {
165 | $this->_scopes = [];
166 | $this->_cache->clean(\Zend_Cache::CLEANING_MODE_MATCHING_TAG, [self::CACHE_TAG]);
167 | }
168 | }
169 |
--------------------------------------------------------------------------------
/Model/Test.php:
--------------------------------------------------------------------------------
1 | _dataHelper = $dataHelper;
64 | $this->_logger = $logger;
65 | }
66 |
67 | public function config($urls)
68 | {
69 |
70 | //$returnUrl = $this->getUrl('qenta_checkoutpage/processing/return', array('_secure' => true, '_nosid' => true));
71 |
72 | $urls['service'] = $this->_dataHelper->getConfigData('options/service_url') ?: join(array(
73 | parse_url($this->_dataHelper->getReturnUrl(), PHP_URL_SCHEME),
74 | '://',
75 | parse_url($this->_dataHelper->getReturnUrl(), PHP_URL_HOST)
76 | ));
77 |
78 | $init = new \QentaCEE\QPay\FrontendClient($this->_dataHelper->getConfigArray());
79 | $init->setPluginVersion($this->_dataHelper->getPluginVersion());
80 |
81 | $init->setOrderReference('Configtest #' . uniqid());
82 |
83 | if ($this->_dataHelper->getConfigData('options/sendconfirmemail')) {
84 | $init->setConfirmMail($this->_dataHelper->getStoreConfigData('trans_email/ident_general/email'));
85 | }
86 |
87 | $consumerData = new \QentaCEE\Stdlib\ConsumerData();
88 | $consumerData->setIpAddress($this->_dataHelper->getClientIp());
89 | $consumerData->setUserAgent($this->_dataHelper->getUserAgent());
90 |
91 | $init->setAmount(10)
92 | ->setCurrency('EUR')
93 | ->setPaymentType(\QentaCEE\QPay\PaymentType::SELECT)
94 | ->setOrderDescription('Configtest #' . uniqid())
95 | ->setSuccessUrl($urls['return'])
96 | ->setPendingUrl($urls['return'])
97 | ->setCancelUrl($urls['return'])
98 | ->setFailureUrl($urls['return'])
99 | //->setConfirmUrl(Mage::getUrl('qenta_checkoutpage/processing/confirm', array('_secure' => true, '_nosid' => true)))
100 | ->setConfirmUrl($urls['confirm'])
101 | ->setServiceUrl($urls['service'])
102 | ->setConsumerData($consumerData);
103 |
104 | if (strlen($this->_dataHelper->getConfigData('options/bgcolor') ?? '')) {
105 | $init->setBackgroundColor($this->_dataHelper->getConfigData('options/bgcolor'));
106 | }
107 |
108 | if (strlen($this->_dataHelper->getConfigData('options/displaytext') ?? '')) {
109 | $init->setDisplayText($this->_dataHelper->getConfigData('options/displaytext'));
110 | }
111 |
112 | if (strlen($this->_dataHelper->getConfigData('options/imageurl') ?? '')) {
113 | $init->setImageUrl($this->_dataHelper->getConfigData('options/imageurl'));
114 | }
115 |
116 | $initResponse = $init->initiate();
117 |
118 | if ($initResponse->getStatus() == \QentaCEE\QPay\Response\Initiation::STATE_FAILURE) {
119 | $msg = $initResponse->getError()->getConsumerMessage();
120 | if (!strlen($msg ?? '')) {
121 | $msg = $initResponse->getError()->getMessage();
122 | }
123 |
124 | throw new \Exception($msg);
125 | }
126 |
127 | return true;
128 | }
129 | }
130 |
--------------------------------------------------------------------------------
/.docker/magento2/init.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | set -e
4 |
5 | trap exit SIGTERM
6 | touch /tmp/shop.log
7 |
8 | # If we are in Github plugin repo CI environment
9 | CI_REPO_URL=${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}
10 | if [[ ${CI_REPO_URL} == ${PLUGIN_URL//.git/} ]]; then
11 | PLUGIN_VERSION=${GITHUB_SHA}
12 | CI='true'
13 | fi
14 |
15 | if [[ -z ${MAGENTO2_BASEURL} ]]; then
16 | echo "MAGENTO2_BASEURL not specified."
17 | if [[ -n ${NGROK_TOKEN} ]]; then
18 | echo "Launching ngrok to get temporary URL"
19 | MAGENTO2_BASEURL=$(ngrok.sh ${NGROK_TOKEN})
20 | else
21 | echo "No NGROK_TOKEN specified. Using localhost as URL"
22 | MAGENTO2_BASEURL=localhost
23 | fi
24 | fi
25 |
26 | echo "Waiting for DB host ${MAGENTO2_DB_HOST}"
27 |
28 | while ! mysqladmin ping -h"${MAGENTO2_DB_HOST}" --silent; do
29 | sleep 10
30 | done
31 |
32 | function create_db() {
33 | echo "Creating Database"
34 | }
35 |
36 | function install_core() {
37 | echo "Install Core"
38 | composer install
39 | }
40 |
41 | function switch_version() {
42 | echo "Switchting to Magento2 ${MAGENTO2_VERSION}"
43 | cd /var/www/magento2
44 | git fetch --all
45 | git checkout ${MAGENTO2_VERSION} || echo "Invalid MAGENTO2_VERSION specified"
46 | rm -r /var/www/html
47 | ln -s /var/www/magento2/pub /var/www/html
48 | }
49 |
50 | function install_sample_data() {
51 | echo "Installing Sample Data"
52 | cd /var/www/magento2/magento2-sample-data
53 | git fetch --all
54 | git checkout ${MAGENTO2_VERSION}
55 | cd ..
56 | php -f magento2-sample-data/dev/tools/build-sample-data.php -- --ce-source="/var/www/magento2/"
57 | bin/magento cache:clean
58 | bin/magento setup:upgrade
59 | }
60 |
61 | function install_language_pack() {
62 | echo "Installing German Language Pack"
63 | cd /var/www/magento2
64 | composer require splendidinternet/mage2-locale-de-de
65 | bin/magento config:set general/locale/code de_DE
66 | bin/magento config:set general/country/default at
67 | }
68 |
69 | function install_plugin() {
70 | echo "Installing Extension"
71 | local PLUGIN_DIR=/tmp/plugin/
72 | if [[ -n ${PLUGIN_URL} && ${PLUGIN_URL} != 'local' ]]; then
73 | PLUGIN_DIR=$(mktemp -d)
74 | if [[ -z ${PLUGIN_VERSION} || ${PLUGIN_VERSION} == 'latest' ]]; then
75 | git clone -b ${PLUGIN_VERSION} ${PLUGIN_URL} ${PLUGIN_DIR}
76 | else
77 | git clone ${PLUGIN_URL} ${PLUGIN_DIR}
78 | fi
79 | fi
80 | cd /var/www/magento2
81 | composer config minimum-stability dev
82 | composer config repositories.qenta path ${PLUGIN_DIR}
83 | composer config --no-plugins allow-plugins.dealerdirect/phpcodesniffer-composer-installer true
84 | composer config --no-plugins allow-plugins.laminas/laminas-dependency-plugin true
85 | composer config --no-plugins allow-plugins.magento/magento-composer-installer true
86 | composer require qenta/magento2-qcp
87 | bin/magento cache:clean
88 | bin/magento setup:upgrade
89 | bin/magento cache:clean
90 | (sleep 10; bin/magento cache:flush >&/dev/null)&
91 | }
92 |
93 | function run_periodic_flush() {
94 | local INTERVAL=${1:-60}
95 | while sleep ${INTERVAL}; do bin/magento cache:clean >& /dev/null & done &
96 | }
97 |
98 | function setup_store() {
99 | bin/magento setup:install \
100 | --admin-firstname=QENTA \
101 | --admin-lastname=Admin \
102 | --admin-email=${MAGENTO2_ADMIN_EMAIL} \
103 | --admin-user=${MAGENTO2_ADMIN_USER} \
104 | --admin-password=${MAGENTO2_ADMIN_PASS} \
105 | --base-url=https://${MAGENTO2_BASEURL} \
106 | --db-host=${MAGENTO2_DB_HOST} \
107 | --db-name=${MAGENTO2_DB_NAME} \
108 | --db-user=${MAGENTO2_DB_USER} \
109 | --db-password=${MAGENTO2_DB_PASS} \
110 | --db-prefix=qcp \
111 | --currency=EUR \
112 | --search-engine=elasticsearch7 \
113 | --timezone=Europe/Vienna \
114 | --language=de_DE \
115 | --elasticsearch-host=magento2_elasticsearch_qcp \
116 | --backend-frontname=admin_qenta
117 | bin/magento cron:run
118 | bin/magento setup:upgrade
119 | }
120 |
121 | function print_info() {
122 | echo
123 | echo '####################################'
124 | echo
125 | echo "Shop: https://${MAGENTO2_BASEURL}"
126 | echo "Admin Panel: https://${MAGENTO2_BASEURL}/admin_qenta/"
127 | echo "User: ${MAGENTO2_ADMIN_USER}"
128 | echo "Password: ${MAGENTO2_ADMIN_PASS}"
129 | echo
130 | echo '####################################'
131 | echo
132 | }
133 |
134 | function _log() {
135 | echo "${@}" >> /tmp/shop.log
136 | }
137 |
138 | if [[ -e wp-config.php ]]; then
139 | echo "Shop detected. Skipping installations"
140 | MAGENTO2_BASEURL=$(echo "BLABLABLA")
141 | else
142 | switch_version ${MAGENTO2_VERSION}
143 | _log "Magento2 version set to: ${MAGENTO2_VERSION}"
144 |
145 | install_core
146 | _log "Shop installed"
147 |
148 | setup_store
149 | _log "store set up"
150 |
151 | install_language_pack
152 | _log "installed 3rd party language pack de_DE"
153 |
154 | install_sample_data
155 | _log "Sample data installed"
156 |
157 | if [[ -n ${PLUGIN_URL} ]]; then
158 | install_plugin
159 | _log "plugin installed"
160 | fi
161 | if [[ -n ${OVERRIDE_api_uri} ]]; then
162 | change_api_uri "${OVERRIDE_api_uri}" &&
163 | _log "changed API URL to ${OVERRIDE_api_uri}" &&
164 | _api_uri_changed=true
165 | fi
166 | fi
167 | if [[ ${CI} != 'true' ]]; then
168 | (sleep 1; print_info) &
169 | fi
170 |
171 | run_periodic_flush 3m
172 |
173 | _log "url=https://${MAGENTO2_BASEURL}"
174 | _log "ready"
175 |
176 | echo "ready" > /tmp/debug.log
177 |
178 | mkdir -p /var/www/magento2/log
179 | touch /var/www/magento2/log/exception.log
180 |
181 | apache2-foreground "$@" &
182 | tail -f /var/www/magento2/log/exception.log
183 |
--------------------------------------------------------------------------------
/i18n/de_AT.csv:
--------------------------------------------------------------------------------
1 | "Active payment methods:","Verfügbare Zahlungsmittel:"
2 | "Allowed Customer Group","Erlaubte Kundengruppen"
3 | "Amount","Betrag"
4 | "An error occurred during the payment process","Während des Bezahlprozesses ist ein Fehler aufgetreten."
5 | "Bank account owner","Kontoinhaber"
6 | "Billing/Shipping Address must be identical","Zahlungs- und Versandadresse müssen identisch sein."
7 | "Choose your bank...","Wählen Sie bitte Ihre Bank."
8 | "Configuration test ok","Konfigurationstest OK"
9 | "Configuration","Konfiguration"
10 | "consent","Zustimmung"
11 | "Consumer e-mail address","E-mail-Adresse des Konsumenten"
12 | "Consumer wallet ID","Wallet-ID des Konsumenten"
13 | "Contact Form","Kontaktformular"
14 | "Create order before payment","Immer"
15 | "Create order after payment","Nur für erfolgreiche Zahlungen"
16 | "Credit number","Gutschriftsnummer"
17 | "Customer statement","Shop-Referenz im Buchunstext"
18 | "Currency","Währung"
19 | "Demo","Demo"
20 | "Desktop","Desktop"
21 | "Existing order","Bestehender Auftrag"
22 | "Existing order data","Daten zum bestehenden Auftrag"
23 | "Foreign payment methods:","Zahlungsmittel von Drittanbietern:"
24 | "fraud attemmpt detected, cart has been modified during checkout!","Ein Betrugsversuch wurde festgestellt. Der Warenkorb wurde während des Bezahlvorganges verändert."
25 | "Fund Transfer","Auszahlung"
26 | "Fund transfer type","Auszahlungsart"
27 | "Fund transfer submitted successfully!","Auszahlung erfolgreich durchgeführt."
28 | "I agree that the data which are necessary for the liquidation of purchase on account and which are used to complete the identy and credit check are transmitted to payolution. My %s can be revoked at any time with effect for the future.","Mit der Übermittlung jener Daten an payolution, die für die Abwicklung des Zahlungen mit Kauf auf Rechnung und die Identitäts- und Bonitätsprüfung erforderlichen sind, bin ich einverstanden. Meine %s kann ich jederzeit mit Wirkung für die Zukunft widerrufen."
29 | "Iframe","Iframe"
30 | "Installed Modules:","Installierte Module:"
31 | "Invalid fund transfer type","Ungültige Auszahlungsart"
32 | "No order number found.","Auftragsnummer wurde nicht gefunden."
33 | "Order with obligation to pay", "Zahlungspflichtig bestellen"
34 | "Order description","Auftragsbeschreibung"
35 | "Order number","Auftragsnummer"
36 | "Order reference","Auftragsreferenz"
37 | "Payment Methods","Zahlungsmittel"
38 | "Please enter a valid e-mail address (reply to).","Bitte geben Sie eine gültige E-Mail-Addresse ein."
39 | "Please enter a valid e-mail address.","Bitte geben Sie eine gültige E-Mail Addresse ein."
40 | "Please select the fund transfer type","Bitte wählen Sie die Auszahlungsart."
41 | "Plugin name: %product","Plugin Name: %product"
42 | "Plugin version: %product","Plugin Version: %product"
43 | "Popup","Pop-up"
44 | "Product: %product","Produkt: %product"
45 | "Production","Produktion"
46 | Provider,Provider
47 | "Redirect","Weiterleitung"
48 | "Refund not allowed for this order.","Rückerstattung ist für diesen Auftrag nicht erlaubt."
49 | "Send support request","Support-Anfrage senden"
50 | "SEPA-CT data","SEPA-CT Daten"
51 | "Smartphone","Smartphone"
52 | "Source order number","Quellauftragsnummer"
53 | "Submit Transfer","Auszahlung durchführen"
54 | "Support request sent successfully!","Support-Anfrage erfolgreich gesendet."
55 | "Support Request","Support-Anfrage"
56 | "Tablet","Tablet"
57 | "Test","Test"
58 | "The payment authorization is pending.","Ihre Zahlung wurde vom Finanzdienstleister noch nicht bestätigt."
59 | "The payment has been successfully completed.","Die Zahlung wurde erfolgreich abgeschlossen."
60 | "The Customer ID has a fixed length of 7.","Die Customer-ID hat ein fixe Länge von 7 Zeichen."
61 | "To","An"
62 | "Version: %product","Version: %product"
63 | "Void not possible anymore for this payment, please try cancel instead!","Das Aufheben der Authorisierung ist nicht mehr möglich."
64 | "Qenta Checkout Page Fund Transfer","Qenta Checkout Page Auszahlung"
65 | "Qenta Checkout Page AfterPay","Qenta Checkout Page AfterPay Rechnung und Ratenzahlung"
66 | "Qenta Checkout Page Salamantex","Qenta Checkout Page Salamantex (Crypto)"
67 | "Qenta Checkout Page Credit Card - Mail Order / Telephone Order","Qenta Checkout Page Kreditkarte - Post-/Telefonbestellung"
68 | "Qenta Checkout Page Credit Card","Qenta Checkout Page Kreditkarte"
69 | "Qenta Checkout Page eps Online-Überweisung","Qenta Checkout Page eps-Überweisung"
70 | "Qenta Checkout Page Invoice","Qenta Checkout Page Rechnung"
71 | "Qenta Checkout Page PayPal","Qenta Checkout Page PayPal"
72 | "Qenta Checkout Page paysafecard","Qenta Checkout Page paysafecard"
73 | "Qenta Checkout Page Przelewy24","Qenta Checkout Page Przelewy24"
74 | "Qenta Checkout Page Select","Qenta Checkout Page Zahlungsmittelauswahl"
75 | "Qenta Checkout Page SEPA Direct Debit","Qenta Checkout Page SEPA Lastschrift"
76 | "Qenta Checkout Page Online bank transfer.","Qenta Checkout Page Sofort."
77 | "Qenta Checkout Page Fund Transfer","Qenta Checkout Page Auszahlung"
78 | "Qenta Checkout Page Support Request","Qenta Checkout Page Support-Anfrage"
79 | "Qenta Checkout Page Support","Qenta Checkout Page Support"
80 | "You will be redirected to Qenta Checkout Page when you place an order.","Sie werden nach der Bestellung zur Bezahlung zu unserem Zahlungsdienstleister Qenta weitergeleitet."
81 | "Your e-mail address","Ihre E-Mail-Adresse"
82 | "Your message","Ihre Nachricht"
83 | "Your order will be processed as soon as we receive the payment confirmation from your bank.","Ihre Bestellung wird vearbeitet, sobald wir die Zahlungsbestätigung Ihrer Bank erhalten haben."
84 | "You have canceled the payment process!","Der Bezahlprozess wurde abgebrochen."
85 | "You will now be redirected", "Sie werden nun weitergeleitet."
86 | "If you are not redirected, please click", "Falls Sie nicht weitergeleitet werden, klicken Sie bitte"
87 |
--------------------------------------------------------------------------------