【问题标题】:How to make a query on a SOAP webservice using PHP?如何使用 PHP 对 SOAP Web 服务进行查询?
【发布时间】:2023-04-10 15:31:02
【问题描述】:

我需要使用 PHP 对 SOAP 网络服务进行查询,但我需要发送此“身份验证”。我该如何提出这个请求?

网络服务的网址:http://externo.detran.es.gov.br/WSBioHMLG/Monitoramento/WsAulasPraticas.svc?wsdl

文档:

//Assinatura
ConsultarSituacaoInstrutorPraticoRetorno ConsultaSituacaoInstrutorPratico( 
ConsultarSituacaoInstrutorPraticoEnvio model, UsuarioModel usuario)

Parâmetros de Envio
Classe com as informações para pesquisa da situação do Instrutor Prático 
class ConsultarSituacaoInstrutorPraticoEnvio : ConsultarSituacaoDadosEnvio
{
    CPF do instrutor/ Obrigatório 
    decimal CpfInstrutor
}
Classe base de dados de pesquisa de situação
class ConsultarSituacaoDadosEnvio : MonitoramentoAulaPraticaBase
{
    //CNPJ do CFC / Obrigatório 
    decimal CnpjCfc
}
class MonitoramentoAulaPraticaBase
{
    //Login e senha da empresa de monitoramento credenciada. 
    //Consiste de um campo de login e senha / Obrigatório 
    MonitAulaPraticaHeader UsuarioProdest
}

我调用方法:

$requestParams = array(         
    'model' => array(
        'Categoria' => "A",
        'CpfInstrutor' => 123456789
    ),
    'usuario' => array(
        'Login' => "User",
        'Senha' => "******"         
    )
);
                    
$result = $client->__soapCall('ConsultaSituacaoInstrutorPratico', array($requestParams));

但返回“登录名/密码丢失”。

Ps.:对不起我的英文,我用了翻译器。

附言。 2:我正在使用 PHP SOAPClient。

我有疑问的地方:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://schemas.datacontract.org/2004/07/Biometria.MonitoramentoAulasPraticas" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/Biometria.MonitoramentoAulasPraticas">
<xs:import namespace="http://schemas.datacontract.org/2004/07/System.ComponentModel"/>
<xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/>
<xs:complexType name="MonitAulaPraticaHeader">
    <xs:sequence>
        <xs:element xmlns:q1="http://schemas.datacontract.org/2004/07/System.ComponentModel" name="PropertyChanged" nillable="true" type="q1:PropertyChangedEventHandler"/>
        <xs:element xmlns:q2="http://schemas.microsoft.com/2003/10/Serialization/Arrays" name="anyAttrField" nillable="true" type="q2:ArrayOfArrayOfanyType"/>
            <xs:element name="loginField" nillable="true" type="xs:string"/>
            <xs:element name="senhaField" nillable="true" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>
    <xs:element name="MonitAulaPraticaHeader" nillable="true" type="tns:MonitAulaPraticaHeader"/>
</xs:schema>

【问题讨论】:

  • 使用PHP SoapClient,您有两个选项可以连接到服务,使用.wsdl formatted xml 文件 - 此xml 似乎不是wsdl - 或使用URL。您可以在 PHP 手册中找到示例。
  • @Derenir 谢谢。我编辑了问题。
  • 好吧,您的 wsdl 文件位于远程源中,但我仍然不明白您尝试使用您发布的这个 xml 来实现什么。您可以使用用户名/密码在 soap 中进行身份验证。
  • @Derenir 我用更多信息编辑了这个问题。

标签: php xml soap wsdl


【解决方案1】:

首先你必须创建客户端连接:

$wsdl = "http://externo.detran.es.gov.br/WSBioHMLG/Monitoramento/WsAulasPraticas.svc?wsdl";
//  SOAP connector config
$soap_config = array(
    'soap_version'      => SOAP_1_1,
    'authentication'    => SOAP_AUTHENTICATION_BASIC,
    'login'             => 'username',
    'password'          => 'password',
    
);

//  Connect to soap interface
$soap = new SoapClient($wsdl, $soap_config);

然后就可以调用SOAP方法了:

$requestParams = array(
    'model' => array(
        'Categoria' => "A",
        'CpfInstrutor' => 123456789
    ),
    'usuario' => array(
        'Login' => "User",
        'Senha' => "******"
    )
);

$result = $soap->ConsultaSituacaoInstrutorPratico($requestParams);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    相关资源
    最近更新 更多