Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

bart's avatar
Level 13

Strange Guzzle / curl question

Hey everybody,

I'm using Guzzle (v6) to fire some calls to a third party API. One feature the API offers is checking a CSR (certificate signing request). When I send the request with curl everything works fine. But when I send the exact same request with guzzle I'm getting "The CSR cannot be decoded".

I think there is a little difference between curl and Guzzle how they send and process JSON data. I checked the headers, everything is the same. Do you guys have any idea how to solve this issue? Maybe you had such a problem, too?

$payload = [
            'AuthRequest' => [
                'PartnerCode' => getenv('SSL_STORE_PARTNER_CODE'),
                'AuthToken' => getenv('SSL_STORE_TOKEN'),
            ],
            'ProductCode' => 'rapidssl',
            'CSR' => '-----BEGIN NEW CERTIFICATE REQUEST-----
MIID3TCCAsUCAQAweTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCk5ldyBNZXhpY28x
FDASBgNVBAcMC0FsYnVxdWVycXVlMRAwDgYDVQQKDAdJbmtTb2Z0MRIwEAYDVQQL
DAlNYXJrZXRpbmcxGTAXBgNVBAMMEGRlbW8uaW5rc29mdC5jb20wggEiMA0GCSqG
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZxMc4eqWM/JgQuH2cE9bDEDkxLN79JIwQ
SlQ5dw1rhlQl9u7cZwt1rlvXh9AcydjF8BJpmzOnL9tyqpto2ba4smC5A0eY1Tkp
03piVVxqapwKyo93oYAcy1mEqw13NeFHeUhclBZQ10mJz55JLkZ0sJYt5OyYA1fV
WFdeJxOSJQi0c8qocFUb4wjh0ghgp+E57d5LARO369eZTik5JABsBaPcYuXP72wy
bzoqhoigiIMx7aPR/+Blrl+STLruz3JiVEhfZGIVWc1U2D4RknGFABDp6w5b9Hw7
FhStFXEkWdTTSvY5iATCfGBBd8AKUw/1RlaI1/8z/JXJNub+CUbhAgMBAAGgggEd
MBoGCisGAQQBgjcNAgMxDBYKNi4xLjc2MDEuMjA/BgkrBgEEAYI3FRQxMjAwAgEF
DA9BUFAyLmlua3NvZnQudXMMEElOS1NPRlRcc3lzYWRtaW4MCHczd3AuZXhlMFYG
CSqGSIb3DQEJDjFJMEcwDgYDVR0PAQH/BAQDAgTwMBYGA1UdJQQPMA0GC2CGSAGG
/W4BBxcBMB0GA1UdDgQWBBTex9WLR+kVyFSBENnT7R/qYg/jgDBmBgorBgEEAYI3
DQICMVgwVgIBAR5OAE0AaQBjAHIAbwBzAG8AZgB0ACAAUwB0AHIAbwBuAGcAIABD
AHIAeQBwAHQAbwBnAHIAYQBwAGgAaQBjACAAUAByAG8AdgBpAGQAZQByAwEAMA0G
CSqGSIb3DQEBCwUAA4IBAQCCRHG7ek7oiaTGzhbhYxdpZZeFwZTejuJbO7mbPOkJ
wSkiIy5qgHgm0Uxuw+l3eBEZu9OOT6J61RQmAx+OUbKKIB8usHWUZiLInAdnOGHn
Ax0Hsf4XVU3cuOD3xnFQnUTwHplhBwCrZPwXq7fWzm3B6FdPVnrSuyMxdQ+GnIie
TF5qXHU8SaQ8GgjNQZdZU2tKhUdjQr8THxvpZ2xJqZ/a+gRf3Uwc4b+Em3qKHimP
rpmBjsKEXSyN+7dPNliZUuA1MqFlsrLeBY4j9f9hgq2FydqgJAjnrhlvFyB4I3YZ
j04caH1WgRsRYrL3+J6w6jNFyXtUXbHKk3oT+vL+4kx+
-----END NEW CERTIFICATE REQUEST-----',
        ];

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, 'https://sandbox-api.myprovider.com/rest/csr');
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
        curl_setopt($ch,CURLOPT_HTTPHEADER, ['Content-Type: application/json; charset=utf-8']);
        $curlResponse = curl_exec($ch);

        $client = new Client();
        $guzzleResponse = $client->request('post', 'https://sandbox-api.myprovider.com/rest/csr', ['json' => $payload, 'verify' => false])->getBody()->getContents();
        dd($curlResponse, $guzzleResponse);

What I get in response is this:

// $curlResponse
"{"AuthResponse":{"InvokingPartnerCode":"82913873","Message":null,"ReplayToken":null,"Timestamp":"12\/22\/2015 3:50:58 PM","isError":false},"Country":"United States","DNSNames":[""],"DomainName":"demo.inksoft.com","DominName":"demo.inksoft.com","Email":"","Locality":"Albuquerque","MD5Hash":"C0B7F7CD372CAD7917FC448CDB1441A5","OrganisationUnit":"Marketing","Organization":"InkSoft","OrganizationUnit":"Marketing","RegionSpecificOrderIndicator":null,"SHA1Hash":"166B219470716E6EA581157E4A0997FB4DA8ACAB","SignatureAlgorithm":"sha256WithRSAEncryption","State":"New Mexico","hasBadExtensions":false,"isValidDomainName":true,"isWildcardCSR":false}"

// $guzzleResponse
"{"AuthResponse":{"InvokingPartnerCode":"82913873","Message":["ErrorCode:-9009|Message:Vendor returns error:The CSR cannot be decoded!"],"ReplayToken":null,"Timestamp":"12\/22\/2015 3:51:00 PM","isError":true},"Country":null,"DNSNames":null,"DomainName":null,"DominName":null,"Email":null,"Locality":null,"MD5Hash":null,"OrganisationUnit":null,"Organization":null,"OrganizationUnit":null,"RegionSpecificOrderIndicator":null,"SHA1Hash":null,"SignatureAlgorithm":null,"State":null,"hasBadExtensions":false,"isValidDomainName":false,"isWildcardCSR":false}"

It would be great if you could help me. Thanks a lot!!

0 likes
1 reply
bart's avatar
bart
OP
Best Answer
Level 13

Okay I found a solution after trying different things. It seems like the API doesn't work with JSON headers the 'json' key generates. Instead I need to use the 'form_params' key.

Please or to participate in this conversation.