I have the following web service call:
<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>
This calls the following web service:
<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>
However, I get the following erro开发者_开发问答r:
Web service operation purchase with parameters {sSecurityNo={111},iAmountCents={100.0},sExpiry={201310},sCard={1111111111111111},iCustomer={111111},sType={PAYMENT}} cannot be found.
I've trolled google and followed up the usual suspects for this type of error, to no avail so far.
Any help hugely appreciated.
While calling through webservice you may need to pass all arguments available in function but in case you want to pass as optional you need to tell ColdFusion to omit it just adding attributes omit= "true" See below
<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>
I remember a time when I was creating Web services, whenever I would change the underlying code, the stub would not be created again though java. So your web service being called would not actually refresh on the server side. It was really weird. Even though I was putting in refreshWSDL=true, it wouldn't recognize the change. You might want to try a restart of the cf server. That might help.
精彩评论