【发布时间】:2011-10-20 08:27:29
【问题描述】:
因此,这个 API 的制造者清楚地将我的代码标记为功能,因为他们制造了该死的东西。问题是,只要我单独使用 PI 或 QS,REST API 就可以正常工作。当我尝试使用需要通过 REST 请求发送 XML 文档的更高级功能时,它只会在执行时返回 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>
【问题讨论】:
-
“PI”? “QS”?我不跟。这是什么API?如果不知道这一点,并且有一些文档,我们可能无法为您提供帮助。
-
QS:Query String,PI:Path Info,用来描述REST最常用的两种使用方式,QS使用get变量,PI使用路径变量。该 API 用于称为 EmailVision 的东西。编辑:在下面发布了我尝试使用的文档部分。