ColdFusion11 SOAP 操作错误
ColdFusion11 SOAP Action Error
我是 SOAP 的新手,但我已经查看了所有内容,似乎无法找到答案。我认为它与 标记中的 SOAPAction 有关,但我不确定语法是什么。无论我输入什么都会产生以下错误:
由于 EndpointDispatcher 中的 ContractFilter 不匹配,无法在接收方处理带有“http://InvoiceCollector.hypur.com/PostInvoice”操作的消息。
这可能是因为合同不匹配(发送方和接收方之间的操作不匹配)或发送方和接收方之间 binding/security 不匹配。检查发送方和接收方是否具有相同的合同和相同的绑定(包括安全要求,例如消息、传输、None)。
我的 SOAP 主体如下所示:
<cfsavecontent variable="SOAPBody">
<cfoutput>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/" xmlns:dat="http://schemas.datacontract.org/2004/07/DataTransferObjects">
<soapenv:Header/>
<soapenv:Body>
<tem:PostInvoice>
<tem:PoSToken>"XXXXX"</tem:PoSToken>
<tem:MerchantToken>"XXXXX"</tem:MerchantToken>
<tem:Invoice>
<dat:Cash>1</dat:Cash>
<dat:Change>1</dat:Change>
<dat:CreatedBy>"Me"</dat:CreatedBy>
<dat:CurrencyCode>"usd"</dat:CurrencyCode>
<dat:DiscountAmount>1</dat:DiscountAmount>
<dat:DiscountPercent>1</dat:DiscountPercent>
<dat:DueDate>2015-08-13T12:00:00</dat:DueDate>
<dat:InvoiceDate>2015-08-13T12:00:00</dat:InvoiceDate>
<dat:InvoiceItems>
<dat:InvoiceItemDTO>
<dat:Description>"Desc"</dat:Description>
<dat:DiscountAmount>1</dat:DiscountAmount>
<dat:DiscountPercent>1</dat:DiscountPercent>
<dat:Name>"Adam"</dat:Name>
<dat:Quantity>1</dat:Quantity>
<dat:Unit>"lb"</dat:Unit>
<dat:UnitPrice>1</dat:UnitPrice>
</dat:InvoiceItemDTO>
</dat:InvoiceItems>
<dat:InvoiceNumber>123</dat:InvoiceNumber>
<dat:InvoiceTax>1</dat:InvoiceTax>
<dat:IsTaxCalculatedAfterDiscount>false</dat:IsTaxCalculatedAfterDiscount>
<dat:MerchantMemo>"Memo"</dat:MerchantMemo>
<dat:Note>"Note"</dat:Note>
<dat:PaidDate>2015-08-13T12:00:00</dat:PaidDate>
<dat:PoSID>2</dat:PoSID>
<dat:PoSName>1</dat:PoSName>
<dat:Status>1</dat:Status>
<dat:SubTotal>1</dat:SubTotal>
<dat:TaxInclusive>1</dat:TaxInclusive>
<dat:Total>1</dat:Total>
</tem:Invoice>
</tem:PostInvoice>
</soapenv:Body>
</soapenv:Envelope>
</cfoutput>
</cfsavecontent>
我已经在 soapUI 中测试过,它与网站连接但有奇怪的问题(它会抛出任何 值的枚举错误,但如果我将其注释掉然后它会连接并且 return s 无效 PoSToken 和 MerchantTokens 的错误消息,但在我正确输入这些信息后,它 return 根本没有任何数据。)
然后我使用以下代码获取预期信息:
<cfhttp url="https://devapi.hypur.com/InvoiceCollector/InvoiceCollector.svc?wsdl" method="post" result="httpResponse">
<cfhttpparam type="header" name="SOAPAction" value="http://InvoiceCollector.hypur.com/PostInvoice"/>
<cfhttpparam type="header" name="accept-encoding" value="no-compression"/>
<cfhttpparam type="xml" value="#trim(SOAPBody)#" />
<cfdump var="#soapResponse#">
我在
中输入什么值并不重要
<cfhttpparam type="header" name="SOAPAction" value="http://InvoiceCollector.hypur.com/PostInvoice"/>
标记它总是抛出相同的错误。
如有任何帮助,我们将不胜感激。提前谢谢你。
因此,我最终使用了 soapUI 中提供的 SOAPAction(它位于传出 xml 的 Raw HTML 选项卡下)并将 Status 值更改为 Paid 并使其正常工作。
所以 ColdFusion 看起来像这样:
<cfhttp url="https://devapi.hypur.com/InvoiceCollector/InvoiceCollector.svc" method="post" result="httpResponse">
<cfhttpparam type="header" name="SOAPAction" value="http://tempuri.org/IInvoiceCollector/PostInvoice"/>
<cfhttpparam type="xml" value="#trim(SOAPBody)#" />
以防其他人遇到这个问题。
我是 SOAP 的新手,但我已经查看了所有内容,似乎无法找到答案。我认为它与
由于 EndpointDispatcher 中的 ContractFilter 不匹配,无法在接收方处理带有“http://InvoiceCollector.hypur.com/PostInvoice”操作的消息。
这可能是因为合同不匹配(发送方和接收方之间的操作不匹配)或发送方和接收方之间 binding/security 不匹配。检查发送方和接收方是否具有相同的合同和相同的绑定(包括安全要求,例如消息、传输、None)。
我的 SOAP 主体如下所示:
<cfsavecontent variable="SOAPBody">
<cfoutput>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/" xmlns:dat="http://schemas.datacontract.org/2004/07/DataTransferObjects">
<soapenv:Header/>
<soapenv:Body>
<tem:PostInvoice>
<tem:PoSToken>"XXXXX"</tem:PoSToken>
<tem:MerchantToken>"XXXXX"</tem:MerchantToken>
<tem:Invoice>
<dat:Cash>1</dat:Cash>
<dat:Change>1</dat:Change>
<dat:CreatedBy>"Me"</dat:CreatedBy>
<dat:CurrencyCode>"usd"</dat:CurrencyCode>
<dat:DiscountAmount>1</dat:DiscountAmount>
<dat:DiscountPercent>1</dat:DiscountPercent>
<dat:DueDate>2015-08-13T12:00:00</dat:DueDate>
<dat:InvoiceDate>2015-08-13T12:00:00</dat:InvoiceDate>
<dat:InvoiceItems>
<dat:InvoiceItemDTO>
<dat:Description>"Desc"</dat:Description>
<dat:DiscountAmount>1</dat:DiscountAmount>
<dat:DiscountPercent>1</dat:DiscountPercent>
<dat:Name>"Adam"</dat:Name>
<dat:Quantity>1</dat:Quantity>
<dat:Unit>"lb"</dat:Unit>
<dat:UnitPrice>1</dat:UnitPrice>
</dat:InvoiceItemDTO>
</dat:InvoiceItems>
<dat:InvoiceNumber>123</dat:InvoiceNumber>
<dat:InvoiceTax>1</dat:InvoiceTax>
<dat:IsTaxCalculatedAfterDiscount>false</dat:IsTaxCalculatedAfterDiscount>
<dat:MerchantMemo>"Memo"</dat:MerchantMemo>
<dat:Note>"Note"</dat:Note>
<dat:PaidDate>2015-08-13T12:00:00</dat:PaidDate>
<dat:PoSID>2</dat:PoSID>
<dat:PoSName>1</dat:PoSName>
<dat:Status>1</dat:Status>
<dat:SubTotal>1</dat:SubTotal>
<dat:TaxInclusive>1</dat:TaxInclusive>
<dat:Total>1</dat:Total>
</tem:Invoice>
</tem:PostInvoice>
</soapenv:Body>
</soapenv:Envelope>
</cfoutput>
</cfsavecontent>
我已经在 soapUI 中测试过,它与网站连接但有奇怪的问题(它会抛出任何
然后我使用以下代码获取预期信息:
<cfhttp url="https://devapi.hypur.com/InvoiceCollector/InvoiceCollector.svc?wsdl" method="post" result="httpResponse">
<cfhttpparam type="header" name="SOAPAction" value="http://InvoiceCollector.hypur.com/PostInvoice"/>
<cfhttpparam type="header" name="accept-encoding" value="no-compression"/>
<cfhttpparam type="xml" value="#trim(SOAPBody)#" />
<cfdump var="#soapResponse#">
我在
中输入什么值并不重要<cfhttpparam type="header" name="SOAPAction" value="http://InvoiceCollector.hypur.com/PostInvoice"/>
标记它总是抛出相同的错误。
如有任何帮助,我们将不胜感激。提前谢谢你。
因此,我最终使用了 soapUI 中提供的 SOAPAction(它位于传出 xml 的 Raw HTML 选项卡下)并将 Status 值更改为 Paid 并使其正常工作。
所以 ColdFusion 看起来像这样:
<cfhttp url="https://devapi.hypur.com/InvoiceCollector/InvoiceCollector.svc" method="post" result="httpResponse">
<cfhttpparam type="header" name="SOAPAction" value="http://tempuri.org/IInvoiceCollector/PostInvoice"/>
<cfhttpparam type="xml" value="#trim(SOAPBody)#" />
以防其他人遇到这个问题。