diff --git a/src/Client/Credentials/Handler/SignatureBodyFormHandler.php b/src/Client/Credentials/Handler/SignatureBodyFormHandler.php index e782a99e..5fa5a62e 100644 --- a/src/Client/Credentials/Handler/SignatureBodyFormHandler.php +++ b/src/Client/Credentials/Handler/SignatureBodyFormHandler.php @@ -2,6 +2,7 @@ namespace Vonage\Client\Credentials\Handler; +use GuzzleHttp\Psr7\Utils; use Psr\Http\Message\RequestInterface; use Vonage\Client\Credentials\CredentialsInterface; use Vonage\Client\Credentials\SignatureSecret; @@ -17,6 +18,7 @@ public function __invoke(RequestInterface $request, CredentialsInterface $creden $body = $request->getBody(); $body->rewind(); $content = $body->getContents(); + $params = []; parse_str($content, $params); $params['api_key'] = $credentialsArray['api_key']; @@ -28,9 +30,8 @@ public function __invoke(RequestInterface $request, CredentialsInterface $creden ); $params = $signature->getSignedParams(); - $body->rewind(); - $body->write(http_build_query($params, '', '&')); - return $request; + $newBody = Utils::streamFor(http_build_query($params, '', '&')); + return $request->withBody($newBody); } } diff --git a/test/Client/Credentials/Handler/SignatureBodyFormHandlerTest.php b/test/Client/Credentials/Handler/SignatureBodyFormHandlerTest.php new file mode 100644 index 00000000..8b97c299 --- /dev/null +++ b/test/Client/Credentials/Handler/SignatureBodyFormHandlerTest.php @@ -0,0 +1,40 @@ + 'value1', 'param2' => 'value2']); + + $request = new Request( + 'POST', + '/test', + ['Content-Type' => 'application/x-www-form-urlencoded'], + Utils::streamFor($initialBody) + ); + + $credentials = new SignatureSecret('secret', 'sha256'); + + $handler = new SignatureBodyFormHandler(); + $authRequest = $handler($request, $credentials); + + // Check the modified body + $authRequest->getBody()->rewind(); + $newBody = $authRequest->getBody()->getContents(); + + parse_str($newBody, $params); + + $this->assertArrayHasKey('api_key', $params); + $this->assertArrayHasKey('sig', $params); // assuming Signature adds 'sig' + } +} \ No newline at end of file