Jump to content

Отправить товары с заказом mysql


Recommended Posts

подскажите пожалуйста, 

 

Требуется собрать данные с заказа и отправить его на сервер CRM , в принципе данные заказа без проблем собрал которые нужны

$this->db->query("select id, phone, address, name, total_price, seats from __orders where in_crm=0 and id in(?@)", $ids);
$orders = $this->db->results();

Далее уже работаю с $orders

 

Ну и там уже данные в api/CRM.php отправляю в виде

 

 

    public function add_order_crm($data = array()) {
        $data = (array)$data;
        if (empty($data)) {
            return false;
        }
$xml = new SimpleXMLElement("<File><API>".$this->settings->key."</API><Method>newordercourier</Method></File>");
        $orders = $xml->addChild('Orders');
        $order = $orders->addChild('Order');
        $order->addAttribute('number', $data['id']);
        $order->addAttribute('phone1', $data['phone']);
        $order->addAttribute('address', $data['address']);
        $order->addAttribute('buyer', $data['name']);
        $order->addAttribute('summa', $data['total_price']);
        $order->addAttribute('assessedsumma', $data['total_price']);
        $order->addAttribute('seats', $data['seats']);
        $order->addAttribute('sitename', $this->config->root_url);      
        $order->addAttribute('shippingdate', date('dmY'));
        $order->addAttribute('test', 'yes');
        $xml = $xml->asXML();
        return (array)simplexml_load_string($this->request($xml));
    }

Тут же мне надо в форече передать список товаров ,арт - название - колво - цена .

 

 

<good  article = "A1"  name = "Товар 1"  cost = "2000"  amount = "1"/>

 

Как правильно сформировать запрос mysql чтоб товары подтянуть?

Link to post
Share on other sites

подскажите пожалуйста, 

 

Требуется собрать данные с заказа и отправить его на сервер CRM , в принципе данные заказа без проблем собрал которые нужны

$this->db->query("select id, phone, address, name, total_price, seats from __orders where in_crm=0 and id in(?@)", $ids);
$orders = $this->db->results();

Далее уже работаю с $orders

 

Ну и там уже данные в api/CRM.php отправляю в виде

 

 

    public function add_order_crm($data = array()) {
        $data = (array)$data;
        if (empty($data)) {
            return false;
        }
$xml = new SimpleXMLElement("<File><API>".$this->settings->key."</API><Method>newordercourier</Method></File>");
        $orders = $xml->addChild('Orders');
        $order = $orders->addChild('Order');
        $order->addAttribute('number', $data['id']);
        $order->addAttribute('phone1', $data['phone']);
        $order->addAttribute('address', $data['address']);
        $order->addAttribute('buyer', $data['name']);
        $order->addAttribute('summa', $data['total_price']);
        $order->addAttribute('assessedsumma', $data['total_price']);
        $order->addAttribute('seats', $data['seats']);
        $order->addAttribute('sitename', $this->config->root_url);      
        $order->addAttribute('shippingdate', date('dmY'));
        $order->addAttribute('test', 'yes');
        $xml = $xml->asXML();
        return (array)simplexml_load_string($this->request($xml));
    }

Тут же мне надо в форече передать список товаров ,арт - название - колво - цена .

 

 

<good  article = "A1"  name = "Товар 1"  cost = "2000"  amount = "1"/>

 

Как правильно сформировать запрос mysql чтоб товары подтянуть?

 

Формирую для 1C XML c заказами и товарами вот таким способом:

 

if($simpla->request->get('type') == 'sale' && $simpla->request->get('mode') == 'query') {
    $no_spaces = '<?xml version="1.0" encoding="utf-8"?>
        <КоммерческаяИнформация ВерсияСхемы="2.04" ДатаФормирования="' . date ( 'Y-m-d' )  . '"></КоммерческаяИнформация>';
    $xml = new SimpleXMLElement ( $no_spaces );
    
    $orders = $simpla->orders->get_orders(array('limit'=>300));
    //$currency = $simpla->money->get_currency();
    foreach($orders as $order) {
        $date = new DateTime($order->date);

        $doc = $xml->addChild ("Документ");
        $doc->addChild ( "Ид", $order->id);
        $doc->addChild ( "Номер", $order->id);
        $doc->addChild ( "Дата", $date->format('Y-m-d'));
        $doc->addChild ( "ХозОперация", "Заказ товара" );
        $doc->addChild ( "Роль", "Продавец" );
        $doc->addChild ( "Валюта", "руб" );//Вводится в зависимости от валюты в 1С
        $doc->addChild ( "Курс", "1" );
        $doc->addChild ( "Сумма", $order->total_price);
        $doc->addChild ( "Время",  $date->format('H:i:s'));
        $doc->addChild ( "Комментарий", $order->comment. 'Адрес доставки: '.$order->address);
        $doc->addChild ( "uuid", json_decode($order->payment_details, TRUE)['orderId']);
		if ($order->cancel_order == 1) {$doc->addChild ( "ОтказПокупки", 'true');}
			
		//$doc->addChild ( "ТочкаСамовывоза", $order->dostavka);
		
		

		
        // Контрагенты
        $k1 = $doc->addChild ( 'Контрагенты' );
        $k1_1 = $k1->addChild ( 'Контрагент' );
        $k1_2 = $k1_1->addChild ( "Ид", $order->name);
        $k1_2 = $k1_1->addChild ( "Наименование", $order->name);
        $k1_2 = $k1_1->addChild ( "Роль", "Покупатель" );
        $k1_2 = $k1_1->addChild ( "ПолноеНаименование", $order->name );

        //Представители
        $p1_1 = $k1_1->addChild ( 'Представители' );
        $p1_2 = $p1_1->addChild ( 'Представитель' );
        $p1_3 = $p1_2->addChild ( 'Контрагент' );
        $p1_4 = $p1_3->addChild ( "Отношение", "Контактное лицо" );
        $p1_4 = $p1_3->addChild ( "Ид", $order->name );
        $p1_4 = $p1_3->addChild ( "Наименование", $order->name);

        // Доп параметры
        $addr = $k1_1->addChild ('АдресРегистрации');
        $addr->addChild ( 'Представление', $order->address );
        $addrField = $addr->addChild ( 'АдресноеПоле' );
        $addrField->addChild ( 'Тип', 'Страна' );
        $addrField->addChild ( 'Значение', 'РОССИЯ' );// Для России значение РОССИЯ
        $addrField = $addr->addChild ( 'АдресноеПоле' );
        $addrField->addChild ( 'Тип', 'Регион' );
        $addrField->addChild ( 'Значение', $order->address );

        $contacts = $k1_1->addChild ( 'Контакты' );
        $cont = $contacts->addChild ( 'Контакт' );
        $cont->addChild ( 'Тип', 'ТелефонРабочий' );
        $cont->addChild ( 'Значение', $order->phone );
        $cont = $contacts->addChild ( 'Контакт' );
        $cont->addChild ( 'Тип', 'Почта' );
        $cont->addChild ( 'Значение', $order->email );


        $purchases = $simpla->orders->get_purchases(array('order_id'=>intval($order->id)));
		
        $t1 = $doc->addChild ( 'Товары' );
        foreach($purchases as $purchase) {
            if(!empty($purchase->product_id) && !empty($purchase->variant_id)) {
                $simpla->db->query('SELECT external_id FROM __products WHERE id=?', $purchase->product_id);
                $id_p = $simpla->db->result('external_id');
                $simpla->db->query('SELECT external_id FROM __variants WHERE id=?', $purchase->variant_id);
                $id_v = $simpla->db->result('external_id');

                // Если нет внешнего ключа товара - указываем наш id
                if(!empty($id_p)) {
                    $id = $id_p;
                } else {
                    $simpla->db->query('UPDATE __products SET external_id=id WHERE id=?', $purchase->product_id);
                    $id = $purchase->product_id;
                }

                // Если нет внешнего ключа варианта - указываем наш id
                if(!empty($id_v)) {
                    $id = $id.'#'.$id_v;
                } else {
                    $simpla->db->query('UPDATE __variants SET external_id=id WHERE id=?', $purchase->variant_id);
                    $id = $id.'#'.$purchase->variant_id;
                }

                $t1_1 = $t1->addChild ( 'Товар' );

                if($id) {
                    $t1_2 = $t1_1->addChild ( "Ид", $id);
                }

                $t1_2 = $t1_1->addChild ( "Артикул", $purchase->sku);

                $name = $purchase->product_name;
                if($purchase->variant_name) {
                    $name .= " $purchase->variant_name $id";
                }
                $t1_2 = $t1_1->addChild ( "Наименование", $name);
                $t1_2 = $t1_1->addChild ( "ЦенаЗаЕдиницу", $purchase->price*(100-$order->discount)/100);
                $t1_2 = $t1_1->addChild ( "Количество", $purchase->amount );
                $t1_2 = $t1_1->addChild ( "Сумма", $purchase->amount*$purchase->price*(100-$order->discount)/100);


                $t1_2 = $t1_1->addChild ( "Скидки" );
                $t1_3 = $t1_2->addChild ( "Скидка" );
                $t1_4 = $t1_3->addChild ( "Сумма", $purchase->amount*$purchase->price*(100-$order->discount)/100);
                $t1_4 = $t1_3->addChild ( "УчтеноВСумме", "false" );


                $t1_2 = $t1_1->addChild ( "ЗначенияРеквизитов" );
                $t1_3 = $t1_2->addChild ( "ЗначениеРеквизита" );
                $t1_4 = $t1_3->addChild ( "Наименование", "ВидНоменклатуры" );
                $t1_4 = $t1_3->addChild ( "Значение", "Товар" );

                //$t1_2 = $t1_1->addChild ( "ЗначенияРеквизитов" );
                $t1_3 = $t1_2->addChild ( "ЗначениеРеквизита" );
                $t1_4 = $t1_3->addChild ( "Наименование", "ТипНоменклатуры" );
                $t1_4 = $t1_3->addChild ( "Значение", "Товар" );
            }
        }

        // Доставка
        if($order->delivery_price>0 && !$order->separate_delivery) {
            $t1 = $t1->addChild ( 'Товар' );
            $t1->addChild ( "Ид", 'ORDER_DELIVERY');
            $t1->addChild ( "Наименование", 'Доставка');
            $t1->addChild ( "ЦенаЗаЕдиницу", $order->delivery_price);
            $t1->addChild ( "Количество", 1 );
            $t1->addChild ( "Сумма", $order->delivery_price);
            $t1_2 = $t1->addChild ( "ЗначенияРеквизитов" );
            $t1_3 = $t1_2->addChild ( "ЗначениеРеквизита" );
            $t1_4 = $t1_3->addChild ( "Наименование", "ВидНоменклатуры" );
            $t1_4 = $t1_3->addChild ( "Значение", "Услуга" );

            //$t1_2 = $t1->addChild ( "ЗначенияРеквизитов" );
            $t1_3 = $t1_2->addChild ( "ЗначениеРеквизита" );
            $t1_4 = $t1_3->addChild ( "Наименование", "ТипНоменклатуры" );
            $t1_4 = $t1_3->addChild ( "Значение", "Услуга" );
        }
		
		
            


        // Способ оплаты и доставки
        $s1_2 = $doc->addChild ( "ЗначенияРеквизитов");

        $payment_method = $simpla->payment->get_payment_method($order->payment_method_id);
        $delivery = $simpla->delivery->get_delivery($order->delivery_id);

        if($payment_method) {
            $s1_3 = $s1_2->addChild ( "ЗначениеРеквизита");
            $s1_3->addChild ( "Наименование", "Метод оплаты" );
            $s1_3->addChild ( "Значение", $payment_method->name );
        }
		
		if($order->paid == 1) {
            $s1_3 = $s1_2->addChild ( "ЗначениеРеквизита");
            $s1_3->addChild ( "Наименование", "Время оплаты" );
            $s1_3->addChild ( "Значение", $order->payment_date );
        }
		
		
        if($delivery) {
            $s1_3 = $s1_2->addChild ( "ЗначениеРеквизита");
            $s1_3->addChild ( "Наименование", "Способ доставки" );
            $s1_3->addChild ( "Значение", $delivery->name);
        }
        $s1_3 = $s1_2->addChild ( "ЗначениеРеквизита");
        $s1_3->addChild ( "Наименование", "Заказ оплачен" );
        $s1_3->addChild ( "Значение", $order->paid?'true':'false' );


        // Статус
        if($order->status_id == 1) {
            $s1_3 = $s1_2->addChild ( "ЗначениеРеквизита" );
            $s1_3->addChild ( "Наименование", "Статус заказа" );
            $s1_3->addChild ( "Значение", "Новый" );
        }
        if($order->status_id == 2) {
            $s1_3 = $s1_2->addChild ( "ЗначениеРеквизита" );
            $s1_3->addChild ( "Наименование", "Статус заказа" );
            $s1_3->addChild ( "Значение", "Принят" );
        }
        if($order->status_id == 3) {
            $s1_3 = $s1_2->addChild ( "ЗначениеРеквизита" );
            $s1_3->addChild ( "Наименование", "Статус заказа" );
            $s1_3->addChild ( "Значение", "На сборке" );
        }
        if($order->status_id == 4) {
            $s1_3 = $s1_2->addChild ( "ЗначениеРеквизита" );
            $s1_3->addChild ( "Наименование", "Статус заказа" );
            $s1_3->addChild ( "Значение", "Выполнен" );
        }
		if($order->status_id == 5) {
            $s1_3 = $s1_2->addChild ( "ЗначениеРеквизита" );
            $s1_3->addChild ( "Наименование", "Статус заказа" );
            $s1_3->addChild ( "Значение", "Удален" );
        }
		if($order->status_id == 6) {
            $s1_3 = $s1_2->addChild ( "ЗначениеРеквизита" );
            $s1_3->addChild ( "Наименование", "Статус заказа" );
            $s1_3->addChild ( "Значение", "Готов к выдаче" );
        }
		if($order->status_id == 7) {
            $s1_3 = $s1_2->addChild ( "ЗначениеРеквизита" );
            $s1_3->addChild ( "Наименование", "Статус заказа" );
            $s1_3->addChild ( "Значение", "Отправлен Почтой России" );
        }
		if($order->status_id == 8) {
            $s1_3 = $s1_2->addChild ( "ЗначениеРеквизита" );
            $s1_3->addChild ( "Наименование", "Статус заказа" );
            $s1_3->addChild ( "Значение", "Отправлен ТК" );
        }
    }

    header ( "Content-type: text/xml; charset=utf-8" );
    print "\xEF\xBB\xBF";

    print $xml->asXML ();
    //console_log($xml->asXML ());
    $simpla->settings->last_1c_orders_export_date = date("Y-m-d H:i:s");
}
Link to post
Share on other sites

:) понял, но мне попроще бы, запрос просто отправлять как я выше сделал, тут все немного по другому

Link to post
Share on other sites
public function save_to_xml($order_id) {
$order = $this->get_order(intval($order_id));
$purchases = $this->get_purchases(array('order_id'=>intval($order_id)));
$part_purchases = '';
foreach($purchases as $p)
$part_purchases .= '
<purchase>
<price>'.$p->price.'</price>
<amount>'.$p->amount.'</amount>
<sku>'.$p->sku.'</sku>
</purchase>';

$user_ident = ($order->user_id) ? $order->user_id : $order->email;
if($order->user_id) {
$user_infos = $this->users->get_user(intval($order->user_id));
$external_id = $user_infos->external_id;
} else {
$external_id = 0;
}
$text = simplexml_load_string(
'<order>
<id>'.$order->id.'</id>
<date>'.str_replace('-','', $order->date).'</date>
<total_price>'.$order->total_price.'</total_price>
<user_id>'.$user_ident.'</user_id>
<external_id>'.$external_id.'</external_id>
<purchases>'.$part_purchases.'</purchases>
</order>');
$text->asXml('xml/order_'.$order->id.'.xml');
}
 

 

 

в api/orders - вызываю на странице заказа, хмл формируются - складываются в папку, старая база по крону/по письму забирает заказы себе.

Edited by newbember
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...