Rabobank OmniKassa automaticResponseUrl betalingstatus updates

De Rabobank OmniKassa oplossing heeft ondersteuning voor een zogenaamde automaticResponseUrl parameter. Bij het starten van een transactie kan hier een URL in opgegeven worden. Vervolgens zal de OmniKassa betalingsstatus updates doorgeven aan deze URL.

Nu krijg ik als ontwikkelaar van de Pronamic iDEAL plugin regelmatig klachten over dat de betalingsstatus updates van de OmniKassa niet functioneren. Blijkbaar worden de betalingsstatus updates van de OmniKassa dan niet correct verwerkt. Het is echter lastig om te achterhalen wat wanneer mis gaat.

Het betalingsstatus request van de OmniKassa kan namelijk op verschillende locaties niet goed verwerkt worden. Allereerst moet de automatische response URL natuurlijk bereikbaar zijn voor de OmniKassa. Maar hoe controleer je of de OmniKassa je website goed kan bereiken?

De server logboeken zijn vaak een goed startpunt om dit te onderzoeken. De automatisch OmniKassa betalingsstatus updates requests zien er in een Apache logboek vaak zo uit:

160.92.133.135 - - [06/Feb/2015:12:12:45 +0100] "POST / HTTP/1.0" 302 283 "-" "Java/1.6.0_45"
160.92.133.135 - - [06/Feb/2015:12:12:46 +0100] "GET / HTTP/1.0" 200 58249 "-" "Java/1.6.0_45"

Belangrijke en opvallende punten hierin zijn het IP-adres 160.92.133.135 en de User-Agent Java/1.6.0_45. Na een zoektocht op internet kwam ik al snel de volgende Twitter conversatie tegen met een goede tip:

Mochten de automatisch OmniKassa betalingsstatus updates niet correct functioneren dan is het verstandig om te informeren of je hostingprovider de volgende IP-adress kan ‘whitelisten':

  • 160.92.133.135
  • 193.56.46.18

Homebrew PHP memory limit verhogen voor Composer

Ik heb op mijn blog al regelmatig geschreven over Homebrew (brew), PHP en Composer. Soms komt het voor dat bij het uitvoeren van een Composer commando memory limit fouten optreden. Bijvoorbeeld:

$ composer update

Loading composer repositories with package information
Updating dependencies (including require-dev)

PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted at Zend/zend_vm_execute.h:551 (tried to allocate 32 bytes) in phar:///usr/local/Cellar/composer/1.0.0-alpha8/libexec/composer.phar/src/Composer/DependencyResolver/RuleWatchGraph.php on line 52

Dergelijke fouten zijn vrij eenvoudig op te lossen door de memory limit te verhogen. Dit kan eenvoudig door in het PHP configuratie bestand de memory limit te verhogen.

Hiervoor moet je echter wel weten wat de locatie is van PHP configuratie bestand. Met Homebrew is dit gelukkig eenvoudig te achterhalen. Hiervoor moeten we eerst weten van welke PHP versie we gebruik maken:

$ php -v

PHP 5.6.3 (cli) (built: Nov 16 2014 12:01:32) (DEBUG)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2014 Zend Technologies
    with Xdebug v2.2.5, Copyright (c) 2002-2014, by Derick Rethans

Vervolgens kunnen we met het Homebrew info commando aanvullende informatie opvragen:

$ brew info php56

Dit commando zal de nodige informatie geven over PHP en onder het kopje “Caveats” zal de locatie van het PHP configuratie bestand vermeld staan:

The php.ini file can be found in:
    /usr/local/etc/php/5.6/php.ini

Vervolgens kan dit bestand met behulp van nano eenvoudig aangepast worden.

nano /usr/local/etc/php/5.6/php.ini

De memory_limit kan vervolgens eenvoudig aangepast worden van bijvoorbeeld:

; Maximum amount of memory a script may consume (128MB)
; http://php.net/memory-limit
memory_limit = 1024M

naar:

; Maximum amount of memory a script may consume (128MB)
; http://php.net/memory-limit
memory_limit = 4096M

Met behulp van het volgende commando kan gecontroleerd worden of de wijziging goed is doorgevoerd:

$ php -i | grep memory_limit

memory_limit => 4096M => 4096M

Website kopie maken met HTTrack

Soms wil je even een statische kopie van een website maken voor offline gebruik of als backup. Met behulp van wget kan eenvoudig een kopie gemaakt worden:

wget --mirror --convert-links --adjust-extension --page-requisites --no-parent http://example.org

De wget tool neemt echter niet altijd alle gekoppelde stylesheets, scripts, afbeeldingen, etc. mee. Om een betere kopie te krijgen kan het daarom handig zijn om gebruik te maken van HTTrack. Met behulp van brew is deze tool eenvoudig te installeren op een Mac:

brew install httrack

Vervolgens kan met het httrack commando eenvoudig een kopie van een website gemaakt worden.

PHP_CodeSniffer 2.0.0 gebruiken op Mac

Op 5 december kondigde Squiz Labs de release van PHP_CodeSniffer 2.0.0 aan. Met deze nieuwe versie van PHP_CodeSniffer is het mogelijk om fouten automatisch te corrigeren. Met behulp van Brew kan eenvoudig PHP_CodeSniffer 2.0.0 geïnstalleerd worden. Hiervoor dient het volgende commando uitgevoerd te worden in de terminal.

brew install php-code-sniffer --devel

Homebrew MariaDB MySQL server has gone away

Bij het importeren van een grote WordPress database in mijn lokale MariaDB database server liep ik tegen de volgende fout aan:

ERROR 2006 (HY000) at line 40786: MySQL server has gone away

Na wat zoeken op internet kom je al snel berichten tegen dat dit te maken heeft met de ‘max_allowed_packet‘ configuratie instelling.

Na wat zoeken heb ik in mijn gebruikersmap (~) een MySQL configuratie bestand (~/.my.cnf) aangemaakt volgens de MariaDB documentatie.

https://mariadb.com/kb/en/mariadb/documentation/getting-started/configuring-mariadb-with-mycnf/#location-in-linux-unix-mac

Door hier het volgende in te zetten is de ‘max_allowed_packet’ instelling eenvoudig te verhogen.

[mysqld]
max_allowed_packet=1073741824

Vervolgens kan MariaDB database server eenvoudig herstart worden met behulp van het volgende commando:

mysql.server restart

PHPUnit en WordPress plugins

In het bericht “Unit tests voor WordPress plugins” uit juni 2013 schreef ik al eerder over unit testing voor WordPress plugins. In dit bericht een korte update over hoe je PHPUnit in 2014 voor WordPress plugins kunt inrichten.

In het WordPress.org core handboek staat in het artikel “Automated Testing” meer informatie over unit testing en WordPress. In dit artikel staat onder andere beschreven hoe je WordPress test suite kunt uitvoeren.

cd ~/Projects
svn co https://develop.svn.wordpress.org/trunk/ wordpress-develop

Zodra je het ‘wordpress-develop’ project op je lokale computer hebt staan dien je nog een database aan te maken en het ‘wp-tests-config.php’ te voorzien van de juiste gegevens.

Vervolgens kun je .bash_profile bestand bewerken met behulp van het volgende commando:

nano ~/.bash_profile

En het volgende toevoegen:

# WordPress tests
export WP_TESTS_DIR=~/Projects/wordpress-develop/tests/phpunit

Op deze manier weet Bash ook waar je WordPress tests map staat. Vervolgens kun je in je WordPress plugin een PHPUnit XML-bestand aanmaken.

<?xml version="1.0" encoding="UTF-8"?>

<phpunit
 bootstrap="tests/bootstrap.php"
 colors="true"
>
 <testsuites>
 <testsuite name="WordPress Plugins Test Suite">
 <directory>./tests/</directory>
 </testsuite>
 </testsuites>

 <filter>
 <whitelist>
 <directory>./src</directory>
 </whitelist>
 </filter>

 <logging>
 <log type="coverage-clover" target="build/logs/clover.xml"/>
 </logging>
</phpunit>

In de ‘tests’ map binnen je WordPress plugin kan vervolgens een ‘bootstrap.php’ bestand neergezet worden met de volgende inhoud:

<?php

$_tests_dir = getenv( 'WP_TESTS_DIR' );
if ( ! $_tests_dir ) {
 $_tests_dir = '/tmp/wordpress-tests-lib';
}

require_once $_tests_dir . '/includes/functions.php';

require_once __DIR__ . '/../vendor/autoload.php';

require $_tests_dir . '/includes/bootstrap.php';

Een voorbeeld van deze test setup is terug te vinden in een aantal van de WordPress Pay gateways bibliotheken.

https://github.com/wp-pay-gateways

WordPress ontwikkelomgeving op Mac met Brew, Nginx, PHP 5.6, PHP-FPM, MariaDB, phpMyAdmin en meer

 In dit bericht beschrijf ik in een aantal stappen hoe je een WordPress ontwikkelomgeving omgeving kunt opzetten op een Mac.

Brew

Homebrew is een pakket manager voor je Mac en erg handig voor het installeren van allerlei handig tools.

http://brew.sh/

Met het volgende commando kun je Homebrew installeren, maar ik adviseer je om de instructies op de Homebrew website te volgen:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Mocht je Brew al geïnstalleerd hebben dan kun je met het volgende commando Brew bijwerken.

brew update
brew upgrade

PHP

PHP kan eenvoudig via Homebrew geïnstalleerd worden, maar hiervoor moet je wel even de PHP repository intappen.

https://github.com/Homebrew/homebrew-php

Met de volgende commando’s kun je de PHP repository voor Homebrew tappen:

brew tap homebrew/dupes
brew tap homebrew/versions
brew tap homebrew/homebrew-php

Vervolgens kun je met het volgende commando bekijken wel opties er beschikbaar zijn voor het installeren van PHP 5.6:

brew options php56

Als het goed is geeft dit commando het volgende resultaat:

--disable-opcache
	Build without Opcache extension
--disable-zend-multibyte
	Disable auto-detection of Unicode encoded scripts (PHP 5.2 and 5.3 only)
--homebrew-apxs
	Build against apxs in Homebrew prefix
--with-apache
	Enable building of shared Apache 2.0 Handler module, overriding any options which disable apache
--with-cgi
	Enable building of the CGI executable (implies --without-apache)
--with-debug
	Compile with debugging symbols
--with-fpm
	Enable building of the fpm SAPI executable (implies --without-apache)
--with-gmp
	Build with gmp support
--with-homebrew-curl
	Include Curl support via Homebrew
--with-homebrew-libxslt
	Include LibXSLT support via Homebrew
--with-homebrew-openssl
	Include OpenSSL support via Homebrew
--with-imap
	Include IMAP extension
--with-libmysql
	Include (old-style) libmysql support instead of mysqlnd
--with-mssql
	Include MSSQL-DB support
--with-pdo-oci
	Include Oracle databases (requries ORACLE_HOME be set)
--with-pgsql
	Include PostgreSQL support
--with-phpdbg
	Enable building of the phpdbg SAPI executable (PHP 5.4 and above)
--with-thread-safety
	Build with thread safety
--with-tidy
	Include Tidy support
--without-bz2
	Build without bz2 support
--without-mysql
	Remove MySQL/MariaDB support
--without-pcntl
	Build without Process Control support
--without-pear
	Build without PEAR
--without-snmp
	Build without SNMP support
--HEAD
	install HEAD version

Ik heb vervolgens PHP 5.6 geïnstalleerd met de volgende opties:

brew install php56 --with-debug --with-fpm --with-homebrew-curl --with-homebrew-libxslt --with-homebrew-openssl

Zodra de installatie is voltooid kun je via het volgende commando controleren of de juiste PHP versie is geïnstalleerd;

php -v

Vervolgens kun je met het volgende commando controleren welke modules er actief zijn:

php -m

PHP-extensies

Er zijn binnen Brew flink wat PHP-extensies beschikbaar, deze kun je met het volgende commando weergeven:

brew search php56-

Hieronder vind je een aantal handige PHP-extensies ik geïnstalleerd heb.

Xdebug

Xdebug is een PHP-extensie die debugging functionaliteiten toevoegt, om dit te installeren kan het volgende commando uitgevoerd worden:

brew install php56-xdebug

Tidy

brew install php56-tidy

PHP-FPM

Om PHP-FPM op te starten dienen de volgende commando’s uitgevoerd te worden:

ln -sfv /usr/local/opt/php56/*.plist ~/Library/LaunchAgents
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.php56.plist

Met behulp van het volgende commando kan vervolgens bekeken worden of PHP-FPM luistert naar poort 9000.

lsof -Pni4 | grep LISTEN | grep php

MariaDB

Ook MariaDB kan via Homebrew geïnstalleerd worden met behulp van het volgende commando:

brew install mariadb

Als het goed is gaat Homebrew vervolgens MariaDB installeren en vermeld het de volgende kanttekeningen:

To have launchd start mariadb at login:
    ln -sfv /usr/local/opt/mariadb/*.plist ~/Library/LaunchAgents
Then to load mariadb now:
    launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mariadb.plist
Or, if you don't want/need launchctl, you can just run:
    mysql.server start

Aangezien MariaDB van mij opgestart mag worden bij het inloggen heb ik vervolgens het volgende commando uitgevoerd:

ln -sfv /usr/local/opt/mariadb/*.plist ~/Library/LaunchAgents

Om MariaDB na installatie op te starten heb ik het volgende commando uitgevoerd:

launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mariadb.plist

Om de MySQL installatie te beveiligen kan het volgende commando uitgevoerd worden:

mysql_secure_installation

Mocht je je root wachtwoord vergeten zijn dan kun je de volgende pagina van MariaDB volgen: https://mariadb.com/blog/how-reset-root-password-mariadb-linux.

Mocht je eerder al MySQL geïnstalleerd hebben dan kun je via de volgende stappen MySQL verwijderen: http://stackoverflow.com/questions/1436425/how-do-you-uninstall-mysql-from-mac-os-x.

phpMyAdmin

Voor het installeren van phpMyAdmin kan het volgende commando uitgevoerd worden:

brew install phpmyadmin

Na de installatie zal Homebrew de volgende kanttekeningen melden:

Note that this formula will NOT install mysql. It is not
required since you might want to get connected to a remote
database server.

Webserver configuration example (add this at the end of
your /etc/apache2/httpd.conf for instance) :
  Alias /phpmyadmin /usr/local/share/phpmyadmin
  
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    Allow from all
  
Then, open http://localhost/phpmyadmin

More documentation : file:///usr/local/Cellar/phpmyadmin/4.2.8/share/phpmyadmin/doc/

Configuration has been copied to /usr/local/etc/phpmyadmin.config.inc.php
Don't forget to:
  - change your secret blowfish
  - uncomment the configuration lines (pma, pmapass ...)

Apache uitschakelen

Binnen een Mac wordt Apache vaak standaard opgestart, met het volgende commando kan Apache uitgeschakeld worden:

sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist

Bron: http://stackoverflow.com/a/20439859

Nginx

Nginx kan geïnstalleerd worden met het volgende commando:

brew install nginx

Na de installatie zal Homebrew de volgende kanttekeningen melden:

Docroot is: /usr/local/var/www

The default port has been set in /usr/local/etc/nginx/nginx.conf to 8080 so that
nginx can run without sudo.

To have launchd start nginx at login:
    ln -sfv /usr/local/opt/nginx/*.plist ~/Library/LaunchAgents
Then to load nginx now:
    launchctl load ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist
Or, if you don't want/need launchctl, you can just run:
    nginx

Na installatie zal er een standaard Nginx configuratie bestand ingesteld zijn. Aangezien in dit bestand veel commentaar staat is het niet heel overzichtelijk. Daarom verwijderen we dit bestand volledig en voegen we een eigen configuratie bestand toe.

rm /usr/local/etc/nginx/nginx.conf
nano /usr/local/etc/nginx/nginx.conf

In het nieuwe configuratie bestand plaatsen we het volgende:

worker_processes  1;
 
error_log  /usr/local/etc/nginx/logs/error.log debug;
 
events {
    worker_connections  256;
}
 
http {
    include             mime.types;
    default_type        application/octet-stream;
 
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
 
    access_log  /usr/local/etc/nginx/logs/access.log  main;
 
    sendfile            on;
 
    keepalive_timeout   65;
 
    index index.html index.php;
 
    include /usr/local/etc/nginx/sites-enabled/*; 
}

Op de Nginx documentatie websites staat meer informatie over de verschillende directives:

Voor de logs en configuratie bestanden maken we een aantal maken aan:

mkdir -p /usr/local/etc/nginx/logs
mkdir -p /usr/local/etc/nginx/sites-available
mkdir -p /usr/local/etc/nginx/sites-enabled
mkdir -p /usr/local/etc/nginx/conf.d

Composer

brew install composer

WP-CLI

brew install wp-cli

 

Dnsmasq

Met behulp van Dnsmasq kunnen we er voor zorgen dat elk request naar bijvoorbeeld .dev domeinnamen doorverwezen worden naar je lokale IP-adres 127.0.0.1. Hiermee hoef je dus niet voor elke ontwikkelomgeving een extra regel toe te voegen aan je host bestand (/etc/hosts).

brew install dnsmasq

Na het installeren van Dnsmasq geeft Brew de volgende kanttekeningen:

To configure dnsmasq, copy the example configuration to /usr/local/etc/dnsmasq.conf
and edit to taste.

  cp /usr/local/opt/dnsmasq/dnsmasq.conf.example /usr/local/etc/dnsmasq.conf

To have launchd start dnsmasq at startup:
    sudo cp -fv /usr/local/opt/dnsmasq/*.plist /Library/LaunchDaemons
Then to load dnsmasq now:
    sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist

t

Bronnen

Mijn MacBook Pro installatie

In dit bericht zal ik kort samenvatten hoe mijn MacBook Pro installatie er uit ziet qua programma’s, tools, addons, etc..

Webbrowsers

  • Google Chrome [standaard]
    • LastPass
    • AdBlock Plus
  • Firefox
    • LastPass
    • AdBlock Plus
    • Firebug
  • Opera
    • LastPass
  • Safari
    • LastPass

Productiviteit

  • Evernote
  • Dropbox
  • Alfred 2

Entertainment

  • Spotify
  • VLC

Ontwikkeling

  • iTerm2
  • Sublime Text 3
  • Java SE Development Kit
  • Eclipse
    • PHP Development Tools (PDT)
    • Preferences
      • PHP » Editor » Save Actions » ✓ Remove trailing whitespace » All lines
  •  SourceTree
    • Project folder: /Users/remco/Projects
    • Terminal App: iTerm2
    • Taal: English
  • FileZilla
    • Thema: Classic
  • Poedit
  • Homebrew
  • Node.js
    • brew install node
  • Git
    • brew install git
  • PHP
    • brew tap homebrew/dupes
    • brew tap homebrew/versions
    • brew tap homebrew/homebrew-php
    • brew install php56
  • PHP CodeSniffer
    • brew install php-code-sniffer
  • WordPress Coding Standards
    • https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards
  •  Grunt
    • npm install -g grunt-cli
    • npm install -g npm-check-updates
  • Xcode
  • VirtualBox
    • https://github.com/xdissent/ievms

Communicatie

  • Adium
  • Skype
  • Twitter

Overige

  • ScanSnap
    • ABBYY FineReader for ScanSnap
  • uTorrent
  • The Unarchiver
  • QFinder
  • Kitabu
  • Aegisub

Bronnen

WordPress menu custom current URL class

Veel WordPress ontwikkelaars zullen wel eens tegen beperkingen van de standaard WordPress menu classes aangelopen zijn. Zo is het soms lastig om actieve menu items te benaderen bij diepere menu’s met verschillende type menu items. Zo ook bij een menu met als hoofditem een pagina en daaronder een custom post type archief link:

  • Pagina
    • Custom post type ‘Project’ archief
      • Single ‘Project’

Om er voor te zorgen dat op een single ‘Project’ de pagina ook een class krijgt gebruiken we de volgende WordPress filter functie:

Brew link autoconf » undefined method `cleanpath’

Voor het installeren van PHP Xdebug via Homebrew moest ik Autoconf linken via Homebrew. Helaas resulteerde dit in de volgende foutmelding:

$ brew link autoconf
Linking /usr/local/Cellar/autoconf/2.69... 
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/pathname.rb:486:in `relative_path_from': undefined method `cleanpath' for #<Keg:/usr/local/Cellar/autoconf/2.69> (NoMethodError)
    from /usr/local/Library/Homebrew/keg.rb:40:in `to_s'
    from /usr/local/Library/brew.rb:161:in `message'
    from /usr/local/Library/brew.rb:161:in `rescue in <main>'
    from /usr/local/Library/brew.rb:66:in `<main>'

Meestal zijn Homebrew problemen vrij eenvoudig op te lossen door de ‘brew doctor’ output tips te volgen. In dit geval kon ik via ‘brew doctor’ het probleem helaas niet oplossen.

Uiteindelijk heeft de Homebrew troubleshooting pagina me iets verder geholpen. Via het volgende commando kreeg ik een lijst van bestanden te zien die mogelijk voor problemen zorgde:

$ HOMEBREW_MAKE_JOBS=1 brew install -v autoconf 2>&1

In eerste instantie heb ik geprobeerd de rechten van deze bestanden te herstellen via de volgende commando:

$ sudo chown -R $(whoami) /usr/local

Dit loste het probleem helaas ook niet op, daarom heb ik uiteindelijk de betreffende bestanden maar compleet verwijderd. Vervolgens heb ik de Autoconf bibliotheek verwijderd en opnieuw geïnstalleerd via Homebrew.

$ brew uninstall autoconf
$ brew install autoconf

En dit keer ging de installatie van Autoconf goed zodat ik ook PHP Xdebug kon gaan installeren.

Waarschijnlijk ging er eerder toch wat verkeerd door onjuiste rechten waardoor het relatieve link pad o.i.d. niet bepaald kon worden door Homebrew.