Jump to content

HELP! Fehlermeldung bei Sofort Überweisung, wenn keine Produkte auf Lager sind


kabecca

Recommended Posts

Hallo liebes Forum,

 

ich arbeite mit der Prestashop Version 1.6.1.10 und habe folgendes Problem mit der Sofortüberweisung:

 

Nach einem Testkauf über Sofortüberweisung bekommt der Kunde, sofern keine Produkte auf Lager sind, im letzten Schritt (Bestellbestätigung) eine Fehlermeldung: "Bei Ihrer Bestellung ist ein Fehler aufgetreten, bitte wenden Sie sich an den Kundensupport" post-1375319-0-62188000-1488200464_thumb.png. Trotzdem wird nach Abschluss der Bestellung eine Bestätigungsmail verschickt. 

 

Ist die Menge des jeweiligen Produkts über 0, bleibt die Fehlermeldung aus. Das passiert aber nur bei Sofortüberweisung. Im BO ist bereits eingestellt, dass die Bestellung von Artikeln zugelassen werden soll, die nicht auf Lager sind. Daher weiß ich leider nicht, woher diese Meldung kommt. 

 

Ich hoffe sehr, dass mir jemand weiterhelfen kann!!! :)

Link to comment
Share on other sites

  • 4 weeks later...

Hallo Hallo,

 

ich habe bereits durch den technischen Support von Sofort Überweisung herausfinden können, dass die Fehlermeldung nicht durch Sofort Überweisung, bzw. das Modul ausgelöst wird, sondern von Prestashop selbst. Die Fehlermeldung wird nämlich angezeigt, nachdem Sofort Überweisung den Kunden durch den Erfolgslink wieder auf unsere Seite leitet. 
 

Der Kollege meinte zu mir, dass er davon ausgeht, dass die Fehlermeldung aus der Warenwirtschaft von Prestashop kommt, weil der Bestand = 0 ist. Hat irgendjemand eine Ahnung, woher Prestashop (jedoch nur in Verbindung mit Sofort Überweisung) die Fehlermeldung ausspucken könnte?

 

Ich bin über jede Hilfe dankbar, denn ich weiß wirklich nicht mehr weiter!!!  :unsure:

Link to comment
Share on other sites

  • 2 weeks later...

Danke @electrostuff_de für deine Hilfe. Diese Einstellung ist jedoch in meinem Shop bereits auf JA.

 

Die Fehlermeldung muss laut Sofort Überweisung Support irgendwo von Prestashop ausgegeben werden. Bei allen anderen Zahlungsmethoden funktioniert es aber einwandfrei...Die Frage ist also, ob irgendjemand eine Ahnung hat, wo man in den Tiefen von Prestashop die Warenwirtschaft bzw. den Warenbestand in Bezug auf das jeweilige Zahlsystem einstellen kann.

Es scheint nämlich, dass die Warenwirtschaft im Fall von Sofort Überweisung nicht kleiner 1 sein darf. Ansonsten gibts nach Kauf (der trotzdem einwandfrei funktioniert) eine Fehlermeldung nachdem Sofort Überweisung wieder erfolgreich in meinen Shop leitet.    :wacko:

Link to comment
Share on other sites

Ich nutze Sofortüberweisung nicht. Ich könnte mir aber vorstellen, daß eine Zahlung damit nur durchgeführt werden soll, wenn das Produkt auch verfügbar ist und deshalb da eine Funktion eingebaut ist. Wenn es sich aber nur um die Meldung handelt und sonst alles funktioniert, sollte es doch kein Problem sein, diese Meldung durch Eingriffe in den Code zu unterbinden, evtl. reicht es bereits den Satz über Übersetzung durch einen anderen zu ersetzen und die Hintergrundfarbe in einer css-Datei zu ändern.

Link to comment
Share on other sites

Was auch immer diese Meldung auslöst - die Meldung selbst gibt es exakt in dieser Formulierung nicht in Prestashop 1.6.1.10. Da heißt der Link "Kundenservice".

Hinterlegt wird sie aber immer im Modul selbst, und zwar in der Datei /views/templates/hook/payment_return.tpl. Sie wird auch vom Modul ausgelöst.

Link to comment
Share on other sites

Nachtrag: Ich vermute mal einen Bug im Modul selbst. Auprobieren kann ich es leider nicht, da ich das Modul nicht einsetze. So, wie es aussieht, funktioniert die Zeile 279 der Funktion hookPaymentReturn  in der Datei sofortbanking.php nicht wie gewünscht und gibt immer den Boolschen Wert "false" zurück:

'status' => ($params['objOrder']->getCurrentState() == Configuration::get('SOFORTBANKING_OS_ACCEPTED') ? true : false))

Hier wird geprüft, ob der Status 5 (=Zahlung erfolgt) erreicht ist, dann wird $status = WAHR. Weil die Bedingung für die Variable $status daher nicht WAHR ('true'), sondern immer nur FALSCH ('false') ist, wird statt der Vollzugsmeldung der Zahlung dem Kunden via Datei /views/templates/hook/payment_return.tpl die von dir gepostete Fehlermeldung ausgegeben:

{if $status === true}
	<p>
		{l s='Your order on' mod='sofortbanking'} <span class="bold">{$shop_name|escape:'htmlall':'UTF-8'}</span> {l s='is complete.' mod='sofortbanking'}
		<br /><br />
		{l s='The total amount of this order is' mod='sofortbanking'} <span class="price">{$total_to_pay|escape:'htmlall':'UTF-8'}</span>
	</p>
{else}
	<p class="warning">

		{l s='We noticed a problem with your order. If you think this is an error, you can contact our' mod='sofortbanking'} 
		<a href="{$base_dir_ssl|escape:'htmlall':'UTF-8'}contact-form.php">{l s='customer support' mod='sofortbanking'}</a>.
	</p>
{/if}

So aus dem hohlen Bauch kann ich mir mehrere Fehlerquellen denken:

  • Der Aufruf in der Funktion hookPaymentReturn stimmt nicht, denn meines Erachtens muss es in Zeile 454 nicht heißen:
     return $this->display(__FILE__, 'views/templates/hook/payment_return.tpl');
    
    sondern
     return $this->display(__FILE__, 'payment_return.tpl');
  • Die Variable wird als String übergeben, dann darf keine Formatprüfung stattfinden und es muss in der Datei /views/templates/hook/payment_return.tpl in Zeile 30 heißen:
    {if $status == 'true'}
    
    (Das dritte Gleichheitszeichen entfällt und der Rückgabewert wird in Anführungszeichen gesetzt.)

Hier hilft nur Ausprobieren ...  :)

Link to comment
Share on other sites

Also habe den Rat von @rictools befolgt und es hat funktioniert. Im BO unter lokalisierung->übersetzung->installierte Module findet man die besagte Fehlermeldung im Abschnitt payment_return. 

Habe den Text also einfach umgeschrieben. Das sollte aber denke ich erstmal nur eine Übergangslösung sein, bis man herausgefunden hat, von wo die Fehlermeldung ausgelöst wird.

Link to comment
Share on other sites

Nachtrag: Ich vermute mal einen Bug im Modul selbst. Auprobieren kann ich es leider nicht, da ich das Modul nicht einsetze. So, wie es aussieht, funktioniert die Zeile 279 der Funktion hookPaymentReturn  in der Datei sofortbanking.php nicht wie gewünscht und gibt immer den Boolschen Wert "false" zurück:

'status' => ($params['objOrder']->getCurrentState() == Configuration::get('SOFORTBANKING_OS_ACCEPTED') ? true : false))

Hier wird geprüft, ob der Status 5 (=Zahlung erfolgt) erreicht ist, dann wird $status = WAHR. Weil die Bedingung für die Variable $status daher nicht WAHR ('true'), sondern immer nur FALSCH ('false') ist, wird statt der Vollzugsmeldung der Zahlung dem Kunden via Datei /views/templates/hook/payment_return.tpl die von dir gepostete Fehlermeldung ausgegeben:

{if $status === true}
	<p>
		{l s='Your order on' mod='sofortbanking'} <span class="bold">{$shop_name|escape:'htmlall':'UTF-8'}</span> {l s='is complete.' mod='sofortbanking'}
		<br /><br />
		{l s='The total amount of this order is' mod='sofortbanking'} <span class="price">{$total_to_pay|escape:'htmlall':'UTF-8'}</span>
	</p>
{else}
	<p class="warning">

		{l s='We noticed a problem with your order. If you think this is an error, you can contact our' mod='sofortbanking'} 
		<a href="{$base_dir_ssl|escape:'htmlall':'UTF-8'}contact-form.php">{l s='customer support' mod='sofortbanking'}</a>.
	</p>
{/if}

So aus dem hohlen Bauch kann ich mir mehrere Fehlerquellen denken:

  • Der Aufruf in der Funktion hookPaymentReturn stimmt nicht, denn meines Erachtens muss es in Zeile 454 nicht heißen:

     return $this->display(__FILE__, 'views/templates/hook/payment_return.tpl');
    
    sondern

     return $this->display(__FILE__, 'payment_return.tpl');
  • Die Variable wird als String übergeben, dann darf keine Formatprüfung stattfinden und es muss in der Datei /views/templates/hook/payment_return.tpl in Zeile 30 heißen:

    {if $status == 'true'}
    
    (Das dritte Gleichheitszeichen entfällt und der Rückgabewert wird in Anführungszeichen gesetzt.)

Hier hilft nur Ausprobieren ...  :)

 

kleine Optimierung: 

 

In deinem Codausschnitt wird nur auf 'true' und 'false' geprüft. Wenn jedoch ein anderer Zahlungsstatus gewählt wird oder der Fehler tatsächlich tiefer im Code liegt, könnte auch NULL ausgegeben werden - für den Fall müsste man folgendes machen:

{if $status === true}
	<p>
		{l s='Your order on' mod='sofortbanking'} <span class="bold">{$shop_name|escape:'htmlall':'UTF-8'}</span> {l s='is complete.' mod='sofortbanking'}
		<br /><br />
		{l s='The total amount of this order is' mod='sofortbanking'} <span class="price">{$total_to_pay|escape:'htmlall':'UTF-8'}</span>
	</p>
{elseif $status === false}
	<p class="warning">

		{l s='We noticed a problem with your order. If you think this is an error, you can contact our' mod='sofortbanking'} 
		<a href="{$base_dir_ssl|escape:'htmlall':'UTF-8'}contact-form.php">{l s='customer support' mod='sofortbanking'}</a>.
	</p>
{else} <p class="info">{l s='Your payment is processed. You will soon receive a message from us.'}</p>

{/if}

In dem Fall ist die Zahlung ja nichts desto trotz erfolgt. Der Kunde erhält dann eine Nachricht, sobald seine Ware versendet wurde bzw. er kann dann in seinem Kundenbereich einsehen, wenn seine Bestellung auf 'bezahlt' gesetzt wird.

Link to comment
Share on other sites

Ich glaube, du solltest dich zunächst mit der Funktionsweise des Moduls vertraut machen, dessen Code ich hier nur zitiert habe. ;)

Die Variable $status ist hier ein Wahrheitswert (boolean) - und der kann nur exakt zwei Zustände annehmen: WAHR (1) oder FALSCH (0)!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...