2014-04-04 3 views
0

RegOnline의 개발자 페이지에서 우리 서버에 대한 API 호출을 설정하고 있습니다. 그들은 핸드 셰이크 (PHP, C#, JS, SOAP)에 대한 다양한 예제를 제공하며 마지막에는 메서드 호출의 일부로 API 토큰을 포함하는 방법에 대한 가장 어려운 예가 있습니다.ColdFusion SOAP API 호출

http://developer.regonline.com/authentication-basics/

나는 그들의 GetEvent 메소드를 호출하는 것을 시도하고,이 호출은 내가 생성 한 API를 토큰을 포함한다. 그러나 SOAP 예제를 토대로 토큰 값을 포함하는 방법을 추측하고 있습니다. 다음은 그 예입니다.

페이지의 다른 예제에는 토큰을 하드 코딩 할 수있는 곳을 명시 적으로 보여주는 전체 버전이 있습니다. SOAP에 대한 지식이 현재 최소한이라서 인정할 것입니다. 아마도이 예제에서 뭔가 빠졌을 것입니다.

여기에 메소드를 호출하려는 시도가 있습니다. 그것들은 그들의 문서와 200 OK 상태의 페이지를 뱉어 내는데, 이것은 옳지 않습니다.

<cfset apiToken = "xxxxx" /> 
<cfset eventID = "xxxxxx" /> 
    <cfsavecontent variable="soapBody"> 
     <cfoutput> 

      <?xml version="1.0" encoding="utf-8"?> 
      <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 

       <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 

        <GetEvent xmlns="http://www.regonline.com/api"> 

         <eventID>#eventID#</eventID> 

        </GetEvent> 

       </s:Body> 

      </s:Envelope> 

      <s:complexType name="TokenHeader"> 
       <s:sequence> 
        <s:element minOccurs="0" maxOccurs="1" name="APIToken" type="s:string"> 
         #apiToken# 
        </s:element> 
       </s:sequence> 
       <s:anyAttribute/> 
      </s:complexType> 

     </cfoutput> 
    </cfsavecontent> 

    <cfhttp url="https://www.regonline.com/api" method="get" result="theCFHTTP" redirect="true"> 

     <cfhttpparam type="HEADER" name="Content-Type" value="text/xml; charset=utf-8"> 
     <cfhttpparam type="HEADER" name="Accept" value="application/soap+xml, multipart/related, text/*"> 
     <cfhttpparam type="HEADER" name="User-Agent" value="Axis/1.1"> 
     <cfhttpparam type="HEADER" name="Cache-Control" value="no-cache"> 
     <cfhttpparam type="HEADER" name="Pragma" value="no-cache"> 
     <cfhttpparam type="HEADER" name="SOAPAction" value="https://www.regonline.com/api/default.asmx/GetEvent"> 
     <cfhttpparam type="HEADER" name="Content-Length" value="#len(soapBody)#"> 
     <cfhttpparam type="xml" name="body" value="#soapBody#"> 

    </cfhttp> 

    <cfdump var="#theCFHTTP#"> 

답변

0

그건 당신이하고 싶은 것이 아닙니다. SOAP 호출을 사용하면 문서에서 제공 한 XML을 따를 수 있습니다 (https://www.regonline.com/api/default.asmx?op=GetEvent).

그래서 특별한 경우에, 당신은 CSSAVECONTENT 변수 soapBody 이하로 대체 할 :

<cfsavecontent variable="soapBody"> 
<cfoutput> 
    <?xml version="1.0" encoding="utf-8"?> 
    <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/"> 
     <soap:Header> 
      <TokenHeader xmlns="http://www.regonline.com/api"> 
       <APIToken>#apiToken#</APIToken> 
      </TokenHeader> 
     </soap:Header> 

     <soap:Body> 
      <GetEvent xmlns="http://www.regonline.com/api"> 
       <eventID>#eventID#</eventID> 
      </GetEvent> 
     </soap:Body> 
    </soap:Envelope> 
</cfoutput> 
</cfsavecontent> 

가 당신을 위해 반환 무엇을 참조하십시오.

+0

제공 한 문서 URL을 놓친 이유를 모르겠지만 큰 도움이되었습니다. 출력물에는 문서 페이지 콘텐츠 만 표시되지만 그 문제는 다른 게시물을 필요로합니다. –

1

SOAP 요청의 형식이 잘못되었습니다. 모든 SOAP 요청은 SOAP 봉투 내에 있어야합니다. getEvent 요청을 위해 SoapUI에서 생성 된 템플릿이 있습니다.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:api="http://www.regonline.com/api"> 
    <soapenv:Header> 
    <api:TokenHeader> 
     <!--Optional:--> 
     <api:APIToken>?</api:APIToken> 
    </api:TokenHeader> 
    </soapenv:Header> 
    <soapenv:Body> 
    <api:GetEvent> 
     <api:eventID>?</api:eventID> 
    </api:GetEvent> 
    </soapenv:Body> 
</soapenv:Envelope> 

호출 자체에 대해서는 게시를 시도해야 할 수도 있지만 이에 대해서는 확실하지 않습니다. 업데이트가 필요할 수도있는 한 가지는 SOAPAction입니다. SoapUI의 테스트 호출에서 헤더의 작업은 http://www.regonline.com/api/GetEvent입니다. 그것은 두 가지 방법으로 작동 할 수 있지만.

+0

형식이 정확했지만 일부 태그가 정확하지 않습니다. 그러나 좋은 추측을합니다. –