【问题标题】:How to C# Soap Request Convert to PHP Code?如何将 C# Soap 请求转换为 PHP 代码?
【发布时间】:2020-10-31 01:12:31
【问题描述】:

我正在尝试将 SOAP 与 PHP 集成,但给出的示例是 C#。

试了半天,估计是无法正确发送参数。

WSDL 地址:https://betatest.elogo.com.tr/webservice/PostBoxService.svc?singlewsdl

示例c#代码;

using (PostBoxService.PostBoxServiceClient svc = new PostBoxService.PostBoxServiceClient()) { 
    PostBoxService.LoginType login = new PostBoxService.LoginType();
    login.userName = “test”;
    login.passWord = “test”; 
    
    string sessionId;
        if (svc.Login(login, out sessionId)) { 
        }
}

示例 SOAP 请求

<soapenv:Envelope
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:tem="http://tempuri.org/"
    xmlns:efat="http://schemas.datacontract.org/2004/07/eFaturaWebService">
    <soapenv:Header/>
    <soapenv:Body>
        <tem:Login>
            <tem:login>
                <efat:appStr></efat:appStr>
                <efat:passWord>XXXXX</efat:passWord>
                <efat:source></efat:source>
                <efat:userName>XXXXX</efat:userName>
                <efat:version></efat:version>
            </tem:login>
        </tem:Login>
    </soapenv:Body>
</soapenv:Envelope>

我是 PHP 代码;

                $data = array(
                    'login' => array(
                        'userName'=>self::username,
                        'password'=>self::password
                    )
                );
                $client = new SoapClient(self::url,$client_params);
                $client->Login($data);

它在PHP代码中显示以下错误;


[previous:Exception:private] =>
    [faultstring] => String reference not set to an instance of a String.
Parameter name: s
    [faultcode] => a:InternalServiceFault
    [detail] => stdClass Object
        (
            [ExceptionDetail] => stdClass Object
                (
                    [HelpLink] =>
                    [InnerException] =>
                    [Message] => String reference not set to an instance of a String.
Parameter name: s
                    [StackTrace] =>    at System.Text.Encoding.GetBytes(String s)
   at CommonLib.Helper.HelperLib.ComputeMd5Hash(String input)
   at CommonLib.Documents.LoginLogout.Login(LoginType login, String& sessionID)
   at SyncInvokeLogin(Object , Object[] , Object[] )
   at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
   at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc)
   at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)
                    [Type] => System.ArgumentNullException
                )

        )

非常感谢您的帮助。

【问题讨论】:

    标签: c# php soap


    【解决方案1】:

    您的示例 SOAP 请求显示密码键是“passWord”(注意大写 W),但在您的 PHP 中您发送“密码”。所以 PHP 代码没有什么问题,除了数据数组应该是:

                $data = array(
                    'login' => array(
                        'userName'=>self::username,
                        'passWord'=>self::password
                    )
                );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-25
      • 2020-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-18
      相关资源
      最近更新 更多