
O Painel de Gerenciamento da Geerencianet onte tem o "Client ID" e "Client Secret", onde consigo ver o histórico de requisições etc...
Termos mais procurados:
O Painel de Gerenciamento da Geerencianet onte tem o "Client ID" e "Client Secret", onde consigo ver o histórico de requisições etc...
Não, no cadastro mantém sem o /pix. O seu método é que tem que atender em {{POSTBACK_URL}}/postback/gerencianet/{{Client_ID}}/pix
no cadastro do webhook tenho que enviar
"webhookUrl": "{{POSTBACK_URL}}/postback/gerencianet/{{Client_ID}}/pix"
Então ela vai acionar {{POSTBACK_URL}}/postback/gerencianet/{{Client_ID}}"/pix
"webhookUrl": "{{POSTBACK_URL}}/postback/gerencianet/{{Client_ID}}"
$options = [
'client_id' => $this->clientId,
'client_secret' => $this->clientSecret,
'pix_cert' => '/etc/certs-gerencianet/olimppiuspixprod.pem',
// 'debug' => false,
// 'timeout' => 30,
'sandbox' => false
];
A chave utilizada é a da mesma conta do client_id, client_secret e certificado que está utilizando?
Esses escopos tem permissão específica no painel da GN. Eles estão incluídos na aplicação que tem o client_id/client_secret que você está usando ?
Isso é homologação ou produção ? Há alguns (poucos) escopos só disponíveis em produção, e esses me parecem estar entre eles.
Pergunta, estou pegando esse erro na geração do QRcode:
error:"insufficient_scope"
error_description:"Access token has insufficient scope"
Já verifiquei os client_id e client_secret, a chave está correta...
Url homologação correta.
PS. no ambiente de homologação
$config = [
"certificado" => $this->pixCert,
// "certificado" => DIRPAGE."src/Includes/olimppiuspix.crt.pem",
// "certificado" => "",
"client_id" => $this->clientId,
"client_secret" => $this->clientSecret
];
$autorizacao = base64_encode($config["client_id"] . ":" . $config["client_secret"]);
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api-pix-h.gerencianet.com.br/v2/webhook/',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_POSTFIELDS =>'{
"webhookUrl": "https://olimppi.us/webhook/index.php"
}',
CURLOPT_HTTPHEADER => array(
// "authorization: {{Authorization}}",
"Authorization: Basic $autorizacao",
"Content-Type: application/json",
"x-client-cert-pem: {{X-Certificate-Pem}}",
"x-skip-mtls-checking: false"
),
));
$response = curl_exec($curl);
curl_close($curl);
echo "
";";
echo $response;
echo "
$options = [
'client_id' => $this->clientId,
'client_secret' => $this->clientSecret,
'pix_cert' => $this->pixCert,
'headers' => array(
'x-skip-mtls-checking' => 'true'
),
// 'debug' => false,
// 'timeout' => 30,
'sandbox' => $this->sandboxBoolean // (true = development e false = production)
];
$options = [
'client_id' => $this->clientId,
'client_secret' => $this->clientSecret,
'pix_cert' => $this->pixCert,
// 'debug' => false,
// 'timeout' => 30,
'sandbox' => $this->sandboxBoolean // (true = development e false = production)
];
No arquivo /exemples/config.json da SDK, altere suas credenciais client_id, client_secret e o nome do certificado
client_id e client_secret são da aplicação que você criou, não CPF/CNPJ e senha da conta.
E nesse config.json eu tenho mesmo que colocar o client_id e o client_secret?
$config = [
"certificado" => "/etc/certs-gerencianet/olimppiuspix.crt.pem",
"client_id" => $this->clientId,
"client_secret" => $this->clientSecret
];
$autorizacao = base64_encode($config["client_id"] . ":" . $config["client_secret"]);
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api-pix-h.gerencianet.com.br/oauth/token", // Rota base, homologação ou produção
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => '{"grant_type": "client_credentials"}',
CURLOPT_SSLCERT => $config["certificado"], // Caminho do certificado
CURLOPT_SSLCERTPASSWD => "",
CURLOPT_HTTPHEADER => array(
"Authorization: Basic $autorizacao",
"Content-Type: application/json"
),
));
$response = curl_exec($curl);
curl_close($curl);
echo "
";";
echo $response; //print_r($response);
echo "
esse modelo então não é suficiente?
$config = [
"certificado" => "./certificado.pem",
"client_id" => "YOUR-CLIENT-ID",
"client_secret" => "YOUR-CLIENT-SECRET"
];
$autorizacao = base64_encode($config["client_id"] . ":" . $config["client_secret"]);
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api-pix-h.gerencianet.com.br/oauth/token", // Rota base, homologação ou produção
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => '{"grant_type": "client_credentials"}',
CURLOPT_SSLCERT => $config["certificado"], // Caminho do certificado
CURLOPT_SSLCERTPASSWD => "",
CURLOPT_HTTPHEADER => array(
"Authorization: Basic $autorizacao",
"Content-Type: application/json"
),
));
$response = curl_exec($curl);
curl_close($curl);
echo "
";";
echo $response;
echo "
{
"sandbox": false,
"chave": "27920008182",
"recebedor": "suainscricao.com",
"homologacao": {
"nome_certificado": "certificado.pem",
"client_id": "Client_Id...",
"client_secret": "Client_Secret...",
"pix_url_auth": "https://api-pix-h.gerencianet.com.br/oauth/token",
"pix_url_cob": "https://api-pix-h.gerencianet.com.br/v2/cob",
"pix_url": "https://api-pix-h.gerencianet.com.br/v2/pix"
},
"producao": {
"nome_certificado": "certificado.pem",
"client_id": "id aqui",
"client_secret": "Client_Secret_aqui",
"pix_url_auth": "https://api-pix.gerencianet.com.br/oauth/token",
"pix_url_cob": "https://api-pix.gerencianet.com.br/v2/cob",
"pix_url": "https://api-pix.gerencianet.com.br/v2/pix"
}
}
Também do <@!781928420757864468> :
// 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);
}