Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
pelo que entendi , é q atingiu o tempo maximo para faze a conexao
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?
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
Tente tirar o HTTP da config do SOAP.
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
Ta ok, quando puder você posta ele pra gente ver.
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
Está no caminho errado, @cezaarr
Esqueça SOAP, pegue o manual da Cielo novamente e releia-o, do início ao fim.
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);
}//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]](https://qasecommerce.cielo.com.br/servicos/ecommwsec.do)
[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
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
>
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 );
} echo 'Opz, não foi possível criar o recurso da cURL';
}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
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)
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
>
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.
;)
>
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
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
cujo teste contem:
<?
print_r($_POST);
print_r($_GET);
?>>
Array ( ) Array ( [pedido] => 123 )
Então, gostaria de saber como coletar os dados de retorno.
Agradeço desde já
Abraços
Wagner Felix
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 />
;)>
>
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 />
;)
hummm... obrigado... farei...
o "vicio" de brpay/pagseguro/paypal me fez acreditar que o retorno de sucesso/falha viria por POST, ehhehe
obrigado pela luz...
Pessoal , ressucitando novamente , sem querer ser chato nem nada , será que alguem pode me ajudar a dar os primeiros passos para fazer funcionar esse webservice ?
Obrigado .
>
Pessoal , ressucitando novamente , sem querer ser chato nem nada , será que alguem pode me ajudar a dar os primeiros passos para fazer funcionar esse webservice ?
Obrigado .
Se você já leu todo o manual, veja o post #13
sim sim , eu até testei , mas ele dá esse erro
>
string(887) " 12346 chave Brasilgate 097 123456789 1000 986 2010/08/20 13:26:55 123 1 http://demo.cinodo.com.br/prototipo/cielo/cielo1.php 2 false " int(0) string(0) ""
Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 2: parser error : XML declaration allowed only at the start of the document in /home/democin/public_html/prototipo/cielo/cielo1.php on line 108
Warning: simplexml_load_string() [function.simplexml-load-string]: <?xml version='1.0' encoding='UTF-8'?> in /home/democin/public_html/prototipo/cielo/cielo1.php on line 108
Warning: simplexml_load_string() [function.simplexml-load-string]: ^ in /home/democin/public_html/prototipo/cielo/cielo1.php on line 108
Warning: Invalid argument supplied for foreach() in /home/democin/public_html/prototipo/cielo/cielo1.php on line 109
TID
Data: 2010-08-20T13:28:04
Autentica :
Redirecionar para preencher dados cartão
e não sei como fazer a pagina de retorno.
Opa!!!!
mais claro que os post acima!!!!
Onde é que tu esta tendo problema?
>
Será que alguem pode me ajudar ???
Obrigado
>
Opa!!!!
mais claro que os post acima!!!!
Onde é que tu esta tendo problema?
>
Será que alguem pode me ajudar ???
Obrigado
eu testei o codigo , so que ele apresenta o erro que mosteri , queria saber como resolve-lo.
Primeiro de tudo, me diz uma coisa. Você compreendeu o que o erro quis dizer? Você entendeu a sua mensagem? Isso pode parecer coisa boba mas é muito importante.