Jump to content

jonny008

Пользователь
  • Content Count

    139
  • Joined

  • Last visited

Posts posted by jonny008

  1. Ещё вопрос, если можно. 

    Не могу получить 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

    https://yadi.sk/i/hDnkem-1gZ-DIA

  2. В 25.11.2021 в 10:31, phukortsin сказал:

    1. Присланный материал датирован 2015 годом, с большой вероятностью в нем не все актуально.

    2. В присланном материале сказано: 

    Авторизационные данные могут быть переданы в запросе несколькими способами (способы указаны в порядке приоритета):  в HTTP-заголовке Authorization, в параметрах URL запроса.

    То есть даже в 2015 году приоритетно было использование HTTP-заголовка. Весьма вероятно, что к настоящему моменту второй метод устарел и не действует.

    3. Текущий online справочник Ямаркета явно более актуален, нежели индивидуально присланный материал. Если еще окажется, что Вам его прислали в 2015-2016 году, то вывод очевиден. 

    Всё верно вы написали. Это я не путёвый) Всё сделал. Спасибо за подсказку. 

  3. 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

     

    Я написал в поддержку Маркета. Скорее всего проблема на их стороне. 

     Всем спасибо за помощь. 

  4. 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. 

    https://yadi.sk/i/fqO0CTQ7sTxlEg

  5. 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

  6. 1 минуту назад, a13x сказал:

    Попробуйте в заголовках передать эти данные, может так сервер пропустит. Согласно документации можно в заголовке передать или в урле.

    Я вроде как и пытаюсь через URL передать запрос с авторизацией. Делал через HEADER. Но получил ответ что данный метод не поддерживается (перед этим менял в интерфейсе способ авторизации).  Ни с одним сервисом (OZON WB) не было столько проблем, сколько с ЯМ. 

  7. 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
    
    Тело
    Отсутствует
  8. Хочу добавить, то что запрос формируется с необходимыми параметрами.

    https://yadi.sk/i/-48UmtdTHgPyZg

    В интерфейсе Яндекс Маркета указан метод авторизации HTTP

    Все ключи и id_client проверил по 10 раз. 

    Скрипт выше, нужен для передачи статуса заказа через админку Симплы. 

    Может кто работал через этот метод? Если поможете решить проблему, выложу всё решение в Готовые. Если кто знает в чём причина и хочет денег за подсказку, то пишите в личку.

  9. Проблема с авторизацией. Завёл новый аккаунт. Добавил его в Администраторы магазина. Зарегистрировал новое приложение с доступом к Яндекс-Маркет. Получил 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);
        }
    
    }

     

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

     

    Требуется собрать данные с заказа и отправить его на сервер 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");
    }
    
  11. Подскажите пожалуйста. Можно ли автоматически отобразить изображение категории, при отсутствии картинки у категории любой фотографией товара из этой категории. Это вместо заглушки изображения категории. 

     

    Для примера:

     

    { 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}

     

  12. 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 и Сбербанк (на форуме продавец).  

  13. $_SESSION['last_1c_imported_product_num'] - переменная, которая УЖЕ используется и ее в новом функционале использовать нельзя.

    Заменяйте на что-то типа  $_SESSION['last_1c_imported_zakazs_num'].

     

    Дело было не в этом. Странно почему не встаёт в поле id поле из XML - Документ->Ид

×
×
  • Create New...