Guzzle getContents()->getBody() - Second calls return empty string

It's expected behaviour, because response body is a stream (read more in PSR-7 spec).

To be able to read the body again, you need to call ->getBody()->rewind() to rewind the stream to the beginning. Just be aware that it can cause an exception in rare cases, because not all stream types support rewind operation.