I have a website with paid events. Earlier, I mentioned that doing a payment for an event results in a white screen.
The cause of the white screen is the session variables: they do not survive the payment. The payment processor sets some session parameters just before the payment is done (like the return urls). As soon as the payment is done, the session parameters are not accessible anymore.
Uptil now, this session problem only occurs during/after the payment of event.
I find it difficult to find the cause of this session hickups, they are clearly related to the 'cannot modify header information' in the php_errorlog (see below). But I use not the right strategy to find the cause of that message. I surely can use advice on tracking that down.
- wordpress install 5.26.2
- php 7.3
- omnipay extension 3.9
php_errorlog file adds an extra warning:
[05-Jul-2020 19:25:16 Europe/Amsterdam] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/mysite/public_html/civicrm-nw/wp-content/plugins/files/civicrm/custom_extensions/nz.co.fuzion.omnipaymultiprocessor-master/vendor/symfony/http-foundation/Response.php:1290) in /home/mysite/public_html/civicrm-nw/wp-content/plugins/civicrm/civicrm/CRM/Utils/System/Base.php on line 949 [05-Jul-2020 17:25:38 UTC] PHP Warning: Class __PHP_Incomplete_Class has no unserializer in /home/mysite/public_html/civicrm-nw/wp-content/plugins/civicrm/civicrm.php on line 369 [05-Jul-2020 17:25:38 UTC] PHP Warning: session_start(): Failed to decode session object. Session has been destroyed in /home/mysite/public_html/civicrm-nw/wp-content/plugins/civicrm/civicrm.php on line 369
From the time stamps I can see that first these warnings are written to php_errorlog and after that, all session variable print statements show empty values in the civicrm log file.
current status: I have put debugging statements in the code to find the point where the 'Cannot modify header information' message is caused. When that message appears in php_errorlog, from that moment on all session parameters are lost. I found out that it occurs right after the user presses 'continue' on the event confirmation screen and before actions are taken in the next payment screen.
The code runs fine up til doPayment() in OmnipayMultiProcessor.php, where it does a redirect to url
https://civicrm-nw.mysite.nl/civicrm/?civiwp=CiviCRM&q=civicrm%2Fevent%2Fregister&_qf_ThankYou_display=true&qfKey=58.... I followed the code and after the setHttpHeader() in System.php, the session variables are still there and the warning is not printed yet. That happens soon thereafter.
But here I lose the code flow. I need to know which code is executed after this redirect and before the mollie payscreen is rendered in order to pick up further debugging . Any ideas what class/ routine would be a good starting point?