Invalid Signature Moving from JWT to SDK

Hi,
I’m upgrading from old JWT app to the latest SDK meeting app
While trying to join a meeting I get an error:

{
    "method": "join",
    "status": false,
    "result": "Invalid signature.",
    "errorMessage": "Signature is invalid.",
    "errorCode": 3712
}

I’m using the same generate signature function (but giving it the sdkkey and sdksecret instead):

    function generate_signature( $api_key, $api_secret, $meeting_number, $role){
        //Set the timezone to UTC
        date_default_timezone_set("UTC");
        $time = time() * 1000 - 30000; //time in milliseconds (or close enough)
        $data = base64_encode($api_key . $meeting_number . $time . $role);
        $hash = hash_hmac('sha256', $data, $api_secret, true);
        $_sig = $api_key . "." . $meeting_number . "." . $time . "." . $role . "." . base64_encode($hash);
        //return signature, url safe base64 encoded
        return rtrim(strtr(base64_encode($_sig), '+/', '-_'), '=');
    }

Is there a different way to generate signature for sdk app? or what am I missing here?

also tried generate the signature using firebase jwt:

    function generate_sig($sdkKey, $sdkSecret, $meeting_number, $role) {
        date_default_timezone_set("UTC");
        $iat = round(time() / 1000) - 30;
        $exp = $iat + (60 * 60 * 2);
        $oHeader = array(
            "alg" => "HS256",
            "typ" => "JWT"
        );
        $payload = array(
            "sdkKey" => $sdkKey,
            "appKey" => $sdkKey,
            "mn" => $meeting_number,
            "role" => $role,
            "exp" => $exp,
            "iat" => $iat,
            "tokenExp" => $exp
        );
        $sdkJwt = JWT::encode($payload, $sdkSecret, 'HS256');
        return $sdkJwt;
    }

but now I recive:

{
    "method": "join",
    "status": false,
    "result": "The signature has expired.",
    "errorMessage": "The signature has expired.",
    "errorCode": 3705
}