2014-07-01 73 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>