douxiong4250 2018-05-29 14:13
浏览 67
已采纳

如何从PHP调用SoapServer

So far I haven't been able to successfully pass the parameters into the request via the PHP SoapClient.

<?php

class MockSoapClient extends \SoapClient
{
    public function __doRequest($request, $location, $action, $version, $one_way = 0)
    {
        echo $request.PHP_EOL;

        return '';
    }
}

$client = new MockSoapClient(
    'http://www.saiasecure.com/webservice/shipment/soap.asmx?wsdl',
    [
        'trace' => 1,
        'soap_version' => SOAP_1_1,
    ]
);

$client->__soapCall(
    'GetByProNumber',
    [
        'parameters' => [
            'UserID' => 'username',
            'Password' => 'password',
            'TestMode' => 'Y',
            'ProNumber' => '123',
        ]
    ]
);

Running with: php test.php | xmllint -format -

Getting the output:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.SaiaSecure.com/WebService/Shipment">
  <SOAP-ENV:Body>
    <ns1:GetByProNumber/>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Expecting output to contain some form of the parameters within the GetByProNumber element.

Version of PHP: 7.0.30 (Ubuntu 16.04)

There are "not a bug" reports that closely mimic the issue, but I'm not able to get insight into what to change to get this working. https://bugs.php.net/bug.php?id=33366

Anyone have any insights or tips?

  • 写回答

1条回答 默认 最新

  • doulu3808 2018-05-29 14:43
    关注

    I just checked your wsdl, it seems the right parameters array should be like this:

    [
        'parameters' => [
            'request' => [
                'UserID' => 'username',
                'Password' => 'password',
                'TestMode' => 'Y',
                'ProNumber' => '123',
            ]
        ]
    ]
    

    then the output would be like this:

    <?xml version="1.0" encoding="UTF-8"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.SaiaSecure.com/WebService/Shipment"><SOAP-ENV:Body><ns1:GetByProNumber><ns1:request><ns1:UserID>username</ns1:UserID><ns1:Password>password</ns1:Password><ns1:TestMode>Y</ns1:TestMode><ns1:ProNumber>123</ns1:ProNumber></ns1:request></ns1:GetByProNumber></SOAP-ENV:Body></SOAP-ENV:Envelope>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line