Я пытаюсь использовать Excel-VBA для выполнения https POST тела XML следующим образом:
Public Sub test()
Dim xmlhttp As Object
Set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP.6.0")
Dim myDom As Object
Set myDom = CreateObject("MSXML2.DOMDocument.6.0")
URL = "https://uatgateway.topl.com.au/quote"
myDom.async = False
myXMLstr = URL & "<?xml version=&Chr(34)&1.0&Chr(34)& encoding=&Chr(34)&UTF-
8&Chr(34)& standalone=&Chr(34)&yes&Chr(34)&?><IMPULSE><REQUEST><QUOTE>
<MERCHANT><ACQUIRERID>Bank A</ACQUIRERID><NETWORKID>eComm</NETWORKID>
<MERCHANTID>987654321</MERCHANTID></MERCHANT><MCH_TRANSACTION>
<QUOTEREF>3456789012</QUOTEREF><MCH_ISO>036</MCH_ISO>
<MCH_AMT>1000.00</MCH_AMT><BIN>400555000</BIN></MCH_TRANSACTION></QUOTE>
</REQUEST></IMPULSE>"
myDom.Load (myXMLstr)
xmlhttp.Open "post", URL, False
xmlhttp.setRequestHeader "Content-Type", "application/xml"
xmlhttp.setRequestHeader "Content-Length", "356"
xmlhttp.setRequestHeader "Accept", "text/xml"
xmlhttp.setRequestHeader "Host", "uatgateway.topl.com.au"
xmlhttp.setRequestHeader "Cache-Control", "no-cache"
xmlhttp.send myDom.XML
MsgBox xmlhttp.responseText
End Sub
Мой код VBA компилируется нормально, но при выполнении почти сразу же останавливается на строке xmlhttp.send с ошибкой «сервер вернул недопустимый или нераспознанный ответ». Тот же POST на Почтальоне работает. Я не уверен, правильно ли я ссылаюсь на myDom.XML?
Любые предложения приветствуются?
Кроме того, вы, кажется, добавляете URL-адрес в начало вашего XML-документа, который сам по себе в настоящее время не кажется действительным (см. Предыдущий комментарий). Не могли бы вы опубликовать успешный запрос в Postman, чтобы было ясно, должно ли тело начинаться с URL-адреса? Спасибо
Возможно, вам придется изменить назначение myXMLstr на myXMLstr = URL & "<?xml version = " & Chr(34) & "1.0" & Chr(34) & "encoding = " & Chr(34) & "UTF-8" & Chr(34) & "standalone = " & Chr(34) & "yes" & Chr(34) & "?><IMPULSE><REQUEST><QUOTE> <MERCHANT><ACQUIRERID>Bank A</ACQUIRERID><NETWORKID>eComm</NETWORKID> <MERCHANTID>987654321</MERCHANTID></MERCHANT><MCH_TRANSACTION> <QUOTEREF>3456789012</QUOTEREF><MCH_ISO>036</MCH_ISO> <MCH_AMT>1000.00</MCH_AMT><BIN>400555000</BIN></MCH_TRANSACTION></QUOTE></REQUEST></IMPULSE>" - что-то в этом роде, хотя возможно, что URL-адрес не должен быть в нем
Привет, chillin ... спасибо, вы правы относительно назначения myXMLstr и удаления добавления URL. Но также мне нужно было использовать метод LoadXML модели DOMdocument вместо метода Load. Это потому, что я загружаю XML как строку, а не как ресурс, указывающий на строку XML. Исправив все это, теперь он работает ... Большое спасибо за советы!


Думаю, вам нужно посмотреть на свой
myXMLstr, ваш код / функции VBA интерпретируются как буквальные строки, поскольку все находится в двойных кавычках (из того, что я вижу).