我正在尝试使用 Access 中的 VBA 使 SOAP 登录方法与用于垂直响应的 API 一起使用。他们不通过示例来推广 VBA,他们建议使用他们支持的工具和示例,例如 Java 和 PHP 中的工具和示例。
在他们位于http://developers.verticalresponse.com/api/的 API 文档页面上,他们说端点是: https ://api.verticalresponse.com/wsdl/1.0/VRAPI.wsdl
在他们的 API 文档页面上,描述登录的链接位于 Misc Methods 选项卡上。
输入参数描述为:
username [xsd:string]
password [xsd:string]
session_duration_minutes [xsd:integer]
我尝试了以下 VBA 代码,其中包含 URL、SOAP 信封和标头的变体。我从来没有得到会话 ID,但总是下面显示无用的文本。
Function VRLogin() As String
Dim sURL As String
Dim sEnv As String
Dim xmlhtp As New MSXML2.XMLHTTP
sURL = "https://api.verticalresponse.com/wsdl/1.0/VRAPI"
sEnv = sEnv & "<soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">"
sEnv = sEnv & " <soap:Body>"
sEnv = sEnv & " <username>firstname-lastname@yahoo.com</username>"
sEnv = sEnv & " <password>xxxxxxxx</password>"
sEnv = sEnv & " <session_duration_minutes>120</session_duration_minutes>"
sEnv = sEnv & " </soap:Body>"
sEnv = sEnv & "</soap:Envelope>"
xmlhtp.Open "post", sURL, False
xmlhtp.setRequestHeader "Content-Type", "text/xml"
xmlhtp.setRequestHeader "SOAPAction", "login"
xmlhtp.send sEnv
VRLogin = xmlhtp.ResponseText
End Function
在 URL 中具有以下变体:
sURL = "https://api.verticalresponse.com/wsdl/1.0/VRAPI"
sURL = "https://api.verticalresponse.com/wsdl/1.0/login"
sURL = "https://api.verticalresponse.com/wsdl/1.0/VRAPI/login"
sURL = "https://api.verticalresponse.com/wsdl/1.0/VRAPI?method=login"
sURL = "https://api.verticalresponse.com/login"
响应文本类似于以下内容:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>404 Not Found</TITLE>
</HEAD><BODY>
<H1>Not Found</H1>
The requested URL /wsdl/1.0/VRAPI was not found on this server.<P>
</BODY></HTML>
如果 URL 包含类似以下之一的“wsdl”:
sURL = "https://api.verticalresponse.com/wsdl/1.0/VRAPI.wsdl"
sURL = "https://api.verticalresponse.com/wsdl/1.0/VRAPI.wsdl/login"
sURL = "https://api.verticalresponse.com/wsdl/1.0/VRAPI.wsdl?method=login"
响应文本是 wsdl 文档:
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:vrns="http://api.verticalresponse.com/1.0/VRAPI" xmlns:vrtypens="http://api.verticalresponse.com/1.0/VRAPI.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:vr="http://www.verticalresponse.com/vrns" targetNamespace="http://api.verticalresponse.com/1.0/VRAPI" name="VRAPI">
<wsdl:types>
<xsd:schema targetNamespace="http://api.verticalresponse.com/1.0/VRAPI.xsd">
<xsd:import namespace="http://schemas.xmlsoap.org/wsdl/"/>
<xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
<xsd:complexType name="ArrayOfCampaignContentLink">
<xsd:complexContent>
<xsd:restriction base="soapenc:Array">
<xsd:attribute ref="soapenc:arrayType" wsdl:arrayType="vrtypens:CampaignContentLink[]"/>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
etc ...
我还尝试将“xsd:”添加到 SOAP 信封中,正如我在一些示例中看到的那样,这没有帮助,例如:
sEnv = sEnv & " <xsd:username>firstname-lastname@yahoo.com</xsd:username>"
sEnv = sEnv & " <xsd:password>xxxxxxxx</xsd:password>"
sEnv = sEnv & " <xsd:session_duration_minutes>120</xsd:session_duration_minutes>"
我修改了标头,例如 Content-type,删除了标头,并制作了一个完全限定的 SOAPAction 标头,如下所示,但没有成功:
xmlhtp.setRequestHeader "SOAPAction", "https://api.verticalresponse.com/wsdl/1.0/VRAPI/login"
我的 API 访问已启用,但我的结果显示我在身份验证方面还没有走那么远。我认为这是 URL、SOAP 信封或标头中的问题。
从他们为端点提供的信息和带有输入的登录信息来看,我似乎应该能够使用 VBA 设置 API 调用。此问题不应特定于垂直响应 API。
谁能看到我错过了什么?
另外:这可能是一个不同的问题,但它是相关的,需要调用 API。
如何在 SOAP 信封中传递数组?