PHP:无法调用外部WCF SOAP API

问题描述

我正在尝试在项目内部实现外部SOAP API。

我们在PHP 7.3中初始化了Soap-client $serviceLocation尝试了http://address.com/smsXMLWebService/SMSXMLWebService.svchttp://address.com/smsXMLWebService/SMSXMLWebService.svc/basicHttp

$this->soapClient = new SoapClient(
                $wsdlUri,[
                    'connection_timeout' => $connectionTimeout,'location'           => $serviceLocation,'soap_version'       => SOAP_1_1,'cache_wsdl'         => WSDL_CACHE_NONE,'stream_context'     => $context,'features'           => SOAP_SINGLE_ELEMENT_ARRAYS,'trace'              => true,'verify_peer'        => false,'verify_host'        => false,]
            );

引发以下异常:

Cannot process the message because the content type 'text/xml; charset=utf-8' was not the expected type 'application/soap+xml; charset=utf-8'.

如果我们在上下文中按标题设置Content-type,则结果是相同的:

$options = [];
$options['http'] = [];
$options['http']['header'] = [];
$options['http']['header'][] = 'Content-type: application/soap+xml; charset=utf-8';

$context = stream_context_create($options);

如果尝试使用'soap_version' => SOAP_1_2,则会收到以下异常:

Bad gateway

这是WSDL的代码段(我们无法在服务器中修改WSDL)

<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions name="SMSXMLWebService" targetNamespace="http://tempuri.org/"
                  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
                  xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy"
                  xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:tns="http://tempuri.org/"
                  xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract"
                  xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
                  xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex"
                  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
                  xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"
                  xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
                  xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
                  xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
                  xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
                  xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
                  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <wsp:Policy wsu:Id="WSHttpBinding_ISMSXMLWebService_policy">
        <wsp:ExactlyOne>
            <wsp:All>
                <sp:SymmetricBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
                    <wsp:Policy>
                        <sp:ProtectionToken>
                            <wsp:Policy>
                                <sp:SecureConversationToken
                                        sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
                                    <wsp:Policy>
                                        <sp:RequireDerivedKeys/>
                                        <sp:BootstrapPolicy>
                                            <wsp:Policy>
                                                <sp:SignedParts>
                                                    <sp:Body/>
                                                    <sp:Header Name="To"
                                                               Namespace="http://www.w3.org/2005/08/addressing"/>
                                                    <sp:Header Name="From"
                                                               Namespace="http://www.w3.org/2005/08/addressing"/>
                                                    <sp:Header Name="FaultTo"
                                                               Namespace="http://www.w3.org/2005/08/addressing"/>
                                                    <sp:Header Name="ReplyTo"
                                                               Namespace="http://www.w3.org/2005/08/addressing"/>
                                                    <sp:Header Name="MessageID"
                                                               Namespace="http://www.w3.org/2005/08/addressing"/>
                                                    <sp:Header Name="RelatesTo"
                                                               Namespace="http://www.w3.org/2005/08/addressing"/>
                                                    <sp:Header Name="Action"
                                                               Namespace="http://www.w3.org/2005/08/addressing"/>
                                                </sp:SignedParts>
                                                <sp:EncryptedParts>
                                                    <sp:Body/>
                                                </sp:EncryptedParts>
                                                <sp:SymmetricBinding>
                                                    <wsp:Policy>
                                                        <sp:ProtectionToken>
                                                            <wsp:Policy>
                                                                <mssp:SslContextToken
                                                                        sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient"
                                                                        xmlns:mssp="http://schemas.microsoft.com/ws/2005/07/securitypolicy">
                                                                    <wsp:Policy>
                                                                        <sp:RequireDerivedKeys/>
                                                                    </wsp:Policy>
                                                                </mssp:SslContextToken>
                                                            </wsp:Policy>
                                                        </sp:ProtectionToken>
                                                        <sp:AlgorithmSuite>
                                                            <wsp:Policy>
                                                                <sp:Basic256/>
                                                            </wsp:Policy>
                                                        </sp:AlgorithmSuite>
                                                        <sp:Layout>
                                                            <wsp:Policy>
                                                                <sp:Strict/>
                                                            </wsp:Policy>
                                                        </sp:Layout>
                                                        <sp:IncludeTimestamp/>
                                                        <sp:EncryptSignature/>
                                                        <sp:OnlySignEntireHeadersAndBody/>
                                                    </wsp:Policy>
                                                </sp:SymmetricBinding>
                                                <sp:SignedSupportingTokens>
                                                    <wsp:Policy>
                                                        <sp:UsernameToken
                                                                sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
                                                            <wsp:Policy>
                                                                <sp:WssUsernameToken10/>
                                                            </wsp:Policy>
                                                        </sp:UsernameToken>
                                                    </wsp:Policy>
                                                </sp:SignedSupportingTokens>
                                                <sp:Wss11>
                                                    <wsp:Policy/>
                                                </sp:Wss11>
                                                <sp:Trust10>
                                                    <wsp:Policy>
                                                        <sp:MustSupportIssuedTokens/>
                                                        <sp:RequireClientEntropy/>
                                                        <sp:RequireServerEntropy/>
                                                    </wsp:Policy>
                                                </sp:Trust10>
                                            </wsp:Policy>
                                        </sp:BootstrapPolicy>
                                    </wsp:Policy>
                                </sp:SecureConversationToken>
                            </wsp:Policy>
                        </sp:ProtectionToken>
                        <sp:AlgorithmSuite>
                            <wsp:Policy>
                                <sp:Basic256/>
                            </wsp:Policy>
                        </sp:AlgorithmSuite>
                        <sp:Layout>
                            <wsp:Policy>
                                <sp:Strict/>
                            </wsp:Policy>
                        </sp:Layout>
                        <sp:IncludeTimestamp/>
                        <sp:EncryptSignature/>
                        <sp:OnlySignEntireHeadersAndBody/>
                    </wsp:Policy>
                </sp:SymmetricBinding>
                <sp:Wss11 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
                    <wsp:Policy/>
                </sp:Wss11>
                <sp:Trust10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
                    <wsp:Policy>
                        <sp:MustSupportIssuedTokens/>
                        <sp:RequireClientEntropy/>
                        <sp:RequireServerEntropy/>
                    </wsp:Policy>
                </sp:Trust10>
                <wsaw:UsingAddressing/>
            </wsp:All>
        </wsp:ExactlyOne>
    </wsp:Policy>
    <wsp:Policy wsu:Id="BasicHttpBinding_ISMSXMLWebService_policy">
        <wsp:ExactlyOne>
            <wsp:All>
                <sp:TransportBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
                    <wsp:Policy>
                        <sp:TransportToken>
                            <wsp:Policy>
                                <sp:HttpsToken RequireClientCertificate="false"/>
                            </wsp:Policy>
                        </sp:TransportToken>
                        <sp:AlgorithmSuite>
                            <wsp:Policy>
                                <sp:Basic256/>
                            </wsp:Policy>
                        </sp:AlgorithmSuite>
                        <sp:Layout>
                            <wsp:Policy>
                                <sp:Lax/>
                            </wsp:Policy>
                        </sp:Layout>
                        <sp:IncludeTimestamp/>
                    </wsp:Policy>
                </sp:TransportBinding>
                <sp:SignedSupportingTokens xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
                    <wsp:Policy>
                        <sp:UsernameToken
                                sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
                            <wsp:Policy>
                                <sp:WssUsernameToken10/>
                            </wsp:Policy>
                        </sp:UsernameToken>
                    </wsp:Policy>
                </sp:SignedSupportingTokens>
                <sp:Wss10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
                    <wsp:Policy/>
                </sp:Wss10>
            </wsp:All>
        </wsp:ExactlyOne>
    </wsp:Policy>
    <wsdl:portType name="ISMSXMLWebService">
        <wsdl:operation name="G4TLogin">
            <wsdl:input wsaw:Action="http://tempuri.org/ISMSXMLWebService/G4TLogin"
                        message="tns:ISMSXMLWebService_G4TLogin_InputMessage"/>
            <wsdl:output wsaw:Action="http://tempuri.org/ISMSXMLWebService/G4TLoginResponse"
                         message="tns:ISMSXMLWebService_G4TLogin_OutputMessage"/>
        </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding name="WSHttpBinding_ISMSXMLWebService" type="tns:ISMSXMLWebService">
        <wsp:PolicyReference URI="#WSHttpBinding_ISMSXMLWebService_policy"/>
        <soap12:binding transport="http://schemas.xmlsoap.org/soap/http"/>
        <wsdl:operation name="G4TLogin">
            <soap12:operation soapAction="http://tempuri.org/ISMSXMLWebService/G4TLogin" style="document"/>
            <wsdl:input>
                <wsp:PolicyReference URI="#WSHttpBinding_ISMSXMLWebService_G4TLogin_Input_policy"/>
                <soap12:body use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <wsp:PolicyReference URI="#WSHttpBinding_ISMSXMLWebService_G4TLogin_output_policy"/>
                <soap12:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:binding name="BasicHttpBinding_ISMSXMLWebService" type="tns:ISMSXMLWebService">
        <wsp:PolicyReference URI="#BasicHttpBinding_ISMSXMLWebService_policy"/>
        <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
        <wsdl:operation name="G4TLogin">
            <soap:operation soapAction="http://tempuri.org/ISMSXMLWebService/G4TLogin" style="document"/>
            <wsdl:input>
                <soap:body use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soap:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:service name="SMSXMLWebService">
        <wsdl:port name="WSHttpBinding_ISMSXMLWebService" binding="tns:WSHttpBinding_ISMSXMLWebService">
            <soap12:address location="http://address.com/smsXMLWebService/SMSXMLWebService.svc"/>
            <wsa10:EndpointReference>
                <wsa10:Address>http://address.com/smsXMLWebService/SMSXMLWebService.svc
                </wsa10:Address>
                <Identity xmlns="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity">
                    <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
                        <X509Data>
                            <X509Certificate>
                                cert
                            </X509Certificate>
                        </X509Data>
                    </KeyInfo>
                </Identity>
            </wsa10:EndpointReference>
        </wsdl:port>
        <wsdl:port name="BasicHttpBinding_ISMSXMLWebService" binding="tns:BasicHttpBinding_ISMSXMLWebService">
            <soap:address location="https://desktop-hlm3poi/smsXMLWebService/SMSXMLWebService.svc/basicHttp"/>
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...