我们在申请中使用虚拟商家支付网关:
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格式不正确?
答案 0 :(得分:2)
首先,经过数小时的挫折后,我发现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!