Actualizar TIER PRICE con Webservice API. FALLO

ososoft

Nuevo usuario
Actualizar TIER PRICE con Webservice API. SOLUCIONADO

Buenas, gracias a esta pagina:
http://www.magentocommerce.com/boards/viewthread/24256/

Explica como crear un php para actualizar el tier price,
pero tiene un pequeño fallo, he hecho la prueba con 3 productos y el array va creando el campo cantidad y precio en todos los productos, como creo que no me explico bien, una imagen vale mas que mil palabras:

este es el archivo Import Tier Prices

<html>
<head>
<title>Import Tier Prices</title>
</head>
<body>
<?php {
$proxy = new SoapClient("http://www.mitienda.com/magento/index.php/api/?wsdl");
$sessionId = $proxy->login("usuario API", "clave API");
echo 'logged in';
// Update tier prices from file called tier_prices.csv that has sku, qty, price on each line

$row = 1;
$handle = fopen("tier_prices.csv", "r");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$SKU=$data[0];
$tier[] = array(
'website' => 'all',
'customer_group_id' => 'all',
'qty' => $data[1],
'price' => $data[2]
);
echo '<br />Processing row '.$row.', updating SKU: '.$SKU.' with £'.$data[2].' for multiples of

'.$data[1].'...<br />';

$proxy->call($sessionId, 'product_tier_price.update', array($SKU, $tier));

var_dump($proxy->call($sessionId, 'product_tier_price.info', $SKU));
$row++;
}
fclose($handle);
} ?>
</body>
</html>
el archivo .cvs que he creado es este:

29721,2,15
29720,3,20
29719,4,25
y la respuesta de la pagina es esta:

logged in
Processing row 1, updating SKU: 29721 with £15 for multiples of 2...
array(1) { [0]=> array(4) { ["customer_group_id"]=> string(3) "all" ["website"]=> string(3) "all" ["qty"]=> string(6) "2.0000" ["price"]=> string(7) "15.0000" } }
Processing row 2, updating SKU: 29720 with £20 for multiples of 3...
array(2) { [0]=> array(4) { ["customer_group_id"]=> string(3) "all" ["website"]=> string(3) "all" ["qty"]=> string(6) "2.0000" ["price"]=> string(7) "15.0000" } [1]=> array(4) { ["customer_group_id"]=> string(3) "all" ["website"]=> string(3) "all" ["qty"]=> string(6) "3.0000" ["price"]=> string(7) "20.0000" } }
Processing row 3, updating SKU: 29719 with £25 for multiples of 4...
array(3) { [0]=> array(4) { ["customer_group_id"]=> string(3) "all" ["website"]=> string(3) "all" ["qty"]=> string(6) "2.0000" ["price"]=> string(7) "15.0000" } [1]=> array(4) { ["customer_group_id"]=> string(3) "all" ["website"]=> string(3) "all" ["qty"]=> string(6) "3.0000" ["price"]=> string(7) "20.0000" } [2]=> array(4) { ["customer_group_id"]=> string(3) "all" ["website"]=> string(3) "all" ["qty"]=> string(6) "4.0000" ["price"]=> string(7) "25.0000" } }
Como se puede ver el segundo articulo coje los valores del 1 y del 2 y el 3 de todos, creo que es por que no esta bien definido el
$proxy->call($sessionId, 'product_tier_price.update', array($SKU, $tier));
pero no se mas, a alguien se le ocurre algo...
 
Última edición:

Xarlie

Super Moderador
Miembro del equipo
El problema que tienes es que en cada iteración se aumenta el array, por lo que tienes que eliminar la variable del array.
hazlo justo después de
PHP:
$row++;
unset($tier);
 

ososoft

Nuevo usuario
Rizando el rizo

Una cosa Xarlie, con la eliminacion de la variable del array tenemos un problema:
Y es que si, por ejemplo, tenemos 2 entradas de precio para el mismo articulo, una por comprar 2 y otra por comprar 5 estas NO se implementan las 2, solo lo hace la ultima.
Le he preguntado a un amigo que me diga como se tendria que poner en el php para que antes de eliminar el array, le pregunte si la variable SKU es la misma que el siguiente paso de array:
Si es la misma que la deje correr para que lo meta en el mismo articulo y si no es la misma que mate el array para que empieze limpio.
En cuanto lo tenga lo pongo aqui para que lo veais.
 

Xarlie

Super Moderador
Miembro del equipo
PHP:
<?php {
$proxy = new SoapClient("http://www.mitienda.com/magento/index.php/api/?wsdl");
$sessionId = $proxy->login("usuario API", "clave API");
echo 'logged in';
// Update tier prices from file called tier_prices.csv that has sku, qty, price on each line

$row = 1;
$handle = fopen("tier_prices.csv", "r");

while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {

if (isset($SKU) && ($data[0] == $SKU)) {
    // El SKU es el mismo por lo que no hacemos nada, te lo pongo para que lo veas
} else {
    if (isset($tier)) unset($tier);
}

$SKU=$data[0];
$tier[] = array(
'website' => 'all',
'customer_group_id' => 'all',
'qty' => $data[1],
'price' => $data[2]
);
echo '<br />Processing row '.$row.', updating SKU: '.$SKU.' with £'.$data[2].' for multiples of

'.$data[1].'...<br />';

$proxy->call($sessionId, 'product_tier_price.update', array($SKU, $tier));

var_dump($proxy->call($sessionId, 'product_tier_price.info', $SKU));
$row++;



}
fclose($handle);
} ?>
 
Arriba