Jump to content

Recommended Posts

Olá comunidade prestashop,

 

Com isto recorro a vocês. Estou a ter um problema com o web service da prestashop e um software externo, encontro-me em desenvolvimento de um website desenvolvido através do prestashop e neste momento encontro-me a desenvolver uma interligação com o web service da prestashop que é disponibilizado através da página http://doc.prestashop.com/display/PS16/Using+the+PrestaShop+Web+Service onde já testei os exemplos e funciona perfeitamente com o recurso "customers" em adicionar/editar/visualizar. 

 

Contudo pretendo neste momento gerir os produtos através do web service que irá estar em ligação com um software externo de facturação onde contem todos os produtos e seu dados como stock e preços, para isso faço um pedido ao web service através de get com os seguintes parâmetros
$opt = array('url' => PS_SHOP_PATH.'/api/products?display=full&filter[reference]=[XPTO]');
que me devolve os dados do producto com a referencia "XPTO" pois é o dado que existe em concordância no prestashop e software de facturação externo com isso pretendo verificar se o produto existe no prestashop através da referencia e isso funciona  depois obtenho também os dados de produto e altero para os dados que obtenho do software externo mas ao tentar enviar o xml já com os dados editados devolve-me o erro
"Other error
This call to PrestaShop Web Services failed and returned an HTTP status of 400. That means: Bad Request."


--------
Este é o codigo completo que estou a usar:
<?php

// Here we define constants /!\ You need to replace this parameters
define('DEBUG', true);
define('PS_SHOP_PATH', 'http://www.examplesite.com/prestashop');
define('PS_WS_AUTH_KEY', 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
require_once('PSWebServiceLibrary.php');

//echo phpinfo();

// 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('url' => PS_SHOP_PATH.'/api/products?display=full&filter[reference]=[FAC6.2454]');

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

// Here we get the elements from children of customer markup which is children of prestashop root markup
$resources = $xml->children()->children();
//$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 Reference';
else if ($trace[0]['args'][0] == 401) echo 'Bad auth key';
else echo 'Other error - '.$e;
}


// We set the Title
echo "<h1>Customer's List</h1>";

echo '<table border="5">';
// if $resources is set we can lists element in it otherwise do nothing cause there's an error
if (!empty($resources))
{

$data = array();

foreach ($resources->children() as $product => $resource)
{
echo '<tr><th>'.$product.'</th><td>';
echo '<input type="text" name="'.$product.'" value="'.$resource.'"/>';
echo '</td></tr>';

$data = array_merge($data, array($product => "".$resource));

}

if (isset($data['id'])) // Here we check id cause in every resource there's an id
{
// Here we have XML before update, lets update XML with new values
foreach ($resources->children() as $nodeKey => $node)
{
if($nodeKey=='ean13'){
$resources->children()->ean13 = (int)'123456';
}
else{
$resources->children()->$nodeKey = $node;
}

}
// And call the web service
try
{
$opt = array('resource' => 'products');
$opt['putXml'] = $xml->asXML();
$opt['id'] = $data['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();
}
}
}
echo '</table>';


?>
---------------

Se possível me ajudem que já tentei varias situações e até ao momento ainda não consegui editar um produto através do web service, contudo os "customers" consigo fazer tudo dai acreditar que não seja problema do servidor/CURL/permissões.

Ou me indiquem algum exemplo de como editar um produto através do web service.

 

Obrigado,

Rúben Martins

Share this post


Link to post
Share on other sites

Para analisar a entrada e saída de pacotes e aonde se encontram erros, vc. deveria checkar os log de erro do servidor, ou entao usar uma software que analisa o envio de pacotes como por ex. wireshark (gratuíto) ou similar. Já que a API está funcionando parciamente vc. deve ter algum erro no pacote que está enviando ou tentando escrever.

Edited by selectshop.at (see edit history)
  • Like 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More