2016-09-13 1 views
1

고객을 PrestaShop 웹 서비스를 사용하여 업데이트하고 싶습니다. 나는 그의 이메일과 회사 이름을 기반으로 고객을 검색 한 다음 새로운 세부 사항으로 업데이트합니다. 그러나 필터를 사용하여 고객 세부 정보를 얻은 다음 업데이트하면 다음 오류가 표시되며이 문제를 해결하는 방법을 모르겠습니다.PrestaShop : 웹 서비스를 통해 고객 업데이트

오류 90 - 자원

코드를 수정할 때 ID가 필요합니다

$email=$_POST['email']; 
$oldEmail=$_POST['oldEmail']; 
$company=$_POST['company']; 

try 
{ 
    $webService = new PrestaShopWebservice(PS_SHOP_PATH, PS_WS_AUTH_KEY, DEBUG); 

    $opt = array(
     'resource' => 'customers', 
     'display' => 'full', 
     'filter[email]'=>'[email protected]',//['.$oldEmail.']', 
     'filter[company]'=>'euro'//['.$company.']' 
    ); 

    $xml = $webService->get($opt); 

    // Retrieve resource elements in a variable (table) 
    $resources = $xml->children()->children(); 
    //$opt['id'] = 17; 
    //echo $resources->id; 
} 
catch (PrestaShopWebserviceException $e){ 
    // Here we are dealing with errors 
    $trace = $e->getTrace(); 
    if ($trace[0]['args'][0] == 404) echo 'Bad ID'; 
    else if ($trace[0]['args'][0] == 401) echo 'Bad auth key'; 
    else echo 'Other error'; 
} 

$resources->email = '[email protected]'; 

// Resource definition 
$opt = array('resource' => 'customers'); 

//XML file definition 
$opt['putXml'] = $xml->asXML(); 

$opt['id'] = 'How can I put here the id retrieved from previous call?'; 

// Calling asXML() returns a string corresponding to the file 
$xml = $webService->edit($opt); 

// Second : We update the data and send it to the web service 

답변

3

official github 예에 오류가 발생했습니다.

당신의 조각이 수정 된 버전을 시도해보십시오

$email=$_POST['email']; 
$oldEmail=$_POST['oldEmail']; 
$company=$_POST['company']; 

try 
{ 
    $webService = new PrestaShopWebservice(PS_SHOP_PATH, PS_WS_AUTH_KEY, DEBUG); 

    // Filters must be an array (I'll suggest this method) 
    $filter = array(
     'email' => $oldEmail, 
     'company' => 'ACME' 
    ); 
    // I guess it's useless to use company because the e-mail it's a KEY in the database, so the correspondence 'should' be univocal. 

    $opt = array(
     'resource' => 'customers', 
     'display' => 'full', 
     'filter' => $filter 
    ); 

    $xml = $webService->get($opt); 

    // Retrieve resource elements in a variable (table) 
    $resources = $xml->children()->children(); 
} 
catch (PrestaShopWebserviceException $e){ 
    // Here we are dealing with errors 
    $trace = $e->getTrace(); 
    if ($trace[0]['args'][0] == 404) echo 'Bad ID'; 
    else if ($trace[0]['args'][0] == 401) echo 'Bad auth key'; 
    else echo 'Other error'; 
} 
// Here we retrieve the ID 
$customer_id = $resources->customer->id; 

// Here we update the e-mail 
$resources->customer->email = $email; // E.g. '[email protected]'; 

// And call the web service 
try 
{ 
    $opt = array('resource' => 'customers'); 
    $opt['putXml'] = $xml->children()->asXML(); // This is correct if you have one customer in the XML. The GitHub examples it's incomplete and you get the error 90. 
    $opt['id'] = $customer_id; 
    $xml = $webService->edit($opt); 
    // if WebService don't throw an exception the action worked well and we don't show the following message 
    echo "Successfully updated."; 
} 
catch (PrestaShopWebserviceException $ex) 
{ 
    // Here we are dealing with errors 
    $trace = $ex->getTrace(); 
    if ($trace[0]['args'][0] == 404) echo 'Bad ID'; 
    else if ($trace[0]['args'][0] == 401) echo 'Bad auth key'; 
    else echo 'Other error<br />'.$ex->getMessage(); 
} 

희망이 :)

+0

감사를하는 데 도움이! 나는 그것을 시험해 볼 것이고 여기에 결과를 게시 할 것이다! –

+0

당신을 환영합니다;) – sarcom