| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- 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.options">
- <title>Unterstützte Optionen für Zend_Validate_CreditCard</title>
- <para>
- Die folgenden Optionen werden für <classname>Zend_Validate_CreditCard</classname>
- unterstützt:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <emphasis><property>service</property></emphasis>: Ein Callback zu einem Online
- Service welcher zusätzlich für die Prüfung verwendet wird.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis><property>type</property></emphasis>: Der Typ der Kreditkarte der
- geprüft werden soll. Siehe die folgende Liste an Instituten für Details.
- </para>
- </listitem>
- </itemizedlist>
- </sect3>
- <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 <classname>Zend_Config</classname> 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="2">
- <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
- <constant>ALL</constant> 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
- <acronym>API</acronym>s 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 <acronym>API</acronym> 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 <acronym>API</acronym> 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">Callback</link> 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>
|