Per 1 april 2015 stopt de Rabobank met de Rabo Internetkassa. Als vervanger daarvan is er de door de Rabobank zelf ontwikkelde OmniKassa. Werkt ongeveer hetzelfde; het initiëren van transacties gebeurt door een client naar de omgeving van de OmniKassa te sturen met een ‘signed’ request met behulp van een geheime sleutel. De OmniKassa controleert of de ondertekening klopt en biedt de client vervolgens de mogelijkheid om af te rekenen. Nadat er is betaald komt men terug op de website en kun je controleren of de betaling is geslaagd.
Nu wil het gebeuren dat de client na het betalen direct weg klikt en niet terug komt op de website. Om in die gevallen toch te zien dat er is betaald kun je bij het initiëren van de transactie een automaticResponseUrl meegeven die de OmniKassa zelf moet aanroepen om de transactiestatus door te geven.
Maar nu komt het; als je webshop draait op HTTPS werken de aanroepen naar de automaticResponseUrl alleen als die zonder SNI (Server Name Indication) werkt. De OmniKassa (althans het deel dat de automatische notificaties uitvoert) draait op Java 6. Dat kan ik in de logs zien bij de transacties waarbij de automatische notificaties wel werkten:
XXX.XXX.XXX.XXX – – [17/Feb/2015:09:32:08 +0100] “POST /?module=SHOP&action=ProcessPayment&orderId=XXX HTTP/1.1” 302 – “-” “Java/1.6.0_45”
Van Java 6 is bekend dat deze geen SNI ondersteunt. In mijn geval kon ik het probleem oplossen door de automaticResponseUrl te laten wijzen naar een ander domein dat wel werkt zonder SNI. Een structurele oplossing kan alleen van de kant van Rabobank komen; door gebruik te maken van een HTTP client die ook SNI ondersteunt voor HTTPS-requests. Het is immers 2015 en in de huidige stand van de techniek ondersteunt 99% van onze bezoekers SNI. De OmniKassa echter nog niet.
Ik begrijp uiteraard dat dat niet zomaar geregeld is maar ik zou in de tussentijd in ieder geval de documentatie van de OmniKassa voorzien van een melding dat voor requests naar de automaticResponseUrl geen SNI kan worden gebruikt.
– Edit: Rabobank heeft een update uitgevoerd waardoor SNI nu wel wordt ondersteund.