2013-08-28 56 views
0

我想在Access中使用VBA使用垂直響應API處理SOAP登錄方法。他們不會用示例來推廣VBA,他們建議使用他們支持的工具和示例,如Java和PHP中的工具和示例。不能使用垂直響應SOAP API登錄方法的VBA

在他們的API文檔頁面,在http://developers.verticalresponse.com/api/,他們說,終點是:https://api.verticalresponse.com/wsdl/1.0/VRAPI.wsdl

在他們的API文檔頁面,說明登錄鏈接是其它方法選項卡上。描述

輸入參數爲:

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>[email protected]</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中的以下變化:

​​

響應文本是類似於以下內容:

<!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>[email protected]</xsd:username>" 
sEnv = sEnv & " <xsd:password>xxxxxxxx</xsd:password>" 
sEnv = sEnv & " <xsd:session_duration_minutes>120</xsd:session_duration_minutes>" 

我修改了標題,如:內容類型,除去頭,並提出了一個完全合格的SOAPAction頭像下面,沒有成功:

xmlhtp.setRequestHeader "SOAPAction", "https://api.verticalresponse.com/wsdl/1.0/VRAPI/login" 

我的API訪問權限已啓用,但我的結果示我甚至沒有進行認證。我認爲這是URL,SOAP信封或標題中的問題。

從他們爲端點提供的信息和其輸入的登錄信息來看,似乎我應該可以使用VBA設置API調用。這個問題不應該針對垂直響應API。

任何人都可以看到我失蹤?

另外:這可能是一個不同的問題,但它是相關的,並且需要調用API。

如何在SOAP信封中傳遞數組?

回答

0

我找到了答案。

我的主要問題是我使用他們發佈在他們的網頁上的端點URL來調用他們的API。不過,我需要在這個URL下載這個.wsdl文件,然後看看裏面的實際URL來調用API,它是https://api.verticalresponse.com/1.0/VRAPI。 .wsdl文件還會告訴您要使用的正確的SOAP操作名稱。您還需要正確指定名稱空間。

以下是完成的工作結果。

Function VRLogin() As String 

    Dim sURL As String 
    Dim sEnv As String 
    Dim xmlhtp As New MSXML2.XMLHTTP 

    sURL = "https://api.verticalresponse.com/1.0/VRAPI" 

    sEnv = "<?xml version=""1.0"" encoding=""UTF-8""?>" 
    sEnv = sEnv & "<SOAP-ENV:Envelope xmlns:SOAP-ENV=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:ns1=""VR/API/1_0"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:ns2=""http://api.verticalresponse.com/1.0/VRAPI.xsd"" xmlns:SOAP-ENC=""http://schemas.xmlsoap.org/soap/encoding/"" SOAP-ENV:encodingStyle=""http://schemas.xmlsoap.org/soap/encoding/"">" 
    sEnv = sEnv & " <SOAP-ENV:Body>" 
    sEnv = sEnv & "  <ns1:login>" 
    sEnv = sEnv & "   <args xsi:type=""ns2:loginArgs"">" 
    sEnv = sEnv & "    <username xsi:type=""xsd:string"">[email protected]</username>" 
    sEnv = sEnv & "    <password xsi:type=""xsd:string"">xxxxxxxx</password>" 
    sEnv = sEnv & "    <session_duration_minutes xsi:type=""xsd:integer"">120</session_duration_minutes>" 
    sEnv = sEnv & "   </args>" 
    sEnv = sEnv & "  </ns1:login>" 
    sEnv = sEnv & " </SOAP-ENV:Body>" 
    sEnv = sEnv & "</SOAP-ENV:Envelope>" 

    xmlhtp.Open "post", sURL, False 
    xmlhtp.setRequestHeader "Content-Type", "text/xml" 

    xmlhtp.setRequestHeader "SOAPAction", "VR/API/1_0#login" 
    xmlhtp.send sEnv 

    VRLogin = xmlhtp.ResponseText 

End Function