Php 返回标头时如何解析curl响应
所以我想做的是,解析响应中的每个“节点”,因为没有更好的词。它应该回显“标记”,后跟“:”,然后是值。我试过的是“代码”部分。从当前代码返回的内容在“Response”部分。我试图从其他代码中学习,这就是“出于调试和认证目的显示标题/正文/响应”代码的来源。我只是试图修改它以响应解析后的rawResponse,但它显然不响应 响应: 代码: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,
您需要将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 " $value<BR>\n";
echo "<BR>body:<BR>\n $body<BR><BR><HR>\n";
echo "<BR>rawResponse:<BR>\n $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);
}