肥皂请求在SoapUI中有效,但在Wordpress插件中无效

时间:2019-02-09 10:39:11

标签: php wordpress soap soapui soap-client

我一直在寻找解决问题的方法,但无济于事。我正在尝试使用以下命令通过Wordpress插件发送肥皂请求:

function soapRequest($soapUsername, $soapNonce, $soapDateTime, $soapPassword) {

$wsdl = 'http://www.beautyfort.com/api/wsdl/v2/wsdl.wsdl';
$trace = true;
$exceptions = false;

$client = new SoapClient($wsdl, array('trace' => $trace, 'exceptions' => $exceptions));

// Must be a stdClass (and not an array)
$auth = new stdClass();
$auth->Username = $soapUsername;
$auth->Nonce = $soapNonce;
$auth->Created = $soapDateTime;
$auth->Password = $soapPassword;

$header = new SoapHeader('http://www.beautyfort.com/api/', 'AuthHeader', $auth);

$client->__setSoapHeaders($header);

$xml_array['TestMode'] = 'true';
$xml_array['StockFileFormat'] = 'JSON';
$xml_array['SortBy'] = 'StockCode';

try {
    $response = $client->GetStockFile($xml_array);
}

catch (Exception $e) {
    log_me("Error!");
    log_me($e -> getMessage());
    log_me('Last response: '. $client->__getLastResponse());
}

log_me('Last request: '. $client->__getLastRequest());
log_me($response);
}

这将产生以下请求:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:ns1="http://www.beautyfort.com/api/">
    <SOAP-ENV:Header>
        <ns1:AuthHeader>
            <ns1:Username>joetest</ns1:Username>
            <ns1:Nonce>htflFfIKM4</ns1:Nonce>
            <ns1:Created>2019-02-09T10:13:51.000Z</ns1:Created>
            <ns1:Password>NGFjYTJiNzJmOWY2MzBmY2M2MjJkNjg1MDgyMWRjMzQxOGY1YTNjYQ==</ns1:Password>
        </ns1:AuthHeader>
    </SOAP-ENV:Header>
    <SOAP-ENV:Body>
        <ns1:GetStockFileRequest>
            <ns1:TestMode>true</ns1:TestMode>
            <ns1:StockFileFormat>JSON</ns1:StockFileFormat>
            <ns1:SortBy>StockCode</ns1:SortBy>
        </ns1:GetStockFileRequest>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

我收到无效的凭证错误。我也在SoupUI中进行测试,以下请求有效:

<soapenv:Envelope
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:api="http://www.beautyfort.com/api/">
    <soapenv:Header>
        <api:AuthHeader>
            <api:Username>joetest</api:Username>
            <api:Nonce>tJrsRlQt6i</api:Nonce>
            <api:Created>2019-02-06T23:34:11.000Z</api:Created>
            <api:Password>ZTBhMmE5OGY4YTNlZWIzZTE0ZTc2ZjZiZDBhM2RhMjJmNzAxNzYwZA==</api:Password>
        </api:AuthHeader>
    </soapenv:Header>
    <soapenv:Body>
        <api:GetStockFileRequest>
            <api:TestMode>true</api:TestMode>
            <api:StockFileFormat>JSON</api:StockFileFormat>
            <!--Optional:-->
            <api:FieldDelimiter>,</api:FieldDelimiter>
            <!--Optional:-->
            <api:StockFileFields>
                <!--1 or more repetitions:-->
                <api:StockFileField>StockCode</api:StockFileField>
                <api:StockFileField>Category</api:StockFileField>
                <api:StockFileField>Brand</api:StockFileField>
                <api:StockFileField>Collection</api:StockFileField>
                <api:StockFileField>Category</api:StockFileField>
            </api:StockFileFields>
            <api:SortBy>StockCode</api:SortBy>
        </api:GetStockFileRequest>
    </soapenv:Body>
</soapenv:Envelope>

现在,我可以看到的唯一区别(除可选字段之外)是名称空间的名称以及请求顶部使用Xml标记。这两个都没关系吧?非常感谢您的帮助,因为多年来我一直在挠头。

提前谢谢!

1 个答案:

答案 0 :(得分:0)

您的完美选择只需要设置UTC时区和秘密格式,如下所示:

base64 encoded(sha1(Nonce . Created . Secret))