2016-07-23 47 views
0

我想通過XML請求作爲一個變量在PHP如何提供XML請求作爲變量在PHP

我的XML請求看起來像

$XPost ="<ENVELOPE> 
    <HEADER> 
     <VERSION>1</VERSION> 
     <REQVERSION>1</REQVERSION> 
     <TALLYREQUEST>EXPORT</TALLYREQUEST> 
     <TYPE>COLLECTION</TYPE> 
     <SESSIONID>" .$session. "</SESSIONID> 
     <TOKEN>" .$token. "</TOKEN> 
     <ID>GetProfitnLossColl</ID> 
    </HEADER> 
    <BODY> 
    <DESC> 
    <STATICVARIABLES> 
     <SVCURRENTCOMPANY>" .$company. "</SVCURRENTCOMPANY> 
     <SVEXPORTFORMAT> $$SysName:XML </SVEXPORTFORMAT> 
    </STATICVARIABLES> 
    <TDL> 
    <TDLMESSAGE> 
     <COLLECTION NAME= \" GetProfitnLossColl \" ISMODIFY= \" No \" ISFIXED= \" No \" ISINITIALIZE= \" No \" ISOPTION= \" No \" ISINTERNAL= \" No \"> 
      <TYPE>Group</TYPE>       
      <CHILDOF>&#4; Primary</CHILDOF> 
      <NATIVEMETHOD>parent, MasterID</NATIVEMETHOD> 
      <NATIVEMETHOD>BSDrClosing</NATIVEMETHOD> 
      <NATIVEMETHOD>BSCrClosing</NATIVEMETHOD> 
      <Method>VSPLName : $$Name</Method> 
      <Method>isGroup : $$IsGroup</Method> 
      <Method>cmpName : ##SVCurrentCompany</Method> 
      <Filters>CLDrBalNotZero</Filters> 
     </COLLECTION> 
     <SYSTEM TYPE= \" Formulae \" NAME= \" CLDrBalNotZero \" ISMODIFY= \" No \" ISFIXED= \" No \" ISINTERNAL= \" No \">$BSDrClosing != 0 Or $BSCrClosing != 0 </SYSTEM> 
    </TDLMESSAGE> 
    </TDL> 
    </DESC> 
    </BODY> 
    </ENVELOPE>"; 

我使用PHP這個請求連接理貨服務器作爲

<?php 
$response = array("error" => FALSE); 
if(isset($_REQUEST['session1']) && isset($_REQUEST['token']) && isset($_REQUEST['company'])){ //&& !empty($_POST['session1']) && !empty($_POST['token']) && !empty($_POST['company'])){ 

$url  = "https://dev1.tallyenterprise.com"; 
//$url  = "https://tallynet.tallyenterprise.com"; 
$session = $_REQUEST['session1']; 
$token  = $_REQUEST['token']; 
$company = $_REQUEST['company']; ///_POST['company']; 

$XPost = "above xml request"     

$headers = array(); 
$headers[] = 'ID:GETPROFITNLOSSCOLL'; //GetProfitnLossColl 
$headers[] = 'SOURCE:VISIONSERVER'; 
$headers[] = 'TARGET: TALLY'; 
$headers[] = 'CONTENT-TYPE:text/xml;charset=utf-8'; 
$headers[] = 'Accept-Encoding:identity'; 

$headers[] = 'TARGETACCOUNTINTERNALID:201214173'; 
//$headers[] = 'TARGETCOMPANYNAME:Vision Solutions App'; 
$headers[] = 'TARGETCOMPANYNAME:'.$company; 


// http://www.hackingwithphp.com/15/10/2/your-first-curl-scripts 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_VERBOSE, 1); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
curl_setopt($ch, CURLOPT_TIMEOUT, 40); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 

curl_setopt($ch, CURLOPT_POSTFIELDS, $XPost); 
curl_setopt($ch, CURLOPT_POST, 1); 

curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); 

$data = curl_exec($ch); 
curl_close($ch); 

echo $data; 
} 
else{ 
$response["error"] = TRUE; 
$response["error_msg"] = "Required parameters (session or token) is missing!"; 
echo json_encode($response); 
} 
?> 

它給我的瀏覽器警告 注意:未定義的變量:SYSNAME在C:\ wamp64 \ WWW \ VisionServer \ TallyPhp \詢價\ getProfitnLoss.php上線36

和名稱,IsGroup,BSCrClosing

和響應的無效請求

請幫我.....

回答

0

PHP是解析$ SYSNAME:XML作爲變量。如果您要發送的文字字符串「$$ SYSNAME:XML」你需要躲避XML字符串像這樣在每一個美元符號:

<SVEXPORTFORMAT> \$\$SysName:XML </SVEXPORTFORMAT> 
+0

謝謝@Bert我所做的更改,現在它不是推搡錯誤,但它顯示「無效的請求」,如果我在瀏覽器中通過傳遞參數在URL中測試它,而在我的應用程序中,我發送POST請求,然後顯示「缺少必需的參數(會話或令牌)!」。任何解決方案......? – user6344335Tejpal