Перейти к содержимому


Фото
- - - - -

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


  • Чтобы отвечать, сперва войдите на форум
3 ответов в теме

#1 Kami

Kami
  • Пользователь
  • 390 сообщений
  • Откуда:Россия

Опубликовано 21.05.2020 - 13:23

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

 

Требуется собрать данные с заказа и отправить его на сервер 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 чтоб товары подтянуть?



#2 jonny008

jonny008
  • Пользователь
  • 128 сообщений

Опубликовано 21.05.2020 - 13:35

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

 

Требуется собрать данные с заказа и отправить его на сервер 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");
}


#3 Kami

Kami
  • Пользователь
  • 390 сообщений
  • Откуда:Россия

Опубликовано 21.05.2020 - 17:05

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



#4 newbember

newbember
  • Пользователь
  • 1 сообщений
  • Заказчик, Пользователь
  • Версия CMS:1.x
  • Откуда:Ukraine

Опубликовано 24.05.2020 - 13:14

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 - вызываю на странице заказа, хмл формируются - складываются в папку, старая база по крону/по письму забирает заказы себе.


Изменено: newbember, 24.05.2020 - 13:15





0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых