Issues (1092)

Model/Api/Payolution/PrivacyDeclaration.php (3 issues)

1
<?php
2
3
/**
4
 * PAYONE Magento 2 Connector is free software: you can redistribute it and/or modify
5
 * it under the terms of the GNU Lesser General Public License as published by
6
 * the Free Software Foundation, either version 3 of the License, or
7
 * (at your option) any later version.
8
 *
9
 * PAYONE Magento 2 Connector is distributed in the hope that it will be useful,
10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
 * GNU Lesser General Public License for more details.
13
 *
14
 * You should have received a copy of the GNU Lesser General Public License
15
 * along with PAYONE Magento 2 Connector. If not, see <http://www.gnu.org/licenses/>.
16
 *
17
 * PHP version 5
18
 *
19
 * @category  Payone
20
 * @package   Payone_Magento2_Plugin
21
 * @author    FATCHIP GmbH <[email protected]>
22
 * @copyright 2003 - 2017 Payone GmbH
23
 * @license   <http://www.gnu.org/licenses/> GNU Lesser General Public License
24
 * @link      http://www.payone.de
25
 */
26
27
namespace Payone\Core\Model\Api\Payolution;
28
29
use Locale;
30
31
/**
32
 * Class for requesting the privacy declaration from payolution
33
 */
34
class PrivacyDeclaration
35
{
36
    /**
37
     * URL to payolution privacy declaration API
38
     *
39
     * @var string
40
     */
41
    protected $sAcceptanceBaseUrl = 'https://payment.payolution.com/payolution-payment/infoport/dataprivacydeclaration';
42
43
    /**
44
     * Fallback template for the case that payolution server is not reachable or it delivers an unexpected response
45
     *
46
     * @var string
47
     */
48
    protected $sFallback = "
49
        <header>
50
            <strong>Ergänzende Hinweise zur Datenschutzerklärung für Kauf auf Rechnung, per Ratenzahlung und direkter SEPA-Lastschrift von Testfirma GmbH (im Folgenden: „wir“)</strong></br>
51
            <span><i>(Stand: 16.10.2020)</i></span>
52
        </header>
53
        <ol>
54
            <li><p>Durch die Auswahl eines Kaufs auf Rechnung, per Ratenzahlung oder direkter SEPA-Lastschrift, stimmen Sie den Datenschutzbestimmungen der payolution GmbH und der Weiterverarbeitung Ihrer persönlichen Daten zu. Diese Bestimmungen sind nachstehend ausschließlich zu Informationszwecken erneut aufgeführt.</p></li>
55
            <li><p>Wenn Sie die Zahlung auf Rechnung, per Ratenzahlung oder direkter SEPA-Lastschrift auswählen, werden Ihre für die Bearbeitung dieser Zahlungsmethode erforderlichen persönlichen Informationen (Vorname, Nachname, Anschrift, E-Mail-Adresse, Telefonnummer, Geburtsdatum, IP-Adresse, Geschlecht) zusammen mit den für die Ausführung der Transaktion erforderlichen Daten (Artikel, Rechnungsbetrag, Zinsen, Ratenzahlungen, Fälligkeitsdatum, Gesamtbetrag, Rechnungsnummer, Steuerbetrag, Währung, Bestelldatum und -uhrzeit) an die payolution GmbH zum Zwecke der Risikoeinschätzung im Rahmen seiner regulatorischen Verpflichten weitergeleitet.</p></li>
56
            <li>
57
                <p>Zur Identitäts- und/oder Solvenzprüfung des Kunden werden Abfragen und Auskunftsersuchen an öffentlich zugängliche Datenbanken und Kreditauskunfteien weitergeleitet. Es können Informationen, und falls erforderlich, Kreditauskünfte auf Grundlage statistischer Methoden bei den folgenden Anbietern abgefragt werden:</p>
58
                <ul>
59
                    <li>CRIF GmbH, Diefenbachgasse 35, 11 50 Wien, Österreich</li>
60
                    <li>CRIF AG, Hagenholzstrasse 81, 8050 Zürich, Schweiz</li>
61
                    <li>CRIF Bürgel GmbH, Radlkoferstraße 2, 81373 München, Deutschland</li>
62
                    <li>SCHUFA Holding AG, Kormoranweg 5, 65201 Wiesbaden, Deutschland</li>
63
                    <li>KSV1870 Information GmbH, Wagenseilgasse 7, 1100 Wien, Österreich</li>
64
                    <li>Creditreform Boniversum GmbH, Hellersbergstr. 11, 41460 Neuss, Deutschland</li>
65
                    <li><a href=\"https://finance.arvato.com/icdinfoblatt\">infoscore Consumer Data GmbH, Rheinstrasse 99, 76532 Baden-Baden, Deutschland</a></li>
66
                    <li>ProfileAddress Direktmarketing GmbH, Altmannsdorfer Strasse 311, 1230 Wien, Österreich</li>
67
                    <li>Emailage LTD, 1 Fore Street Ave, London, EC2Y 5EJ, Vereinigtes Königreich</li>
68
                    <li>ThreatMetrix, The Base 3/F, Tower C, Evert van de Beekstraat 1, 1118 CL Schiphol, Niederlande</li>
69
                    <li>payolution GmbH, Columbuscenter, Columbusplatz 7-8, 1100 Wien, Österreich</li>
70
                    <li>Universum Business GmbH, Hanauer Landstr. 164, 60314 Frankfurt am Main, Deutschland</li>
71
                </ul>
72
                <p>Die payolution GmbH wird Ihre Angaben zur Bankverbindung (insbesondere Bankleitzahl und Kontonummer) zum Zwecke der Kontonummernprüfung an die SCHUFA Holding AG übermitteln. Die SCHUFA prüft anhand dieser Daten zunächst, ob die von Ihnen gemachten Angaben zur Bankverbindung plausibel sind. Die SCHUFA überprüft, ob die zur Prüfung verwendeten Daten ggf. in Ihrem Datenbestand gespeichert sind und übermittelt sodann das Ergebnis der Überprüfung an payolution zurück. Ein weiterer Datenaustausch wie die Bekanntgabe von Bonitätsinformationen oder eine Übermittlung abweichender Bankverbindungsdaten sowie Speicherung Ihrer Daten im SCHUFA-Datenbestand finden im Rahmen der Kontonummernprüfung nicht statt. Es wird aus Nachweisgründen allein die Tatsache der Überprüfung der Bankverbindungsdaten bei der SCHUFA gespeichert.</p>
73
                <p>Im Fall von vertragswidrigem Verhalten (z. B. Bestehen unstrittiger Forderungen) ist die payolution GmbH ebenfalls zur Speicherung, Verarbeitung, Verwendung von Daten und deren Übermittlung an die o. g. Kreditauskunfteien berechtigt.</p>
74
            </li>
75
            <li><p>Gemäß den Bestimmungen des Bürgerlichen Gesetzbuches über Finanzierungshilfen zwischen Händlern und Konsumenten sind wir gesetzlich zur Prüfung Ihrer Kreditwürdigkeit verpflichtet.</p></li>
76
            <li><p>Im Falle eines Kaufs auf Rechnung, per Ratenzahlung oder direkter SEPA-Lastschrift, werden wir Daten zu den Einzelheiten des entsprechenden Zahlungsvorgangs (Ihre Personendaten, Kaufpreis, Bedingungen des Zahlungsvorgangs, Beginn der Zahlung) und die Vertragsbedingungen (z. B. vorzeitige Zahlung, Verlängerung der Vertragslaufzeit, erfolgte Zahlungen) an die payolution GmbH übermitteln. Nach Abtretung der Kaufpreisforderung wird das Bankinstitut, dem die Forderung abgetreten wurde, die genannte Datenübermittlung vornehmen. Wir und/oder das Bankinstitut sind entsprechend der Abtretung der Kaufpreisforderung ebenfalls zur Meldung von Daten über vertragswidriges Verhalten (z. B. Beendigung der Zahlungsvereinbarung, Zwangsvollstreckungsmaßnahmen) an die payolution GmbH angewiesen. Gemäß den Datenschutzbestimmungen erfolgen diese Meldungen ausschließlich, wenn diese zur Sicherstellung des rechtmäßigen Interesses der Vertragspartner der payolution GmbH oder der Allgemeinheit erforderlich sind und Ihre rechtmäßigen Interessen dadurch nicht beeinträchtigt werden. Die payolution GmbH wird die Daten speichern, um seinen Vertragspartnern, die Konsumenten Ratenzahlungen oder sonstige Kreditvereinbarungen im gewerblichen Rahmen gewähren, Informationen zur Einschätzung der Kreditwürdigkeit von Kunden zur Verfügung stellen zu können. Mit der payolution GmbH in einem Vertragsverhältnis stehende gewerbliche Inkassounternehmen können Adressinformationen zur Ermittlung von Debitoren zur Verfügung gestellt werden. Die payolution GmbH ist dazu angehalten, seinen Vertragspartnern nur dann Daten zu übermitteln, wenn ein glaubwürdiges und rechtmäßiges Interesse an der Datenübermittlung besteht. Die payolution GmbH ist dazu angehalten, ausschließlich objektive Daten ohne Spezifikation an das entsprechende Bankinstitut zu übermitteln. Informationen über subjektive Werteinschätzungen und persönliches Einkommen sind in den von der payolution GmbH zur Verfügung gestellten Informationen nicht enthalten.</p></li>
77
            <li><p>Sie können Ihre Zustimmung zur Datenverarbeitung zum Zwecke der Auftragsabwicklung jederzeit widerrufen. Die o. g. gesetzlichen Verpflichtungen zur Prüfung Ihrer Kreditwürdigkeit bleiben von solchen Widerrufen unberührt.</p></li>
78
            <li><p>Sie sind uns gegenüber zur Angabe von ausschließlich wahrheitsgemäßen und korrekten Informationen verpflichtet.</p></li>
79
            <li><p>Weitere Informationen über die Verarbeitung Ihrer persönlichen Daten finden Sie in der vollständigen Datenschutzrichtlinie hier: <a href=\"https://www.unzer.com/de/privacy-payolution-consumers/\">https://www.unzer.com/de/privacy-payolution-consumers/</a></p></li>
80
            <li><p>Sie können ebenfalls den Sachbearbeiter für Datenschutz der Unzer Group unter der folgenden Adresse kontaktieren:</p></li>
81
        </ol>
82
        
83
        <footer>
84
            [email protected]<br />
85
            payolution GmbH<br />
86
            Columbuscenter, Columbusplatz 7-8<br />
87
            1100 Wien<br />
88
            Registrierungscode – Datenverarbeitung (DVR): 4008655
89
        </footer>
90
    ";
91
92
    /**
93
     * PAYONE shop helper
94
     *
95
     * @var \Payone\Core\Helper\Shop
96
     */
97
    protected $shopHelper;
98
99
    /**
100
     * Magento curl object
101
     *
102
     * @var \Magento\Framework\HTTP\Client\Curl
0 ignored issues
show
The type Magento\Framework\HTTP\Client\Curl was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
103
     */
104
    protected $curl;
105
106
    /**
107
     * @var \Magento\Framework\App\CacheInterface
0 ignored issues
show
The type Magento\Framework\App\CacheInterface was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
108
     */
109
    protected $cache;
110
111
    /**
112
     * Constructor
113
     *
114
     * @param \Payone\Core\Helper\Shop $shopHelper
115
     * @param \Magento\Framework\HTTP\Client\Curl $curl
116
     * @param \Magento\Framework\App\CacheInterface $cache
117
     */
118
    public function __construct(
119
        \Payone\Core\Helper\Shop $shopHelper,
120
        \Magento\Framework\HTTP\Client\Curl $curl,
121
        \Magento\Framework\App\CacheInterface $cache
122
    ) {
123
        $this->shopHelper = $shopHelper;
124
        $this->curl = $curl;
125
        $this->curl->setOption(CURLOPT_SSL_VERIFYPEER, false);
126
        $this->curl->setOption(CURLOPT_SSL_VERIFYHOST, false);
127
        $this->cache = $cache;
128
    }
129
130
    /**
131
     * Request acceptance text from payolution
132
     *
133
     * @param  string $sCompany
134
     * @return string|false
135
     */
136
    protected function getAcceptanceTextFromPayolution($sCompany)
137
    {
138
        $sUrl = $this->sAcceptanceBaseUrl.'?mId='.base64_encode($sCompany).'&lang='.$this->shopHelper->getLocale();
139
        $cacheKey = 'PAYONE_ACCEPTANCE_TEXT_' . sha1($sUrl);
140
        $cache = $this->cache->load($cacheKey);
141
142
        if ($cache !== false) {
143
            return $cache;
144
        }
145
146
        $this->curl->get($sUrl);
147
        $sContent = $this->curl->getBody();
148
        $sPage = false;
149
        if (!empty($sContent) && stripos($sContent, 'payolution') !== false && stripos($sContent, '<header>') !== false) {
150
            //Parse content from HTML-body-tag from the given page
151
            $sRegex = "#<\s*?body\b[^>]*>(.*?)</body\b[^>]*>#s";
152
            preg_match($sRegex, $sContent, $aMatches);
153
            if (is_array($aMatches) && count($aMatches) > 1) {
154
                $sPage = $aMatches[1];
155
                //remove everything before the <header> tag ( a window.close link which wouldn't work in the given context )
156
                $sPage = substr($sPage, stripos($sPage, '<header>'));
157
            }
158
            $this->cache->save($sPage, $cacheKey, [], 86400);
159
        }
160
        return $sPage;
161
    }
162
163
    /**
164
     * Get acceptance text for the given payolution payment method
165
     *
166
     * @param  string $sPaymentCode
167
     * @return string|false
168
     */
169
    public function getPayolutionAcceptanceText($sPaymentCode)
170
    {
171
        if ((bool)$this->shopHelper->getConfigParam('active', $sPaymentCode, 'payment') === false) {
172
            return false;
173
        }
174
175
        $sCompany = $this->shopHelper->getConfigParam('company', $sPaymentCode, 'payone_payment');
176
        try {
177
            $sPage = $this->getAcceptanceTextFromPayolution($sCompany);
178
        } catch (\Exception $exception) {
179
            $sPage = false;
180
        }
181
        if (!$sPage) {
182
            $sPage = $this->getFallbackText($sCompany);
183
        }
184
185
        if (!$this->isUtf8($sPage)) {
186
            $sPage = mb_convert_encoding($sPage, 'UTF-8');
187
        }
188
189
        return $sPage;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $sPage also could return the type array which is incompatible with the documented return type false|string.
Loading history...
190
    }
191
192
    /**
193
     * Get fallback template
194
     *
195
     * @param  string $sCompany
196
     * @return mixed
197
     */
198
    protected function getFallbackText($sCompany)
199
    {
200
        return str_replace('**company**', $sCompany ?? '', $this->sFallback);
201
    }
202
203
    /**
204
     * Determine if the string is utf8 encoded
205
     *
206
     * @param  string $sString
207
     * @return bool
208
     */
209
    protected function isUtf8($sString)
210
    {
211
        if (preg_match('!!u', $sString)) { // this is utf-8
212
            return true;
213
        }
214
        return false; // definitely not utf-8
215
    }
216
}
217