Filtrar inputs é o mínimo, e ter sistema que não foi invadido não é argumento válido
Termos mais procurados:
Termos mais procurados:
Filtrar inputs é o mínimo, e ter sistema que não foi invadido não é argumento válido
mesma coisa q dizer q filtrar inputs é muito chato, e tem outro sistema q nunca invadiram
public String padLeftZeros(String inputString, int length) {
if (inputString.length() >= length) {
return inputString;
}
StringBuilder sb = new StringBuilder();
while (sb.length() < length - inputString.length()) {
sb.append('0');
}
sb.append(inputString);
return sb.toString();
}
<@!818290769923670038>
eu faria assim:
$rawCallback = file_get_contents('php://input');
file_put_contents("output.txt", "$rawCallback");
// pra percorrer o json depois que salvar:
$callbackArr = json_decode($rawCallback, true);
exit();
?>
Olá, boa noite! Tudo bem? 😀
Estou tentando criar meu próprio webhook em PHP (no meu servidor dedicado) para receber as notificações de pagamentos realizados via Pix, e há algum problema, pois não recebo as notificações de pagamentos. Segue o código em PHP abaixo:
header("Content-Type: application/json");
$request = file_get_contents("php://input");
file_put_contents("webhook.json", print_r($request, true));
print_r($request);
?>
Recebo a notificação de configuração do link do webhook normalmente:
{
"webhookUrl": "https://exemplo-pix/webhook"
}
Mas não recebo a notificação quando realizo o pagamento:
{
"pix": [
{
"endToEndId": "E1803615022211340s08793XPJ",
"txid": "fc9a43k6ff384ryP5f41719",
"chave": "2c3c7441-b91e-4982-3c25-6105581e18ae",
"valor": "0.01",
"horario": "2020-12-21T13:40:34.000Z",
"infoPagador": "pagando o pix"
}
]
}
Tentei utilizar o exemplo de configuração de servidor em Python desenvolvido em Flask (https://dev.gerencianet.com.br/v1/docs/api-pix#section-exemplos-de-uma-configura-o-de-servidor-), mas não consegui seguir esse exemplo. ☹️
Já testei em sites de terceiros (como o https://webhook.site), e funciona normalmente (recebi a notificação do pagamento).
O meu servidor possui certificado SSL e a versão do TLS é 1.2.
Preciso receber essas notificações e armazená-las em algum lugar para verificar se o pagamento foi realizado. Vocês podem me ajudar? Irei ficar muito grato! Muito obrigado! 😀
Tente:
Está apontando certo.
Veja o código:
File file = new File(CERTIFICADO);
System.out.println("certificado: " + file.isFile() );
System.out.println("certificado: " + file.getAbsolutePath() );
String rota = URL_PADRAO + "/oauth/token";
String basicAuth = Base64.getEncoder().encodeToString(((CLENTE_ID + ':' + CLIENTE_SECRET).getBytes()));
System.setProperty("javax.net.ssl.keyStore", CERTIFICADO);
SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
System.out.println("sslsocketfactory:" + sslsocketfactory.toString() );
URL url = new URL(rota); //Para ambiente de Desenvolvimento
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("Authorization", "Basic " + basicAuth);
conn.setSSLSocketFactory(sslsocketfactory);
String requestJson = "{\"grant_type\": \"client_credentials\"}";
try (DataOutputStream stream = new DataOutputStream(conn.getOutputStream())) {
byte[] send = requestJson.getBytes("UTF-8");
stream.write(send);
stream.flush();
}
conn.connect();
String responseJson = inputStreamToString(conn.getInputStream());
ai tem a regra de meu negocio como é o caso de $business pois meu app é um SAAS onde terá varias empresas fazendo upload. então so adptar para negocio de vcs, q pode ser um user, ou nem passar ngm. $file ai é pq esse metodo é chamado de um service, e meu controller ta mandando o input q é um arquivo
pessoal .. que esta de errado aqui ... var options = {
client_id:'Client_Id_YYYY',
client_secret:'Client_Secret_XXX',
sandbox: true
}
var gerencianet = new Gerencianet(options)
console.log('options-->',options)
console.log('gerencianet-->',gerencianet)
var chargeInput = {
items: [{
name: 'Product A',
value: 5,
amount: 2
}]
}
// gerencianet
// .createCharge({}, chargeInput)
// .then(console.log)
// .catch(console.log)
// .done();
$dados = file_get_contents("php://input");
$diretorio="../log/";
$arquivo= $diretorio."PAGAMENTO.log";
$conteudo= "## ".date("d/m/Y H:i")." ->_GN_RETORNO ,".$dados."\n";
saveLog($arquivo,$conteudo);
echo "200";
?>
''' url = new URL ("https://api-pix-h.gerencianet.com.br/v2/cob/"+main.getSaltString()); //Para ambiente de Desenvolvimento
conn = (HttpsURLConnection)url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("PUT");
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("Authorization","Bearer "+token);
conn.setSSLSocketFactory(sslsocketfactory);
input = "{\"chave\": \"+55 34 9 8436-7252\",\"calendario\": {\"expiracao\": 3600 },\"valor\": {\"original\": \"123.45\" }}";
os = conn.getOutputStream();
os.write(input.getBytes());
os.flush();
responseCode = conn.getResponseCode();
if (responseCode >= 200) {
System.out.println(responseCode);
reader = new InputStreamReader(conn.getInputStream());
}else {
System.out.println(responseCode);
reader = new InputStreamReader(conn.getErrorStream());
}
br = new BufferedReader(reader);
while ((response = br.readLine()) != null) {
System.out.println(response);
}
esta retornando 401 vejam - Exception in thread "main" java.io.IOException: Server returned HTTP response code: 401 for URL: https://api-pix-h.gerencianet.com.br/oauth/token
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1876)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
at Main.main(Main.java:33)
esse campo "solicitacaoPagador" é um campo que pede input do usuário. ele pode ficar sem saber o que digitar nesse campo.
assim? json_decode(file_get_contents('php://input'));
boa tarde
Estou guardando no arquivo as notificações do webhook:
$name = 'arquivo.txt';
$text = var_export(file_get_contents("php://input"), true);
$file = fopen($name, 'a');
fwrite($file, $text);
fclose($file);
Gostaria de converter em array para atualizar no banco de dados, alguém?
//Pix recebido
{ pix:
[ { endToEndId: 'E1803615022211340s08793XPJ',
txid: 'fc9a43k6ff384ryP5f41719',
chave: '2c3c7441-b91e-4982-3c25-6105581e18ae',
valor: '0.01',
horario: '2020-12-21T13:40:34.000Z',
infoPagador: 'pagando o pix' } ] }
exibir a string (quando não precisaria) pode parecer "newbice" do dev (para quem é mais entendido) e até ser "feio", mas é questão de segurança contra problemas de JS. a página de pagamento do NuBank até a última vez que testei não estava copiando o código no Firefox.. e aí como faz? ter um campo input convencional com a string efetiva visível para ser copiada manualmente em último caso, é um recurso salvador.
Boa tarde, eu estou tendo um problema na hora da intregação com o pix na hora de adicionar o certificado. Eu estou utilizando o código de exemplo que existe na página de documentação
$pagarme = new PagarMe\Client(env('API_KEY_PAGARME'));
$requestBody = file_get_contents("php://input");
$signature = $_SERVER['HTTP_X_HUB_SIGNATURE'];
$isValidPostback = $pagarme->postbacks()->validate($requestBody, $signature);
<@!585695073908293632>. Pode ser seu caso também... Fiz uma simulação utilizando uma url com uma porta 3000. Ex: https://meudominio.com.br:3000/
E estava apresentando esta mesma mensagem. Para solucionar, tive que liberar a porta no firewal, executando o seguinte comando:
sudo iptables -A INPUT -p tcp --dport 3000 -j ACCEPT
Boa tarde, <@!585695073908293632>. Pode ser seu caso... Estava simulando aqui, utilizando uma url com uma porta 3000. Ex: https://meudominio.com.br:3000
E estava apresentando esta mesma mensagem. Para solucionar, tive que liberar a porta no firewal, executando o seguinte comando:
sudo iptables -A INPUT -p tcp --dport 3000 -j ACCEPT