2011-12-01 3 views
0

Cielo의 웹 서비스에 요청을 보내려고 노력하고 있습니다 만, 컬, fsockopen 또는 기타와 함께 보내면 작동하지 않으며 양식을 게시하면 완벽하게 작동합니다 ... XML과PHP - XML이 파싱되지 않았습니다.

PHP : 내가 잃어버린 시간을 해결하기 위해 노력했습니다

<form action="https://qasecommerce.cielo.com.br/servicos/ecommwsec.do" method="post"> 
<textarea name="mensagem" cols="120" rows="10"/></textarea> 
<input type="submit" value="Teste"/> 
</form> 

을하지만, 찾을 수 없습니다 : 나는 추적의 HTML과 같은 XML을 게시 할 경우

<?php 
$xml = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n"; 
$xml .= '<requisicao-transacao id="' . md5(date("YmdHisu")) . '" versao="1.1.0">'; 
$xml .= '<dados-ec><numero>1001734898</numero><chave>e84827130b9837473681c2787007da5914d6359947015a5cdb2b8843db0fa832</chave>'; 
$xml .= '</dados-ec>'; 
$xml .= '<dados-pedido>'; 
$xml .= '<numero>234</numero>'; 
$xml .= '<valor>1500</valor>'; 
$xml .= '<moeda>986</moeda>'; 
$xml .= '<data-hora>' . date("Y-m-d") . "T" . date("H:i:s") . '</data-hora>'; 
$xml .= '<descricao>234 - teste: 1 x $15.00</descricao>'; 
$xml .= '<idioma>PT</idioma>'; 
$xml .= '</dados-pedido>'; 
$xml .= '<forma-pagamento>'; 
$xml .= '<bandeira>visa</bandeira>'; 
$xml .= '<produto>1</produto>'; 
$xml .= '<parcelas>1</parcelas>'; 
$xml .= '</forma-pagamento>'; 
$xml .= '<url-retorno><![CDATA[' . 'http://localhost/cielo/index.php?option=com_events_booking&controller=booking&task=payment_notify&payment_method=cielo&Itemid=1' . ']]></url-retorno>'; 
$xml .= '<autorizar>3</autorizar>'; 
$xml .= '<capturar>true</capturar>'; 
$xml .= '</requisicao-transacao>'; 

$endereco = 'ssl://qasecommerce.cielo.com.br'; 

$resultado = ''; 
$fp = fsockopen($endereco, 443, $errno, $errstr, 60); 

if (!$fp) { 
    exit($errno . ' - ' . $errstr); 
} else { 
    $http = "POST /servicos/ecommwsec.do HTTP/1.1\r\n"; 
    $http .= "Host: " . $_SERVER['HTTP_HOST'] . "\r\n"; 
    $http .= "User-Agent: " . $_SERVER['HTTP_USER_AGENT'] . "\r\n"; 
    $http .= "Content-Type: application/x-www-form-urlencoded\r\n"; 
    $http .= "Content-length: " . strlen('mensagem='.$xml) . "\r\n"; 
    $http .= "Connection: close\r\n\r\n"; 
    $http .= 'mensagem='.$xml . "\r\n\r\n"; 

    fwrite($fp, $http); 

    while (!feof($fp)) { 
     $resultado .= fgets($fp, 4096); 
    } 
    fclose($fp); 

    echo $resultado; 
} 

그것은 완벽하게 작동 문제.

답변

2

x-www-form-urlencoded 데이터로 보내지 만 URL 인코딩을 수행하지 않았습니다.

변경

$http .= 'mensagem='.$xml . "\r\n\r\n"; 

$http .= 'mensagem='.rawurlencode($xml); // The extra newlines aren't needed. 

하는 것은 또한 당신의 콘텐츠 길이를 업데이트해야합니다.

+0

말괄량이와 fsockopen으로 완벽하게 작동합니다. 감사합니다. –