Synchronisation des stocks php et mysql
Bonjour tout le monde,
c'est mon premier poste ici :)
Voilà, nous avons une caisse en ligne (hiboutik.com) qui est utilisé pour notre boutique physique pres de BREST.
nous avons aussi une boutique prestashop qui sert de drive.
Quand un client passe en caisse, les stock hiboutik sont modifiées, et nous avons un script fourni par hiboutik qui permet via un cron toute les 5 minutes d'envoyer les nouveaux stocks sur notre boutique prestashop (directement sur la base.
Nous avons une connection a l'API hiboutik qui nous permet de recuperer les stocks et de les importer sur prestashop.
Ma question est celle ci, j'aimerais avoir un script qui fait le chemin inverse apres une vente sur prestashop, que les stock prestashop soit envoyé vers hiboutik...
car ca va seulement dans un sens.
Ex : j'ai 10 pommes sur hiboutik, donc sur prestashop aussi. Un client passe en caisse avec une pomme, les stocks hiboutik diminue, et donc les stock prestashop aussi. Le hic, c'est que lorsqu'un client passe sur prestashop, il en prend 1... donc ca fait 9 pommes restantes, mais rien ne l'indique a hiboutik, qui reste a 10... 5 minutes plus tard, le cron se lance... et hop les stock de pommes sur prestashop reviennent à 10.
l'idee serait qau'a chaque vente prestashop, un autre script envoi les stocks restant sur prestashop...
le script hiboutik qui fonctionne pour actualisé les stock sur prestashop est celui ci :
Que doit je modifier pour que ca aille dans l'autre sens, vers HIBOUTIK ??
merci
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
| <?
/*
####################################################################################################
//Constantes à adapter selon votre compte Hiboutik et votre base de données Prestashop
####################################################################################################
*/
require __DIR__ . '/vendor/autoload.php';
use \Curl\Curl;
//API REST Hiboutik
$url = "https://demo.hiboutik.com/apirest";
$user = "contact@hiboutik.com";
$key = "";
//Base de données de votre Prestashop (cf. /prestashop/config/settings.inc.php)
$mysql_host = "localhost";
$mysql_user = "";
$mysql_pass = "";
$mysql_db = "";
$mysql_db_prefix = "ps_";
$en_verbose = 0;
$ma_date = date("Y-m-d H:i:s");
/*
####################################################################################################
//Connexion MySQL et ajustement des noms des tables
####################################################################################################
*/
$mysqli = mysqli_connect($mysql_host, $mysql_user, $mysql_pass, $mysql_db);
if (mysqli_connect_errno($mysqli)) {
echo "Echec lors de la connexion à MySQL : " . mysqli_connect_error();
}
$mysqli->set_charset("utf8");
$table_product_attribute = $mysql_db_prefix . "product_attribute";
$table_product = $mysql_db_prefix . "product";
$table_stock_available = $mysql_db_prefix . "stock_available";
/*
####################################################################################################
//Connexion à l'API Hiboutik et récupération du stock disponible sur la warehouse 1
####################################################################################################
*/
$curl = new Curl();
$curl->setBasicAuthentication($user, $key);
$curl->get("$url/stock_available/warehouse_id/1");
if ($curl->error)
{
echo 'Error: ' . $curl->errorCode . ': ' . $curl->errorMessage;
}
else
{
//récupération du stock disponible
$stock_available = $curl->response;
foreach ($stock_available as $key => $value) {
$id_prod_sa = $value -> product_id;
$id_prod_taille_sa = $value -> product_size;
$stock_dispo[$id_prod_sa][$id_prod_taille_sa] = $value -> stock_available;
}
/*
####################################################################################################
//Traitement des produits avec déclinaisons
####################################################################################################
*/
$sql_produits_prestashop = "SELECT * FROM $table_product_attribute WHERE reference <> '';";
$result_produits_prestashop = mysqli_query ($mysqli, "$sql_produits_prestashop");
$nombreligne_produits_prestashop = $result_produits_prestashop->num_rows;
if ($en_verbose == "1") print("<br />$sql_produits_prestashop --> $nombreligne_produits_prestashop");
while ($row = $result_produits_prestashop->fetch_array(MYSQLI_BOTH))
{
$reference = $row["reference"];
$id_product = $row["id_product"];
$id_product_attribute = $row["id_product_attribute"];
if (preg_match('/|/', $reference))
{
$reference_presta = explode("|", $reference);
$id_prod_hibou = $reference_presta[0];
$id_taille_hibou = $reference_presta[1];
$qtity = $stock_dispo[$id_prod_hibou][$id_taille_hibou];
if (is_numeric($qtity))
{
$ma_requete_modif_produit = "UPDATE $table_stock_available SET quantity = '$qtity' WHERE id_product_attribute = '$id_product_attribute' AND id_product = '$id_product';";
$mysql_query_modif_account = mysqli_query ($mysqli, "$ma_requete_modif_produit");
if ($en_verbose == "1") print("<br />$ma_requete_modif_produit");
}
}
}
$result_produits_prestashop->free();
/*
####################################################################################################
//Traitement des produits sans déclinaisons
####################################################################################################
*/
$sql_produits_prestashop = "SELECT * FROM $table_product WHERE reference <> '';";
$result_produits_prestashop = mysqli_query ($mysqli, "$sql_produits_prestashop");
$nombreligne_produits_prestashop = $result_produits_prestashop->num_rows;
if ($en_verbose == "1") print("<br />$sql_produits_prestashop --> $nombreligne_produits_prestashop");
while ($row = $result_produits_prestashop->fetch_array(MYSQLI_BOTH))
{
$reference = $row["reference"];
$id_product = $row["id_product"];
$qtity = $stock_dispo[$reference]["0"];
if (is_numeric($qtity))
{
$ma_requete_modif_produit = "UPDATE $table_stock_available SET quantity = '$qtity' WHERE id_product = '$id_product';";
$mysql_query_modif_account = mysqli_query ($mysqli, "$ma_requete_modif_produit");
if ($en_verbose == "1") print("<br />$ma_requete_modif_produit");
}
}
$result_produits_prestashop->free();
}
?> |