osCommerce 2.2 Milestone 2
Micropayment CP IPN (Event) Zahlungsmodul V1.0
Original Autoren: Harald Ponce de Leon, Mark Evans osCommerce Team Members
Micropayment: https://www.micropayment.de
osCommerce: http://www.oscommerce.com
Inhalt
Einleitung
Ich habe dieses Contrib auf Basis von Edith Karnitsch's PayPal_IPN_v2.2-Contrib erstellt.
Es enthält einige Änderungen, da der Ablauf bei Micropayment ein wenig anders ist, als bei PayPal.
Die bekannten Probleme bleiben auch in dieser Version offen. Wer möchte, kann sich gerne daran versuchen eine Lösung zu finden.
Wir arbeiteten seit längerem mit der PayPal-Contrib und den bekannten Problemen und konnten damit leben. Ein wenig Handarbeit ist dann im täglichen Ablauf halt notwendig.
Im folgenden Kapitel sind die bekannten Probleme aufgelistet.
Aber was macht diese Contrib eigentlich und für was ist sie gut?
OsCommerce-Shops erfordern eine Rückkehr des Kunden vom Zahlungsportal um weitere Details zur Bestellung zu erfassen, um E-Mails zu generieren und Bestandsmengen zu aktualisieren.
In der Vergangenheit hatte der Shopbetreiber ein Problem, wenn ein Kunde nicht wieder auf die Site zurückgekehrt ist nach der Zahlung seiner Bestellung. Der Betreiber bekam einen Betrag erstattet, wusste aber nicht von wem. Dieses Modul behebt dieses Problem, indem es Bestellungen vorzeitig (vor Ausführung der Zahlung unter Zuhilfenahme eines Drittanbieters) in der Datenbank mit einem Bearbeitungsstatus erstellt, und sobald ein Kunde zahlt, wird der Bearbeitungsstatus automatisch vom Zahlungsportal aktualisiert.
Das bedeutet, dass selbst wenn ein Kunde nicht wieder auf die Seite zurückkehrt, alle notwendigen Informationen der Bestellung aufgezeichnet wurden, auch wenn keine Details und E-Mails generiert wurden. Alle dann noch offenen Bestellungen mit dem entsprechenden Bearbeitungsstatus müssen sorgfältig geprüft werden.
nach oben
Bekannte Probleme
- Scheitert es an einer Rückantwort von Micropayment, werden keine Bestellinformations-eMails versendet, der Warenbestand nicht aktualisiert und der Bestellstatus wird auch nicht aktualisiert. Hier ist dann Handarbeit angesagt.
- Kehrt ein Käufer nach dem Zahlungsvorgang nicht wieder zurück auf die Seite, wird sein Warenkorb nicht geleert.
- Das Einbinden dieses Moduls erfordert PHP-Kenntnisse, auch wenn diese auf ein Minimum beschränkt sind. Wenn Sie sich an die Anleitung halten, sollte nichts schiefgehen. Lesen Sie hierzu bitte die unteren Hinweise.
- Doppelte Bestellnummern. Haben Sie mehrere Shops, sollten Sie für jeden ein eigenes Konto bei Micropayment erstellen um dieses Problem zu umgehen.
- Haben Sie schon mehrere Zahlungsarten in Ihrem Shop aktiviert, kann es passieren, dass Sie durch das Einspielen von CP ein vorhandenes überschreiben.
Wenn Sie also bereits mehrere Zahlungsarten installiert haben, dann müssen Sie, bevor Sie das Modul aktivieren möchten, in Ihrer Datenbank in der Tabelle "configuration" nachschauen, welche Zahlungsart die letzte "configuration_group_id"-Nummer hat und die nächste freie Zahl in der Datei "catalog\includes\modules\payment\micropayment_cp_ipn.php"
in allen Zeilen im unteren Bereich des Scripts korrigieren, die so aussehen wie die folgende Beispielzeile.
(Ersetzen Sie den Wert "9" durch eine Ihrer freien configuration_group_id's um ein Überschreiben zu verhindern.)
Beispielzeile:
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Position von CP-Event', 'MODULE_PAYMENT_MICROPAYMENT_CP_IPN_SORT_ORDER', '0', 'Anzeigenreihenfolge, an welcher Stelle dieses Zahlungssystem zur Auswahl fuer den Kunden erscheinen soll. Niedrigste Nummer zuerst.', '9', '3', now())");
nach oben
Wie funktioniert es
Das CP-Modul speichert Bestellungen vorzeitig in der Datenbank, damit diese vom Zahlungsportal verarbeitet werden können. Das Zahlungsportal Micropayment sendet automatisch nach erfolgtem Durchlauf eine Rückantwort an den Shop, damit dieser die Informationen passend zuordnen und verarbeiten kann.
Es werden darauf hin e-Mail-Benachrichtigungen versendet, der Warenbestand aktualisiert, der Bearbeitungsstatus geändert, usw.
Mit diesem Modul können Sie unverschlüsselt (nicht empfohlen), so wie mit dem von Micropayment verwendeten seal-Schlüssel (empfohlen) verschlüsselte und somit relativ sichere Zahlungsinformationen an Micropayment senden, die der Käufer nicht manipulieren kann.
Die Rückübertragung funktioniert genau so und ist alles stimmig, werden die einzelnen Prozesse automatisiert angestossen. Ungültige Bestellungen muss der Shopbesitzer sorgfältig prüfen.
Weitere Informationen zur verschlüsselten Micropayment-Zahlung erhalten Sie direkt auf https://www.micropayment.de
Dieses Modul wurde so einfach wie möglich gehalten, damit auch Anfänger damit zurecht kommen sollten. Alle Informationen, die für das Modul benötigt werden, werden bequem im Administrationsmenü eingetragen.
Das Modul kommt bis auf eine Stelle ohne die Notwendigkeit aus, Änderungen am Shopsystem vornehmen zu müssen. Es sollte sich daher mit allen möglichen verbauten Contribs einwandfrei vertragen.
nach oben
Installieren des CP-Moduls
- Wichtig: Machen Sie ein vollständiges Backup Ihres Shops, bevor Sie beginnen!
- Kopieren Sie alle Dateien in die Verzeichnis-Struktur Ihres Shops. Das \ext-Verzeichnis ist ein neues Verzeichnis, das hinzu kommt.
- Öffnen Sie Ihr osCommerce-Administrations-Menue und wählen Sie "Module->Zahlungsweise" aus.
- Installieren Sie das Call2Pay (CP)-Modul und konfigurieren Sie die Parameter entsprechend. Hinweis: Das Modul ist im Ursprungszustand abgeschaltet, so dass eine Konfiguration auch in einem Live-Shop erfolgen kann.
- Nun müssen wir noch eine kleine Erweiterung in einem Shopscript vornehmen.
Öffnen Sie die Datei "\shop\checkout_confirmation.php" und suchen Sie dort nach dem Absatz:
<?php
if (isset($$payment->form_action_url)) {
$form_action_url = $$payment->form_action_url;
} else {
$form_action_url = tep_href_link(FILENAME_CHECKOUT_PROCESS, '', 'SSL');
}
echo tep_draw_form('checkout_confirmation', $form_action_url, 'post');
if (is_array($payment_modules->modules)) {
echo $payment_modules->process_button();
}
echo tep_image_submit('button_confirm_order.gif', IMAGE_BUTTON_CONFIRM_ORDER) . '' . "\n";
?>
und ersetzen Sie den Absatz mit:
<?php
if (isset($$payment->form_action_url)) {
$form_action_url = $$payment->form_action_url;
if($$payment->code == "micropayment_cp_ipn") {
$form_action_url = $form_action_url.$payment_modules->process_button();
}
} else {
$form_action_url = tep_href_link(FILENAME_CHECKOUT_PROCESS, '', 'SSL');
}
echo tep_draw_form('checkout_confirmation', $form_action_url, 'post');
if (is_array($payment_modules->modules)) {
if ($$payment->code != "micropayment_cp_ipn") {
echo $payment_modules->process_button();
}
}
echo tep_image_submit('button_confirm_order.gif', IMAGE_BUTTON_CONFIRM_ORDER) . '' . "\n";
?>
Im Gegensatz zum PayPal-Modul, das die Parameter per input-type hidden via POST übergibt, übertragen wir die Parameter mittels GET per URL.
Der modifizierte Abschnitt überprüft jetzt, ob es sich um das Zahlungsmodul CP (micropayment_cp_ipn) handelt und falls das zutrifft, erstellt die Funktion process_button() der Klasse Payment nun die Parameter und hängt diese an die Micropayment-URL, anstatt hidden-Felder zu generieren.
Diese werden dann auch unter "if ($$payment->code != "micropayment_cp_ipn") {" nicht mehr ausgeführt, wenn es sich beim Zahlungsmodul um das CP handelt.
Verwenden Sie mehrere Micropayment-IPN-Module müssen Sie diese natürlich hier auch eintragen.
Beispiel mit Verwendung des eBank2Pay und des CP-Moduls:
<?php
if (isset($$payment->form_action_url)) {
$form_action_url = $$payment->form_action_url;
if($$payment->code == "micropayment_bp_ipn" || $$payment->code == "micropayment_cp_ipn" ) {
$form_action_url = $form_action_url.$payment_modules->process_button();
}
} else {
$form_action_url = tep_href_link(FILENAME_CHECKOUT_PROCESS, '', 'SSL');
}
echo tep_draw_form('checkout_confirmation', $form_action_url, 'post');
if (is_array($payment_modules->modules)) {
if ($$payment->code != "micropayment_bp_ipn" && $$payment->code != "micropayment_cp_ipn") {
echo $payment_modules->process_button();
}
}
echo tep_image_submit('button_confirm_order.gif', IMAGE_BUTTON_CONFIRM_ORDER) . '' . "\n";
?>
nach oben
Sicherheit erhöhen - .htaccess
Das Zahlungsmodul verfügt über einige Sicherheitsmechanismen, damit diese Scripte nicht einfach so angestoßen werden können. Ein möglicher Angreifer braucht mehrere Variablen, die im Verhältnis zueinander passen und auch so in Ihrer Shopdatenbank als Auftragsposition hinterlegt sein müssten, um erfolgreich zu sein.
Verwenden Sie zusätzlich noch den seal-Parameter (dringend empfohlen), sinkt die Wahrscheinlichkeit eines Manipulationsversuchs drastisch.
Wer aber noch einen Schritt weiter gehen möchte, sollte das Verzeichnis "micropayment_cp_ipn" unter "/shop/ext/modules/payment/" mit einer .htaccess-Datei versehen, damit nur noch der Micropayment-Server die Erlaubnis besitzt, um auf die dort für ihn hinterlegten Scripte zugreifen zu können.
Der Inhalt der .htaccess ist wie folgt:
Order deny,allow
Deny from all
Allow from service.micropayment.de
Allow from proxy.micropayment.de
Allow from access.micropayment.de
Speichern Sie diese Datei als reine Textdatei ab und hinterlegen Sie diese dann in dem Ordner "micropayment_cp_ipn" unter "/shop/ext/modules/payment/".
Alternativ kann man auch mittels PHP die IP-Adresse des Micropayment-Servers ausfiltern, wenn man keine .htaccess-Datei verwenden möchte.
Hierzu ist es notwendig, das Script "/shop/ext/modules/payment/micropayment_cp_ipn/micropayment_cp_ipn.php" zu modifizieren.
Suchen Sie in dem Script nach dem Absatz:
require('includes/application_top.php');
und fügen Sie direkt darunter folgendes ein:
if (substr($_SERVER["REMOTE_ADDR"],0,12) != "193.159.183.") {
$status = 'error';
$email_body = '$_POST:' . "\n\n";
foreach ($_POST as $key => $value) {
$email_body .= $key . '=' . $value . "\n";
}
$email_body .= "\n" . '$_GET:' . "\n\n";
foreach ($_GET as $key => $value) {
$email_body .= $key . '=' . $value . "\n";
}
tep_mail('', MODULE_PAYMENT_MICROPAYMENT_CP_IPN_DEBUG_EMAIL, 'Micropayment CP IPN Falsche IP-Adresse', $email_body, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS);
$response = 'status=' . $status;
$response .= $trenner;
$response .= 'url=' . $url;
$response .= $trenner;
$response .= 'target=' . $target;
$response .= $trenner;
$response .= 'forward=' . $forward;
echo $response;
exit;
}
Dieser Abschnitt überprüft, ob es sich um die IP-Adresse des Micropayment-Servers handelt.
Ist sie es nicht, werden alle Parameter gesammelt und in eine Informations-eMail gepackt, die Ihnen
dann zugemailt wird. Das Script wird umgehend beendet.
Hinweis: Unter Verwendung eines Shared-SSL-Zertifikats gibt es wohl Probleme mit beiden Varianten, da hier wohl der SSL-Proxy mit seiner eigenen IP die API anstösst und nicht mit der IP des Micropayment-Servers.
An einer Lösung des Problems suche ich noch. Wer eine Lösung hat ... bitte eine eMail an mich.
nach oben
Konfigurationseinstellungen (Shop Admin)
Aktiviere Micropayment CP IPN Modul
Ist der Wert "True", kann der Kunde diese Zahlungsart auswählen.
https-Adresse Ihres Shops
Hier müssen Sie die https-URL Ihres Shops eintragen und zwar geben Sie diese bitte ohne ein abschließendes "\", aber mit einem beginnenden "https://" ein.
- Seiten mit Full-SSL: https://www.Ihre_URL.de
- Seiten mit Shared-SSL: https://sslserver.xssl.de/Ihre_URL.de
eMail-Adresse
Ihre e-Mail-Adresse.
Position von CP-Event
Bieten Sie mehrere Zahlungsmöglichkeiten an, legen Sie mit Hilfe von Nummern die Rangreihenfolge der Zahlungsmöglichkeiten fest.
Transaktionswährung
Hier können Sie auswählen, welche Währung akzeptiert wird. Empfohlen ist "Only EUR", zumal Micropayment sowieso nur in Euro abwickelt.
Zahlungszone
Geben Sie hier die Zone ein, in welcher CP genutzt werden darf. (Wenn Sie das Modul live nebenbei testen möchten, können Sie ein "Testland" (Unter Land->Steuer->Steuerzonen) anlegen und mit einem Testbenutzer, der in einem Land lebt, welches zu "Testland" gehört, können Sie experimentieren, ehe Ihre Kunden das Zahlungsmodul auswählen können, bis es vollständig nach Ihren Wünschen arbeitet.)
Preparing Order Status (Standardwert bevor Transaktion abgeschlossen)
Insgesamt haben wir drei Zustände des Status:
- Wenn der Bestellvorgang beginnt (Preparing Order),
- Wenn der Bestellvorgang sich in der Prüfung befindet und so lange storniert wurde bis der Vorgang geklärt ist (Aknowledged Order),
- Wenn der Bestellvorgang erfolgreich abgeschlossen wurde, oder eine zu prüfende Zahlung im Anschluss doch noch freigegeben wurde (Completed Order).
Unter "Sprachen/Währungen->Bestellstatus" können Sie diese drei anlegen.
Die Bezeichnungen sind egal, bspw. "MP-Bearbeitung" / "Preparing [ePay]", "MP-Prüfung", und "MP-Download" / "MP-Freigabe" / "MP-Abgeschlossen".
Wenn Sie Download-Artikel anbieten, achten Sie darauf, dass die ID für Preparing Order kleiner ist als die für Acknowledged Order und diese wiederrum kleiner ist, als die für Completed Order. (Siehe hierzu am besten die Informationen zur Contrib "Download Controller".)
Acknowledged Order Status (Standardwert bei unklaren Transaktionen)
siehe "Preparing Order Status"
Completed Order Status (Standardwert nach erfolgreichem Abschluss)
siehe "Preparing Order Status"
Transaktions-Typ
Standardwert: Event
Alle Rechnungspositionen werden zu einer Endsumme gebildet.
MwSt auf Endbetrag addieren?
Wert: True - addiert die Mehrwertsteuer auf den Rechnungs-Endbetrag.
Wert: False - addiert die Mehrwertsteuer nicht auf den Rechnungs-Endbetrag.
Seitendesign - Template
Micropayment bietet Ihnen eine vielfältige Auswahl an Templates an, die Sie an Ihr Site-Design anpassen können. Geben Sie hier den Wert (beispielsweise "l3") ein, oder lassen Sie das Feld leer um das Standard-Design zu nutzen.
Weitere Informationen, welche Variablen möglich sind, finden Sie bei Micropayment in Ihrem Kontenbereich.
Seitendesign - eigenes Logo/Grafik
Micropayment bietet Ihnen eine vielfältige Auswahl an Grafiken. Auch können Sie eine eigene Grafik oder ein Logo einbinden. Geben Sie hier den Wert (beispielsweise "x-clouds") ein, oder lassen Sie das Feld leer um das Standard-Design zu nutzen.
Weitere Informationen, welche Variablen möglich sind, finden Sie bei Micropayment in Ihrem Kontenbereich.
Debug E-Mail Address
Wenn Sie hier eine E-Mail-Adresse eintragen, werden alle Parameter-Fehler die im Austausch zwischen Ihrer Seite und dem Micropayment-Server auftreten an diese hinterlegte Adresse gesendet.
Project
Hier müssen Sie den Projekt-Code eintragen, den Ihnen Micropayment für ein neues Projekt vergeben hat.
Account
Hier müssen Sie Ihre Micropayment-Account-Nummer (Kundennummer) eintragen.
Access-Key
Ihr persönlicher Access-Key, den Ihnen Micropayment generiert hat.
Diesen finden Sie auch in Ihrem persönlichen Kontobereich bei Micropayment.
Sie benötigen diesen Accesskey um verschlüsselte Zahlungen an den Micropayment-Server mit Hilfe des seal-Parameters übermitteln zu können.
Mindestsumme um CP nutzen zu koennen
Tragen Sie hier die Summe ein, ab welcher Summe dieses Zahlungssystem dem Kunden zur Verfügung stehen soll.
Volle Summen können Sie ohne Nachkommastellen eintragen, ansonsten müssen Sie unbedingt den Punkt als Komma verwenden. (50, 0.49, 2.50, 100)
Maximalsumme um CP nutzen zu koennen
Tragen Sie hier die Summe ein, bis zu welcher Gesamtsumme dieses Zahlungssystem dem Kunden zur Verfügung stehen soll.
Volle Summen können Sie ohne Nachkommastellen eintragen, ansonsten müssen Sie unbedingt den Punkt als Komma verwenden. (50, 0.49, 2.50, 100)
nach oben
Micropayment Status
Micropayment sendet derzeit drei verschiedene Statusarten:
- billing: Der Zahlungsbetrag wurde von Micropayment freigegeben.
- storno: Der Zahlungsbetrag wurde von Micropayment widerufen.
Dies geschieht beispielsweise dann, wenn der Käufer einen Lastschriftbetrag innerhalb der gesetzlichen 6-Wochen-Frist zurückgehen lässt und Micropayment den Vorgang prüft.
- backpay: Ein Zahlungsbetrag der zuvor den Status "storno" hatte, wurde von Micropayment wieder freigegeben.
Dieses Modul verarbeitet jeden Status und setzt automatisch entsprechend den Bestellstatus wie Sie sie unter "Acknowledged Order" und "Completed Order" in der Modulkonfiguration (Siehe Abschnitt "Installation") vergeben haben.
- billing = Completed Order
- storno = Aknowledged Order
- backpay = Completed Order
nach oben
Micropayment-Account-Einstellungen
- Sie müssen bereits ein Projekt angelegt haben und dieses muss auch von Seiten Micropayment bereits freigegeben sein.
- Klicken Sie "Meine Konfiguration" an und wechseln Sie in Ihre Projektliste.
- Wählen Sie das entsprechende Projekt aus und klicken Sie auf den Button "Aktionen" und wählen Sie dort den Menüpunkt "Zahlungsarten konfigurieren" aus.
- Wählen Sie in der Zahlungsmöglichkeiten-Liste den Punkt "CP - Event" aus. (Nicht "CP - File").
- Klicken Sie nun wieder den Button "Aktionen" und wählen "konfigurieren" aus.
- Tragen Sie nun in das obere Feld "API-URL" die URL zu Ihrer API ein:
"https://www.Ihre_URL.de/shop/ext/modules/payment/micropayment_cp_ipn/micropayment_cp_ipn.php
- Seiten mit Full-SSL: https://www.Ihre_URL.de/
- Seiten mit Shared-SSL: https://sslserver.xssl.de/Ihre_URL.de/
- Unter "Optionen : Erweiterte Sicherheit" wählen Sie den Punkt "erweiterte Sicherheit aktivieren" aus.
- Unter "Optionen : API-URL" wählen Sie den Punkt "Das senden zusätzlicher Daten aktivieren" aus.
- Öffnen Sie mit Hilfe des "+"-Symbols den Punkt "zusätzliche GET-Parameter (QueryString)" und erweitern Sie den Querystring um drei weitere Felder (die letzten drei aus der folgenden Übersicht).
Im Anschluss muss das Ganze so aussehen:
amount |
= |
__amount__ |
title |
= |
__title__ |
auth |
= |
__auth__ |
country |
= |
__country__ |
currency |
= |
__currency__ |
customerid |
= |
__$customerid__ |
orderid |
= |
__$orderid__ |
osCsid |
= |
__$osCsid__ |
- Unter "Optionen : Länder-/Tarifkonfiguration" wählen Sie aus, von welchen Ländern aus angerufen werden kann.
- Setzen Sie noch ein Häkchen bei "Zahlungsart aktivieren für ..."
nach oben
Integration mit anderen Contributions
Wichtige Faustregel: Wann immer Sie eine Änderung an Ihrer "checkout_process.php" vornehmen, müssen Sie die Änderungen eventuell auch in der "\includes\modules\payment\micropayment_cp_ipn.php" und in der "\ext\modules\payment\micropayment_cp_ipn\micropayment_cp_ipn_progress.php" vornehmen.
Das CP-Modul arbeitet, genau wie das PayPal IPN-Modul ein wenig anders als andere Zahlungsmodule und umgeht die "checkout_process.php"-Datei. Das bedeutet, dass jede Contrib die eine Änderung der "checkout_process.php" erfordert, ein manuelles Anpassen an der obig genannten "micropayment_cp_ipn.php" und "micropayment_cp_ipn_progress.php" erfordern könnten.
nach oben
Frequently Asked Questions
- Offene Fragen?
- Derzeit keine.
nach oben
Support
Ich habe die Contrib zusammengestellt nach den Anforderungen meines Shops und denke, da ich einiges aus dem PayPal IPN-Modul übernommen habe, sollte es auch problemlos bei anderen Shopbetreibern laufen.
Leider fehlt mir ein wenig die Zeit um das Teil alleine ständig und immer zu erweitern und sollte jemand Spaß am mitsupporten haben, dann soll er/sie sich mit mir in Verbindung setzen.
Ich kann leider nur begrenzt Support anbieten und auch keinen Nachhilfekurs in PHP geben. Wenn Sie die Contrib benutzen möchten, sollten Sie zumindest dort Basiswissen mitbringen.
Weitere Zahlungsarten-Module für Micropayment erscheinen in Kürze oder sind schon als Download auf meiner Homepage http://www.skyline-service.de zu finden.
nach oben
Developer Notes
"\ext\modules\payment\micropayment_cp_ipn\micropayment_cp_ipn.php"
micropayment_cp_ipn.php prüft die Rückgabeparameter für Rechnungsnummer, Rechnungswährung, Betrag und Kundennummer mit den Werten aus der Shopdatenbank.
Stimmen diese nicht überein, wird als Status ein error ausgegeben und wenn eine Debug eMail-Adresse in der Konfiguration hinterlegt wurde, werden an diese alle Parameter übermittelt.
Stimmen die Werte überein gibt das Script sein ok, damit der Micropayment-Server zur
"\ext\modules\payment\micropayment_cp_ipn\micropayment_cp_ipn_progress.php"
weiterleiten kann.
Hier beginnt eine weitere Prüfung nach dem Übergabestatus (billing|storno|backpay) und entsprechend werden dann einzelne Aktionen ausgeführt (E-Mails versendet, Bearbeitungsstatus geändert, Warenbestand aktualisiert, etc.)
Im Anschluss geht es dann per Weiterleitung auf die gewohnte "checkout_success.php" Ihres Shops.
"\includes\modules\payment\micropayment_cp_ipn.php"
Dieses Script übernimmt den Versand der Parameter zu Micropayment und enthält ferner die Installationsroutinen des Zahlungsmoduls.
"checkout_process.php"
Wie Paypal_ipn.php umgeht micropayment_cp_ipn.php durch Laden einer Weiterleitung den before_process().
nach oben