Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 返回标头时如何解析curl响应_Php_Xml_Parsing_Curl_Xml Parsing - Fatal编程技术网

Php 返回标头时如何解析curl响应

Php 返回标头时如何解析curl响应,php,xml,parsing,curl,xml-parsing,Php,Xml,Parsing,Curl,Xml Parsing,所以我想做的是,解析响应中的每个“节点”,因为没有更好的词。它应该回显“标记”,后跟“:”,然后是值。我试过的是“代码”部分。从当前代码返回的内容在“Response”部分。我试图从其他代码中学习,这就是“出于调试和认证目的显示标题/正文/响应”代码的来源。我只是试图修改它以响应解析后的rawResponse,但它显然不响应 响应: 代码: 您需要将http头和http正文分开。这是一个“\r\n\r\n”snting。所以你可以这样找到它: $p = strpos($rawResponse,

所以我想做的是,解析响应中的每个“节点”,因为没有更好的词。它应该回显“标记”,后跟“:”,然后是值。我试过的是“代码”部分。从当前代码返回的内容在“Response”部分。我试图从其他代码中学习,这就是“出于调试和认证目的显示标题/正文/响应”代码的来源。我只是试图修改它以响应解析后的rawResponse,但它显然不响应

响应: 代码:
您需要将http头和http正文分开。这是一个
“\r\n\r\n”
snting。所以你可以这样找到它:

$p = strpos($rawResponse, "\r\n\r\n");
if( $p !== false ) {
    $rawHeades = substr($rawResponse, 0, $p);
    $rawBody = substr($rawResponse, $p + 4);
}

在打印curl\u错误($ch)之后,您需要一些东西-在这种情况下,$RAWSRESPONSE中没有任何真实数据

您的代码是错误的。您误用了CUSTOMREQUEST,因此结果将是使用一个中断的HTTP请求。
<?php

$xml_data = "<Request><NewOrder>";
$xml_data .= "<IndustryType>EC</IndustryType>";
$xml_data .= "<MessageType>AC</MessageType>";
$xml_data .= "<BIN>000002</BIN>";
$xml_data .= "<AccountNum>".$varCC."</AccountNum>";
$xml_data .= "<Exp>".$varExpiry."</Exp>";
$xml_data .= "<CardSecVal>".$varCVV."</CardSecVal>";
$xml_data .= "<OrderID>sBn5</OrderID>";
$xml_data .= "<Amount>".$varAmt."</Amount>";
$xml_data .= "</NewOrder></Request>";   

$URL = "https://orbitalvar1.paymentech.net";

// Build header as array for cURL option
$header = "POST /AUTHORIZE HTTP/1.0\r\n";
$header.= "MIME-Version: 1.0\r\n";
$header.= "Content-type: application/PTI46\r\n";
$header.= "Content-length: ".strlen($xml_data)."\r\n";
$header.= "Content-transfer-encoding: text\r\n";
$header.= "Request-number: 1\r\n";
$header.= "Document-type: Request\r\n";
$header.= "Interface-Version: Test 1.4\r\n";
$header.= "Connection: close \r\n\r\n";              
$header.= $xml_data;   

// Define cURL options, then connect to server while saving response
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,$URL);

curl_setopt($ch, CURLOPT_HEADER, false); 
curl_setopt($ch, CURLOPT_FRESH_CONNECT, TRUE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $header);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$rawResponse = curl_exec($ch);             

if (curl_errno($ch)) {
   print curl_error($ch);
} else {
   curl_close($ch);
}


/////////////////////////////////////////////////////////////////////////////
// Display headers / body / response for debugging and certification purposes
/////////////////////////////////////////////////////////////////////////////
echo "headers:<BR>\n";
foreach($header as $value) echo "&nbsp;&nbsp;&nbsp;$value<BR>\n";
echo "<BR>body:<BR>\n&nbsp;&nbsp;&nbsp;$body<BR><BR><HR>\n";
echo "<BR>rawResponse:<BR>\n&nbsp;&nbsp;&nbsp;$rawResponse<BR><BR>\n";

// Parse rawResponse XML to response array, then only display important values
$parser = xml_parser_create('UTF-8');
xml_parse_into_struct($parser, $rawResponse, $response);
//var_dump($response);
foreach($response as $value){
    switch($value["tag"]){
        case "ORDERID": echo "OrderID: ".$value["value"]."<BR>\n"; break;
        case "RESPCODE": echo "RespCode: ".$value["value"]."<BR>\n"; break;
        case "AVSRESPCODE": echo "AVSRespCode: ".$value["value"]."<BR>\n"; break;
        case "CVV2RESPCODE": echo "CVV2RespCode: ".$value["value"]."<BR>\n"; break;
        case "TXREFNUM": echo "TxRefNum: ".$value["value"]."<BR>\n"; break;
        case "AUTHCODE": echo "AuthCode: ".$value["value"]."<BR>\n"; break;
    }
}unset($value);
?>
$p = strpos($rawResponse, "\r\n\r\n");
if( $p !== false ) {
    $rawHeades = substr($rawResponse, 0, $p);
    $rawBody = substr($rawResponse, $p + 4);
}