2013-08-04 4 views
0

Мне нужно автоматически обновить значение prestashop-> clients-> customer-> id_default_group с помощью PHP через веб-сервис Prestashop. Сценарий знает новое значение и выполняется до/при загрузке страницы.Prestashop 1.5 Webservice Обновление клиента id_default_group PHP

Я могу получить запись клиента, или я могу получить только «id_default_group» записи клиента, но у меня возникают проблемы при попытке изменить значение записи и обновление веб-службы. Я возвращаю «HTTP/1.1 400 Bad Request».

Похоже, что я неправильно пытаюсь обновить xml или объект.

Было бы предпочтительнее делать все это, только получая и обновляя «id_default_group» и не получая полную запись клиента.

у меня есть:

define('DEBUG', true); 
define('PS_SHOP_PATH', 'http://www.site.com/'); 
define('PS_WS_AUTH_KEY', 'yuyiu'); 
require_once('../PSWebServiceLibrary.php'); 

// First : We always get the customer's list or a specific one 
try 
{ 
    $webService = new PrestaShopWebservice(PS_SHOP_PATH, PS_WS_AUTH_KEY, DEBUG); 
    $opt = array('resource' => 'customers'); // Full customer record 
    //$opt = array('resource'=>'customers','display'=> '[id_default_group]','filter[id]' => '['.$_SESSION["iemIdCustomer"].']'); // Customer id_default_group value 
    if (isset($_SESSION['iemIdCustomer'])){ 
     $opt['id'] = $_SESSION['iemIdCustomer']; 
    } 

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

    // The elements from children 
    $resources = $xml->children()->children(); 
    // $resources = $xml->children()->children()->children(); // If just getting id_default_group 
} 
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'; 
} 

// Second : We update the data and send it to the web service 
if (isset($_SESSION['iemIdCustomer'])){ 

    // Update XML with new values 
    $xml->customers->customer->id_default_group = 4; 
    //$resources = $xml->children()->children()->children(); 

    // And call the web service 
    try 
    { 
     $opt = array('resource' => 'customers'); 
     //$opt = array('resource'=>'customers','display'=> '[id_default_group]','filter[id]' => '['.$_SESSION["iemIdCustomer"].']'); 
     $opt['putXml'] = $xml->asXML(); 
     $opt['id'] = $_SESSION['iemIdCustomer']; 
     //$opt['display'] = 'id_default_group'; 
     $xml = $webService->edit($opt); 
     // if WebService succeeds 
     echo "Successfully updated."; 
    } 
    catch (PrestaShopWebserviceException $ex) 
    { 
     // 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(); 
    } 
} 

Это является основным для тех, кто в курсе, так что я надеюсь, что вы можете помочь.

Спасибо заранее, Lance

ответ

0

я думаю, что у вас есть эта ошибка, потому что вы редактировали плохой узел;) попробовать с

$xml->customer->id_default_group = 4; 

Это должно быть хорошо :)

+0

Благодарим за предложение. Я исправил проблему, прежде чем увидел, что она пропустила уведомление по электронной почте. Исправлено с помощью $ xml-> children() -> children() -> id_default_group = 4; – IeM

1

Ok Я иду на работу.

Следующая строка, кажется, сделать трюк:

$xml->children()->children()->id_default_group = 4; 

Следит является линия с остальной частью кода, чтобы сделать задачу.

// Get the customer's id_default_group 
try 
{ 
    $webService = new PrestaShopWebservice(PS_SHOP_PATH, PS_WS_AUTH_KEY, DEBUG); 

    $opt = array('resource' => 'customers'); 
    $opt['id'] = $_SESSION["iemIdCustomer"]; 
    $xml = $webService->get($opt); 

    // Get the elements from children of customer 
    $resources = $xml->children()->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'; 
} 

// Update the data and send it to the web service 

    // Update XML with new value 
    $xml->children()->children()->id_default_group = 4; 

    // And call the web service 
    try 
    { 
     $opt = array('resource' => 'customers'); 
     //$opt = array('resource'=>'customers','display'=> '[id_default_group]','filter[id]' => '['.$_SESSION["iemIdCustomer"].']'); 
     $opt['putXml'] = $xml->asXML(); 
     $opt['id'] = $_SESSION['iemIdCustomer']; 
     //$opt['display'] = 'id_default_group'; 
     $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(); 
    } 

Надеюсь, что это помогает кому-то.

Смежные вопросы