PHP Script works in curl but GuzzleHttp

I have already checked this post but not working for me: API request works with cURL but not with Guzzle?

PHP Script to access token works perfectly for me

Initialization

$_consumerKey = "consumer key";
$method = "POST";   
$endpoint = 'https://api.twitter.com/oauth/request_token';
$callbackUrl = "https://localhost/script/test.php";

$authorizationParams = array(
    'oauth_callback' => $callbackUrl,
    'oauth_consumer_key' => $_consumerKey,
    'oauth_nonce' => md5( microtime() . mt_rand() ),
    'oauth_signature_method' => 'HMAC-SHA1',
    'oauth_timestamp' => time(),
    'oauth_version' => '1.0'
);

Prepare Signature

function getSignature( $method, $endpoint, $authorizationParams, $urlParams = array() ) {
    $authorizationParams = array_merge( $authorizationParams, $urlParams );
    uksort( $authorizationParams, 'strcmp' );
    foreach ( $authorizationParams as $key => $value ) {
        $authorizationParams[$key] = rawurlencode( $key ) . '=' . rawurlencode( $value );
    }
    $signatureBase = array(
        rawurlencode( $method ),
        rawurlencode( $endpoint ),
        rawurlencode( implode( '&', $authorizationParams ) ),
    );
    $signatureBaseString = implode( '&', $signatureBase );
    $signatureKey = array(
        rawurlencode("consumer token"),
        ""
    );
    $signatureKeyString = implode('&', $signatureKey);
    return base64_encode(hash_hmac('sha1', $signatureBaseString, $signatureKeyString, true));
}

convert array to string

function getAuthorizationString( $authorizationParams ) {
    $authorizationString = 'Authorization: OAuth';
    $count = 0;
    foreach ( $authorizationParams as $key => $value ) { // loop over authorization params array
        $authorizationString .= !$count ? ' ' : ', ';
        $authorizationString .= rawurlencode( $key ) . '="' . rawurlencode( $value ) . '"';
        $count++;
    }
    return $authorizationString;
}
$authorizationParams['oauth_signature'] = getSignature( $method, $endpoint, $authorizationParams );
$apiParams = array(
    'method' => $method,
    'endpoint' => $endpoint,
    'authorization' => getAuthorizationString( $authorizationParams )
);

Curl Request

$curlOptions = array(
    CURLOPT_URL => $apiParams['endpoint'],
    CURLOPT_RETURNTRANSFER => TRUE,
    CURLOPT_HTTPHEADER => array(
        'Accept: application/json',
        $apiParams['authorization'],
        'Expect:'
    )
);
$curlOptions[CURLOPT_POST] = TRUE;
$ch = curl_init();
curl_setopt_array( $ch, $curlOptions );
$apiResponse = curl_exec( $ch );
print_r($apiResponse);

Now when I try to replace curl with Guzzle Http, I get following error. Notice the error details, It said callback url is not same as registered in app. But I am using same callback url and same was used in CURL

Fatal error: Uncaught GuzzleHttpExceptionClientException: Client
error: POST https://api.twitter.com/oauth/request_token resulted in
a 403 Forbidden response: Callback URL not approved
for this client application. A (truncated…) in
C:xampphtdocsscriptvendorguzzlehttpguzzlesrcExceptionRequestException.php:113
Stack trace: #0
C:xampphtdocsscriptvendorguzzlehttpguzzlesrcMiddleware.php(69):
GuzzleHttpExceptionRequestException::create(Object(GuzzleHttpPsr7Request),
Object(GuzzleHttpPsr7Response), NULL, Array, NULL) #1
C:xampphtdocsscriptvendorguzzlehttppromisessrcPromise.php(204):
GuzzleHttpMiddleware::GuzzleHttp{closure}(Object(GuzzleHttpPsr7Response))
#2 C:xampphtdocsscriptvendorguzzlehttppromisessrcPromise.php(153):
GuzzleHttpPromisePromise::callHandler(1,
Object(GuzzleHttpPsr7Response), NULL) #3
C:xampphtdocsscriptvendorguzzlehttppromisessrcTaskQueue.php(48):
GuzzleHttpPromisePromise::GuzzleHttp in
C:xampphtdocsscriptvendorguzzlehttpguzzlesrcExceptionRequestException.php
on line 113

Curl Code

$client = new GuzzleHttpClient();
$response = $client->request('POST', $apiParams['endpoint'], [
    'headers' => [
        'Content-Type' => 'application/json',
        "Authorization" => "OAuth " . $apiParams['authorization']
    ]
]);
$result = json_decode($response->getBody()->getContents(), true);