【问题标题】:SOAP Request works with Postman, not in PHPSOAP 请求适用于 Postman,而不是 PHP
【发布时间】:2019-04-01 14:20:24
【问题描述】:

我正在尝试调用斯洛伐克邮局通过 SOAP 提供的函数。

他们在https://mojezasielky.posta.sk/integration/webServices/api?wsdl 上发布了他们的 WSDL

我已经注册并通过创建通过 Postman 发送的 XML 成功使用了他们的服务。虽然我在使它在 PHP 中工作时遇到了问题 - 它总是返回一个错误,指出找不到用户,这没有意义(错误是 SOAP-ENV:Server user_not_found)。

在 php 中我试图这样称呼它(不起作用):

$params = array(
    'apiKey' => "123abc",
    'userId' => "abc123",
    'EPH' => $ephString // the long XML specified later in the question. I know I should use objects, this is just for testing purposes

);
try {
    $wsdl = 'https://mojezasielky.posta.sk/integration/webServices/api';

    $client = new SoapClient($wsdl, $params);
    $requestResponse = ($client->__soapCall("importSheet", $params));
    echo $requestResponse;
} catch (SoapFault $exception) {
    echo $exception;
}

这是我的 XML 请求(不要介意 cmets,它只是解释了具体的值是什么)

<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
    <Body>
        <importSheetRequest xmlns="http://mojezasielky.posta.sk/api">
            <auth>
                <userId>idOfUserAcc</userId>
                <apiKey>theSuperSecretAPiKey</apiKey>
            </auth>
            <EPH>
               <InfoEPH>
                  <Mena>EUR</Mena>
                  <TypEPH>1</TypEPH> <!-- 1 = EPH - vzdy sa zadava len cislo 1 pri podaji -->
                  <PocetZasielok>1</PocetZasielok> <!-- Tu tiez necham cislo 1, vzdy budem po jednom podavat-->
                  <DruhZasielky>1</DruhZasielky> <!-- 1 doporuceny, 2 poisteny, 8 expres kurier, 15 easy express 1, 16 easy express 10, pozor, pre nemecko nesmie byt poisteny! -->
                  <Odosielatel>
                     <OdosielatelID />
                     <Meno>Name Surname</Meno>
                     <Organizacia>Company s.r.o.</Organizacia>
                     <Ulica>Narodna 1</Ulica>
                     <Mesto>Bratislava</Mesto>
                     <PSC>85101</PSC>
                     <Krajina>SK</Krajina>
                     <Email>me@notyou.com</Email>
                  </Odosielatel>
               </InfoEPH>
               <Zasielky>
                  <Zasielka>
                     <Adresat>
                        <Meno>zahranicie test bez cislo uctu</Meno>
                        <Organizacia /> <!-- povinna len ak je vyplnene meno + moze ostat prazdna -->
                        <Ulica>cokolvek</Ulica>
                        <Mesto>hocico</Mesto>
                        <PSC>10000</PSC>
                        <Krajina>DE</Krajina> <!-- 2znakovy iso kod -->
                     </Adresat>
                     <Info>
                        <CenaPoistneho>100</CenaPoistneho>
                     </Info>
                  </Zasielka>
               </Zasielky>
            </EPH>
        </importSheetRequest>
    </Body>
</Envelope>

Postman 标头配置(适用于指定的 XML)

我应该如何使用 PHPs soap 客户端使其工作?

【问题讨论】:

  • 您的SoapClient 语法似乎是正确的;我会调查您遇到的错误:Server user_not_found。确保您的登录信息正确?
  • 如果您查看您的 XML,它显然与您在 $params 数组中传递的数据不一致。首先,您的auth 参数在哪里?
  • Samuel 我确信登录信息是正确的,因为它适用于 Postman,而不是 PHP。 @miken32 起初看起来你是对的,但是当我编辑代码以添加 auth 参数时,它只是抛出了另一个错误“SOAP-ERROR: Encoding: object has no 'auth' property”,这真的很奇怪

标签: php soap wsdl postman


【解决方案1】:

您的参数有误(auth 节点应包含userId 和apiKey)。请尝试以下操作:

$wsdl = 'https://mojezasielky.posta.sk/integration/webServices/api?wsdl';
$args = [
    'auth' => [
        'userId' => 'YOUR_SECRET_ID',
        'apiKey' => 'YOUR_SECRET_KEY',
    ],
    'EPH' => $ephString,
    'contract' => false,
];
$soap = new SoapClient($wsdl);
$response = $soap->importSheet($args);

另请参阅EPH API manual 和 technical specification for eHarok。

【讨论】:

  • 很抱歉回答这个老问题,但这是一个非常本地化的问题。目前我正在生成 XML 并将其手动上传到 EPH 网络上。整个下午我都在努力让它与 API 一起工作,但我失败了。 pastebin.com/raw/ACUf6LuZ 。此代码的输出:REQUEST: 50CF838045753E060A000CDBD34DDF5303B09165F021731FDD018995D1516262EBC2533232017C0F63E82045true REQUEST: 5FFDFD1BBFF734D870A316B9 所以我想我在 EPH't 上找到了成功的表。也许有人知道这里发生了什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-30
  • 1970-01-01
  • 2022-01-21
  • 2017-08-06
  • 1970-01-01
  • 1970-01-01
  • 2020-07-19
相关资源
最近更新 更多