Completed
Push — master ( 341936...178071 )
by Florian
03:31
created

PrivacyDeclaration::getFallbackText()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
c 0
b 0
f 0
rs 10
cc 1
eloc 2
nc 1
nop 1
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>Zusätzliche Hinweise für die Datenschutzerklärung für Kauf auf Rechnung, Ratenzahlung und Zahlung mittels SEPA-Basis-Lastschrift von **company** (im Folgenden: \"wir\")</strong></br>
51
            <span><i>(Stand: 17.03.2016)</i></span>
52
        </header>
53
        <ol>
54
          <li><p>Bei Kauf auf Rechnung oder Ratenzahlung oder SEPA-Basis-Lastschrift wird von Ihnen während des Bestellprozesses eine datenschutzrechtliche Einwilligung eingeholt. Folgend finden Sie eine Wiederholung dieser Bestimmungen, die lediglich informativen Charakter haben.</p></li>
55
          <li><p>Bei Auswahl von Kauf auf Rechnung oder Ratenzahlung oder Bezahlung mittels SEPA-Basis-Lastschrift werden für die Abwicklung dieser Zahlarten personenbezogene Daten (Vorname, Nachname, Adresse, Email, Telefonnummer, Geburtsdatum, IP-Adresse, Geschlecht) gemeinsam mit für die Transaktionsabwicklung erforderlichen Daten (Artikel, Rechnungsbetrag, Zinsen, Raten, Fälligkeiten, Gesamtbetrag, Rechnungsnummer, Steuern, Währung, Bestelldatum und Bestellzeitpunkt) an payolution übermittelt werden. payolution hat ein berechtigtes Interesse an den Daten und benötigt bzw. verwendet diese um Risikoüberprüfungen durchzuführen.</p></li>
56
          <li>
57
            <p>Zur Überprüfung der Identität bzw. Bonität des Kunden werden Abfragen und Auskünfte bei öffentlich zugänglichen Datenbanken sowie Kreditauskunfteien durchgeführt. Bei nachstehenden Anbietern können Auskünfte und gegebenenfalls Bonitätsinformationen auf Basis mathematisch-statistischer Verfahren eingeholt werden:</p>
58
            <ul>
59
                <li>CRIF GmbH, Diefenbachgasse 35, A-1150 Wien</li>
60
                <li>CRIF AG, Hagenholzstrasse 81, CH-8050 Zürich</li>
61
                <li>Deltavista GmbH, Dessauerstraße 9, D-80992 München</li>
62
                <li>SCHUFA Holding AG, Kormoranweg 5, D-65201 Wiesbaden</li>
63
                <li>KSV1870 Information GmbH, Wagenseilgasse 7, A-1120 Wien</li>
64
                <li>Bürgel Wirtschaftsinformationen GmbH & Co. KG, Gasstraße 18, D-22761 Hamburg</li>
65
                <li>Creditreform Boniversum GmbH, Hellersbergstr. 11, D-41460 Neuss</li>
66
                <li>infoscore Consumer Data GmbH, Rheinstraße 99, D-76532 Baden-Baden</li>
67
                <li>ProfileAddress Direktmarketing GmbH, Altmannsdorfer Strasse 311, A-1230 Wien</li>
68
                <li>Deutsche Post Direkt GmbH, Junkersring 57, D-53844 Troisdorf</li>
69
                <li>payolution GmbH, Am Euro Platz 2, A-1120 Wien</li>
70
            </ul>
71
            <p>payolution 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>payolution ist berechtigt, auch Daten zu etwaigem nicht-vertragsgemäßen Verhalten (z.B. unbestrittene offene Forderungen) zu speichern, zu verarbeiten, zu nutzen und an oben genannte Auskunfteien zu übermitteln.</p>
73
          </li>
74
          <li><p>Wir sind bereits nach den Bestimmungen des Bürgerlichen Gesetzbuches über Finanzierungshilfen zwischen Unternehmern und Verbrauchern, zu einer Prüfung Ihrer Kreditwürdigkeit gesetzlich verpflichtet.</p></li>
75
          <li><p>Im Fall eines Kaufs auf Rechnung oder Ratenkauf oder einer Bezahlung mittels SEPA-Basis-Lastschrift werden der payolution GmbH Daten über die Aufnahme (zu Ihrer Person, Kaufpreis, Laufzeit des Teilzahlungsgeschäfts, Ratenbeginn) und vereinbarungsgemäße Abwicklung (z.B. vorzeitige Rückzahlung, Laufzeitverlängerung, erfolgte Rückzahlungen) dieses Teilzahlungsgeschäfts übermittelt. Nach Abtretung der Kaufpreisforderung wird die forderungsübernehmende Bank die genannten Datenübermittlungen vornehmen. Wir bzw. die Bank, der die Kaufpreisforderung abgetreten wird, werden payolution GmbH auch Daten aufgrund nichtvertragsgemäßer Abwicklung (z.B. Kündigung des Teilzahlungsgeschäfts, Zwangsvollstreckungs-maßnahmen) melden. Diese Meldungen dürfen nach den datenschutzrechtlichen Bestimmungen nur erfolgen, soweit dies zur Wahrung berechtigter Interessen von Vertragspartnern der payolution GmbH oder der Allgemeinheit erforderlich ist und dadurch Ihre schutzwürdigen Belange nicht beeinträchtigt werden. payolution GmbH speichert die Daten, um ihren Vertragspartnern, die gewerbsmäßig Teilzahlungs- und sonstige Kreditgeschäfte an Verbraucher geben, Informationen zur Beurteilung der Kreditwürdigkeit von Kunden geben zu können. An Unternehmen, die gewerbsmäßig Forderungen einziehen und payolution GmbH vertraglich angeschlossen sind, können zum Zwecke der Schuldnerermittlung Adressdaten übermittelt werden. payolution GmbH stellt die Daten ihren Vertragspartnern nur zur Verfügung, wenn diese ein berechtigtes Interesse an der Datenübermittlung glaubhaft darlegen. payolution GmbH übermittelt nur objektive Daten ohne Angabe der Bank; subjektive Werturteile sowie persönliche Einkommens- und Vermögensverhältnisse sind in Auskünften der payolution GmbH nicht enthalten.</p></li>
76
          <li><p>Die im Bestellprozess durch Einwilligung erfolgte Zustimmung zur Datenweitergabe kann jederzeit, auch ohne Angabe von Gründen, uns gegenüber widerrufen können. Die oben genannten gesetzlichen Verpflichtungen zur Überprüfung Ihrer Kreditwürdigkeit bleiben von einem allfälligen Widerruf jedoch unberührt. Sie sind verpflichtet ausschließlich wahrheitsgetreue Angaben gegenüber uns zu machen.</p></li>
77
          <li><p>Sollten Sie Auskunft über die Erhebung, Nutzung, Verarbeitung oder Übermittlung von Sie betreffenden personenbezogenen Daten erhalten wollen oder Auskünfte, Berichtigungen, Sperrungen oder Löschung dieser Daten wünschen, können Sie sich an den Sachbearbeiter für Datenschutz bei payolution wenden:</p></li>
78
        </ol>
79
80
        <footer>Sachbearbeiter für Datenschutz<br />
81
            [email protected]<br />
82
            payolution GmbH<br />
83
            Am Euro Platz 2<br />
84
            1120 Wien<br />
85
            DVR: 4008655
86
        </footer>
87
    ";
88
89
    /**
90
     * PAYONE shop helper
91
     *
92
     * @var \Payone\Core\Helper\Shop
93
     */
94
    protected $shopHelper;
95
96
    /**
97
     * Magento curl object
98
     *
99
     * @var \Magento\Framework\HTTP\Client\Curl
100
     */
101
    protected $curl;
102
103
    /**
104
     * Constructor
105
     *
106
     * @param \Payone\Core\Helper\Shop $shopHelper
107
     */
108
    public function __construct(
109
        \Payone\Core\Helper\Shop $shopHelper,
110
        \Magento\Framework\HTTP\Client\Curl $curl
111
    ) {
112
        $this->shopHelper = $shopHelper;
113
        $this->curl = $curl;
114
        $this->curl->setOption(CURLOPT_SSL_VERIFYPEER, false);
0 ignored issues
show
Documentation introduced by
false is of type boolean, but the function expects a string.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
115
        $this->curl->setOption(CURLOPT_SSL_VERIFYHOST, false);
0 ignored issues
show
Documentation introduced by
false is of type boolean, but the function expects a string.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
116
    }
117
118
    /**
119
     * Request acceptance text from payolution
120
     *
121
     * @param  string $sCompany
122
     * @return string|false
123
     */
124
    protected function getAcceptanceTextFromPayolution($sCompany)
125
    {
126
        $sUrl = $this->sAcceptanceBaseUrl.'?mId='.base64_encode($sCompany).'&lang='.$this->shopHelper->getLocale();
127
        $this->curl->get($sUrl);
128
        $sContent = $this->curl->getBody();
129
        $sPage = false;
130
        if (!empty($sContent) && stripos($sContent, 'payolution') !== false && stripos($sContent, '<header>') !== false) {
131
            //Parse content from HTML-body-tag from the given page
132
            $sRegex = "#<\s*?body\b[^>]*>(.*?)</body\b[^>]*>#s";
133
            preg_match($sRegex, $sContent, $aMatches);
134
            if (is_array($aMatches) && count($aMatches) > 1) {
135
                $sPage = $aMatches[1];
136
                //remove everything before the <header> tag ( a window.close link which wouldn't work in the given context )
137
                $sPage = substr($sPage, stripos($sPage, '<header>'));
138
            }
139
        }
140
        return $sPage;
141
    }
142
143
    /**
144
     * Get acceptance text for the given payolution payment method
145
     *
146
     * @param  string $sPaymentCode
147
     * @return string|false
148
     */
149
    public function getPayolutionAcceptanceText($sPaymentCode)
150
    {
151
        if ((bool)$this->shopHelper->getConfigParam('active', $sPaymentCode, 'payment') === false) {
152
            return false;
153
        }
154
155
        $sCompany = $this->shopHelper->getConfigParam('company', $sPaymentCode, 'payone_payment');
156
        $sPage = $this->getAcceptanceTextFromPayolution($sCompany);
157
        if (!$sPage) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $sPage of type string|false is loosely compared to false; this is ambiguous if the string can be empty. You might want to explicitly use === false instead.

In PHP, under loose comparison (like ==, or !=, or switch conditions), values of different types might be equal.

For string values, the empty string '' is a special case, in particular the following results might be unexpected:

''   == false // true
''   == null  // true
'ab' == false // false
'ab' == null  // false

// It is often better to use strict comparison
'' === false // false
'' === null  // false
Loading history...
158
            $sPage = $this->getFallbackText($sCompany);
159
        }
160
161
        if (!$this->isUtf8($sPage)) {
162
            $sPage = utf8_encode($sPage);
163
        }
164
165
        return $sPage;
166
    }
167
168
    /**
169
     * Get fallback template
170
     *
171
     * @param  string $sCompany
172
     * @return mixed
173
     */
174
    protected function getFallbackText($sCompany)
175
    {
176
        return str_replace('**company**', $sCompany, $this->sFallback);
177
    }
178
179
    /**
180
     * Determine if the string is utf8 encoded
181
     *
182
     * @param  string $sString
183
     * @return bool
184
     */
185
    protected function isUtf8($sString)
186
    {
187
        if (preg_match('!!u', $sString)) { // this is utf-8
188
            return true;
189
        }
190
        return false; // definitely not utf-8
191
    }
192
}