[英]XML request is not well-formed or request is incomplete
我們在申請中使用虛擬商家支付網關:
https://www.myvirtualmerchant.com/VirtualMerchant/download/developerGuide.pdf
我正在嘗試記錄CCSALE事務,但我一直收到此錯誤:
<?xml version="1.0" encoding="UTF-8"?>
<txn><errorCode>6042</errorCode><errorName>Invalid Request Format</errorName><errorMessage>XML request is not well-formed or request is incomplete.</errorMessage></txn>
我在Fiddler POST中傳遞的XML是:
<txn>
<ssl_merchant_id>my_mer_id</ssl_merchant_id>
<ssl_user_id>my_usr_id</ssl_user_id>
<ssl_pin>my_pin</ssl_pin>
<ssl_test_mode>false</ssl_test_mode>
<ssl_transaction_type>ccsale</ssl_transaction_type>
<ssl_card_number>4111111111111111</ssl_card_number>
<ssl_exp_date>1215</ssl_exp_date>
<ssl_amount>1.00</ssl_amount>
</txn>
我只是刪除了我的商家ID,用戶ID和ssl pin。 其余的信息就是這樣。 我將數據發布到: https : //demo.myvirtualmerchant.com/VirtualMerchantDemo/processxml.do
任何人都可以告訴我為什么說XML不是很好?
首先,經過數小時的挫折后,我發現PHP的做法非常遲鈍。 由於這個XML錯誤是如此持久,我想在Coldfusion中嘗試這個,並且在2-3分鍾內完成了整個過程,沒有XML錯誤,沒有從API返回SSL垃圾。 無論如何,足夠通風! 這可能是您需要阻止XML格式良好的超級消息:
curl_setopt($ch, CURLOPT_POSTFIELDS, array("xmldata=" . $fields_string));
假設您正在關注他們的文檔並且您在fields_string中保存變量,那么您需要做的就是鍵入模仿API變量的內容。 在這種情況下,xmldata會這樣做。
我還沒有聽到拋出這個問題的答案: Curl error: SSL read: error:00000000:lib(0):func(0):reason(0), errno 104
這要歸功於監聽錯誤,否則$ result在我擺脫XML錯誤后返回空。 所以,在這里:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, array("xmldata=" . $fields_string));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$result = curl_exec($ch);
if(curl_errno($ch))
echo 'Curl error: ' . curl_error($ch);
else
echo 'the return is ' . $result;
SSL尚未設置,那么為什么他們會為CURLOPT_SSL_VERIFYPEER和CURLOPT_SSL_VERIFYHOST煩惱呢? 即使它是假的,它也不起作用,整個事情變成了Charlie Foxtrot!
我也得到了這個錯誤,這是我的工作卷曲功能
public function send_curl_xml($xml=NULL){
$data = http_build_query(array("xmldata"=>$xml));
$headers = array(
"Accept: application/xml",
"Content-type: application/x-www-form-urlencoded"
//,"Content-length: " . strlen($data)
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$response = curl_exec($ch);
//echo $response;
if(curl_errno($ch)){
print curl_error($ch);
return false;
} else {
curl_close($ch);
return $data;
}
}
$ xml變量是DOCDocument對象,如果要動態生成xml,請務必使用$ xml-> saveHTML()(此處的關鍵是刪除xml字符串中的“”行。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.