Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ukow

Dificuldade ao enviar XML com Curl

Recommended Posts

Olá!

Estou tentando realizar uma integração com a plataforma E.rede

Montei um formulário simples para teste ( http://divinho2.web2420.uni5.net/envioteste.php )

Ao tentar enviar o XML, o servidor fica pensando eternamente e depois de alguns minutos diz que o tempo de execução foi atingido.

O que pode ser?

 

Segue meu código:

 

Formulário:

<form action="curl.php" method="POST" name="formClient" accept-charset="ISO-8859-1">
<table>
<tr>
<td class="label">Número do cartão</td>
<td>
<input type="text" name="NRCARTAO" id="NRCARTAO" value="" style="width:200px;" maxlength="19"> </td>
</tr>
<tr>
<td class="label"> Validade </td>
<td>
<input type="text" name="MES" id="MES" value="" style="width: 95px; float:left; margin-right:10px;" maxlength="4" placeholder="MÊS"> 
<input type="text" name="ANO" id="ANO" value="" style="width: 95px;" maxlength="2" placeholder="ANO"> </td>
</tr>
<tr>
<td class="label">Código de segurança</td>
<td>
<input type="text" name="CVC2" id="CVC2" value="" style="width: 200px;" maxlength="4"> </td>
</tr>
<tr>
<td class="label">Titular</td>
<td>
<input type="text" name="PORTADOR" id="PORTADOR" value="" style="width: 200px;"> </td>
</tr>

<tr>
<td class="label">Valor total</td>
<td>
<input type="text" name="TOTAL" id="TOTAL" value="1.00" readonly style="width: 200px;" maxlength="16"> </td>
</tr>
</table>
<input type="submit" name="submit" value="Finalizar compra">
</form>

XML + Curl:

 

<?php 

$ANO = $_POST['ANO'];
$CVC2 = $_POST['CVC2'];
$FILIACAO = "FILIACAO";
$MES = $_POST['MES'];
$NRCARTAO = $_POST['NRCARTAO'];
$NUMPEDIDO = "20041416";
$ORIGEM = "01";
$PARCELAS = "00";
$PORTADOR = $_POST['PORTADOR'];
$RECORRENTE = "0";
$SENHA = "TOKEN";
$TOTAL = $_POST['TOTAL'];
$TRANSACAO = "74";

$conteudoXML= "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
$conteudoXML.= "<main>\n\t";
$conteudoXML.= "<emkt trans=\"11.05\">\n\t\t";
$conteudoXML.= "<Ano>";
$conteudoXML.= $ANO;
$conteudoXML.= "</Ano>\n\t\t";

$conteudoXML.= "<Cvc2>";
$conteudoXML.= $CVC2;
$conteudoXML.= "</Cvc2>\n\t\t";

$conteudoXML.= "<Filiacao>";
$conteudoXML.= $FILIACAO;
$conteudoXML.= "</Filiacao>\n\t\t\t";

$conteudoXML.= "<Mes>";
$conteudoXML.= $MES;
$conteudoXML.= "</Mes>\n\t\t\t";

$conteudoXML.= "<Nrcartao>";
$conteudoXML.= $NRCARTAO;
$conteudoXML.= "</Nrcartao>\n\t\t";

$conteudoXML.= "<NumPedido>";
$conteudoXML.= $NUMPEDIDO;
$conteudoXML.= "</NumPedido>\n\t\t";

$conteudoXML.= "<Origem>";
$conteudoXML.= $ORIGEM;
$conteudoXML.= "</Origem>\n\t\t";

$conteudoXML.= "<Parcelas>";
$conteudoXML.= $PARCELAS;
$conteudoXML.= "</Parcelas>\n\t\t";

$conteudoXML.= "<Portador>";
$conteudoXML.= $PORTADOR;
$conteudoXML.= "</Portador>\n\t\t";

$conteudoXML.= "<Recorrente>";
$conteudoXML.= $RECORRENTE;
$conteudoXML.= "</Recorrente>\n\t\t";

$conteudoXML.= "<Senha>";
$conteudoXML.= $SENHA;
$conteudoXML.= "</Senha>\n\t\t";

$conteudoXML.= "<Total>";
$conteudoXML.= $TOTAL;
$conteudoXML.= "</Total>\n\t\t";

$conteudoXML.= "<Transacao>";
$conteudoXML.= $TRANSACAO;
$conteudoXML.= "</Transacao>\n\t\t";

$conteudoXML.= "</emkt>\n";
$conteudoXML.= "</main>\n";
$url = 'https://scommerce.userede.com.br/Redecard.Komerci.External.WcfKomerci/KomerciWcf.svc';
$curl = curl_init();
curl_setopt_array( $curl, array(
	CURLOPT_RETURNTRANSFER => 1,
	CURLOPT_URL => $url,
	CURLOPT_POST => 1,
	CURLOPT_POSTFIELDS => array(
		XML => $conteudoXML
	)
) );
$resp = curl_exec($curl);
curl_setopt($curl, CURLOPT_URL, 'http://divinho2.web2420.uni5.net/envioteste.php');
$resposta = curl_exec($curl);
curl_close($curl);
echo $resposta;
?>

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por Jack Oliveira
      Boa noite galera..
       
      Estou tentando gerar um sitemap com php
       
      So que tenho que por o limit 1200 
       
      mais que isso ele nao gera e se deixar sem limit 
       
      Obs: o banco de dados contem mais de 10 mil registros
      <?php // Data e hora atual $datetime = new DateTime(date('Y-m-d H:i:s')); // A linha abaixo me retornará uma data no seguinte formato: 2017-11-22T00:06:23-02:00 $date = $datetime->format(DateTime::ATOM); // ISO8601 // Gera o arquivo XML do sitemap $xml = '<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"> <url> <loc>'.ConfigPainel('site_url').'</loc> <lastmod>'.$date.'</lastmod> <changefreq>weekly</changefreq> <priority>1.00</priority> </url>'; $Query = DBRead('cidades','*',"WHERE status ='1' ORDER BY nome ASC"); if (is_array($Query)) { foreach ($Query as $modcid) { $xml .=' <url> <loc>'.ConfigPainel('site_url').''.$modcid['subdominio'].'/</loc> <lastmod>'.$date.'</lastmod> <changefreq>weekly</changefreq> <priority>1.00</priority> </url>'; //$QueryR = DBRead('directory_guia', '*',"WHERE cidade='{$modcid['id']}' AND status='1' ORDER BY titulo ASC"); $QueryR = DBRead('directory_guia', '*',"WHERE cidade='{$modcid['id']}' AND status='1' ORDER BY titulo ASC LIMIT 1200"); if (is_array($QueryR)) { foreach ($QueryR as $v) { $Queryc = DBRead('cidades', '*',"WHERE id='{$v['cidade']}' ORDER BY nome ASC")[0]; if(empty($v['slug'])) { }else{ $urlseo = ''.ConfigPainel('site_url').''.$Queryc['subdominio'].'/list/'.$v['slug'].'/'; $xml .=' <!-- INICIO DA EMPRESA '.TRIM($v['titulo']).' --> <url> <loc>'.$urlseo.'</loc> <lastmod>'.$date.'</lastmod> <changefreq>weekly</changefreq> <priority>0.85</priority> </url> <!-- FIM DA EMPRESA '.TRIM($v['titulo']).' --> '; } }} }} $xml .= ' </urlset>'; // Abre o arquivo ou tenta cria-lo se ele não exixtir $arquivo = fopen('../sitemap.xml', 'w'); if (fwrite($arquivo, $xml)) { Redireciona('./index.php?sucesso'); } else { Redireciona('?erro'); } fclose($arquivo); // Compactar arquivo sitemap para GZIP $data = implode("", file("sitemap.xml")); $gzdata = gzencode($data, 9); $fp = fopen("sitemap.xml.gz", "w"); fwrite($fp, $gzdata); fclose($fp); // Envia para o Google o novo sitemap gerado $urlSitemap = "http://www.google.com/webmasters/sitemaps/ping?sitemap=".ConfigPainel('site_url').""; // Arquivos a serem enviados $Files = ['sitemap.xml', 'sitemap.xml.gz']; // Envia os dois arquivos sitemap gerados para a URL do Google foreach ($Files as $file) { $url = $urlSitemap . $file; $ch = curl_init($url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); } ?> Caso ouve outra forma que eu possa gerar este sitemap com php fico grato...
    • Por gustavopinent
      Olá! Esse erro ocorre em um php simples rodando em um servidor compartilhado Locaweb: SSL certificate problem: unable to get local issuer certificate. O php faz uma requisição ao site do Cep Aberto para consulta de endereço informando o CEP (https://www.cepaberto.com/api/v3/cep?cep=95020520)
       
      Olhei o php.ini e não tem nenhuma menção ao arquivo de certificados. Então peguei alguns tutoriais, baixei o arquivo "cacert.pem", coloquei lá e defini o curl no próprio php, ficou assim:
      $ch = curl_init($url); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: Token token="' . $token . '"']); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_CAINFO, $cacert); curl_setopt($ch, CURLOPT_CAPATH, $cacert); $res = curl_exec($ch); if($res===FALSE) { $Res["erro"] = "curl"; $Res["msg"] = "Execução CURL falhou!"; $Res["descr"] = curl_error($ch); } else { $Res["dados"] = json_decode($res); $Res["http"] = curl_getinfo($ch, CURLINFO_HTTP_CODE); $Res["erro"] = ($Res["http"]==200)? "OK" : "http" ; $Res["msg"] = ($Res["http"]==200)? "" : "Erro HTTP ".$Res["http"] ; } Onde $cacert é o endereço do arquivo "cacert.pem", verificado antes por is_file. Mas o erro é o mesmo, como se eu nada tivesse feito. Tem que configura o Apache? Não sei como configurar o Apache, será que posso? Desabilitar o SSL do php é uma opção que não tentei ainda, dizem que não é aconselhável...
       
      O PHP é o 5.6 (pretendo ir pro 7.4 em breve) e o servidor é CENTOS 5.11 compartilhado, hospedagem Locaweb.
       
      Alguma ideia? 
    • Por Giovanird
      Olá a todos!
      Tenho uma api  Sala de Aula e dentro dela o id de cada aluno. Em outra api, API ALUNO,  tenho os dados de cada aluno:  nome, foto, endereço.
      Estou fazendo o foreach da api Sala de Aula e preciso também retornar os dados de cada aluno.
      Segue o código que não estou conseguindo desenvolver
      $sala = file_get_contents("https://api/sala?id=987"); $sala = json_decode($sala, true); $sala = $sala['data']; foreach ($sala as $resulsala){ $codigoaluno = $resulsala['idaluno']; $alunos = file_get_contents("https://api/alunos?id=$codigoaluno"); $alunos = json_decode($alunos, true); $alunos = $alunos['data']; foreach ($alunos as $resulalunos){ echo $resulalunos['nome']; echo $resulalunos['foto']; echo $resulalunos['rua']; } }  
    • Por Orico Chain
      Oi pessoal,
       
      Preciso de ajuda, estou tentando gerar um TXT com dados de uma API mas não estou conseguindo:
       
      <?php $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "https://api.bololex.com/api/prices/TRX-USDT", CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_HTTPHEADER => array( "cache-control: no-cache" ), )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); $response = json_decode($response, true); $value1 = $response['result'] [0] ['ask'] ['priceChange']; if (empty($value1)) { $value1 = is_file('/var/www/html/24tstar.txt') ? file_get_c> } else { $value1 = round($value1, 6); file_put_contents('/var/www/html/24tstar.txt', $value1); Preciso que o TXT grave duas informações: ASK e PRICECHANGE uma em baixo da outra
       
      estou errando alguem lugar, alguém poderia me ajudar?
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.