Публикация HTTPS с использованием Excel VBA с телом XML и проблемой заголовков запросов

Я пытаюсь использовать 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?

Любые предложения приветствуются?

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

chillin 23.11.2018 11:50

Кроме того, вы, кажется, добавляете URL-адрес в начало вашего XML-документа, который сам по себе в настоящее время не кажется действительным (см. Предыдущий комментарий). Не могли бы вы опубликовать успешный запрос в Postman, чтобы было ясно, должно ли тело начинаться с URL-адреса? Спасибо

chillin 23.11.2018 11:54

Возможно, вам придется изменить назначение 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_TRANSACTIO‌​N> <QUOTEREF>3456789012</QUOTEREF><MCH_ISO>036</MCH_ISO> <MCH_AMT>1000.00</MCH_AMT><BIN>400555000</BIN></MCH_TRANSACT‌​ION></QUOTE></REQUES‌​T></IMPULSE>" - что-то в этом роде, хотя возможно, что URL-адрес не должен быть в нем

chillin 23.11.2018 12:01

Привет, chillin ... спасибо, вы правы относительно назначения myXMLstr и удаления добавления URL. Но также мне нужно было использовать метод LoadXML модели DOMdocument вместо метода Load. Это потому, что я загружаю XML как строку, а не как ресурс, указывающий на строку XML. Исправив все это, теперь он работает ... Большое спасибо за советы!

James Ling 23.11.2018 23:02
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
4
3 903
0

Другие вопросы по теме