public static function encode($payload, $key, $alg = 'HS256', $keyId = null) { $header = array('typ' => 'JWT', 'alg' => $alg); if ($keyId !== null) { $header['kid'] = $keyId; } $segments = array(); $segments[] = JWT::urlsafeB64Encode(json_encode($header)); $segments[] = JWT::urlsafeB64Encode(json_encode($payload)); $signing_input = implode('.', $segments); $signature = JWT::sign($signing_input, $key, $alg); $segments[] = JWT::urlsafeB64Encode($signature); return implode('.', $segments); }