Tutorials & HowTo´s


xtcModified Shop: Moneybookers-,Paypal Zahlungen automatisch als bezahlt markieren in JTL-Wawi


Ich habe das schon sehr gute HowTo von "ingmar1601 (auf der Seite:http://forum.jtl-software.de)" noch etwas ausgeschmückt für die ganz unerfahrenen.  Zitat von ingmar1601 und meine kleinen Zusatzinfos: In XT-Commerce gibt es Zahlungsmodule z.B. Paypal Express oder Moneybookers, mit denen es möglich, den Zahlungsstatus autmatisch im shop zu setzen. Leider werden aber alle erfolgreichen und abgebrochenen Zahlungen über den connector in die Wawi übertagen und man muss hier nochmal den Abgleich für jede Bestellung machen und die Zahlung nochmal manuell auf bezahlt setzen oder nicht. Das fand ich ziemlich umständlich und unbefriedigend und habe deshalb das Problem wie folgt gelöst:  

1) Damit die Zahlungsart richtig in der Wawi erkannt wird und nicht nur bei den Anmerkungen steht, muss man erst mal das mapping richtig anpassen. Das macht man in der Datei

/admin/includes/modules/jtlwawi_connector/dbeS/GetBestellung.php Folgende Switch Anweisungen müssen angepasst werden um die XTC Zahlungsarten (case 'xyz') den Wawi Zahlungsarten (Zahlungsweise: xyz) zugeordnet werden. Code: ______________________________________________________________
switch ($Bestellung->payment_method)
{
case 'banktransfer':
$Bestellung->zahlungsweise = "Zahlungsweise: Lastschrift";
$VersandKey = -1;
break;
case 'cc':
$Bestellung->zahlungsweise = "Zahlungsweise: Kreditkarte";
$VersandKey = -1;
break;
case 'moneybookers_cc':
$Bestellung->zahlungsweise = "Zahlungsweise: Kreditkarte";
$VersandKey = -1;
break;
case 'moneybookers_elv':
$Bestellung->zahlungsweise = "Zahlungsweise: Bankeinzug";
break;
case 'cod':
$Bestellung->zahlungsweise = "Zahlungsweise: Nachnahme";
break;
case 'invoice':
$Bestellung->zahlungsweise = "Zahlungsweise: Auf Rechnung";
break;
case 'paypal':
$Bestellung->zahlungsweise = "Zahlungsweise: PayPal";
break;
case 'paypalexpress':
$Bestellung->zahlungsweise = "Zahlungsweise: PayPal Express";
break;
case 'moneyorder':
$Bestellung->zahlungsweise = "Zahlungsweise: Vorkasse";
break;
case 'ipayment':
$Bestellung->zahlungsweise = "Zahlungsweise: Kreditkarte";
break;
case 'ipaymentelv':
$Bestellung->zahlungsweise = "Zahlungsweise: Lastschrift";
break;
 
default:
$Bestellung->zahlungsweise = "Zahlungsweise: $Bestellung->payment_method";
break;

________________________________________________________________
 

2) Wenn man folgenden SQL im Wawi Connector anpasst, dann werden nur die gewünschten Bestellstati übertragen: /admin/includes/modules/jtlwawi_connector/dbeS/GetBestellung.php   Code: ________________________________________________________________

//hole alle neuen Bestellungen (order) $cur_query = eS_execute_query("select orders.payment_method, orders.orders_id, orders.customers_id, orders.comments, date_format(orders.date_purchased, \"%d.%m.%Y\") as ErstelltDatumF from orders LEFT JOIN eazysales_sentorders ON orders.orders_id=eazysales_sentorders.orders_id where eazysales_sentorders.orders_id is NULL AND orders_status in(1,3,5) limit 1");  ________________________________________________________________  

Den gewünschten orders_status bekommt man aus der Tabelle "orders_status" (in der SQL Datenbank von XTC meist auf dem Webspace gespeichert, sofern man keine eigen Webserver hat und z.B. per PhpMyAdmin zu bearbeiten). Ich übertrage z.B. folgende Stati (Vorkasse (=Status „Offen“ bei XTC), Paypal ok (=Status „Offen PP bezahlt“ bei XTC), Nachnahme (=Status „Offen“ bei XTC)). Negative (abgebrochen, wartend etc.) werden nicht übertragen.  

3) Jetzt werden nur die gewünschten Bestellungen in die Wawi übertragen. Aber steht z.B. bei Moneybookers- oder Paypal Zahlungen der "Bezahlt" Status immer noch auf "N"  

Um das zu lösen, habe ich 2 Trigger in der WAWI Datenbank (Lokale SQL Express Datenbank → Standard = PC\JTLWAWIerstellt). Diese kann man z.B. mit Microsft SQL Management Studio Express auf dem Server (wo JTL-Full installiert ist, da sich dort auch die SQL Datenbank befindet) erstellen.   Der erste Trigger schaut nach, wenn ein neuer Auftrag erstellt wird. Wenn bestimmte Zahlungen (die ungleich 'Vorkasse','Scheck/Vorkasse','Überweisung', 'Nachnahme' sind), also Kreditkarte, Paypal etc. dann wird ein Eintrag in der Tabelle tZahlung erstellt mit dem Daten aus den neuen Auftrag. Leider ist zu diesem Zeitpunkt noch nicht der Zahlbetrag bekannt und deswegen braucht man noch einen 2. Trigger.     1. Trigger  SQL Datenbank von JTL-Wawi öffnen (im SQL Studio Express), auf „New Query“ klicken und den folgenden Code einfügen, anschließend auf „!Execute“ klicken.   Code: ________________________________________________________________

USE [eazybusiness] GO /****** Objekt: Trigger [dbo].[trig_zahlstatus] Skriptdatum: 09/22/2009 20:04:55 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO   CREATE TRIGGER [dbo].[trig_zahlstatus]   ON [dbo].[tbestellung]   FOR INSERT    AS SET NOCOUNT ON;   DECLARE @plattform int SELECT @plattform = (Select nPlatform from Inserted)     IF (@plattform = 2) BEGIN   DECLARE @zahlart varchar(100) SELECT @zahlart = (Select CName from tZahlungsart z,Inserted i where z.kZahlungsArt=i.kZahlungsArt)   IF (@zahlart != 'Vorkasse' AND @zahlart != 'Scheck/Vorkasse' AND @zahlart != 'Überweisung' AND @zahlart != 'Nachnahme') BEGIN   DECLARE @maxID int  SELECT @maxID = (Select ISNULL(max(kZahlung),0)+1 from tZahlung)   DECLARE @orderid int SELECT @orderid = (SELECT kBestellung FROM Inserted)   INSERT INTO tZahlung (kZahlung, cName, dDatum, fBetrag, kBestellung, kBenutzer, nAnzahlung) Select @maxID,@zahlart, dErstellt,99 ,kBestellung,tBenutzer_kBenutzer,0 from Inserted   END   END  ________________________________________________________________  

Der 2. Trigger ermittelt den Zahlbetrag aus der tbestellpos Tabelle und fügt diesen zu den oben erstellten Eintrag in der Tabelle tZahlung hinzu.   2. Trigger (wie oben „New Query“ Code einfügen und auf „!Execute“ klicken.   Code: ________________________________________________________________

USE [eazybusiness] GO /****** Objekt: Trigger [dbo].[trig_ordervalue] Skriptdatum: 09/22/2009 20:27:03 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TRIGGER [dbo].[trig_ordervalue]   ON [dbo].[tbestellpos]   FOR INSERT    AS BEGIN   SET NOCOUNT ON; DECLARE @orderid int SELECT @orderid = (SELECT tBestellung_kBestellung FROM Inserted,tBestellung WHERE kBestellung=tBestellung_kBestellung AND nPlatform=2)   UPDATE tZahlung SET fBetrag=(SELECT sum(fVKPreis*nAnzahl)FROM tbestellpos WHERE kBestellung=tBestellung_kBestellung) WHERE kBestellung=@orderid   END ________________________________________________________________  

Jetzt sollten die gewünschten Zahlungen automatisch als bezahlt markiert sein nach dem Import.