jonny008
-
Публикаций
143 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные jonny008
-
-
36 минут назад, Noxter сказал:
data: { data: data, brand_id: $('select[name="brand_id"]').val(), },
Здравствуйте Артём. Спасибо за подсказку, к сожалению результат тот же brand_id = 0.
Может я неправильно ловлю в import.php строкой $product['brand_id'] = $this->request->post('brand_id', 'integer');
Мысли уже закончились)
-
2 часа назад, Drake777 сказал:
в import.tpl в js еще надо определение brand_id
в ajax вы дописали
brand_id: brand_id,
а что это такое похоже не определили выше
Прошу прощения, не сначала выложил. Определение есть.
{if $filename} {capture name = 'scripts'} {literal} <script> (function(){ 'use strict'; var $progressBar = $('.import-progress-bar'), brand_id = '{/literal}{$brand_id}{literal}', $progressPercent = $('.import-progress-percent'), $result = $('.import-result'), $resultCounts = $('.import-result-counts'), percent = '0%', countAdded = 0, countUpdated = 0; function do_import(data, brand_id) { $.ajax({ url: 'ajax/import.php', method: 'post', data: { data: data, brand_id: brand_id, }, dataType: 'json', success: function (data) { for (var key in data.items) { console.log(data.items[key]) var $item = $('<div>', { class: 'import-result-item ' + data.items[key].status, html: [$('<a>', { class: 'import-result-name', text: data.items[key].product.name, href: 'index.php?module=ProductAdmin&id=' + data.items[key].product.id, target: '_blank' }),
-
Здравствуйте уважаемые форумчане)
Возникла потребность сделать импорт товаров с выбором бренда при импорте CSV.
Все необходимые бренды уже созданы.
Добавил в ImportAdmin.php
$brands = $this->brands->get_brands(); $this->design->assign('brands', $brands);
и в условии if($this->request->method('post'))
$brand_id = $this->request->post('brand_id', 'integer'); $this->design->assign('brand_id', $brand_id);
Далее в файле import.tpl в тегах form
<select name="brand_id" class="form-input"> <option value="0" data-name="" selected>Не указан</option> {foreach $brands as $brand} <option value="{$brand->id}" data-name="{$brand->name|escape}">{$brand->name|escape}</option> {/foreach} </select>
В этом же файле ниже, добавил brand_id:
function do_import(data, brand_id) { $.ajax({ url: 'ajax/import.php', method: 'post', data: { data: data, brand_id: brand_id, },
Далее в файле import.php (simpla/ajax/import.php)
Закомментировал
'brand'=> array('brand', 'бренд'),
и
if(!empty($item['brand'])) { $item['brand'] = trim($item['brand']); // Найдем его по имени $this->db->query('SELECT id FROM __brands WHERE name=?', $item['brand']); if(!$product['brand_id'] = $this->db->result('id')) // Создадим, если не найден $product['brand_id'] = $this->brands->add_brand(array('name'=>$item['brand'], 'meta_title'=>$item['brand'], 'meta_keywords'=>$item['brand'], 'meta_description'=>$item['brand'])); }
и добавил
$product['brand_id'] = $this->request->post('brand_id', 'integer');
Бренды не добавляются. Передаётся brand_id = 0. В чём может быть ошибка?
-
12 минут назад, phukortsin сказал:
А еще может оказаться, что надо использовать $request->order->id.Не совсем вас понял, где это использовать.
В таблице есть поле market_order_id
https://yadi.sk/i/JAWnPEEkxfaiJA
Все номера в порядке.
-
Ещё вопрос, если можно.
Не могу получить id заказа через через market_order_id (само значение есть)
в файле Orders изменил get_order на
/*Выборка конкретного заказа*/ public function get_order($id, $is_market_order = false) { if (empty($id)) { return false; } if ($is_market_order) { $where = $this->db->placehold('WHERE o.market_order_id=? ', intval($id)); } else if(is_int($id)) { $where = $this->db->placehold('AND o.id=? ', intval($id)); } else { $where = $this->db->placehold('AND o.url=? ', $id); }
Пытаюсь получить вот так:
$order = $simpla->orders->get_order($request['order']['id'], true);
['order']['id'] - есть в получаемом json'e
-
В 25.11.2021 в 10:31, phukortsin сказал:
1. Присланный материал датирован 2015 годом, с большой вероятностью в нем не все актуально.
2. В присланном материале сказано:
Авторизационные данные могут быть переданы в запросе несколькими способами (способы указаны в порядке приоритета): в HTTP-заголовке Authorization, в параметрах URL запроса.
То есть даже в 2015 году приоритетно было использование HTTP-заголовка. Весьма вероятно, что к настоящему моменту второй метод устарел и не действует.
3. Текущий online справочник Ямаркета явно более актуален, нежели индивидуально присланный материал. Если еще окажется, что Вам его прислали в 2015-2016 году, то вывод очевиден.
Всё верно вы написали. Это я не путёвый) Всё сделал. Спасибо за подсказку.
-
21 час назад, phukortsin сказал:
На стр
https://yandex.ru/dev/market/partner-marketplace-cd/doc/dg/concepts/authorization.html
сказано "Авторизационные данные передаются в HTTP-заголовке".
Не нахожу, где говорится про два способа, можете ссылочку дать?
Я руководствовался тем материалом, который прислал менеджер Яндекса
https://yadi.sk/i/kDF3SKFGDTY9kQ
7 стр.
Может что-то поменялось, но на бэкенде Яндекс-Маркет есть чёткое понятие метода авторизации: HEADER или URL. https://yadi.sk/i/fqO0CTQ7sTxlEg
Я написал в поддержку Маркета. Скорее всего проблема на их стороне.
Всем спасибо за помощь.
-
52 минуты назад, phukortsin сказал:
На стр
https://yandex.ru/dev/market/partner-dsbs/doc/dg/reference/put-campaigns-id-orders-id-status.html
сказано:Авторизационные данные передаются в HTTP-заголовке Authorization:
Если ресурс API вызван без авторизационных данных, сервер Маркета возвратит HTTP-статус 401 Unauthorized.Похоже, тут Ваш случай точно описан.
Вы почему-то эти авторизационные данные пихаете в URL, а не туда, куда инструкцией велено...В Яндекс Маркете предусмотрено два способа авторизации. HEADER и URL. В панели управления магазином ЯМ, выбрано именно URL.
-
1 час назад, a13x сказал:
$opts = array("http"=>array("method"=>"GET","header"=>"")); $context = stream_context_create($opts); $url = sprintf("https://api.partner.market.yandex.ru/v2/campaigns/%s/orders/%d/status.json?oauth_token=%s&oauth_client_id=%s", $this->settings->market_campaign_id, $id, $this->settings->market_oauth_token, $this->settings->market_oauth_client_id); $response = file_get_contents($url, false, $context); print_r($response);
а если так отправить запрос, что отвечает?
Unexpected end of content
-
Может нужно подождать после смены способа авторизации минут 30.
-
1 минуту назад, a13x сказал:
Попробуйте в заголовках передать эти данные, может так сервер пропустит. Согласно документации можно в заголовке передать или в урле.
Я вроде как и пытаюсь через URL передать запрос с авторизацией. Делал через HEADER. Но получил ответ что данный метод не поддерживается (перед этим менял в интерфейсе способ авторизации). Ни с одним сервисом (OZON WB) не было столько проблем, сколько с ЯМ.
-
4 минуты назад, a13x сказал:
Я не знаю в чём проблема, но в коде у вас явно ошибка есть
На скрине показа https://yadi.sk/i/WPYlUIMEobDBmg
если ответа нет то вы создаёте пустой объект, а в конце этот объект декодируете через json_decode. Это так не работает.
Правильнее будет написать не new stdClass() а "[]" и тогда json_decode вернет пустой массив.По данному коду я получаю 401 ошибку от Яндекс Маркета (Code:401, OAuth credentials are not specified). Но данные в запросе присутствуют, мало того, они ещё и верные (я про токен и client_id). Яндекс ничего не отвечает судя по логам.
Просто вот такой ответ:
ЗаголовокConnection: close Date: Tue, 23 Nov 2021 15:45:40 GMT
ТелоОтсутствует -
Хочу добавить, то что запрос формируется с необходимыми параметрами.
https://yadi.sk/i/-48UmtdTHgPyZg
В интерфейсе Яндекс Маркета указан метод авторизации HTTP
Все ключи и id_client проверил по 10 раз.
Скрипт выше, нужен для передачи статуса заказа через админку Симплы.
Может кто работал через этот метод? Если поможете решить проблему, выложу всё решение в Готовые. Если кто знает в чём причина и хочет денег за подсказку, то пишите в личку.
-
Проблема с авторизацией. Завёл новый аккаунт. Добавил его в Администраторы магазина. Зарегистрировал новое приложение с доступом к Яндекс-Маркет. Получил oauth ключ через id_client. Но получаю 401 ошибку. Ниже сам код. В чём может быть проблема? Пробовал создавать приложение через владельца магазина ,история та же.
<?php require_once('Simpla.php'); class MarketApi extends Simpla { public function change_order_status($id, $status, $reason = '') { if (empty($id) || empty($status)) { return false; } $url = "https://api.partner.market.yandex.ru/v2/campaigns/".$this->settings->market_campaign_id ."/orders/".$id."/status.json?oauth_token=".$this->settings->market_oauth_token ."&oauth_client_id=".$this->settings->market_oauth_client_id; echo $url."<BR>"; $data = array("order"=>array("status"=>$status)); if (!empty($reason)) { $data['order']['substatus'] = $reason; } $curl = curl_init($url); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json;charset=utf-8')); curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data)); $response = curl_exec($curl); $headers = curl_getinfo($curl); curl_close($curl); if ($headers['http_code'] != '200') { $response = (empty($response) ? new stdClass() : json_decode($response)); $response->error = (!isset($response->error) ? new stdClass() : $response->error); $response->error->code = (isset($response->error->code) ? $response->error->code : $headers['http_code']); return $response; } return json_decode($response); } }
-
подскажите пожалуйста,
Требуется собрать данные с заказа и отправить его на сервер 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"); }
-
Ребята, неужели никто не справится. Уверен, решение прописывается в ProductsView.php в 4 строки. Готов заплатить.
-
Кто поможет за деньги? Реально нужная доработка
-
а какое изображение товара подставлять: первое второе третье??
Если есть фото у первого товара, то его.
-
Подскажите пожалуйста. Можно ли автоматически отобразить изображение категории, при отсутствии картинки у категории любой фотографией товара из этой категории. Это вместо заглушки изображения категории.
Для примера:
{ if $c->image}<img src="{$config->categories_images_dir}"/>
{else}
<img src="<img src="{$product->image->filename|resize:200:200}" alt="{$c->name|escape}"/>"/>
{/if}
-
а в чем рип там код одинаковый?
Одинаковый.
-
Проблем с рипом шаблона от Аспро не будет? https://heat.centino-demo.ru/
-
https://yandex.ru/support/checkout/instructions/simpla.html
Кто-нибудь пробовал работать с этим модулем Яндекс Кассы?
Мне пришлось разбираться, с тем, что после оплаты при обратном переходе на сайт дает пустую страницу. Выяснилось, что в этом модуле какой-то умелец использует функцию orders->pay, которая, как давно известно, совсем не рабочая:
http://forum.simplacms.ru/topic/4520-%D0%B1%D0%B0%D0%B3-%D0%B2-%D0%B1%D0%B4-payment-date/
http://forum.simplacms.ru/topic/10756-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F-payorder-id/
И этот вызов дает такую ошибку...
Без передачи товарной корзины и работы без Онлайн Кассы (для России), можно нарваться на большой штраф от ФНС.Все эти модули уже как год не актуальны. С июня анонсируют ФФД 1.1 и убирают льготы для ИП (некоторые сферы бизнеса могли принимать платежи без передачи данных в ОФД). Пока есть только 2 рабочих решения WalletOne и Сбербанк (на форуме продавец).
-
Ерунда получится, сумма не сложится правильная. На примере с суммой заказа 100р 95р+комиссия 5% = 99.75р.
-
И callback.php закомментировать строки
if($amount != $simpla->money->convert($order->total_price, $method->currency_id, false) || $amount<=0) die("incorrect price\n");
Импорт товаров с выбором бренда при импорте
в Общие вопросы по функционалу и дизайну
Опубликовано
30 разных файлов и все без указания "Бренд", в каждом по 10000 строк. Для меня, было бы проще выбрать в выпадающем списке.