Problem mit Heidelpay-Modul

TomB

Aktives Mitglied
30. Juni 2007
390
0
Hallo,
ist zwar kein template-Problem, aber ich denke es passt hier am Besten hin.
Es geht um das Zahlungsmodul von Heidelpay (nicht das im Shop3 Lieferumfang enthaltene).

Komme da einfach nicht mehr weiter, vieleicht hat ja einer eine Idee dazu.

Problem betrifft wohl diese Stelle

Code:
if ($status == BESTELLUNG_STATUS_BEZAHLT){
        $sql = 'SELECT * FROM `tbestellung` WHERE `cBestellNr` = "'.addslashes($orderId).'" ';
        $res = $GLOBALS["DB"]->executeQuery($sql,1);
        #echo '<pre>'.print_r($res, 1).'</pre>';
        $sql = 'INSERT INTO `tzahlungseingang`
          SET `kBestellung` = "'.addslashes($res->kBestellung).'",
            `cZahlungsanbieter` = "'.addslashes($res->cZahlungsartName).'",
            `fBetrag` = "'.addslashes($amount).'",
            `cAbgeholt` = "N"
            ';
        $GLOBALS["DB"]->executeQuery($sql,4);
      }

Hiermit wird wohl der Datensatz aus der Tabelle tbestellung geholt
Code:
 $sql = 'SELECT * FROM `tbestellung` WHERE `cBestellNr` = "'.addslashes($orderId).'" ';

Einige der Daten werden dann in die Tabelle tzahlungseingang gesetzt.
Das funktioniert auch bis auf das Feld cZahlungsanbieter, also diese Stelle:

Code:
 `cZahlungsanbieter` = "'.addslashes($res->cZahlungsartName).'",

Das Feld cZahlungsanbieter wird in der Tabelle tzahlungseingang nicht gefüllt, bleibt leer, der Rest des Datensatzes wird geschrieben.

Dadurch bleibt in der Wawi das Feld Zahlungsart in der Tabelle der Maske "Zahlungen" leer, der Rest des Datensatzes erscheint natürlich. Nur fehlt eben die Zahlungsart.

Habe schon einen anderen User gefragt der das Modul ebenfalls verwendet, bei ihm wird der Eintrag gesetzt, scheint also kein generelles Problem des Moduls zu sein.

Gruß Thomas
 

TomB

Aktives Mitglied
30. Juni 2007
390
0
AW: Problem mit Heidelpay-Modul

Das hatte ich schon versucht, klappt aber nicht, es kommt keinerlei Anzeige des Datensatzes wenn ich eine Testbestellung damit durchführe.

Was auf jeden Fall da ist, ist der Eintrag "cZahlungsanbieter" in der Tabelle tbestellung und zwar bevor ich die Zahlung absende.
Da der Betrag, die Bestellnummer usw in der tzahlungseingang gesetzt werden und die ja auch aus der tbestellung geholt werden müsste auch cZahlungsanbieter zur Verfügung stehen.

Gruß Thomas
 

TomB

Aktives Mitglied
30. Juni 2007
390
0
AW: Problem mit Heidelpay-Modul

Leider auch nichts.

Einen festen Text eingeben hatte ich übrigens auch schon versucht, tat es auch nicht.
 

TomB

Aktives Mitglied
30. Juni 2007
390
0
AW: Problem mit Heidelpay-Modul

Jupp, das ist ja das Kuriose.
Das einzige was mir auffällt ist, dass der Betrag mit ettlichen Stellen hinter dem Komma mehr drinnen steht wie bei den anderen Zahlungsarten, also z.B. 40.886699999999 wobei bei dem entsprechenden Datensatz in der tbestellung 40.89 enthalten ist.

kBestellung passt 1:1 , bei cAbgeholt ist es schlecht zu beurteilen da hier schon in der Tabellenkonfiguration für tzahlungseingang N als Standard gesetzt ist.
Bei allen anderen Zahlungsarten wie PayPal, SÜ usw sind die Einträge übrigens korrekt.

Ich habe die Vermutung dass die Datenbank/Tabelle hier irgendwas nicht mag.

Beim PayPal-Modul ist es wohl der Teil der die Tabelle füllt:
Code:
// process payment
            $paymentDateTmp=strtotime($_POST['payment_date']);
            $zahlungseingang->kBestellung = $bestellung->kBestellung;
            $zahlungseingang->cZahlungsanbieter = "PayPal";
            $zahlungseingang->fBetrag = $_POST['mc_gross'];
            $zahlungseingang->fZahlungsgebuehr = $_POST['payment_fee'];
            $zahlungseingang->cISO = $_POST['mc_currency'];
            $zahlungseingang->cEmpfaenger = $_POST['receiver_email'];
            $zahlungseingang->cZahler = $_POST['payer_email'];
            $zahlungseingang->cAbgeholt = 'N';
            $zahlungseingang->dZeit = strftime('%Y-%m-%d %H:%M:%S',$paymentDateTmp);
            $GLOBALS['DB']->insertRow('tzahlungseingang',$zahlungseingang);

Ist bischen Chaotisch, bei manchen Zahlungsarten wirds wohl über die PaymentMethod.class.php hiermit

Code:
function addIncomingPayment($order, $incomingPayment)
	{
		global $DB;

		$incomingPayment->kBestellung = $order->kBestellung;
		$incomingPayment->cZahlungsanbieter = $this->name;
		$incomingPayment->cAbgeholt = 'N';
		$incomingPayment->dZeit = 'now()';
		$DB->insertRow('tzahlungseingang', $incomingPayment);
	}

	/**
	 * @param Bestellung $order
	 */
	function setOrderStatusToPaid($order)
	{
		global $DB;

		$SQL = 'UPDATE tbestellung SET '
		     . '    dBezahltDatum = now(), '
		     . '    cStatus = "' . BESTELLUNG_STATUS_BEZAHLT . '" '
		     . 'WHERE kBestellung = ' . intval($order->kBestellung);
		$DB->executeQuery($SQL, 4);
	}

gefüllt.
 

ag-websolutions.de

Sehr aktives Mitglied
29. Dezember 2009
14.548
233
AW: Problem mit Heidelpay-Modul

ichhab ja fast den Eindruck, dass die Tabelle von woanders gefüllt wird....kannst du nicht mal bei allen Felder irgendwelche festen Werte eintragen

cZahlungsanbieter mumpitz
fBetrag 19.97
cAbgeholt Y
 

ag-websolutions.de

Sehr aktives Mitglied
29. Dezember 2009
14.548
233
AW: Problem mit Heidelpay-Modul

mich wundert auch, dass cISO nicht gesezt wird, denn das darf laut Tabellenstruktur nicht null sein
 

TomB

Aktives Mitglied
30. Juni 2007
390
0
AW: Problem mit Heidelpay-Modul

Du hast wohl recht

ich habe den kompletten Code-teil mal weggenommen:

Code:
if ($status == BESTELLUNG_STATUS_BEZAHLT){
        $sql = 'SELECT * FROM `tbestellung` WHERE `cBestellNr` = "'.addslashes($orderId).'" ';
        $res = $GLOBALS["DB"]->executeQuery($sql,1);
        #echo '<pre>'.print_r($res, 1).'</pre>';
        $sql = 'INSERT INTO `tzahlungseingang`
          SET `kBestellung` = "'.addslashes($res->kBestellung).'",
            `cZahlungsanbieter` = "'.addslashes($res->cZahlungsartName).'",
            `fBetrag` = "'.addslashes($amount).'",
            `cAbgeholt` = "N"
            ';
        $GLOBALS["DB"]->executeQuery($sql,4);
      }

Trotzdem erscheint ein neuer Datensatz

Was ein Mist, da kannn man ja lange rumsuchen 😱
 

TomB

Aktives Mitglied
30. Juni 2007
390
0
AW: Problem mit Heidelpay-Modul

Jo, die richtige Stelle habe ich auch jetzt rausgefunden.

PaymentMethod.class.php

Code:
function addIncomingPayment($order, $incomingPayment)
	{
		global $DB;

		$incomingPayment->kBestellung = $order->kBestellung;
		$incomingPayment->cZahlungsanbieter = $this->name;
		$incomingPayment->cAbgeholt = 'N';
		$incomingPayment->dZeit = 'now()';
		$DB->insertRow('tzahlungseingang', $incomingPayment);
	}

	/**
	 * @param Bestellung $order
	 */
	function setOrderStatusToPaid($order)
	{
		global $DB;

		$SQL = 'UPDATE tbestellung SET '
		     . '    dBezahltDatum = now(), '
		     . '    cStatus = "' . BESTELLUNG_STATUS_BEZAHLT . '" '
		     . 'WHERE kBestellung = ' . intval($order->kBestellung);
		$DB->executeQuery($SQL, 4);
	}
Die Variable wird zwar in der Heidelpay.class.php gesetzt:
Code:
function init()
    {
    	parent::init();
        $this->name = 'HeidelPay';
        $this->caption = 'Heidelpay';
        $this->path = '/frontend/payment.prc';

kommt wohl aber nicht bei der PaymentMethod.class.php an.

Ich habe jetzt in der PaymentMethod.class.php

Code:
$incomingPayment->cZahlungsanbieter = $this->name;
gegen
Code:
$incomingPayment->cZahlungsanbieter = $order->cZahlungsartName;
getauscht.
Funzt sogar :biggrin:

Jetzt muss ich mal auf die Suche gehen warum der Betrag nicht auf 2 Stellen gerundet wird.

Gruß Thomas
 

TomB

Aktives Mitglied
30. Juni 2007
390
0
AW: Problem mit Heidelpay-Modul

So die Stelle mit der fehlden Rundung ist auch gefunden und beseitigt.

So läufts jetzt sauber :biggrin:


Gruß Thomas
 

TomB

Aktives Mitglied
30. Juni 2007
390
0
AW: Problem mit Heidelpay-Modul

Ich schätze das wird dann im Modul sowiso geändert 😉

Aber natürlich gerne auch die Änderung

Heidelpay.class.php

Code:
$incomingPayment->fBetrag = $order->fGesamtsummeKundenwaehrung;
gegen

Code:
$incomingPayment->fBetrag = number_format($order->fGesamtsummeKundenwaehrung, 2, '.', '');

tauschen.


Gruß Thomas
 

Ähnliche Themen