Kami Опубликовано 21 мая, 2020 Жалоба Поделиться Опубликовано 21 мая, 2020 подскажите пожалуйста, Требуется собрать данные с заказа и отправить его на сервер 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 чтоб товары подтянуть? Цитата Ссылка на сообщение Поделиться на другие сайты
jonny008 Опубликовано 21 мая, 2020 Жалоба Поделиться Опубликовано 21 мая, 2020 подскажите пожалуйста, Требуется собрать данные с заказа и отправить его на сервер 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"); } Цитата Ссылка на сообщение Поделиться на другие сайты
Kami Опубликовано 21 мая, 2020 Автор Жалоба Поделиться Опубликовано 21 мая, 2020 понял, но мне попроще бы, запрос просто отправлять как я выше сделал, тут все немного по другому Цитата Ссылка на сообщение Поделиться на другие сайты
newbember Опубликовано 24 мая, 2020 Жалоба Поделиться Опубликовано 24 мая, 2020 (изменено) 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 - вызываю на странице заказа, хмл формируются - складываются в папку, старая база по крону/по письму забирает заказы себе. Изменено 24 мая, 2020 пользователем newbember Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.