arjit Posted August 22, 2015 Share Posted August 22, 2015 Hi , I have been trying to create an order with some cart_rules discount with webservices. I am unable to as I dont see cart_rule getting appiled either in cart or order. I have my site running on prestashop webserices. I explored I saw order_discount I wanted to know how should I apply this ? I see order_discount has order_Id in it so it has to be created after order and once the order is made I cant apply I the discount. Seems confusing to me. I want to know the steps in which we need to apply the discounts. Link to comment Share on other sites More sharing options...
arjit Posted August 23, 2015 Author Share Posted August 23, 2015 Any one please reply ! Link to comment Share on other sites More sharing options...
arjit Posted August 23, 2015 Author Share Posted August 23, 2015 I am sad to see the kind of community support given by prestashop. I will not advocate anyone to use prestashop now. Link to comment Share on other sites More sharing options...
arjit Posted August 26, 2015 Author Share Posted August 26, 2015 Please help or Please let me if the question isnt clear Link to comment Share on other sites More sharing options...
B@JTík Posted September 11, 2015 Share Posted September 11, 2015 (edited) Hi, did you find any solution, PLEASE, or anyone? I have same problem, create succesfull order (new customer->new address->new cart->new order) in Prestashop (via webservice) from my external one-product microstore (order form), it works well, but I need apply some discounts (2pcs=free shipping, 4pcs=gift, discount vouchers) and it not works, cart rules is not applied for order created via webservice. In webservice XML for creating order are items total_shipping and total_discounts, how it works? When I send any numbers in this items, Prestashop disregard it. (sorry for my bad english) Edited September 11, 2015 by B@JTík (see edit history) Link to comment Share on other sites More sharing options...
arjit Posted September 11, 2015 Author Share Posted September 11, 2015 I was able to solve the problem by adding a field in the cart which is cart_rule_id. Adding that value to ps_cart_cart_rule. See the table for more details. The id of coupon you add to the cart rule the order will be generated with that discount/freebee 1 Link to comment Share on other sites More sharing options...
B@JTík Posted September 11, 2015 Share Posted September 11, 2015 Thanks much for fast reply. I'm not sure, if I understand good (sorry, it's my bad english). Do you create new cart via API (webservice), then write remotely direct to database (ps_cart_cart_rule) row with association cart-id -> cart-rule-id and after that you create new order (again via API)? Link to comment Share on other sites More sharing options...
arjit Posted September 11, 2015 Author Share Posted September 11, 2015 Yes correct 1 Link to comment Share on other sites More sharing options...
B@JTík Posted September 11, 2015 Share Posted September 11, 2015 Thanks much again, it's very helpful for me. Link to comment Share on other sites More sharing options...
An'im Fahmy Posted September 14, 2015 Share Posted September 14, 2015 I am read this thread, and now, I will try this, Because, I have error when create order with webservice {"status":"Other error<br \/>Bad parameters given"} Thank you Link to comment Share on other sites More sharing options...
An'im Fahmy Posted September 14, 2015 Share Posted September 14, 2015 Thanks much again, it's very helpful for me. Yes correct Can you help me? I was create cart, And then, when I create order via webservice like this: <?xml version="1.0" encoding="UTF-8"?> <prestashop xmlns:xlink="http://www.w3.org/1999/xlink"> <order> <id></id> <id_address_delivery>5047</id_address_delivery> <id_address_invoice>5047</id_address_invoice> <id_cart>35</id_cart> <id_currency>1</id_currency> <id_lang>1</id_lang> <id_customer>34</id_customer> <id_carrier>60</id_carrier> <current_state>59</current_state> <module>bca</module> <invoice_number></invoice_number> <invoice_date></invoice_date> <delivery_number></delivery_number> <delivery_date></delivery_date> <valid></valid> <date_add></date_add> <date_upd></date_upd> <shipping_number></shipping_number> <id_shop_group>1</id_shop_group> <id_shop>1</id_shop> <secure_key></secure_key> <payment>BCA</payment> <recyclable></recyclable> <gift></gift> <gift_message></gift_message> <mobile_theme></mobile_theme> <total_discounts></total_discounts> <total_discounts_tax_incl></total_discounts_tax_incl> <total_discounts_tax_excl></total_discounts_tax_excl> <total_paid>196000</total_paid> <total_paid_tax_incl></total_paid_tax_incl> <total_paid_tax_excl></total_paid_tax_excl> <total_paid_real>196000</total_paid_real> <total_products>196000</total_products> <total_products_wt>196000</total_products_wt> <total_shipping></total_shipping> <total_shipping_tax_incl></total_shipping_tax_incl> <total_shipping_tax_excl></total_shipping_tax_excl> <carrier_tax_rate></carrier_tax_rate> <total_wrapping></total_wrapping> <total_wrapping_tax_incl></total_wrapping_tax_incl> <total_wrapping_tax_excl></total_wrapping_tax_excl> <round_mode></round_mode> <round_type></round_type> <conversion_rate>1</conversion_rate> <reference></reference> <associations> <order_rows> <order_row> <product_id>3</product_id> <product_attribute_id>0</product_attribute_id> <product_quantity>4</product_quantity> </order_row> <order_row> <product_id>6</product_id> <product_attribute_id>0</product_attribute_id> <product_quantity>4</product_quantity> </order_row> </order_rows> </associations> </order> </prestashop> {"status":"Other error <br \/>Bad parameters given"} And than error: Bad parameters given Any solutions? Thank you Link to comment Share on other sites More sharing options...
arjit Posted September 14, 2015 Author Share Posted September 14, 2015 Can you please tell me what exactly are you trying to do ? If you are trying to place the order via webservices Creating the cart <prestashop xmlns:xlink="http://www.w3.org/1999/xlink"> <cart> <id_address_delivery>5</id_address_delivery> <id_address_invoice>5</id_address_invoice> <id_currency >1</id_currency> <id_customer>1</id_customer> <id_lang >1</id_lang> <id_shop>1</id_shop> <delivery_option/> <secure_key/> <allow_seperated_package>0</allow_seperated_package> <date_add>2015-06-23 14:45:08</date_add> <date_upd>2015-06-23 14:45:08</date_upd> <associations><cart_rows> <cart_row> <id_product >1</id_product> <id_product_attribute >0</id_product_attribute> <id_address_delivery >0</id_address_delivery> <quantity>3</quantity> </cart_row> </cart_rows> </associations> </cart> </prestashop> <prestashop xmlns:xlink="http://www.w3.org/1999/xlink"> <order> <id_address_delivery>1</id_address_delivery> <id_address_invoice>1</id_address_invoice> <id_cart>14</id_cart> <id_currency>1</id_currency> <id_lang>1</id_lang> <id_customer>1</id_customer> <id_carrier>1</id_carrier> <shipping_number notFilterable="true"/> <total_products_wt>53</total_products_wt> <conversion_rate>1.000000</conversion_rate> <current_state>6</current_state> <module>cheque</module> <id_shop>1</id_shop> <payment>Payment by check</payment> <total_paid>3300</total_paid> <total_paid_tax_incl>3300</total_paid_tax_incl> <total_paid_tax_excl>3300</total_paid_tax_excl> <total_paid_real>3300</total_paid_real> <total_products>3</total_products> <total_shipping>2.000000</total_shipping> <total_shipping_tax_incl>2.000000</total_shipping_tax_incl> <total_shipping_tax_excl>2.000000</total_shipping_tax_excl> <carrier_tax_rate>0.000</carrier_tax_rate> <total_wrapping>0.000000</total_wrapping> <total_wrapping_tax_incl>0.000000</total_wrapping_tax_incl> <total_wrapping_tax_excl>0.000000</total_wrapping_tax_excl> <round_mode>0</round_mode> <conversion_rate>1.000000</conversion_rate> <associations> <order_rows> <order_row> <product_id>1</product_id> <product_quantity>3</product_quantity> <product_name>sofa</product_name> <product_price>1100</product_price> </order_row> </order_rows> </associations> </order> </prestashop> 1 Link to comment Share on other sites More sharing options...
An'im Fahmy Posted September 14, 2015 Share Posted September 14, 2015 Can you please tell me what exactly are you trying to do ? If you are trying to place the order via webservices Thank you Sir, And yes, I am try to create order via webservice, I was successfully create customer, address and cart. And stuck in order. I will try your suggestion. Link to comment Share on other sites More sharing options...
An'im Fahmy Posted September 14, 2015 Share Posted September 14, 2015 Can you please tell me what exactly are you trying to do ? Do you have suggest for me? <?php require_once('config.php'); require_once('../PSWebServiceLibrary.php'); //default POST $_POST['id_currency']=1; $_POST['id_lang']=1; $_POST['id_shop_group']=1; $_POST['id_shop']=1; $_POST['product_attribute_id']=0; $_POST['current_state']=59; $_POST['module']=strtolower($_POST['payment']); $_POST['payment']=strtoupper($_POST['payment']); $_POST['conversion_rate']=1.000000; //end default function getAddress($idCustomer){ $xml_file = "https://".PS_WS_AUTH_KEY."@".PS_SHOP_PATH."/api/addresses?filter[id_customer]=".$idCustomer; $xml = file_get_contents($xml_file); $xml = XmlCleanStrips($xml); $xml = simplexml_load_string($xml,'SimpleXMLElement', LIBXML_NOCDATA); $xml = json_decode(json_encode($xml)); $id_address = (isset($xml->addresses->address->{'@attributes'}->id) ? $xml->addresses->address->{'@attributes'}->id : $xml->addresses->address[0]->{'@attributes'}->id); return $id_address; } function getCart($idCart){ $xml_file = "https://".PS_WS_AUTH_KEY."@".PS_SHOP_PATH."/api/carts/".$idCart; $xml = file_get_contents($xml_file); $xml = XmlCleanStrips($xml); $xml = simplexml_load_string($xml,'SimpleXMLElement', LIBXML_NOCDATA); $xml = json_decode(json_encode($xml)); $id_customer = $xml->cart->id_customer; $xml = $xml->cart->associations->cart_rows; unset($xml->{'@attributes'}); $arr["id_customer"] = $id_customer; $arr["rows"] = $xml; return $arr; } function updateCartAddr($idCart){ try{ $webService = new PrestaShopWebservice(PS_SHOP_PATH, PS_WS_AUTH_KEY, DEBUG); $opt = array('resource' => 'carts'); if (isset($idCart)){ $opt['id'] = $idCart; } $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(); } catch (PrestaShopWebserviceException $e) { // Here we are dealing with errors $trace = $e->getTrace(); if ($trace[0]['args'][0] == 404) $status["status"] = 'Bad ID'; else if ($trace[0]['args'][0] == 401) $status["status"] = 'Bad auth key'; else $status["status"] = 'Other error<br />'.$e->getMessage(); echo json_encode($status); } // Second : We update the data and send it to the web service if (isset($idCart)) { // Here we have XML before update, lets update XML with new values foreach ($resources as $nodeKey => $node){ $resources->$nodeKey = $resources->$nodeKey; } try { $cartRows = getCart($idCart)["rows"]; $defaulAddr = getAddress(getCart($idCart)["id_customer"]); $default_id_address_delivery = (isset($_POST['id_address_delivery']) ? $_POST['id_address_delivery'] : $defaulAddr); $default_id_address_invoice = (isset($_POST['id_address_invoice']) ? $_POST['id_address_invoice'] : $defaulAddr); $resources->id_address_delivery = $default_id_address_delivery; $resources->id_address_invoice = $default_id_address_invoice; $orderke = 0; if(count($cartRows->cart_row)==1){ foreach($cartRows as $key => $value){ $resources->associations->cart_rows->cart_row[$orderke]->id_product = $value->id_product; $resources->associations->cart_rows->cart_row[$orderke]->id_product_attribute = 0; $resources->associations->cart_rows->cart_row[$orderke]->quantity = $value->quantity; $resources->associations->cart_rows->cart_row[$orderke]->id_address_delivery = $default_id_address_delivery; $orderke++; } }else if(count($cartRows->cart_row)>0){ foreach($cartRows->cart_row as $key => $value){ $resources->associations->cart_rows->cart_row[$orderke]->id_product = $value->id_product; $resources->associations->cart_rows->cart_row[$orderke]->id_product_attribute = 0; $resources->associations->cart_rows->cart_row[$orderke]->quantity = $value->quantity; $resources->associations->cart_rows->cart_row[$orderke]->id_address_delivery = $default_id_address_delivery; $orderke++; } } $opt = array('resource' => 'carts'); $opt['putXml'] = $xml->asXML(); //print_r($opt['putXml']); //return false; //COMMENT THIS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $opt['id'] = $idCart; $xml = $webService->edit($opt); }catch (PrestaShopWebserviceException $ex){ $trace = $ex->getTrace(); if ($trace[0]['args'][0] == 404) $status["status"] = 'Bad ID'; else if ($trace[0]['args'][0] == 401) $status["status"] = 'Bad auth key'; else $status["status"] = 'Other error<br />'.$ex->getMessage(); echo json_encode($status); } } } //updateCartAddr(35);//DO BEFORE PLACE ORDER function getProductInfo($idProduct){ $xml_file = "https://".PS_WS_AUTH_KEY."@".PS_SHOP_PATH."/api/products/".$idProduct; $xml = file_get_contents($xml_file); $xml = XmlCleanStrips($xml); $xml = simplexml_load_string($xml,'SimpleXMLElement', LIBXML_NOCDATA); $discount = $xml->product->addChild('ina_discount'); $inaapi = new inaAPI; $inadiscount = $inaapi->getProductDiscount($idProduct); $from_quantity = (isset($inadiscount[0]['from_quantity']) ? $inadiscount[0]['from_quantity'] : 0); $reduction = (isset($inadiscount[0]['reduction']) ? $inadiscount[0]['reduction'] : 0); $discount->addChild('reduction', $reduction); $discount->addChild('from_quantity', $from_quantity); $product = json_decode(json_encode($xml))->product; $info = array(); $name = $product->name->language; $price = (float)$product->price; $_reduction = (float)$product->ina_discount->reduction; $_from_quantity = (integer)$product->ina_discount->from_quantity; $info['name']=$name; $info['price']=$price; $info['reduction']=$_reduction; $info['from_quantity']=$_from_quantity; return($info); } //print_r(getProductInfo(3)); function placeOrder($idCart){ try { $webService = new PrestaShopWebservice(PS_SHOP_PATH, PS_WS_AUTH_KEY, DEBUG); $opt = array('resource' => 'orders'); $xml = $webService->get(array('url' => PS_SHOP_PATH.'/api/orders?schema=blank')); $resources = $xml->children()->children(); } catch (PrestaShopWebserviceException $e){ // Here we are dealing with errors $trace = $e->getTrace(); if ($trace[0]['args'][0] == 404) $status["status"] = 'Bad ID'; else if ($trace[0]['args'][0] == 401) $status["status"] = 'Bad auth key'; else $status["status"] = "Orders - Other error1".$ex->getMessage(); echo json_encode($status); } // Second : We update the data and send it to the web service if (isset($idCart)) { // Here we have XML before update, lets update XML with new values $defaulAddr = getAddress(getCart($idCart)["id_customer"]); $_POST['id_address_delivery'] = (isset($_POST['id_address_delivery']) ? $_POST['id_address_delivery'] : $defaulAddr); $_POST['id_address_invoice'] = (isset($_POST['id_address_invoice']) ? $_POST['id_address_invoice'] : $defaulAddr); foreach ($resources as $nodeKey => $node){ $resources->$nodeKey = $_POST[$nodeKey]; } try { $total=0; $totalreal=0; $cartRows = getCart($idCart)["rows"]; $orderke = 0; if(count($cartRows->cart_row)==1){ foreach($cartRows as $key => $value){ $resources->associations->order_rows->order_row[$orderke]->product_id = $value->id_product; $resources->associations->order_rows->order_row[$orderke]->product_attribute_id = 0; $resources->associations->order_rows->order_row[$orderke]->product_quantity = $value->quantity; $resources->associations->order_rows->order_row[$orderke]->product_name = getProductInfo($value->id_product)['name']; $resources->associations->order_rows->order_row[$orderke]->product_price = getProductInfo($value->id_product)['price']; $total+= getProductInfo($value->id_product)['reduction']>0 ? (getProductInfo($value->id_product)['price']-(getProductInfo($value->id_product)['price']*getProductInfo($value->id_product)['reduction']))*$value->quantity : getProductInfo($value->id_product)['price']*$value->quantity; $totalreal+=getProductInfo($value->id_product)['price']*$value->quantity;; $orderke++; } }else if(count($cartRows->cart_row)>0){ foreach($cartRows->cart_row as $key => $value){ $resources->associations->order_rows->order_row[$orderke]->product_id = $value->id_product; $resources->associations->order_rows->order_row[$orderke]->product_attribute_id = 0; $resources->associations->order_rows->order_row[$orderke]->product_quantity = $value->quantity; $resources->associations->order_rows->order_row[$orderke]->product_name = getProductInfo($value->id_product)['name']; $resources->associations->order_rows->order_row[$orderke]->product_price = getProductInfo($value->id_product)['price']; $total+= getProductInfo($value->id_product)['reduction']>0 ? (getProductInfo($value->id_product)['price']-(getProductInfo($value->id_product)['price']*getProductInfo($value->id_product)['reduction']))*$value->quantity : getProductInfo($value->id_product)['price']*$value->quantity; $totalreal+=getProductInfo($value->id_product)['price']*$value->quantity;; $orderke++; } } $resources->total_paid = $total; $resources->total_paid_tax_incl = $total; $resources->total_paid_tax_excl = $total; $resources->total_paid_real = $totalreal; $resources->total_products = $total; $resources->total_products_wt = $total; $resources->total_shipping = 0.000000; $resources->total_shipping_tax_incl=0.000000; $resources->total_shipping_tax_excl=0.000000; $resources->carrier_tax_rate=0.000; $resources->total_wrapping=0.000000; $resources->total_wrapping_tax_incl=0.000000; $resources->total_wrapping_tax_excl=0.000000; $resources->round_mode=0; $opt = array('resource' => 'orders'); $opt['putXml'] = $xml->asXML(); print_r($opt['putXml']); //return false; //COMMENT THIS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $xml = $webService->add($opt); $idOrder = (array)$xml->order->id; $status["id"] = $idOrder[0]; $status["status"] = "success"; echo json_encode($status); }catch (PrestaShopWebserviceException $ex){ $trace = $ex->getTrace(); if ($trace[0]['args'][0] == 404) $status["status"] = 'Bad ID'; else if ($trace[0]['args'][0] == 401) $status["status"] = 'Bad auth key'; else $status["status"] = 'Other error<br />'.$ex->getMessage(); echo json_encode($status); } } } if(isset($_POST['id_cart']) && ctype_digit($_POST['id_cart'])){ placeOrder($_POST['id_cart']); } 2 Link to comment Share on other sites More sharing options...
An'im Fahmy Posted September 14, 2015 Share Posted September 14, 2015 And this is the result <?xml version="1.0" encoding="UTF-8"?> <prestashop xmlns:xlink="http://www.w3.org/1999/xlink"> <order> <id></id> <id_address_delivery>5047</id_address_delivery> <id_address_invoice>5047</id_address_invoice> <id_cart>37</id_cart> <id_currency>1</id_currency> <id_lang>1</id_lang> <id_customer>34</id_customer> <id_carrier>60</id_carrier> <current_state>59</current_state> <module>bca</module> <invoice_number></invoice_number> <invoice_date></invoice_date> <delivery_number></delivery_number> <delivery_date></delivery_date> <valid></valid> <date_add></date_add> <date_upd></date_upd> <shipping_number></shipping_number> <id_shop_group>1</id_shop_group> <id_shop>1</id_shop> <secure_key></secure_key> <payment>BCA</payment> <recyclable></recyclable> <gift></gift> <gift_message></gift_message> <mobile_theme></mobile_theme> <total_discounts></total_discounts> <total_discounts_tax_incl></total_discounts_tax_incl> <total_discounts_tax_excl></total_discounts_tax_excl> <total_paid>816000</total_paid> <total_paid_tax_incl>816000</total_paid_tax_incl> <total_paid_tax_excl>816000</total_paid_tax_excl> <total_paid_real>825000</total_paid_real> <total_products>816000</total_products> <total_products_wt>816000</total_products_wt> <total_shipping>0</total_shipping> <total_shipping_tax_incl>0</total_shipping_tax_incl> <total_shipping_tax_excl>0</total_shipping_tax_excl> <carrier_tax_rate>0</carrier_tax_rate> <total_wrapping>0</total_wrapping> <total_wrapping_tax_incl>0</total_wrapping_tax_incl> <total_wrapping_tax_excl>0</total_wrapping_tax_excl> <round_mode>0</round_mode> <round_type></round_type> <conversion_rate>1</conversion_rate> <reference></reference> <associations> <order_rows> <order_row> <product_id>3</product_id> <product_attribute_id>0</product_attribute_id> <product_quantity>1</product_quantity> <product_name>Raflesia Yellow ggwp</product_name> <product_price>30000</product_price> </order_row> <order_row> <product_id>6</product_id> <product_attribute_id>0</product_attribute_id> <product_quantity>1</product_quantity> <product_name>Good Night</product_name> <product_price>795000</product_price> </order_row> </order_rows> </associations> </order> </prestashop> {"status":"Other error <br \/>Bad parameters given"} Link to comment Share on other sites More sharing options...
B@JTík Posted September 15, 2015 Share Posted September 15, 2015 (edited) Do you have suggest for me? It's very nice piece of code, thank you for share it. And this is the result I have my "stupid newbee" way for learning how-it-works. This working fine for me. Perhaps it may be useful for you. <?php header('Content-type: text/html; charset=utf-8'); // POST Data simulation {for testing} $_POST['firstname'] = 'Firstname'; $_POST['lastname'] = 'Lastname'; $_POST['address1'] = 'MyStreet 321'; $_POST['postcode'] = '654321'; $_POST['city'] = 'MyCity'; $_POST['email'] = '[email protected]'; $_POST['phone'] = '987654321'; $_POST['quantity'] = '1'; // SETings define('DEBUG', true); define('PS_SHOP_PATH', 'http://127.0.0.1/_presta'); define('PS_WS_AUTH_KEY', 'QRDL6DG7P7RMU26UT5T1GWIQC43MX2TV'); require_once('./PSWebServiceLibrary.php'); $webService = new PrestaShopWebservice(PS_SHOP_PATH, PS_WS_AUTH_KEY, DEBUG); $id['country'] = '1'; $id['lang'] = '2'; $id['currency'] = '1'; $id['carrier'] = '6'; $product['id'] = '1'; $product['price'] = '399'; $product['total'] = $product['price'] * $_POST['quantity']; // CREATE Customer $xml = $webService->get(array('url' => PS_SHOP_PATH.'/api/customers?schema=blank')); $xml->customer->firstname = $_POST['firstname']; $xml->customer->lastname = $_POST['lastname']; $xml->customer->email = $_POST['email']; $xml->customer->newsletter = '1'; $xml->customer->optin = '1'; $xml->customer->active = '1'; $opt = array('resource' => 'customers'); $opt['postXml'] = $xml->asXML(); $xml = $webService->add($opt); // ID of created customer $id['customer'] = $xml->customer->id; // CREATE Address $xml = $webService->get(array('url' => PS_SHOP_PATH.'/api/addresses?schema=blank')); $xml->address->id_customer = $id['customer']; $xml->address->firstname = $_POST['firstname']; $xml->address->lastname = $_POST['lastname']; $xml->address->address1 = $_POST['address1']; $xml->address->postcode = $_POST['postcode']; $xml->address->city = $_POST['city']; $xml->address->phone = $_POST['phone']; $xml->address->id_country = $id['country']; $xml->address->alias = '-'; $opt = array('resource' => 'addresses'); $opt['postXml'] = $xml->asXML(); $xml = $webService->add($opt); // ID of created address $id['address'] = $xml->address->id; // CREATE Cart $xml = $webService->get(array('url' => PS_SHOP_PATH.'/api/carts?schema=blank')); $xml->cart->id_customer = $id['customer']; $xml->cart->id_address_delivery = $id['address']; $xml->cart->id_address_invoice = $id['address']; $xml->cart->id_currency = $id['currency']; $xml->cart->id_lang = $id['lang']; $xml->cart->id_carrier = $id['carrier']; $xml->cart->associations->cart_rows->cart_row->id_product = $product['id']; $xml->cart->associations->cart_rows->cart_row->quantity = $_POST['quantity']; $opt = array('resource' => 'carts'); $opt['postXml'] = $xml->asXML(); $xml = $webService->add($opt); // ID of created cart $id['cart'] = $xml->cart->id; // CREATE Order $xml = $webService->get(array('url' => PS_SHOP_PATH.'/api/orders?schema=blank')); $xml->order->id_customer = $id['customer']; $xml->order->id_address_delivery = $id['address']; $xml->order->id_address_invoice = $id['address']; $xml->order->id_cart = $id['cart']; $xml->order->id_currency = $id['currency']; $xml->order->id_lang = $id['lang']; $xml->order->id_carrier = $id['carrier']; $xml->order->payment = 'Cash on delivery'; $xml->order->module = 'cashondelivery'; $xml->order->total_paid = $product['total']; $xml->order->total_paid_real = '0'; $xml->order->total_products = $product['total']; $xml->order->total_products_wt = $product['total']; $xml->order->conversion_rate = '1'; $xml->order->associations->order_rows->order_row->product_id = $product['id']; $xml->order->associations->order_rows->order_row->product_quantity = $_POST['quantity']; $opt = array('resource' => 'orders'); $opt['postXml'] = $xml->asXML(); $xml = $webService->add($opt); ?> It needs yet something like if (email exist) update customer and address else create customer and address and other things for production use, it's really only for learning. Edited September 15, 2015 by B@JTík (see edit history) 1 Link to comment Share on other sites More sharing options...
An'im Fahmy Posted September 15, 2015 Share Posted September 15, 2015 $opt['postXml'] = $xml->asXML(); Thank you very much for your reply. My code wrong here: $opt = array('resource' => 'orders'); $opt['putXml'] = $xml->asXML(); print_r($opt['putXml']); //return false; //COMMENT THIS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! I type 'putXml' for placing order, after I change to postXml, all running well without change everything after that, order successfully added to database. But, one more problem, With your code or my code, not showing to back office because nothing address input in database, actually I was added the address. Once again Thank you Link to comment Share on other sites More sharing options...
Alexandre de Lyon Posted December 11, 2015 Share Posted December 11, 2015 (edited) Hello and thank you for your share ! I'm begginer. I tried your code and I still have this result : Fatal error: Uncaught exception 'PrestaShopWebserviceException' with message 'This call to PrestaShop Web Services failed and returned an HTTP status of 500. That means: Internal Server Error.' in C:\xampp\htdocs\prestashop\demo\inc\PSWebServiceLibrary.php:87 Stack trace: #0 C:\xampp\htdocs\prestashop\demo\inc\PSWebServiceLibrary.php(217): PrestaShopWebservice->checkStatusCode(500) #1 C:\xampp\htdocs\prestashop\demo\test.php(133): PrestaShopWebservice->add(Array) #2 {main} thrown in C:\xampp\htdocs\prestashop\demo\inc\PSWebServiceLibrary.php on line 87 The customer is created. I can see the product bought in the customer page (BO) but no order placed! Maybe you know why ? Edited December 11, 2015 by [email protected] (see edit history) Link to comment Share on other sites More sharing options...
B@JTík Posted December 16, 2015 Share Posted December 16, 2015 I tried your code and I still have this result : Check ID's of carrier, country, lang, currency, payment module ... all must exist and be enabled. My actual and working code with NEW/EXIST customer testing and with cart rules: <?php header('Content-type: text/html; charset=utf-8'); //------------------------------------ // POST Data simulation (for testing) // $_GET['pf_firstname'] = 'Firstname'; // $_GET['pf_lastname'] = 'Lastname'; // $_GET['pf_address1'] = 'MyStreet 321'; // $_GET['pf_postcode'] = '54321'; // $_GET['pf_city'] = 'MyCity'; // $_GET['pf_email'] = '[email protected]'; // $_GET['pf_phone'] = '987654321'; // $_GET['pf_quantity'] = '4'; // $_GET['pf_cart_rule_free_shipping'] = 'true'; // $_GET['pf_cart_rule_free_gift'] = 'true'; // $_GET['pf_cart_rule_discount_code'] = 'true'; //--------------- // Configuration define('DEBUG', false); define('PS_SHOP_PATH', 'http://'.$_SERVER['HTTP_HOST'].'/_presta'); define('PS_WS_AUTH_KEY', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ123456'); require_once('PSWebServiceLibrary.php'); $webService = new PrestaShopWebservice(PS_SHOP_PATH, PS_WS_AUTH_KEY, DEBUG); $id['country'] = '16'; $id['lang'] = '1'; $id['currency'] = '1'; $id['carrier'] = '3'; $product['id'] = '1'; $product['price'] = '399'; $shipping = '117'; include ("../_presta/config/settings.inc.php"); // nastavení databáze prestashopu (jen kvůli Cart Rules) if ($_GET['pf_cart_rule_free_gift'] == 'true') $_GET['pf_quantity']++; $product['total'] = $product['price'] * $_GET['pf_quantity']; //----------------- // CREATE/UPDATE Customer and Address $xml = $webService->get(array('resource' => 'customers', 'filter[email]' => $_GET['pf_email'], 'display' => '[id]', 'limit' => '1')); if ($id['customer'] = $xml->customers->customer->id){ // If e-mail registered UPDATE (Customer and Address) $xml = $webService->get(array('resource' => 'customers', 'id' => $id['customer'])); // UPDATE Customer $xml->customer->firstname = $_GET['pf_firstname']; $xml->customer->lastname = $_GET['pf_lastname']; $xml = $webService->edit(array('resource' => 'customers', 'id' => $id['customer'], 'putXml' => $xml->asXML())); $xml = $webService->get(array('resource' => 'addresses', 'filter[id_customer]' => '['.$id['customer'].']', 'display' => '[id]', 'limit' => '1')); $id['address'] = $xml->addresses->address->id; $xml = $webService->get(array('resource' => 'addresses', 'id' => $id['address'])); // UPDATE Address $xml->address->firstname = $_GET['pf_firstname']; $xml->address->lastname = $_GET['pf_lastname']; $xml->address->address1 = $_GET['pf_address1']; $xml->address->postcode = $_GET['pf_postcode']; $xml->address->city = $_GET['pf_city']; $xml->address->phone = $_GET['pf_phone']; $xml->address->id_country = $id['country']; $xml = $webService->edit(array('resource' => 'addresses', 'id' => $id['address'], 'putXml' => $xml->asXML())); } else { // If e-mail NOT registered CREATE (Customer and Address) $xml = $webService->get(array('url' => PS_SHOP_PATH.'/api/customers?schema=blank')); // CREATE Customer $xml->customer->firstname = $_GET['pf_firstname']; $xml->customer->lastname = $_GET['pf_lastname']; $xml->customer->email = $_GET['pf_email']; $xml->customer->newsletter = '1'; $xml->customer->optin = '1'; $xml->customer->active = '1'; $xml->customer->associations->groups->group->id = '3'; $xml = $webService->add(array('resource' => 'customers', 'postXml' => $xml->asXML())); $id['customer'] = $xml->customer->id; // ID of created customer $xml = $webService->get(array('url' => PS_SHOP_PATH.'/api/addresses?schema=blank')); // CREATE Address $xml->address->id_customer = $id['customer']; $xml->address->firstname = $_GET['pf_firstname']; $xml->address->lastname = $_GET['pf_lastname']; $xml->address->address1 = $_GET['pf_address1']; $xml->address->postcode = $_GET['pf_postcode']; $xml->address->city = $_GET['pf_city']; $xml->address->phone = $_GET['pf_phone']; $xml->address->id_country = $id['country']; $xml->address->alias = '-'; $xml = $webService->add(array('resource' => 'addresses', 'postXml' => $xml->asXML())); $id['address'] = $xml->address->id; // ID of created address } //------------- // CREATE Cart $xml = $webService->get(array('url' => PS_SHOP_PATH.'/api/carts?schema=blank')); $xml->cart->id_customer = $id['customer']; $xml->cart->id_address_delivery = $id['address']; $xml->cart->id_address_invoice = $id['address']; $xml->cart->id_currency = $id['currency']; $xml->cart->id_lang = $id['lang']; $xml->cart->id_carrier = $id['carrier']; $xml->cart->associations->cart_rows->cart_row->id_product = $product['id']; $xml->cart->associations->cart_rows->cart_row->quantity = $_GET['pf_quantity']; $xml = $webService->add(array('resource' => 'carts', 'postXml' => $xml->asXML())); $id['cart'] = $xml->cart->id; // ID of created cart //--------------- // SET Cart rules $pdo = new PDO("mysql:dbname="._DB_NAME_.";host="._DB_SERVER_, _DB_USER_, _DB_PASSWD_); $pdo->exec("set names utf8"); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $query = $pdo->prepare("INSERT into "._DB_PREFIX_."cart_cart_rule (id_cart, id_cart_rule) VALUES(?, ?)"); unset($pdo); $discounts = 0; if ($_GET['pf_cart_rule_free_shipping'] == 'true'){ $query->execute(array($id['cart'], "1")); $shipping = 0; } if ($_GET['pf_cart_rule_free_gift'] == 'true'){ $query->execute(array($id['cart'], "2")); $discounts += 399; } if ($_GET['pf_cart_rule_discount_code'] == 'true'){ $query->execute(array($id['cart'], "3")); $discounts += 80; } //-------------- // CREATE Order $xml = $webService->get(array('url' => PS_SHOP_PATH.'/api/orders?schema=blank')); $xml->order->id_customer = $id['customer']; $xml->order->id_address_delivery = $id['address']; $xml->order->id_address_invoice = $id['address']; $xml->order->id_cart = $id['cart']; $xml->order->id_currency = $id['currency']; $xml->order->id_lang = $id['lang']; $xml->order->id_carrier = $id['carrier']; $xml->order->payment = 'Dobírka'; $xml->order->module = 'cashondelivery'; $xml->order->total_discounts = $discounts; $xml->order->total_paid = $product['total'] + $shipping - $discounts; $xml->order->total_paid_real = '0'; $xml->order->total_products = $product['total']; $xml->order->total_products_wt = $product['total']; $xml->order->conversion_rate = '1'; $xml->order->associations->order_rows->order_row->product_id = $product['id']; $xml->order->associations->order_rows->order_row->product_quantity = $_GET['pf_quantity']; $xml = $webService->add(array('resource' => 'orders', 'postXml' => $xml->asXML())); $id['order'] = $xml->order->id; // ID of created order //-------------- // CHANGE Order State $xml = $webService->get(array('resource' => 'orders', 'id' => $id['order'])); $xml->order->current_state = '3'; $xml = $webService->edit(array('resource' => 'orders', 'id' => $id['order'], 'putXml' => $xml->asXML())); //-------------- // THANK YOU! header('Location: ../dekujeme.php'); exit; ?> Link to comment Share on other sites More sharing options...
AbdullahBasit Posted December 31, 2015 Share Posted December 31, 2015 Are you sure you need to write "putXml" instead of "postXml" ? Link to comment Share on other sites More sharing options...
AbdullahBasit Posted December 31, 2015 Share Posted December 31, 2015 Also, I'm putting id['id_carrier'] as my carrier id is 3. But it is not showing in backend instead all the fields are empty in order details (admin panel) Any leads? Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now