Ir para conteúdo

POWERED BY:

Arquivado

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

cezaarr

[Resolvido] webservice cielo

Recommended Posts

ola galera, seguinte.. se conseguirem me ajudar ta beleza, senao paciencia ne, eu to tentando faze a integração com a cielo para o ecommerce q estamos desenvolvendo aqui na empresa, eles(cielo) me enviaram um manual, eu intendi poca coisa, e procurei algumas horas, posso ter procurado errado, mas n consegui achar muita coisa , vi algo sobre o SOAP mas intendi poco tbm, queria saber se alguem ja fez essa integraçao com a cielo, e se poderia me da uma ajuda, a integraçao e feita por xml, n sei se existe outra forma, mas a deles e por xml, ate perguntei se tinha diferença se eu usar SOAP ou outra,a resposta deles foi que nao há diferença alguma.

Com base no que eu achei no php.net e alguns outros lugares eu tentei fazer o seguinte, so para conectar.

 

$cliente = new SoapClient(

	'http-~~-//ecommerce.cbmp.com.br',
	array(
		'trace' => true,
		'exceptions' => true
	)

);

 

mas me retornou um erro

 

Fatal error: Maximum execution time of 60 seconds exceeded in C:\xampp\htdocs\eden\pedido\visa\visa.php on line 62

 

Se ficou mau explicado, me avizem que eu tento explica denovo, desde ja vlww. http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então já verificou com Cielo sobre esse tempo para se fazer a conexão? Talvez o link no manual não exista mais, algo assim, não tem como eu advinhar daqui rs. Tem que ir fuçando para ver o que está acontecendo.

 

Eu tentei acessar o endereço http://ecommerce.cbmp.com.br e não consegui. Está certo que é este mesmo o endereço correto?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Andre, entao... eu perguntei pro suporte da cielo, e eles me falaram q e este link mesmo, eu tbm achei estranho ,tentei acessar e deu a mesma coisa, antes mesmo de vir para o forum, tentei "pingar" tbm n obtive resposta, porem sem o http no ping ele foi ---> ping ecommerce.cbmp.com.br .

Sem o http ele passa, mas eu fiz esses teste agora pouco, um pouco antes de postar aqui, e o atendimento deles e so ate as 20, mas as 18 ja e dificil fala com alguem, eu vou entrar em contato com eles amanha, e qualquer coisa eu posto aqui, mas vlw pela forca por enquanto.

 

E o problema que pra eu ir fuçando e dificil, nunk surgiu a oportunidade de mecher com webservervice entao... eu to meio q no escuro :S

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu ja havia tentado isso tambem, so n posso colar o erro aqui agora, pq ja nao estou no servico, mas ele deu erro, n foi aquele do tempo limite, foi um outro erro, so n lembro ele de cabeca e to sem o script aqui

Compartilhar este post


Link para o post
Compartilhar em outros sites

ola, antes de entra em contato com o pessoal da cielo eu dei uma olhada bem no final do manual tem duas urls, uma de teste e uma para produção, falta de atenção da minha parte.

esse e o link para teste q eles disponibilizam

 

https://qasecommerce...os/ecommwsec.do

 

de qualquer forma eu tentei

<? 

$cliente = new SoapClient(
'https-~~-//qasecommerce.cielo.com.br/servicos/ecommwsec.do'
);

?>

 

e retorno o seguinte

 

Warning: SoapClient::SoapClient() [soapclient.soapclient]: I/O warning : failed to load external entity "https://qasecommerce.cielo.com.br/servicos/ecommwsec.do" in C:\xampp\htdocs\eden\pedido\visa\visa.php on line 54

 

Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://qasecommerce.cielo.com.br/servicos/ecommwsec.do' : failed to load external entity "https://qasecommerce.cielo.com.br/servicos/ecommwsec.do" in C:\xampp\htdocs\eden\pedido\visa\visa.php:54 Stack trace: #0 C:\xampp\htdocs\eden\pedido\visa\visa.php(54): SoapClient->SoapClient('https://qasecom...') #1 {main} thrown in C:\xampp\htdocs\eden\pedido\visa\visa.php on line 54

 

pelo erro ele diz q n conseguiu carrega, bom vou tentando aqui

Compartilhar este post


Link para o post
Compartilhar em outros sites

Está no caminho errado, @cezaarr

 

Esqueça SOAP, pegue o manual da Cielo novamente e releia-o, do início ao fim.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ola pessoal, desculpa n pude responder ontem, n tive muito tempo pra tenta resolve isso, fiz oque o amigo João Batista Neto disse, li o manual, e tentei fazer algo parecido com o exemplo oque estava no manual, utilizei a funcao "curl", mas como quase nunk utilizei, e meio dificil, vo cola aqui uma parte do script, se alguem puder ajuda vlw, parece q chega ate o webservice da cielo (pelomenos parece q sim) , mas n consigo pega retorno nenhum.

segue o script

 

 

$xml='<?xml version="1.0" encoding="UTF-8"?>
<requisicao-autenticacao id="1" versao="1.0.0" xmlns="http-~~-//ecommerce.cbmp.com.br">
<dados-ec>
	<numero>xxxx</numero>
	<chave>xxxx</chave>
	<nome>eden</nome>
	<codigo-pais>097</codigo-pais>
</dados-ec>
<dados-pedido>
	<numero>'.$_GET['pedido'].'</numero>
	<valor>'.str_replace(array('.',','),array('',''),$_GET['valor']).'</valor>
	<moeda>986</moeda>
	<data-hora>'.date("Y-m-d").'T'.date("H:i:s").'</data-hora>
</dados-pedido>
<forma-pagamento>
	<produto>1</produto>
	<parcelas>1</parcelas>
</forma-pagamento>
<url-retorno>http-~~-//localhost/eden/pedido/retorno.php</url-retorno>	
<autorizar>2</autorizar>
<capturar>false</capturar>
</requisicao-autenticacao>';



$url = 'https-~~-//qasecommerce.cielo.com.br/servicos/ecommwsec.do';

$header = "POST /servicos/ecommwsec.do HTTP/1.1 \r\n";
$header .= "Content-Type: application/x-www-form-urlencoded \r\n";
$header .= "Host: ecommerce.cbmp.com.br \r\n";
$header .= "Content-length: ".strlen($xml)." \r\n";
$header .= $xml;

$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 4);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $header);

$data = curl_exec($ch); 

if(curl_errno($ch)){
print curl_error($ch);
}
else{
//curl_close($ch);
echo "<pre>";
print_r(curl_getinfo($ch));
echo "</pre>";
}

 

aqui no final eu fui procurando algo e achei esse curl_getinfo ele retorna isso

 

Array
(
 [url] => [url="https://qasecommerce.cielo.com.br/servicos/ecommwsec.do"]https://qasecommerce...os/ecommwsec.do[/url]
 [content_type] => text/html; charset=iso-8859-1
 [http_code] => 400
 [header_size] => 166
 [request_size] => 947
 [filetime] => -1
 [ssl_verify_result] => 20
 [redirect_count] => 0
 [total_time] => 0.205
 [namelookup_time] => 0
 [connect_time] => 0.04
 [pretransfer_time] => 0.15
 [size_upload] => 0
 [size_download] => 356
 [speed_download] => 1736
 [speed_upload] => 0
 [download_content_length] => 356
 [upload_content_length] => 0
 [starttransfer_time] => 0.205
 [redirect_time] => 0
)

aguardo alguma ajuda, vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não examinei o código do Cezar, mas este novo sistema da Cielo, como ainda não foi lançado oficialmente, está sujeito a instabilidades e bugs que eles vêm corrigindo.

 

Por isso, pode ser necessário um pouco de paciência mesmo.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

fiz oque o amigo João Batista Neto disse, li o manual, e tentei fazer algo parecido com o exemplo oque estava no manual, utilizei a funcao "curl"

 

Agora você está no caminho correto.

 

http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

 

mas n consigo pega retorno nenhum.

 

Primeiro @cezaarr, atente-se ao postar qualquer código no fórum, se este não contém informações sensíveis.

 

Eu removi seu código de afiliação e sua chave de teste; Estamos em um fórum público e, postar informações sigilosas pode trazer sérios problemas para você, mesmo sendo dados para o ambiente de teste. Afinal, você está lidando com cartões de crédito e uma instituição financeira.

 

<url-retorno>http-~~-//localhost/eden/pedido/retorno.php</url-retorno>

 

Veja só, localhost é um endereço especial, só é possível acessá-lo a partir de sua própria máquina, a Cielo jamais será capaz de enviar, qualquer retorno, para o seu localhost.

 

aqui no final eu fui procurando algo e achei esse curl_getinfo ele retorna isso

 

[http_code] => 400

Sim, o código de status HTTP 400 significa Bad Request ou, Requisição inválida.

 

<?php
/**
* Template do XML que será usado para criação da mensagem
*/
$autenticacao = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<requisicao-autenticacao id="1" versao="1.0.0" xmlns="http-~~-//ecommerce.cbmp.com.br">
	<dados-ec>
		<numero>%d</numero>
		<chave>%s</chave>
		<nome>%s</nome>
		<codigo-pais>097</codigo-pais>
	</dados-ec>
	<dados-pedido>
		<numero>%d</numero>
		<valor>%s</valor>
		<moeda>986</moeda>
		<data-hora>%s</data-hora>
	</dados-pedido>
	<forma-pagamento>
		<produto>%s</produto>
		<parcelas>%d</parcelas>
	</forma-pagamento>
	<url-retorno>%s</url-retorno>
	<autorizar>2</autorizar>
	<capturar>false</capturar>
</requisicao-autenticacao>
XML;

/**
* Seu código de afiliação
*/
$afiliacao = 123456;

/**
* Sua chave
*/
$chave = 'chave';

/**
* Nome da loja
*/
$loja = 'Sua Loja';

/**
* Número do pedido
*/
$pedido = 123;

/**
* No ambiente de teste, o valor PRECISA NECESSARIAMENTE ter 2 zeros finais,
* qualquer valor que não tenha os dois dígitos menos significativos (a direita)
* como Zero farão com que a transação seja negada.
*/
$valor = 100;

/**
* Data no formato que eles esperam
*/
$data = strftime( '%Y-%m-%dT%H:%M:%S' );

/**
* Código do produto: 1 (Crédito à Vista), 2 (Parcelado loja), 3 (Parcelado administradora), A (Débito).
*/
$produto = '1';

/**
* Número de parcelas, se $produto for igual a 1 ou A, o número de parcelas DEVE ser 1
*/
$parcelas = 1;

/**
* URL de retorno, a Cielo precisa conseguir acessar essa URL para enviar o retorno, então
* não coloque LOCALHOST aqui.
*/
$retorno = sprintf( 'http-~~-//teste.sualoja.com.br/pedido/%d' , $pedido );

/**
* Montando a mensagem com os dados acima.
*/
$mensagem = sprintf( $autenticacao , $afiliacao , $chave , $loja , $pedido , $valor , $data , $produto , $parcelas , $retorno );

/**
* Iniciando CURL
*/
$curl = curl_init();

/**
* Verificamos se o recurso CURL foi criado com êxito
*/
if ( is_resource( $curl ) ){
	curl_setopt( $curl , CURLOPT_HEADER , 0 );
	curl_setopt( $curl , CURLOPT_RETURNTRANSFER , 1 );
	curl_setopt( $curl , CURLOPT_FOLLOWLOCATION , 1 );
	curl_setopt( $curl , CURLOPT_URL , 'https-~~-//qasecommerce.cielo.com.br/servicos/ecommwsec.do' );
	curl_setopt( $curl , CURLOPT_POST , 1 );
	curl_setopt( $curl , CURLOPT_POSTFIELDS , http_build_query( array( 'mensagem' => $mensagem ) ) );

	$xml = curl_exec( $curl ); $ern = curl_errno( $curl ); $err = curl_error( $curl );

	curl_close( $curl );

	if ( (bool) $ern ){
		echo 'Opz, ocorreu um erro[' , $ern , ']: ' , $err;
	} else {
		var_dump( $xml , $ern , $err );
	}
} else {
	echo 'Opz, não foi possível criar o recurso da cURL';
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

João Batista Neto, peço desculpas pelas informacoes sensiveis, foi o que voce comentou mesmo, por ser de teste eu nao me preocupei, mas obrigado por editar o post por min, amanha no primeiro horario, ja venho dizer se deu certo, e com relaçao ao "localhost" n pensei que poderia dar problema, pois a homolagaçao que eu fiz atravez da locaweb funcionou com localhost, mas por ser uma forma diferente eu nao pensei nisso valeu pelo avizo, e muito obrigado pela ajuda, vlw mesmo, amanha assim que der eu posto aqui se deu certo , mais uma vez , obrigado :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara perfeito.. funcionou como uma luva

 

mudei apenas onde tem o var_dump para pegar os dados para salvar e redirecionar para o preenchimento do cartão

 

alguem sabe como pegar os dados que retorna para o site? ele volta para o $retorno mas não sei como volta, tentei colocar um foreach em $_POST, mas não vem nada, tem que recuperar algo baseado no tid??

 

ficou:

                //var_dump( $xml , $ern , $err );        
		
		$DadosEnvio= simplexml_load_string($xml);
		foreach( $DadosEnvio as $c => $v ) // recupera valores
		{
			$c = str_replace( array("-"), array(""), $c); //para remover os - da variavel a ser criada	
			$$c = $v;
		}
                 
                //exibe os dados e link para redirecionar (colocar um javascript top.window.location='$urlautenticacao'
		echo "<br>TID $tid";
		echo "<br>Data: $data";
		echo "<br>Autentica : $urlautenticacao";
		echo "<br>Redirecionar para preencher dados cartão <a href='$urlautenticacao'>$urlautenticacao</a>";		

 

***complementando é bom pegar o status tambem e só redirecionar se estiver Ok acredito que neste caso seria o codigo 0(zero)

Compartilhar este post


Link para o post
Compartilhar em outros sites

opa, entao João Batista Neto funcionou perfeito cara, modifiquei algumas coisas e deu tudo certo, vlw cara, so uma obs.

quando fui para fazer o teste , retornou um errro de certificado, algo assim n lembro bem o erro, mas ai pelo que eu vi era por que o servidor que eu estava tentando nao tem ssl... quando acrescentei essa linha

 

curl_setopt( $curl , CURLOPT_SSL_VERIFYPEER, 0);

 

deu tudo certo, com essa linha parece que n precisa ter ssl e pega tudo normal, fica ai o avizo pra qm esta tentando.

 

aprendendo_php

 

sobre sua duvida, eu tive a mesma duvida e liguei no suporte, a pagina de retorno n vem nada mesmo eu fiz a mesma coisa que você, tentei um foreach em $_REQUEST, existe um xml q ele e usado para consultar, na verdade com os xml's de exemplo você consegue testar tudo mas a pagina de retorno segundo a propria cielo n retorna nada pra la :D, abrcss

Compartilhar este post


Link para o post
Compartilhar em outros sites

retornou um errro de certificado, algo assim n lembro bem o erro, mas ai pelo que eu vi era por que o servidor que eu estava tentando nao tem ssl... quando acrescentei essa linha

 

curl_setopt( $curl , CURLOPT_SSL_VERIFYPEER, 0);

 

deu tudo certo, com essa linha parece que n precisa ter ssl e pega tudo normal, fica ai o avizo pra qm esta tentando.

 

Alguns servidores não possuem o certificado raiz da CA da Cielo, por isso esse erro.

 

http://forum.imasters.com.br/public/style_emoticons/default/seta.gif Mas lembre-se, estamos lidando com cartões de crédito e instituição financeira, você não deve negar a verificação do certificado, em vez disso, caso seu servidor não possua o certificado raiz da CA da Cielo, peça ao administrador para adicioná-lo; É importante essa adição e a verificação pois, se algum dia, por algum motivo, houver uma intrusão e a comunicação for interceptada, o SSL irá quebrar e, com a verificação, você não correrá o risco de enviar informações altamente sigilosas à um possível intruso.

 

Resumindo, em vez de negar a verificação do certificado, adicione-o à lista de certificados confiáveis do servidor.

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

opa, entao João Batista Neto funcionou perfeito cara, modifiquei algumas coisas e deu tudo certo, vlw cara, so uma obs.

quando fui para fazer o teste , retornou um errro de certificado, algo assim n lembro bem o erro, mas ai pelo que eu vi era por que o servidor que eu estava tentando nao tem ssl... quando acrescentei essa linha

 

curl_setopt( $curl , CURLOPT_SSL_VERIFYPEER, 0);

 

deu tudo certo, com essa linha parece que n precisa ter ssl e pega tudo normal, fica ai o avizo pra qm esta tentando.

 

aprendendo_php

 

sobre sua duvida, eu tive a mesma duvida e liguei no suporte, a pagina de retorno n vem nada mesmo eu fiz a mesma coisa que você, tentei um foreach em $_REQUEST, existe um xml q ele e usado para consultar, na verdade com os xml's de exemplo você consegue testar tudo mas a pagina de retorno segundo a propria cielo n retorna nada pra la :D, abrcss

 

 

Olá O erro que o seu php nbão esta compilado com a opção curlssl , tem que pedir para o servidor adicionar ele na compilação.. aqui deu isto tambem e pesquisando vi que precisava dele, o certificado precisa o browser (veja no .doc fala sobre isto)

 

Retorno - se voce enviar a solicitação ja com a opção de consulta o sistema deles faz tudo e depois voce precisa (usando a mesma forma que este) enviar o XML da consulta

 

eu fiz assim, quando envio(este ai) salvo o TID do retorno na tabela do pedido que é o controle, no retorno coloco o pedido e e envio a consulta, ai pego o status se estiver como codigo==6 foi aprovada, se diferente mostro o erro (tem a lista no .doc tambem)

 

uso o session para o codigo do cliente.. como o retorno coloco o ?pedido=NR logo no inicio do retorno php pego a session(id do cliente) pesquiso pelo NR passado, se o pédido não pertencer ao cliente que esta logado, sai e da uma mensagem, se for igual, ai sim pesquiso o tid monto o xml da condulta para ter a resposta

Compartilhar este post


Link para o post
Compartilhar em outros sites

Revivendo o tópico...

 

Pus pra "funcionar", usei muito do que esta aqui nesse topico pra isso :D...

 

Só que na pagina de retorno, estou com dificuldade de pegar esses dados... lendo o manual, não consegui sacar se vem por post, get ou outra coisa (deve ser outra coisa, porque post ou get nao é :D)

 

 

A saber:

<url-retorno>http://www.XXXXXXXXXX.com.br/cielo/testeretorno.php?pedido=$numpedido</url-retorno>
cujo teste contem:

<?
print_r($_POST);
print_r($_GET);
?>
Só me retorna isso

Array ( ) Array ( [pedido] => 123 )

 

Então, gostaria de saber como coletar os dados de retorno.

 

Agradeço desde já

 

Abraços

 

Wagner Felix

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, gostaria de saber como coletar os dados de retorno.

Wagner, da mesma forma que você envia uma <requisicao-autorizacao />, você enviará uma <requisicao-consulta />

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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