Reputation:
I am using prestashop 1.5.3
and i am developing a payment gateway problem is this i couldn't find how to add product programmatically in cart and order for adding payment fee
Please anyone help me
Upvotes: 4
Views: 20427
Reputation: 133
you can place this code in a php file in your Root directory and use a simple form directing to this page containing product id & quantity.
Just change:
<?php
$idProduct= 19825 to $idProduct=$_POST["txtproductid"]
$qty=5 to $qty=$_POST["txtqty"];
$useSSL = true;
include('/config/config.inc.php');
include('/header.php');
global $params;
$errors = array();
$idProduct =19825;
$qty=5;
if ($cookie->isLogged())
{
/* Cart already exists */
if ((int)$cookie->id_cart)
{
$cart = new Cart((int)$cookie->id_cart);
}
if (!isset($cart) OR !$cart->id)
{
$cart = new Cart();
$cart->id_customer = (int)($cookie->id_customer);
$cart->id_address_delivery = (int) (Address::getFirstCustomerAddressId($cart->id_customer));
$cart->id_address_invoice = $cart->id_address_delivery;
$cart->id_lang = (int)($cookie->id_lang);
$cart->id_currency = (int)($cookie->id_currency);
$cart->id_carrier = 1;
$cart->recyclable = 0;
$cart->gift = 0;
$cart->add();
$cookie->id_cart = (int)($cart->id);
}
/* get product id and product attribure id */
$data = explode(",", $product);
$idProduct = $data[0]; */
$idProductAttribute = $data[1];
if ($qty != '')
{
$producToAdd = new Product((int)($idProduct), true, (int)($cookie->id_lang));
if ((!$producToAdd->id OR !$producToAdd->active) AND !$delete)
/* Product is no longer available, skip product */
continue;
/* Check the quantity availability */
if ($idProductAttribute > 0 AND is_numeric($idProductAttribute))
{
if (!$producToAdd->isAvailableWhenOutOfStock($producToAdd->out_of_stock) AND !Attribute::checkAttributeQty((int)$idProductAttribute, (int)$qty))
{
/* There is not enough product attribute in stock - set customer qty to current stock on hand */
$qty = getAttributeQty($idProductAttribute);
}
}
elseif (!$producToAdd->checkQty((int)$qty))
/* There is not enough product in stock - set customer qty to current stock on hand */
$qty = $producToAdd->getQuantity(idProduct);
$updateQuantity = $cart->updateQty((int)($qty), (int)($idProduct), (int)($idProductAttribute), NULL, 'up');
$cart->update();
}
/* redirect to cart
if (!sizeof($errors)) */
Tools::redirect('order.php');
}
else
{
Tools::redirect('/index.php');
}
$smarty->assign(array(
'id_customer' => (int)($cookie->id_customer),
'errors' => $errors
));
include_once('/footer.php');
Upvotes: 3
Reputation: 78
// Add cart if no cart found
if (!$this->context->cart->id) {
if (Context::getContext()->cookie->id_guest) {
$guest = new Guest(Context::getContext()->cookie->id_guest);
$this->context->cart->mobile_theme = $guest->mobile_theme;
}
$this->context->cart->add();
if ($this->context->cart->id) {
$this->context->cookie->id_cart = (int)$this->context->cart->id;
}
}
// Add product
$Cart = $this->context->cart;
$Cart->updateQty(1, 13, 1, false);
/* Optional parameters */
// classes/cart.php
// public function updateQty(
// $quantity,
// $id_product,
// $id_product_attribute = null,
// $id_customization = false,
// $operator = 'up',
// $id_address_delivery = 0,
// Shop $shop = null,
// $auto_add_cart_rule = true,
// $skipAvailabilityCheckOutOfStock = false
// )
Upvotes: 0
Reputation: 430
<script>
$(document).ready(function(){
$.ajax({
type: 'POST',
headers: { "cache-control": "no-cache" },
url: 'yourshopurl',
async: true,
cache: false,
dataType: 'json',
//( (parseInt(idCombination) && idCombination != null) ? '&ipa=' + parseInt(idCombination): '')
data: 'controller=cart&add=1&ajax=true&qty=1&id_product=247&token=' + static_token ,
success: function(jsonData)
{
console.log("products added");
}
});
});
</script>
Now just add id of product...or any combinations (commented)
Upvotes: 0
Reputation: 39
Below is the code for adding multiple products programatically. Can be use to add one product also. Put these code in a file called test.php on your website root and then run it like this /test.php??products_ids=11,9,10 where 11, 9,10 are 3 products id. Hope this helps.
<?php
require(dirname(__FILE__).'/config/config.inc.php');
$context=Context::getContext();//new Cart();
$id_cart=$context->cookie->__get('id_cart');
$products_ids=$_GET['products_ids']; // comma seprated products id example : test.php?products_ids=1,2,3
$products_ids_array=explode(",",$products_ids);
if(count($products_ids_array)>0){
$cart=new Cart($id_cart);
$cart->id_currency=2;
$cart->id_lang=1;
foreach($products_ids_array as $key=>$id_product){
$cart->updateQty(1, $id_product);
}
}
?>
Upvotes: 3
Reputation: 4002
If you develop a payment module, you should first check how are made other payments modules, for exemple Ogone or Paypal module. You can find them here : https://github.com/PrestaShop/PrestaShop-modules
The method used in prestashop to add / delete products from cart is Cart->updateQty() (in file classes/Cart.php).
Upvotes: 2