2014-07-01 72 views
2

下面是我從Provider獲得的調用API的示例,我面臨將此代碼轉換爲Coldfusion的問題。任何幫助將appriciatedColdfusion WCF api實現

var parameters = new List<RegaloPayBillerFieldWithValue> 
    { 
    new RegaloPayBillerFieldWithValue 
    { 
     Name = "NPE", 
     Value = "1234567890" 
    } 
    }; 
    var preReceipt = client.RegaloPayPreReceipt(accessId: "2FC60D63-9091-4530-BC08-AF0D5742BBF2", billerPublicId: 3, localAmount: 0, billParameters: parameters); 

在那裏,我面臨的問題的部分是上部即

var parameters = new List<RegaloPayBillerFieldWithValue> 
    { 
    new RegaloPayBillerFieldWithValue 
    { 
     Name = "NPE", 
     Value = "1234567890" 
    } 
    }; 

這裏兩個變量,即名稱和值沒有被公佈correctly.Test網址是http://regalocashservice.cloudapp.net:8085/RegaloCashService.svc?wsdl

回答

2

你可以爲寫

<cfset wsdlurl = "http://regalocashservice.cloudapp.net:8085/RegaloCashService.svc?wsdl"> 
    <cfset parameters = StructNew()> 
    <cfset RegaloPayBillerField = ArrayNew(1)> 
    <cfset vars = structNew()> 

    <cfset ArrayAppend(RegaloPayBillerField, {Name="NPE", Value="1234567890"})> 
    <cfset StructAppend(parameters, {RegaloPayBillerFieldWithValue = RegaloPayBillerField })> 
    <cfset vars["billerPublicId"] = 2> 
    <cfset vars["localAmount"] = 0> 
    <cfset vars["accessId"] = "2FC60D63-9091-4530-BC08-AF0D5742AAF2"> 

    <cfinvoke webservice="#wsdlurl#" method="RegaloPayPreReceipt" returnVariable="res" argumentcollection="#vars#" > 
<cfinvokeargument name="billParameters" value="#parameters#"/> 
    </cfinvoke> 
    <cfdump var="#res.getResponseCode()#"> 
+0

除非我遺漏了一些東西,這與[我已經建議](http://stackoverflow.com/a/24515183/104223)基本相同,只是以cfml形式。 – Leigh

+0

Leigh,您的代碼也正常工作我贊成它。 –

+0

我更加好奇爲什麼選擇這個答案作爲答案,因爲它是我之前例子的改編。也許我想省略一些東西。 – Leigh

1

注:下面的代碼在CF 11開發版環境中測試

<cftry> 
    <cfset parameters = StructNew()> 
    <cfset StructAppend(parameters, {Name="NPE", Value="1234567890"})> 
    <cfinvoke webservice="test" method="RegaloPayPreReceipt" returnVariable="res"> 
    <cfinvokeargument name="accessId" value="REAL_ACCESSID_HERE"/> 
    <cfinvokeargument name="billerPublicId" value="3"/> 
    <cfinvokeargument name="localAmount" value="0"/> 
    <cfinvokeargument name="billParameters" value="#parameters#"/> 
    </cfinvoke> 
    <cfdump var="#res#"> 
    <cfcatch type="Any"> 
    <cfdump var="#cfcatch.message#"> 
    </cfcatch> 
</cftry> 

Web服務「測試」映射到CF管理工具中的http://regalocashservice.cloudapp.net:8085/RegaloCashService.svc?wsdl。這裏是對象的轉儲返回org.datacontract.schemas._2004._07.domainclasses_dtos_results.RegaloPayPreReceiptResult

enter image description here

+0

Mr.Babrenok,謝謝回答。我也收到了這個問題,但問題在於它顯示的響應,即使用時發生了未知錯誤。我問過提供商,他們說兩個參數的名稱和值都沒有正確發佈。他們應該是'RegaloPayBillerFieldWithValue'類型。 – user3792364

2
var parameters = new List<RegaloPayBillerFieldWithValue> 
    { 
    new RegaloPayBillerFieldWithValue 
    { 
     Name = "NPE", 
     Value = "1234567890" 
    } 
    }; 

從例子,WSDL,看起來他們是隻需創建一個結構數組,然後通過包裝對象(即另一個結構)傳遞。我認爲如果你創建數組它應該工作,然後把它包像這樣:

<cfscript> 
    // create ArrayOfRegaloPayBillerFieldWithValue wrapper object 
    parameters = [ {Name="NPE", Value="1234567890"} ]; 
    billParameters = { RegaloPayBillerFieldWithValue=parameters }; 

    // create web service 
    ws = createObject("webservice", "http://regalocashservice.cloudapp.net:8085/RegaloCashService.svc?wsdl"); 
    // debug 
    writeDump(ws); 

    // get result code 
    result = ws.RegaloPayPreReceipt("2FC60D63-9091-4530-BC08-AF0D5742AAF2" 
            , 3 , 0, billParameters ); 
    writeDump(result.getResponseCode()); 
</cfscript>