Para quem não está conseguindo gerar o Token a partir do exemplo C# da Gerencianet.
No exemplo da Gerencianet tem uma variável "cities" contendo o client_id e client_secret, mas nunca é usada.
O Authorization está fixo, mas você deve substituí-lo pelo authorization base64 gerado a partir de seu client_id e client_secret.
O parameter "application/json" tem o grant_type=client_credentials, mas não tem as credenciais no body.
Certifique-se de estar usando .Net Framework 4.6.1 ou superior. Versões anteriores do .Net Framework não utilizam TLS por padrão.
Para versão anterior a 4.6.1 do .Net Framework, descomente as duas primeiras linhas do código
Atenção: atente-se ao ambiente de homologação/produção e faça a alteração necessária.
// modelo funcional
public void GerarTokenGN(string client_id, string client_secret)
{
// força o uso do protocolo TLS, caso o protocolo padrão seja SSL ou outro protocolo
//ServicePointManager.Expect100Continue = true;
//ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3;
X509Certificate2 uidCert = new X509Certificate2("NOME_DO_CERTIFICADO.p12", "");
var client = new RestSharp.RestClient("https://api-pix-h.gerencianet.com.br/oauth/token");
client.ClientCertificates = new X509CertificateCollection() { uidCert };
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Basic " + System.Convert.ToBase64String(Encoding.ASCII.GetBytes(string.Format("{0}:{1}", client_id, client_secret))));
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\"grant_type\":\"client_credentials\",\"client_id\":\"" + client_id + "\",\"client_secret\":\"" + client_secret + "\"}", ParameterType.RequestBody);
IRestResponse restResponse = client.Execute(request);
string response = restResponse.Content;
Console.WriteLine(response);
}