REST API с POST и XML в PHP возвращает false, если не должно? - PullRequest
0 голосов
/ 20 октября 2011

Таким образом, создатели этого API четко обозначили мой код как функциональный, видя, как они сделали эту чертову штуку.Дело в том, что REST API работает нормально, пока я использую только PI или QS.Когда я пытаюсь использовать более продвинутые функции, требующие отправки XML-документа с запросом REST, он просто возвращает false при выполнении.

<?php

$objCurlToken = curl_init();
$strUrlToken = "https://servername/apimember/services/rest/connect/open/username/password/token";
$arrCurlOptions1 = array(
    CURLOPT_URL => $strUrlToken,
    CURLOPT_RETURNTRANSFER => true
);
curl_setopt_array($objCurlToken, $arrCurlOptions1);
$strXMLToken = curl_exec($objCurlToken);
$objXML = simplexml_load_string($strXMLToken);
curl_close($objCurlToken);


$strXMLPost = '
<?xml version="1.0" encoding="utf-8"?>
<synchroMember>
    <memberUID>
        EMAIL
    </memberUID>
    <dynContent>
        <entry>
            <key>
                EMAIL
            </key>
            <value>
                klaus@lagerbrau.de
            </value>
        </entry>
        <entry>
            <key>
                FIRSTNAME
            </key>
            <value>
                KLAUS LAGER
            </value>
        </entry>
        <entry>
            <key>
                EMVADMIN1
            </key>
            <value>
                This is klaus lager, the test subject
            </value>
        </entry>
    </dynContent>
</synchroMember>
';
$objCurlProbe = curl_init();
$strUrlProbe = "https://servername/apimember/services/rest/member/insertOrUpdateMember/" . $objXML->result . "";
$arrCurlOptions2 = array(
    CURLOPT_URL => $strUrlProbe,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => $strXMLPost
);
curl_setopt_array($objCurlProbe, $arrCurlOptions2);
$strCurlXMLResult = curl_exec($objCurlProbe);
echo "<pre>";
var_dump(htmlentities($objXML->result));
var_dump(htmlentities($strXMLPost));
var_dump(htmlentities($strCurlXMLResult));
curl_close($objCurlProbe);
$objXMLResult = simplexml_load_string($strCurlXMLResult);
var_dump($objXMLResult);
?>

Вывод выглядит следующим образом:

string(84) "*tokenkey*"
string(615) "
<?xml version="1.0" encoding="utf-8"?>
<synchroMember>
    <memberUID>
        EMAIL
    </memberUID>
    <dynContent>
        <entry>
            <key>
                EMAIL
            </key>
            <value>
                klaus@lagerbrau.de
            </value>
        </entry>
        <entry>
            <key>
                FIRSTNAME
            </key>
            <value>
                KLAUS LAGER
            </value>
        </entry>
        <entry>
            <key>
                EMVADMIN1
            </key>
            <value>
                This is klaus lager, the test subject
            </value>
        </entry>
    </dynContent>
</synchroMember>
"
string(0) ""
bool(false)

Взято из документации API:

***Insert or Update Member Data***
This method searches a specified column of the Member table for a particular value used to identify a member
in order to update the member's data. If the member is not found, a new member is created. Any criteria can
be used to find the member including one of the fields to be updated.
The memberUID attribute is used to specify the key and value used as search criteria. The dynContent attribute
should only contain the values to be updated.
**insertOrUpdateMember**
***Input***
https://{server}/apimember/services/rest/member/insertOrUpdateMember/{token}
<?xml version="1.0" encoding="utf-8"?>
<synchroMember>
<memberUID>
{fieldNameA},
{fieldNameB}
</memberUID>
<dynContent>
<entry>
<key>>
{fieldNameA}
</key>
<value>
{fieldValueA}
</value>
</entry>
<entry>
<key>
{fieldNameB}
</key>
<value>
{fieldValueB}
</value>
</entry>
<entry>
<key>
{fieldNameC}
</key>
<value>
{fieldValueC}
</value>
</entry>
</dynContent>
</synchroMember>

1 Ответ

0 голосов
/ 16 декабря 2011

Я нашел проблему, проблема была в отсутствующем заголовке, описывающем документ как XML.Насколько я знаю, это не должно быть проблемой на обычных серверах REST, поскольку единственной принятой формой данных является XML.Что не помогло, так это то, что компания довольно ужасна в разработке программного обеспечения, поэтому система никогда не отвечает ошибками, и если это так, они не читаются человеком, и компания не предоставляет список кодов ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...