<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Magento &#8211; Roy Duineveld</title>
	<atom:link href="https://royduineveld.nl/tag/magento/feed/" rel="self" type="application/rss+xml" />
	<link>https://royduineveld.nl</link>
	<description>Waarom moeilijk doen als het makkelijk kan?</description>
	<lastBuildDate>Tue, 27 Jan 2026 07:48:00 +0000</lastBuildDate>
	<language>nl</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.9.26</generator>
	<item>
		<title>[EN] Magento 1 cacheleak exploit</title>
		<link>https://royduineveld.nl/magento-cacheleak-exploit/</link>
		<comments>https://royduineveld.nl/magento-cacheleak-exploit/#respond</comments>
		<pubDate>Mon, 09 Jan 2017 17:06:45 +0000</pubDate>
		<dc:creator><![CDATA[Roy Duineveld]]></dc:creator>
				<category><![CDATA[Tips & Trucs]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Magento]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">https://royduineveld.nl/?p=998</guid>
		<description><![CDATA[<p>In the last two years Magento did release a lot of patches for (security) issues with Magento 1. If you apply those patches shortly after the release you&#8217;re pretty save. But...</p>
<p>Het bericht <a rel="nofollow" href="https://royduineveld.nl/magento-cacheleak-exploit/">[EN] Magento 1 cacheleak exploit</a> verscheen eerst op <a rel="nofollow" href="https://royduineveld.nl">Roy Duineveld</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>In the last two years Magento did release a lot of patches for (security) issues with Magento 1. If you apply those patches shortly after the release you&#8217;re pretty save. But your server configuration is important too! For example when you switch the Apache webserver for Nginx, <code>.htaccess</code> files don&#8217;t work anymore so you&#8217;ve to make sure you&#8217;ve configured it safely.</p>
<p>You can find <code>.htaccess</code> files across multiple folders with a default Magento 1 installation, not only in the root. For example the <code>.htaccess</code> file in the <code>/var</code> directory blocks access to all files in there. Don&#8217;t forget to block access to that directory in your Nginx configuration too! If you don&#8217;t block access people can access log files and even cached files. You may think that&#8217;s not dangerous but it is, with this exploit you can get the MySQL database credentials.</p>
<ol>
<li>First, check if a website is vulnerable at <a href="https://magereport.com" target="_blank">magereport.com</a></li>
<li>Try to access the <code>resource_config.json</code> file by visiting <code>http://website.com/var/resource_config.json</code></li>
<li>Copy and modify the media directory path from the <code>resource_config.json</code> file to something like: <code>/home/users/username/website.com/app/etc</code> (make sure it points to <code>/app/etc</code>)</li>
<li>Create a MD5 hash from that path, for example with <a href="http://www.md5.cz/" target="_blank">http://www.md5.cz/</a> or generate it from the terminal: <code>php -r "echo md5('PATH');"</code> en replace the path, that will generate something like: 68095313d2b99db25e7ebcd5bc8d9642</li>
<li>Use the first 3 characters from that hash, with my example that will be 680</li>
<li>Visit <code>http://website.com/var/cache/mage--2/mage---XXX_CONFIG_GLOBAL</code> and replace the XXX with those 3 characters</li>
<li>Now you can search in the global configuration, you can find among other things the MySQL credentials here</li>
<li>Try to connect to the database remotely or search for a PhpMyAdmin or Adminer script</li>
</ol>
<p>From that point the possibilities are endless as I&#8217;ve written before in my <a href="https://royduineveld.nl/hacking-public-git-repositories/">Hacking public GIT repositories</a> post, from defacing to change payment provider credentials and further.</p>
<p>Why now publish this exploit? I&#8217;ve &#8220;created&#8221; it in 2015 but back then a lot of webshops where vulnerable. Meanwhile the percentage is pretty low so I thought; let&#8217;s share it with the world.</p>
<blockquote><p>Do you need a security audit for your webshop? <a href="https://royduineveld.nl/contact/">Contact me</a>!</p></blockquote>
<p>&nbsp;</p>
<p>Het bericht <a rel="nofollow" href="https://royduineveld.nl/magento-cacheleak-exploit/">[EN] Magento 1 cacheleak exploit</a> verscheen eerst op <a rel="nofollow" href="https://royduineveld.nl">Roy Duineveld</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://royduineveld.nl/magento-cacheleak-exploit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gulp / Grunt en BrowserSync / LiveReload</title>
		<link>https://royduineveld.nl/gulp-grunt-en-browsersync-livereload/</link>
		<comments>https://royduineveld.nl/gulp-grunt-en-browsersync-livereload/#respond</comments>
		<pubDate>Sat, 03 Jan 2015 15:44:18 +0000</pubDate>
		<dc:creator><![CDATA[Roy Duineveld]]></dc:creator>
				<category><![CDATA[Tips & Trucs]]></category>
		<category><![CDATA[BrowserSync]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Cygwin]]></category>
		<category><![CDATA[GIT]]></category>
		<category><![CDATA[Grunt]]></category>
		<category><![CDATA[Gulp]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[LESS]]></category>
		<category><![CDATA[LiveReload]]></category>
		<category><![CDATA[Magento]]></category>
		<category><![CDATA[Sublime Text]]></category>
		<category><![CDATA[Wamp]]></category>

		<guid isPermaLink="false">https://royduineveld.nl/?p=727</guid>
		<description><![CDATA[<p>Automatisch LESS/SASS compilen, CSS/JS minifien, je browser verversen én CSS injecteren? En nog op meerdere apparaten tegelijk ook? Dat kan! Hieronder een aantal handige tools om nog sneller te ontwikkelen!...</p>
<p>Het bericht <a rel="nofollow" href="https://royduineveld.nl/gulp-grunt-en-browsersync-livereload/">Gulp / Grunt en BrowserSync / LiveReload</a> verscheen eerst op <a rel="nofollow" href="https://royduineveld.nl">Roy Duineveld</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>Automatisch LESS/SASS compilen, CSS/JS minifien, je browser verversen én CSS injecteren? En nog op meerdere apparaten tegelijk ook? Dat kan! Hieronder een aantal handige tools om nog sneller te ontwikkelen!</p>
<h2><a title="Gulp" href="http://gulpjs.com/" target="_blank">Gulp</a> / <a title="Grunt" href="http://gruntjs.com/" target="_blank">Grunt</a></h2>
<p>Gulp en Grunt zijn &#8220;build systems&#8221; of &#8220;task runners&#8221;, hiermee kan je bestanden &#8220;watchen&#8221; en wanneer deze veranderen een taak uitvoeren. Tijdens het ontwikkelen is dit handig om bijvoorbeeld je LESS bestanden in de gaten te houden, wanneer deze veranderen kunnen deze automatisch omgezet worden naar CSS. Nadat het CSS is kan er nog een minifier overheen zodat het geheel nog verkleint wordt ook. Twee mooie voorbeelden van Gulp en Grunt taken zijn in het <a title="Magento Boilerplate" href="https://github.com/webcomm/magento-boilerplate" target="_blank">Magento Boilerplate</a> template te vinden: <a title="Gulpfile.js" href="https://github.com/webcomm/magento-boilerplate/blob/master/skin/frontend/boilerplate/default/gulpfile.js" target="_blank">gulpfile.js</a> en <a title="Gruntfile.js" href="https://github.com/webcomm/magento-boilerplate/blob/master/skin/frontend/boilerplate/default/Gruntfile.js" target="_blank">gruntfile.js</a>.</p>
<h2><a title="LiveReload" href="http://livereload.com/" target="_blank">LiveReload</a> / <a title="BrowserSync" href="http://www.browsersync.io/" target="_blank">BrowserSync</a></h2>
<p>Tijdens het ontwikkelen switch je continu tussen je editor/IDE en je browser(s) om te kijken of het resultaat naar wens is. Dit switchen kost niet heel veel tijd maar kan sneller! LiveReload of BrowsesrSync kan je aan je Gulp of Grunt taak hangen en zorgt ervoor dat wanneer een bestand wijzigt automatisch je browser ververst wordt. CSS kan &#8220;geïnjecteerd&#8221; worden zodat de pagina niet eens herladen hoeft te worden. In het verleden heb ik LiveReload gebruikt vanuit het Magento Boilerplate, inmiddels overgestapt naar BrowserSync omdat daarbij géén browser plugin nodig is, het op meerdere apparaten tegelijk werkt en het acties op een pagina ook synchroniseert (scrollen, klikken en typen). Een korte video tutorial van <a title="Tuts+" href="http://tutsplus.com/" target="_blank">Tuts+</a>:</p>
<p><iframe src="//www.youtube.com/embed/heNWfzc7ufQ?rel=0" width="480" height="360" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
<h2><a title="Bless CSS" href="http://blesscss.com/" target="_blank">Bless</a></h2>
<p>Recent liep ik tegen het probleem aan dat niet alle styling in Internet Explorer 9 tevoorschijn kwam. Tja, sommige klanten hebben nog veel bezoekers vanuit IE9 en dan dient IE9 gewoon ondersteund te worden. Klant is koning! Na veel proberen met allerlei <a title="IE Tester" href="http://www.my-debugbar.com/wiki/IETester/HomePage" target="_blank">crappy tools</a> maar even een <a title="Modern IE" href="http://modern.ie" target="_blank">image</a> erbij gepakt van Windows 7 met Internet Explorer 9 en in <a title="Virtual Box" href="https://www.virtualbox.org/" target="_blank">Virtual Box</a> geladen. Na veel geprobeerd te hebben bleek IE9 een <a title="Antwoord op Stack Overflow" href="http://stackoverflow.com/a/9906889/622945" target="_blank">limiet van CSS regels</a> te hebben waardoor de helft van de styling maar geladen werd. De oplossing hiervoor is Bless! Deze splitst de CSS op in meerdere bestanden waardoor IE9 niet meer onderuit gaat. Tevens kan Bless gebruikt worden vanuit <a title="Bless voor Gulp" href="https://github.com/adam-lynch/gulp-bless" target="_blank">Gulp</a> of <a title="Bless voor Grunt" href="https://github.com/Ponginae/grunt-bless" target="_blank">Grunt</a> waardoor dit automatisch geregeld wordt.</p>
<blockquote><p>Mijn ideale ontwikkel omgeving? <a title="Sublime Text 3" href="http://www.sublimetext.com/3" target="_blank">Sublime Text 3</a>, <a title="Gulp" href="http://gulpjs.com/" target="_blank">Gulp</a> (met <a title="Gulp LESS" href="https://github.com/plus3network/gulp-less" target="_blank">LESS</a>, <a title="Gulp Minify CSS" href="https://github.com/jonathanepollack/gulp-minify-css" target="_blank">Minify</a>, <a title="Gulp Uglify" href="https://github.com/terinjokes/gulp-uglify" target="_blank">Uglify</a>, <a title="Gulp Bless" href="https://github.com/adam-lynch/gulp-bless" target="_blank">Bless</a> en <a title="Gulp BrowserSync" href="http://www.browsersync.io/docs/gulp/" target="_blank">BrowserSync</a>), <a title="GIT" href="http://git-scm.com/" target="_blank">GIT</a> (vanuit <a title="Cygwin" href="https://www.cygwin.com/" target="_blank">Cygwin</a>) en <a title="WAMP" href="http://www.wampserver.com/en/" target="_blank">WAMP</a>!</p></blockquote>
<p>Het bericht <a rel="nofollow" href="https://royduineveld.nl/gulp-grunt-en-browsersync-livereload/">Gulp / Grunt en BrowserSync / LiveReload</a> verscheen eerst op <a rel="nofollow" href="https://royduineveld.nl">Roy Duineveld</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://royduineveld.nl/gulp-grunt-en-browsersync-livereload/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Geavanceerd Bootstrap 3 gebruik</title>
		<link>https://royduineveld.nl/geavanceerd-bootstrap-3-gebruik/</link>
		<comments>https://royduineveld.nl/geavanceerd-bootstrap-3-gebruik/#respond</comments>
		<pubDate>Sat, 03 Jan 2015 13:35:39 +0000</pubDate>
		<dc:creator><![CDATA[Roy Duineveld]]></dc:creator>
				<category><![CDATA[Tips & Trucs]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[LESS]]></category>
		<category><![CDATA[Magento]]></category>
		<category><![CDATA[Twitter Bootstrap]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">https://royduineveld.nl/?p=718</guid>
		<description><![CDATA[<p>Bootstrap, een geweldig HTML, CSS en JS framework om snel en eenvoudig responsive websites mee te ontwikkelen. Echter hekelen veel mensen tegen het &#8220;probleem&#8221; dat de HTML &#8220;vervuild&#8221; wordt met...</p>
<p>Het bericht <a rel="nofollow" href="https://royduineveld.nl/geavanceerd-bootstrap-3-gebruik/">Geavanceerd Bootstrap 3 gebruik</a> verscheen eerst op <a rel="nofollow" href="https://royduineveld.nl">Roy Duineveld</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>Bootstrap, een geweldig HTML, CSS en JS framework om snel en eenvoudig responsive websites mee te ontwikkelen. Echter hekelen veel mensen tegen het &#8220;probleem&#8221; dat de HTML &#8220;vervuild&#8221; wordt met alle classes die nodig zijn voor de styling. Kan dat niet anders?</p>
<h2>Bootstrap 3 met <a title="LESS" href="http://lesscss.org/" target="_blank">LESS</a></h2>
<p>Dat kan zeker anders! Gebruik de <a title="Bootstrap LESS bestanden" href="http://getbootstrap.com/css/#less" target="_blank">LESS bestanden van Bootstrap</a>! LESS moet wél ge-compiled worden naar gewoon CSS, hiervoor zijn tal van plugins te vinden voor populaire systemen als <a title="LESS plugin voor WordPress" href="https://wordpress.org/plugins/wp-less/" target="_blank">WordPress</a> en <a title="LESS plugin voor Magento" href="http://www.magentocommerce.com/magento-connect/magemaven-lesscss.html" target="_blank">Magento</a>, maar nog handiger is <a title="Grunt" href="http://gruntjs.com/" target="_blank">Grunt</a> of <a title="Gulp" href="http://gulpjs.com/" target="_blank">Gulp</a>! Alleen door LESS te gebruiken ben je er natuurlijk niet, daarvoor zijn er in <a title="LESS mixins" href="http://lesscss.org/features/#mixins-feature" target="_blank">LESS mixins</a>! In de Bootstrap documentatie zie je op meerdere plekken voorbeelden staan met &#8220;Usage as a Mixin&#8221; als commentaar erbij. Hiermee kan je classes aan selectors hangen.</p>
<h3>Bootstrap classes aan CSS selectors</h3>
<p>Wanneer je een afbeelding ronde hoeken wilt geven heeft Bootstrap hier de &#8220;img-rounded&#8221; class voor, in de <a title="Bootstrap image shapes" href="http://getbootstrap.com/css/#images-shapes" target="_blank">documentatie</a> staat dat deze als volgt gebruikt kan worden:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;img src=&quot;...&quot; alt=&quot;...&quot; class=&quot;img-rounded&quot;&gt;
</pre>
<p>Wanneer je alle afbeeldingen op je website ronde hoeken wilt geven, kan dit middels LESS i.c.m. Bootstrap als volgt gedaan worden:</p>
<pre class="brush: css; title: ; notranslate">
img {
	.img-rounded();
}
</pre>
<p>Op die manier zijn de classes in de HTML niet nodig!</p>
<h3>Bootstrap Grid met mixins</h3>
<p>Niet alleen de &#8220;eenvoudige&#8221; dingen uit Bootstrap kunnen op deze manier gebruikt worden, maar ook bijvoorbeeld het <a title="Bootstrap grid i.c.m. LESS" href="http://getbootstrap.com/css/#grid-less" target="_blank">Bootstrap Grid</a>! Een stukje HTML als voorbeeld:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div class=&quot;container&quot;&gt;
	&lt;div class=&quot;menu&quot;&gt;&lt;/div&gt;
	&lt;div class=&quot;content&quot;&gt;&lt;/div&gt;
&lt;/div&gt;
</pre>
<p>Wanneer je van de container een row wilt maken en van menu en content een kolom dan kan je dit als volgt doen:</p>
<pre class="brush: css; title: ; notranslate">
.container {
	.make-row();

	.menu {
		.make-md-column(3);
	}

	.content {
		.make-md-column(9);
	}
}
</pre>
<blockquote><p>Een heel mooi voorbeeld waar dit gebruikt wordt is het <a href="https://github.com/webcomm/magento-boilerplate" title="Magento Boilerplate" target="_blank">Magento Boilerplate</a>!</p></blockquote>
<p>Het bericht <a rel="nofollow" href="https://royduineveld.nl/geavanceerd-bootstrap-3-gebruik/">Geavanceerd Bootstrap 3 gebruik</a> verscheen eerst op <a rel="nofollow" href="https://royduineveld.nl">Roy Duineveld</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://royduineveld.nl/geavanceerd-bootstrap-3-gebruik/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Magento module in- of uitschakelen per winkel</title>
		<link>https://royduineveld.nl/magento-module-in-of-uitschakelen-per-winkel/</link>
		<comments>https://royduineveld.nl/magento-module-in-of-uitschakelen-per-winkel/#respond</comments>
		<pubDate>Thu, 28 Aug 2014 07:58:13 +0000</pubDate>
		<dc:creator><![CDATA[Roy Duineveld]]></dc:creator>
				<category><![CDATA[Tips & Trucs]]></category>
		<category><![CDATA[Magento]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">https://royduineveld.nl/?p=685</guid>
		<description><![CDATA[<p>Standaard kan er in de backend van Magento via &#8220;system-&#62; configuration -&#62; advanced&#8221; een module in- of uitgeschakeld worden per winkel. Wanneer je op deze manier een module uitschakelt worden echter enkel de...</p>
<p>Het bericht <a rel="nofollow" href="https://royduineveld.nl/magento-module-in-of-uitschakelen-per-winkel/">Magento module in- of uitschakelen per winkel</a> verscheen eerst op <a rel="nofollow" href="https://royduineveld.nl">Roy Duineveld</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>Standaard kan er in de backend van Magento via &#8220;system-&gt; configuration -&gt; advanced&#8221; een module in- of uitgeschakeld worden per winkel. Wanneer je op deze manier een module uitschakelt worden echter enkel de frontend zaken uitgeschakeld. Mocht je ergens op in haken met bijvoorbeeld een observer blijft dit gewoon actief!</p>
<h2>Magento module helemaal uitschakelen</h2>
<p>Om een Magento module helemaal uit te schakelen (dus voor elke winkel binnen Magento) is de beste optie om deze in zijn module xml uit te schakelen. Te vinden in: &#8220;app/etc/modules/&#8221;, verander hier &#8220;active&#8221; naar &#8220;false&#8221;:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;active&gt;false&lt;/active&gt;
</pre>
<h2>Magento module per winkel uitschakelen</h2>
<p>Hier zijn meerdere mogelijkheden, wat je vaak ziet is dat modules een eigen configuratie in de backend hebben waarbij een module in- of uitgeschakeld kan worden, dit is dan ook per winkel in te stellen. Om dit voor elkaar te krijgen dien je de configuratie opties in je config of system.xml te definiëren en deze waardes uit te lezen in je code. Wanneer deze functionaliteit niet aanwezig is of je bezig bent met een eigen module is er een makkelijkere optie! Stel je gebruikt een observer om ergens op in te haken, bijvoorbeeld dit event:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;checkout_cart_add_product_complete&gt;
	&lt;observers&gt;
		&lt;bd_skipcart_observer&gt;
			&lt;type&gt;singleton&lt;/type&gt;
			&lt;class&gt;RD_Skipcart_Model_Observer&lt;/class&gt;
			&lt;method&gt;afterAddToCart&lt;/method&gt;
		&lt;/bd_skipcart_observer&gt;
	&lt;/observers&gt;
&lt;/checkout_cart_add_product_complete&gt;
</pre>
<p>Dan staat de functionaliteit in je observer model, bijvoorbeeld:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
class RD_Skipcart_Model_Observer extends Varien_Object
{
	public function afterAddToCart(Varien_Event_Observer $observer) {

		$response = $observer-&gt;getResponse();

		$response-&gt;setRedirect(Mage::getUrl('checkout/onepage'));
		Mage::getSingleton('checkout/session')-&gt;setNoCartRedirect(true);

	}
}
</pre>
<p>Zet hier een if statement omheen waarbij je de waarde uit de configuratie uitlees zoals aan het begin van dit bericht omschreven:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
class RD_Skipcart_Model_Observer extends Varien_Object
{
	public function afterAddToCart(Varien_Event_Observer $observer) {

		if(!Mage::getStoreConfigFlag('advanced/modules_disable_output/RD_SkipCart')) {

			$response = $observer-&gt;getResponse();

			$response-&gt;setRedirect(Mage::getUrl('checkout/onepage'));
			Mage::getSingleton('checkout/session')-&gt;setNoCartRedirect(true);

		}
	}
}
</pre>
<p>Op deze manier kan je module functioneel in- en uitgeschakeld worden per winkel middels de al aanwezige functionaliteit in Magento.</p>
<blockquote><p>Dit is naar mijn idee een veel nettere oplossing dan dat je elders op het internet tegen komt, bijvoorbeeld het idee van <a title="Ga naar de oplossing van Inchoo" href="http://inchoo.net/ecommerce/magento/how-to-activatedeactivate-magento-module-per-a-website-level/" target="_blank">Inchoo</a> welke je tegen komt als je zoekt naar deze functionaliteit.</p></blockquote>
<p>Het bericht <a rel="nofollow" href="https://royduineveld.nl/magento-module-in-of-uitschakelen-per-winkel/">Magento module in- of uitschakelen per winkel</a> verscheen eerst op <a rel="nofollow" href="https://royduineveld.nl">Roy Duineveld</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://royduineveld.nl/magento-module-in-of-uitschakelen-per-winkel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Magento bug, dubbel totaal betaald bedrag oplossing</title>
		<link>https://royduineveld.nl/magento-bug-dubbel-totaal-betaald-bedrag-oplossing/</link>
		<comments>https://royduineveld.nl/magento-bug-dubbel-totaal-betaald-bedrag-oplossing/#comments</comments>
		<pubDate>Fri, 15 Nov 2013 08:59:44 +0000</pubDate>
		<dc:creator><![CDATA[Roy Duineveld]]></dc:creator>
				<category><![CDATA[Tips & Trucs]]></category>
		<category><![CDATA[Magento]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">https://royduineveld.nl/?p=539</guid>
		<description><![CDATA[<p>In Magento (versie 1.7.0.2), athans in de combinatie Magento en de iDEAL checkout module, zit een bug welke het totaal betaald bedrag verdubbeld na het aanmaken van een factuur in...</p>
<p>Het bericht <a rel="nofollow" href="https://royduineveld.nl/magento-bug-dubbel-totaal-betaald-bedrag-oplossing/">Magento bug, dubbel totaal betaald bedrag oplossing</a> verscheen eerst op <a rel="nofollow" href="https://royduineveld.nl">Roy Duineveld</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>In Magento (versie 1.7.0.2), athans in de combinatie Magento en de <a title="Ga naar de iDEAL checkout plugin" href="https://www.ideal-checkout.nl/ideal-voor-magento.html" target="_blank">iDEAL checkout module</a>, zit een bug welke het totaal betaald bedrag verdubbeld na het aanmaken van een factuur in de backend. Na onderzoek gedaan te hebben naar deze bug schijnt dit in combinatie te zijn met verschillende betalings-modules, waaronder Paypal en de in mijn geval gebruikte iDEAL module.</p>
<p><a href="https://royduineveld.nl/wp-content/uploads/2013/11/magento-total-payed.png"><img class="aligncenter size-full wp-image-540" alt="Magento totaal betaald dubbel" src="https://royduineveld.nl/wp-content/uploads/2013/11/magento-total-payed.png" width="241" height="228" /></a></p>
<h2>Het probleem</h2>
<p>Deze bug wordt veroorzaakt doordat de betaling geregistreerd wordt door de betalings-module en bij het aanmaken van een factuur nogmaals.</p>
<h2>De oplossing</h2>
<p>Op het moment dat een betaling geregistreerd wordt zou er gekeken moeten worden of er al een betaling geregistreerd is. Om dit voor elkaar te krijgen dient het &#8220;Order Invoice Model&#8221; ge-extend te worden waar de &#8220;pay&#8221; functie in zit. Om dit mooi op te lossen is het verstandig om een module te maken welke enkel die functie override. Een minder nette oplossing welke ik hier bespreek is de hele class kopiëren naar de &#8220;local&#8221; map en daar de functie aanpassen.</p>
<p>De eerste stap is de class kopiëren: &#8220;app/code/core/Mage/sales/model/order/Invoice.php&#8221;, maak hierna deze mappen structuur aan in de &#8220;local&#8221; folder, dus: &#8220;app/code/local/Mage/sales/model/order/&#8221; en zet de gekopieerde code in een nieuw bestand &#8220;Invoice.php&#8221;. Hierna de &#8220;pay&#8221; functie opzoeken en vervangen door:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
/**
 * Pay invoice
 *
 * @return Mage_Sales_Model_Order_Invoice
 */
public function pay()
{
    if ($this-&gt;_wasPayCalled) {
        return $this;
    }
    $this-&gt;_wasPayCalled = true;

    $invoiceState = self::STATE_PAID;
    if ($this-&gt;getOrder()-&gt;getPayment()-&gt;hasForcedState()) {
        $invoiceState = $this-&gt;getOrder()-&gt;getPayment()-&gt;getForcedState();
    }

    $this-&gt;setState($invoiceState);

    $this-&gt;getOrder()-&gt;getPayment()-&gt;pay($this);

    if ($this-&gt;getOrder()-&gt;getTotalPaid() == $this-&gt;getOrder()-&gt;getGrandTotal()) {
        $this-&gt;getOrder()-&gt;setTotalPaid( $this-&gt;getOrder()-&gt;getTotalPaid() );
        $this-&gt;getOrder()-&gt;setBaseTotalPaid( $this-&gt;getOrder()-&gt;getBaseTotalPaid() );
    } else {
        $this-&gt;getOrder()-&gt;setTotalPaid( $this-&gt;getOrder()-&gt;getTotalPaid() + $this-&gt;getGrandTotal() );
        $this-&gt;getOrder()-&gt;setBaseTotalPaid( $this-&gt;getOrder()-&gt;getBaseTotalPaid() + $this-&gt;getBaseGrandTotal() );
    }

    Mage::dispatchEvent('sales_order_invoice_pay', array($this-&gt;_eventObject=&gt;$this));
    return $this;
}
</pre>
<h2>Toekomst</h2>
<p>Of, en wanneer deze bug door Magento opgelost gaat worden is onbekend, maar mocht het opgelost worden in een toekomstige versie en je hebt bovenstaande oplossing gebruikt dan kan je tegen problemen aanlopen omdat mogelijk de class, of alleen de &#8220;pay&#8221; functie gewijzigd is. Nogmaals, het is aan te raden enkel de &#8220;pay&#8221; functie te override-n door zelf een module te maken!</p>
<p>Het bericht <a rel="nofollow" href="https://royduineveld.nl/magento-bug-dubbel-totaal-betaald-bedrag-oplossing/">Magento bug, dubbel totaal betaald bedrag oplossing</a> verscheen eerst op <a rel="nofollow" href="https://royduineveld.nl">Roy Duineveld</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://royduineveld.nl/magento-bug-dubbel-totaal-betaald-bedrag-oplossing/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>