我有以下网络服务电话:
<cfinvoke webservice="#application.capsRemote#card.cfc?wsdl" method="purchase" returnVariable="retpurchase" refreshwsdl="true">
<cfinvokeargument name="iCustomer" value="#session.user.customerCode#">
<cfinvokeargument name="iAmountCents" value="#form.cc_amount*100#">
<cfinvokeargument name="sCard" value="#form.cc_number#">
<cfinvokeargument name="sExpiry" value="#form.cc_expiry#">
<cfinvokeargument name="sType" value="PAYMENT">
<cfinvokeargument name="sSecurityNo" value="#form.cc_securitycode#">
</cfinvoke>
这会调用以下Web服务:
<cffunction name="purchase" access="remote" returntype="struct" hint="This function wraps calls to the purchase method of the Buyline OCX at Compass">
<cfargument name="iCustomer" required="yes" type="string">
<cfargument name="iAmountCents" required="yes" type="string">
<cfargument name="sCard" required="yes" type="string">
<cfargument name="sExpiry" required="yes" type="string" hint="Format yyyymm">
<cfargument name="sType" required="yes" type="string">
<cfargument name="sSecurityNo" required="yes" type="string">
<cfargument name="sMerchant" required="no" default="F" type="string">
<cfargument name="sBuylineUser" required="no" default="FreenetWeb" type="string">
<cfscript>
var Status = "";
var StatusText = "";
var ResponseSequence = "";
var ResponseCode = "";
var ResponseText = "";
var stReturn = StructNew();
</cfscript>
<cftry>
<cfobject type="COM" action="Create" name="oBuyline" class="ctlBuyline.Buyline">
<cfscript>
// Create an instance of the OCX
oBuyline.Server = variables.sBuylineServer;
oBuyline.RemotePort = variables.nBuylineRemoteport;
oBuyline.UserName = variables.sBuylineUsername;
oBuyline.Password = variables.sBuylinePassword;
oBuyline.Timeout = variables.sBuylineTimeout;
</cfscript>
<cfscript>
// calling the purchase method, call does not contain the sSBank argument
Status = oBuyline.Purchase(arguments.sMerchant,arguments.iCustomer,arguments.iAmountCents,arguments.sCard,arguments.sExpiry,arguments.sBuylineUser,arguments.sType,0,arguments.sSecurityNo);
switch(Status)
{
case "0":
StatusText = oBuyline.ResponseText;
break;
case "1":
StatusText = "Successful transaction";
break;
case "2":
StatusText = oBuyline.ResponseText;
break;
default:
StatusText = "CAPS: Unknown issue with communicating with Buyline";
}
// response from the purchase method
ResponseSequence = oBuyline.Sequence;
ResponseCode = oBuyline.ResponseCode;
if (ResponseCode neq "0"){
ResponseText = "Declined (" & Replace(oBuyline.ResponseText, "ERROR~~", "") & ")";
} else {
ResponseText = "Approved";
}
// set return values
stReturn.Status = Status;
stReturn.StatusText = StatusText;
stReturn.ResponseSequence = ResponseSequence;
stReturn.ResponseCode = ResponseCode;
stReturn.ResponseText = ResponseText;
if (sMerchant eq "T") {
stReturn.MerchantId = "TEST555555";
} else {
stReturn.MerchantId = "1111111";
}
//
return stReturn;
</cfscript>
<cfcatch type="any"><!--- catch code ---></cfcatch>
</cftry>
但是,我收到以下错误:
Web service operation purchase with parameters {sSecurityNo={111},iAmountCents={100.0},sExpiry={201310},sCard={1111111111111111},iCustomer={111111},sType={PAYMENT}} cannot be found.
我已经拖累谷歌跟踪了这类错误的常见嫌疑人,到目前为止无济于事。
非常感谢任何帮助。
答案 0 :(得分:2)
在通过webservice调用时,您可能需要传递函数中可用的所有参数,但是如果您想要作为可选项传递,则需要告诉ColdFusion省略它只是添加属性omit =“true” 见下文
<cfinvoke webservice="#application.capsRemote#card.cfc?wsdl" method="purchase" returnVariable="retpurchase" refreshwsdl="true">
<cfinvokeargument name="iCustomer" value="#session.user.customerCode#">
<cfinvokeargument name="iAmountCents" value="#form.cc_amount*100#">
<cfinvokeargument name="sCard" value="#form.cc_number#">
<cfinvokeargument name="sExpiry" value="#form.cc_expiry#">
<cfinvokeargument name="sType" value="PAYMENT">
<cfinvokeargument name="sSecurityNo" value="#form.cc_securitycode#">
<cfinvokeargument name="sMerchant" value="" omit="true">
<cfinvokeargument name="sBuylineUser" value="" omit="true">
</cfinvoke>
答案 1 :(得分:0)
我记得我创建Web服务的时候,每当我更改底层代码时,都不会再通过java创建存根。因此,您调用的Web服务实际上不会在服务器端刷新。这真的很奇怪。即使我输入refreshWSDL = true,它也无法识别更改。您可能想尝试重新启动cf服务器。这可能有所帮助。