Passed
Push — master ( a30dd3...cd0859 )
by
unknown
04:14 queued 01:35
created

getAcceptanceTextFromPayolution()   B

Complexity

Conditions 7
Paths 4

Size

Total Lines 25
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 7
eloc 16
nc 4
nop 1
dl 0
loc 25
rs 8.8333
c 1
b 0
f 0
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 Test GmbH (im Folgenden: „wir“)</strong></br>
51
            <span><i>(Stand: 08.05.2018)</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, 1120 Wien, Österreich</li>
64
                    <li>Creditreform Boniversum GmbH, Hellersbergstr. 11, 41460 Neuss, Deutschland</li>
65
                    <li>infoscore Consumer Data GmbH, Rheinstrasse 99, 76532 Baden-Baden, Deutschland</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, Inc.,160 W Santa Clara St., Suite 1400, San Jose, CA 95113, USA</li>
69
                    <li>payolution GmbH, Am Euro Platz 2, 1120 Wien, Österreich</li>
70
                </ul>
71
                <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>
72
                <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>
73
            </li>
74
            <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>
75
            <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 Zuweisung der Kaufpreisforderung wird das Bankinstitut, dem die Forderung zugewiesen wurde, die genannte Datenübermittlung vornehmen. Wir und/oder das Bankinstitut sind entsprechend der Zuweisung 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>
76
            <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>
77
            <li><p>Sie sind uns gegenüber zur Angabe von ausschließlich wahrheitsgemäßen und korrekten Informationen verpflichtet.</p></li>
78
            <li><p>Weitere Informationen über die Verarbeitung Ihrer persönlichen Daten finden Sie in der vollständigen Datenschutzrichtlinie hier: <a href=\"https://www.paysafe.com/legal-and-compliance/privacy-policy/\">https://www.paysafe.com/legal-and-compliance/privacy-policy/</a></p></li>
79
            <li><p>Sie können ebenfalls den Sachbearbeiter für Datenschutz der Paysafe Group unter der folgenden Adresse kontaktieren:</p></li>
80
        </ol>
81
        
82
        <footer>
83
            [email protected]<br />
84
            payolution GmbH<br />
85
            Am Euro Platz 2<br />
86
            1120 Wien<br />
87
            Registrierungscode – Datenverarbeitung (DVR): 4008655
88
        </footer>
89
    ";
90
91
    /**
92
     * PAYONE shop helper
93
     *
94
     * @var \Payone\Core\Helper\Shop
95
     */
96
    protected $shopHelper;
97
98
    /**
99
     * Magento curl object
100
     *
101
     * @var \Magento\Framework\HTTP\Client\Curl
0 ignored issues
show
Bug introduced by
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...
102
     */
103
    protected $curl;
104
105
    /**
106
     * @var \Magento\Framework\App\CacheInterface
0 ignored issues
show
Bug introduced by
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...
107
     */
108
    protected $cache;
109
110
    /**
111
     * Constructor
112
     *
113
     * @param \Payone\Core\Helper\Shop $shopHelper
114
     * @param \Magento\Framework\HTTP\Client\Curl $curl
115
     * @param \Magento\Framework\App\CacheInterface $cache
116
     */
117
    public function __construct(
118
        \Payone\Core\Helper\Shop $shopHelper,
119
        \Magento\Framework\HTTP\Client\Curl $curl,
120
        \Magento\Framework\App\CacheInterface $cache
121
    ) {
122
        $this->shopHelper = $shopHelper;
123
        $this->curl = $curl;
124
        $this->curl->setOption(CURLOPT_SSL_VERIFYPEER, false);
125
        $this->curl->setOption(CURLOPT_SSL_VERIFYHOST, false);
126
        $this->cache = $cache;
127
    }
128
129
    /**
130
     * Request acceptance text from payolution
131
     *
132
     * @param  string $sCompany
133
     * @return string|false
134
     */
135
    protected function getAcceptanceTextFromPayolution($sCompany)
136
    {
137
        $sUrl = $this->sAcceptanceBaseUrl.'?mId='.base64_encode($sCompany).'&lang='.$this->shopHelper->getLocale();
138
        $cacheKey = 'PAYONE_ACCEPTANCE_TEXT_' . sha1($sUrl);
139
        $cache = $this->cache->load($cacheKey);
140
141
        if ($cache !== false) {
142
            return $cache;
143
        }
144
145
        $this->curl->get($sUrl);
146
        $sContent = $this->curl->getBody();
147
        $sPage = false;
148
        if (!empty($sContent) && stripos($sContent, 'payolution') !== false && stripos($sContent, '<header>') !== false) {
149
            //Parse content from HTML-body-tag from the given page
150
            $sRegex = "#<\s*?body\b[^>]*>(.*?)</body\b[^>]*>#s";
151
            preg_match($sRegex, $sContent, $aMatches);
152
            if (is_array($aMatches) && count($aMatches) > 1) {
153
                $sPage = $aMatches[1];
154
                //remove everything before the <header> tag ( a window.close link which wouldn't work in the given context )
155
                $sPage = substr($sPage, stripos($sPage, '<header>'));
156
            }
157
            $this->cache->save($sPage, $cacheKey, [], 86400);
158
        }
159
        return $sPage;
160
    }
161
162
    /**
163
     * Get acceptance text for the given payolution payment method
164
     *
165
     * @param  string $sPaymentCode
166
     * @return string|false
167
     */
168
    public function getPayolutionAcceptanceText($sPaymentCode)
169
    {
170
        if ((bool)$this->shopHelper->getConfigParam('active', $sPaymentCode, 'payment') === false) {
171
            return false;
172
        }
173
174
        $sCompany = $this->shopHelper->getConfigParam('company', $sPaymentCode, 'payone_payment');
175
        try {
176
            $sPage = $this->getAcceptanceTextFromPayolution($sCompany);
177
        } catch (\Exception $exception) {
178
            $sPage = false;
179
        }
180
        if (!$sPage) {
181
            $sPage = $this->getFallbackText($sCompany);
182
        }
183
184
        if (!$this->isUtf8($sPage)) {
185
            $sPage = utf8_encode($sPage);
186
        }
187
188
        return $sPage;
189
    }
190
191
    /**
192
     * Get fallback template
193
     *
194
     * @param  string $sCompany
195
     * @return mixed
196
     */
197
    protected function getFallbackText($sCompany)
198
    {
199
        return str_replace('**company**', $sCompany, $this->sFallback);
200
    }
201
202
    /**
203
     * Determine if the string is utf8 encoded
204
     *
205
     * @param  string $sString
206
     * @return bool
207
     */
208
    protected function isUtf8($sString)
209
    {
210
        if (preg_match('!!u', $sString)) { // this is utf-8
211
            return true;
212
        }
213
        return false; // definitely not utf-8
214
    }
215
}
216