2011-10-20 2 views
0

그래서이 API의 제작자는 제 코드를 명확하게 기능적으로 표시하고 있습니다. 문제는 REST API가 PI 또는 QS를 사용하는 한 제대로 작동한다는 것입니다. REST 요청과 함께 전송되는 XML 문서를 요구하는 고급 기능을 사용하려고하면 실행시 false가 반환됩니다. 다음과 같이POST에서 REST API를 사용하고 PHP에서 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> 
       [email protected] 
      </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); 
?> 

출력은 같습니다

은 API 문서에서 촬영
string(84) "*tokenkey*" 
string(615) " 
<?xml version="1.0" encoding="utf-8"?> 
<synchroMember> 
    <memberUID> 
     EMAIL 
    </memberUID> 
    <dynContent> 
     <entry> 
      <key> 
       EMAIL 
      </key> 
      <value> 
       [email protected] 
      </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) 

: 나는 문제가 발견

***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> 
+0

"PI"? "QS"? 나는 따라하지 않는다. 이 API는 무엇입니까? 우리는 아마 당신이 그것을 알지 못하고 어떤 문서를 가지고 도울 수 없습니다. –

+0

QS : 쿼리 문자열, PI : 경로 정보. REST가 사용되는 가장 일반적인 두 가지 방법을 설명하는 데 사용되며, QS는 get 변수를 사용하고 PI는 경로 변수를 사용합니다. API는 EmailVision이라고하는 것입니다. 편집 : 아래에서 사용하려고하는 설명서의 부분을 게시했습니다. –

답변

0

, 문제는 XML로 문서를 설명하는 헤더를 누락했다. 내가 아는 한 정상적인 REST 서버에서 문제가되어서는 안되는 것으로 받아 들여지는 유일한 데이터 형식은 XML이다. 이 문제에 도움이되지 않은 것은 회사가 소프트웨어 개발에 상당히 무서운 것입니다. 따라서 시스템이 오류로 응답하지 않을 경우 사람이 읽을 수 없으며 회사에서 오류 코드 목록을 제공하지 않습니다.

관련 문제