|
|
@@ -0,0 +1,341 @@
|
|
|
+<?xml version="1.0" encoding="UTF-8"?>
|
|
|
+<!-- EN-Revision: 18748 -->
|
|
|
+<!-- Reviewed: no -->
|
|
|
+<sect2 id="zend.validate.set.creditcard">
|
|
|
+ <title>CreditCard</title>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ <classname>Zend_Validate_CreditCard</classname> erlaubt es zu prüfen ob ein angegebener
|
|
|
+ Wert eine Kreditkarten Nummer sein könnte.
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ Eine Kreditkarte enthält verschiedene Elemente an Metadaten, inklusive ein Hologramm, die
|
|
|
+ Accountnummer, Logo, Ablaufdatum, Sicherheitscode und den Namen des Kreditkartenbesitzers.
|
|
|
+ Die Algorithmen für die Prüfung der Kombination an Metadaten sind nur der ausgebenden
|
|
|
+ Firma bekannt, und sollten mit Ihnen zum Zwecke der Zahlung geprüft werden. Trotzdem ist es
|
|
|
+ oft nützlich zu wissen ob eine akutell angegebene Nummer in den Bereich der möglichen
|
|
|
+ Nummern fällt <emphasis>bevor</emphasis> so eine Überprüfung durchgeführt wird, und daher
|
|
|
+ prüft <classname>Zend_Validate_CreditCard</classname> einfach ob die angegebene
|
|
|
+ Kreditkartennummer entspricht.
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ Für die Fälle in denen man ein Service hat, das tiefere Prüfungen durchführt, bietet
|
|
|
+ <classname>Zend_Validate_CreditCard</classname> auch die Möglichkeit einen Service
|
|
|
+ Callback anzuhängen der ausgeführt wird sobald die Kreditkartennummer vorbehaltlich als
|
|
|
+ gültig geprüft wurde; dieser Callback wird dann ausgeführt, und sein Rückgabewert wird
|
|
|
+ die komplette Gültigkeit erkennen.
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ Die folgenden Kreditkarteninstitute werden akzeptiert:
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <itemizedlist>
|
|
|
+ <listitem>
|
|
|
+ <para>
|
|
|
+ <emphasis>American Express</emphasis>
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ <emphasis>China UnionPay</emphasis>
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ <emphasis>Diners Club Card Blanche</emphasis>
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ <emphasis>Diners Club International</emphasis>
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ <emphasis>Diners Club US & Canada</emphasis>
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ <emphasis>Discover Card</emphasis>
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ <emphasis>JCB</emphasis>
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ <emphasis>Laser</emphasis>
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ <emphasis>Maestro</emphasis>
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ <emphasis>MasterCard</emphasis>
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ <emphasis>Solo</emphasis>
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ <emphasis>Visa</emphasis>
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ <emphasis>Visa Electron</emphasis>
|
|
|
+ </para>
|
|
|
+ </listitem>
|
|
|
+ </itemizedlist>
|
|
|
+
|
|
|
+ <note>
|
|
|
+ <title>Ungültige Institute</title>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ Die Institute <emphasis>Bankcard</emphasis> und <emphasis>Diners Club
|
|
|
+ enRoute</emphasis> existieren nicht mehr. Deshalb werden Sie als ungültig erkannt.
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ <emphasis>Switch</emphasis> wurde zu <emphasis>Visa</emphasis> umbenannt und wird daher
|
|
|
+ auch als ungültig erkannt.
|
|
|
+ </para>
|
|
|
+ </note>
|
|
|
+
|
|
|
+ <sect3 id="zend.validate.set.creditcard.basic">
|
|
|
+ <title>Grundsätzliche Verwendung</title>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ Es gibt verschiedene Kreditkarten Institute wie mit
|
|
|
+ <classname>Zend_Validate_CreditCard</classname> geprüft werden können. Standardmäßig
|
|
|
+ werden alle bekannte Institute akzeptiert. Siehe das folgende Beispiel:
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <programlisting language="php"><![CDATA[
|
|
|
+$valid = new Zend_Validate_CreditCard();
|
|
|
+if ($valid->isValid($input)) {
|
|
|
+ // Die Eingabe scheint gültig zu sein
|
|
|
+} else {
|
|
|
+ // Die Eingabe ist ungültig
|
|
|
+}
|
|
|
+]]></programlisting>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ Das oben stehende Beispiel würde alle bekannten Kreditkarten Institute als gültig
|
|
|
+ erkennen.
|
|
|
+ </para>
|
|
|
+ </sect3>
|
|
|
+
|
|
|
+ <sect3 id="zend.validate.set.creditcard.institute">
|
|
|
+ <title>Definierte Kreditkarte akzeptieren</title>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ Manchmal ist es notwendig nur definierte Kreditkarten Institute zu akzeptieren statt
|
|
|
+ alle; z.B wenn man einen Webshop hat der nur Visa und American Express Karten
|
|
|
+ akzeptiert. <classname>Zend_Validate_CreditCard</classname> erlaubt einem exakt das zu
|
|
|
+ tun, indem auf genau diese Institute limitiert wird.
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ Um ein Limit zu verwenden kann man entweder spezifische Institute bei der Initiierung
|
|
|
+ angeben, oder im nachhinein durch Verwendung von <methodname>setType()</methodname>.
|
|
|
+ Jede kann verschiedene Argumente verwenden.
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ Man kann ein einzelnes Institut angeben:
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <programlisting language="php"><![CDATA[
|
|
|
+$valid = new Zend_Validate_CreditCard(
|
|
|
+ Zend_Validate_CreditCard::AMERICAN_EXPRESS
|
|
|
+);
|
|
|
+]]></programlisting>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ Wenn man mehrere Institute erlauben will, dann kann man diese als Array angeben:
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <programlisting language="php"><![CDATA[
|
|
|
+$valid = new Zend_Validate_CreditCard(array(
|
|
|
+ Zend_Validate_CreditCard::AMERICAN_EXPRESS,
|
|
|
+ Zend_Validate_CreditCard::VISA
|
|
|
+));
|
|
|
+]]></programlisting>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ Wie bei allen Prüfern kann man auch ein assoziatives Array an Optionen oder eine
|
|
|
+ Instanz von Zend_Config angeben. In diesem Fall muß man die Institute mit dem
|
|
|
+ Arrayschlüssel <property>type</property> angeben wie hier simuliert:
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <programlisting language="php"><![CDATA[
|
|
|
+$valid = new Zend_Validate_CreditCard(array(
|
|
|
+ 'type' => array(Zend_Validate_CreditCard::AMERICAN_EXPRESS)
|
|
|
+));
|
|
|
+]]></programlisting>
|
|
|
+
|
|
|
+ <table id="zend.validate.set.creditcard.institute.table">
|
|
|
+ <title>Konstanten für Kreditkarten Institute</title>
|
|
|
+ <tgroup cols="5">
|
|
|
+ <thead>
|
|
|
+ <row>
|
|
|
+ <entry>Institut</entry>
|
|
|
+ <entry>Konstante</entry>
|
|
|
+ </row>
|
|
|
+ </thead>
|
|
|
+
|
|
|
+ <tbody>
|
|
|
+ <row>
|
|
|
+ <entry><emphasis>American Express</emphasis></entry>
|
|
|
+ <entry><constant>AMERICAN_EXPRESS</constant></entry>
|
|
|
+ </row>
|
|
|
+
|
|
|
+ <row>
|
|
|
+ <entry><emphasis>China UnionPay</emphasis></entry>
|
|
|
+ <entry><constant>UNIONPAY</constant></entry>
|
|
|
+ </row>
|
|
|
+
|
|
|
+ <row>
|
|
|
+ <entry><emphasis>Diners Club Card Blanche</emphasis></entry>
|
|
|
+ <entry><constant>DINERS_CLUB</constant></entry>
|
|
|
+ </row>
|
|
|
+
|
|
|
+ <row>
|
|
|
+ <entry><emphasis>Diners Club International</emphasis></entry>
|
|
|
+ <entry><constant>DINERS_CLUB</constant></entry>
|
|
|
+ </row>
|
|
|
+
|
|
|
+ <row>
|
|
|
+ <entry><emphasis>Diners Club US & Canada</emphasis></entry>
|
|
|
+ <entry><constant>DINERS_CLUB_US</constant></entry>
|
|
|
+ </row>
|
|
|
+
|
|
|
+ <row>
|
|
|
+ <entry><emphasis>Discover Card</emphasis></entry>
|
|
|
+ <entry><constant>DISCOVER</constant></entry>
|
|
|
+ </row>
|
|
|
+
|
|
|
+ <row>
|
|
|
+ <entry><emphasis>JCB</emphasis></entry>
|
|
|
+ <entry><constant>JCB</constant></entry>
|
|
|
+ </row>
|
|
|
+
|
|
|
+ <row>
|
|
|
+ <entry><emphasis>Laser</emphasis></entry>
|
|
|
+ <entry><constant>LASER</constant></entry>
|
|
|
+ </row>
|
|
|
+
|
|
|
+ <row>
|
|
|
+ <entry><emphasis>Maestro</emphasis></entry>
|
|
|
+ <entry><constant>MAESTRO</constant></entry>
|
|
|
+ </row>
|
|
|
+
|
|
|
+ <row>
|
|
|
+ <entry><emphasis>MasterCard</emphasis></entry>
|
|
|
+ <entry><constant>MASTERCARD</constant></entry>
|
|
|
+ </row>
|
|
|
+
|
|
|
+ <row>
|
|
|
+ <entry><emphasis>Solo</emphasis></entry>
|
|
|
+ <entry><constant>Solo</constant></entry>
|
|
|
+ </row>
|
|
|
+
|
|
|
+ <row>
|
|
|
+ <entry><emphasis>Visa</emphasis></entry>
|
|
|
+ <entry><constant>VISA</constant></entry>
|
|
|
+ </row>
|
|
|
+
|
|
|
+ <row>
|
|
|
+ <entry><emphasis>Visa Electron</emphasis></entry>
|
|
|
+ <entry><constant>VISA</constant></entry>
|
|
|
+ </row>
|
|
|
+ </tbody>
|
|
|
+ </tgroup>
|
|
|
+ </table>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ Man kann Institute auch im Nachhinein setzen oder hinzufügen indem die Methoden
|
|
|
+ <methodname>setType()</methodname>, <methodname>addType()</methodname> und
|
|
|
+ <methodname>getType()</methodname> verwendet werden.
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <programlisting language="php"><![CDATA[
|
|
|
+$valid = new Zend_Validate_CreditCard();
|
|
|
+$valid->setType(array(
|
|
|
+ Zend_Validate_CreditCard::AMERICAN_EXPRESS,
|
|
|
+ Zend_Validate_CreditCard::VISA
|
|
|
+));
|
|
|
+]]></programlisting>
|
|
|
+
|
|
|
+ <note>
|
|
|
+ <title>Standard Institute</title>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ Wenn bei der Initiierung kein Institut angegeben wird, dann wird
|
|
|
+ <emphasis>ALL</emphasis> verwendet, welches alle Institute auf einmal verwendet.
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ In diesem Fall ist die Verwendung von <methodname>addType</methodname> sinnlos
|
|
|
+ weil bereits alle Institute hinzugefügt wurden.
|
|
|
+ </para>
|
|
|
+ </note>
|
|
|
+ </sect3>
|
|
|
+
|
|
|
+ <sect3 id="zend.validate.set.creditcard.servicecheck">
|
|
|
+ <title>Prüfung durch Verwendung einer fremden API</title>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ Wie vorher erwähnt prüft <classname>Zend_Validate_CreditCard</classname> nur die
|
|
|
+ Kreditkarten Nummer. Glücklicherweise bieten einige Institute online APIs welche
|
|
|
+ eine Kreditkarten Nummer durch Verwendung von Algorithmen prüfen kann, welche
|
|
|
+ nicht öffentlich bekannt sind. Die meisten dieser Services sind zu bezahlen.
|
|
|
+ Deshalb ist diese Art der Prüfung standardmäßig deaktiviert.
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ Wenn man auf so eine API zugreift, kann man diese als Addon für
|
|
|
+ <classname>Zend_Validate_CreditCard</classname> verwenden um die Sicherheit der
|
|
|
+ Prüfung zu erhöhen.
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ Um das zu tun muss man einfach einen Callback angeben der aufgerufen wird wenn die
|
|
|
+ generische Prüfung erfolgreich war. Das verhindert das die API für ungültige Nummern
|
|
|
+ aufgerufen wird, was wiederum die Performance der Anwendung erhöht.
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ <methodname>setService()</methodname> setzt ein neues Service und
|
|
|
+ <methodname>getService()</methodname> gibt das gesetzte Service zurück. Als
|
|
|
+ Option für die Konfiguration kann man den Arrayschlüssel '<property>service</property>'
|
|
|
+ bei der Initiierung verwenden. Für Details über mögliche Optionen kann man unter
|
|
|
+ <link linkend="zend.validate.set.callback" /> nachsehen.
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <programlisting language="php"><![CDATA[
|
|
|
+// Die eigene Service Klasse
|
|
|
+class CcService
|
|
|
+{
|
|
|
+ public function checkOnline($cardnumber, $types)
|
|
|
+ {
|
|
|
+ // einige online Prüfungen
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// Die Prüfung
|
|
|
+$service = new CcService();
|
|
|
+$valid = new Zend_Validate_CreditCard(Zend_Validate_CreditCard::VISA);
|
|
|
+$valid->setService(array($service, 'checkOnline'));
|
|
|
+]]></programlisting>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ Wie man sieht wird die Callback Methode mit der Kreditkarten Nummer als erster Parameter
|
|
|
+ aufgerufen, und die akzeptierten Typen als zweiter Parameter.
|
|
|
+ </para>
|
|
|
+ </sect3>
|
|
|
+</sect2>
|
|
|
+<!--
|
|
|
+vim:se ts=4 sw=4 et:
|
|
|
+-->
|