Envio de arquivo de LOTE para a CIELO
Bom dia,
Estou tendo um problema no meu sistema com a integração com a CIELO, e esta não tem me auxiliado muito bem.
o caso é o seguinte.
O sistema permite fazer pagamento via cartao de credito, essa parte da integração funciona perfeitamente.
o usuario escolhe a bandeira e as parcelas, é direcionado à pagina da cielo onde insere os dados do cartao.
a cielo me retorna o XML de execucao perfeitamente.
contudo, estou tentando fazer o envio de lote de pagamento, ou seja, desejo poder cadastrar os clientes como pagamento via cartao. e mandar suas faturas para a cielo sem que este tenha que levar o cartao na loja para que eu possa realizar o pagamento de seus boletos.
eis entao o problema.
conforme o manual, eu crio um arquivo XML contendo dados da minha empresa e dados do cliente e do pagamento a ser realizado e devo enviar esse arquivo via metodo POST para a cielo, eu faço isso e sempre me é retornado a mensagem de erro "Nome de arquivo inválido", apesar do nome estar dentro das exigencias do manual.
em contato com a cielo me disseram que reamlmente o nome não está incorreto e que precisam analisar detalhadamente meu arquivo para saberem o que está acontecendo. a demora em me responder está piorando a situação, pois tenho prazo para entregar o sistema e nao consigo encontrar a possibilidade do erro.
alguem que ja tenha feito envio de lote saberia me ajudar?
segue um exemplo do XML e a rotina de envio do arquivo para a cielo.
<requisicao-lote id='b64905d6aa44041f5faf522857b01f92' versao='2.5.2'>
<dados-ec>
<numero>1111111111</numero>
<chave>laksdflaskjndflkjsdflkjsndflwejrlwkdflaskdmflwkij3i2j4l23k4laksd</chave>
</dados-ec>
<numero-lote>1</numero-lote>
<tipo-operacao>02</tipo-operacao>
<lista-requisicoes>
<requisicao-transacao id='26660772b39601fd6c1b20eb42831cf9' versao='2.5.2'>
<dados-portador>
<token>kjnbSDFASDjnsadkfuhJHKJhkjHASDFSDFNSDJ=</token>
</dados-portador>
<dados-pedido>
<numero>123456789101112</numero>
<valor>500</valor>
<moeda>986</moeda>
<data-hora>2014-07-01T09:34:05</data-hora>
<idioma>PT</idioma>
</dados-pedido>
<forma-pagamento>
<bandeira>visa</bandeira>
<produto>1</produto>
<parcelas>1</parcelas>
</forma-pagamento>
<autorizar>3</autorizar>
<capturar>1</capturar>
</requisicao-transacao>
</lista-requisicoes>
</requisicao-lote>
e aqui o envio para a cielo
function EnviaArquivoLote($url_enviar, $nom_arquivo = null) {
if ($nom_arquivo) {
$CI = & get_instance();
$caminho_arquivo = "arquivos/xml_cartao/" . $nom_arquivo;
if (is_file($caminho_arquivo)) {
$post = array('arquivo' => '@' . $caminho_arquivo);
$sessao_curl = curl_init();
curl_setopt($sessao_curl, CURLOPT_URL, $url_enviar);
curl_setopt($sessao_curl, CURLOPT_FAILONERROR, true);
// CURLOPT_SSL_VERIFYPEER
// verifica a validade do certificado
curl_setopt($sessao_curl, CURLOPT_SSL_VERIFYPEER, true);
// CURLOPPT_SSL_VERIFYHOST
// verifica se a identidade do servidor bate com aquela informada no certificado
curl_setopt($sessao_curl, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt( $sessao_curl, CURLOPT_HEADER, true );
// CURLOPT_SSL_CAINFO
// informa a localização do certificado para verificação com o peer
$CI = & get_instance();
curl_setopt($sessao_curl, CURLOPT_CAINFO, getcwd() . '/ssl/' . $CI->bd->busca_configuracao('cielo_arquivo_ssl'));
//curl_setopt($sessao_curl, CURLOPT_CAINFO, getcwd() . "/ssl/VeriSignClass3PublicPrimaryCertificationAuthority-G5.crt");
//echo getcwd() . "/ssl/VeriSignClass3PublicPrimaryCertificationAuthority-G5.crt";
//echo '<br />';
//die($CI->config->item('ssl'));
curl_setopt($sessao_curl, CURLOPT_SSLVERSION, 3);
// CURLOPT_CONNECTTIMEOUT
// o tempo em segundos de espera para obter uma conexão
curl_setopt($sessao_curl, CURLOPT_CONNECTTIMEOUT, 10);
// CURLOPT_TIMEOUT
// o tempo máximo em segundos de espera para a execução da requisição (curl_exec)
curl_setopt($sessao_curl, CURLOPT_TIMEOUT, 40);
// CURLOPT_RETURNTRANSFER
// TRUE para curl_exec retornar uma string de resultado em caso de sucesso, ao
// invés de imprimir o resultado na tela. Retorna FALSE se há problemas na requisição
curl_setopt($sessao_curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($sessao_curl, CURLOPT_POST, true);
curl_setopt($sessao_curl, CURLOPT_POSTFIELDS, $post);
$resultado = curl_exec($sessao_curl);
if (!$resultado) {
$resultado = curl_error($sessao_curl);
}
curl_close($sessao_curl);
return $resultado;
} else {
return "Não é um arquivo!";
}
} else {
return false;
}
}
alguem que já conseguiu fazer o envio saberia me ajudar?
Discussão (1)
Carregando comentários...