sveawebpay/php-integration

[Feature Request] Raw HTTP log

timint opened this issue · 5 comments

For debug and support matters it's proven to (many times over) be helpful if we could access some sort of raw http log of the Request and Response:

E.g.

$swp->getLastHTTPDebug();

## [2017-01-17 19:51:56] Raw HTTP Request ##########

POST /Folder/Resource HTTP/1.1
Host: api.fancydomain.com
Connection: Keep-Alive
User-Agent: PHP-SOAP/5.6.29
Content-Type: text/xml; charset=utf-8
Content-Length: 592

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


## [2017-01-17 19:51:56] Raw HTTP Response — 8,218 bytes transferred in 0.657 s ##########

HTTP/1.1 200 OK
Cache-Control: private
Content-Length: 8000
Content-Type: text/xml; charset=utf-8
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Tue, 17 Jan 2017 18:51:55 GMT

<?xml version="1.0"?>
<Bar/>

I would easier get an immediate understanding of what might have gone wrong during communication.

+1 more case today where this had become handy

An example of how I use to log raw HTTP data from the SOAPClient

class SveaSOAPClient extends SOAPClient {
    private $_request = array();
    private $_response = array();

    public function __construct($wsdl, $options=array()) {

      $options['trace'] = true;
      $options['exceptions'] = true;

      parent::__construct($wsdl, $options);
    }

    public function __doRequest($request, $location, $action, $version, $one_way = 0) {

      $timestamp_start = time();      
      $microtime_start = microtime(true);
      
      try {
        $result = parent::__doRequest($request, $location, $action, $version, $one_way);
      } catch (SoapFault $fault) {
        throw new Exception($fault->getMessage());
      }
      
      // PHP Bug - parent::__getLastResponse() returned null, however print_r($result, true) returned xml content
      $response_body = print_r($result, true);
      
      $this->_http_request = array( 
        'timestamp' => $timestamp_start,
        'head' => parent::__getLastRequestHeaders(),
        'body' => functions::xml_pretty_print(parent::__getLastRequest()),
      );
      
      $this->_http_response = array(
        'timestamp' => time(),
        'head' => parent::__getLastResponseHeaders() . PHP_EOL,
        'body' => functions::xml_pretty_print($response_body),
        'data_amount' => strlen(parent::__getLastResponseHeaders()) + strlen($response_body),
        'duration' => round(microtime(true) - $microtime_start, 3),
      );

      return $result;
    }
  }

+1 for a case earlier this week

+1 for another client case today

Added in 3.6.0, soap requests now contains logs if the user decides to enable them