Het forum voor de webwinkel eigenaar en bezoeker van webwinkels.

 
Midi
Berichten: 6
Lid geworden op: 23 mei 2015

Fatal Error bij het doorsturen naar iDeal

23 mei 2015

Veel van onze klanten krijgen bij het doorsturen naar iDeal een error, waardoor ze de bestelling niet kunnen afrekenen. Eerst dachten wij dat het alleen bij MacOS/ iOS gebeurde, maar zijn achter gekomen dat dit ook gewoon bij Windows het geval is. Nu denken sommige collega's dat het Ziggo ligt. Het gebeurt meestal bij de klanten met Ziggo. Persoonlijk denk ik dat het ergens anders aan ligt. Deze error is:
Fatal error: Call to a member function getMethodinstance() on a non-object in
/home/........./public_html/app/code/community/Appmerce/Internetkassa/Block/Placement.php on line 73
Er hebben al meerdere mensen naar dit probleem gekeken (ook Appmerce) en iedereen schuift het probleem naar een ander. En wij en onze klanten zijn hier nog steeds de dupe van.
Kan iemand ons helpen om dit probleem op te lossen?
 
PaulG
Berichten: 1676
Lid geworden op: 31 maart 2011

Re: Fatal Error bij het doorsturen naar iDeal

23 mei 2015

In de function getMethodinstance() die wordt aangeroepen met variabele (1 of meer) zit er dus eentje die leeg is (NULL) of geen object is. Met een var_dump moet de programmeur kijken wat er met de variable is. En als hij inderdaad leeg is dan terug zoeken (eerder in programma) waar hij leeg gemaakt wordt of waarom hij niet gevuld wordt waar dat zou moeten gebeuren.
Het probleem is denk dat veel websites bouwers alleen modules in elkaar schuiven en niet goed weten wat er allemaal gebeurt. Als ze dan ook van verschillende bedrijven zijn dan wordt het probleem inderdaad naar de ander doorgeschoven. (Onze module werkt overal dus ligt het aan de ander...)
 
Gebruikersavatar
Ward
Berichten: 5343
Lid geworden op: 18 december 2010
Locatie: Eindhoven
Contacteer:

Re: Fatal Error bij het doorsturen naar iDeal

23 mei 2015

Het probleem is denk dat veel websites bouwers alleen modules in elkaar schuiven en niet goed weten wat er allemaal gebeurt. Als ze dan ook van verschillende bedrijven zijn dan wordt het probleem inderdaad naar de ander doorgeschoven. (Onze module werkt overal dus ligt het aan de ander...)
So true...

In dit geval is het gelukkig zo klaar als een klontje: de fout staat op regel 73 van het bestand Placement.php in de directory /Appmerce/Internetkassa/Block/. Dat is waarschijnlijk te wijten aan Appmerce...

Kun je dat PHP-bestand hier eens posten?
 
Midi
Berichten: 6
Lid geworden op: 23 mei 2015

Re: Fatal Error bij het doorsturen naar iDeal

23 mei 2015

Bedankt voor je antwoord. Het probleem is dat Appmerce zegt dat het niet aan hun extensie ligt. Hieronder het php- bestand:
De error wordt aangegeven op de line 73 en 76.
Line 73 = */
Line 76 = return $this->_getOrder()->getPayment()->getMethodInstance()->getFormFields($this->_getOrder());
class Appmerce_Internetkassa_Block_Placement extends Mage_Core_Block_Template
{
    public function __construct()
    {
    }

    /**
     * Return checkout session
     *
     * @return Mage_Checkout_Model_Session
     */
    public function getCheckout()
    {
        return Mage::getSingleton('checkout/session');
    }

    /**
     * Return payment API model
     *
     * @return Appmerce_Internetkassa_Model_Api_Hosted
     */
    protected function getApi()
    {
        return Mage::getSingleton('internetkassa/api');
    }

    /**
     * Return order instance by lastRealOrderId
     *
     * @return Mage_Sales_Model_Order
     */
    protected function _getOrder()
    {
        if ($this->getOrder()) {
			if ($this->getOrder()->getPayment()) {
				return $this->getOrder();
			} else {
				$orderIncrementId = $this->getCheckout()->getLastRealOrderId();
				return Mage::getModel('sales/order')->loadByIncrementId($orderIncrementId);
			}
        } elseif ($orderIncrementId = $this->getCheckout()->getLastRealOrderId()) {
            return Mage::getModel('sales/order')->loadByIncrementId($orderIncrementId);
        } else {
            return null;
        }
    }

    /**
     * Return placement form fields
     *
     * @return array
     */
    public function getFormData()
    {
        return $this->_getOrder()->getPayment()->getMethodInstance()->getFormFields($this->_getOrder());
    }

    /**
     * Return gateway path from admin settings
     *
     * @return string
     */
    public function getFormAction()
    {
        return $this->_getOrder()->getPayment()->getMethodInstance()->getGatewayUrl('redirect');
    }

}
Advertentie

Met Shopify maak je zelf je eigen webwinkel dankzij meer dan honderd thema’s en de complete appstore. Shopify sluit ook goed aan op dropshippers. De software is technisch volledig SEO-geoptimaliseerd en biedt alle sociale media-integraties. Meer info op Shopify.com.

 
Gebruikersavatar
Ward
Berichten: 5343
Lid geworden op: 18 december 2010
Locatie: Eindhoven
Contacteer:

Re: Fatal Error bij het doorsturen naar iDeal

23 mei 2015

Dat zijn minder dan 70 regels ... dus dan kunnen we de fout op regel 73 en 76 niet vinden!

Is hier een open-source versie van? Of eventueel een download?
 
Midi
Berichten: 6
Lid geworden op: 23 mei 2015

Re: Fatal Error bij het doorsturen naar iDeal

23 mei 2015

Dit is het volledig php-bestand
<?php
/**
 * Appmerce - Applications for Ecommerce
 * http://www.appmerce.com
 *
 * @extension   Internetkassa
 * @type        Payment method
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Open Software License (OSL 3.0)
 * that is bundled with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://opensource.org/licenses/osl-3.0.php
 *
 * @category    Magento
 * @package     Appmerce_Internetkassa
 * @copyright   Copyright (c) 2011-2014 Appmerce (http://www.appmerce.com)
 * @license     http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
 */

class Appmerce_Internetkassa_Block_Placement extends Mage_Core_Block_Template
{
    public function __construct()
    {
    }

    /**
     * Return checkout session
     *
     * @return Mage_Checkout_Model_Session
     */
    public function getCheckout()
    {
        return Mage::getSingleton('checkout/session');
    }

    /**
     * Return payment API model
     *
     * @return Appmerce_Internetkassa_Model_Api_Hosted
     */
    protected function getApi()
    {
        return Mage::getSingleton('internetkassa/api');
    }

    /**
     * Return order instance by lastRealOrderId
     *
     * @return Mage_Sales_Model_Order
     */
    protected function _getOrder()
    {
        if ($this->getOrder()) {
			if ($this->getOrder()->getPayment()) {
				return $this->getOrder();
			} else {
				$orderIncrementId = $this->getCheckout()->getLastRealOrderId();
				return Mage::getModel('sales/order')->loadByIncrementId($orderIncrementId);
			}
        } elseif ($orderIncrementId = $this->getCheckout()->getLastRealOrderId()) {
            return Mage::getModel('sales/order')->loadByIncrementId($orderIncrementId);
        } else {
            return null;
        }
    }

    /**
     * Return placement form fields
     *
     * @return array
     */
    public function getFormData()
    {
        return $this->_getOrder()->getPayment()->getMethodInstance()->getFormFields($this->_getOrder());
    }

    /**
     * Return gateway path from admin settings
     *
     * @return string
     */
    public function getFormAction()
    {
        return $this->_getOrder()->getPayment()->getMethodInstance()->getGatewayUrl('redirect');
    }

}
 
Gebruikersavatar
Ward
Berichten: 5343
Lid geworden op: 18 december 2010
Locatie: Eindhoven
Contacteer:

Re: Fatal Error bij het doorsturen naar iDeal

23 mei 2015

Ja, daar was ik dus al bang voor...

Paul heeft gelijk: er zit een domme copy/paste beginnersfout in die plug-in.

Laat Appmerce die fout verhelpen: het is hun fout.

Komen ze er toch niet uit, dan kunnen ze me mailen, zodat we het eens kunnen worden over een redelijk uurtarief van een professionele webdeveloper.
 
Midi
Berichten: 6
Lid geworden op: 23 mei 2015

Re: Fatal Error bij het doorsturen naar iDeal

26 mei 2015

Vandaag hebben wij een antwoord van Appmerce gekregen. Ze zeggen dat er geen fout zit in de extensie en dat er geen copy/ paste fout in zit, omdat het origineel werk is.
Het feit blijft dat (voornamelijk Ziggo klanten met iOS en MacOS) niet kunnen afrekenen en ze allemaal dezelfde foutmelding krijgen (zie boven).
Als de fout niet in de extensie van Appmerce zit, waar zou het dan wel kunnen zijn?
 
Gebruikersavatar
Ward
Berichten: 5343
Lid geworden op: 18 december 2010
Locatie: Eindhoven
Contacteer:

Re: Fatal Error bij het doorsturen naar iDeal

26 mei 2015

Als de fout niet in de extensie van Appmerce zit, waar zou het dan wel kunnen zijn?
De foutmelding komt uit de app van Appmerce,
dus zit de fout in de app van Appmerce.

Programmeren heeft een onverbiddelijke logica.

Lees om te beginnen eerst dit eens:

The most misunderstood concept in Magento

Gelezen? Dan heb je de fout ook gevonden. :D
 
Midi
Berichten: 6
Lid geworden op: 23 mei 2015

Re: Fatal Error bij het doorsturen naar iDeal

26 mei 2015

Hartstikke bedankt voor je antwoord, Ward. Respect hiervoor. Heb het artikel gelezen, maar heb helaas te weinig kennis om het goed te begrijpen.
Wat ik wel vreemd vind is dat de meeste klanten wel zonder problemen kunnen afrekenen en de anderen niet. Deze logica begrijp ik ook niet.
Het punt blijft dat ik nog steeds niet weet wat de oplossing is. Best frustrerend, want ik word overal van het kastje naar de muur gestuurd :(
 
Gebruikersavatar
Ward
Berichten: 5343
Lid geworden op: 18 december 2010
Locatie: Eindhoven
Contacteer:

Re: Fatal Error bij het doorsturen naar iDeal

26 mei 2015

Nou, vooruit dan, omdat ik in een goede bui ben.

Hoewel we niet aan symptoombestrijding mogen doen, moeten we beginnen bij de symptomen:
Fatal error: Call to a member function getMethodinstance() on a non-object in
/home/........./public_html/app/code/community/Appmerce/Internetkassa/Block/Placement.php on line 76
De ellende begint op regel 76 in de app van Appmerce. Ze kunnen tien of honderd keer roepen van niet, maar het staat in de foutmelding: die noemt de boosdoener met naam en toenaam.

Het symptoom is de patiënt helaas meteen fataal: een fatal error legt het PHP-script plat en mag dus nooit voorkomen in productiecode — en al helemaal niet in apps voor betalingen. Twee beginnersfouten: geen foutafhandeling ingebouwd en onvoldoende getest.

Nu we weten aan welke fatale aandoening de patiënt is overleden, kunnen we eens verder zoeken.

Wat staat er op regel 76?
        return $this->_getOrder()->getPayment()->getMethodInstance()->getFormFields($this->_getOrder());
Dat is een aanroep in de methode getFormData():
    /**
     * Return placement form fields:
     *
     * @return array
     */
    public function getFormData()
    {
        return $this->_getOrder()->getPayment()->getMethodInstance()->getFormFields($this->_getOrder());
    }
Deze method chain begint met een aanroep van $this->_getOrder(). Met $this wordt naar het huidige object verwezen, dus verwachten we de methode _getOrder() in de code van deze class. Maar nee, daar komt de methode niet voor.

Dan moet de methode voorkomen in de parent class, de ouderklasse waarvan deze klasse is afgeleid. Eens kijken welke dat is:
class Appmerce_Internetkassa_Block_Placement extends Mage_Core_Block_Template
{

}
Aha, de klasse Appmerce_Internetkassa_Block_Placement van Appmerce borduurt voort op Mage_Core_Block_Template van de Magento-core. Klinkt ook heel waarschijnlijk: een Block_Template is iets met een template voor een blok en /Block/Placement.php klinkt als iets dat met de plaatsing van dat blok samenhangt.

In de methode __construct(), de constructor, neem Appmerce echter een bijzondere bocht:
class Appmerce_Internetkassa_Block_Placement extends Mage_Core_Block_Template
{
    public function __construct()
    {
    }
}
Daarmee wordt alle code van de constructor van Mage_Core_Block_Template tenietgedaan. Kan zijn dat Appmerce daarvoor een goede reden had, kan ook zijn dat de dienstdoende Appmercer vers van de Knutsel & Plak Academie is.

Ik zou hier minstens dit verwachten:
class Appmerce_Internetkassa_Block_Placement extends Mage_Core_Block_Template
{
    public function __construct()
    {
        parent::__construct();
    }
}
Je kunt het ze allicht vragen...
 
Gebruikersavatar
Jan Roelofsen
Berichten: 1458
Lid geworden op: 30 oktober 2011
Locatie: Renswoude
Contacteer:

Re: Fatal Error bij het doorsturen naar iDeal

27 mei 2015

En Ward, de gebaksdoos al in ontvangst genomen :lol:
 
Midi
Berichten: 6
Lid geworden op: 23 mei 2015

Re: Fatal Error bij het doorsturen naar iDeal

27 mei 2015

Die heeft Ward zeker verdiend, maar Appmerce blijft bij hun standpunt. Ze willen er niet eens naar kijken. Blijkbaar zijn wij de enige met deze error en ligt het aan ons.
Er hebben al meerdere mensen naar deze error gekeken. Helaas blijft het bij kijken, omdat iedereen vindt dat Appmerce er iets aan moet doen.
Maar ja. Wij schieten er ook niks mee op....Heb minstens een gebak over voor degene die het oplost, :D
  • Vergelijkbare Onderwerpen
    Reacties
    Weergaves
    Laatste bericht